51 microcontrolador para hacer reloj electrónico digital
El programa fuente es el siguiente: ORG 0000H; Entrada de inicio del programa
LJMP START
ORG 0003H Interrupción externa 0 entrada del programa de interrupción
<; p> RETIORG 000BH; Entrada del programa de interrupción del temporizador T0
LJMP INTT0; Salto a ejecución INTTO
ORG 0013H Entrada del programa de interrupción 1 externa
p>RETI
ORG 001BH ; Entrada del programa de interrupción del temporizador T1
LJMP INTT1
ORG 0023H Dirección de entrada del programa de interrupción en serie
RETI
---------------Programa principal---------------------- ;
INICIO: MOV R0, #70H; 70 a R0, borre 70-7FH para mostrar la memoria
MOV R7, #0FH
CLEARDISP: MOV @ R0 , #00H; 0 almacena el número en R0 como la dirección en la memoria (70H)
INC R0
DJNZ R7, CLEARDISP
MOV 78H, # 2; la hora predeterminada es las 12:00, el despertador es las 5:00
MOV 79H, #1
MOV 74H, #2; evita que el tubo digital muestre 00 horas; al encender
MOV 75H, #1
MOV 66H, #1; cuando sale la interrupción, 66H es 1, los datos de la unidad de sincronización de minutos y horas se mueven a la memoria de video flag
MOV 68H, # 1; La alarma está activada de forma predeterminada después del encendido
MOV 7DH, #6; > MOV 7 canales, #3
MOV 69H, #0
MOV 7AH, #0AH; ponga los datos del "extintor"
MOV TMOD, #11H; establezca T0 y T1 como 16; temporizador de bits
MOV TL0, #0B0H; valor inicial de temporización de 50 MS (para temporización T0)
MOV TH0, #3CH
SETB EA;
SETB ET0; Permitir interrupción T0
SETB TR0; el temporizador T0 inicia el tiempo
MOV R4, #14H; el tiempo de 1 segundo usa el valor inicial (50MS ×20); )
INICIO1: PANTALLA LCALL; muestra subrutina
BIP DE LLAMADA; consulta de despertador
JNB P1.7, puerto SETTIME P1.7 es 0 Transferencia de hora; programa de ajuste de tiempo
JMP START1; volver a START1 cuando el puerto P1.7 es 1
------------------ ------Sistema de ajuste de hora del despertador--------------------------;
NFLAG: MOV A, 68H ;Establecer el estado del interruptor del despertador
CJNE A, #1, BEE68
MOV 68H, #0
JMP E6
BEE68 : MOV 68H, #1
E6: MOV 66H, #8; la salida de interrupción 66H no es 1 hora y minuto, los datos de la unidad de hora y minutos se mueven al indicador de memoria de video
MOV 72H, 7BH
MOV 73H, 7CH
MOV 74H, 7DH
MOV 75H, 7EH
LCALL DDL
LCALL DDL
MOV 72H, 68H
MOV 73H, 69H
MOV 74H, 7AH
MOV 75H, 7AH
LCALL DDL
LCALL DDL
MOV 66H, #1
LJMP START1
SETTIME: LCALL DDL
JB P1.7, NFLAG; el tiempo de pulsación de la tecla es inferior a 1 segundo, configure el estado del interruptor de alarma y verifique la hora de la alarma, no apague el tiempo de viaje para garantizar la precisión, ajuste de tiempo superior a 1 segundo
MOV TL1, #0B0H valor inicial de sincronización intermitente
MOV TH1, #3CH
MOV R2, #06H; ingrese el estado de tiempo de ajuste, asigne el valor inicial de tiempo intermitente
MOV 66H, #8; mantenga el tiempo de funcionamiento al ajustar el reloj de alarma, apague los datos de visualización del reloj
SETB ET1; permitir interrupción T1
SETB TR1; encender el temporizador T1
SET1: LCALL DISPLAY para evitar que no se muestre cuando se presiona la tecla
JNB P1.7, SET1; el puerto P1.7 es 0 y espera liberación de clave
MOV R5, #00H; indicador intermitente de tipo de configuración clara
SETN1: INC R5; ajuste de minutos
SET5: LCALL DISPLAY
JB P1.7, SET5
SEETN1: LCALL DDL cuando se presiona una tecla durante más de 1 segundo, el el tiempo sigue aumentando
(0,5 segundos más 1), estado de transposición de menos de 1 segundo
JB P1.7, SET6; consulta de liberación de tecla, transposición automática de liberación de tecla
MOV R0, #7CH
p>
LCALL ADD1
MOV A, R3
CLR C
CJNE A, #60H, HHN1
HHN1: JC SEETN1
LCALL CLR0
JMP SEETN1
SET6: INC R5; ajustar durante alarma
SEET6: LCALL DISPLAY
JB P1.7, SEET6
SEETNH1: LCALL DDL
JB P1.7, SETF
MOV R0, #7EH
LCALL ADD1
MOV A, R3
CLR C
CJNE A, #24H, HOUU1
HOUU1 : JC SEETNH1
LCALL CLR0
JMP SEETNH1
SETF: LCALL DISPLAY
JB P1.7, SETF
LCALL DDL
JNB P1.7, SETOUT, presione brevemente para ajustar, presione prolongadamente para salir
CLR ET0
CLR TR0
MOV
70H, #00H; el tiempo establecido comienza a partir de 00 segundos
MOV 71H, #00H
INC R5
SET3: LCALL DISPLAY
JB P1.7, SET3
SETMM: LCALL DDL
JB P1.7, SET4
MOV R0, #77H
LCALL ADD1
MOV A, R3
CLR C
CJNE A, #60H, MMH
MMH: JC SETMM
LCALL CLR0
AJMP SETMM
SET4: INC R5
SEET4: PANTALLA LCALL
JB P1, SEET4.
SETHH: LCALL DDL
JB P1.7, SETOUT1
MOV R0, #79H
LCALL ADD1
p >MOV A, R3
CLR C
CJNE A, #24H, HOUU
HOUU: JC SETHH
LCALL CLR0
AJMP SETHH
SETOUT1: SETB ET0
SETB TR0 inicios de cronometraje
SETOUT: MOV R5,
#00H ; Borrar indicador de flash de tipo de configuración
CLR TR1 ; Apagar T1
CLR ET1 ; Apagar interrupción T1
MOV 66H, #1
SETOUT2: PANTALLA DE LLAMADA
JNB P1.7, SETOUT2
LJMP START1
------------ --- ------------Retraso 1 segundo-----------------------
DDL : MOV 18H, #36
DDL0: MOV 17H, #239
DDL1: PANTALLA LCALL
DJNZ 17H, DDL1
DJNZ 18H , DDL0
RET
----------------------------T0 interrumpir programa - -----------------------;
INTT0: EMPUJAR ACC; Embalaje
EMPUJAR PSW
CLR ET0
CLR TR0
MOV A, #0B7H
AÑADIR A, TL0
MOV TL0, A
p>MOV A, #3CH
ADDC A, TH0
MOV TH0, A
SETB TR0
DJNZ R4 , OUTT0; Salir después de 20 interrupciones no han llegado
ADDSS: MOV R4, #14H; Reasignar valor inicial después de 20 interrupciones (1 segundo)
MOV R0, #71H ; apunta a la segunda unidad de cronometraje (70-71H)
ACALL ADD1; llama al programa agregar 1 (operación de agregar 1 segundo)
MOV A, R3; coloca los segundos datos en A (R3 es una combinación de números decimales de 2 dígitos)
CLR C; borrar bandera de transporte
CJNE A, #60H, ADDMM
ADDMM: JC OUTT01; salir en menos de 60 segundos
ACALL CLR0; si es igual o mayor que 60 segundos
MOV R0, #77H; apunta a la unidad de sincronización de minutos (76H-77H)
ACALL ADD1
MOV A, R3
CLR C
CJNE A, #60H, ADDHH
ADDHH: JC OUTT0
ACALL CLR0
MOV R0, #79H ; apunta a la unidad del contador de horas (78H-79H)
ACALL ADD1
MOV A, R3
CLR C
CJNE A, #24H, HORA
HORA: JC OUTT0
ACALL CLR0
OUTT0: MOV A, 66H; indicador de consulta
CJNE A, #1, OUTT01
MOV 72H, 76H; al salir, mueva los datos de la unidad de cronometraje de minutos y horas a la unidad de visualización correspondiente
MOV 73H, 77H
MOV 74H, 78H
MOV 75H, 79H
OUTT01: POP PSW pop
POP ACC
SETB ET0
;Abrir T0
RETI ;Interrumpir retorno
;--------------------------Agregar 1 Programa--------------------------;
ADD1: MOV A, @R0; obtiene los datos de la unidad de temporización actual A
DEC R0 ; Apunta a la dirección anterior
SWAP A ; Intercambia los cuatro bits superiores y los cuatro bits inferiores de los datos en A
ORL A; , @R0 ; Anterior Los datos de una dirección se colocan en los cuatro bits inferiores de A
ADD A, #01H;A más 1 operación
DA A
; p>MOV R3, A ; Pasar al registro R3
ANL A, #0FH ; Cambiar los cuatro bits superiores a 0
MOV @R0, A ; unidad de dirección anterior
MOV A, R3; recuperar los datos temporales en R3
INC R0; apuntar a la unidad de dirección actual
SWAP A; y los cuatro bits bajos de los datos en A
ANL A, #0FH; Los cuatro bits altos cambian a 0
MOV @R0, A Los datos se colocan en la dirección actual; unidad
RET
CLR0: CLR C
CLR A ; Borrar acumulador
MOV @R0, A Borrar dirección actual unidad <; /p>
DEC R0 ; apunta a la dirección anterior
p>MOV @R0, A la unidad de dirección anterior se borra a 0
>
RET; retorno de subrutina
; --------------------------Programa de parpadeo de tiempo---- - -----------------;
INTT1: EMPUJAR ACC
EMPUJAR PSW
MOV TL1, # 0B0H
MOV TH1, #3CH
DJNZ R2, INTT1OUT; interrupción de salida antes de 0,3 segundos (interrupción 6 veces en 50 MS)
MOV R2, #06H; el tiempo de 0,3 segundos con el valor inicial
CPL 02H; el tiempo de 0,3 segundos para invertir la bandera parpadeante
JB 02H, FLASH1 Cuando el bit 02H es 1, la unidad de visualización "gira"; apagado"
MOV A, R5
CJNE A, #01H, NL
JMP NNN1
NL: CJNE A, #02H , NL1
LJMP NNN1
NL1: CJNE A, #03H, NL2
LJMP NLL
NL2: CJNE A, #04H , INTT1OUT
LJMP NLL
NLL: MOV 72H, 76H
MOV 73H, 77H
MOV 74H, 78H
MOV 75H, 79H
AJMP INTT1OUT
NNN1: MOV 72H, 7BH
MOV 73H, 7CH
MOV 74H, 7DH
p>MOV 75H, 7EH
INTT1OUT: POP PSW; sitio de restauración
POP ACC
RETI
;Interrumpir salida
FLASH1: MOV A, R5
CJNE A, #01H, ML
LJMP MNN1
ML: CJNE A , #02H, ML1
LJMP MNN2
ML1: CJNE A, #03H, MN
LJMP MLL
MN: CJNE A , #04H, INTT1OUT
LJMP MHL
MLL: MOV 72H, 7AH
MOV 73H, 7AH unidad de visualización (72-73H), no será datos de puntos mostrados
MOV 74H, 78H
MOV 75H, 79H
AJMP INTT1OUT
MHL: MOV 72H, 76H
MOV 73H, 77H
MOV 74H, 7AH; unidad de visualización (74-75H), los datos de hora no se mostrarán
MOV 75H, 7AH
AJMP INTT1OUT
MNN1: MOV 72H, 7AH
MOV 73H, 7AH; unidad de visualización (72-73H), los datos de los minutos de la alarma no se mostrarán
MOV 74H, 7DH
MOV 75H, 7EH
AJMP INTT1OUT
MNN2: MOV 72H, 7BH
MOV 73H, 7CH
MOV 74H, 7AH
MOV 75H, 7AH; unidad de visualización (74-75H), los datos de la hora del despertador no se mostrarán
AJMP INTT1OUT
; -------------------------mostrar------------------- ----- -------;
PANTALLA: MOV DPTR, #DIS
DATOS
MOV A, 70H
MOVC A, @A DPTR
MOV P3, A
CLR P1.0
NOP
NOP
NOP
SETB P1.0
MOV A, 71H
MOVC A, @A DPTR
MOV P3, A
CLR P1.1
NOP
NOP
NOP
SETB P1.1
MOV A, 72H
MOVC A, @A DPTR
MOV P3,A p> p>
CLR P1.2
NOP
NOP
NOP
SETB P1.2
MOV A, 73H
MOVC A, @A DPTR
MOV P3, A
CLR P1.3
NOP
p>NOP
NOP
SETB P1.3
MOV A, 74H
MOVC A, @A DPTR
MOV P3, A
CLR P1.4
NOP
NOP
NOP
SETB P1.4
MOV A, 75H
MOVC A, @A DPTR
MOV P3,A
CLR P1 .5
NOP
NOP
NOP
SETB P1.5
RET
BEEP: MOV A, 68H; consultar bandera
CJNE A, #1, BEERE
MOV A, 78H; consultar el dígito de las unidades del despertador
CJNE A, 7DH, BEERE
MOV A, 79H Consulta las decenas del despertador
CJNE A, 7EH, BEERE
MOV A, 76H ; consultar el despertador dividido en unidades dígitos
CJNE A, 7BH, BEERE
MOV A, 77H consultar el despertador dividido en decenas dígitos
CJNE A; , 7CH, BEERE
BB: CLR P1.6
LCALL DDL
SETB P1.6
LCALL DDL
JNB P1.7, BEERR
BEERE: RET
BEERR: SETB P1.6
MOV 68H, #0
PANTALLA LCALL
JNB P1.7, BEERR
JMP BEERE
DISDATA: DB 0C0H, 0F9H, 64H, 70H, 59H, 52H, 42H, 0F8H , 40H, 50H, 0FFH; 0123456789 En blanco
FIN