首先,I2C有2個重要的線,SDA數(shù)據(jù)線SCL時鐘線,當(dāng)總線上沒有進行信息傳送時,SDA和SCL都為高電平,我們稱之為釋放總線。開始傳送信息時,要有一個開始信號,開始信號:定義為在SCL為高電平的時候,SDA從高電平拉低。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供江海企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、做網(wǎng)站、H5網(wǎng)站設(shè)計、小程序制作等業(yè)務(wù)。10年已為江海眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。
沒有4位機制,有8位51單片機的匯編程序。還有一個C語言的,可以給你參考,這都是我項目中用到的程序。給你作個參考,在產(chǎn)品的實際工作中也很穩(wěn)定。
因為開始讀取完或者寫完一組數(shù)據(jù)需要一個開始信號和一個終止信號,而這個信號就是數(shù)據(jù)線的上升下降沿。而后面數(shù)據(jù)線拉高的原因是為了能正確讀取到數(shù)據(jù),因為單片機如果是低電平外部器件很有可能不能拉高而一直讀到低。
這種東西不要糾結(jié),就是按照iic協(xié)議用單片機模擬了要求的時序,實屬蛋疼,在實際設(shè)計中一般會選擇硬件支持iic的芯片。這個就當(dāng)成單片機C語言的練習(xí)就好了,完成的功能就是用單片機的IO口模擬了IIC的讀寫時序。
code是存儲在單片機的flash里面,不是存在內(nèi)存里面了。所以一般固定意義的數(shù)據(jù),比如數(shù)碼管的段碼,一個圖片的數(shù)據(jù)信息,都是用code定義,讓這些數(shù)據(jù)放在flash里面,節(jié)省內(nèi)存空間。
因為開始讀取完或者寫完一組數(shù)據(jù)需要一個開始信號和一個終止信號,而這個信號就是數(shù)據(jù)線的上升下降沿。而后面數(shù)據(jù)線拉高的原因是為了能正確讀取到數(shù)據(jù),因為單片機如果是低電平外部器件很有可能不能拉高而一直讀到低。
所謂的開始信號跟終止信號也只是雙方默認的方式而已,就像是“點頭YES,搖頭NO”,你也可以選擇相反的方式,只要兩臺通信的機子能懂就好。不過最好是采用大家一起的,這樣在軟件移植的時候會有幫助,也方便別人看懂。
return(1);///4,為什么要寫這句?--讀取成功,返回1 --- 51 單片機具有《位操作》功能。就是說,它的變量,可以是一位二進制數(shù)字,其數(shù)值就是 0、1。
1、你這個例程應(yīng)該是用io口模仿i2c,這里你沒有給出sda的定義。我理解還有程序?qū)ζ溥M行判斷if(sda==1)輸出編碼‘1’else 輸出編碼‘0’。經(jīng)過for循環(huán)8次就輸出了一個完整的8bit二進制數(shù)。
2、首先,I2C有2個重要的線,SDA數(shù)據(jù)線SCL時鐘線,當(dāng)總線上沒有進行信息傳送時,SDA和SCL都為高電平,我們稱之為釋放總線。開始傳送信息時,要有一個開始信號,開始信號 :定義為在SCL為高電平的時候,SDA從高電平拉低。
3、這么長的代碼,反正我是懶得一點一點看啊,這個程序我原來寫過,給你點建議啊,你的延時算什么?匯編學(xué)多了?延時長點沒事,還有就是一點就是你最好拿示波器看看數(shù)據(jù)口和時鐘口有沒有波形輸出。
4、讀或者寫入一個字節(jié)后,一般要加一段延時,最小要是2Ms。
5、這種東西不要糾結(jié),就是按照iic協(xié)議用單片機模擬了要求的時序,實屬蛋疼,在實際設(shè)計中一般會選擇硬件支持iic的芯片。這個就當(dāng)成單片機C語言的練習(xí)就好了,完成的功能就是用單片機的IO口模擬了IIC的讀寫時序。