|
| 254或256也可以, 差不多一小段時間 |
QWE4562012 發表于 2020-7-28 18:10 C我不會,我只會匯編 |
Y_G_G 發表于 2020-7-28 09:01 你現在有自己做產品不 用C語言 |
|
問題1:這是IIC通訊中的的等待響應程序,沒有什么是"255",你喜歡的話可以是12345或者是655353555,這個是作者自己寫,就是查詢255次,看IIC接收器有沒有響應,這并不是一個嚴謹的程序 問題2:這個是IIC的寫入 問題3:這個是IIC的讀取 2和3原理是一樣的,但你并沒有認真看數字電路方面的東西,這個屬于移位寄存器這一塊的 對于單片機編程,基礎很重要,而且基礎要花很多時間去學,不然,你看后面的代碼基本是沒有一句你能真正理解的,你要是理解了,也就是好像明白它在說什么而已,實際上,你看了那么久的C語言,估計是一點用都沒有 |
QWE4562012 發表于 2020-7-27 18:19 在這段程序里,CY是移位操作時,移出累加器的那個位, 這段話,對這段程序理解沒有任何幫助。 |
QWE4562012 發表于 2020-7-27 18:19 在這里,CY是移位運算時,移出累加器的那個位,進入CY |
QWE4562012 發表于 2020-7-27 18:21 接收數據 |
gbchang 發表于 2020-7-27 15:52 那K左移一位再火上0或者1 是什么目的 |
gbchang 發表于 2020-7-27 15:56 51單片機Cy位即baiPSW.7,是51單片機算數運算du中的進位借位標zhi志,根據算數運算結果由系統置位或復位dao,也可以編程置位或復位。置位指令為:SETB C;復位指令為CLR C。 |
| 其實,樓主應該問, 這個 CY 是干什么的,在什么地方定義的。這樣才符合I2C提問的常規場景。 |
|
j 的值是sda,sda是一個管腳,值可能是 1 或者 0 |
土豆西紅柿 發表于 2020-7-27 15:00 這個j是多少 |
| 這明顯是 模擬方式發送 IIC 字節呀。在 C 語言中調用 CY 寄存器,是個有深度的想法。設計者對MCU底層匯編還是比較在行的。 |
QWE4562012 發表于 2020-7-27 12:04 k先左移1位,然后位運算或上j的值,最后在賦值給k |
TTQ001 發表于 2020-7-26 23:53 將SDA讀取到j,K右移1位并與j結合;-----------------你講下這個具體是怎么運算的好不 |
mm201 發表于 2020-7-26 23:59 CY是寄存器的一個高位符號 給到SDA好抽象啊 |
lyxing 發表于 2020-7-26 21:40 直接發一個字節按八次發不就行了嗎?他這樣做很麻煩啊 |
mm201 發表于 2020-7-26 23:59 您好,為什么是255呢 |
|
第一張圖是說,SDA為高,程序自加(起延時作用)溢出。第二張圖是,寫sda高低,通過參數傳遞 第三張圖是,把每一次讀回來的一個位 或操作,理解為讀一個位。 |
| 首先,I2C SDA高且變量i不大于255,請保持遞增。 第二,將SDA設置為CY(高或低); 第三,將SDA讀取到j,K右移1位并與j結合; |
|
本帖最后由 windows100 于 2020-7-26 22:37 編輯 第一張圖是說,SDA為高則總線不忙退出,或者程序自加(起延時作用)溢出。第二張圖是,寫sda高低,通過參數傳遞 第三張圖是,把每一次讀回來的一個位 或操作,理解為讀一個位。你應該還有個for循環沒有截圖進來。 不要追問了,我不一定按時回答 |
| 這個應是模擬I2C總線傳輸數據流程,可以參考I2C總線傳輸協議。第一圖SDA拉高延時,第二圖發送一位數據,第三圖接收一位數據后,與K合并,完成一字節的接收。 |
| 位運算 左移 |