/*
 * delays.c
 *
 * Various useful delay routines
 *
 * Mark Crosbie  9/15/98
 */

/* delay for d microseconds on a 4Mhz clock
 */
void delay_us(char d) {
  char count;    
  char count2;

   count = d;

_dmsouter:
asm	movlw D'20'
asm	movwf _count2_delay_us

_dmsinner:
asm        NOP
asm        NOP
asm	decfsz _count2_delay_us, f
asm	goto $-3
asm	decfsz _count_delay_us,f
asm	goto $-7
}

/* delay for d milliseconds
 * Trashes W 
 */
void delay_ms(char d) {
  char loop2;
  char loop1;

  loop1 = d;

_DELAY_1:
asm     MOVLW   110    ; close to 1.0 msec delay when set to .110
asm     MOVWF   _loop2_delay_ms
_DELAY_2:
asm     NOP
asm     NOP
asm     NOP
asm     NOP
asm     NOP
asm     NOP
asm     DECFSZ  _loop2_delay_ms, F   ; decrement and leave result in LOOP2
asm                             ; skip next statement if zero
asm     GOTO $-7                ; goto _DELAY_2
asm     DECFSZ  _loop1_delay_ms, F
asm     GOTO $-0xb              ; goto _DELAY_1

}
				    
/* delay for d seconds */
void delay_s(char d) {

  char i;
  for(i=0; i < 10; i++) {
    delay_ms(100);
  }
}
