8051軟件模擬I2C協(xié)議_第1頁(yè)
8051軟件模擬I2C協(xié)議_第2頁(yè)
8051軟件模擬I2C協(xié)議_第3頁(yè)
8051軟件模擬I2C協(xié)議_第4頁(yè)
8051軟件模擬I2C協(xié)議_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——8051軟件模擬I2C協(xié)議我覺(jué)的后面的的軟件模擬總線,是對(duì)下面I2C總線上的數(shù)據(jù)傳輸?shù)淖詈媒忉?。它?shí)實(shí)在在的表達(dá)了數(shù)據(jù)具體怎么傳輸?shù)摹.?dāng)看過(guò)I2CSPEC,我個(gè)人認(rèn)為只能說(shuō)是了解了,知道概念,不能說(shuō)是理解,由于我覺(jué)的那些協(xié)議說(shuō)明只算是規(guī)則,但如何去是實(shí)現(xiàn)這個(gè)規(guī)則,那才算是理解。

8051軟件模擬了下面幾塊:1,數(shù)據(jù)傳輸?shù)拈_(kāi)始和終止的信號(hào)。2,接收和發(fā)送ACK信號(hào)。3,發(fā)送和接受字節(jié)數(shù)據(jù)。

程序解釋很明白,我拿來(lái)和大家共享一下。

下面是總線特征和那幾個(gè)模塊的信號(hào)時(shí)序關(guān)系圖,捎帶說(shuō)明一下。I2C總線的一些特征

??只要求兩條總線線路一條串行數(shù)據(jù)線SDA一條串行時(shí)鐘線SCL

???每個(gè)連接到總線的器件都可以通過(guò)唯一的地址和一直存在的簡(jiǎn)單的主機(jī)從機(jī)關(guān)系軟件設(shè)定地

址主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器

??它是一個(gè)真正的多主機(jī)總線假使兩個(gè)或更多主機(jī)同時(shí)初始化數(shù)據(jù)傳輸可以通過(guò)沖突檢測(cè)和仲裁

防止數(shù)據(jù)被破壞

??串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s快速模式下可達(dá)400kbit/s高速

模式下可達(dá)3.4Mbit/s

???片上的濾波器可以濾去總線數(shù)據(jù)線上的毛刺波保證數(shù)據(jù)完整??連接到一致總線的IC數(shù)量只受到總線的最大電容400pF限制

SCL為高,保持SDA的數(shù)據(jù),SCL為低,SDA才能跳變。

兩條線都要上拉,是由于高電平表示空閑狀態(tài),不影響別的或以后的數(shù)據(jù)傳輸。

SCL為高時(shí),SDA來(lái)個(gè)下降沿,表示傳輸開(kāi)始。SCL為高時(shí),SDA來(lái)個(gè)上升沿,表示傳輸終止。

數(shù)據(jù)傳輸必需帶響應(yīng)相關(guān)的響應(yīng)時(shí)鐘脈沖由主機(jī)產(chǎn)生在響應(yīng)的時(shí)鐘脈沖期間發(fā)送器釋放SDA線.在響應(yīng)的時(shí)鐘脈沖期間接收器必需將SDA線拉低使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平.

也就是說(shuō)接受端在SLC第九個(gè)高脈沖時(shí)拉一個(gè)穩(wěn)定的低電平,就表示ACK響應(yīng)。8051不帶I2C總線接口。//引腳定義

SDAEQUP1.2//用于模擬I2C總線的SDA信號(hào)線SLCEQUP1.3//用于模擬I2C總線的SCL信號(hào)線WDTEQUP1.4//看門狗喂狗用I/O引腳

//變量定義

COUNTER1BYTE7FH//延時(shí)子程序所用延時(shí)計(jì)數(shù)器

COUNTERBYTE7EH//I2C總線發(fā)送和接受數(shù)據(jù)字節(jié)時(shí)所用的位計(jì)數(shù)器I2CDATABYTE7DH//從I2C總線接受到的數(shù)據(jù)字節(jié)

////函數(shù)定義

//函數(shù)名稱:SOMENOP//函數(shù)用途:延時(shí)子程序

//SOMENOP:MOVCOUNTER1#00H//延時(shí)用計(jì)數(shù)器清零SOMNOP1:CPLWDT//看門狗喂狗

DJNZCOUNTER1,SOMENOP1//判斷延時(shí)延時(shí)計(jì)數(shù)器是否終止RET//返回

////函數(shù)定義

//函數(shù)名稱:START

//函數(shù)用途:產(chǎn)生I2C總線數(shù)據(jù)傳輸起始信號(hào)

//

START:SETBSDA//置SDA為高電平狀態(tài)SETBSCL//置SDA為高電平狀態(tài)ACALLSOMENOP//模擬SCL高電平狀態(tài)計(jì)數(shù)

CLRSDA//使SDA產(chǎn)生一個(gè)由高到低的跳變ACALLSOMENOP//延時(shí),模擬SDA低電平狀態(tài)計(jì)數(shù)CLRSCL//將SCL置為低電平狀態(tài)RET//返回

////函數(shù)名稱:STOP

//函數(shù)用途:產(chǎn)生I2C總線數(shù)據(jù)傳輸中止信號(hào)

//STOP:SETBSCL//置SCL為高電平狀態(tài)CLRSDA//置SDA為低電平狀態(tài)ACALLSOMENOP//延時(shí)

SETBSDA//使SDA產(chǎn)生一個(gè)由低到高的跳變ACALLSOMENOP//延時(shí)RET//返回

////函數(shù)名稱:WAITACK

//函數(shù)用途:等待從機(jī)(或接收器)返回一個(gè)響應(yīng)信號(hào)ACK(或新的開(kāi)始數(shù)據(jù)傳輸信號(hào))//WAITACK:CLRSCL//將SCL置為低電平狀態(tài)

SETBSDA//釋放SDA信號(hào)線

ACALLSOMENOP//延時(shí),從機(jī)或接收器的響應(yīng)信號(hào)

//應(yīng)當(dāng)在這段延時(shí)期出現(xiàn)

SETBSCL//置SCL為高電平,準(zhǔn)備判斷SDAACALLSOMENOP//延時(shí)WAITACK1:MOVC,SDA

JCWAITACK//SDA為低電平,返回了響應(yīng)信號(hào)//否則等待新的開(kāi)始數(shù)據(jù)傳輸信號(hào)CLRSDA//響應(yīng)信號(hào)ACK或新的開(kāi)始數(shù)據(jù)傳輸//信號(hào)出現(xiàn),將SDA置為低電平CLRSCL//將SCL置為低電平狀態(tài)RET//返回

////函數(shù)名稱:NOACK

//函數(shù)用途:在向從機(jī)(或接收器)返回一個(gè)非響應(yīng)信號(hào),迫使數(shù)據(jù)傳輸過(guò)程終止

//NOACK:SETBSDA//在SCL低電平期間置SDA為高電平

CLRSCL

ACALLSOMENOP//延時(shí)

SETBSCL//SCL低電平周期計(jì)數(shù)終止,置SCL高

ACALLSOMENOP//延時(shí)RET//返回

////函數(shù)名稱:SENDBYTE

//函數(shù)用途:向I2C總線發(fā)送一個(gè)字節(jié)

//入口參數(shù):ACC(待發(fā)送的數(shù)據(jù)字節(jié)存放在ACC中)

//SENDBYTE:MOVCOUNTER,#08H//一個(gè)字節(jié)共送出8為數(shù)據(jù)SENDBYTE1:CLRSCL//置SCL為低電平狀態(tài)

RLCA//帶進(jìn)位循環(huán)左移,將最高位移至CMOVSDA,C//將當(dāng)前數(shù)據(jù)位送到數(shù)據(jù)線SDAACALLSOMENOP//計(jì)數(shù)SCL低電平狀態(tài)周期數(shù)SETBSCL//置SCL為高電平

ACALLSOMENOP//計(jì)數(shù)SCL高電平狀態(tài)周期數(shù)

DJNZCOUNTER,SENDBYTE1//判斷8個(gè)數(shù)據(jù)位是否發(fā)送完成CLRSCL//字節(jié)發(fā)送完成,置SCL為低電平狀態(tài)RET//返回

////函數(shù)名稱:RCVBYTE

//函數(shù)用途:從I2C總線接受一個(gè)數(shù)據(jù)字節(jié)

//入口參數(shù):ACC(待發(fā)送的數(shù)據(jù)字節(jié)存放在ACC中)

//RCVBYTE:MOVCOUNTER,#8H//一個(gè)字節(jié)共接收8位數(shù)據(jù)

CLRA//ACC被用來(lái)暫存接受數(shù)據(jù),先清零SETBSDA//釋放SDA數(shù)據(jù)線

RCVBYTE1:CLRSCL//置SCL為低電平狀態(tài)

ACALLSOMENOP//計(jì)數(shù)SCL低電平狀態(tài)周期數(shù)//SDA的變化將在這段延時(shí)中出現(xiàn)SETBSCL//低電平周期終止,置SCL為高電平ACALLSOMENOP//計(jì)數(shù)SCL高電平狀態(tài)周期數(shù)MOVC,SDA//將SDA狀態(tài)讀入CRLCA//ACC帶進(jìn)位循環(huán)左移SETBSDA//釋放SDA數(shù)據(jù)線

DJNZCOUNTER,SENDBYTE1//判斷8個(gè)數(shù)據(jù)位是否接收完成MOVI2C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論