實驗八51系列單片機IIC課件_第1頁
實驗八51系列單片機IIC課件_第2頁
實驗八51系列單片機IIC課件_第3頁
實驗八51系列單片機IIC課件_第4頁
實驗八51系列單片機IIC課件_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗八51系列單片機讀寫I2C總線I2C總線是PhilipsInterIntegrateCircuitBUS)。其在芯片間使用兩根連線實現(xiàn)全雙工同步數(shù)據(jù)傳送,一條數(shù)據(jù)線(SDA)和一條串行時鐘線(SCL),可以很方便地構成外圍器件擴展系統(tǒng)。I2C總線是很簡單方便的芯片間串行擴展總線。使用I2C總線可以直接和具有I2C總線接口的單片機通信,也可以和各種類型的外圍器件進行通信,如存儲器、A/D、D/A、鍵盤、LCD等。目前Philips、Atmel、Maxim以及其他集成電路制造商推出了很多基于I2C總線的單片機和外圍器件,如24系列E2PROM、串行實時時鐘芯片DS1302、USB2.0芯片CY7C68013A等。本章主要介紹了I2C總線的工作原理、結構以及尋址方式,并重點介紹了數(shù)據(jù)傳輸協(xié)議以及程序實現(xiàn)。這些程序均以子程序的形式提供,便于讀者調用。最后通過具體的實例,介紹如何使用單片機讀寫具有I2C總線接口的E2PROM。I2C總線概述I2C總線對數(shù)據(jù)通信進行了嚴格的定義,要進行I2C總線的接口設計,就需要首先了解I2C總線的工作原理圖、尋址方式和數(shù)據(jù)傳輸協(xié)議等。8.0I2C總線工作原理典型的I2C總線系統(tǒng)結構,如圖28.1所示。其采用兩線制,由數(shù)據(jù)線SDA和時鐘線SCL構成??偩€上掛接的單片機(主器件)或外圍器件(從器件),其接口電路都應具有I2C總線通信能力。8.3I2C總線器件的尋址方式I2C總線上的所有器件連接在一個公共的總線上,因此,主器件在進行數(shù)據(jù)傳輸前選擇需要通信的從器件,即進行總線尋址。I2C總線上所有外圍器件都需要有惟一的地址,由器件地址和引腳地址兩部分組成,共7位。器件地址是I2C器件固有的地址編碼,器件出廠時就已經(jīng)給定,不可更改。引腳地址是由I2C總線外圍器件的地址引腳(A2,A1,A0)決定,根據(jù)其在電路中接電源正極、接地或懸空的不同,形成不同的地址代碼。引腳地址數(shù)也決定了同一種器件可接入總線的最大數(shù)目。地址位與一個方向位共同構成I2C總線器件尋址字節(jié)。尋址字節(jié)的格式如表所示。方向位(R/)規(guī)定了總線上的主器件與外圍器件(從器件)的數(shù)據(jù)傳輸送方向。當方向位R/=1,表示主器件讀取從器件中的數(shù)據(jù);R/=0,表示主器件向從器件發(fā)送數(shù)據(jù)。8.3I2C總線數(shù)據(jù)傳輸協(xié)議及其程序詳解I2C總線規(guī)定了嚴格的數(shù)據(jù)通信格式,所有具有I2C總線接口的器件都必須遵守。另外,對于應用最廣的51系列單片機,卻沒有提供I2C總線接口。實際上,利用這些單片機的普通I/O口,采用軟件模擬I2C總線SCL和SDA上的數(shù)據(jù)傳送時序,完全可以實現(xiàn)對I2C總線器件的讀、寫操作。下面就分別介紹數(shù)據(jù)傳輸過程中的格式以及如何使用8051單片機來實現(xiàn)。這里假設51系列單片機的外接晶振頻率為6MHz,單片機的機器周期為2μs,采用P1.0作為時鐘線SCL,P1.1作為數(shù)據(jù)線SDA。8.3.1起始信號起始信號用于開始I2C總線通信。在時鐘線SCL為高電平期間,數(shù)據(jù)線SDA上出現(xiàn)由高電平向低電平變化的下降沿時,被認為是起始信號。起始信號出現(xiàn)以后,才可以進行尋址或數(shù)據(jù)傳輸?shù)?。如果采用C語言進行程序設計,則其程序示例如下:voidI_Start(){ SDA=HIGH; I_Delay(100); SCL=HIGH; I_Delay(100); SDA=LOW; I_Delay(100); SCL=LOW; I_Delay(100);}8.3.3應答信號應答信號用于表明數(shù)據(jù)傳輸?shù)慕Y束。I2C總線數(shù)據(jù)傳送時,每傳送一個字節(jié)數(shù)據(jù)后都必須有應答信號。應答信號從主器件產(chǎn)生。主器件在第9個時鐘位上釋放數(shù)據(jù)總線,使其處于高電平狀態(tài),此時從器件輸出低電平拉低數(shù)據(jù)總線為應答信號。如果采用C語言進行程序設計,則發(fā)送應答位子程序示例如下:voidI_Ack(){ SDA=LOW; I_Delay(100); SCL=HIGH; I_Delay(100); SCL=LOW; I_Delay(100); SDA=HIGH; I_Delay(100);}8.3.4非應答信號非應答信號用于數(shù)據(jù)傳輸出現(xiàn)異常而無法完成時。在傳送完一個字節(jié)數(shù)據(jù)后,在第9個時鐘位上從器件輸出高電平為非應答信號。非應答信號的產(chǎn)生有兩種情況。當從器件正在進行其他處理而無法接收總線上的數(shù)據(jù)時,從器件不產(chǎn)生應答,此時從器件釋放總線,將數(shù)據(jù)線置為高電平。這樣,主器件可產(chǎn)生一個停止信號來終止總線數(shù)據(jù)傳輸。當主器件接收來自從器件的數(shù)據(jù)時,接收到最后一個數(shù)據(jù)字節(jié)后,必須給從器件發(fā)送一個非應答信號,使從器件釋放數(shù)據(jù)總線。這樣,主器件才可以發(fā)送停止信號,從而終止數(shù)據(jù)傳送。8.3.5應答位檢查應答位檢查用于檢測接收的是否為正常的應答信號,以便于判斷數(shù)據(jù)接收是否正常,方便后期處理。如果采用C語言進行程序設計,則檢查應答位子程序示例如下:bitI_TestAck(){ bitErrorBit; SDA=HIGH; I_Delay(100); SCL=HIGH; I_Delay(100); ErrorBit=SDA; SCL=LOW; I_Delay(100); return(ErrorBit);}8.3.7寫數(shù)據(jù)I2C總線協(xié)議規(guī)定了完整的數(shù)據(jù)傳送格式。按照協(xié)議規(guī)定,數(shù)據(jù)傳輸?shù)拈_始以主器件發(fā)出起始信號為準,然后發(fā)送尋址字節(jié)。尋址字節(jié)共8位,高7位是被尋址的從器件地址,最低一位是方向位,方向位表示主器件與從器件之間的數(shù)據(jù)傳送方向,方向位為“0”時表示主器件向從器件發(fā)送數(shù)據(jù)(寫)。在尋址字節(jié)后是將要傳送的數(shù)據(jù)字節(jié)與應答位,數(shù)據(jù)可以多字節(jié)連續(xù)發(fā)送。在數(shù)據(jù)傳送完畢后,主器件必須發(fā)送終止信號已釋放總線控制權。如果主器件希望繼續(xù)占用總線,則可以不產(chǎn)生終止信號,馬上再次發(fā)送起始信號,并對另一從器件進行尋址,便可進行新的數(shù)據(jù)傳送。寫入8位I_Write8Bit(INT8Uinput){ INT8Ui; for(i=0;i<8;i++) {SDA=(bit)(input&0x80); SCL=HIGH; I_Delay(100); SCL=LOW; I_Delay(100); input=input<<1; }}向指定的地址中寫入一個字節(jié)的數(shù)據(jù)voidwrite_byte(INT8URomAddress,INT8UWdata){ I_Start(); I_Write8Bit(WriteDeviceAddress); I_TestAck(); I_Write8Bit(RomAddress); I_TestAck();I_Write8Bit(Wdata); I_TestAck();

I_Stop(); I_Wait(20);}讀取8位INT8UI_Read8Bit(){ INT8Ui,rbyte=0; for(i=0;i<8;i++) {SCL=HIGH; rbyte=rbyte<<1; rbyte=rbyte|((INT8U)(SDA)); SCL=LOW; } return(rbyte);}從地址中讀取一個字節(jié)的數(shù)據(jù)INT8Uread_random(INT8URomAddress){INT8URead_data;I_Start(); I_Write8Bit(WriteDeviceAddress); I_TestAck(); I_Write8Bit(RomAddress); I_TestAck(); I_Start(); I_Write8Bit(ReadDeviceAddress); I_TestAck(); Read_data=I_Read8Bit(); I_NoAck(); I_Stop(); return(Read_data);}8.451單片機讀寫EEPROMI2C總線接口器件以體積小、接口簡單、讀寫操作方便等優(yōu)點,使其在單片機系統(tǒng)中有著廣泛的應用。目前常用于存儲系統(tǒng)必要的參數(shù),如密碼、啟動代碼、設備標識等。例如,計算機主板中的BIOS就使用的是一個帶有I2C總線的EEPROM,其中保存了系統(tǒng)得重要信息和系統(tǒng)參數(shù)的設置程序。目前USB接口及其設備越來越被廣泛使用,大有取代其他老式接口的趨勢。然而,如何區(qū)分計算機上連接的眾多USB外圍設備呢?其實絕大部分的USB接口芯片都通過上電讀一個帶有I2C總線的串行EEPROM,來載入該設備的ID(包括VendorID、ProductID和DeviceID),根據(jù)這些ID來區(qū)分各個USB設備,并加載相應的驅動程序。函數(shù)的調用main(){INT8Uiic_dat;clr_scr(0);clr_scr(1);//write_byte(1,13);iic_dat=read_random(1);disp_zf(iic_dat/10,0,0,0);disp_zf(iic_dat%10,8,0,0);while(1);}8.5小結本章詳細介紹了I2C串行總線的工作原理、結構

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論