51單片機(jī)—IIC—EEPROM(CAT24WCXX)—03
1.IIC總線的主要特點(diǎn)
IIC總線是一種簡單、雙向二線制同步串行總線。
(1)總線只有兩根線,既串行時鐘線(SCL)和串行數(shù)據(jù)線(SDA),這在設(shè)計(jì)中大大減少了硬件接口
(2)每個連接到總線上的器件都有一個用于識別的器件地址,(注意,器件地址由芯片內(nèi)部硬件電路和外部地址引腳同時決定,這樣就避免了~~你懂得)從而建立了簡單的主從關(guān)系,從而每個器件都可以作為發(fā)送器,也可以作為接收器。
(3)同步時鐘允許器件以不同的波特率進(jìn)行通訊。
(4)同步時鐘可以作為停止和重新啟動串行口發(fā)送的握手電路(就是開始和結(jié)束信號)。
(5)串行的速率不定(標(biāo)準(zhǔn)100kb/s。。。其它的就不用關(guān)心了)。
(6)連接到同一總線的集成電路只受400pf的最大總線電容。
2.IIC總線的基本結(jié)構(gòu)
機(jī)構(gòu)圖網(wǎng)上一推推的~~~
每個器件都有唯一的地址,器件兩兩之間都可以進(jìn)行信息傳送。當(dāng)某個器件向總線上發(fā)送信息時,它就是發(fā)送器(也叫做主控制器),而當(dāng)其從總線上接收信息時,它又成為接收器(從控制器)。在信息的傳送過程中,主控制器發(fā)送的信號分為器件地址碼、器件單元地址和數(shù)據(jù)3部分(這里你完全可以聯(lián)系EEPROM,它們?nèi)齻€的功能看名字也能才出來,我就不寫了)。
3.IIC總線的信息傳送(這里才它XX的是重點(diǎn),上邊的都是廢話)
當(dāng)IIC總線沒有數(shù)據(jù)傳送時,數(shù)據(jù)線(SDA)和時鐘線(SCL)都為高電平。當(dāng)主控制器向某個器件傳送信息時,首先應(yīng)向總線傳送開始信號,然后才能傳送信息(這里信息包括地址啊,數(shù)據(jù)啊~~)當(dāng)信息傳送結(jié)束時還應(yīng)該傳送個結(jié)束信號,開始信號和結(jié)束信號的規(guī)定如下:
~~~~~~~~~~開始信號:SCL為高電平時,SDA由高變?yōu)榈偷奶?,開始傳送數(shù)據(jù)。
匯編的代碼:
START:
當(dāng)然然后就是c的代碼了:
void IIC_start()
{
}
~~~~~~~~~~~結(jié)束信號:SCL為高電平時,SDA由低變?yōu)楦叩奶?,結(jié)束傳送數(shù)據(jù)。
還是先是匯編:(這里就不注釋了,太煩了)
STOP:
c文件:
void
{
}
開始信號和結(jié)束信號之間的傳送的是信息,信息的字節(jié)沒有限制,但每個字節(jié)必須為8位,高位在前,低位在后。數(shù)據(jù)線SDA上每一位信息狀態(tài)的改變只能發(fā)生在時鐘線SCl為低電平期間(這里因?yàn)閯偛砰_始信號和結(jié)束信號,SCl為高電平的期間SDA狀態(tài)的改變已經(jīng)被用來表示開始信號和結(jié)束信號)。同時每個字節(jié)后面必須接受一個應(yīng)答信號(ACK),ACK是從器件接收到8位數(shù)據(jù)后向主控制器發(fā)出的特定的低電平脈沖,用來表示已經(jīng)接收到數(shù)據(jù)(注意是在SCL為高,檢測SDA是否為低電平,之前SDA要拉高),如果主器件沒有受到應(yīng)答信號,轉(zhuǎn)到出錯處理~~
~~~~~~~檢測應(yīng)答位的程序:
匯編程序:
;返回值A(chǔ)CK=1時表示應(yīng)達(dá)
CACK:
CEND:
void IIC_ack()
{
}
主控器件每次傳送的信息的第一個字節(jié)必須是器件的地址碼,第二個字節(jié)為器件的單元地址,用于實(shí)現(xiàn)選擇所操作的器件的內(nèi)部單元,從第三個字節(jié)開始為傳送的數(shù)據(jù)(這里器件的地址碼自己可以上網(wǎng)上搜,高四位為器件的類型碼,最低位為讀寫位,其他三位你懂得,自己的設(shè)置位~~~,然后就是器件的單元地址,這個就看你的器件的存儲器地址了,最后就是數(shù)據(jù)~~~呵呵)。
評論