C1541-III mbed edition

Dependencies:   mbed

Revision:
0:28557a4d2215
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/delay.h	Mon Aug 22 05:48:51 2011 +0000
@@ -0,0 +1,92 @@
+/*For Microchip 18Fxxx or 18Cxxx and Hi-Tech C
+
+Designed by Shane Tolmie of www.microchipC.com corporation.  Freely distributable.
+Questions and comments to webmaster@microchipC.com.
+Lots of Hi-Tech C FAQ and sample source code at http://www.microchipC.com/.
+
+Example C:
+
+#define PIC_CLK 4000000
+
+unsigned int timeout_int, timeout_char;
+
+DelayUs(40);  //do NOT do DelayUs(N) of N<5 @ 4Mhz or else it executes DelayUs(255) !!!!
+DelayUs(255); //max
+
+dly250n;      //delay 250ns
+dly1u;        //delay 1us
+
+timeout_char=timeout_char_us(1147);
+while(timeout_char-- && (RA1==0));  //wait up to 1147us for port RA1 to go high
+                    //  - this is the max timeout
+
+timeout_int=timeout_int_us(491512);
+while(timeout_int-- && (RA1==0));   //wait up to 491512us for port RA1 to go high
+                    //  - this is the max timeout
+
+*/
+
+#ifndef __DELAY_H
+#define __DELAY_H
+
+
+extern unsigned char delayus_variable;
+
+#define DelayUs wait_us
+
+/*
+
+timeouts:
+
+C code for testing with ints:
+
+            unsigned int timeout;
+            timeout=4000;
+            PORT_DIRECTION=OUTPUT;
+            while(1)
+            {
+                PORT=1;
+                timeout=8000;
+                while(timeout-- >= 1);    //60ms @ 8Mhz, opt on, 72ms @ 8Mhz, opt off
+                PORT=0;
+            }
+
+Time taken:    optimisations on:        16cyc/number loop, 8us @ 8Mhz
+            optimisations off:        18cyc/number loop, 9us @ 8Mhz
+            with extra check ie:    && (RB7==1), +3cyc/number loop, +1.5us @ 8Mhz
+
+C code for testing with chars:
+
+            similar to above
+
+Time taken:    optimisations on:        9cyc/number loop, 4.5us @ 8Mhz
+            with extra check ie:    && (RB7==1), +3cyc/number loop, +1.5us @ 8Mhz
+
+Formula:    rough timeout value = (<us desired>/<cycles per loop>) * (PIC_CLK/4.0)
+
+To use:        //for max  timeout of 1147us @ 8Mhz
+            #define LOOP_CYCLES_CHAR    9                    //how many cycles per loop, optimizations on
+            #define timeout_char_us(x)    (unsigned char)((x/LOOP_CYCLES_CHAR)*(PIC_CLK/4.0))
+            unsigned char timeout;
+            timeout=timeout_char_us(1147);                        //max timeout allowed @ 8Mhz, 573us @ 16Mhz
+            while((timeout-- >= 1) && (<extra condition>));    //wait
+
+To use:        //for max 491512us, half sec timeout @ 8Mhz
+            #define LOOP_CYCLES_INT        16                    //how many cycles per loop, optimizations on
+            #define timeout_int_us(x)    (unsigned int)((x+/LOOP_CYCLES_INT)*(PIC_CLK/4.0))
+            unsigned int timeout;
+            timeout=timeout_int_us(491512);                        //max timeout allowed @ 8Mhz
+            while((timeout-- >= 1) && (<extra condition>));    //wait
+*/
+
+
+//function prototypes
+void DelayBigUs(unsigned int cnt);
+void DelayMs(unsigned char cnt);
+void DelayMs_interrupt(unsigned char cnt);
+void DelayBigMs(unsigned int cnt);
+void DelayS(unsigned char cnt);
+
+#endif
+
+