/* Debounced Light Switch */
/* Rob Miles 2000 */
unsigned char key ( void )
{
unsigned char count=0;
unsigned char oldv, newv ;
oldv = input_pin_port_b(0);
while ( count<20 )
{
newv = input_pin_port_b(0);
if ( oldv==newv )
{
count++ ;
}
else
{
count=0 ;
oldv=newv ;
}
}
return oldv ;
}
void main ( void )
{
/* Select Bank 1 */
set_bit(STATUS,RP0);
/* set all PORTB for input */
TRISB=0xff;
/* PORTA bit 0 as output */
TRISA=0x1e;
/* now use Register bank 0 */
clear_bit(STATUS,RP0);
/* repeat forever */
while (1)
{
/* wait for the button to */
/* go down */
while (key()==0);
/* if light on turn off */
if (input_pin_port_a(0))
{
output_low_port_a(0);
}
else
{
/* if light off turn on */
output_high_port_a(0);
}
/* wait for the button */
/* to go up again */
while (key()==1);
}
}