Red de conocimiento informático - Espacio del host - ¡El experto en contestador automático que sabe cómo ensamblar el microcontrolador AT89S52 ya está aquí!

¡El experto en contestador automático que sabe cómo ensamblar el microcontrolador AT89S52 ya está aquí!

A continuación se muestra un programa de llamada automática. Le sugiero que instale un software Protues y continúe para simular el hardware.

LED1 EQU 30H; Definir tubo digital 1 para visualizar variables numéricas

LED2 EQU 31H; Definir tubo digital 2 para visualizar variables numéricas

LED3 EQU 32H; tubo digital 3 Mostrar variables numéricas

LED4 EQU 33H; Defina el tubo digital 4 para mostrar variables digitales

LedT0 EQU 34H Defina qué marca de tubo digital se muestra actualmente

ORG 0000H; Iniciar

LJMP START;Ingresar al programa principal

ORG 000BH;Ingresar la interrupción del temporizador 0

LJMP INT_TO

ORG 0030H

INICIO:

MOV SP,#60H;Inicializar puntero de pila

MOV TMOD,#01H;Establecer T0 en modo de temporización de 16 bits.

MOV TH0,#0F6H ;Inicializa el temporizador en 2.

MOV TL0,#03BH ;

SETB TR0 ;Inicia el conteo del temporizador 0

SETB ET0; Habilitar interrupción del temporizador 0

CLR TF0; Borrar indicador de interrupción del temporizador 0

SETB EA; Habilitar interrupción general

MOV LedT0, #1H; Inicialice el indicador LED para que el tubo digital 1 se muestre por primera vez en la interrupción

MOV DPTR, #TABLE Inicialice el puntero de datos DPTR

MAIN:

< p; >MOV LED1,#10h; Inicialice los valores de 4 tubos digitales y los 4 tubos digitales comenzarán a mostrar "".

MOV LED2,#10h

MOV LED3,#10h

MOV LED4,#10h

SCAN: ;Lazo principal, presione Presione SW5 una vez, el valor del tubo digital No. 4 aumenta en 1

JB P3.3, ¿tecla SCAN1?

CALL DELAY10MS ;Vaya ​​a la fluctuación del botón

JB P3.3,SCAN1 ;Confirmar nuevamente

MOV P1,#0FEH ;Encienda el LED del puerto P1

MOV LED3,#0H; Display 01 a los dos tubos digitales

MOV LED4,#1H

CPL P2.3 ;Sonido de zumbador

LLAMADA D100MS

CPL P2.3

LCALL SCAN4 ;Esperando borrar el estado de captura de llamadas

JNB P3.3,$ ;Esperando liberar el botón

SCAN1:

JB P3.4, SCAN2 ;¿Botón presionado?

CALL DELAY10MS ;Ir a fluctuación de tecla

JB P3.4,SCAN2 ;Confirmar nuevamente

MOV P1,#0FDH

MOV LED3,#0H

MOV LED4,#2H

CPL P2.

LLAMADA D100MS

CPL P2.3

LCALL SCAN4

JNB P3.4,$ ;Esperando para soltarme

SCAN2:

JB P3.5,SCAN3 ;¿Tienes una llave?

CALL DELAY10MS ;Ir a fluctuación de tecla

JB P3.5,SCAN3 ;Confirmar nuevamente

MOV P1,#0FBH

MOV LED3,#0H

MOV LED4,#3H

CPL P2.

LLAMADA D100MS

CPL P2.3

LCALL SCAN4

JNB P3.5,$ ;Esperando para soltarme

SCAN3:

JB P3.6,SCAN ;¿Tienes una llave?

CALL DELAY10MS ;Ir a fluctuación de tecla

JB P3.6,SCAN ;Confirmar nuevamente

MOV P1,#0F7H

MOV LED3,#0H

MOV LED4,#4H

CPL P2.3

LLAMADA D100MS

CPL P2.3

LCALL SCAN4

JNB P3.6,$ ;Esperar a soltar

LJMP SCAN

SCAN4: ;Lazo principal, tecla SW5 presionada una vez, el dígito 4 aumenta en 1

JNB P3.7,SCAN4 ;¿Hay alguna tecla presionada?

CALL DELAY10MS ;Ir a fluctuación de teclas

JB P3.7,SCAN4 ;Confirmar nuevamente

MOV P1,#0FFH

MOV LED3,#10

H

MOV LED4,#10H

CPL P2.3

LLAMADA D100MS

CPL P2.3

JNB P3.7,$ ;espera para soltar

LJMP SCAN

D100MS:

MOV R0,#10

D100 :CALL DELAY10MS

DJNZ R0,D100 <

RET

delay10ms:; función de retardo, retardo 10ms

mov r7,#20

d1:mov r6,#250

djnz r6,$

djnz r7,d1

ret

INT_TO: ;Controlador de interrupciones del temporizador 0. Controlador de interrupciones del temporizador 0

PUSH ACC ;Proteger campo

PUSH PSW

CLR TF0 ;Borrar indicador de interrupción del temporizador 0

MOV TH0, #0F6H ;Reinicializa el temporizador 2.5MS

MOV TL0,#03BH ;

MOV LED1 ;Si el bit de bandera es igual a 1, procesa la salida de visualización del tubo digital 1

MOVC A,@A+DPTR; Utilice el valor de la variable LED1 para obtener la tabla, de modo que la salida del tubo digital 1 sea el valor del tubo digital LED1

MOV P0,A; Cambie el valor de la tabla de búsqueda. El valor se envía al puerto P0, de modo que el valor de visualización del tubo digital 1 sea LED1

CLR P2.4 Encienda la pantalla LED1

>MOV LedT0,#2; Cambie el indicador LED a 2, la siguiente interrupción manejará la visualización LED2

LJMP INT_T0_END Salta a la posición final de la interrupción de la pantalla LED

INT_T0_2; :

MOV A,LedT0;Entregue LedT0 a A para que lo juzgue

CJNE A,#2,INT_T0_3 ;Si el bit de bandera no es igual a 2, salte al final de el programa de visualización del tubo digital 3

MOV A,LED2; el mismo proceso que el tubo digital 1

MOV A,@A+DPTR

MOV A ,@A+DPTR

MOV P0 ,A

CLR P2.5

MOV LedT0,#3 ;Cambia el bit de bandera del tubo digital a 3 , y la siguiente interrupción procesará la visualización del tubo digital 3

LJMP INT_T0_END

INT_T0_3:

MOV A,LedT0; tubo a A, que es LedT0. Entregue LedT0 a A para prepararse para el juicio.

CJNE A, #3, INT_T0_4 Si el bit de bandera no es igual a 3, salte al programa de visualización del tubo digital 4;

MOV A, LED3 ; El mismo procesamiento que el del tubo digital 0

MOVC A,@A+DPTR

MOV P0,A

CJNE A,@A+DPTR

CJNE A,@A+DPTR

MOV P0,A