單片機(jī)課件第九章_第1頁
單片機(jī)課件第九章_第2頁
單片機(jī)課件第九章_第3頁
單片機(jī)課件第九章_第4頁
單片機(jī)課件第九章_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第9章AT89S51單片機(jī)的串行擴(kuò)展技術(shù)【知識(shí)目標(biāo)】1.理解單總線擴(kuò)展技術(shù)。2.掌握SPI總線、I2C總線的原理3.掌握常用的串行總線芯片與單片機(jī)的接口設(shè)計(jì)【技能目標(biāo)】1.學(xué)會(huì)使用AT89S51單片機(jī)的I/O口結(jié)合軟件模擬I2C總線時(shí)序?qū)崿F(xiàn)I2C接口的方法。2.學(xué)會(huì)使用AT89S51單片機(jī)的I/O口結(jié)合軟件模擬SPI總線時(shí)序?qū)崿F(xiàn)SPI接口的方法。9.1單總線串行擴(kuò)展9.2SPI串行總線擴(kuò)展9.3I2C總線的串行擴(kuò)展介紹9.4鍵盤/顯示串行接口芯片HD7279A的應(yīng)用9.5案例:基于AT24C02的具有記憶功能的計(jì)數(shù)器的設(shè)計(jì)

9.1.1單總線概述單總線(1-Wire)是美國Dallas公司的一項(xiàng)專利技術(shù)。與目前廣泛應(yīng)用的其他串行數(shù)據(jù)通信方式不同,它采用單根信號(hào)線完成數(shù)據(jù)的雙向傳輸,并同時(shí)通過該信號(hào)線為單總線器件提供電源,具有節(jié)省I/O引腳資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn),在電池供電設(shè)備、便攜式儀器以及現(xiàn)場(chǎng)監(jiān)控系統(tǒng)中有良好的應(yīng)用前景。9.1單總線串行擴(kuò)展單總線標(biāo)準(zhǔn)為外設(shè)器件沿著一條數(shù)據(jù)線進(jìn)行雙向數(shù)據(jù)傳輸提供了一種簡單的方案,任何單總線系統(tǒng)都包含一臺(tái)主機(jī)和一個(gè)或多個(gè)從機(jī),它們共用一條數(shù)據(jù)線。這條數(shù)據(jù)線被地址、控制和數(shù)據(jù)信息復(fù)用。由于主機(jī)和從機(jī)都是開漏輸出,在主設(shè)備的總線一側(cè)必須加上拉電阻,系統(tǒng)才能正常工作。此外,單總線器件通常采用3引腳封裝,在這三個(gè)引腳中有一個(gè)公共地端、一個(gè)數(shù)據(jù)輸入/輸出端和一個(gè)電源端。該電源端可為單總線器件提供外部電源,從而免除總線集中饋電。如圖9-1所示為一個(gè)由單總線構(gòu)成的分布式測(cè)溫系統(tǒng)。帶有單總線接口的溫度計(jì)集成電路DS18B20都掛在DQ總線上。單片機(jī)對(duì)每個(gè)DS18820通過總線DQ尋址。DQ為漏極開路,加上拉電阻RP。圖9-1單總線構(gòu)成的分布式溫度檢測(cè)系統(tǒng)

單總線技術(shù)有3個(gè)顯著的特點(diǎn):1)單總線芯片通過一根信號(hào)線進(jìn)行地址信息、控制信息和數(shù)據(jù)信息的傳送,并通過該信號(hào)線為單總線芯片提供電源;2)每個(gè)單總線芯片都具有全球唯一的訪問序列號(hào),當(dāng)多個(gè)單總線器件掛在同一單總線上時(shí),對(duì)所有單總線芯片的訪問都通過該唯一序列號(hào)進(jìn)行區(qū)分;3)單總線芯片在工作過程中,不需要提供外接電源,而通過它本身具有的“總線竊電”技術(shù)從總線上獲取電源。此外,單總線技術(shù)采用特殊的總線通信協(xié)議實(shí)現(xiàn)數(shù)據(jù)通信。在通信過程中,單總線數(shù)據(jù)波形類似于脈沖寬度調(diào)制信號(hào),總線發(fā)出復(fù)位信號(hào)(保持低電平的周期最長)同步整個(gè)總線,然后由系統(tǒng)主機(jī)初始化每一位數(shù)據(jù)時(shí)隙,利用寬脈沖或窄脈沖來實(shí)現(xiàn)寫“0”或?qū)憽甽”。在讀數(shù)據(jù)時(shí),主機(jī)利用窄脈沖初始化時(shí)隙,從機(jī)將數(shù)據(jù)線保持在低電平,通過展寬低電平脈沖返回邏輯“0”,或保持脈沖寬度不變來返回邏輯“1”。多數(shù)單總線器件支持兩種數(shù)據(jù)速率,較低的數(shù)據(jù)速率約為14kbit/s,較高的數(shù)據(jù)速率約為140kbit/s。單線總線器件主要提供存儲(chǔ)器、混合信號(hào)電路、識(shí)別、安全認(rèn)證等功能。目前Dallas公司采用單總線技術(shù)生產(chǎn)的芯片包括數(shù)字溫度計(jì)、數(shù)字電位器、A/D轉(zhuǎn)換器、定時(shí)器、RAM與E2PROM存儲(chǔ)器、線路驅(qū)動(dòng)器及微型局域網(wǎng)耦合器等系列器件。常用的單線總線器件見表9-19.1.2常用的單總線器件表9-1常用的單線總線器件

DS18B20是美國Dallas公司生產(chǎn)的單總線數(shù)字式溫度傳感器,采用單總線協(xié)議,即與單片機(jī)接口僅需占用一個(gè)I/O端口,無須任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化為數(shù)字信號(hào),以數(shù)字碼形式串行輸出,從而極大地簡化了傳感器與微處理器的接口。在使用過程中,可由一根I/O數(shù)據(jù)線實(shí)現(xiàn)傳輸數(shù)據(jù),并可由用戶設(shè)置溫度報(bào)警界限,被廣泛應(yīng)用于精密儀器、存儲(chǔ)倉庫等需要測(cè)量和控制溫度的地方。DS18B20具有以下特點(diǎn):(1)測(cè)量范圍:-55℃~+125℃,在-10℃~+85℃范圍內(nèi)精度為土0.5℃。(2)分辨率:可編程分辨率為9~12位(其中包括l位符號(hào)位),對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫。9.1.3單總線器件溫度傳感器DS18B20

(3)溫度轉(zhuǎn)換時(shí)間:其轉(zhuǎn)換時(shí)間與設(shè)定的分辨率有關(guān)。當(dāng)設(shè)定為9位時(shí),最大轉(zhuǎn)換時(shí)間為93.75ms;當(dāng)設(shè)定為10位時(shí),為187.5ms;當(dāng)設(shè)定為11位時(shí),為375ms;當(dāng)設(shè)定為12位時(shí),為750ms。(4)電源電壓范圍:在保證溫度轉(zhuǎn)換精度為±0.5℃的情況下,電源電壓可為+3.0~+5.5V。(5)程序設(shè)置寄存器:該寄存器用于設(shè)置器件是處于測(cè)試模式還是工作模式(出廠時(shí)設(shè)置為工作模式),此外還用于設(shè)置溫度分辨率,可設(shè)為9位、10位、11位或12位。(6)64位ROM編碼:從高位算起,該ROM有一個(gè)字節(jié)的CRC校驗(yàn)碼,6個(gè)字節(jié)的產(chǎn)品序列和一個(gè)字節(jié)的產(chǎn)品家族代碼。DS18B20的家族代碼是10H。(7)DS18B20內(nèi)部存儲(chǔ)器分配:DS18B20中含有E2PROM,其報(bào)警上、下限溫度值和設(shè)定的分辨率倍數(shù)是可記憶的,在出廠時(shí)被設(shè)定為12位分辨率。關(guān)于DS18B20的詳細(xì)介紹和應(yīng)用在第11章詳細(xì)說明,這里就不再介紹了。9.2.1SPI串行總線簡介SPI(SerialPeripheralInterface)是由Motorola公司提出的一種同步串行總線,采用3根或4根信號(hào)線進(jìn)行數(shù)據(jù)傳輸,所需要的信號(hào)包括使能信號(hào)、同步時(shí)鐘、同步數(shù)據(jù)(輸入和輸出)。它允許MCU與各種外圍設(shè)備以串行方式進(jìn)行通信。SPI串行接口設(shè)備既可以工作在主設(shè)備模式下,也可以工作在從設(shè)備模式下。系統(tǒng)主設(shè)備為SPI總線通信過程提供同步時(shí)鐘信號(hào),并決定從設(shè)備片選信號(hào)的狀態(tài),使能將要進(jìn)行通信的SPI從器件。SPI從器件則從系統(tǒng)主設(shè)備獲取時(shí)鐘及片選信號(hào),因此從器件的控制信號(hào)CS、SCLK都是輸入信號(hào)。9.2SPI串行總線擴(kuò)展SPI串行總線使用兩條控制信號(hào)線CS和SCLK,一條或兩條數(shù)據(jù)信號(hào)線SDI、SDO。在Motorola公司的SPI技術(shù)規(guī)范中將數(shù)據(jù)信號(hào)線SDI稱為MISO(Master-In-Slave-Out),數(shù)據(jù)信號(hào)線SDO稱為MOSI(Master-Out-Slave-In),控制信號(hào)線CS稱為SS(SlaveSelect),時(shí)鐘信號(hào)線SCLK稱為SCK(SerialClock)。在SPI串行擴(kuò)展系統(tǒng)中,作為主器件的單片機(jī)在啟動(dòng)一次傳送時(shí),便產(chǎn)生8個(gè)時(shí)鐘,傳送給接口芯片作為同步時(shí)鐘,控制數(shù)據(jù)的輸入和輸出。數(shù)據(jù)的傳送格式是高位(MSB)在前,低位(LSB)在后,如圖9-2所示。數(shù)據(jù)線上輸出數(shù)據(jù)的變化以及輸入數(shù)據(jù)時(shí)的采樣,都取決于SCK。但對(duì)于不同的外圍芯片,有的可能是SCK的上升沿起作用,有的可能是SCK的下降沿起作用。SPI有較高的數(shù)據(jù)傳輸速度,最高可達(dá)1.05Mbit/s。目前采用SPI串行總線接口的器件非常多,有A/D與D/A轉(zhuǎn)換器、存儲(chǔ)器(E2PROM/FLASH)、實(shí)時(shí)時(shí)鐘(RTC)、LCD控制器、溫度傳感器、壓力傳感器等。常用的SPI總線器件見表9-2。9.2.2常用的SPI總線器件MAX7219是MAXIM公司生產(chǎn)的串行輸入/輸出共陰極數(shù)碼管顯示驅(qū)動(dòng)芯片,一片MAX7219可驅(qū)動(dòng)8個(gè)7段(包括小數(shù)點(diǎn)共8段)數(shù)碼管、LED條線圖形顯示器、或64個(gè)分立的LED發(fā)光二級(jí)管。該芯片具有10MHz傳輸率的三線串行接口可與任何微處理器相連,只需一個(gè)外接電阻即可設(shè)置所有LED的段電流。它的操作很簡單,MCU只需通過模擬SPI三線接口就可以將相關(guān)的指令寫入MAX7219的內(nèi)部指令和數(shù)據(jù)寄存器,同時(shí)它還允許用戶選擇多種譯碼方式和譯碼位。9.2.3擴(kuò)展帶有SPI接口的顯示芯片MAX7219各引腳的功能為:DIN:串行數(shù)據(jù)輸入端;DOUT:串行數(shù)據(jù)輸出端,用于多片MAX7219級(jí)聯(lián)擴(kuò)展;LOAD:數(shù)據(jù)鎖定控制引腳,在LOAD的上升沿到來時(shí)片內(nèi)數(shù)據(jù)被鎖定;CLK:串行時(shí)鐘輸入;SEGA~SEGG,DP:7段驅(qū)動(dòng)和小數(shù)點(diǎn)驅(qū)動(dòng);ISET:段電流大小控制端。通過一個(gè)10k電阻和Vcc相連,設(shè)置段電流DIG0~DIG7:數(shù)碼管位選擇引腳。1.MAX7219的引腳MAX7219的串行數(shù)據(jù)為16位串行數(shù)據(jù),由4位無效數(shù)據(jù)、4位地址和8位數(shù)據(jù)組成,如表9-3所示。MAX7219在DIN端口上輸入的16位數(shù)據(jù)在每一個(gè)CLK時(shí)鐘信號(hào)的上升沿被移入內(nèi)部移位寄存器,然后在LOAD信號(hào)的上升沿到來時(shí)這些數(shù)據(jù)被送到數(shù)據(jù)/控制寄存器,在發(fā)送過程中遵循高位在前、低位在后的原則。2.MAX7219的數(shù)據(jù)格式MAX7219內(nèi)部有14個(gè)可尋址的數(shù)據(jù)/控制寄存器,8字節(jié)的數(shù)據(jù)寄存器在片內(nèi)是一個(gè)8x8的內(nèi)存空間,5字節(jié)的控制寄存器包括編碼模式、顯示亮度、掃描控制、關(guān)閉模式及顯示檢測(cè)5個(gè)寄存器,如表9-4所示。編程時(shí)只有正確操作這些寄存器,MAX7219才可工作。表9-4MAX7219的內(nèi)部寄存器MAX7219有兩種譯碼方式:譯碼方式和不譯碼方式。當(dāng)選擇不譯碼時(shí),8個(gè)數(shù)據(jù)位分別一一對(duì)應(yīng)7個(gè)段和小數(shù)點(diǎn)位;譯碼方式是BCD譯碼,直接送數(shù)據(jù)就可以顯示。實(shí)際應(yīng)用中可以按位設(shè)置選擇譯碼或是不譯碼方式,也就是譯碼的位為1,不譯碼的位為0。(1)譯碼控制寄存器(09H)此寄存器用于設(shè)置顯示的LED的個(gè)數(shù)。(2)掃描控制寄存器(0BH),3)亮度控制寄存器(0AH),共有16級(jí)可選擇,用于設(shè)置LED的顯示亮度,從00H~FFH。(4)關(guān)斷模式寄存器(XCH),共有兩種模式選擇,一是關(guān)斷狀態(tài),(最低位D0=0)一是正常工作狀態(tài)(D0=1)。(5)顯示測(cè)試寄存器(0FH),用于設(shè)置LED是測(cè)試狀態(tài)還是正常工作狀態(tài),當(dāng)測(cè)試狀態(tài)時(shí)(最低位D0=1)各位顯示全亮,正常工作狀態(tài)(D0=0)。例9-1使用AT89S51單片機(jī)利用I/O引腳擴(kuò)展MAX7219驅(qū)動(dòng)8位數(shù)碼管,8位數(shù)碼管顯示“20150709”分析:根據(jù)要求擴(kuò)展8位數(shù)碼管,應(yīng)用電路如圖9-4所示。51單片機(jī)使用P2.0~P2.2和MAX7219相連接,MAX7219的位輸出和數(shù)據(jù)輸出分別連接8位數(shù)碼管的對(duì)應(yīng)端口。

3.MAX7219的應(yīng)用

根據(jù)要求設(shè)計(jì)程序如下:SBDINBITP2.0SBLOADBITP2.1SBCLKBITP2.2ORG0000HLJMPMAINMAIN:LCALLXIANSHI;調(diào)用顯示程序SJMPMAINXIANSHI:PUSHPSWACALLINIT7219;7219初始化MAIN1:MOV30H,#2;30H單元開始存入要顯示的內(nèi)容 MOV31H,#0 MOV32H,#1 MOV33H,#5 MOV34H,#0 MOV35H,#7 MOV36H,#0 MOV37H,#9 MOVR0,#30H MOVR1,#01H MOVR6,#8 CLRSBLOADL1:MOVA,R1 MOVB,@R0 ACALLWRITE INCR0 INCR1 DJNZR6,L1 POPPSW RETWRITE:CLRSBLOAD ;地址放在A,數(shù)據(jù)放在B中ACALLWR7219;寫地址 MOVA,B ACALLWR7219;寫數(shù)據(jù) SETBSBLOAD NOP NOP RETWR7219:MOVR7,#8;8位數(shù)據(jù)分別移入WRITE1:CLRSBCLK;CLK拉低 RLCA ;A中的值左移 MOVSBDIN,C;輸出的值送給DINNOP SETBSBCLK;CLK拉高,上升沿,數(shù)據(jù)移入 NOP DJNZR7,WRITE1 RETINIT7219:MOVA,#09H ;譯碼模式寄存器MOVB,#0FFH;均譯碼 ACALLWRITE MOVA,#0AH ;顯示亮度控制MOVB,#05H ACALLWRITE MOVA,#0BH ;掃描控制MOVB,#07H ;掃描0~7位 ACALLWRITE MOVA,#0CH ;顯示測(cè)試寄存器MOVB,#01H ACALLWRITE RETEND二線制I2C串行E2PROM是應(yīng)用非常廣泛的存儲(chǔ)器件。它是帶I2C總線接口的電擦除可編程存儲(chǔ)器。其特點(diǎn)是二線制、在線讀寫、斷電保護(hù)數(shù)據(jù),廣泛應(yīng)用于電子產(chǎn)品、計(jì)算機(jī)及其外設(shè)、通信產(chǎn)品等。二線制I2C有多種型號(hào),如美國ATMEL公司的AT24C××芯片。下面結(jié)合AT24C××芯片為例,講述串行E2PROM擴(kuò)展單片機(jī)存儲(chǔ)器技術(shù)。9.3I2C總線的串行擴(kuò)展介紹I2C總線是荷蘭飛利浦(Philips)公司首創(chuàng)的兩線串行多主總線,是一種用于連接微控制器及其外圍設(shè)備,實(shí)現(xiàn)同步雙向串行數(shù)據(jù)傳輸?shù)亩€式串行總線,目前已經(jīng)發(fā)展到2.1版本。該總線在物理上由一根串行數(shù)據(jù)線SDA和一根串行時(shí)鐘SCL組成,各種使用該標(biāo)準(zhǔn)的器件都可以直接連接到該總線上進(jìn)行通信,可以在同一條總線上連接多個(gè)外部資源??偩€上的器件既可以作為發(fā)送器,也可以作為接收器,按照一定的通信協(xié)議進(jìn)行數(shù)據(jù)交換。在每次數(shù)據(jù)交換開始時(shí),作為主控器的器件需要通過總線競爭獲得主控權(quán)。每個(gè)器件都具有唯一的地址,各器件間通過尋址確定接收方。如圖9-5所示為單片機(jī)使用I2C總線擴(kuò)展多個(gè)外部資源的示意圖。9.3.1I2C總線基礎(chǔ)知識(shí)

1.I2C總線圖9-5所示為單片機(jī)使用I2C總線擴(kuò)展多個(gè)外部資源的示意圖。I2C總線在便攜式微功耗領(lǐng)域中具有較廣泛的應(yīng)用,許多IC卡芯片的接口形式就是I2C總線,如A/D及D/A轉(zhuǎn)換器、存儲(chǔ)器等。目前很多單片機(jī)內(nèi)部都集成了I2C總線,而AT89S51單片機(jī)內(nèi)部沒有集成,但可以通過軟件實(shí)現(xiàn)與I2C總線的通信。I2C總線的基本特性:(1)只要求兩條信號(hào)線:一條串行數(shù)據(jù)線SDA和一條串行時(shí)鐘線SCL。SDA是雙向串行數(shù)據(jù)線,用于地址、數(shù)據(jù)的輸入和數(shù)據(jù)的輸出,使用時(shí)需加上拉電阻。SCL是時(shí)鐘線,為器件數(shù)據(jù)傳輸?shù)耐綍r(shí)鐘信號(hào);(2)每根連接到總線的器件都可以通過唯一的地址進(jìn)行尋址;(3)它是一個(gè)真正的多主機(jī)總線,如果兩個(gè)或更多主機(jī)同時(shí)初始化數(shù)據(jù)傳輸,則可以通

過沖突檢測(cè)和仲裁防止數(shù)據(jù)被破壞;(4)在CPU和被控制器件間雙向傳送,最高傳送速率為400kbps。片上的濾波器可以濾去總線數(shù)據(jù)上的毛刺,保證數(shù)據(jù)可靠傳輸。在I2C總線協(xié)議中,數(shù)據(jù)的傳輸必須由主器件發(fā)送的啟動(dòng)信號(hào)開始,以主器件發(fā)送的停止信號(hào)結(jié)束,從器件在收到啟動(dòng)信號(hào)之后需要發(fā)送應(yīng)答信號(hào)來通知主器件已經(jīng)完成了一次數(shù)據(jù)接收。當(dāng)時(shí)鐘線SCL保持高電平時(shí),并且數(shù)據(jù)線SDA由高變低時(shí),為I2C總線工作的起始信號(hào);當(dāng)SCL為高電平時(shí),且SDA由低變高時(shí),為I2C總線停止信號(hào);標(biāo)志操作的結(jié)束,即將結(jié)束所有相關(guān)的通信。圖9-6是I2C總線的啟動(dòng)信號(hào)和停止信號(hào)時(shí)序圖。2.I2C總線協(xié)議在I2C總線開始信號(hào)后,送出的第一個(gè)字節(jié)數(shù)據(jù)是用來選擇從器件地址,系統(tǒng)發(fā)出開始信號(hào)后,系統(tǒng)中的各器件將自己的地址和CPU發(fā)送到總線上的地址進(jìn)行比較,如果與CPU發(fā)送到總線上的地址一致,則該器件是被CPU尋址的器件。I2C總線上以字節(jié)為單位進(jìn)行傳送,每次先傳送最高位。每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,在每個(gè)被傳送的字節(jié)后面,接收器都必須發(fā)一位應(yīng)答位(ACK),總線上第9個(gè)時(shí)鐘脈沖對(duì)應(yīng)于應(yīng)答位,數(shù)據(jù)線上低電平為應(yīng)答信號(hào),高電平為非應(yīng)答信號(hào)。待發(fā)送器確認(rèn)后,再發(fā)送下一個(gè)數(shù)據(jù)。I2C總線為一種完善的串行總線擴(kuò)展,標(biāo)準(zhǔn)的I2C總線有嚴(yán)格規(guī)范的電氣接口和標(biāo)準(zhǔn)的狀態(tài)處理軟件包,要求系統(tǒng)中I2C總線連接的所有節(jié)點(diǎn)都具有I2C總線接口。大多數(shù)單片機(jī)應(yīng)用系統(tǒng)中采用單主結(jié)構(gòu)形式。在單主系統(tǒng)中,I2C總線只存在主方式,只存在單片機(jī)對(duì)I2C總線器件節(jié)點(diǎn)的讀(主接收)、寫(主發(fā)送)操作。因此,當(dāng)所選擇的單片機(jī)本身帶有I2C總線接口時(shí)可以直接利用硬件I2C總線接口;當(dāng)所選擇的單片機(jī)本身不帶有I2C總線接口時(shí),則可以利用單片機(jī)的普通I/O來模擬實(shí)現(xiàn)I2C總線接口,其中一個(gè)引腳用于模擬SDA信號(hào)線的時(shí)序,另一個(gè)引腳用于模擬SCL信號(hào)線的時(shí)序。這使得I2C總線的使用不受單片機(jī)必須帶有I2C總線接口的限制。9.3.2I2C總線協(xié)議的軟件模擬下面給出模擬I2C總線典型信號(hào)的程序,包括啟動(dòng)、停止、發(fā)送應(yīng)答位、發(fā)送非應(yīng)答位、讀字節(jié)子程序和寫字節(jié)子程序等。用戶只要理解通用讀寫子程序就能方便地編制應(yīng)用程序。1.引腳定義在模擬主方式下的I2C總線時(shí)序時(shí),選用P3.0、P3.1作為時(shí)鐘線SCL和數(shù)據(jù)線SDA,SDAKBITP3.0SCLKBITP3.1START:SETBSDAK;開始SCL高電平,SDA由高電平變?yōu)榈碗娖奖硎鹃_始NOP SETBSCLK NOP NOP CLRSDAK NOP NOP NOP CLRSCLK NOP RET2.啟動(dòng)(START):產(chǎn)生I2C總線數(shù)據(jù)傳輸起始信號(hào)。STOP:CLRSDAK ;SCL處于高電平時(shí),SDA從低電平變?yōu)楦唠娖奖硎?停止"SETBSCLK NOP NOP NOP SETBSDAK NOP NOP NOP RET3.停止(STOP):產(chǎn)生I2C總線數(shù)據(jù)傳輸停止信號(hào)。TACK:CLRSDAK ;應(yīng)答信號(hào)

NOP NOP SETBSCLK;脈沖信號(hào) NOP NOP CLRSCLK NOP NOP RET4.發(fā)送應(yīng)答位(TACK):向I2C總線發(fā)送應(yīng)答位信號(hào)。NOTACK:SETBSDAKNOP NOP NOP SETBSCLK NOP NOP NOP CLRSCLK NOP RET5.發(fā)送非應(yīng)答位(NOTACK):向I2C總線發(fā)送非應(yīng)答位信號(hào)。該子程序是向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)的操作。調(diào)用前將待發(fā)送的數(shù)據(jù)字節(jié)存放在A中。WRBYT:MOVR7,#8WRBYT1:RLCAMOVSDAK,C SETBSCLK;SCLK置為高電平 NOP NOP NOP NOP CLRSCLK ;SCLK置為低電平 DJNZR7,WRBYT1 RET6.寫一個(gè)字節(jié)數(shù)據(jù)子程序。該子程序是用來從I2C總線接收一個(gè)字節(jié)數(shù)據(jù),將接收到的數(shù)據(jù)字節(jié)存放在R6中。RDBYT:MOVR7,#8 ;8位數(shù)據(jù)RDBYT1:SETBSDAKSETB SCLK;產(chǎn)生脈沖 MOVC,SDAK;讀數(shù)據(jù) MOVA,R6 ;讀取暫存的數(shù)據(jù) RLCA ;讀入數(shù)據(jù)給累加器A MOVR6,A ;暫存數(shù)據(jù)至R6 CLRSCLK DJNZR7,RDBYT1 RET7.讀一個(gè)字節(jié)。AT24C××器件是ATMEL公司生產(chǎn)的I2C總線接口的E2PROM芯片,主要應(yīng)用在通用存儲(chǔ)器IC卡中,AT24C××芯片主要有1KB的AT24C01、2KB的AT24C02、4KB的AT24C04、8KB的AT24C08、16KB的AT24C16,AT24C××芯片的2種標(biāo)準(zhǔn)引腳封裝如圖9-7所示。9.3.3AT24C××芯片介紹

1.AT24C××芯片引腳介紹片外地址線(A0~A2):共8種地址編排,即一個(gè)單總線系統(tǒng)中可同時(shí)接入8片AT24C01/02芯片。如果單總線系統(tǒng)中只需接入1片AT24C01/02芯片,可將A0~A2同時(shí)接地,該AT24C××芯片的片外地址為000B。AT24C04用A2和A1作為片外尋址線,單個(gè)總線系統(tǒng)可尋址4個(gè)4KB器件,A0引腳不用;AT24C08僅用A2作為片外尋址線,單總線系統(tǒng)最多可尋址2個(gè)8KB器件,A0和A1引腳不用。串行數(shù)據(jù)(SDA):雙向數(shù)據(jù)線。其各引腳功能說明如下:串行時(shí)鐘(SCL):雙向線。串行時(shí)鐘上升沿時(shí),數(shù)據(jù)輸入每個(gè)E2PROM器件,串行時(shí)鐘下降沿時(shí),數(shù)據(jù)從E2PROM器件中輸出。

寫保護(hù)(WP):寫保護(hù)控制端,接“0”,允許寫入,接“1”禁止寫入。NC:空引腳。Vcc:電源引腳。GND:接地引腳。2.AT24CXX命令字格式WR24C02:ACALLSTART ;開始信號(hào) MOVA,#0A0H ;命令10100000B,寫操作 ACALLWRBYT ;寫入數(shù)據(jù) ACALLTACK MOVA,#0;操作地址 ACALLWRBYT ;寫入操作地址 ACALLTACK MOVa,b ;讀取暫存數(shù)據(jù) ACALLWRBYT ;寫入數(shù)據(jù) ACALLTACK ACALLSTOP;停止信號(hào) ACALLDLY5M;DLY5M為延時(shí)子程序 ACALLDLY5M ACALLDLY5M ACALLDLY5M RETAT24C02允許多個(gè)字節(jié)順序?qū)懭?,在以上格式中,可以連續(xù)送入多個(gè)字節(jié)數(shù)據(jù),再送停止位。

下面是寫AT24C02數(shù)據(jù)的子程序。

RD24C02:ACALLSTART ;開始MOVA,#0A0H ;10100000,寫操作 ACALLWRBYT ;寫命令 ACALLTACK MOVA,#0;寫入操作地址 ACALLWRBYT ACALLTACK ACALLSTART MOVA,#0A1H;10100001,讀操作 ACALLWRBYT ;寫命令字 ACALLTACK ACALLRDBYT;讀 ACALLNOTACK ACALLSTOP ;停止 ACALLDLY5M RET下面是讀AT24C02數(shù)據(jù)的子程序。

例9-2:使用AT89S51單片機(jī)和AT24C02芯片擴(kuò)展存儲(chǔ)器,單片機(jī)讀入P2口按鍵的輸入狀態(tài),并寫入AT24C02芯片后,再將寫入的數(shù)據(jù)從AT24C02芯片讀出來,輸出到P1口通過發(fā)光二極管顯示。分析:AT89S51單片機(jī)沒有I2C接口,用P3.0和P3.1分別代替SDA和SCL信號(hào)線,用軟件實(shí)現(xiàn)I2C總線協(xié)議。設(shè)計(jì)電路如圖9-10所示。9.3.4AT24C02芯片的應(yīng)用SDAKBITP3.0SCLKBITP3.1ORG0000HAJMPSTAR;*****************************************************************************;主程序;******************************************************************************STAR:ACALLDLY5MACALLDLY5MST1:ACALLRD24C02;讀24C02MOVA,R6 ANLA,#0FH MOVP1,A;輸出數(shù)值到P1口低4位 MOVP2,#0FFH;P2口鎖存器置1主程序設(shè)計(jì)如下:

MOVA,P2 ;讀P2口 ANLA,#0FH;屏蔽高四位 MOVB,A;數(shù)據(jù)暫存到B寄存器 ACALLWR24C02;寫24C02 ACALLDLY5M;延時(shí) ACALLDLY5M ACALLDLY5M SJMPST1 ;循環(huán)DLY5M:MOVR4,#10;延時(shí)

DLY5M1:MOVR3,#248DJNZR3,$

DJNZR4,DLY5M1 RET END1.HD7279A的簡介HD7279A是一片具有串行接口的,可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管(或64只獨(dú)立LED)的智能顯示驅(qū)動(dòng)芯片,該芯片同時(shí)還可連接多達(dá)64鍵的鍵盤矩陣,無需外圍元件,單片即可完成LED顯示、鍵盤接口的全部功能,HD7279A內(nèi)部含有譯碼器,可直接接受BCD碼或16進(jìn)制碼,并同時(shí)具有2種譯碼方式。但是HD7279A不適用于應(yīng)用在需要2個(gè)或2個(gè)以上鍵同時(shí)按下的場(chǎng)合。HD7279A芯片占用口線少,外圍電路簡單,具有較高的性能價(jià)格比,已在鍵盤/顯示器接口的設(shè)計(jì)中獲得廣泛應(yīng)用。9.4鍵盤/顯示串行接口芯片HD7279A的應(yīng)用HD7279A芯片為28引腳標(biāo)準(zhǔn)雙列直插型(DIP)封裝,單一的+5V供電。其引腳如圖9-11所示,各引腳功能如下:

HD7279A的控制命令分為二大類,包括純命令和帶有數(shù)據(jù)的命令。(1)純命令。所有純命令都是單字節(jié)命令,如表9-7所示。2.控制指令帶有數(shù)據(jù)的命令均有雙字節(jié)組成,第一字節(jié)為命令,有的帶有地址,第二字節(jié)為操作的內(nèi)容。1)按方式0譯碼顯示命令。命令中的a2、al、a0表示LED數(shù)碼管的位地址,表示顯示數(shù)據(jù)是送給哪一位LED的,Ll表示LED最低位,L8表示LED最高位,具體位地址的譯碼見表9-9。命令中的d3、d2、dl、d0為顯示數(shù)據(jù),收到這些數(shù)據(jù)后,HD7279A按表9-10所示的規(guī)則譯碼和顯示。dp為小數(shù)點(diǎn)顯示控制位,dp=l時(shí),小數(shù)點(diǎn)顯示;dp=0時(shí),小數(shù)點(diǎn)不顯示。(2)帶有數(shù)據(jù)的指令3)不譯碼顯示命令4)閃爍控制88H5)消隱控制98H此為段尋址指令,作用為點(diǎn)亮數(shù)碼管中的某一指定段,或LED矩陣中某一指定的LED。指令中,d0~d5為段地址,范圍從00H~3FH,具體分配為:第1個(gè)數(shù)碼管的G段地址為00H,F(xiàn)段為01H,……A段為06H,小數(shù)點(diǎn)DP為07H,第2個(gè)數(shù)碼管的G段位08H,F段為09H.……,依此類推直至第8個(gè)數(shù)碼管的小數(shù)點(diǎn)DP地址為3FH。6)段點(diǎn)亮命令E0H

段尋址命令,作用為關(guān)閉數(shù)碼管中的某一段,該指令與段點(diǎn)亮地址相同。。7)段關(guān)閉指令C0H

該指令從HD7279A讀出當(dāng)前的按鍵代碼.與其它指令不同,此命令的前一個(gè)字節(jié)15H,表示單片機(jī)寫到HD7279的讀鍵命令。而第二個(gè)字節(jié)為HD7279A返回的按鍵代碼,其范圍是0-3FH8)讀鍵盤數(shù)據(jù)指令15H①純命令時(shí)序。單片機(jī)發(fā)出8個(gè)CLK脈沖,向HD7279A發(fā)出8位命令,DATA引腳最后為高阻態(tài),如圖9-12所示。3.命令時(shí)序單片機(jī)發(fā)出16個(gè)CLK脈沖,前8個(gè)向HD7279A發(fā)送8位命令;后8個(gè)向HD7279A傳送8位顯示數(shù)據(jù),DATA引腳最后為高阻態(tài),如圖9-13所示。②帶數(shù)據(jù)命令時(shí)序。單片機(jī)發(fā)出16個(gè)CLK脈沖,前8個(gè)向HD7279A發(fā)送8位命令;發(fā)送完之后DATA引腳為高阻態(tài);后8個(gè)CLK由HD7279A向單片機(jī)返回8位按鍵值,DATA引腳為輸出狀態(tài)。最后一個(gè)CLK脈沖的下降沿將DATA引腳恢復(fù)為高阻態(tài),如圖9-14所示。③讀鍵盤命令時(shí)序。4.HD7279的應(yīng)用

圖9-15所示為AT89S51單片機(jī)與HD7279A的接口電路,外接振蕩元件為典型值,晶振頻率為12MHz。上電后,HD7279A經(jīng)過15~18ms的時(shí)間才進(jìn)人工作狀態(tài)。

單片機(jī)判斷鍵盤矩陣中是否有按鍵按下,是通過KEY引腳電平來判斷的。在使用中斷方式時(shí)可將KEY引腳接至單片機(jī)的外部中斷輸入端,同時(shí)應(yīng)將外中斷觸發(fā)方式設(shè)置成跳沿觸發(fā);若設(shè)置成電平觸發(fā)方式,則在按鍵按下較長時(shí)間時(shí),會(huì)引發(fā)多次中斷誤申請(qǐng)。是否有鍵按下也可以采用查詢方式。HD7279A控制顯示器時(shí),應(yīng)連接共陰極顯示器。對(duì)于不使用的按鍵和顯示器,可以不連接。如果不用鍵盤,則圖9-15中連接到鍵盤的8只10KΩ電阻和8只100KΩ下拉電阻均可以省去。如果使用了鍵盤,則電路中的8只100KΩ下拉電阻均不得省略.除非不接入數(shù)碼管,否則串入DP及SA-SG連線的8只200Ω電阻均不能省去。因?yàn)椴捎醚h(huán)掃描的工作方式,如果采用普通的數(shù)碼管,亮度有可能不夠,采用高亮或超高亮的型號(hào),可以解決這個(gè)問題。數(shù)碼管的尺寸,不宜選得過大,一般字符高度不宜超過1英寸,如使用大型的數(shù)碼管,應(yīng)使用適當(dāng)?shù)尿?qū)動(dòng)電路。根據(jù)圖9-15,編寫程序?qū)崿F(xiàn)當(dāng)有按鍵按下時(shí),單片機(jī)讀取該按鍵的代碼并將其顯示在LED數(shù)碼管上。DU7279DATA020HXIE7279DATA021HHDCSBITPl.0;HD7279A的CS連接于P1.0HDCLKBITPl.1;HD7279A的CLK連接于P1.1HDDATABITPl.2;HD7279A的DATA連接于P1.2HDKEYBITPl.3;HD7279A的KEY連接于P1.3ORGOOOHJMPSTARTORG100HSTART:MOVSP,#60H;定義堆棧MOVP1,#011111001B;CS=1,KEY=1,CLK=0,DATA=0ACALLDELY25;延時(shí)25usMOVXIE7279,#A4H;發(fā)復(fù)位指令A(yù)CALLWRITE7279MOVXIE7279,#98H;由于只用到兩位所以其余位設(shè)置為消隱

CALLWRITE7279ACALLDELAY3MOVXIE7279,#03HACALLWRITE7279SETBCS;恢復(fù)CS為高電平MAIN:JBKEY,MAIN;檢測(cè)是否有鍵按下MOVXIE7279,#15H;有鍵按下,發(fā)送讀鍵盤指令A(yù)CALLWRITE7279ACALLREAD7279SETBCS;設(shè)CS為高電平MOVA,DU7279MOVR7,AMOVXIE7279,#0C8H;下載數(shù)據(jù),方式1譯碼,選擇L1位ACALLWRITE7279;發(fā)送指令到HD7279AMOVA,R7ANLA,#0FH;屏蔽掉高4位MOVXIE7279,A;發(fā)送數(shù)據(jù)ACALLWRITE7279SETBHDCSMOVXIE7279,#0C9H;下載數(shù)據(jù),方式1譯碼,選擇L2位ACALLWRITE7279;發(fā)送指令到HD7279AMOVA,R7SWAPA;要顯示高位ANLA,#0FH;屏蔽掉高4位MOVXIE7279,A;發(fā)送數(shù)據(jù)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論