El chip 89C51 está programado en lenguaje ensamblador. Los ocho semáforos se encienden alternativamente 3 veces con un intervalo de 1 segundo. El temporizador 0 interrumpe y luego enciende las luces.
ORG 0000H
LJMP PRINCIPAL
ORG 000BH
LJMP T0ISR
ORG 0030H
PRINCIPAL:
MOV TMOD, #01H
MOV TH0, #ALTO(65536-50000)
MOV TL0, #BAJO(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV R2,
MOV R3, #6
MOV R4, #0FEH
CLR 00H
SJMP $
T0ISR:
CLR TR0
MOV TH0, #HIGH(65536-50000)
MOV TL0, #LOW(65536-50000)
SETB TR0
INC R2
CJNE R2, #20, T0E
MOV R2, #0
JB 00H, T0LS
MOV A, P0
CPL A
MOV P0, A
DJNZ R3, T0E
SETB 00H
SJNZ R3, #LOW(65536-50000 )
SETB TR0<
SJMP T0E
T0LS:
MOV A, R4
MOV P0, A
RL A
MOV R4, A
T0E:
RETI
FIN