找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1983|回复: 7
收起左侧

时序的书写理解

[复制链接]
ID:223571 发表于 2017-12-20 12:06 | 显示全部楼层 |阅读模式
捕获.PNG
void I2cStart()
{
        SDA=1;                 (第一行)        
        Delay10us();
        SCL=1;
        Delay10us();//建立时间是SDA保持时间>4.7us   (第4行)
        SDA=0;
        Delay10us();//保持时间是>4us
        SCL=0;                       
        Delay10us();               
}



以上是做I2C实验的时候起始信号,问题:
(第4行)延时十个微秒的时候,是不是(第一行) 也延时了十个微秒,也就是二十个微秒?
对于用C书写时序一直很蒙蔽,时序涉及到同一时间段两个变量并行操作,而C语言只有一条一条语句执行,怎么同一时间反映两个变量的操作呢?
恳请各位指点迷津
回复

使用道具 举报

ID:223571 发表于 2017-12-25 09:20 | 显示全部楼层
安心1x2 发表于 2017-12-20 21:02
如果单片机指令速度很快可以忽略不计(至少相比你的delay延时而言)。那么两个相邻操作可以认为是同时的, ...

” 那么两个相邻操作可以认为是同时的,实际上确实有执行的先后,为了避免误动作,顺序还是要的。“
SCK = 0;                           //时钟置0                           
  _nop_();                                 //一个机器周期
indata |= IN_Data;       
SCK = 1;


//按照你的意思,我可以将上面的时钟上升沿触发的语句改为如下也没有问题?
SCK = 0;                           //时钟置0                           
  _nop_();                                 //一个机器周期
SCK = 1;
indata |= IN_Data;       

你说到了我的点子上,关键是这个顺序该如何把握?谢谢,回答。
回复

使用道具 举报

ID:223571 发表于 2017-12-25 09:07 | 显示全部楼层
yzwzfyz 发表于 2017-12-20 20:49
估计未来你能将计算机速度做到世界最快,因为你能将两条命令执行的间隔时间做到0.

我的意思是时钟语句和程序的执行语句的执行顺序是怎么样的?
像74hc165实验,数据上升沿触发才从165出来,那么执行语句位置有几种书写方式呢?是夹在时钟语句里面,还是时钟后面?最终我的想法是让单片机识别到我是一个上升沿来了,然后移出一位数据,恳请指正。
回复

使用道具 举报

ID:111634 发表于 2017-12-20 22:26 | 显示全部楼层
楼主理解错了!在时钟线SCL高电平期间,数据线SDA出现下降沿,启动I2C总线传送数据。在时钟线SCL高电平期间,数据线SDA的电平不能变化,否则,将被认为是一个起始信号S或终止信号P,引起出错。因此,若需改变数据线SDA的电平,必须先拉低时钟线SCL电平。
回复

使用道具 举报

ID:258226 发表于 2017-12-20 21:02 | 显示全部楼层
如果单片机指令速度很快可以忽略不计(至少相比你的delay延时而言)。那么两个相邻操作可以认为是同时的,实际上确实有执行的先后,为了避免误动作,顺序还是要的。mcu的内核就是个顺序执行指令的东西,而且要往绝对了哪怕FPGA算上内部走线时延也不是并行了。
回复

使用道具 举报

ID:123289 发表于 2017-12-20 20:49 | 显示全部楼层
估计未来你能将计算机速度做到世界最快,因为你能将两条命令执行的间隔时间做到0.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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