你每条指令的执行都需要时钟周期的,你的延时程序也是靠的执行指令周期,不是简单地倍数 |
楼主可能不明白原理 |
用官方的肯定是对的,但是前题要其它参数一致,比如时钟。 |
外面再包一层循环啊 |
生成的代码就是错的,j没有被重新赋值。 |
编译器的BUG,j不能用整型量 |
楼上正解, 软件生成的是1ms,外面再包一层循环 |
不是延时计算器错误,是楼主胡乱修改造成的错误。延时函数中代码执行完一次约1ms,若想延时10ms,就要循环执行10次。另外数据类型也不能随便改,CPU处理不同数据类型耗时是不同的。如果要求不是非常精确可以按如下改写: void Delay(unsigned char ms)//@11.0592MHz { unsigned char data i, j; while(ms--) { _nop_(); i = 2; j = 198; do { while (--j); } while (--i); } } |