




已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
11,C51綜合程序設計范例(五),2,SiChuan Engineering Technical Colledge-1959,本講主要內(nèi)容:,11-1.綜合程序設計范例五(I2C接口程序設計) 11-2.I2C總線接口協(xié)議 11-3.24C02與單片機接口 11-3.實驗十,3,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設計范例五,設計范例:設計程序實現(xiàn)向24C02的第一個單元寫入一個數(shù)據(jù),再將該數(shù)據(jù)讀出,并將其顯示在數(shù)碼管上。,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的數(shù)據(jù)傳送的速度較低,但是其體積較小,容量小,所含的引腳也較少。所以,它特別適合于需要存放非揮發(fā)數(shù)據(jù),要求速度不高,引腳少的單片機的應用。 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的進行分析,其它型號與此類似。,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 時最大可級聯(lián)8 個器件, 如果只有一個24C02 被總線尋址這三個地址輸入腳A0 A1 A2 可懸空或連接到GND。 WP寫保護: 如果WP 管腳連接到Vcc ,所有的內(nèi)容都被寫保護(只能讀).當WP 管腳連接到GND或懸空,允許器件進行正常的讀/寫操作。,9,SiChuan Engineering Technical Colledge-1959,11-1 綜合程序設計范例五,范例分析: 硬件24C02:,SCL串行時鐘: 24C02串行時鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘這是一個輸入管腳。 SDA串行數(shù)據(jù)/地址: 24C02 雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(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 生產(chǎn)過程NMOS CMOS 雙極性兩線串行數(shù)據(jù)SDA 和串行時鐘。SCL 線在連接到總線的器件間傳遞信息每個器件都有一個唯一的地址識別無論是微控制器、LCD驅動器、存儲器或鍵盤接口。而且都可以作為一個發(fā)送器或接收器由器件的功能決定。很明顯LCD驅動器只是一個接收器而存儲器則既可以接收又可以發(fā)送數(shù)據(jù)。除了發(fā)送器和接收器外器件在執(zhí)行數(shù)據(jù)傳輸時也可以被看作是主機或從機。主機是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號的器件,此時任何被尋址的器件都被認為是從機。,12,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: SDA 和SCL 都是雙向線路都通過一個電流源或上拉電阻連接到正的電源電壓。都是高電平連接到總線的器件輸出級必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C 總線上數(shù)據(jù)的傳輸速率在標準模式下可達100kbit/s 在快速模式下可達400kbit/s 在高速模式下可達3.4Mbit/s 。,13,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: 數(shù)據(jù)的有效性 SDA 線上的數(shù)據(jù)必須在時鐘的高電平周期保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL 線的時鐘信號是低電平時才能改變。,14,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計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é)議,范例分析: 程序設計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é)議,范例分析: 程序設計I2C總線協(xié)議: 應答信號: I2C 總線數(shù)據(jù)傳送時,每成功地傳送一個字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個應答信號。應答的器件在第9 個時鐘周期時將SDA 線拉低,表示其已收到一個8 位數(shù)據(jù)。,void SendAck(void)/應答信號 SDA=0; /*SDA先清0,發(fā)應答信號 */ SomeNOP(); SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/ SomeNOP(); SCL=0; /*SCL恢復到低電平,以便繼續(xù)接收*/ ,17,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: 非應答信號: I2C 總線數(shù)據(jù)傳送時,當接受結束時,接收器都必須產(chǎn)生一個非應答信號。器件在第9 個時鐘周期時將SDA 線置高,表示已經(jīng)接收完畢。如果主機接收數(shù)據(jù)時,它收到最后一個數(shù)據(jù)字節(jié)后,必須向從機發(fā)送一個非應答信號(/A),使從機釋放SDA線,以便主機產(chǎn)生終止信號,從而停止數(shù)據(jù)傳送。,void SendNotAck(void)/非應答信號 SDA=1; /*SDA先置1,發(fā)非應答信號 */ SomeNOP(); SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/ SomeNOP(); SCL=0; /*SCL恢復到低電平,以便繼續(xù)接收*/ ,18,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: 字節(jié)格式 發(fā)送到SDA 線上的每個字節(jié)必須為8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制。每個字節(jié)后必須跟一個響應位。首先傳輸?shù)氖菙?shù)據(jù)的最高位MSB,如果從機要完成一些其他功能后,例如一個內(nèi)部中斷服務程序才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié),可以使時鐘線SCL 保持低電平迫使主機進入等待狀態(tài),當從機準備好接收下一個數(shù)據(jù)字節(jié)并釋放時鐘線SCL 后數(shù)據(jù)傳輸繼續(xù)。,19,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: 器件地址: I2C總線上的每一個從機均有一個唯一的地址,每次主機發(fā)出起始信號后,必須接著發(fā)出一個字節(jié)的地址信息,以選取掛在總線上的某一從機。地址信息的格式如下:,其中D7-D0位表示從機的地址,D0位是數(shù)據(jù)傳送方向,為0時,表示主機向從機發(fā)送數(shù)據(jù)(寫),為1時,表示主機由從機處讀取數(shù)據(jù)。 主機發(fā)送地址時,總線上的每一個從機都將這7位地址碼與自已的器件地址進行比較,如果相同則認為自已正被主機尋址,根據(jù)讀寫位將自已確定為發(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表示寫數(shù)據(jù)到該器件,A1H表示從該器件讀數(shù)據(jù)。 說明:從機地址只表明選擇掛在總線的哪一個器件及傳送方向,而器件內(nèi)部的地址是由編程者傳送的第一數(shù)據(jù)中指定的,即第一個數(shù)據(jù)為器件內(nèi)的子地址。,21,SiChuan Engineering Technical Colledge-1959,11-2 I2C總線接口協(xié)議,范例分析: 程序設計I2C總線協(xié)議: 字節(jié)寫時序: 在字節(jié)寫模式下,主器件發(fā)送起始命令和從器件地址信息(R/W 位置零)給從器件,在從器件產(chǎn)生應答信號后,主器件發(fā)從器件的字節(jié)地址.主器件在收到從器件的另一個應答信號后,再發(fā)送數(shù)據(jù)到被尋址的存儲單元。從器件再次應答,并在主器件產(chǎn)生停止信號后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中(對于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 的地址計數(shù)器內(nèi)容為最后操作字節(jié)的地址加1。 也就是說,如果上次讀/寫的操作地址為N,則立即讀的地址從地址N+1 開始。如果N=E(這里對24C02,E=255),則計數(shù)器將翻轉到0 且繼續(xù)輸出數(shù)據(jù)。24C02 接收到從器件地址信號后(R/W 位置1),它首先發(fā)送一個應答信號,然后發(fā)送一個8 位字節(jié)數(shù)據(jù)。主器件不需發(fā)送一個應答信號,但要產(chǎn)生一個停止信號。,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與單片機的接口,參考流程 (設計程序實現(xiàn)對小車上的外擴24C02寫入數(shù)據(jù)2,然后讀出該數(shù)據(jù),并將其顯示在數(shù)碼管上。 ),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相關函數(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與單片機的接口,參考程序,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é)數(shù)據(jù) uchar i=8; while(i-) SCL=0; _nop_(); SDA=(bit)(x ,35,SiChuan Engineering Technical Colledge-1959,11-3 24C02與單片機的接口,參考程序,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與單片機的接口,參考程序,void main() uchar i,j;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物化學(第4版)課件 第6章 生物氧化
- 現(xiàn)實題材紀錄片的人物塑造策略研究-以畢業(yè)作品《追星星的人》為例
- 身體健康素質教育體系構建與實施
- 節(jié)約糧食中班健康教案
- 大學交通安全與法治教育
- 清洗外墻安全培訓
- 顱骨說課課件
- 寶寶夜間急救方案護理
- 預防殘疾主題班會課件
- 預防兒童疾病課件教學
- T-CPUMT 025-2024 工業(yè)互聯(lián)網(wǎng)平臺 服務通.用要求
- 2025年度地質勘探監(jiān)理服務合同范本
- 保山隆陽區(qū)小升初數(shù)學試卷
- 2025年上半年北京市西城區(qū)教委事業(yè)單位公開招聘考試筆試易考易錯模擬試題(共500題)試卷后附參考答案
- RoHS知識培訓課件
- 2024-2025學年北京西城區(qū)高一(上)期末語文試卷(含答案)
- 2025年貴州貴旅集團雷山文化旅游產(chǎn)業(yè)發(fā)展有限責任公司招聘筆試參考題庫附帶答案詳解
- 2024年初升高數(shù)學銜接教材講義
- 血小板減少護理查房課件
- 人教版(2024)數(shù)學七年級上冊期末測試卷(含答案)
- 辦公用品、易耗品供貨服務方案
評論
0/150
提交評論