| a_red |
bit p0.0 |
| a_amber |
bit p0.1 |
| a_green |
bit p0.2 |
| |
|
| b_red |
bit p0.3 |
| b_amber |
bit p0.4 |
| b_green |
bit p0.5 |
| |
|
| c_red |
bit p0.6 |
| c_amber |
bit p0.7 |
| c_green |
bit p2.7 |
| |
|
| d_red |
bit p2.6 |
| d_amber |
bit p2.5 |
| d_green |
bit p2.4 |
|
//Define RAM Locations
|
| multiplier |
equ 30h |
| current_signal_duration |
equ 31h |
|
//DEFINE BIT ADDRESS
|
| signal_f bit 00h |
;if 1 then switch to next signal |
| |
|
//DEFINE Constants
|
| MULTIPLIER_DEFAULT |
DATA 20 |
| DURATION_GREEN |
DATA 10 |
| DURATION_AMBER |
DATA 2 |
| |
|
//TIMER SUBROUTINES
|
|
| timer:
push acc
push b
push psw
push dph
push dpl
clr TF0
mov th0,#3ch
mov tl0,#0B0h
call check_timer
pop dpl
pop dph
pop psw
pop b
pop acc
reti
|
|
| |
|
|
check_timer:
djnz multiplier,r1_check_timer
|
|
| mov multiplier,#MULTIPLIER_DEFAULT |
;One second ended reload value
|
| djnz current_signal_duration,r1_check_timer |
|
| setb signal_f |
;signal duration ended move to nxt signal |
|
r1_check_timer:
|
|
| ret |
|
| |
|
//MAIN Program
|
|
|
org 0000h
jmp main
|
|
| |
|
|
org 000bh
jmp timer
|
|
| |
|
| org 0030h
main:
mov multiplier,#MULTIPLIER_DEFAULT
|
|
| setb EA |
;Enable Interrupt |
| setb ET0 |
;Enable timer 0 Interrupt |
|
clr signal_f
mov TMOD,#01h
mov th0,#3ch
mov tl0,#0B0h
|
// Timer 0 Mode 1(16 bit mode) |
| setb tcon.4 |
;start timer |
| |
|
| loop: |
|
|
mov current_signal_duration
|
,#DURATION_GREEN
|
|
clr a_green
setb a_amber
setb a_red
setb b_green
setb b_amber
clr b_red
setb c_green
setb c_amber
clr c_red
setb d_green
setb d_amber
clr d_red
|
|
|
|
|
|
jnb signal_f,$
clr signal_f
|
|
|
mov current_signal_duration
|
,#DURATION_AMBER
|
|
setb a_green
clr a_amber
jnb signal_f,$
clr signal_f
|
|
| |
|
| mov current_signal_duration, |
#DURATION_GREEN
|
| setb a_amber
clr a_red
clr b_green
jnb signal_f,$
clr signal_f
|
|
| |
|
|
mov current_signal_duration,
|
#DURATION_AMBER
|
| setb b_green
clr b_amber
jnb signal_f,$
clr signal_f
|
|
| |
|
| mov current_signal_duration, |
#DURATION_GREEN
|
|
setb b_amber
clr b_red
clr c_green
jnb signal_f,$
clr signal_f
|
|
| |
|
|
mov current_signal_duration,
|
#DURATION_AMBER
|
| setb c_green
clr c_amber
jnb signal_f,$
clr signal_f
|
|
| |
|
|
mov current_signal_duration,
|
#DURATION_GREEN
|
| setb c_amber
clr c_red
clr d_green
jnb signal_f,$
clr signal_f
|
|
|
End
|
|