// BLIP_LED.C (PIC16F1507)
//
// When PORTB.7 is at ground, LED on PORTB.6 winks 5 times with a delay of one
// second. When PORTB.7 is open, no flashing LED.
//
// copyright, Peter H. Anderson, Baltimore, MD, Dec, '11
#case
#device PIC16F1507
#include <defs_1507.h>
#rom 0x8007 = {0x09e4, 0x0003}
#fuses INTRC_IO, WDT, MCLR, PROTECT, CPD, NOBROWNOUT, NOCLKOUT
#fuses WRT, STVREN, NOLVP
void delay_10us(byte t);
void delay_ms(long t);
void blip_led(int num, byte t);
void main()
{
ANSELB = 0x00;
OSCCON = 0x6b; // 4.0 MHz interal
wpub7 = 1; // use internal pullup
trisb7 = 1;
wpuen_ = 0;
while(1)
{
if (rb7 == 0)
{
blip_led(5, 100);
delay_ms(1000);
}
else
{
trisb6 = 0;
latb6 = 0;
delay_ms(100);
}
}
}
void blip_led(int num, byte t)
{
int n;
latb6=0;
trisb6=0;
for(n=0; n<num; n++)
{
latb6=1;
delay_ms(t);
latb6=0;
delay_ms(t);
}
}
void delay_10us(byte t)
{
#asm
// BCF STATUS, RP0
DELAY_10US_1:
CLRWDT
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ t, F
GOTO DELAY_10US_1
#endasm
}
void delay_ms(long t) // delays t millisecs
{
do
{
delay_10us(100);
} while(--t);
}