Shopping Cart

0 item(s) - Rs.0.00
Your shopping cart is empty!
Please update your Flash Player to view content.

. . . FOLLOW  US







 
 
Traffic Light Controller
Code Library - 8051 Assembly
Written by Administrator   

Traffic Lights usually contain three lamps: red, amber and green. Here is a small project wherein you can control the Traffic Light of a four way intersection using a single controller. Consider four roads ROAD A, B, C and D and their corresponding signals red, amber and green each represented by a LED. So in all there are 12 LED’s each of which is connected to a controller pin.

In this code the duration of all green signals are the same and the duration of all amber signals are same. This duration is defined by DURATION_GREEN which is 10 seconds and DURATION_AMBER which is 2 seconds.

For generating delay we will be using Timer 0 in 16 bit INTERRUPT mode to generate One second delay. We load TH0 & TL0 with a specific value & on every clock cycle TH0 & TL0 increments by 1 and when the TIMER overflows from FFFF to 0000 a Timer0 overflow flag is set & interrupt is generated.  The maximum delay that can be generated using TIMER 0 in any mode is 65535 clock cycles & since we are using 12MHz crystal the maximum delay is 65.535ms. But we require 1second delay. So we generate 50ms delay using TIMER 0 & when 20 such delays have been generated we come to know that one second has elapsed. So basically 0.05ms X 20 =1 second. So we use a RAM location multiplier load it with 20 and whenever the timer overflows the ram location multiplier is decremented by one. Thus when multiplier becomes zero we come to know that one second has elapsed.

Another RAM location current_signal_duration is used it contains the total number of seconds for which the current signal has to be turned ON. This RAM location is decremented every time  one second has elapsed so when current_signal_duration becomes zero we come to know that it’s time to Turn OFF the current signal and move to the next signal.

//Define the Port PINS

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

 

For learning how to interface LED to 8051 microcontroller please click here.

 
 

Featured

 
 
 
.
 TUTORIALS
.
  8051 Tutorial
 
  Power Supply
 
CODE LIBRARY
.

  8051 Assembly
 
  C Code Library
 

.
 PROJECTS
.
  Project List
 
  Synopsis and Abstract
 
DOWNLOADS
.

  Datasheets
 
  Download
 

.
 POPULAR
.
  About Us
 
  DNA Shop
 
  Totorial
 
  Code Library
 
  Download
 

.
CONTACT US
.

Mr. Amol Shah

DNA Technology Nashik,

Maharashtra 422009 India

Phone : 0253-3023939

Mobile : 09225145135

Email : contact@dnatechindia.com