Cómo programar semáforos usando cmP (Omron)
Selección del microcontrolador de origen: AT89S52
Código de programa
ORG 0000H
AJMP START
ORG 0003H
p>
LJMP INT00
ORG 0013H
LJMP INT10
INICIO: MOV SP, #60H
SETB EX0
p>SETB EX1
SETB EA
; LCALL ST00
PRINCIPAL: LCALL ST10
LCALL ST20
LCALL ST30
LCALL ST40
LJMP PRINCIPAL
ST00: MOV A, #00
MOV P2, A
p>ST10: MOV R7, #30
ST11: MOV R0, #0DEH
MOV P2, R0
LCALL DELAY1S
RET
ST20: MOV R4, #05
ST21: MOV R0, #0DDH
MOV P2, R0
MOV R5, #05
L22: LCALL DELAY01S; retardo 0.5S
DJNZ R5, L22
MOV R0, #0DFH
MOV P2, R0
MOV R5, #05
L23: LCALL DELAY01S; retardo 0.5S
DJNZ R5, L23
DJNZ R4, ST21
RET
ST30: MOV R7, #20
MOV R0, #0F3H
MOV P2, R0 p>
LCALL DELAY1S
RET
ST40: MOV R4, #05
ST41: MOV R0, #0EBH
MOV P2, R0
MOV R5, #05
L42: LCALL DELAY01S; retardo 0.5S
DJNZ R5, L42
MOV R0, #0FBH
MOV P2, R0
MOV R5, #05
L43: LCALL DELAY01S; retardo 0.5S
DJNZ R5, L43
DJNZ R4, ST41
; JMP ST10
RET
DELAY1S: MOV R3, # 50; número de ciclos de 20ms (50 veces)
CLR A
DIS0: MOV A, R7
LCALL X0
DJNZ R3, DIS0
DJNZ R7, DELAY1S
RET
DELAY01S: MOV R7, #05; R2 almacena el número de ciclos de 20 ms (5 veces)
CLR A
DIS1: MOV A, R4
LCALL X0
DJNZ R7, DIS1
RET
DELAY10MS: MOV R2, escaneo de teclas #20 subrutina de 10 ms;
DEL1: MOV R6, #248
DJNZ R6, $
DJNZ R2, DEL1
MOV R6, #00 p >
MOV R2, #00
RET
TAB: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H
DB 40H, 00H
X0: MOV R6, A
MOV R1, #40H R3, R4, R5,
MOV A, R6
MOV B, #10
DIV AB
MOV @R1,A
INC R1
MOV @R1,B
MOV DPTR,#TAB< / p>
MOV A, @R1
MOVC A, @A DPTR
MOV P0, A
CLR P3.7
LCALL DELAY10MS
SETB P3.7
DEC R1
MOV DPTR, #TAB
MOV A, @R1< / p>
MOVC A, @A DPTR
MOV P0, A
CLR P3.6
LCALL DELAY10MS
SETB P3.6
RET
INT00: MOV 36H, R7
PUSH 36H
MOV 37H, R0
PUSH 37H
MOV 39H, R3
PUSH 39H
MOV R7, #10; botón de emergencia, parada de tráfico norte y sur, ambos semáforos en rojo, duración de 10 Segundo.
MOV P2, #0DBH
RETARDO DE LLAMADA LC1S
POP 39H
POP 37H
POP 36H p> p>
MOV R7, 36H
MOV R0, 37H
MOV P2, R0
MOV R3, 39H
RETI
INT10: MOV 36H, R7; R7----XIANSHIMIAOSHU
PUSH 36H; R0----p2 muestra el estado de la luz
MOV 37H, R0;
EMPUJAR 37H
MOV 38H, R6
EMPUJAR 38H
MOV 39H, R3 p>
EMPUJAR 39H
; JNB P3.4, SV1
; JNB P3.5, SV2
; >SV1: MOV R7, #10; Hay mucho tráfico de norte a sur, cambie a dirección norte-sur
MOV R0, #0DEH
MOV P2, R0 p>
LCALL DELAY1S
AJMP RETN
SV2: MOV R7, #10 hay mucho tráfico de este a oeste, así que cambie a la dirección de este a oeste p>
MOV R0, #0F3H
MOV P2, R0
LCALL DELAY1S
AJMP RETN
RETN: POP 39H
MOV R3, 39H
POP 38H
MOV R6, 38H
POP 37H
MOV R0, 37H
POP 36H
MOV R7, 36H
RETI