![單片機(jī)原理及應(yīng)用(C51版)教案第8章 單片機(jī)串行擴(kuò)展技術(shù)_第1頁(yè)](http://file4.renrendoc.com/view8/M01/22/1F/wKhkGWcjU-OAOb9zAAJnoanzH4g549.jpg)
![單片機(jī)原理及應(yīng)用(C51版)教案第8章 單片機(jī)串行擴(kuò)展技術(shù)_第2頁(yè)](http://file4.renrendoc.com/view8/M01/22/1F/wKhkGWcjU-OAOb9zAAJnoanzH4g5492.jpg)
![單片機(jī)原理及應(yīng)用(C51版)教案第8章 單片機(jī)串行擴(kuò)展技術(shù)_第3頁(yè)](http://file4.renrendoc.com/view8/M01/22/1F/wKhkGWcjU-OAOb9zAAJnoanzH4g5493.jpg)
![單片機(jī)原理及應(yīng)用(C51版)教案第8章 單片機(jī)串行擴(kuò)展技術(shù)_第4頁(yè)](http://file4.renrendoc.com/view8/M01/22/1F/wKhkGWcjU-OAOb9zAAJnoanzH4g5494.jpg)
![單片機(jī)原理及應(yīng)用(C51版)教案第8章 單片機(jī)串行擴(kuò)展技術(shù)_第5頁(yè)](http://file4.renrendoc.com/view8/M01/22/1F/wKhkGWcjU-OAOb9zAAJnoanzH4g5495.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章
單片機(jī)串行擴(kuò)展技術(shù)對(duì)三種單片機(jī)串行總線的原理、時(shí)序和擴(kuò)展方法進(jìn)行討論,并對(duì)單片機(jī)系統(tǒng)中最典型的串行總線器件的應(yīng)用進(jìn)行詳細(xì)講解。第8章
單片機(jī)串行擴(kuò)展技術(shù)串行總線概述8.1單總線接口及其擴(kuò)展8.2I2C總線接口及其擴(kuò)展8.3SPI總線接口及其擴(kuò)展8.4與并行總線相比,采用串行總線進(jìn)行擴(kuò)展時(shí),簡(jiǎn)化了系統(tǒng)的連線,縮小了電路板的面積,節(jié)省了系統(tǒng)的資源,具有擴(kuò)展性好、成本低廉、可靠性高、硬件易于模塊化等優(yōu)點(diǎn)。采用串行總線擴(kuò)展方法是當(dāng)前單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的流行趨勢(shì)。目前單片機(jī)應(yīng)用系統(tǒng)常用的串行擴(kuò)展總線有單總線、I2C總線(二線總線)和SPI總線(三線總線)。8.1串行總線概述1.基本結(jié)構(gòu)單總線僅定義有一根信號(hào)線,時(shí)鐘信息和數(shù)據(jù)均經(jīng)該信號(hào)線傳遞。每個(gè)單總線器件都具有唯一的64位ID號(hào),主機(jī)可根據(jù)它來(lái)區(qū)分掛在同一總線上的不同單總線器件。8.2.1
單總線的基礎(chǔ)知識(shí)8.2
單總線接口及其擴(kuò)展單總線是Dallas半導(dǎo)體公司推出的外圍串行擴(kuò)展總線,采用單根信號(hào)線,既可傳輸時(shí)鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術(shù)具有線路簡(jiǎn)單,硬件開(kāi)銷(xiāo)少,成本低廉,便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn)。單總線適用于單主機(jī)系統(tǒng),單主機(jī)能夠控制一個(gè)或多個(gè)從機(jī)設(shè)備。主機(jī)可以是微控制器(單片機(jī)),從機(jī)可以是單總線器件。當(dāng)只有一個(gè)從機(jī)時(shí),系統(tǒng)可按單節(jié)點(diǎn)系統(tǒng)操作;當(dāng)有多個(gè)從機(jī)時(shí),系統(tǒng)則按多節(jié)點(diǎn)系統(tǒng)操作。下圖是單總線多節(jié)點(diǎn)系統(tǒng)的示意圖。8.2.1
單總線的基礎(chǔ)知識(shí)8.2.1
單總線的基礎(chǔ)知識(shí)單總線只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設(shè)備(主機(jī)或從機(jī))通過(guò)一個(gè)漏極開(kāi)路或三態(tài)端口連至該數(shù)據(jù)線,這樣允許設(shè)備不發(fā)送數(shù)據(jù)時(shí)釋放總線,以便其他設(shè)備使用,其內(nèi)部等效電路如下圖所示,單總線要求外接一個(gè)約4.7kΩ的上拉電阻。當(dāng)總線閑置時(shí),狀態(tài)為高電平。2.主機(jī)和從機(jī)之間的通信方法主機(jī)(單片機(jī))和從機(jī)(單總線器件)之間的通信通過(guò)以下3個(gè)步驟來(lái)完成:初始化單總線器件;識(shí)別單總線器件;交換數(shù)據(jù)。由于兩者是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時(shí),從機(jī)才能應(yīng)答,因此主機(jī)訪問(wèn)單總線器件都必須嚴(yán)格遵循單總線命令順序:初始化、ROM命令、功能命令。如果出現(xiàn)順序混亂,單總線器件不會(huì)響應(yīng)(搜索ROM命令,報(bào)警搜索命令除外)。8.2.1
單總線的基礎(chǔ)知識(shí)3.常用單總線器件通常把掛在單總線上的器件稱(chēng)為單總線器件。單總線器件內(nèi)一般都配置了控制、收/發(fā)、存儲(chǔ)等電路模塊。為了區(qū)分不同的單總線器件,廠家生產(chǎn)時(shí)都要刻錄一個(gè)64位的二進(jìn)制ROM代碼,以標(biāo)志其ID號(hào),這個(gè)ID號(hào)是全球唯一的。目前,單總線器件主要有數(shù)字溫度傳感器(如DS18B20)、A/D轉(zhuǎn)換器(如DS2450)、門(mén)標(biāo)、身份識(shí)別器(如DS1990A)、單總線控制器(如DS1WM)等。8.2.1
單總線的基礎(chǔ)知識(shí)單總線器件要嚴(yán)格遵循通信協(xié)議,以保證數(shù)據(jù)的完整性。單總線定義了幾種信號(hào)類(lèi)型,包括復(fù)位脈沖、應(yīng)答脈沖、寫(xiě)0、寫(xiě)1、讀0和讀1時(shí)序。所有的單總線命令序列(初始化、ROM命令、功能命令)都是由這些基本的信號(hào)類(lèi)型組成的。這些信號(hào),除了應(yīng)答脈沖外都是由主機(jī)發(fā)出的信號(hào),并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。在單總線傳輸數(shù)據(jù)時(shí),邏輯0用一段持續(xù)的低電平表示,邏輯1用一段持續(xù)的高電平表示。主機(jī)向從機(jī)傳輸數(shù)據(jù)時(shí)產(chǎn)生寫(xiě)時(shí)序,主機(jī)從從機(jī)讀取數(shù)據(jù)時(shí)產(chǎn)生讀時(shí)序。讀時(shí)序和寫(xiě)時(shí)序均以單片機(jī)驅(qū)動(dòng)總線產(chǎn)生低電平開(kāi)始。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào)的器件。此時(shí),任何被尋址的器件都被認(rèn)為是從機(jī)。8.2.2
單總線的數(shù)據(jù)傳輸時(shí)序1.初始化時(shí)序初始化時(shí)序包括主機(jī)發(fā)送的復(fù)位脈沖和從機(jī)發(fā)出的應(yīng)答脈沖。主機(jī)通過(guò)拉低單總線至少480μs,以產(chǎn)生Tx復(fù)位脈沖,然后釋放總線,并進(jìn)入Rx接收模式。當(dāng)主機(jī)釋放總線,總線由低電平跳變?yōu)楦唠娖綍r(shí)產(chǎn)生上升沿,從機(jī)檢測(cè)到這個(gè)上升沿后,延時(shí)15~60μs,從機(jī)接收到單片機(jī)發(fā)來(lái)的復(fù)位脈沖后,便通過(guò)拉低總線60~240μs,以產(chǎn)生應(yīng)答脈沖。主機(jī)接收到從機(jī)應(yīng)答脈沖后,說(shuō)明有單總線器件在線,然后就開(kāi)始對(duì)從機(jī)進(jìn)行ROM命令和功能命令操作。初始化時(shí)序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時(shí)序2.主機(jī)寫(xiě)時(shí)序主機(jī)寫(xiě)時(shí)序由寫(xiě)0時(shí)序和寫(xiě)1時(shí)序組成。單總線傳遞寫(xiě)1、寫(xiě)0過(guò)程為:所有的寫(xiě)時(shí)序至少需要60μs,且每?jī)蓚€(gè)獨(dú)立的時(shí)序之間至少需要1μs的恢復(fù)時(shí)間。對(duì)于寫(xiě)0時(shí)序,主機(jī)拉低總線并保持低電平至少60μs,然后釋放總線;對(duì)于寫(xiě)1時(shí)序,主機(jī)拉低總線,然后在15μs內(nèi)要釋放總線。從機(jī)必須在15~60μs之間采樣總線狀態(tài),從而接收到從機(jī)發(fā)送的數(shù)據(jù)。主機(jī)寫(xiě)時(shí)序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時(shí)序3.主機(jī)讀時(shí)序主機(jī)讀時(shí)序由讀0時(shí)序和讀1時(shí)序組成。主機(jī)讀操作時(shí),主機(jī)首先要拉低總線至少1μs,主機(jī)釋放總線后,總線電平就由從機(jī)決定。從機(jī)若發(fā)送1,則保持總線高電平,若發(fā)送0,則拉低總線。從機(jī)發(fā)送之后,保持15μs有效時(shí)間,因而,主機(jī)必須在15μs之中采樣總線狀態(tài),從而接收到從機(jī)發(fā)送的數(shù)據(jù)。主機(jī)讀時(shí)序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時(shí)序8.2.3
數(shù)字溫度傳感器DS18B20Dallas半導(dǎo)體公司的DS18B20數(shù)字溫度傳感器是“單總線”的典型代表,DS18B20的溫度測(cè)量范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。采用“單總線”方式傳輸,可以提高系統(tǒng)的抗干擾能力,所以DS18B20廣泛用于溫度采集及監(jiān)控領(lǐng)域。1.DS18B20的引腳定義DS18B20的引腳圖如下圖所示。GND:電源地;DQ:數(shù)字信號(hào)輸入輸出端;Vdd:外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。2.DS18B20的內(nèi)部結(jié)構(gòu)DS18B20溫度傳感器主要由64位ROM、高速緩沖存儲(chǔ)器、CRC生成器、溫度敏感元件、高低溫觸發(fā)器及配置寄存器等部件組成。內(nèi)部結(jié)構(gòu)如下圖所示。8.2.3
數(shù)字溫度傳感器DS18B20(1)DS18B20的ID號(hào)。每個(gè)DS18B20都有64位的ROM,以標(biāo)志其ID號(hào)。出廠前ROM固化有確定的內(nèi)容,如下圖所示。低8位(28H)是產(chǎn)品類(lèi)型標(biāo)識(shí)號(hào),接著的48位是該DS18B20的ID號(hào),高8位是前56位的循環(huán)冗余校驗(yàn)碼。由于每個(gè)DS18B20都有自己的ID號(hào),這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。8.2.3
數(shù)字溫度傳感器DS18B20(2)DS18B20的高速緩沖存儲(chǔ)器。在DS18B20的內(nèi)部有9個(gè)字節(jié)高速緩沖存儲(chǔ)單元。各單元分配的功能如下圖所示。第1及第2字節(jié)存放轉(zhuǎn)換完成的溫度值;第3和第4字節(jié)分別存放上、下限報(bào)警值TH和TL;第5字節(jié)為配置寄存器;第6、7、8字節(jié)為保留字節(jié);第9字節(jié)是前8字節(jié)的CRC校驗(yàn)碼,用來(lái)提高串行傳輸?shù)目煽啃?。另外,在DS18B20的內(nèi)部還用3個(gè)單元存放上下限報(bào)警值TH、TL和配置寄存器的設(shè)定值。數(shù)據(jù)先寫(xiě)入高速緩沖存儲(chǔ)器,然后再傳給單元。8.2.3
數(shù)字溫度傳感器DS18B20
配置寄存器字節(jié)的最高位D7為測(cè)試模式位,出廠時(shí)為0,用戶(hù)不需要改動(dòng)。D6D5位(R1R0)用于設(shè)置DS18B20的轉(zhuǎn)換分辨率,取值00、01、10、11,對(duì)應(yīng)分辨率有9、10、11和12位四種選擇,對(duì)應(yīng)的轉(zhuǎn)換時(shí)間分別為:93.73ms、187.5ms、275ms和750ms。其余的低5位為保留位(均為1)。
配置寄存器格式如下所示(出廠時(shí)默認(rèn)值為7FH,即分辨率為12位):位D7D6D5D4D3D2D1D0
0R1R0111118.2.3
數(shù)字溫度傳感器DS18B203.DS18B20的溫度值格式DS18B20中的溫度敏感元件完成對(duì)溫度的檢測(cè),轉(zhuǎn)換后的溫度值以帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼(16位)形式存儲(chǔ)在高速緩沖存儲(chǔ)器的第1和第2字節(jié)中。溫度值以0.0625℃/LSB形式表達(dá)。采樣值與溫度值關(guān)系如下表所示。二進(jìn)制采樣值十六進(jìn)制表示十進(jìn)制溫度/℃000001111101000007D0H+12500000001100100010191H+25.062500000000000010000008H+0.500000000000000000000H01111111111111000FFF8H-0.51111111001101111FE6FH-25.06251111110010010000FC90H-558.2.3
數(shù)字溫度傳感器DS18B2012位分辨率時(shí)的溫度值格式如下圖所示。當(dāng)符號(hào)位S為0時(shí),表示溫度為正,只要將二進(jìn)制采樣值轉(zhuǎn)換為十進(jìn)制數(shù)就可以得到十進(jìn)制表示的溫度值;當(dāng)符號(hào)位S為1時(shí),表示溫度為負(fù)(用補(bǔ)碼表示),這時(shí)要對(duì)讀取的采樣值去補(bǔ)(取反加1),再轉(zhuǎn)換為十進(jìn)制數(shù)才能得到十進(jìn)制表示的溫度值。8.2.3
數(shù)字溫度傳感器DS18B204.ROM操作命令ROM命令主要用于單總線上接有多個(gè)DS18B20的情況,ROM操作命令與總線上具體DS18B20器件的ID號(hào)相關(guān)。ROM操作命令有5條,如下表所示。指令及代碼說(shuō)明讀ROM33H讀總線上DS18B20的ID(序列)號(hào)匹配ROM55H依ID號(hào)訪問(wèn)確定的DS18B20器件跳過(guò)ROMCCH只使用RAM命令,操作在線的DS18B20器件搜索ROMF0H對(duì)總線上的多個(gè)DS18B20進(jìn)行識(shí)別報(bào)警搜索ECH主機(jī)搜索越限報(bào)警的DS18B20器件8.2.3
數(shù)字溫度傳感器DS18B205.RAM操作命令單片機(jī)利用ROM操作命令,與總線上指定的DS18B20器件建立起聯(lián)系后,就可以對(duì)這個(gè)指定器件實(shí)施RAM操作命令。這些操作命令允許單片機(jī)寫(xiě)入或讀出DS18B20器件緩沖器的內(nèi)容。RAM操作命令有6條,如下表所示。指令代碼說(shuō)明溫度轉(zhuǎn)換44H啟動(dòng)DS18B20開(kāi)始轉(zhuǎn)換讀緩沖器BEH讀緩沖器的9個(gè)字節(jié)數(shù)據(jù)寫(xiě)緩沖器4EH向DS18B20寫(xiě)TH、TL及配置寄存器數(shù)據(jù)復(fù)制緩沖器48H將緩沖器的TH、TL和配置寄存器值送E2PROM回讀E2PROMB8H將E2PROM中的TH、TL和配置寄存器值送緩沖器讀供電方式B4H檢測(cè)供電方式:寄生或外接方式8.2.3
數(shù)字溫度傳感器DS18B206.DS18B20的應(yīng)用【例8-1】如下圖所示,89C51和一個(gè)DS18B20構(gòu)成單點(diǎn)溫度檢測(cè)系統(tǒng),試編寫(xiě)溫度測(cè)試程序,溫度值存入片內(nèi)RAM中的35H、36H兩個(gè)單元。晶振頻率為12MHz。8.2.3
數(shù)字溫度傳感器DS18B20分析首先初始化DS18B20;其次啟動(dòng)溫度轉(zhuǎn)換;然后讀出溫度值(2個(gè)字節(jié))并分別存入35H、36H兩個(gè)單元??梢远x一些參數(shù)DQ:DS18B20的數(shù)據(jù)總線接腳;TEMP_L:35H,保存讀出的溫度數(shù)據(jù)的低位;TEMP_H:36H,保存讀出的溫度數(shù)據(jù)的高位。本程序僅適合單個(gè)DS18B20和MCS-51單片機(jī)的連接。8.2.3
數(shù)字溫度傳感器DS18B20參考程序#include<reg51.h>#include<intrins.h>#defineucharunsignedchardataucharTEMP_L_at_0x35;dataucharTEMP_H_at_0x36;voiddelay5(ucharn)//延時(shí)5μs{ do { _nop_(); _nop_(); _nop_(); n--; } while(n);}voidinit_18b20()//DS18B20的初始化函數(shù){ DQ=1; //拉高總線,準(zhǔn)備初始化 _nop_(); DQ=0; //拉低電平,初始化 delay5(100); //延時(shí)500μs DQ=1; //釋放總線 delay5(100); //延時(shí)500μs}voidwritebyte(uchardat)//向DS18B20寫(xiě)數(shù)據(jù)的函數(shù)
{ uchari; for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; delay5(12);//寫(xiě)“0”至少拉低60μs//寫(xiě)“1”至少拉低15μs DQ=1; dat>>=1; delay5(1); } }8.2.3
數(shù)字溫度傳感器DS18B20ucharreadbyte()//從DS18B20讀數(shù)據(jù)的函數(shù)
{uchardat,i,j;for(i=0;i<8;i++) {DQ=0;delay5(1);DQ=1; j=DQ;//讀取數(shù)據(jù),存在j的最低位dat=(dat>>1)|(j<<7);//讀出的數(shù)據(jù)
//存在dat的最高位delay5(11);//整段程序要大于60μs}returndat;}voidtempchange()//溫度轉(zhuǎn)換函數(shù){ writebyte(0xcc);//忽略ROM writebyte(0x44);//開(kāi)始轉(zhuǎn)換溫度}voidreadtemp()//溫度讀取函數(shù)
{ writebyte(0xcc);//忽略ROM writebyte(0xbe);//讀緩沖器}voidmain() { while(1) { init_18b20(); tempchange(); init_18b20(); readtemp(); TEMP_L=readbyte(); TEMP_H=readbyte(); }}8.2.3
數(shù)字溫度傳感器DS18B208.3
I2C總線接口及其擴(kuò)展I2C總線是Philips公司推出的芯片間串行數(shù)據(jù)傳輸總線,后來(lái)發(fā)展成為嵌入式系統(tǒng)設(shè)備間通信的國(guó)際標(biāo)準(zhǔn),用于連接微控制器及其外圍設(shè)備,是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少,控制方式簡(jiǎn)單,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。1.I2C總線的特點(diǎn)(1)采用二線制。(2)傳輸速率高。(3)支持多主和主/從兩種工作方式。8.3.1
I2C總線的基礎(chǔ)知識(shí)2.I2C總線的架構(gòu)I2C總線只有兩根連線。一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有連接到I2C總線上的器件的數(shù)據(jù)線都接到SDA線上,各器件的時(shí)鐘線均接到SCL線上。I2C總線的基本架構(gòu)如下圖所示。8.3.1
I2C總線的基礎(chǔ)知識(shí)3.I2C總線的常用器件I2C總線廣泛用于各種新型芯片中,如I/O電路、存儲(chǔ)器、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、溫度傳感器及微控制器等。許多器件生產(chǎn)廠商都采用了I2C總線設(shè)計(jì)產(chǎn)品,如Atmel公司的E2PROM器件AT24C04
/08/16/64/128/256/512;MAXIMUM公司的A/D轉(zhuǎn)換器件MAX1036~MAX1039等。8.3.1
I2C總線的基礎(chǔ)知識(shí)在I2C總線上,每一位數(shù)據(jù)位的傳輸都與時(shí)鐘脈沖相對(duì)應(yīng)。邏輯0和邏輯1的信號(hào)電平取決于相應(yīng)的電源電壓。對(duì)于數(shù)據(jù)傳輸,I2C總線協(xié)議規(guī)定了如下信號(hào)及時(shí)序。1.起始和停止信號(hào)起始和停止信號(hào)如下圖所示。SCL為高電平期間,SDA由高電平向低電平的變化表示起始信號(hào)。SCL為高電平期間,SDA由低電平向高電平的變化表示停止信號(hào)??偩€空閑時(shí),SCL和SDA兩條線都是高電平。SDA線的起始信號(hào)和停止信號(hào)由主機(jī)發(fā)出。在起始信號(hào)后,總線處于被占用的狀態(tài);在停止信號(hào)后,總線處于空閑狀態(tài)。8.3.2
I2C總線的數(shù)據(jù)傳輸時(shí)序2.字節(jié)傳輸時(shí)序傳輸?shù)拿總€(gè)字節(jié)必須是8位長(zhǎng)度。先傳最高位(MSB),每個(gè)被傳輸字節(jié)后面都要跟隨應(yīng)答位(即一幀共有9位),如下圖所示。從機(jī)接收數(shù)據(jù)時(shí),在第9個(gè)時(shí)鐘脈沖要發(fā)出應(yīng)答脈沖,但在數(shù)據(jù)傳輸一段時(shí)間后無(wú)法接收更多的數(shù)據(jù)時(shí),從機(jī)可以采用“非應(yīng)答”通知主機(jī),主機(jī)在第9個(gè)時(shí)鐘脈沖檢測(cè)到SDA線無(wú)有效應(yīng)答負(fù)脈沖(即非應(yīng)答)則會(huì)發(fā)出停止信號(hào)以結(jié)束數(shù)據(jù)傳輸。與主機(jī)發(fā)送數(shù)據(jù)相似,主機(jī)在接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳輸?shù)摹胺菓?yīng)答”信號(hào)。然后從機(jī)釋放SDA線,以允許主機(jī)產(chǎn)生停止信號(hào)。8.3.2
I2C總線的數(shù)據(jù)傳輸時(shí)序3.?dāng)?shù)據(jù)傳輸時(shí)序?qū)τ跀?shù)據(jù)(多字節(jié))傳輸,I2C總線協(xié)議規(guī)定:SCL由主機(jī)控制,從機(jī)在自己忙時(shí)拉低SCL線以表示自己處于“忙狀態(tài)”。字節(jié)數(shù)據(jù)由主機(jī)發(fā)出,響應(yīng)位由從機(jī)發(fā)出。SCL高電平期間,SDA線數(shù)據(jù)要穩(wěn)定,SCL低電平期間,SDA線數(shù)據(jù)允許更新。數(shù)據(jù)傳輸時(shí)序如下圖所示。8.3.2
I2C總線的數(shù)據(jù)傳輸時(shí)序4.尋址字節(jié)格式主機(jī)發(fā)出起始信號(hào)后要先傳送1個(gè)尋址字節(jié):7位從機(jī)地址,1位傳輸方向控制位(用“0”表示主機(jī)發(fā)送數(shù)據(jù),“1”表示主機(jī)接收數(shù)據(jù)),格式如下:D7~D1組成從機(jī)的地址。D0是數(shù)據(jù)傳送方向位,確定從機(jī)下一字節(jié)數(shù)據(jù)是讀出還是寫(xiě)入(0為寫(xiě)入,1為讀出)。主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較。如果相同,則認(rèn)為自己正被主機(jī)尋址。其中:D7~D4為器件固有地址編碼,固定為1010;D3~D1為器件引腳編碼A2、A1、A0,正好與芯片的3、2、1引腳對(duì)應(yīng),為當(dāng)前電路中的地址選擇線,三根線可選擇8個(gè)芯片同時(shí)連接在電路中,當(dāng)要與哪個(gè)芯片通信時(shí)傳送相應(yīng)的地址即可與該芯片建立連接。位D7D6D5D4D3D2D1D0
DA3DA2DA1DA0A2A1A08.3.2
I2C總線的數(shù)據(jù)傳輸時(shí)序?qū)τ跊](méi)有配置I2C總線接口的單片機(jī)(如80C51、89C51等),可以利用通用并行I/O口線模擬I2C總線接口的時(shí)序。1.典型信號(hào)的時(shí)序I2C總線的數(shù)據(jù)傳輸有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)、停止信號(hào)、發(fā)送應(yīng)答“0”及發(fā)送非應(yīng)答“1”的時(shí)序如下圖所示。8.3.3
I2C總線的時(shí)序模擬2.典型信號(hào)模擬程序【例8-2】89C51的P2.0模擬數(shù)據(jù)線SDA,P2.1模擬時(shí)鐘線SCL,晶振頻率為12MHz,試編寫(xiě)I2C總線的起始信號(hào)、應(yīng)答“0”時(shí)序的程序段。編譯預(yù)處理:延時(shí)函數(shù):#include<reg51.h>#include<intrins.h>sbitSDA=P2^0;sbitSCL=P2^1;voiddelay5us(
)
{ _nop_(); _nop_(); _nop_(); _nop_();
_nop_();}voidstart(){ SCL=1; SDA=1; delay5us(); SDA=0; delay5us(); SCL=0;}起始信號(hào)S函數(shù):發(fā)送應(yīng)答位函數(shù)(數(shù)據(jù)“0”):voidsack(
){ SDA=0;
SCL=1;
delay5us(); SCL=0; SDA=1;} 8.3.3
I2C總線的時(shí)序模擬串行E2PROM的優(yōu)點(diǎn)是體積小,功耗低,占用I/O口線少,性能價(jià)格比高。Atmel公司的E2PROM是一個(gè)系列,即AT24CXX系列存儲(chǔ)器器件。典型產(chǎn)品是AT24C04,內(nèi)含512B,擦寫(xiě)次數(shù)大于100萬(wàn)次,寫(xiě)入周期不大于10ms。1.AT24C04的引腳定義AT24C04引腳圖如右上圖所示。A0~A2:地址線。SDA:數(shù)據(jù)輸入/輸出線。SCL:串行時(shí)鐘線。WP:寫(xiě)保護(hù)控制端,接地時(shí)允許寫(xiě)入。AT24C04與單片機(jī)連接如右下圖所示。8.3.4
串行程序存儲(chǔ)器AT24C042.AT24CXX系列存儲(chǔ)器器件的地址I2C器件地址由固定部分和可編程部分組成,即AT24CXX系列存儲(chǔ)器器件的地址如下表所示。以AT24C04為例,器件地址的固定部分為1010,器件引腳A2和A1的組合可以選擇4個(gè)同樣的器件。器件型號(hào)字節(jié)容量器件尋址字節(jié)內(nèi)部地址字節(jié)數(shù)頁(yè)面寫(xiě)字節(jié)數(shù)最多可接器件數(shù)固定標(biāo)示片選AT24C01A128B1010A2A1A01/0188AT24C02256BA2A1A01/088AT24C04512BA2A1P01/0164AT24C08A1KBA2A1P01/0162AT24C16A2KBA2A1P01/0161AT24C32A4KBA2A1A01/02328AT24C64A8KBA2A1A01/0328AT24C128B16KBA2A1A01/0648AT24C256B32KBA2A1A01/0648AT24C512B64KBA2A1A01/012888.3.4
串行程序存儲(chǔ)器AT24C043.主機(jī)寫(xiě)數(shù)據(jù)操作命令1)寫(xiě)單字節(jié)對(duì)AT24C04寫(xiě)入時(shí),單片機(jī)發(fā)出起始信號(hào)“S”后,接著發(fā)送的是器件尋址寫(xiě)操作(即1010(A2)(A1)(P0)0,方向位為“0”),然后釋放SDA線并在SCL線上產(chǎn)生第9個(gè)時(shí)鐘信號(hào);被選中的AT24C04在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)“A”;單片機(jī)再發(fā)送要寫(xiě)入的片內(nèi)單元地址;收到AT24C04應(yīng)答“0”后單片機(jī)發(fā)送數(shù)據(jù)字節(jié),AT24C04返回應(yīng)答;然后單片機(jī)發(fā)出停止信號(hào)“P”,AT24C04啟動(dòng)片內(nèi)擦寫(xiě)過(guò)程。時(shí)序如下圖所示。8.3.4
串行程序存儲(chǔ)器AT24C042)寫(xiě)多字節(jié)
要寫(xiě)入多個(gè)字節(jié),可以利用AT24C04的頁(yè)寫(xiě)入模式。
AT24C04的頁(yè)為16字節(jié)。
與字節(jié)寫(xiě)相似,首先單片機(jī)分別完成起始信號(hào)“S”操作、器件尋址寫(xiě)操作及片內(nèi)單元首地址寫(xiě)操作,收到AT24C04應(yīng)答“0”后單片機(jī)就逐個(gè)發(fā)送各數(shù)據(jù)字節(jié),但每發(fā)送一個(gè)字節(jié)后都要等待應(yīng)答。
如果沒(méi)有數(shù)據(jù)要發(fā)送了,單片機(jī)就發(fā)出停止信號(hào)“P”,AT24C04就啟動(dòng)內(nèi)部擦寫(xiě)周期,完成數(shù)據(jù)寫(xiě)入工作(約10ms)。
寫(xiě)入n個(gè)字節(jié)的傳輸時(shí)序如下圖所示。8.3.4
串行程序存儲(chǔ)器AT24C044.主機(jī)讀數(shù)據(jù)操作命令1)讀當(dāng)前地址
從AT24C04讀數(shù)據(jù)時(shí),單片機(jī)發(fā)出起始信號(hào)“S”后接著要完成器件尋址讀操作,在第9個(gè)脈沖等待從機(jī)應(yīng)答;被選中的從機(jī)在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)“A”,并向SDA線發(fā)送數(shù)據(jù)字節(jié);單片機(jī)發(fā)出應(yīng)答信號(hào)和停止信號(hào)“P”。
讀當(dāng)前地址傳輸時(shí)序如下圖所示。8.3.4
串行程序存儲(chǔ)器AT24C042)讀指定地址
讀指定地址時(shí),單片機(jī)也要先完成該器件尋址寫(xiě)操作和數(shù)據(jù)地址寫(xiě)操作(屬于“偽寫(xiě)”,即方向控制位仍然為“0”),均在第9個(gè)脈沖處等待從機(jī)應(yīng)答。被選中的從機(jī)在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)“A”。
收到器件應(yīng)答后,單片機(jī)要先重復(fù)一次起始信號(hào)“S”并完成器件尋址讀操作(即1010(A2)(A1)(P0)1,方向位為“1”),收到器件應(yīng)答后就可以讀出數(shù)據(jù)字節(jié),每讀出一個(gè)字節(jié),單片機(jī)都要回復(fù)應(yīng)答信號(hào)“A”。當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回非應(yīng)答信號(hào)“”(高電平),并發(fā)出停止信號(hào)“P”。
讀指定字節(jié)傳輸時(shí)序如下圖所示。8.3.4
串行程序存儲(chǔ)器AT24C045.AT24C04的應(yīng)用【例8-3】擴(kuò)展串行程序存儲(chǔ)器AT24C04的系統(tǒng)連接原理圖如下圖所示,試編程實(shí)現(xiàn)以下功能:?jiǎn)纹瑱C(jī)先向AT24C04中寫(xiě)入4個(gè)字符“SCMC”,然后再將這4個(gè)字符依次讀出,分別存入片內(nèi)RAM的50H~53H單元中。晶振頻率11.0592MHz。8.3.4
串行程序存儲(chǔ)器AT24C04分析
題中E2PROM選用Atmel公司的AT24C04芯片,用89C51單片機(jī)的通用I/O口與之相連。
由于89C51沒(méi)有I2C接口,需要用軟件模擬I2C數(shù)據(jù)傳輸時(shí)序,這里用P2.0模擬數(shù)據(jù)線SDA,P2.1模擬時(shí)鐘線SCL。
根據(jù)圖8-18可知,AT24C04的A0~A2引腳均接地,所以該器件的寫(xiě)地址為A0H(10100000B),讀地址為A1H(10100001B)。
根據(jù)表8-4可知,AT24C04的頁(yè)面字節(jié)數(shù)為16,即從頁(yè)面起始地址開(kāi)始寫(xiě)的話,每次能連續(xù)寫(xiě)入16個(gè)字節(jié),本題需要寫(xiě)4個(gè)字符,我們假設(shè)從芯片起始地址00H開(kāi)始寫(xiě),一次即可完成4字節(jié)的寫(xiě)入。8.3.4
串行程序存儲(chǔ)器AT24C04參考程序#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitSCL=P2^1;sbitSDA=P2^0;ucharcodemem[4]={'S','C','M','C'};uchardataread_mem[4]_at_0x50;voiddelay5us(){ _nop_(); _nop_(); _nop_(); _nop_();
_nop_();}voiddelaynms(uintn){ uinti,j; for(i=0;i<n;i++) for(j=0;j<125;j++);}voidstart(){ SCL=1; SDA=1; delay5us(); SDA=0; delay5us(); SCL=0;}voidstop(){ SDA=0; SCL=1; delay5us(); SDA=1; delay5us(); SCL=0;}8.3.4
串行程序存儲(chǔ)器AT24C04voidwritebyte(uchartemp){ uchari; SCL=0; for(i=0;i<8;i++) { temp=temp<<1; SDA=CY; SCL=1; delay5us(); delay5us(); SCL=0; } SDA=1; } voidwack() { SDA=0; SCL=1; delay5us(); SCL=0; SDA=1;}voidwackn() { SDA=1; SCL=1; delay5us(); SCL=0; SDA=0;} voidwrite() { uchari; start(); writebyte(0xa0); rack(); writebyte(0x00); rack(); for(i=0;i<4;i++) { writebyte(mem[i]); rack(); } stop(); delaynms(i); }8.3.4
串行程序存儲(chǔ)器AT24C04ucharreadbyte() { uchari,x; for(i=0;i<8;i++) { SCL=1; x<<=1; x|=SDA; SCL=0; delay5us(); } returnx;}voidrack(void) { SCL=1; delay5us(); SCL=0;} voidread() { uchari; start(); writebyte(0xa0); rack(); writebyte(0x00); rack(); start(); writebyte(0xa1); rack(); for(i=0;i<3;i++) { read_mem[i]=readbyte(); wack(); } read_mem[i]=readbyte(); wackn(); stop();} 8.3.4
串行程序存儲(chǔ)器AT24C04
voidmain() { write(); read();}8.4
SPI總線接口及其擴(kuò)展SPI總線是Motorola公司推出的高速、全雙工、同步串行通信總線。SPI總線允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行同步通信,屬于全雙工通信總線。SPI總線廣泛用于E2PROM、實(shí)時(shí)時(shí)鐘、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器等器件。1.SPI總線概述SPI總線通常有3根線:串行時(shí)鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線(MISO)和主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線(MOSI)。除了上述3根線以外,一般還會(huì)有1條低電平有效的片選線(
),可以在多器件接入時(shí)使用。SPI工作模式有兩種:主模式和從模式。SPI的串行總線通信協(xié)議是:由SCK提供時(shí)鐘脈沖,MISO、MOSI則基于此脈沖完成數(shù)據(jù)傳輸。主機(jī)數(shù)據(jù)輸出時(shí),MOSI上的數(shù)據(jù)在時(shí)鐘上升沿或下降沿時(shí)改變,在緊接著的下降沿或上升沿被從機(jī)讀取,完成一位數(shù)據(jù)傳輸,輸入也是同樣原理。需要注意的是,SCK信號(hào)線只由主機(jī)控制,從機(jī)不能控制。不同的SPI設(shè)備,數(shù)據(jù)的改變和采集在時(shí)鐘信號(hào)上升沿或下降沿有不同定義,將各種不同SPI接口芯片連到MCU的SPI總線時(shí),應(yīng)特別注意這些串行I/O芯片的輸入/輸出特性。8.4.1
SPI總線的基礎(chǔ)知識(shí)2.SPI總線的系統(tǒng)結(jié)構(gòu)MISO和MOSI用于串行接收和發(fā)送數(shù)據(jù),其數(shù)據(jù)的傳輸格式是高位(MSB)在前,低位(LSB)在后;SCK是主機(jī)為從機(jī)提供同步時(shí)鐘輸入信號(hào);
是片選使能信號(hào)。SPI總線的典型應(yīng)用是單主機(jī)系統(tǒng),該系統(tǒng)只有一臺(tái)主機(jī)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保材料印刷委托協(xié)議范本3篇
- 2025版牙齒矯正教育培訓(xùn)機(jī)構(gòu)合作合同3篇
- 二零二五年度個(gè)人掛靠公司教育培訓(xùn)合作協(xié)議3篇
- 二零二五版私人學(xué)校物業(yè)設(shè)施租賃及管理合同3篇
- 機(jī)械設(shè)備行業(yè)員工需求
- 服裝行業(yè)生產(chǎn)工藝安全
- 藥學(xué)科護(hù)士協(xié)助藥劑配制
- 二零二五年度個(gè)人股權(quán)轉(zhuǎn)讓代持協(xié)議書(shū)(股權(quán)代持與退出機(jī)制)16篇
- 二零二五年度行政合同訂立流程與模板指南3篇
- 二零二五年度婚禮視頻拍攝制作合同2篇
- 八年級(jí)上冊(cè)英語(yǔ)完形填空、閱讀理解100題含參考答案
- 八年級(jí)物理下冊(cè)功率課件
- DBJ51-T 188-2022 預(yù)拌流態(tài)固化土工程應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 《長(zhǎng)津湖》電影賞析PPT
- 銷(xiāo)售禮儀培訓(xùn)PPT
- 滑雪運(yùn)動(dòng)介紹
- 最新滋補(bǔ)類(lèi)中藥的用藥保健主題講座課件
- 大數(shù)據(jù)和人工智能知識(shí)考試題庫(kù)600題(含答案)
- 2021譯林版高中英語(yǔ)選擇性必修一單詞表
- 機(jī)器人控制課件
- 招聘會(huì)突發(fā)事件應(yīng)急預(yù)案(通用6篇)
評(píng)論
0/150
提交評(píng)論