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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論