![]() |
發布時間: 2023-2-19 11:00
正文摘要:程序如下:問題:當我用多個_nop_()做延時,LED2燈就會亮(我用LED檢測應答,如果單片機沒收到應簽就亮起),數碼管顯示正常。如果延時用for語句,for內就一個_nop_(),LED2燈就不會亮,數碼管也正常。不知為什么, ... |
lkc8210 發表于 2023-2-19 21:04 ![]() |
以下仿真用12Mhz開始時間:75.25us![]() 運行For之后:78.75us, 耗時:3.5us ![]() 運行nop之后:79.92us, 耗時:1.17us ![]() 用nop延時的時間太短 不足以讓1637返回Ack(拉低電平) 但1637收到命令和數據 所以也可以正常顯示 |
void I2C_delay(void) //延時4us 在11059200時鐘下一個nop為1us { uint8 i; //不用for語句用_nop();LED2會亮起,說明檢測應答有誤 //_nop_(); //_nop_(); //_nop_(); //_nop_(); for(i=0;i<3;i++){ _nop_(); } 把for(i=0;i<1;i++)中的 i<1,改為 i<3, 循環4次,應該可以. 并不是一個_nop_()不行,而是單片機就算響應了,數碼管來不及響應就過了,試試看吧 |
都是在同一個芯片上運行的 |
STC15F2K60S2是1T單片機,一個_nop_()延時時間在12MHz晶振12T單片機是1us,換了運行環境就大相徑庭了。 |