本帖最后由 小海豚 于 2013-10-26 13:33 编辑
#if MCLK <= 4000000
#define delay1us() do {Nop();} while (0)
#elif MCLK <= 8000000
#define delay1us() do {Nop(); Nop();} while (0)
#elif MCLK <= 12000000
#define delay1us() do {Nop(); Nop();Nop();} while (0)
#endif
上面这个程序同样是延时1us怎么执行的NOP()个数不一样,那个4000000和8000000和12000000是什么意思?
假设时钟周期为4MHZ,每隔50MS点亮LED,每隔50MS灭掉LED。这样的程序要如何做到呢。 这50ms如何做到. 1,得到指令周期 4MHz/4=1MHz 1/1MHz=0.0000001s=1us 2,得到预分频 定时器定时的最大时间要超过这50mS,所以预分频器要选择256 预分频X256=最大的定时时间。256X256=65536us=65.536ms 大于50ms 3, 计算定时器初始值 (定时器最大值+1)- (定时时间/预分频)=定时器的初始值。 255+1=256 50000/256=195.3125 256-195.3125=60.6875 四舍五入 定时器初始值为61.
最后这一段计算定时器初始值不懂,请各位帮忙解释下,谢谢
为什么不是65536-50000呢?
|