Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo leer los parámetros de tiempo en el DS1302 al microcontrolador 51? Programa en lenguaje ensamblador, gracias.

¿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>

******************************************

; 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

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