![]() |
安心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. |