Red de conocimiento informático - Aprendizaje de código fuente - 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.

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 ;

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

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

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

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

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