在我看单片机相关延时问题看到一段代码,想不明白这个延时时间如何算出来的。
给出的代码如下:
void delay()
{
unsigned char i, j, k; //延时200ms @11.0592MHz
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
我的想法是先执行最中间的 while (--k); 语句,执行139次之后,k变为0退出该循环;
接下来执行外面的do while循环,又执行255104次;
再执行最外面的do while 循环,执行2552559次;
次数相加乘以机器周期,即
(139+255104+2552559+6)*12/11059200=0.664s
和0.2s差十万八千里。
难道k、j变成0之后再减1的值不是255?
我又试了下127比较接近答案。可是为什么呢?我以为的是unsigned char 的值域是0~255。
还是说我的思路根本就是错的呢?
恳请各位的的解答。谢谢!