본문 바로가기

[Microchip]/PIC12F_PIC10F

[PIC12F EVM] HI-TECH C컴파일러에서 Delay 함수 사용하기

[PIC12F EVM] HI-TECH C컴파일러에서 Delay 함수 사용하기

이전, "HI - TECH PICC - Lite"에는 예제로 delay.h, delay.c라는 프로그램이 포함되어 있었는데 업데이트 버전 "HI - TECH C PRO for the PIC10/12/16 MCU Family (Lite mode)" 는 이 파일이 없다. 예제를 보면 <htc.h> 만  선언하고 사용하고 있는데 <htc.h>를 열어 보니
아래와 같이 선언되어 있다.

#pragma inline(_delay)
extern void _delay(unsigned long);
// NOTE: To use the macros below, YOU must have previously defined _XTAL_FREQ
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#endif


문제는 __delay(1000)으로 설정하면 1ms로 동작은하고 100으로 설정하면 100us로 동작을 한다. 아무래도 us단위인것 같은데...
_XTAL_FREQ 를 재 정의하면 된다고 해서 아무리 변경해 봐도 변화가 없다.


그래서 그냥 1ms를 기준으로 잡고 아래와 같이 랩퍼 함수를 만들었다. ms단위, us단위 함수는 잘 동작을 한다.

void Delay(unsigned int Time)
{
 unsigned int i; 
 for(i=0;i<=Time;i++) _delay(1000);;
}

void Delay_us(unsigned int Time)
{
 unsigned int i; 

 for(i=0;i<=Time;i++) __delay_us(1000);
}
반응형