Please update your Flash Player to view content.

                  FOLLOW  US





 
 
TRAFFIC LIGHT CONTROLLER
Code Library - C Code Library
Written by Amol Shah   

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 isdecremented 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 th0,#3ch

                mov tl0,#0B0h

                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

 

                mov current_signal_duration,#DURATION_AMBER

                setb d_green

                clr d_amber       

                jnb signal_f,$

                clr signal_f

                ajmp loop

 

$include(timer.inc)

End

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

 

Comments  

 
0 # siva 2012-01-27 21:55
hi
Reply | Reply with quote | Quote
 
 
0 # siva 2012-01-27 21:56
could u give the c pgm for this..
Reply | Reply with quote | Quote
 

Add comment


Security code
Refresh

 

Featured Products

Rs800.00
Rs720.00
You Save: 10.00%

 

Random Products



Rs18.00





Rs15.00





Latest Video

Random Articles

  • The MOSFET
    The Metal Oxide FET - MOSFET As well as the Junction Field Effect Transistor...
  • Resistors in Series
    Connecting Resistors Together Individual resistors can be connected together in...
  • Introduction
    Introduction to Capacitors Just like the Resistor, the Capacitor, sometimes...
  • 8-bit HEX to ASCII Convertor
    This subroutine converts 8 bit Hexadecimal number into its equivalent ASCII value. The number...

Search Products

User Login






 
 
.
 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