// File: hello2.c // // Nearly simple "hello, world" program, similar to the // hello.c program, but uses sleep() and watchdog timer // to wake from sleep rather than a programmed 500 mSec // delay. The PIC16F84 processor on the iRX board draws // very little current when in sleep mode. // // Robert Poor // MIT Media Lab // November, 1999 // #include <16F84.H> // Configure PIC to use: HS clock, ENABLE Watchdog Timer, // no code protection, enable Power Up Timer // #fuses HS,WDT,NOPROTECT,PUT // Tell compiler clock is 10MHz. This is required for delay_ms() // and for all serial I/O (such as printf(...). These functions // use software delay loops, so the compiler needs to know the // processor speed. // #use DELAY(clock=10000000) // Declare that we'll manually establish the data direction of // each I/O pin on port B. // #use fast_io(B) // Standard definitions for the irx2_1 board // #define RS232_XMT PIN_B1 // (output) RS232 serial transmit #define RED_LED PIN_B2 // (output) Red LED (low true) #define IR_LED PIN_B3 // (output) Infrared LED (low true) #define IR_SENSOR PIN_B4 // (input) IR sensor (Sharp IS1U30) #define RS232_RCV PIN_B5 // (input) RS232 serial receive // Macros to simplify I/O operations // #define RED_LED_ON output_low(RED_LED) #define RED_LED_OFF output_high(RED_LED) #define IR_LED_ON output_low(IR_LED) #define IR_LED_OFF output_high(IR_LED) #define IR_RECEIVED (!input(IR_SENSOR)) // Default tri-state port direction bits: all PORT B bits are // output except for IR_SENSOR (bit 4) and RC232_RCV (bit 5). // #define IRX_B_TRIS 0b00110000 // Inform printf() and friends of the desired baud rate // and which pins to use for serial I/O. // #use rs232(baud=9600, xmit=RS232_XMT, rcv=RS232_RCV) void main() { // since we've declared #use fast_io(B) (above), we MUST // include a call to set_tris_b() at startup. // set_tris_b(IRX_B_TRIS); // set up prescaler on watchdog timer to bark after approx 576 mSec setup_counters(RTCC_INTERNAL, WDT_576MS); RED_LED_ON; // reality check at startup delay_ms(200); RED_LED_OFF; restart_wdt(); // prevent wdt from firing too soon. while (1) { RED_LED_ON; // turn on the led printf("Hello, world.\r\n"); // print to serial port RED_LED_OFF; // turn off the led sleep(); // put PIC to sleep until WDT fires (576 mWSec) } }