¡Urgente! Una microcomputadora simple de un solo chip controla un termómetro DS18B20. La simulación de proteus no es posible. El diagrama y el programa de ensamblaje son los siguientes. Gracias~~~~~
Le ofrecemos un programa de referencia, también con controlador de chip de reloj
SCL2 BIT P1.3; //SCL2 se define como el tercer pin del puerto P1, conectado al pin ADC0831SCL.
SDA2 BIT P1.4; //SDA2 se define como el cuarto pin del puerto P1, conectado al pin ADC0831SDA
CS2 BIT P1.6; como el cuarto pin del pin de 4 bits del puerto P1, conectado al pin ADC0831CS
RST BIT P1.5; // Selección del chip DS1302, porque los dos chips usan el mismo pin de datos (SDA, SCL). ), por lo que debemos definirlo y configurar el chip DS1302, seleccione Apagar; de lo contrario, se producirá un conflicto
L_DISPLAY EQU 30H
L_TMPDATE1 EQU 38H segundos
L_TMPDATE2 EQU 39H; minutos
L_TMPDATE3 EQU 3AH ;Hora
L_TMPDATE4 EQU 3BH ;Día de la semana
L_TMPDATE5 EQU 3CH ;Día
L_TMPDATE6 EQU 3DH ;Mes
L_TMPDATE7 EQU 3EH ;Año
ORG 0100H
write_rtc_address: DB 80H,82H,84H,86H,88H,8aH, 8cH
read_rtc_address: DB 81H,83H,85H,87H, 89H,8bH,8dH
L_TIMER: DB 00H,59H,18H,01H,01H,01H,01H
TABLA: DB 3fH,06H,5bH,4fH,66H,6dH, 7dH,07H,7fH,6fH,40H
/****Tubo digital Yin 0-9 - tabla*/
ORG 0000H
LJMP PRINCIPAL
ORG 0200H
PRINCIPAL: MOV SP,#60H
CLR RST
LCALL SET_RTC ;Escribir valor inicial primero
M0: LCALL READ_RTC; Leer datos de tiempo en un bucle
MOV R0,#L_DISPLAY
MOV A,L_TMPDATE3; Dividir el tiempo en dos datos, horas y decenas Horas
MOV B,#16
DIV AB
MOV @R0,A ;Diez Horas
INC R0
MOV @R0,B ;Tiempo
INC R0
MOV @R0,#10 ;Agregar "-"
INC R0
MOV A,L_TMPDATE2 ; Igual que arriba
MOV B,#16
DIV AB p>
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV @R0 ,#10
INC R0
MOV A,L_TMPDATE1
MOV B,#16
DIV AB
MOV @R0,A
INC R0 p>
MOV @R0,B
MOV R0,#L_DISPLAY
MOV R7,# 8
PANTALLA DE LLAMADA LC
Y
SJMP M0
DISPLAY:MOV DPTR,#TABLE /*R0 es la dirección, R7 es el número*/
MOV P2,#0< / p>
ANL P1,#0F8H
L2: MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
MOV P2,#0
INC P1
INC R0
DJNZ R7,L2
RET
RETARDO: MOV R5,#20
D1: DJNZ R5,D1
RET
SET_RTC :MOV R6,#7 ;Transfiere 7 datos: segundos, minutos, horas, días de la semana, días, meses, años
MOV DPTR,#L_TIMER ;Los 7 datos iniciales se transfieren de la ROM a nuestra definición en RAM
MOV R0,#L_TMPDATE1
S0: CLR A
MOVC A,@A+DPTR
MOV @ R0 ,A
INC R0
INC DPTR
DJNZ R6,S0
MOV R1,#8EH
MOV R2,#0
LCALL W1302 ;Primero escriba la dirección 8EH en 0, que está desbloqueada, de lo contrario los datos no se pueden escribir
MOV R0,#L_TMPDATE1 ;La dirección donde los datos se guardan
p>MOV DPTR,#write_rtc_address ;La dirección de los datos escritos
MOV R6,#7 ;Escribe 7 datos: segundos, minutos, horas, días de la semana, días, meses, años p>
S1: MOV A,@R0
MOV R2,A
CLR A
MOVC A,@A+DPTR
MOV R1,A
LCALL W1302
INC DPTR
INC R0
DJNZ R6,S1
MOV R1,#8EH
MOV R2,#80H
LCALL W1302 ;;La última dirección escrita 8EH es 80H, es decir , se agrega un bloqueo para evitar que se escriban datos
RET
READ_RTC:MOV R6,#7 ;Leer 7 datos: segundos, minutos, horas, días de la semana, días , meses, años
MOV R0 ,#L_TMPDATE1 ;Guardar en la RAM definida
MOV DPTR,#read_rtc_address
RE0: CLR A
MOVC A,@A+DPTR
MOV R1,A
LCALL R1302
MOV @R0,A
INC DPTR
INC R0
DJNZ R6,RE0
RET
W1302B: MOV R7,#8; escritura de un solo byte, el parámetro R1 es los datos escritos
MOV A,R1
W0: RRC A
MOV SDA2,C
NOP
SETB SCL2
NOP
CLR SCL2
DJNZ R7,W0
RET
W1302: CLR RST ; Especifique la dirección para escribir datos, R1: dirección, R2: Datos
>
NOP
CLR SCL2
NOP
SETB RST
NOP
LCALL W1302B p>
MOV A,R2
MOV R1,A
LCALL W1302B
CLR RST
NOP
RET
R1302: MOV R2,#0; Especifique la dirección para leer los datos, R1: dirección, A: datos devueltos
CLR RST
NOP
CLR SCL2
NOP
SETB RST
NOP
LCALL W1302B
MOV R7,#8
CLR A
RR0: MOV C,SDA2 ;;Lectura de un solo byte, los datos leídos se almacenan en A y se envían
RRC A
SETB SCL2
NOP
CLR SCL2
DJNZ R7,RR0
CLR RST p >
NOP
CLR SCL2
NOP
SETB SCL2
NOP
CLR SDA2
NOP
SETB SDA2
NOP
RET
END