




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第8章
單片機(jī)串行擴(kuò)展技術(shù)對三種單片機(jī)串行總線的原理、時序和擴(kuò)展方法進(jìn)行討論,并對單片機(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ò)展時,簡化了系統(tǒng)的連線,縮小了電路板的面積,節(jié)省了系統(tǒng)的資源,具有擴(kuò)展性好、成本低廉、可靠性高、硬件易于模塊化等優(yōu)點(diǎn)。采用串行總線擴(kuò)展方法是當(dāng)前單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的流行趨勢。目前單片機(jī)應(yīng)用系統(tǒng)常用的串行擴(kuò)展總線有單總線、I2C總線(二線總線)和SPI總線(三線總線)。8.1串行總線概述1.基本結(jié)構(gòu)單總線僅定義有一根信號線,時鐘信息和數(shù)據(jù)均經(jīng)該信號線傳遞。每個單總線器件都具有唯一的64位ID號,主機(jī)可根據(jù)它來區(qū)分掛在同一總線上的不同單總線器件。8.2.1
單總線的基礎(chǔ)知識8.2
單總線接口及其擴(kuò)展單總線是Dallas半導(dǎo)體公司推出的外圍串行擴(kuò)展總線,采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術(shù)具有線路簡單,硬件開銷少,成本低廉,便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn)。單總線適用于單主機(jī)系統(tǒng),單主機(jī)能夠控制一個或多個從機(jī)設(shè)備。主機(jī)可以是微控制器(單片機(jī)),從機(jī)可以是單總線器件。當(dāng)只有一個從機(jī)時,系統(tǒng)可按單節(jié)點(diǎn)系統(tǒng)操作;當(dāng)有多個從機(jī)時,系統(tǒng)則按多節(jié)點(diǎn)系統(tǒng)操作。下圖是單總線多節(jié)點(diǎn)系統(tǒng)的示意圖。8.2.1
單總線的基礎(chǔ)知識8.2.1
單總線的基礎(chǔ)知識單總線只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設(shè)備(主機(jī)或從機(jī))通過一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線,這樣允許設(shè)備不發(fā)送數(shù)據(jù)時釋放總線,以便其他設(shè)備使用,其內(nèi)部等效電路如下圖所示,單總線要求外接一個約4.7kΩ的上拉電阻。當(dāng)總線閑置時,狀態(tài)為高電平。2.主機(jī)和從機(jī)之間的通信方法主機(jī)(單片機(jī))和從機(jī)(單總線器件)之間的通信通過以下3個步驟來完成:初始化單總線器件;識別單總線器件;交換數(shù)據(jù)。由于兩者是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時,從機(jī)才能應(yīng)答,因此主機(jī)訪問單總線器件都必須嚴(yán)格遵循單總線命令順序:初始化、ROM命令、功能命令。如果出現(xiàn)順序混亂,單總線器件不會響應(yīng)(搜索ROM命令,報警搜索命令除外)。8.2.1
單總線的基礎(chǔ)知識3.常用單總線器件通常把掛在單總線上的器件稱為單總線器件。單總線器件內(nèi)一般都配置了控制、收/發(fā)、存儲等電路模塊。為了區(qū)分不同的單總線器件,廠家生產(chǎn)時都要刻錄一個64位的二進(jìn)制ROM代碼,以標(biāo)志其ID號,這個ID號是全球唯一的。目前,單總線器件主要有數(shù)字溫度傳感器(如DS18B20)、A/D轉(zhuǎn)換器(如DS2450)、門標(biāo)、身份識別器(如DS1990A)、單總線控制器(如DS1WM)等。8.2.1
單總線的基礎(chǔ)知識單總線器件要嚴(yán)格遵循通信協(xié)議,以保證數(shù)據(jù)的完整性。單總線定義了幾種信號類型,包括復(fù)位脈沖、應(yīng)答脈沖、寫0、寫1、讀0和讀1時序。所有的單總線命令序列(初始化、ROM命令、功能命令)都是由這些基本的信號類型組成的。這些信號,除了應(yīng)答脈沖外都是由主機(jī)發(fā)出的信號,并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。在單總線傳輸數(shù)據(jù)時,邏輯0用一段持續(xù)的低電平表示,邏輯1用一段持續(xù)的高電平表示。主機(jī)向從機(jī)傳輸數(shù)據(jù)時產(chǎn)生寫時序,主機(jī)從從機(jī)讀取數(shù)據(jù)時產(chǎn)生讀時序。讀時序和寫時序均以單片機(jī)驅(qū)動總線產(chǎn)生低電平開始。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號的器件。此時,任何被尋址的器件都被認(rèn)為是從機(jī)。8.2.2
單總線的數(shù)據(jù)傳輸時序1.初始化時序初始化時序包括主機(jī)發(fā)送的復(fù)位脈沖和從機(jī)發(fā)出的應(yīng)答脈沖。主機(jī)通過拉低單總線至少480μs,以產(chǎn)生Tx復(fù)位脈沖,然后釋放總線,并進(jìn)入Rx接收模式。當(dāng)主機(jī)釋放總線,總線由低電平跳變?yōu)楦唠娖綍r產(chǎn)生上升沿,從機(jī)檢測到這個上升沿后,延時15~60μs,從機(jī)接收到單片機(jī)發(fā)來的復(fù)位脈沖后,便通過拉低總線60~240μs,以產(chǎn)生應(yīng)答脈沖。主機(jī)接收到從機(jī)應(yīng)答脈沖后,說明有單總線器件在線,然后就開始對從機(jī)進(jìn)行ROM命令和功能命令操作。初始化時序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時序2.主機(jī)寫時序主機(jī)寫時序由寫0時序和寫1時序組成。單總線傳遞寫1、寫0過程為:所有的寫時序至少需要60μs,且每兩個獨(dú)立的時序之間至少需要1μs的恢復(fù)時間。對于寫0時序,主機(jī)拉低總線并保持低電平至少60μs,然后釋放總線;對于寫1時序,主機(jī)拉低總線,然后在15μs內(nèi)要釋放總線。從機(jī)必須在15~60μs之間采樣總線狀態(tài),從而接收到從機(jī)發(fā)送的數(shù)據(jù)。主機(jī)寫時序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時序3.主機(jī)讀時序主機(jī)讀時序由讀0時序和讀1時序組成。主機(jī)讀操作時,主機(jī)首先要拉低總線至少1μs,主機(jī)釋放總線后,總線電平就由從機(jī)決定。從機(jī)若發(fā)送1,則保持總線高電平,若發(fā)送0,則拉低總線。從機(jī)發(fā)送之后,保持15μs有效時間,因而,主機(jī)必須在15μs之中采樣總線狀態(tài),從而接收到從機(jī)發(fā)送的數(shù)據(jù)。主機(jī)讀時序如下圖所示。8.2.2
單總線的數(shù)據(jù)傳輸時序8.2.3
數(shù)字溫度傳感器DS18B20Dallas半導(dǎo)體公司的DS18B20數(shù)字溫度傳感器是“單總線”的典型代表,DS18B20的溫度測量范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。采用“單總線”方式傳輸,可以提高系統(tǒng)的抗干擾能力,所以DS18B20廣泛用于溫度采集及監(jiān)控領(lǐng)域。1.DS18B20的引腳定義DS18B20的引腳圖如下圖所示。GND:電源地;DQ:數(shù)字信號輸入輸出端;Vdd:外接供電電源輸入端(在寄生電源接線方式時接地)。2.DS18B20的內(nèi)部結(jié)構(gòu)DS18B20溫度傳感器主要由64位ROM、高速緩沖存儲器、CRC生成器、溫度敏感元件、高低溫觸發(fā)器及配置寄存器等部件組成。內(nèi)部結(jié)構(gòu)如下圖所示。8.2.3
數(shù)字溫度傳感器DS18B20(1)DS18B20的ID號。每個DS18B20都有64位的ROM,以標(biāo)志其ID號。出廠前ROM固化有確定的內(nèi)容,如下圖所示。低8位(28H)是產(chǎn)品類型標(biāo)識號,接著的48位是該DS18B20的ID號,高8位是前56位的循環(huán)冗余校驗(yàn)碼。由于每個DS18B20都有自己的ID號,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS18B20的目的。8.2.3
數(shù)字溫度傳感器DS18B20(2)DS18B20的高速緩沖存儲器。在DS18B20的內(nèi)部有9個字節(jié)高速緩沖存儲單元。各單元分配的功能如下圖所示。第1及第2字節(jié)存放轉(zhuǎn)換完成的溫度值;第3和第4字節(jié)分別存放上、下限報警值TH和TL;第5字節(jié)為配置寄存器;第6、7、8字節(jié)為保留字節(jié);第9字節(jié)是前8字節(jié)的CRC校驗(yàn)碼,用來提高串行傳輸?shù)目煽啃?。另外,在DS18B20的內(nèi)部還用3個單元存放上下限報警值TH、TL和配置寄存器的設(shè)定值。數(shù)據(jù)先寫入高速緩沖存儲器,然后再傳給單元。8.2.3
數(shù)字溫度傳感器DS18B20
配置寄存器字節(jié)的最高位D7為測試模式位,出廠時為0,用戶不需要改動。D6D5位(R1R0)用于設(shè)置DS18B20的轉(zhuǎn)換分辨率,取值00、01、10、11,對應(yīng)分辨率有9、10、11和12位四種選擇,對應(yīng)的轉(zhuǎn)換時間分別為:93.73ms、187.5ms、275ms和750ms。其余的低5位為保留位(均為1)。
配置寄存器格式如下所示(出廠時默認(rèn)值為7FH,即分辨率為12位):位D7D6D5D4D3D2D1D0
0R1R0111118.2.3
數(shù)字溫度傳感器DS18B203.DS18B20的溫度值格式DS18B20中的溫度敏感元件完成對溫度的檢測,轉(zhuǎn)換后的溫度值以帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼(16位)形式存儲在高速緩沖存儲器的第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位分辨率時的溫度值格式如下圖所示。當(dāng)符號位S為0時,表示溫度為正,只要將二進(jìn)制采樣值轉(zhuǎn)換為十進(jìn)制數(shù)就可以得到十進(jìn)制表示的溫度值;當(dāng)符號位S為1時,表示溫度為負(fù)(用補(bǔ)碼表示),這時要對讀取的采樣值去補(bǔ)(取反加1),再轉(zhuǎn)換為十進(jìn)制數(shù)才能得到十進(jìn)制表示的溫度值。8.2.3
數(shù)字溫度傳感器DS18B204.ROM操作命令ROM命令主要用于單總線上接有多個DS18B20的情況,ROM操作命令與總線上具體DS18B20器件的ID號相關(guān)。ROM操作命令有5條,如下表所示。指令及代碼說明讀ROM33H讀總線上DS18B20的ID(序列)號匹配ROM55H依ID號訪問確定的DS18B20器件跳過ROMCCH只使用RAM命令,操作在線的DS18B20器件搜索ROMF0H對總線上的多個DS18B20進(jìn)行識別報警搜索ECH主機(jī)搜索越限報警的DS18B20器件8.2.3
數(shù)字溫度傳感器DS18B205.RAM操作命令單片機(jī)利用ROM操作命令,與總線上指定的DS18B20器件建立起聯(lián)系后,就可以對這個指定器件實(shí)施RAM操作命令。這些操作命令允許單片機(jī)寫入或讀出DS18B20器件緩沖器的內(nèi)容。RAM操作命令有6條,如下表所示。指令代碼說明溫度轉(zhuǎn)換44H啟動DS18B20開始轉(zhuǎn)換讀緩沖器BEH讀緩沖器的9個字節(jié)數(shù)據(jù)寫緩沖器4EH向DS18B20寫TH、TL及配置寄存器數(shù)據(jù)復(fù)制緩沖器48H將緩沖器的TH、TL和配置寄存器值送E2PROM回讀E2PROMB8H將E2PROM中的TH、TL和配置寄存器值送緩沖器讀供電方式B4H檢測供電方式:寄生或外接方式8.2.3
數(shù)字溫度傳感器DS18B206.DS18B20的應(yīng)用【例8-1】如下圖所示,89C51和一個DS18B20構(gòu)成單點(diǎn)溫度檢測系統(tǒng),試編寫溫度測試程序,溫度值存入片內(nèi)RAM中的35H、36H兩個單元。晶振頻率為12MHz。8.2.3
數(shù)字溫度傳感器DS18B20分析首先初始化DS18B20;其次啟動溫度轉(zhuǎn)換;然后讀出溫度值(2個字節(jié))并分別存入35H、36H兩個單元。可以定義一些參數(shù)DQ:DS18B20的數(shù)據(jù)總線接腳;TEMP_L:35H,保存讀出的溫度數(shù)據(jù)的低位;TEMP_H:36H,保存讀出的溫度數(shù)據(jù)的高位。本程序僅適合單個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)//延時5μs{ do { _nop_(); _nop_(); _nop_(); n--; } while(n);}voidinit_18b20()//DS18B20的初始化函數(shù){ DQ=1; //拉高總線,準(zhǔn)備初始化 _nop_(); DQ=0; //拉低電平,初始化 delay5(100); //延時500μs DQ=1; //釋放總線 delay5(100); //延時500μs}voidwritebyte(uchardat)//向DS18B20寫數(shù)據(jù)的函數(shù)
{ uchari; for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; delay5(12);//寫“0”至少拉低60μs//寫“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);//開始轉(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ù)傳輸總線,后來發(fā)展成為嵌入式系統(tǒng)設(shè)備間通信的國際標(biāo)準(zhǔn),用于連接微控制器及其外圍設(shè)備,是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。1.I2C總線的特點(diǎn)(1)采用二線制。(2)傳輸速率高。(3)支持多主和主/從兩種工作方式。8.3.1
I2C總線的基礎(chǔ)知識2.I2C總線的架構(gòu)I2C總線只有兩根連線。一根是數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有連接到I2C總線上的器件的數(shù)據(jù)線都接到SDA線上,各器件的時鐘線均接到SCL線上。I2C總線的基本架構(gòu)如下圖所示。8.3.1
I2C總線的基礎(chǔ)知識3.I2C總線的常用器件I2C總線廣泛用于各種新型芯片中,如I/O電路、存儲器、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ǔ)知識在I2C總線上,每一位數(shù)據(jù)位的傳輸都與時鐘脈沖相對應(yīng)。邏輯0和邏輯1的信號電平取決于相應(yīng)的電源電壓。對于數(shù)據(jù)傳輸,I2C總線協(xié)議規(guī)定了如下信號及時序。1.起始和停止信號起始和停止信號如下圖所示。SCL為高電平期間,SDA由高電平向低電平的變化表示起始信號。SCL為高電平期間,SDA由低電平向高電平的變化表示停止信號??偩€空閑時,SCL和SDA兩條線都是高電平。SDA線的起始信號和停止信號由主機(jī)發(fā)出。在起始信號后,總線處于被占用的狀態(tài);在停止信號后,總線處于空閑狀態(tài)。8.3.2
I2C總線的數(shù)據(jù)傳輸時序2.字節(jié)傳輸時序傳輸?shù)拿總€字節(jié)必須是8位長度。先傳最高位(MSB),每個被傳輸字節(jié)后面都要跟隨應(yīng)答位(即一幀共有9位),如下圖所示。從機(jī)接收數(shù)據(jù)時,在第9個時鐘脈沖要發(fā)出應(yīng)答脈沖,但在數(shù)據(jù)傳輸一段時間后無法接收更多的數(shù)據(jù)時,從機(jī)可以采用“非應(yīng)答”通知主機(jī),主機(jī)在第9個時鐘脈沖檢測到SDA線無有效應(yīng)答負(fù)脈沖(即非應(yīng)答)則會發(fā)出停止信號以結(jié)束數(shù)據(jù)傳輸。與主機(jī)發(fā)送數(shù)據(jù)相似,主機(jī)在接收數(shù)據(jù)時,它收到最后一個數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個結(jié)束傳輸?shù)摹胺菓?yīng)答”信號。然后從機(jī)釋放SDA線,以允許主機(jī)產(chǎn)生停止信號。8.3.2
I2C總線的數(shù)據(jù)傳輸時序3.?dāng)?shù)據(jù)傳輸時序?qū)τ跀?shù)據(jù)(多字節(jié))傳輸,I2C總線協(xié)議規(guī)定:SCL由主機(jī)控制,從機(jī)在自己忙時拉低SCL線以表示自己處于“忙狀態(tài)”。字節(jié)數(shù)據(jù)由主機(jī)發(fā)出,響應(yīng)位由從機(jī)發(fā)出。SCL高電平期間,SDA線數(shù)據(jù)要穩(wěn)定,SCL低電平期間,SDA線數(shù)據(jù)允許更新。數(shù)據(jù)傳輸時序如下圖所示。8.3.2
I2C總線的數(shù)據(jù)傳輸時序4.尋址字節(jié)格式主機(jī)發(fā)出起始信號后要先傳送1個尋址字節(jié):7位從機(jī)地址,1位傳輸方向控制位(用“0”表示主機(jī)發(fā)送數(shù)據(jù),“1”表示主機(jī)接收數(shù)據(jù)),格式如下:D7~D1組成從機(jī)的地址。D0是數(shù)據(jù)傳送方向位,確定從機(jī)下一字節(jié)數(shù)據(jù)是讀出還是寫入(0為寫入,1為讀出)。主機(jī)發(fā)送地址時,總線上的每個從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較。如果相同,則認(rèn)為自己正被主機(jī)尋址。其中:D7~D4為器件固有地址編碼,固定為1010;D3~D1為器件引腳編碼A2、A1、A0,正好與芯片的3、2、1引腳對應(yīng),為當(dāng)前電路中的地址選擇線,三根線可選擇8個芯片同時連接在電路中,當(dāng)要與哪個芯片通信時傳送相應(yīng)的地址即可與該芯片建立連接。位D7D6D5D4D3D2D1D0
DA3DA2DA1DA0A2A1A08.3.2
I2C總線的數(shù)據(jù)傳輸時序?qū)τ跊]有配置I2C總線接口的單片機(jī)(如80C51、89C51等),可以利用通用并行I/O口線模擬I2C總線接口的時序。1.典型信號的時序I2C總線的數(shù)據(jù)傳輸有嚴(yán)格的時序要求。I2C總線的起始信號、停止信號、發(fā)送應(yīng)答“0”及發(fā)送非應(yīng)答“1”的時序如下圖所示。8.3.3
I2C總線的時序模擬2.典型信號模擬程序【例8-2】89C51的P2.0模擬數(shù)據(jù)線SDA,P2.1模擬時鐘線SCL,晶振頻率為12MHz,試編寫I2C總線的起始信號、應(yīng)答“0”時序的程序段。編譯預(yù)處理:延時函數(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;}起始信號S函數(shù):發(fā)送應(yīng)答位函數(shù)(數(shù)據(jù)“0”):voidsack(
){ SDA=0;
SCL=1;
delay5us(); SCL=0; SDA=1;} 8.3.3
I2C總線的時序模擬串行E2PROM的優(yōu)點(diǎn)是體積小,功耗低,占用I/O口線少,性能價格比高。Atmel公司的E2PROM是一個系列,即AT24CXX系列存儲器器件。典型產(chǎn)品是AT24C04,內(nèi)含512B,擦寫次數(shù)大于100萬次,寫入周期不大于10ms。1.AT24C04的引腳定義AT24C04引腳圖如右上圖所示。A0~A2:地址線。SDA:數(shù)據(jù)輸入/輸出線。SCL:串行時鐘線。WP:寫保護(hù)控制端,接地時允許寫入。AT24C04與單片機(jī)連接如右下圖所示。8.3.4
串行程序存儲器AT24C042.AT24CXX系列存儲器器件的地址I2C器件地址由固定部分和可編程部分組成,即AT24CXX系列存儲器器件的地址如下表所示。以AT24C04為例,器件地址的固定部分為1010,器件引腳A2和A1的組合可以選擇4個同樣的器件。器件型號字節(jié)容量器件尋址字節(jié)內(nèi)部地址字節(jié)數(shù)頁面寫字節(jié)數(shù)最多可接器件數(shù)固定標(biāo)示片選AT24C01A128B1010A2A1A01/0188AT24C02256BA2A1A01/088AT24C04512BA2A1P01/0164AT24C08A1KBA2A1P01/0162AT24C16A2KBA2A1P01/0161AT24C32A4KBA2A1A01/02328AT24C64A8KBA2A1A01/0328AT24C128B16KBA2A1A01/0648AT24C256B32KBA2A1A01/0648AT24C512B64KBA2A1A01/012888.3.4
串行程序存儲器AT24C043.主機(jī)寫數(shù)據(jù)操作命令1)寫單字節(jié)對AT24C04寫入時,單片機(jī)發(fā)出起始信號“S”后,接著發(fā)送的是器件尋址寫操作(即1010(A2)(A1)(P0)0,方向位為“0”),然后釋放SDA線并在SCL線上產(chǎn)生第9個時鐘信號;被選中的AT24C04在SDA線上產(chǎn)生一個應(yīng)答信號“A”;單片機(jī)再發(fā)送要寫入的片內(nèi)單元地址;收到AT24C04應(yīng)答“0”后單片機(jī)發(fā)送數(shù)據(jù)字節(jié),AT24C04返回應(yīng)答;然后單片機(jī)發(fā)出停止信號“P”,AT24C04啟動片內(nèi)擦寫過程。時序如下圖所示。8.3.4
串行程序存儲器AT24C042)寫多字節(jié)
要寫入多個字節(jié),可以利用AT24C04的頁寫入模式。
AT24C04的頁為16字節(jié)。
與字節(jié)寫相似,首先單片機(jī)分別完成起始信號“S”操作、器件尋址寫操作及片內(nèi)單元首地址寫操作,收到AT24C04應(yīng)答“0”后單片機(jī)就逐個發(fā)送各數(shù)據(jù)字節(jié),但每發(fā)送一個字節(jié)后都要等待應(yīng)答。
如果沒有數(shù)據(jù)要發(fā)送了,單片機(jī)就發(fā)出停止信號“P”,AT24C04就啟動內(nèi)部擦寫周期,完成數(shù)據(jù)寫入工作(約10ms)。
寫入n個字節(jié)的傳輸時序如下圖所示。8.3.4
串行程序存儲器AT24C044.主機(jī)讀數(shù)據(jù)操作命令1)讀當(dāng)前地址
從AT24C04讀數(shù)據(jù)時,單片機(jī)發(fā)出起始信號“S”后接著要完成器件尋址讀操作,在第9個脈沖等待從機(jī)應(yīng)答;被選中的從機(jī)在SDA線上產(chǎn)生一個應(yīng)答信號“A”,并向SDA線發(fā)送數(shù)據(jù)字節(jié);單片機(jī)發(fā)出應(yīng)答信號和停止信號“P”。
讀當(dāng)前地址傳輸時序如下圖所示。8.3.4
串行程序存儲器AT24C042)讀指定地址
讀指定地址時,單片機(jī)也要先完成該器件尋址寫操作和數(shù)據(jù)地址寫操作(屬于“偽寫”,即方向控制位仍然為“0”),均在第9個脈沖處等待從機(jī)應(yīng)答。被選中的從機(jī)在SDA線上產(chǎn)生一個應(yīng)答信號“A”。
收到器件應(yīng)答后,單片機(jī)要先重復(fù)一次起始信號“S”并完成器件尋址讀操作(即1010(A2)(A1)(P0)1,方向位為“1”),收到器件應(yīng)答后就可以讀出數(shù)據(jù)字節(jié),每讀出一個字節(jié),單片機(jī)都要回復(fù)應(yīng)答信號“A”。當(dāng)最后一個字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回非應(yīng)答信號“”(高電平),并發(fā)出停止信號“P”。
讀指定字節(jié)傳輸時序如下圖所示。8.3.4
串行程序存儲器AT24C045.AT24C04的應(yīng)用【例8-3】擴(kuò)展串行程序存儲器AT24C04的系統(tǒng)連接原理圖如下圖所示,試編程實(shí)現(xiàn)以下功能:單片機(jī)先向AT24C04中寫入4個字符“SCMC”,然后再將這4個字符依次讀出,分別存入片內(nèi)RAM的50H~53H單元中。晶振頻率11.0592MHz。8.3.4
串行程序存儲器AT24C04分析
題中E2PROM選用Atmel公司的AT24C04芯片,用89C51單片機(jī)的通用I/O口與之相連。
由于89C51沒有I2C接口,需要用軟件模擬I2C數(shù)據(jù)傳輸時序,這里用P2.0模擬數(shù)據(jù)線SDA,P2.1模擬時鐘線SCL。
根據(jù)圖8-18可知,AT24C04的A0~A2引腳均接地,所以該器件的寫地址為A0H(10100000B),讀地址為A1H(10100001B)。
根據(jù)表8-4可知,AT24C04的頁面字節(jié)數(shù)為16,即從頁面起始地址開始寫的話,每次能連續(xù)寫入16個字節(jié),本題需要寫4個字符,我們假設(shè)從芯片起始地址00H開始寫,一次即可完成4字節(jié)的寫入。8.3.4
串行程序存儲器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
串行程序存儲器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
串行程序存儲器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
串行程序存儲器AT24C04
voidmain() { write(); read();}8.4
SPI總線接口及其擴(kuò)展SPI總線是Motorola公司推出的高速、全雙工、同步串行通信總線。SPI總線允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行同步通信,屬于全雙工通信總線。SPI總線廣泛用于E2PROM、實(shí)時時鐘、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器等器件。1.SPI總線概述SPI總線通常有3根線:串行時鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線(MISO)和主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線(MOSI)。除了上述3根線以外,一般還會有1條低電平有效的片選線(
),可以在多器件接入時使用。SPI工作模式有兩種:主模式和從模式。SPI的串行總線通信協(xié)議是:由SCK提供時鐘脈沖,MISO、MOSI則基于此脈沖完成數(shù)據(jù)傳輸。主機(jī)數(shù)據(jù)輸出時,MOSI上的數(shù)據(jù)在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被從機(jī)讀取,完成一位數(shù)據(jù)傳輸,輸入也是同樣原理。需要注意的是,SCK信號線只由主機(jī)控制,從機(jī)不能控制。不同的SPI設(shè)備,數(shù)據(jù)的改變和采集在時鐘信號上升沿或下降沿有不同定義,將各種不同SPI接口芯片連到MCU的SPI總線時,應(yīng)特別注意這些串行I/O芯片的輸入/輸出特性。8.4.1
SPI總線的基礎(chǔ)知識2.SPI總線的系統(tǒng)結(jié)構(gòu)MISO和MOSI用于串行接收和發(fā)送數(shù)據(jù),其數(shù)據(jù)的傳輸格式是高位(MSB)在前,低位(LSB)在后;SCK是主機(jī)為從機(jī)提供同步時鐘輸入信號;
是片選使能信號。SPI總線的典型應(yīng)用是單主機(jī)系統(tǒng),該系統(tǒng)只有一臺主機(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 濟(jì)南2025年山東濟(jì)南市歷下區(qū)所屬事業(yè)單位招聘初級綜合類崗位36人筆試歷年參考題庫附帶答案詳解-1
- 黑龍江旅游職業(yè)技術(shù)學(xué)院《機(jī)車車輛運(yùn)用與維修》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津石油職業(yè)技術(shù)學(xué)院《信號與系統(tǒng)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西電子信息職業(yè)技術(shù)學(xué)院《生物化學(xué)雙語》2023-2024學(xué)年第二學(xué)期期末試卷
- 漳州理工職業(yè)學(xué)院《應(yīng)用開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 瓊臺師范學(xué)院《普通化學(xué)(Ⅰ)(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西南民族大學(xué)《公差與測量技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湛江幼兒師范??茖W(xué)?!抖嗝襟w課件設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 明達(dá)職業(yè)技術(shù)學(xué)院《學(xué)術(shù)文化與科研能力》2023-2024學(xué)年第二學(xué)期期末試卷
- 長江藝術(shù)工程職業(yè)學(xué)院《中學(xué)思想政治教育教學(xué)研究方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 員工薪酬確認(rèn)書三篇
- DZ∕T 0148-2014 水文水井地質(zhì)鉆探規(guī)程(正式版)
- 新能源汽車電氣技術(shù) 課件 項(xiàng)目一 新能源汽車電氣維修基礎(chǔ)認(rèn)知
- 人教版初中九年級下學(xué)期體育教案全集(附教學(xué)計(jì)劃)
- 2024年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 2024年黑龍江職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 礦山井架設(shè)計(jì)規(guī)范
- 空天地一體化公路智能巡查技術(shù)應(yīng)用與實(shí)踐
- CJJ129-2009 城市快速路設(shè)計(jì)規(guī)程
- punctuation-英語標(biāo)點(diǎn)的使用
- 股權(quán)糾紛案例分析申訴報告
評論
0/150
提交評論