¿Cómo leer los parámetros de tiempo en el DS1302 al microcontrolador 51? Programa en lenguaje ensamblador, gracias.
SCLK BIT P1.0; puerto de reloj DS1302 P1.0
IO BIT P1.1; puerto de datos DS1302 P1.1
RST BIT P1.2 ; chip DS1302 seleccione el puerto P1.2
AHORA DATOS 40H
ORG 0
Reinicio JMP
ORG 100H
Restablecer:
CALL DS1302_Initial; Inicializar DS1302
MOV DPTR, #INIT
CALL DS1302_SetTime Establecer hora inicial
MOV R0; , #NOW
CALL DS1302_GetTime; Leer la hora actual
JMP $
INIT: // Segundos, minutos, horas, días, meses, semanas y años
DB 00H, 00H, 20H, 01H, 01H, 05H, 10H
; ********************** ******* *************
;Retraso X microsegundos (STC90C52RC@12M)
;Esta función necesita ser ajustada para diferentes entornos de trabajo
; Parámetro de entrada: R7
Parámetro de salida: Ninguno
;************* ********** ****************
Retraso: ;6 Esta función de retraso utiliza un ciclo de instrucción 1T para el cálculo, que es diferente del MCU tradicional de 12T
NOP; 1
NOP; 1
RET 4
; ******** *************************
Leer datos de 1 byte de DS1302
; Parámetros de entrada: Ninguno
;Parámetros de exportación: ACC
;********************* ********* ********
DS1302_ReadByte:
CLR A
PUSH 0
MOV 0, #8; Contador de 8 bits
ReadNext:
CLR SCLK; línea de reloj baja
NOP; > NOP
MOV C, IO; leer datos
RRC A; guardar datos
SETB SCLK; NOP
; Retraso en espera
NOP
DJNZ 0, ReadNext
POP 0
RET
;** * ***********************************
Escribir 1 byte en datos DS1302
; Parámetro de entrada: ACC
; Parámetro de salida: Ninguno
;****************** * ********************
DS1302_WriteByte:
PUSH 0
MOV 0, # 8 ; contador de 8 bits
WriteNext:
CLR SCLK; línea de reloj baja
Retraso en espera
NOP
p>RRC A; Sacar datos
MOV IO, C; Enviar al puerto
SETB SCLK alto
NOP; ; Retardo de espera
NOP
DJNZ 0, WriteNext
POP 0
RET
;*** ** **********************************
;Leer los datos de una determinada dirección de DS1302
p>; Parámetro de entrada: ACC (dirección)
; Parámetro de salida: ACC (leer datos)
;******* ***** ****************************
DS1302_ReadData:
CLR RST ; extraer chip seleccione bajo
NOP; espera retrasada
NOP
CLR SCLK; línea de reloj baja
NOP; /p>
NOP
SETB RST; habilitar selección de chip
NOP; demora en espera
NOP
CALL DS1302_WriteByte; dirección
CALL DS1302_ReadByte; Leer datos
RET
;********************* * ****************
; Escribir datos en una dirección de DS1302
; Parámetro de entrada: ACC (dirección) B( Datos por escribir)
; Parámetros de exportación: Ninguno
;************************ ** ****************
DS1302_WriteData
:
CLR RST; selección de chip de extracción baja
NOP; espera de retardo
NOP
extracción de línea de reloj baja
p>NOP; Espera retrasada
NOP
SETB RST; Habilitar selección de chip
Espera retrasada
NOP
CALL DS1302_WriteByte; Escribir dirección
MOV A, B; Enviar datos de dirección a ACC
CALL DS1302_WriteByte
RET
p>****************************************** p >
; Escribir hora inicial
; Parámetro de entrada: DPTR (dirección de valor inicial)
; Parámetro de salida: Ninguno
; ********************************
DS1302_SetTime:
MOV A, #8EH
MOV B, #0
CALL DS1302_WriteData; Permitir operación de escritura
MOV R7, #80H Iniciar desde el registro 80
p>MOV R6, #7; Escribe 7 veces seguidas
SetNext:
CLR A
MOVC A, @A DPTR p>
MOV B, A; datos
MOV A, R7; dirección
CALL DS1302_WriteData; escribir datos
INC R7
INC R7 Dirección de registro 2
INC DPTR Dirección de datos 1
DJNZ R6, SetNext
MOV A, #8EH
MOV B, #80H
CALL DS1302_WriteData Protección contra escritura
RET
;**************** ** **********************
; Leer la hora actual
; Parámetro de entrada: R0 (primera dirección de búfer de datos)
;Parámetros de exportación: Ninguno
;*************************** *** *********
DS1302_GetTime:
MOV R7, #81H; Iniciar desde el registro 81
MOV R6, #7; ; lectura continua 7
Tiempos
GetNext:
MOV A, R7; dirección
CALL DS1302_ReadData; leer datos
MOV @R0, A;
INC R7
INC R7; Dirección de registro 2
INC R0 Dirección de datos 1
DJNZ R6, GetNext
RET
;*************************************** ****
;Inicializar DS1302
;****************************** ******** ******
DS1302_Initial:
CLR RST
CLR SCLK
MOV A , #8EH
MOV B, #0
CALL DS1302_WriteData; Permitir operación de escritura
MOV A, #80H
MOV B, #0
CALL DS1302_WriteData; Inicio del reloj
MOV A, #90H
MOV B, #0A6H
CALL DS1302_WriteData Un diodo; + Carga de resistencia 4K
MOV A, #8EH
MOV B, #80H
CALL DS1302_WriteData protección contra escritura
RET
p>FIN