// File: adc.c // // ADC quick converion // // Carson Reynolds // MIT Media Lab // December, 20000 // #case #include <16C711.H> // Configure PIC to use: HS clock, ENABLE Watchdog Timer, // no code protection, enable Power Up Timer // #fuses HS,NOWDT,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 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) // 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) unsigned int value; 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); RED_LED_ON; // reality check at startup delay_ms(200); RED_LED_OFF; setup_port_a(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); while (1) { delay_ms(10); value = read_adc(); printf("%u ", value); // print to serial port } }