///////////////////////////////////////////////////////////////////////// //// EX_PULSE.C //// //// //// //// This program uses the RTCC (timer0) to time a single pulse //// //// input to the PIC. //// //// //// //// Configure the CCS prototype card as follows: //// //// Connect pulse generator to pin B1 //// //// //// //// Jumpers: //// //// PCB pin A2 to RS232 RX, pin A3 to RS232 TX //// //// PCM,PCH pin C7 to RS232 RX, pin C6 to RS232 TX //// //// //// //// This example will work with the PCB, PCM and PCH compilers. //// //// The following conditional compilation lines are used to //// //// include a valid device for each compiler. Change the device, //// //// clock and RS232 pins for your hardware if needed. //// ///////////////////////////////////////////////////////////////////////// //// (C) Copyright 1996,2003 Custom Computer Services //// //// This source code may only be used by licensed users of the CCS //// //// C compiler. This source code may only be distributed to other //// //// licensed users of the CCS C compiler. No other use, //// //// reproduction or distribution is permitted without written //// //// permission. Derivative programs created using this software //// //// in object code form are not restricted in any way. //// ///////////////////////////////////////////////////////////////////////// #if defined(__PCB__) #include <16C56.h> #fuses HS,NOWDT,NOPROTECT #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2) #elif defined(__PCM__) #include <16F877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #elif defined(__PCH__) #include <18F452.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #endif #include char get_scale() { char scale; do { printf("\n\rPress S for short or L for long: "); scale = getc(); scale = toupper(scale); } while ( (scale!='S') && (scale!='L') ); return(scale); } void wait_for_low_to_high() { while(input(PIN_B1)) ; /* if it's high, wait for a low */ delay_us(3); /* account for fall time */ while(!input(PIN_B1)); /* wait for signal to go high */ } void wait_for_low() { delay_us(3); /* account for rise time */ while(input(PIN_B1)); /* wait for signal to go high */ } void main() { char scale; BYTE time; do { scale = get_scale(); if(scale=='S') setup_counters( RTCC_INTERNAL, RTCC_DIV_64 ); else setup_counters( RTCC_INTERNAL, RTCC_DIV_256 ); printf("\n\rWaiting...\n\r"); wait_for_low_to_high(); set_rtcc(0); wait_for_low(); time = get_rtcc(); printf("Counter value: %2X\n\n\r", time); } while (TRUE); }