下面的代碼是參考别人的,问一下这个延时函数是怎么实现的?
芯片是pic16lf1508;
#define _XTAL_FREQ 31000
在函数中看到下面这个ms延时函数,然后go to去看了看;
__delay_ms(30);
#define _XTAL_FREQ 31000
#ifdef __PICCPRO__
/****************************************************************/
/* Built-in delay routines */
/****************************************************************/
// 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
还有我的时钟频率是31k;
// SCS INTOSC; IRCF 31KHz_LF;
OSCCON = 0x02;
就上面的两行代码,一个us一个ms的,二者进率我明白,但是31000/4000 不是近似等于8嘛?就算指令时钟是系统时钟的4倍,结果不也是31嘛?为什么是ms的延时呢?就是这个疑问。
|