// 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); }