C51程序綜合程序設(shè)計(jì)范例(五)I2C.ppt_第1頁
C51程序綜合程序設(shè)計(jì)范例(五)I2C.ppt_第2頁
C51程序綜合程序設(shè)計(jì)范例(五)I2C.ppt_第3頁
C51程序綜合程序設(shè)計(jì)范例(五)I2C.ppt_第4頁
C51程序綜合程序設(shè)計(jì)范例(五)I2C.ppt_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

11,C51綜合程序設(shè)計(jì)范例(五),2,SiChuan Engineering Technical Colledge-1959,本講主要內(nèi)容:,11-1.綜合程序設(shè)計(jì)范例五(I2C接口程序設(shè)計(jì)) 11-2.I2C總線接口協(xié)議 11-3.24C02與單片機(jī)接口 11-3.實(shí)驗(yàn)十,3,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,設(shè)計(jì)范例:設(shè)計(jì)程序?qū)崿F(xiàn)向24C02的第一個單元寫入一個數(shù)據(jù),再將該數(shù)據(jù)讀出,并將其顯示在數(shù)碼管上。,4,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件: 24C02特性 24C02與P89V51RD2的接口 程序設(shè)計(jì)中需要解決的主要問題: I2C總線協(xié)議 24C02的讀寫,5,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02: 串行E2PROM是在各種串行器件應(yīng)用中使用較頻繁的器件,和并行E2PROM相比,串行E2PROM的數(shù)據(jù)傳送的速度較低,但是其體積較小,容量小,所含的引腳也較少。所以,它特別適合于需要存放非揮發(fā)數(shù)據(jù),要求速度不高,引腳少的單片機(jī)的應(yīng)用。 24CXX系列的E2PROM有10種型號,其中典型的型號有24C01/02/04/08/16等5種,它們的存儲容量分別是128/256/512/1024/2048字節(jié)。24CXX系列的E2PROM 支持I2C 總線數(shù)據(jù)傳送協(xié)議,通過器件地址輸入端A0、A1、A2 可以將最多8 個24C01 /24/C02 器件,4 個24C04 器件,2 個24C08 器件, 1 個24C16 器件連接到總線上。這里我們就24C02的進(jìn)行分析,其它型號與此類似。,6,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02:,7,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02:,8,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02:,A0 A1 A2器件地址輸入端: 當(dāng)使用24C02 時最大可級聯(lián)8 個器件, 如果只有一個24C02 被總線尋址這三個地址輸入腳A0 A1 A2 可懸空或連接到GND。 WP寫保護(hù): 如果WP 管腳連接到Vcc ,所有的內(nèi)容都被寫保護(hù)(只能讀).當(dāng)WP 管腳連接到GND或懸空,允許器件進(jìn)行正常的讀/寫操作。,9,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02:,SCL串行時鐘: 24C02串行時鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘這是一個輸入管腳。 SDA串行數(shù)據(jù)/地址: 24C02 雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(fā)送或接收SDA 是一個開漏輸出管腳可與其它開漏輸出或集電極開路輸出進(jìn)行線與(wire-OR)。,10,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設(shè)計(jì)范例五,范例分析: 硬件24C02與P89V51RD2的接口:,11,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: I2C 總線支持任何IC 生產(chǎn)過程N(yùn)MOS CMOS 雙極性兩線串行數(shù)據(jù)SDA 和串行時鐘。SCL 線在連接到總線的器件間傳遞信息每個器件都有一個唯一的地址識別無論是微控制器、LCD驅(qū)動器、存儲器或鍵盤接口。而且都可以作為一個發(fā)送器或接收器由器件的功能決定。很明顯LCD驅(qū)動器只是一個接收器而存儲器則既可以接收又可以發(fā)送數(shù)據(jù)。除了發(fā)送器和接收器外器件在執(zhí)行數(shù)據(jù)傳輸時也可以被看作是主機(jī)或從機(jī)。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號的器件,此時任何被尋址的器件都被認(rèn)為是從機(jī)。,12,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: SDA 和SCL 都是雙向線路都通過一個電流源或上拉電阻連接到正的電源電壓。都是高電平連接到總線的器件輸出級必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C 總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s 在快速模式下可達(dá)400kbit/s 在高速模式下可達(dá)3.4Mbit/s 。,13,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 數(shù)據(jù)的有效性 SDA 線上的數(shù)據(jù)必須在時鐘的高電平周期保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL 線的時鐘信號是低電平時才能改變。,14,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 啟始信號: 時鐘線保持高電平期間,數(shù)據(jù)線電平從高到低跳變作為I2C 總線的起始信號。,起始信號函數(shù): void I2CStart(void) SDA=1; SCL=1; SomeNoP( );延時 SDA=0; SomeNOP( ); SCL=0; ,15,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 停止信號: 時鐘線保持高電平期間,數(shù)據(jù)線電平從低到高跳變作為I2C 總線的起始信號。,停止信號函數(shù): void I2CStop(void) SCL=0; SDA=0; SomeNOP( );延時 SCL=1; SomeNOP( ); SDA=1; ,16,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 應(yīng)答信號: I2C 總線數(shù)據(jù)傳送時,每成功地傳送一個字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個應(yīng)答信號。應(yīng)答的器件在第9 個時鐘周期時將SDA 線拉低,表示其已收到一個8 位數(shù)據(jù)。,void SendAck(void)/應(yīng)答信號 SDA=0; /*SDA先清0,發(fā)應(yīng)答信號 */ SomeNOP(); SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/ SomeNOP(); SCL=0; /*SCL恢復(fù)到低電平,以便繼續(xù)接收*/ ,17,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 非應(yīng)答信號: I2C 總線數(shù)據(jù)傳送時,當(dāng)接受結(jié)束時,接收器都必須產(chǎn)生一個非應(yīng)答信號。器件在第9 個時鐘周期時將SDA 線置高,表示已經(jīng)接收完畢。如果主機(jī)接收數(shù)據(jù)時,它收到最后一個數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)送一個非應(yīng)答信號(/A),使從機(jī)釋放SDA線,以便主機(jī)產(chǎn)生終止信號,從而停止數(shù)據(jù)傳送。,void SendNotAck(void)/非應(yīng)答信號 SDA=1; /*SDA先置1,發(fā)非應(yīng)答信號 */ SomeNOP(); SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/ SomeNOP(); SCL=0; /*SCL恢復(fù)到低電平,以便繼續(xù)接收*/ ,18,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)格式 發(fā)送到SDA 線上的每個字節(jié)必須為8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制。每個字節(jié)后必須跟一個響應(yīng)位。首先傳輸?shù)氖菙?shù)據(jù)的最高位MSB,如果從機(jī)要完成一些其他功能后,例如一個內(nèi)部中斷服務(wù)程序才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié),可以使時鐘線SCL 保持低電平迫使主機(jī)進(jìn)入等待狀態(tài),當(dāng)從機(jī)準(zhǔn)備好接收下一個數(shù)據(jù)字節(jié)并釋放時鐘線SCL 后數(shù)據(jù)傳輸繼續(xù)。,19,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 器件地址: I2C總線上的每一個從機(jī)均有一個唯一的地址,每次主機(jī)發(fā)出起始信號后,必須接著發(fā)出一個字節(jié)的地址信息,以選取掛在總線上的某一從機(jī)。地址信息的格式如下:,其中D7-D0位表示從機(jī)的地址,D0位是數(shù)據(jù)傳送方向,為0時,表示主機(jī)向從機(jī)發(fā)送數(shù)據(jù)(寫),為1時,表示主機(jī)由從機(jī)處讀取數(shù)據(jù)。 主機(jī)發(fā)送地址時,總線上的每一個從機(jī)都將這7位地址碼與自已的器件地址進(jìn)行比較,如果相同則認(rèn)為自已正被主機(jī)尋址,根據(jù)讀寫位將自已確定為發(fā)送器或接收器。 從機(jī)的地址由一個固定部分和一個可編程部分組成。固定部分為器件的編號地址,表明了器件的類型,出廠時固定的??删幊滩糠譃槠骷囊_地址,視硬件接線而定。,20,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 器件地址: I2C總線上的每一個從機(jī)均有一個唯一的地址,每次主機(jī)發(fā)出起始信號后,必須接著發(fā)出一個字節(jié)的地址信息,以選取掛在總線上的某一從機(jī)。地址信息的格式如下:,例:24C02的地址格式如下: 其中高四位1010為器件標(biāo)識類型。 A2A0:引腳地址,對應(yīng)于該芯片引腳A2A0的取值,當(dāng)A2-A0引腳均接低電平時,該器件的地址為A0H或A1H,如果為A0H表示寫數(shù)據(jù)到該器件,A1H表示從該器件讀數(shù)據(jù)。 說明:從機(jī)地址只表明選擇掛在總線的哪一個器件及傳送方向,而器件內(nèi)部的地址是由編程者傳送的第一數(shù)據(jù)中指定的,即第一個數(shù)據(jù)為器件內(nèi)的子地址。,21,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)寫時序: 在字節(jié)寫模式下,主器件發(fā)送起始命令和從器件地址信息(R/W 位置零)給從器件,在從器件產(chǎn)生應(yīng)答信號后,主器件發(fā)從器件的字節(jié)地址.主器件在收到從器件的另一個應(yīng)答信號后,再發(fā)送數(shù)據(jù)到被尋址的存儲單元。從器件再次應(yīng)答,并在主器件產(chǎn)生停止信號后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中(對于24C02而言這一過程大概需要5ms),從器件不再應(yīng)答主器件的任何請求。,22,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)寫時序:,I2CStart( ); I2CSendByte( ); WaitAck( ); I2CSendByte( ); WaitAck( ); I2CSendByte( ); WaitAck( ); I2CStop( ); for(j=0;j200;j+); SomeNOP( );,23,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)讀時序立即讀: 24C02 的地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1。 也就是說,如果上次讀/寫的操作地址為N,則立即讀的地址從地址N+1 開始。如果N=E(這里對24C02,E=255),則計(jì)數(shù)器將翻轉(zhuǎn)到0 且繼續(xù)輸出數(shù)據(jù)。24C02 接收到從器件地址信號后(R/W 位置1),它首先發(fā)送一個應(yīng)答信號,然后發(fā)送一個8 位字節(jié)數(shù)據(jù)。主器件不需發(fā)送一個應(yīng)答信號,但要產(chǎn)生一個停止信號。,24,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)讀時序:,I2CStart( ); I2CSendByte( ); WaitAck( ); I2CSendByte( ); WaitAck( ); I2CStart( ); I2CSendByte( ); WaitAck( ); i=I2CReceiveByte( );,25,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)讀時序頁寫:,26,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)讀時序隨機(jī)讀:,27,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設(shè)計(jì)I2C總線協(xié)議: 字節(jié)讀時序順序讀:,28,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考流程 (設(shè)計(jì)程序?qū)崿F(xiàn)對小車上的外擴(kuò)24C02寫入數(shù)據(jù)2,然后讀出該數(shù)據(jù),并將其顯示在數(shù)碼管上。 ),29,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,#include #include #include #include #include #include #define uchar unsigned char #define uint unsigned int #define bool bit #define SomeNOP( );_nop_( );_nop_( );_nop_( );_nop_( );_nop_( );_nop_( ); _nop_( );_nop_( );_nop_( );_nop_( );_nop_( );_nop_( );_nop_( ); sbit SCL=P21; sbit SDA=P22; void I2CStart(void); void I2CStop(void);,30,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,void I2CSendByte(uchar x); uchar I2CReceiveByte(void); void SendAck(void); void SendNotAck(void); bool WaitAck(void); void delay(uchar x)/延時程序 while(x-) SomeNOP( ); SomeNOP( ); SomeNOP( ); SomeNOP( ); SomeNOP( ); SomeNOP( ); ,31,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,/* I2C相關(guān)函數(shù) */ void I2CStart(void) SDA=1; SCL=1; SomeNOP(); SDA=0; SomeNOP(); SCL=0; void I2CStop(void) SCL=0; SDA=0; SomeNOP(); SCL=1; SomeNOP(); SDA=1; ,32,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,bool WaitAck(void)/等待應(yīng)答信號 uchar errtime=255; SDA=1; SomeNOP(); SCL=1; SomeNOP(); while(SDA) errtime-; if(!errtime) I2CStop( ); return 0; SCL=0; return 1; ,33,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,void SendNotAck(void)/非應(yīng)答信號 SDA=1; SomeNOP(); SCL=1; SomeNOP(); SCL=0; void SendAck(void)/應(yīng)答信號 SDA=0; SomeNOP(); SCL=1; SomeNOP(); ,34,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,void I2CSendByte(uchar x)/發(fā)送一個字節(jié)數(shù)據(jù) uchar i=8; while(i-) SCL=0; _nop_(); SDA=(bit)(x ,35,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,uchar I2CReceiveByte(void)/接受一個字節(jié)數(shù)據(jù) uchar i=8; uchar temp=0; SDA=1; while(i-) temp=1; SCL=0; SomeNOP(); SCL=1; SomeNOP(); temp=temp|SDA; SCL=0; return temp; ,36,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機(jī)的接口,參考程序,void main() uchar i,j;

溫馨提示

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

評論

0/150

提交評論