Acerca del programa de ensamblaje del reloj del microcontrolador (preferiblemente diagrama esquemático de ISIS 7) CORREO ELECTRÓNICO: 545939772@qq.com
Compile un programa, primero configure la hora del calendario del DS1302 en 2011-6-29?16:25:30 para comenzar y muestre la hora del calendario a través de la pantalla LCD en tiempo real.
Programación en lenguaje ensamblador:
¿T_RST? P1.2; ¿DS1302 restablece el pin de línea
bit T_CLK? P1.3; ¿Pin de línea de reloj DS1302?
¿T_IO? P1.4 ;PIN de línea de datos DS1302
RS BIT P1.7 ;Definición de línea de control LCD1602
RW BIT P1.6
E BIT P1.
;40h~46h almacena el valor inicial de "segundos, minutos, horas, días, meses, semanas, años"; el formato es coherente con el formato del registro
; 30h~3fh almacena los segundos, minutos, horas, días, meses, semanas y años leídos por 1302, el formato es el mismo que el del registro
;30h~3fh almacena los segundos, minutos. , horas, días y meses leídos por 1302 , semana, año; el formato es el mismo que en el registro
;30h~3fh almacena los segundos, minutos, horas, días, meses, semanas. , y años leídos hasta 1302.
El formato es el mismo que el registro
;************************************ ******** *******
ORG?0000H
AJMP PRINCIPAL
ORG?0030H
MAIN:MOV SP,# 50H
ACALL?INIT
MOV A,#80H ;Escriba la dirección inicial del búfer de visualización en la primera fila y columna, y comience a mostrar el fecha:
ACALL?
ACALL?WC51DDR
MOV A,#'A' ?
ACALL?WC51DDR
MOV A,# 'T'
ACALL?WC51DDR
MOV A,#'E'
ACALL? p> MOV A,#0C0H ;Escriba la dirección inicial del búfer de visualización como fila 2, columna 1 para iniciar la visualización TIME:
ACALL?WC51R
MOV A,#'T' ?
ACALL?WC51DDR
MOV A,#'I'
ACALL?WC51DDR
MOV A,#'M'
ACALL ?p>
MOV A,#':'
ACALL?WC51DDR
MOV?40H,#30h; 46h son los valores iniciales
MOV?41H,#25h
MOV?42H,#16h
MOV?43H,#29h
MOV?44H,#06h
MOV?45H,#03 ?
MOV?H,#11h
LCALL SET1302?;Escribir fecha 11-06 -29, hora 16 a DS1302 :25:30?Miércoles
REP:LCALL GET1302
MOV A,#86H ;Escriba la dirección inicial de la primera línea del búfer de visualización, y la séptima columna muestra la fecha actual
REP:LCALL GET1302
MOV A,#86H ;Escriba la dirección inicial de la primera línea del búfer de visualización, y la séptima columna muestra la fecha actual
REP :MOV?H,#03 ?WC51R
MOV A,#'2'?
ACALL?WC51DDR
MOV A,#'0' ?
¿ACALL?
MOV A,36H; Divide el año en decenas y unidades, convierte los caracteres para mostrar
MOV B, #10H
DIV?AB
¿AÑADIR?A,#30H
¿ACALL?WC51DDR?
MOV?A,B
¿AÑADIR?A,#30H
ACALL?WC51DDR
MOV A,#'-' ?
ACALL?WC51DDR ?
MOV A,34H ;mes dividido en decenas y dígitos , convertir visualización de caracteres
MOV B,#10H
DIV?AB
ADD?A,#30H
ACALL?WC51DDR ?
MOV?A,B
¿AÑADIR?A,#30H
ACALL?WC51DD
R
MOV A,#'-' ?
ACALL?WC51DDR ?
MOV A,33H ; Divida el día en decenas y unidades, convierta los caracteres Mostrar
MOV B,#10H
DIV?AB
¿AÑADIR?A,#30H
ACALL?WC51DDR ?
MOV?A,B
ADD?A,#30H
ACALL?WC51DDR
MOV A,#0c6H ;Escribir para mostrar el buffer El inicio La dirección de la hora actual se muestra en la posición inicial de la fila 2 y la columna 7
ACALL?MOV B,#10H
DIV?AB
ADD? A,#30H
¿ACALL?WC51DDR?
MOV?A,B
¿AÑADIR?A,#30H
ACALL ?WC51DDR
MOV A,#':' ?
ACALL?WC51DDR ?
MOV A,31H ;dividir en decenas y dígitos, convertir visualización de caracteres
MOV B,#10H
DIV?AB
¿AÑADIR?A,#30H
ACALL?WC51DDR ?
MOV?A,B
¿AÑADIR?A,#30H
ACALL?WC51DDR
MOV A,#':' ?
ACALL?WC51DDR ?
MOV A,30H ; Divida los segundos en decenas y unidades, convierta los caracteres para mostrar
MOV B,#10H
DIV ?AB
¿AÑADIR?A,#30H
¿ACALL?WC51DDR ?
MOV?A,B
¿AÑADIR?A,# 30H p>
ACALL?WC51DDR
MOV A,#'?
ACALL?WC51DDR ?
MOV A,35H ;Mostrar semana
AÑADIR?A,#30H
ACALL?WC51DDR
LJMP?REP
;ESCRIBIR subrutina
;Función: Escriba un byte de DS1302, el contenido de la escritura está en el registro B
;* ********************* **** *********************
ESCRIBIR: ?MOV?50h,#8? ;Un byte tiene 8 bits, desplazado 8 veces p>
INBIT1:?MOV?A,?B
RRC?A ; Cambio a CY a través de A
MOV?B,?A
MOV?T_IO,?C ?Mover al chip
SETB?T_CLK
CLR?T_CLK
DJNZ?50h,INBIT1 p>
RET
;************************************ ****** ***
;************************************ ***** **********************
;nombre de subrutina SET1302
<p> ;Función: Establece la hora inicial y el tiempo de inicio del DS1302
;Llamada: ESCRIBIR subrutina
;Parámetros de entrada: tiempo inicial segundos, minutos, horas, días, meses, semanas, año , la unidad es 40h~46h
;Parámetros de salida: Ninguno
;Recursos afectados: A?B?R0?R1?R4?R7?
* ******************************** **************** *** *******
SET1302:CLR?T_RST
CLR?T_CLK
SETB?T_RST
MOV?B, ?#8EH ;Palabra de comando de control
LCALL?WRITE
MOV B,?#00H ;Borrar el bit de protección contra escritura antes de la operación de escritura W
LCALL ?WRITE
SETB T_CLK
CLR T_RST
MOV R0,?#40H ?Segundos, minutos, horas, días, meses, en unidades de 40h a 46h Semanal y datos del año
MOV R7,?#7 ?***7 bytes
MOV R1,?#Escribe el segundo comando de registro
S13021:?T_RST
CLR?T_CLK
SETB?T_RST
¿MOV?WRITE?
MOV?A,?A, ?Escribir segundo dato
MOV?A
LCALL?WRITE
INC?R0 ;Apunta al siguiente calendario, escribe datos de reloj
INC?R1 ?R1 ;apunta al siguiente registro de calendario/reloj
INC?R1
SETB?T_CLK
CLR?T_RST
DJNZ? R7,?S13021 No completado, continúa escribiendo el siguiente
CLR?T_RST
CLR?T_CLK
SETB?T_CLK
R7,?S13021;ESCRIBIR?
SETB?#8EH ;Registro de control
LCALL?WRITE
MOV?B, ?#80H ;Escribir después Al ingresar, active el control de protección contra escritura y configure WP en 1
LCALL?WRITE
SETB?T_CLK
CLR?T_RST ;Finalizar proceso de escritura p>
RET
;************************************ ** *********************
;GET1302 nombre de subrutina
;Función:Leer tiempo desde DS1302 p >
;Llamada: ESCRIBIR subrutina de escritura, LEER subrutina
;Parámetros de entrada: Ninguno
;Parámetros de salida: segundos y minutos guardados en unidades de 30h~36h, hora, día, mes, semana, año
;Recursos afectados: A?B?R0?R1?R4?R7
;********** *** ************************************************* p>
GET1302:MOV ?R0,?#30H;
MOV R7,#7
MOV R1,#81H ?Comando de registro de cuenta regresiva
G13021:?CLR T_RST
CLR T_CLK
> SETB T_RST?
MOV B, ?R1 ; Escribir comando de registro de cuenta regresiva
LCALL ?WRITE?
LCALL ?READ
MOV ?@R0,A ;Almacenar los datos leídos
INC R0 ;Señalar la siguiente unidad de almacenamiento que guarda el calendario y el reloj
INC R1 ?INC R1
INC R1
SETB T_CLK?
CLR T_RST
DJNZ R7,?G13021 ;leer siguiente
RET
;Subrutina de inicialización de LCD
INIT: ?MOV?A,#00000001H ;Borrar pantalla
ACALL?WC51R
MOV A,#00111000B ; Utilice datos de 8 bits, muestre dos líneas, utilice fuente de 5×7
LCALL?WC51R
MOV A,#00001100B ;pantalla encendida, cursor apagado, los caracteres no parpadean WC51R? p>
LCALL?WC51R
MOV A,#00000110B? Los caracteres no se mueven, el cursor se mueve un fotograma hacia la derecha automáticamente
LCALL?WC51R
RET
;Comprobar subrutina ocupada
F_BUSY:PUSH?Live
MOV P2,#0FFH
CLR?RS
SETB?RW
ESPERAR: CLR E
SETB?E
JB P2.7,ESPERAR ?Ocupado,espera
POP?ACC ?No ocupado, reanudar sitio
RET
;Escribir subrutina de comando
WC51R:?ACALL?F_BUSY
CLR E
CLR?RS
CLR?RW
SETB?E
MOV?P2,ACC
CLR?E
RET
;Escribir subrutina de datos
WC51DDR :ACALL?F_BUSY
CLR E
SETB?RS
CLR?RW
SETB?E
MOV?P2,ACC
CLR?P2,ACC
¿CLR?