El informe de trabajo de tecnología de interfaz proporciona un reloj de 1 M. Para fabricar un reloj electrónico con pantalla LED, se requieren tres chips: 8254, 8255 y 8259.
Espero que esto pueda ser útil
Programa de reloj del microcontrolador 51 (transferencia) ORG 0000H; Dirección de inicio de ejecución del programa
LJMP START Saltar a la etiqueta START para ejecución
p>
ORG 0003H ;Interrupción externa 0 entrada de programa de interrupción
RETI ;Interrupción externa 0 retorno de interrupción
ORG 000BH ;Entrada de programa de interrupción del temporizador T0
LJMP INTT0 ;Saltar a ejecución INTTO
ORG 0013H ;Interrupción externa 1 entrada de programa de interrupción
RETI ;Interrupción externa 1 retorno de interrupción
ORG 001BH; Entrada del programa de interrupción del temporizador T1
LJMP INTT1; Saltar a INTT1 para su ejecución
ORG 0023H; Dirección de entrada del programa de interrupción en serie
RETI; volver
p>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;
;; Programa principal;;
;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;;;;;
INICIO: MOV R0,#70H ;Borrar 70H-7AH***11 unidades de memoria
MOV R7,#0BH ;
CLEARDISP: MOV @R0,#00H ;
INC R0 ;
DJNZ R7,CLEARDISP ;
MOV 20H,#00H ;Borrar 20H (para logotipo)
MOV 7AH,#0AH ;Poner datos de "extintor"
MOV TMOD,#11H ;Supongamos T0 y T1 son temporizadores de 16 bits
MOV TL0,#0B0H ;valor inicial de temporización de 50MS (para temporización T0)
MOV TH0,#3CH ;valor inicial de temporización de 50MS
MOV TL1,#0B0H ;valor inicial de temporización de 50MS (temporización intermitente de T1)
MOV TH1,#3CH valor inicial de temporización de 50MS
SETB EA ;Interrupción total habilitada
SETB ET0 ;Permitir interrupción T0
SETB TR0 ;Habilitar temporizador T0
MOV R4,#14H ;Para temporización de 1 segundo Inicial valor (50MS×20)
INICIO1: LCALL DISPLAY; llame a la subrutina de visualización
JNB P3.7, SETMM1; gire el programa de ajuste de tiempo cuando el puerto P3.7 sea 0
p>SJMP START1 ; Volver a START1 cuando el puerto P3.7 es 1
SETMM1: LJMP SETMM ;Vaya al programa de ajuste de hora SETMM
;; ;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ; programa de cronometraje de 1 segundo;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
;Rutina de servicio de interrupción T0
INTT0: PUSH ACC; Protección de inserción del acumulador
PUSH PSW Protección de inserción de palabra;
CLR ET0 ;Desactivar habilitación de interrupción T0
CLR TR0 ;Apagar temporizador T0
MOV A,#0B7H ;Corrección de sincronización del tiempo de respuesta de interrupción
ADD A,TL0 ;Corrección de valor inicial bajo de 8 bits
MOV TL0,A;Reinstalar valor inicial (valor de corrección inferior de 8 bits)
MOV A,# 3CH;Corrección de valor inicial alto de 8 bits
ADDC A,TH0 ;
MOV TH0,A ;Recargar valor inicial (valor de corrección alto de 8 bits)
SETB TR0 ;Inicia temporizador T0
DJNZ R4, OUTT0 ;Salir después de que 20 interrupciones no hayan llegado
ADDSS: MOV R4,#14H ;Reasignar valor inicial después de 20 interrupciones (1 segundo )
MOV R0,#71H ;Apunta a la segunda unidad de sincronización (71H-72H)
ACALL ADD1 ;Llama al programa agregar 1 (agregar 1 segunda operación)
MOV A
,R3 ;Pon los segundos datos en A (R3 es una combinación de números decimales de 2 dígitos)
CLR C ;Borrar la bandera de acarreo
CJNE A,#60H,ADDMM ; p>
ADDMM: JC OUTT0; interrumpe la salida cuando son menos de 60 segundos
ACALL CLR0; borra la segunda unidad de sincronización a 0 cuando es mayor o igual a 60 segundos
MOV R0, #77H; Punto a minutos Unidad de cronometraje (76H-77H)
ACALL ADD1; agregue 1 minuto a la unidad de cronometraje de minutos
MOV A, R3;
CLR C; Borrar la bandera de acarreo
CJNE A,#60H,ADDHH;
ADDHH: JC OUTT0; Interrumpir la salida cuando sean menos de 60 minutos
p>ACALL CLR0; mayor o igual a 60 Borra las unidades de cronometraje de minutos y minutos a 0
MOV R0,#79H Señala la unidad de cronometraje de horas (78H-79H)
ACALL ADD1; Añade 1 hora a la unidad de cronometraje de horas
MOV A,R3 ;Poner datos en A
CLR C ;Borrar indicador de acarreo
CJNE A,#24H,HOUR ;
HOUR: JC OUTT0 ;Interrumpir la salida menos de 24 horas
ACALL CLR0 ;Borrar la unidad de temporización horaria a 0 si es mayor que o igual a 24 horas
OUTT0: MOV 72H,76H; cambia los datos de la unidad de cronometraje de minutos y horas cuando se interrumpe la salida. Mueve
MOV 73H,77H a la unidad de visualización correspondiente
;MOV 74H,78H ;
MOV 75H,79H ;
POP PSW ;Restaurar palabra de estado (pop)
POP ACC ;Restaurar acumulador p>
SETB ET0 ;Abrir interrupción T0
RETI ;Retorno de interrupción
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;;
;; Programa de ajuste de tiempo de parpadeo;;
;;;;;;;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Rutina de servicio de interrupción T1, utilizada para ajustar el flash de la unidad durante el ajuste del tiempo Instrucciones
INTT1: PUSH ACC; interrumpir la protección en el sitio
PUSH PSW;
MOV TL1, #0B0H; Valor inicial de temporización T1
MOV TH1, #3CH ;
DJNZ R2,INTT1OUT ;Interrupción de salida antes de 0,3 segundos (interrumpida 6 veces en 50 MS)
MOV R2 ,#06H ;Reinstalar durante 0,3 segundos Utilice el valor inicial para la temporización
CPL 02H; temporización de 0,3 segundos para invertir la bandera intermitente
JB 02H, FLASH1; la unidad de visualización "se apaga"
MOV 72H,76H ; Visualización normal cuando el bit 02H es 0
MOV 73H,77H ;
MOV 74H,78H ;
MOV 75H,79H ;
INTT1OUT: POP PSW ;Restaurar escena
POP ACC ;
RETI ;Interrumpir salida
FLASH1: JB 01H,FLASH2 ;01H Cuando el bit 01H es 0, los datos del "símbolo de extinción" se ponen en minutos
MOV 73H, 7AH ;Unidad de visualización (72H-73H), los subdatos no se mostrarán
MOV 74H,78H;
MOV 75H,79H;
Transferencia AJMP INTT1OUT para interrumpir y salir
FLASH2: MOVIMIENTO 72H,76H
;Cuando el bit 01H es 1, los datos del "símbolo de extinción" se colocan en la hora
MOV 73H, 77H ;Unidad de visualización (74H-75H), los datos de la hora no se mostrarán
MOV 74H, 7AH ;
MOV 75H,7AH ;
AJMP INTT1OUT ;Interrupción de transferencia y salida
;;;;;;;;; ;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;
;; >
;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;
ADD1: MOV A, @R0 ;Obtiene los datos de la unidad de temporización actual en 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 ;Coloca los datos de la dirección anterior en los cuatro bits inferiores de A
ADD A,#01H ;Sumar 1 a A
DA A ;Ajuste decimal
MOV R3,A ;Mover al registro R3
ANL A,#0FH ;Cambie los cuatro bits superiores a 0
MOV @R0,A ;Reemplace la dirección anterior Unidad
MOV A,R3 Recuperar los datos temporales en R3; p>
INC R0; Apunta a la unidad de dirección actual
SWAP A; Los cuatro bits superiores de los datos en A Intercambian con los cuatro bits inferiores
ANL A,# 0FH; cambia los cuatro bits superiores a 0
MOV @R0,A; coloca los datos en la unidad de dirección actual
RET ; /p>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;; ;;
;; Programa de limpieza;;;
;;;;;;;;;;;;;;;;; ;;;;;;;;; ;;;;;;;;;;;;;;;;
;Restablecer la unidad de temporización a cero
CLR0: CLR A ;Borrar acumulador
MOV @R0,A
;Borrar la unidad de dirección actual
DEC R0 ;Apuntar a la dirección anterior
MOV @R0,A ;Borrar la unidad de dirección anterior a 0
RET ; Devoluciones de subrutina
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; p>
;; Programa de ajuste del reloj;;
;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;;;
;Ingrese a este programa cuando se presione el botón de ajuste de tiempo
SETMM: cLR ET0 ; Apagar la interrupción del temporizador T0
CLR TR0 ;Cerrar el temporizador T0
LCALL DL1S ;Llamar al programa de retardo de 1 segundo
JB P3.7, CLOSEDIS ;Si el el tiempo de pulsación de la tecla es inferior a 1 segundo, apague la pantalla (ahorro de energía)
MOV R2, #06H Ingrese al estado de ajuste de tiempo y asigne el valor intermitente inicial
SETB ET1; ; Permitir interrupción T1
SETB TR1; Activar el temporizador T1
SET2: JNB P3.7, SET1; El puerto P3.7 es 0 (la tecla no se libera), espere p>
SETB 00H ;Se suelta la tecla, la marca parpadeante de ajuste de minutos se establece en 1
SET4: JB P3.7, SET3 ;Espera a que se presione la tecla
LCALL DL05S ;Retraso 0,5 segundos cuando se presiona la tecla
JNB P3. 7, SETHH Presione durante más de 0,5 segundos para ajustar el estado de la hora
MOV R0,#77H Presione durante menos de 0,5 segundos y agregar operación de 1 minuto
LCALL ADD1; llamada más 1 programa
MOV A,R3; obtener datos de la unidad de ajuste
CLR C; >
CJNE A,#60H,HHH; Ajustar datos de la unidad con 60 Comparar
HHH: JC SET4
;Ajuste los datos de la unidad inferiores a 60 y gire SET4
LCALL CLR0 ;Borre 0 cuando los datos de la unidad de ajuste sean mayores o iguales a 60
CLR C ;Borre la bandera de acarreo
AJMP SET4 ;Saltar al bucle SET4
CLOSEDIS: SETB ET0 ;Estado de ahorro de energía (el LED no se muestra). Activar interrupción T0
SETB TR0; Activar temporizador T0 (encender reloj)
CERRAR: JB P3.7, CERRAR No se presiona ningún botón, espere.
LCALL DISPLAY ;Cuando se presiona una tecla, ajusta la subrutina de visualización para retrasar la fluctuación
JB P3.7,CLOSE ;Es interferencia y regresa a CERRAR para esperar
WAITH: JNB P3.7, WAITH; Esperar a que se suelte la tecla
LJMP START1; Volver al programa principal (la pantalla LED de datos está encendida)
SETHH: CLR 00H; Borrar marca intermitente de minutos (ingrese el estado del ajuste de hora)
SETHH1: JNB P3.7, SET5; espere a que se suelte la tecla
SETB 01H Establezca el indicador de ajuste de hora en 1
SET6: JB P3.7, SET7; Espere a que se presione el botón
LCALL DL05S; Retraso de 0,5 segundos para presionar la tecla
JNB P3.7, SETOUT si; el tiempo de prensado es superior a 0,5 segundos
MOV R0, #79H ; si el tiempo de prensado es inferior a 0,5 segundos, agregue 1 hora de operación
LCALL ADD1 ; p>
MOV A,R3 ;
CLR C ;
CJNE A,#24H,HOUU ;Comparar datos de la unidad de temporización con 24
HOUU: JC SET6; Menos de 24, cambie al ciclo SET6
LCALL CLR0; Borre la operación 0 cuando sea mayor o igual a 24
AJMP SET6; p> SETOUT: JNB P3.7, SETOUT1; Ajustar el tiempo para salir del programa.
Espere a que se suelte la tecla
LCALL DISPLAY; Retraso en la reducción de jitter
JNB P3.7, SETOUT Está jitter, regrese a SETOUT y espere nuevamente
CLR 01H; Borrar marca de hora de ajuste
CLR 00H; Borrar marca de minutos
CLR 02H; Borrar marca intermitente
CLR TR1; >
CLR ET1 ;Apaga la interrupción del temporizador T1
SETB TR0 ;Enciende el temporizador T0
SETB ET0 ;Enciende la interrupción del temporizador T0 (se inicia el temporizador)
LJMP START1 ;Volver al programa principal
SET1: LCALL DISPLAY ;Llamar al programa de visualización (ajuste) cuando se suelta la tecla y esperar
AJMP SET2 ;Evitar que no haya reloj mostrar cuando se presiona la tecla
SET3: LCALL DISPLAY ; Se utiliza para mostrar el reloj mientras se espera que se presione el botón de minutos
AJMP SET4
SET5: LCALL DISPLAY ; Llama al programa de visualización (para ajustar la hora) mientras esperas a que se suelte el botón
p>AJMP SETHH1; Evita que se muestre el reloj cuando se presiona la tecla
> SET7: LCALL DISPLAY; Úselo para evitar que se muestre el reloj mientras se espera que se presione la tecla de hora
AJMP SET6
SETOUT1: LCALL DISPLAY Esperar a que se suelte la tecla al salir; ajuste del reloj
AJMP SETOUT ; Evita que no se muestre el reloj cuando se presiona la tecla
;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;
;; Programa de visualización;;
;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Unidad -75H con un tubo digital LED de seis dígitos. El puerto P1 emite datos de código de segmento y el puerto P3 realiza el control de escaneo. Cada tubo digital LED se enciende durante 1 MS y luego realiza un bucle bit a bit.
DISPLAY: MOV R1,#70H ;Apunta a la primera dirección de los datos de visualización
MOV R5,#0FEH ;Escanea el valor inicial de la palabra de control
PLAY: MOV A, R5 ;Escanear palabra en A
MOV P3,A ;Salida desde el puerto P3
MOV A,@R1 ;Obtener datos de visualización en A
MOV DPTR ,#TAB ;Obtener la dirección de la tabla de códigos de segmento
MOVC A,@A+DPTR ;Verificar el código de segmento correspondiente a los datos mostrados
MOV P1,A ;Pon el segmente el código en el puerto P1
p>LCALL DL1MS ;Pantalla 1MS
INC R1 ;Apunte a la siguiente dirección
MOV A,R5 ;Escanee el control palabra y colóquela en A
JNB ACC.5,ENDOUT ;Cuando ACC.5=0, una visualización finaliza
RL A ;Los datos en A se mueven circularmente hacia la izquierda
MOV R5,A ;Vuelva a colocarlo en R5
AJMP PLAY ;Regrese al bucle PLAY
ENDOUT: SETB P3.5 ;Una visualización finaliza, El puerto P3 se restablece
MOV P1,#0FFH ;El puerto P1 se restablece
p>RET ; Retorno de subrutina
TAB: DB 0C0H,0F9H,0A4H, 0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;* **Tabla de códigos del segmento Yang "0""1""2" "3""4""5""6 ""7" "8""9""apagado"
;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;
;; Programa de retraso ;;
;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Programa de retardo de 1MS, para programa de pantalla LED
DL1MS: MOV R6, #14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;Programa de retardo de 20MS , utilice la subrutina de visualización para mejorar el parpadeo de la pantalla LED
DS20MS: ACALL DISPLAY
ACALL DISPLAY
ACALL DISPLAY
RET p>
Programa de retardo, utilizado para juzgar la duración del tiempo de pulsación de tecla
DL1S: LCALL DL05S
LCALL DL05S
RET
p>DL05S: MOV R3,#20H ;8 milisegundos*32=0.196 segundos
DL05S1: PANTALLA LCALL
DJNZ R3,DL05S1
RET
END ;El programa finaliza