Control de semáforo de programación MCU (programa fuente de software de búsqueda de onda *.asm)
5. Descripción del diseño
1. Debido a que este diseño es un diseño de control de semáforo, primero es necesario comprender las reglas cambiantes de los semáforos reales. Supongamos que una intersección corre de este a oeste y de norte a sur. El estado inicial 0 son luces rojas en el este y oeste, luces rojas en el norte y sur, luego cambia al estado l, las luces verdes del norte y sur están abiertas al tráfico y las luces del este y oeste son rojas después de una; Durante un período de tiempo, cambia al estado 2, las luces verdes norte y sur parpadean varias veces y se vuelven amarillas, con un retraso de 3 segundos, las luces este y oeste siguen en rojo; regresa al estado 3, el este y el oeste. las luces verdes del oeste están abiertas al tráfico, y las luces del norte y del sur son rojas después de un rato, pasa al estado 4, las luces verdes del este y del oeste parpadean varias veces y luego se vuelven amarillas, con un retraso de 3 segundos, y las luces norte y sur siguen en rojo; luego pasa al estado 1, y así sucesivamente.
2. La clave de la rutina del servicio de interrupción es: (1) Proteger el estado al ingresar a la interrupción y restaurar el estado al ingresar antes de salir de la interrupción. (2) Se debe configurar en el programa de interrupción si se permite el reingreso de la interrupción.
ORG 0000H
AJMP PRINCIPAL
ORG 0003H
LJMP INT
ORG 0040H
PRINCIPAL: MOV SP, #60H
SETB EA
SETB EX0
SETB PX0
SETB IT0
MOV P1, #09H
ACALL DELAY1S
ABC: MOV R0, #3
MOV R1, #3
MOV P1, #0CH
ACALL DELAY1S
DEF:
CLR P1.2
ACALL DELAY2S
SETB P1.2
ACALL DELAY2S
DJNZ R0, DEF
MOV P1, #0AH
ACALL DELAY1S
MOV P1, #11H
ACALL DELAY1S
MOV P1, #21H
ACALL DELAY1S
GHI: CLR P1.5
ACALL DELAY2S
SETB P1.5
ACALL DELAY2S
DJNZ R1, GHI
MOV P1, # 11H
AJMP ABC
INT: CLR EA
PUSH PSW
PUSH ACC
PUSH 05H p>
PUSH 06H
PUSH 07H
PUSH P1
SETB EA
MOV P1, #09H
ACALL DELAY1S
CLR EA
POP P1
POP 07H
POP 06H
POP 05H
POP ACC
POP PSW
SETB EA
RETI
DELAY1S: MOV R7, #5
DEL: MOV R6, #255
DE: MOV R5, #255
DJNZ R5, $ FOSC=6MHZ
DJNZ R6, DE
DJNZ R7, DEL
RET
DELAY2S: MOV R4, #250
DELL: MOV R3, #250
DJNZ R3, $; FOSC=6MHZ
DJNZ R4, DELL
RET
FIN