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