![]() |
發布時間: 2023-10-19 17:34
正文摘要:#include <reg52.h> void Delay(unsigned int Xms); void main(void) { P1=0x00; while(1) { ... |
你每條指令的執行都需要時鐘周期的,你的延時程序也是靠的執行指令周期,不是簡單地倍數 |
樓主可能不明白原理 |
用官方的肯定是對的,但是前題要其它參數一致,比如時鐘。 |
外面再包一層循環啊 |
生成的代碼就是錯的,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); } } |