Attention !!! We are shipping orders now but due to Covid-19 situation it can take 1-2 days for your orders to be shipped from our Nashik warehouse. If you have any queries feel free to contact us. Thank you for your support and understanding.
  • 8412906903

Product categories

Have You Seen

Samsung 18650 2600mah Li-ion Battery

Samsung 18650 2600mah Li-ion Battery

Samsung ICR18650-26J 2.6Ah BatteryOriginal Samsung 18650 2600 mah Lithium-ion BatteryThis is or..

Rs.247.80 (inc GST)
Rs.210.00 + GST

SKU: 1183 | DAB424
Stock: 0
Arduino Mega 2560 Pro Mini

Arduino Mega 2560 Pro Mini

Mega Pro 2560 Development Board Mega 2560 Pro a  Atmega2560 based compact Arduino MegaThis..

Rs.889.72 (inc GST)
Rs.754.00 + GST

SKU: 2058 | DAB079
Stock: 25

ON Timer Program

Sometimes we require TURNING ON/OFF a device for a specific duration & then going back to the initial state. Here is a program that will activate/deactivate a relay for short duration. We will use two switches one to start the timer & another one to stop the timer i.e. a START Switch & a STOP Switch. If the Start Switch is pressed when the Timer is ON then the timer starts counting again. One LED is used which will toggle after every second indicating that the timer is ON.

The anode of the LED is connected to the Vcc & the cathode to the controller PIN so when the PIN is low the LED will turn ON & vice versa. Please click here to see how to interface LED to Microcontroller.

For interfacing a Relay a relay drive circuit is required. It is basically an NPN transistor BC 547. So when the port pin is high the transistor as well as the relay is turned ON & when the Pin is low the relay is turned OFF. Check this tutorial for more information of Relay driver circuit.

Two pins are used to interface the two switches. Normally the port pins are high because of the internal pull up resistors. Now when the switch is pressed a low is detected at the port pin. For learning how to interface switch to a controller see ‘Interfacing Switch to Microcontroller’.

This code will be easier to understand if you first see the following codes:

Here we will be using Timer 0 in 16 bit mode to generate One second delay. The maximum delay that can be generated using TIMER 0 in any mode is 65535 clock cycles & since we are using 12MHz crystal maximum delay is 65.535ms. For generating One second 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 & we toggle the LED.

Another location time is used which contains the duration (in seconds) for which the relay should remain ON. We have defined this ON duration as ‘TIME_DEFAULT’ the maximum duration that the Relay can be turned ON is 255 seconds & the minimum is 1 second.



bit P2.0 //start switch connected to P2.0
stop_switch bit P2.1 //stop switch connected to P2.1
led bit P2.2 //LED connected to P2.2
relay bit P2.3 //Relay connected to P2.3
multiplier equ 30h
time equ 31h


MULTIPLIER_DEFAULT data 20 //0.05 x 20 =1seconds
TIME_DEFAULT data 100 //100 seconds ON delay

org 0000h

ajmp main


org 000bh
jmp timer0_interrupt // Jump To Interrupt Subroutine


setb start_switch //initialize start switch pin as input
setb stop_switch //initialize stop switch pin as input
setb led //turn OFF led
clr relay //turn OFF relay
setb EA //Enable Interrupt
setb ET0 //Enable timer 0 Interrupt
mov multiplier,#MULTIPLIER_DEFAULT
mov TMOD,#01h // Timer 0 Mode 1(16 bit mode)



jnb start_switch,c1_main //Check if start switch is LOW
jnb stop_switch,c2_main //Check if stop switch is LOW
ajmp loop

call debounce_delay //wait for the debounce period of 20ms
jb start_switch,loop //if pin high after debounce period then return
mov TH0,#3ch //0.05 sec
mov TL0,#0B0H //load timer values
mov multiplier,#MULTIPLIER_DEFAULT //load default values
mov time,#TIME_DEFAULT
jnb start_switch,$ //Wait for the switch to be released
setb TR0 //Start Timer 0
setb relay //Turn ON relay
clr led //Turn ON led
ajmp loop

call debounce_delay //wait for the debounce period of 20ms
jb stop_switch,loop //if pin high after debounce period then return
jnb stop_switch,$ //wait for the switch to be released
clr TR0 //Stop Timer 0
clr relay //Turn OFF relay
setb led //Turn OFF led
ajmp loop


push acc

push b

push psw

push dph

push dpl

clr TF0

clr TR0 //Stop Timer
mov TH0,#3ch //0.05 sec
mov TL0,#0B8H //Reload Timer
djnz multiplier,c1_timer0_interrupt
mov multiplier,#MULTIPLIER_DEFAULT        //if one second over then
cpl led //Toggle LED
djnz time,c1_timer0_interrupt //decrement time by one
setb led //if time=00 then turn OFF LED
clr relay //turn OFF relay
pop dpl //no need to start timer again
pop dph

pop psw

pop b

pop acc



setb TR0 //Start Timer 0
pop dpl

pop dph

pop psw

pop b

pop acc



mov r7,#245
mov r6,#40

djnz r6,$

djnz r7,l1_debounce_delay




Written by Administrator