安心1x2 发表于 2017-12-20 21:02 ” 那么两个相邻操作可以认为是同时的,实际上确实有执行的先后,为了避免误动作,顺序还是要的。“ SCK = 0; //时钟置0 _nop_(); //一个机器周期 indata |= IN_Data; SCK = 1; //按照你的意思,我可以将上面的时钟上升沿触发的语句改为如下也没有问题? SCK = 0; //时钟置0 _nop_(); //一个机器周期 SCK = 1; indata |= IN_Data; 你说到了我的点子上,关键是这个顺序该如何把握?谢谢,回答。 |
yzwzfyz 发表于 2017-12-20 20:49 我的意思是时钟语句和程序的执行语句的执行顺序是怎么样的? 像74hc165实验,数据上升沿触发才从165出来,那么执行语句位置有几种书写方式呢?是夹在时钟语句里面,还是时钟后面?最终我的想法是让单片机识别到我是一个上升沿来了,然后移出一位数据,恳请指正。 |
| 楼主理解错了!在时钟线SCL高电平期间,数据线SDA出现下降沿,启动I2C总线传送数据。在时钟线SCL高电平期间,数据线SDA的电平不能变化,否则,将被认为是一个起始信号S或终止信号P,引起出错。因此,若需改变数据线SDA的电平,必须先拉低时钟线SCL电平。 |
| 如果单片机指令速度很快可以忽略不计(至少相比你的delay延时而言)。那么两个相邻操作可以认为是同时的,实际上确实有执行的先后,为了避免误动作,顺序还是要的。mcu的内核就是个顺序执行指令的东西,而且要往绝对了哪怕FPGA算上内部走线时延也不是并行了。 |
| 估计未来你能将计算机速度做到世界最快,因为你能将两条命令执行的间隔时间做到0. |