Instrucciones de análisis del ensamblador para la sincronización del cálculo del microcontrolador.
SHUZHI EQU 58H; Nombre 58H SHUZHI
ORG 0000H
AJMP MAIN El programa salta a MAIN
ORG 0030H; El programa del microcontrolador generalmente comienza desde la dirección 0030H y se ejecuta hacia abajo
PRINCIPAL: MOV P1, #0FFH; inicialización, configurando los puertos P1 y P3 en nivel alto (esto está relacionado con la protección de las E/S del microcontrolador). puerto relacionado); punto SP a 60H
MOV P3, #0FFH;
MOV SP, #60H
CLR EA; /p>
CLR ES; Deshabilitar las interrupciones del puerto serie
MOV R6, #10; Asignar R6 #10
MOV R7, #20; >
MOV P3, #0C0H; configurar el puerto P3 en C0H. P3 parece estar relacionado con la pantalla (porque no hay diagrama de hardware), ese es el contenido de la pantalla inicial
MOV R0, #00H; establezca R0 en 00H
MOV R1, #00H; asigne R0 a 00H
MOV A, #00H; asigne el acumulador A a 00H (las tres oraciones anteriores están todas en el registro de inicialización)
MOV SHUZHI, #00H; asigna 58H como 00H (se deben contar 58H)
MOV DPTR, #TABLE; envía #TABLE a DPTR, que apunta al tabla, para el siguiente MOVC A, @A DPRT. Llame al formulario para la inicialización.
BUCLE: JNB P1.0, JIAYI; salte si P1.0 no es igual a 1, continúe juzgando si es igual a 1. (Esto debería ser un tipo de interruptor. Cuando se presiona, será 0 y saltará)
AJMP LOOP
JIAYI: JNB P1.0, $ determina si P1.0 es; no Si es igual a 1, continuará juzgando, si es igual a 0, retrasará y continuará el siguiente programa (el significado aquí es juzgar si se ha liberado el interruptor)
LCALL DELAY; extiende el tiempo una vez y llama a la subrutina de extensión
MOV A, SHUZHI; envía 58H a A
INC A; aumenta el contenido en el registro A en 1
MOV SHUZHI, A; A devuelve 58H (el significado aquí significa que el recuento aumenta en 1)
MOVC A, @A DPTR la primera vez que presiona el interruptor es A=; 01H, luego C0H se envía a A
MOV P3, A envía C0H al puerto P3, lo que debería mostrarse
CLR P1.1; .
CLR P1.3; enciende la luz B.
MOV TMOD, #00000001B; El temporizador/contador 0 funciona en modo 1
FENZHONG: MOV R7, #20; Asignar R7 #20
CONGLAI: MOV TH0, #3CH; Asigna el valor inicial a los 8 bits altos del temporizador 0
MOV TL0, #0B0H; Asigna el valor inicial a los 8 bits bajos
SETB TR0; en la interrupción del temporizador
LOOP1: JNB P1.0, JIXU_XIANSHI; juzgue P1.0 Si no es igual a 1, saltará al temporizador 0. Si es igual a 1, lo hará. juzgue si el temporizador programado se ha desbordado
JBC TF0, YICHU_PANDUAN; determine si el temporizador 0 se ha desbordado. Si no, vuelva a juzgar P1.0. Si se desborda, salte a YICHU_PANDUAN y reinicie.
AJMP LOOP1
YICHU_PANDUAN: DJNZ R7, CONGLAI; (Los efectos anteriores se recircularán a continuación)
DJNZ R6, FENZHONG
CLR TR0
AJMP PRINCIPAL
JIXU_XIANSHI: CLR TR0
CLR TF0
JNB P1.0, JIAYI2
AJMP JIXU_XIANSHI
JIAYI2: JNB P1.0, $
RETARDO DE LLAMADA
JNB P1.0, $
RETARDO DE LLAMADA
MOV A, SHUZHI
INC A
MOV SHUZHI, A
MOVC A, @A DPTR
MOV P3, A
MOV A, SHUZHI
CJNE A, #04H, JIXU_XIANSHI
RETARDO DE LLAMADA LC
RETARDO DE LLAMADA LC
RETARDO DE LLAMADA
RETARDO DE LLAMADA
RETARDO DE LLAMADA
RETARDO DE LLAMADA
CLR P1.2 Encienda el relé A; .
CLR P1.4; Enciende la luz A.
RETARDO LLAMADA
RETARDO LLAMADA
RETARDO LLAMADA
SETB P1.1 Apague el relé B.
SETB P1.3; Apague la luz B
AJMP $; AMJP $ y SJMP $ indican saltar a esta línea, que es un bucle infinito, lo que hace que el programa se detenga. aquí.
DELAY: MOV R0, #255; ----- Subrutina de retardo-----
TURN: MOV R1, #255
DJNZ R1 , $
DJNZ R0, TURN
RET
TABLA: DB 0C0H, 0F9H, 24H, 30H, 19H; definición de datos de visualización de siete segmentos DB 0C0H, 0F9H, 0A4H, 0B0H, 99H; 01234
FIN