Red de conocimiento informático - Conocimiento de la instalación - ¡Pregunta por el lenguaje ensamblador de un contestador automático de ocho vías diseñado con el microcontrolador AT89C51, para que pueda mostrar 8 luces LED! ! Gracias

¡Pregunta por el lenguaje ensamblador de un contestador automático de ocho vías diseñado con el microcontrolador AT89C51, para que pueda mostrar 8 luces LED! ! Gracias

ORG?0000H

AJMP?MAIN

ORG?0003H

AJMP?INT0SUB

ORG?000BH

AJMP?T0INT

ORG?001BH

AJMP?T1INT

OK?EQU?20H?;Responder bandera de inicio

p>

RINGEQU?22H; Bandera de timbre

ORG?0040H

MAIN:?MOV?R1,#0FH;?El tiempo de respuesta inicial es de 15 s

MOV?R2,#0AH;?El tiempo de respuesta inicial es 10s

MOV?TMOD,#11H;?Establecer temporizador/modo 1

MOV?TH0 ,#0F0H

MOV?TL0,#0FFH;?Cuanto mayor sea la frecuencia del sonido, más nítido será

MOV?TH1,#3CH

MOV? TL1 ,#0B0H;?50ms es una interrupción por desbordamiento

SETB?EA

SETB?ET0

SETB?ET1

SETB? EX0

SETB?EX1;?Permitir cuatro interrupciones, T0/T1/INT0/INT1

CLR?OK

CLR?RING

SETB?TR1

SETB?TR0;? Ejecute el temporizador desde el principio para comenzar a mostrar FFF. Si desea volver a contar, simplemente reinicie TH1/TL1

// Consultar programa. :

INICIO:MOV?R5,#0BH MOV?R4,#0BH MOV?R3,#0BH ACALL?DISPLAY;?Muestra FFF cuando no se inicia la respuesta JB?P3.0,NEXT ACALL? JB?P3.0,NEXT;Antirrebote, si se presiona la "tecla Inicio", ejecute hacia abajo, de lo contrario saltará a la consulta de respuesta ilegal ACALL?BARK;Sonido del botón MOV?A,R1 MOV?R6,A;?Enviar R1->R6, porque R1 guarda el tiempo de respuesta SETB?OK;?El indicador de respuesta se utiliza en el programa COUNT para determinar si se debe consultar el MOV de respuesta?R3,#0AH;?La respuesta solo muestra el tiempo y el número de números extinguidos es AJMP?COUNT ;Ingrese al programa de cuenta regresiva, "Consultar el programa de respuesta efectiva" en COUNT

NEXT:JNB?P1.0,FALSE1 JNB?P1.1,FALSE2 JNB?P1.2 ,FALSE3 JNB?P1.3 ,FALSE4 JNB?P1.4,FALSE5 JNB?P1.5,FALSE6 JNB?P1.6,FALSE7 JNB?P1.7,FALSE8 AJMP?START

//Ilegal controlador de respuesta:

FALSE1:?ACALL?BARK;?Sonido del botón

MOV?R3,#01H

AJMP?ERROR

FALSE2:?ACALL?BARK

MOV?R3,#02H

AJMP?ERROR

FALSE3:?ACALL?BARK

MOV ?R3,#03H

AJMP?ERROR

FALSE4:?ACALL?BARK

MOV?R3,#04H

AJMP? ERROR

FALSE5:?ACALL?BARK

MOV?R3,#05H

AJMP?ERROR

FALSE6:?ACALL?BARK

MOV?R3,#06H

AJMP?ERROR

FALSE7:?ACALL?BARK

MOV?R3,#07H

AJMP?ERROR

FALSE8:?ACALL?BARK

MOV?R3,#08H

AJMP?ERROR

//Programa de cuenta regresiva (incluido el programa de respuesta válido): COUNT:?MOV?R0,#00H;?Restablecer temporizador de interrupción MOV?TH1,#3CH MOV?TL1,#0B0H;?Restablecer temporizador

RECOUNT:?MOV?A,R6 ;R6 guarda el tiempo de cuenta regresiva MOV?B,#0AH DIV?AB;?Divide diez y el dígito de las unidades/decenas es MOV?30H,A;El dígito de las decenas se almacena en (30H) MOV?31H,B;El dígito de las unidades se almacena en ( 31H) MOV?R5,30H?;?Tome el dígito de las decenas MOV?R4,31H?;?Tome el dígito de las unidades MOV?A,R6 CLR?C SUBB?A,#07H JNC?LARGER;Si es mayor que 5s , salte a MÁS GRANDE, si es menor o igual a Recordará MOV?A,R0 CJNE?A,#0AH,FULL en 5 segundos y se ejecutará hacia abajo durante 0,5 segundos en 1 segundo CLR?RING AJMP?CHECK

FULL:CJNE?A,#14H,CHECK?;? 1s, suena y muestra el número y borra R0, vuelve a cronometrar SETB? RING MOV? A, R6 JZ? DEC? R6; Marca de un segundo menos 1 AJMP? CHECK

LARGER:MOV?A,R0 CJNE?A,#14H,CHECK; display" DEC?R6; R6 disminuye automáticamente en 1 después de un segundo. MOV?R0, #00H

CHECK:JNB?P3.1,QUIT;?Si presiona la tecla detener para salir ACALL?DISPLAY P1.0, VERDADERO1? JNB? P1.1, VERDADERO2 JNB? P1.2, VERDADERO3 JNB? P1.3, VERDADERO4 JNB? P1.4, VERDADERO5 JNB? P1.5, VERDADERO6 JNB? P1.6, VERDADERO7 JNB?P1.7,TRUE8 AJMP?RECOUNT

SALIR:?CLR ?OK;?Si se presiona la "tecla de parada", se regresa al inicio CLR?RING ACALL?BARK AJMP?START

//Programa de procesamiento de respuesta normal:

TRUE1:?ACALL ?BARK;?Sonido del botón

MOV?A,R2

MOV?R6 ,A;?R2 le dará R6 después del tiempo de respuesta

MOV?R3,#01H

CLR?OK;?

AJMP?LOOP2

TRUE2:ACALL?BARK;

MOV?A,R2

MOV?R6,A

MOV?R3,#02H

CLR?OK

AJMP?LOOP2

TRUE3 :ACALL?BARK;

MOV?A,R2

MOV ?R6,A

MOV?R3,#03H

CLR ?OK

AJMP?LOOP2

TRUE4:ACALL?BARK;

MOV?A,R2

MOV?R6,A

MOV?R3,#04H

CLR?OK

AJMP?LOOP2

TRUE5:?ACALL?BARK;

MOV?A,R2

MOV?R6,A

MOV?R3,

#05H

CLR?OK

AJMP?LOOP2

TRUE6:?ACALL?BARK;

MOV?A,R2

MOV?R6,A

MOV?R3,#06H

CLR?OK

AJMP?LOOP2

TRUE7:?ACALL?BARK;

MOV?A,R2

MOV?R6,A

MOV?R3,#07H

CLR?OK

AJMP?LOOP2

TRUE8:?ACALL?BARK;

MOV?A,R2

MOV?R6 ,A

MOV?R3,#08H

CLR?OK

AJMP?LOOP2

LOOP2:?AJMP?DISPLAY; Detenga el cronometraje y espere el retorno

SETB?RING

JNB?P3.1?,?QUIT

AJMP?LOOP2

/ /Programa de respuesta incorrecta:

ERROR:?SETB?RING;Anillo incorrecto

MOV?R5,#0BH

MOV?R4,#0BH;? FF y número de falta

LOOP3:?ACALL?DISPLAY

JNBP3.1?,?QUIT1 Esperar a que se presione la tecla "stop"

AJMP?LOOP3?

QUIT1:?CLR?RING

CLR?OK

AJMP?START

//Programa de visualización:

DISPLAY:MOV?DPTR,#DAT1;?Programa de visualización de tabla de búsqueda, que utiliza el puerto P0 como salida del puerto de selección de código de segmento/P2 bajo tres bits como salida de selección de código de bits

MOV? A,R5

MOVC?A,@A+DPTR

MOV?P2,#01H

MOV?P0,A

ACALL?DELAY

MOV?DPTR,#DAT2

MOV?A,R4

MOVC?A,@A+DPTR

MOV?P2 ,#02H MOV?P0,A ACALL?DELAY MOV?A,R3 MOVC?A,@A+DPTR MOV?P2,#04H MOV?P0,A ACALL?DELAY RET

DAT1 :DB? 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;"Destruir","1","2","3", "4", "5", "6", "7", "8", "9", "aniquilación", "F"

DAT2:DB?3FH,?06h,5bh,4fh ,66h, 6dh,7dh,07h,7fh,6fh,00H,71H

DELAY1:?MOV?35H,#08H

LOOP0:?ACALL?DISPLAY

DJNZ ?35H,LOOP0

RET

//Retraso (usado para visualización y eliminación de rebotes):

DELAY:?MOV?32H,#12H

p>

BUCLE:MOV?33H,#0AFH

BUCLE1:?DJNZ?33H,LOOP1

DJNZ?32H,BUCLE

RET

p>

//Programa de sonido: BARK:SETB?RING

ACALL?DELAY1

ACALL?DELAY1

?ACALL? DELAY1

?ACALL?DELAY1

<

p>CLR?RING; sonido del botón

RET

//INT0 (programa de ajuste del tiempo de respuesta R1): INT0SUB:MOV?A,R1

MOV? B,#0AH

DIV?AB

MOV?R5,A

MOV?R4,B

MOV?R3,# 0AH

ACALL?DISPLAY; Primero muestra R1 en los dos LED de tiempo

JNB?P3.2, INC0;?P3.2 es la tecla +1s. Si se presiona, se activará. saltar a INCO

JNB?P3.3,DEC0;?P3.3 es la tecla -1s. Si se presiona, salta a DECO

JNB?P3.4,BACK0; ?P3.4 Es la tecla de confirmación, si se presiona salta a BACKO

AJMP?INT0SUB

INC0:MOV?A,R1

CJNE?A ,#63H,ADD0; ?Si no es 99, suma 1 a R2. Si llega a 99, establece R1 en 0 y súmalo nuevamente

MOV?R1,#00H

<. p>ACALL?DELAY1

AJMP?INT0SUB

ADD0:INC?R1

ACALL?DELAY1

AJMP?INT0SUB

DEC0:MOV?A ,R1

JZ?SETR1;Si R1 es 0,?R1 se establece en 99,

DEC?R1

ACALL?DELAY1

AJMP?INT0SUB

SETR1:?MOV?R1,#63H

ACALL?DELAY1

AJMP?INT0SUB

BACK0:? RETI

//TO interrupción de desbordamiento (programa de anillo):

T0INT:MOV?TH0,#0ECH MOV?TL0,#0FFH JNB ?RING,OUT CPL?P3.6 ?;Cuando el indicador RING es 1, el puerto P3.6 no está corto y la inversión hace que el altavoz emita un sonido de cierta frecuencia

OUT:? RETI

//Interrupción por desbordamiento T1 (programa de temporización):

T1INT:?MOV?TH1,#3CH

MOV?TL1,#0B0H

INC?R0

RETI FIN