microcontrolador 8051

necesito de su ayuda, tengo que hacer un semaforo utilizando interrupciones con el micro 8051 y no puedo hacerlo, no he entendido como!!

el semaforo ya lo hice utilizando el temporizador:

valor equ 20

org 0000

mov tmod, #01h
mov 20h, #valor
mov th0, #high(15536)
mov tl0, #low(15536)
setb tr0

REPITE:
; SE ESTABLECE EL PRIMER ESTADO
mov a, #014h
cpl a
mov p1, a
mov 21h, #5
call espera_segundos

; SE ESTABLECE EL SEGUNDO ESTADO
mov a, #012h
cpl a
mov p1, a
mov 21h, #3
call espera_segundos

; SE ESTABLECE EL TERCER ESTADO
mov a, #041h
cpl a
mov p1, a
mov 21h, #5
call espera_segundos

; SE ESTABLECE EL CUARTO ESTADO
mov a, #021h
cpl a
mov p1, a
mov 21h, #3
call espera_segundos

jmp REPITE


espera_segundos:

Espero_TF0:
jnb TF0, Espero_TF0
; baja la bandera TF0
clr TF0
; pone el valor de cuenta para que el timer 0 cuente 50 ms
mov TH0, #HIGH (65536-50000)
mov TL0, #LOW (65536-50000)
djnz 20h, Espero_TF0

;recarga el contador para segundos
mov 20h, #VALOR
djnz 21h, Espera_Segundos

; regresa al punto de llamada
ret

END
 
org 00
jmp inicio
org 100

demora: mov R2,#100
ciclo0: Mov R3,#100
ciclo1: Mov R4,#50
ciclo2: DJNZ R4,ciclo2
DJNZ R3, ciclo1
DJNZ R2, ciclo0
RET

inicio:
Contador: mov R5,#15
verde: mov A,R5
mov P1,#01111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#10,verde

verde0: mov A,R5
mov P1,#11111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#9,verde0

verde1: mov A,R5
mov P1,#01111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#8,verde1

verde01: mov A,R5
mov P1,#11111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#7,verde01

verde11: mov A,R5
mov P1,#01111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#6,verde11

verde81: mov A,R5
mov P1,#11111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#5,verde81

verde18: mov A,R5
mov P1,#01111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#4,verde18

amarillo1: mov A,R5
mov P1,#10111011b
mov B,#10
div AB
swap A
orl A,B
mov P0,A
call demora
Dec R5
CJNE R5,#-1,amarillo1

mov R5,#15
rojo1: mov A,R5
mov P1,#11001111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#10,rojo1

verde4: mov A,R5
mov P1,#11011111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#9,verde4

verde5: mov A,R5
mov P1,#11001111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#8,verde5

verde6: mov A,R5
mov P1,#11011111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#7,verde6

verde9: mov A,R5
mov P1,#11001111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#6,verde9

verde71: mov A,R5
mov P1,#11011111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#5,verde71

verde17: mov A,R5
mov P1,#11001111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#4,verde17

amarillo2: mov A,R5
mov P1,#11010111b
mov B,#10
div AB
swap A
orl A,B
mov P2,A
call demora
Dec R5
CJNE R5,#-1,amarillo2
JMP contador

END


//son dos semaforos sincronizados que ademas despliega el conteo decendente
 
Atrás
Arriba