//////////////////////////////////////////////////////////////////////////////////////////// // File: delay.h // This code is provided by Dr. Robert Reese. // We thank him for the use of it. // // //////////////////////////////////////////////////////////////////////////////////////////// #ifndef DELAY_H #define FOSC 29490L /* Internal clock freq in KHZ*/ #define MHZ *1000L /* number of kHz in a MHz */ #define KHZ *1 /* number of kHz in a kHz */ #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = ((x* FOSC)/(12MHZ)); \ while(--_dcnt != 0) \ continue; } char kill_delay; void DelayMs(unsigned char cnt) { unsigned char i; do { i = 20; do { DelayUs(50); } while(--i); } while(--cnt); } // should be able to handle up to 65535 void DelayMsRinging(unsigned int cnt) { unsigned char i; do { i = 20; do { DelayUs(50); } while(--i); } while(--cnt); } // use this function when need a delay loop from an ISR // should not usually delay within an ISR but if you have too..... void ISR_DelayMs(unsigned char cnt) { unsigned char i; do { i = 20; do { DelayUs(50); } while(--i); } while(--cnt); } void DelayMsKill(unsigned char cnt) { unsigned char i; do { i = 20; do { DelayUs(50); } while(--i && !kill_delay); } while(--cnt && !kill_delay); } extern void DelayMs(unsigned char); #define DELAY_H 1 #endif