|
Switch Debouncing Program |
|
Code Library -
8051 Assembly
|
Switch Interfacing & Debouncing
|
|
Over here we consider ONE Switch & TWO LED connected to a microcontroller. Please check the SWITCH INTERFACING and the LED INTERFACING article to see how to connect Switches & LED’s to a microcontroller.
|
|
Here is a program that will TURN ON A LED1 if a switch is debounced properly & will TOGGLE LED2 if there is some error in switch debouncing. LED1 will be ON until the switch is pressed & will turn OFF as soon as it’s released. We have taken the debounce period as 20ms. So once a LOW signal has been received from the switch the controller will again check the switch status after 20ms & if at that time the switch is high LED2 will be toggled and if the switch is LOW LED1 will be turned ON.
|
| |
|
|
|
led1
|
bit |
P2.0 |
|
led2
|
bit |
P2.1 |
|
switch1
|
bit |
P1.0 |
|
|
|
ORG 0000h
|
|
|
setb switch1
|
//initialize switch 1 as input |
|
setb led1
|
//Turn OFF LED1 |
|
setb led2
|
//Turn OFF LED2 |
|
|
|
wait:
|
|
|
jb switch1,wait
|
// Wait till switch1 has been pressed |
|
call debounce_delay
jb switch1,c1_wait
|
|
| |
|
//After debouncing period, switch is low hence switch succesfully debounced
|
| |
|
clr led1
|
//Turn ON LED1 |
|
jnb switch1,$
|
//wait till switch has been released |
|
setb led1
|
//Turn OFF LED1 |
|
ajmp wait
|
|
|
|
|
|
c1_wait:
|
|
|
//Switch PIN high after debounce period so error in debouncing
|
|
cpl led2
ajmp wait
|
|
|
|
|
|
debounce_delay:
|
//Subroutine for generating 20ms delay |
|
mov r7,#245
|
|
|
l1_debounce_delay:
mov r6,#40
djnz r6,$
djnz r7,l1_debounce_delay
ret
|
|
|
END
|
|
|
|
|