找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

STC15F2K60S2单片机加TMTM1637驱动数码管 检测应答错误

查看数: 1700 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-19 11:00

正文摘要:

程序如下:问题:当我用多个_nop_()做延时,LED2灯就会亮(我用LED检测应答,如果单片机没收到应签就亮起),数码管显示正常。如果延时用for语句,for内就一个_nop_(),LED2灯就不会亮,数码管也正常。不知为什么, ...

回复

ID:961122 发表于 2023-2-20 13:43
lkc8210 发表于 2023-2-19 21:04
以下仿真用12Mhz开始时间:75.25us

感谢各位,受教了。不但知道了结果,也了解了分析问题的方法。严谨性值得佩服!
ID:161164 发表于 2023-2-19 21:04
以下仿真用12Mhz开始时间:75.25us



运行For之后:78.75us, 耗时:3.5us


运行nop之后:79.92us, 耗时:1.17us



用nop延时的时间太短
不足以让1637返回Ack(拉低电平)
但1637收到命令和数据
所以也可以正常显示
ID:1063483 发表于 2023-2-19 20:36
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_()不行,而是单片机就算响应了,数码管来不及响应就过了,试试看吧
ID:961122 发表于 2023-2-19 14:02
都是在同一个芯片上运行的
ID:213173 发表于 2023-2-19 13:48
STC15F2K60S2是1T单片机,一个_nop_()延时时间在12MHz晶振12T单片机是1us,换了运行环境就大相径庭了。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表