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,换了运行环境就大相径庭了。 |