第8章 單片機的IO擴展_第1頁
第8章 單片機的IO擴展_第2頁
第8章 單片機的IO擴展_第3頁
第8章 單片機的IO擴展_第4頁
第8章 單片機的IO擴展_第5頁
已閱讀5頁,還剩194頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章單片機的I/O擴展本章內(nèi)容系統(tǒng)擴展的含義I/O口的擴展利用I/O接口芯片:82C51、81C51的I/O口擴展8.1單片機的系統(tǒng)擴展系統(tǒng)擴展的含義在單片機芯片外加相應(yīng)的芯片、電路,使得有關(guān)功能得以擴充,我們稱為系統(tǒng)擴展。系統(tǒng)擴展包括:外部存儲器擴展,I/O接口擴展,總線擴展等系統(tǒng)擴展分類單一功能的擴展綜合功能的擴展8.2I/O擴展概述單片機本身接口功能有限單片機控制應(yīng)用中的復(fù)雜接口要求擴展I/O接口電路的功能:速度協(xié)調(diào)輸出數(shù)據(jù)鎖存輸入數(shù)據(jù)三態(tài)緩沖數(shù)據(jù)轉(zhuǎn)換為什么要擴展I/O口常用編址方法有:獨立編址和統(tǒng)一編址。MCS-51單片機采用與外部RAM統(tǒng)一編址方法,即每一個擴展的I/O口相當(dāng)于一個擴展的RAM單元;訪問外部I/O口的指令同訪問外部數(shù)據(jù)存儲器指令。擴展I/O接口編址方法例如:MOVX @DPTR,A MOVX A,@DPTRMOVX @RI,AMOVX A,@RI;其中,DPTR、RI中裝I/O對應(yīng)的地址(1)無條件傳送方式無條件傳送也稱為同步程序傳送。只有那些能一直為數(shù)據(jù)I/O傳送作好準(zhǔn)備的設(shè)備,才能使用無條件傳送方式。因為在進行I/O操作時,不測試設(shè)備的狀態(tài),可以根據(jù)需要隨時進行數(shù)據(jù)傳送操作。該方式適用于兩類設(shè)備的數(shù)據(jù)輸入/輸出:具有常駐的數(shù)據(jù)信號變化緩慢的數(shù)據(jù)信號的設(shè)備。單片機I/O控制方式在I/O操作之前,要先檢瀏設(shè)備的狀態(tài),以了解設(shè)備是否已為數(shù)據(jù)I/O作好了準(zhǔn)備;只有在確認(rèn)設(shè)備已“準(zhǔn)備好”的情況下,單片機才能執(zhí)行數(shù)據(jù)I/O操作為了實現(xiàn)查詢方式的數(shù)據(jù)傳送,需要由接口電路提供設(shè)備狀態(tài),并以軟件方法進行狀態(tài)測試。因此這是一種軟硬件方法結(jié)合的數(shù)據(jù)傳送方式。程序查詢方式,電路簡單,查詢軟件也不復(fù)雜,而且通用性強。(2)查詢方式(有條件傳送方式)中斷方式又稱程序中斷方式、它與查詢方式的主要區(qū)別在于知何知道設(shè)備是否為數(shù)據(jù)傳送作好了準(zhǔn)備,查詢方式是單片機的主動形式,而中斷方式則是單片機等待通知(中斷請求)的被動形式。采用中斷方式進行數(shù)據(jù)傳送時,當(dāng)設(shè)備為數(shù)據(jù)傳送作好準(zhǔn)備之后,就向單片機發(fā)出中斷請求;單片機接收到中斷請求之后,即作出響應(yīng),暫停正在執(zhí)行的原程序,而轉(zhuǎn)去為設(shè)備的數(shù)據(jù)輸入/輸出服務(wù)待服務(wù)完成之后,程序返回,單片機再繼續(xù)執(zhí)行被中斷的原程序。(3)中斷方式并行口擴展的分類利用鎖存器、緩沖器進行并行口簡單擴展用可編程并行接口芯片進行擴展I/O接口擴展常用芯片8.3簡單I/O口擴展8.3.1簡單接口常用鎖存器、緩沖器芯片I/O口的簡單擴展輸出口----利用鎖存器擴展輸入口----利用緩沖器擴展74LS377、74LS273、74LS244、74LS2458位數(shù)據(jù)/地址鎖存器74LS273/373(1)74LS27374LS273是一種帶清除功能的8D觸發(fā)器其內(nèi)部結(jié)構(gòu)如圖8.1所示引腳分布如圖8.2所示真值表見表8.1所示1D~8D為數(shù)據(jù)輸入端1Q~8Q為數(shù)據(jù)輸出端,正脈沖觸發(fā),低電平清除,常用作8位地址鎖存器。表8-174LS273真值表圖8.174LS273內(nèi)部結(jié)構(gòu)圖圖8.274LS273封裝圖

(2)74LS37374LS373是一種帶有三態(tài)輸出門的8D觸發(fā)器其內(nèi)部結(jié)構(gòu)如圖8.3所示引腳分布如圖8.4所示數(shù)據(jù)輸入由允許端G控制數(shù)據(jù)輸出由數(shù)據(jù)輸出控制端控制各觸發(fā)器僅輸出單一狀態(tài)D1~D8為數(shù)據(jù)輸入端Q1~Q8為數(shù)據(jù)輸出端觸發(fā)器的功能如表8.2所示常用作數(shù)據(jù)/地址鎖存器圖8.374LS373內(nèi)部結(jié)構(gòu)圖表8-274LS373真值表圖8.474LS373引腳功能圖(3)74LS24474LS244是三態(tài)八緩沖器/線驅(qū)動器/線接收器(3S,兩組控制)內(nèi)部結(jié)構(gòu)邏輯圖:(3)74LS244(續(xù))引出端符號:1A1~1A4,2A1~2A4: 輸入端1G#,2G#: 三態(tài)允許端(低電平有效)1Y1~1Y4,2Y1~2Y4: 輸出端真值表:表8-374LS244真值表(4)74LS24574LS245:8位雙向3態(tài)緩沖電路,主要使用在數(shù)據(jù)的雙向緩沖。內(nèi)部結(jié)構(gòu)邏輯圖:(4)74LS245(續(xù))真值表表8-474LS245真值表8.3.2簡單I/O口擴展簡單輸入口擴展圖8.574LS244擴展輸入接口電路簡單輸出口擴展圖8.674LS377擴展輸出接口電路簡單并行口擴展應(yīng)用舉例圖8.774LS系列擴展輸入/輸出接口電路8.4可編程并行接口芯片的擴展8.4.1利用可編程并行接口芯片8255的I/O擴展常用的外圍I/O接口芯片:82C55:可編程通用并行接口(3個8位I/O口)。81C55:可編程的IO/RAM擴展接口電路(2個8位I/O口,1個6位I/O口,256RAM單元,1個14位的減法計數(shù)器)。都可以和AT89S51直接連接,接口邏輯簡單。8255的結(jié)構(gòu)圖8.88255的內(nèi)部結(jié)構(gòu)框圖8255的擴展邏輯電路MCS-51單片機可以和8255直接連接,圖8.9給出了一種擴展電路。圖8.98255的擴展邏輯電路圖8255并口擴展舉例【例8-1】8255與8031連接如圖8.10所示,要求:試確定8255A的端口地址欲使A口:方式0,輸出口;B口:方式1,輸入口;上C口:方式0,輸入口。編寫初始化程序欲使8051內(nèi)部RAM30H的內(nèi)容從PA口輸出,試編程。欲使PC3向外輸出一個正脈沖信號,試編程。

/RD/WRP0.7P0.6…P0.1P0.08031ALEP2.7D7Q7D6Q674LS373D1Q1D0GQ0/RD/WRPA7-08255A1PB7-0A0D7D6PC7-0D0/CS………圖8.108255與8031連接圖【例8-1】解答 P2 P0 0×××,××××,××××,××00

A口:

7FFCH(0000H)0×××,××××,××××,××01

B口:

7FFDH(0001H)0×××,××××,××××,××10

C口:

7FFEH(0002H)0×××,××××,××××,××11 控制口:

7FFFH(0003H)MOV DPTR,#7FFFH ;控制口地址MOV A,#8EH ;MOVX @DPTR,A初始化編程確定地址程序段MOV A,30HMOV DPTR,#7FFCHMOVX @DPTR,A④程序段MOV DPTR,#7FFFHMOV A,#00HMOVX @DPTR,AMOV A,#86HMOVX @DPTR,AACALL DELAY1MOV A,#87HMOVX @DPTR,AACALL DELAY1DEC AMOVX @DPTR,AACALL DELAY2【例8-1解答】【例8-2】設(shè)單片機通過8255來控制一順序控制過程,該系統(tǒng)連接如圖8.11,A口輸出6路順序控制信號,以指示燈指示,6道工序,每道工序時間為10秒。PC0輸入啟動信號,PC7輸入停止信號,分別與SA1和SA2相連。試編寫此應(yīng)用程序。圖8.118255A的應(yīng)用舉例(2)端口的工作方式為方式0,A口為輸出口,C口為輸入口,

8255的控制字為89H。(1)8255四個端口的地址:××××,××00,××××,××00BA口地址:FCFCH××××,××00,××××,××01BB口地址:FCFDH××××,××00,××××,××10BC口地址:FCFEH××××,××00,××××,××11B控制口地址:FCFFH【例8-2】解答ORG0100HMA:MOV DPTR,#0FCFFH ;控制寄存器地址MOV A,#89H ;控制字MOVX @DPTR,A ;控制字送控制寄存器MOV DPTR,#0FCFEH ;C口地址QD:MOVX A,@DPTR ;讀C口JNB ACC.0,QD ;判斷有無啟動信號LOOP:MOV DPTR,#0FCFCH ;A口地址MOV A,#01H ;第一路控制信號LOOP1:MOVX @DPTR,A ;輸出第一路控制信號ACALL DELAY ;延遲10秒RL A ;下一路控制信號JNB ACC.6,LOOP1 ;判斷6路控制信號有無輸出完(3)控制程序如下:MOV DPTR,#0FCFEH ;C口地址MOVX A,@DPTR ;讀C口JB ACC.7,TZ ;判斷有無停止信號JMP LOOP ;無停止信號則進行下一輪控制TZ:MOV DPTR,#0FCFCH ;有停止信號則使A口輸出清零CLR AMOVX @DPTR,ASJMP $ORG 1000H ;延時子程序DELAY:MOV 22H,#50HL1: MOV 21H,#100HL2: MOV 20H,#250HL3: NOP NOP DJNZ 20H,L3 DJNZ 21H,L2 DJNZ 22H,L1 RET(3)控制程序(續(xù)):8.4.2可編程并行接口芯片8155的擴展8155的結(jié)構(gòu)與引腳8155芯片內(nèi)部邏輯由三部分組成:存儲單元為256字節(jié)靜態(tài)RAM三個可編程I/O口:PA口,8位PB口,8位PC口,6位14位二進制減法計數(shù)器8155芯片的內(nèi)部結(jié)構(gòu)圖8.128155芯片的內(nèi)部結(jié)構(gòu)8155芯片的引腳圖8.138155芯片的引腳8155芯片的引腳(續(xù))PA0—PA7端口A的I/O線(8位,接外設(shè))PB0—PB7端口B的I/O線(8位,接外設(shè))PC0—PC5端口C的I/O線(6位,接外設(shè))AD0—AD7三態(tài)地址/數(shù)據(jù)復(fù)用線(8位,一般接單片機P0口)CPU與8155之間的地址、數(shù)據(jù)、命令、狀態(tài)等信號通過它來傳送IO/M#端口/存儲器選擇控制:“0”選擇片內(nèi)RAM;“1”選擇片內(nèi)I/O口TIMERIN8155片內(nèi)定時器/計數(shù)器的計數(shù)脈沖輸入引腳TIMEROUT8155片內(nèi)定時器/計數(shù)器的計滿回零輸出引腳RD#、WR#分別是對8155片內(nèi)的RAM或I/O口的的讀、寫控制信號ALE地址鎖存引腳CE#選片RESET復(fù)位信號。復(fù)位后A口、B口和C口均為數(shù)據(jù)輸入方式8155的使用與工作方式8155內(nèi)部RAM的使用:與一般外部數(shù)據(jù)存儲器的使用基本一樣,唯一區(qū)別是事先要使IO/M#為低電平。8155各端口(包括定時器)的使用:A、B、C各端口可工作于不同的工作方式,使用前要進行初始化(寫命令字到命令口)。8155的3個I/O口,分別稱為PA、PB和PC。PA和PB是8位通用數(shù)據(jù)口,主要用于數(shù)據(jù)傳送,只有輸入/輸出兩種工作方式;PC口為6位口,既可作為數(shù)據(jù)I/O口,還可作為控制口,用于傳送控制信號和狀態(tài)信號,對PA和PB的I/O操作進行控制;PC口共具有四種工作方式:輸入方式(ALT1)輸出方式(ALT2)PA口控制端口方式(ALT3)PA和PB口控制端口方式(ALT4)I/O口的工作方式:I/O口的工作方式(續(xù)):當(dāng)以無條件方式傳送數(shù)據(jù)時,無需聯(lián)絡(luò)信號,此時,PA、PB、PC皆可進行數(shù)據(jù)的輸入/輸出;當(dāng)PA或PB以中斷方式進行數(shù)據(jù)傳送時,所需的聯(lián)絡(luò)信號由PC提供:PC2~PC0是為PA提供;PC5~PC3是為PB提供聯(lián)絡(luò)信號共有三個:INTR:中斷請求信號(輸出),高電平有效,送給C51的外中斷請求。BF:緩沖器滿信號(輸出),高電平有效。STB#:選通信號(輸入),低電平有效。數(shù)據(jù)輸入時,STB#是外設(shè)送來的選通信號;數(shù)據(jù)輸出時,STB#是外設(shè)送來的應(yīng)答信號。PC口的聯(lián)絡(luò)信號定義方式1(ALT1)方式2(ALT2)方式3(ALT3)方式4(ALT4)PC0輸入輸出A口中斷請求(AINTR)A口中斷請求(AINTR)PC1輸入輸出A口緩沖器滿(ABF)A口緩沖器滿(ABF)PC2輸入輸出A口選通(ASTB#)A口選通(ASTB#)PC3輸入輸出輸出B口中斷請求(BINTR)PC4輸入輸出輸出B口緩沖器滿(BBF)PC5輸入輸出輸出B口選通(BSTB#)8155方式4時的邏輯結(jié)構(gòu)設(shè)備數(shù)據(jù)線設(shè)備數(shù)據(jù)線至中斷請求輸入線至設(shè)備來自設(shè)備至中斷請求輸入線至設(shè)備來自設(shè)備AINTRBINTRABFBBFASTBBSTBPAPB8155PC0PC1PC2PC3PC4PC58155共有256個RAM單元;6個可編址的端口,這6個端口是:

①命令/狀態(tài)寄存器;②

PA口;③PB口;④

PC口;⑤定時器/計數(shù)器低8位;⑥定時器/計數(shù)器高8位RAM使用AD7~AD08位地址進行編址可編址端口只需使用AD2~AD0即可實現(xiàn)編址RAM地址:(當(dāng)IO/M#加低電平)

此時AD0~AD7上得到的地址值是指8155的某一RAM單元的地址,地址范圍是00H~FFH。RAM單元地址及I/O口編址8155端口地址(當(dāng)IO/M#加高電平)表8-58155的端口地址編碼AD7AD6AD5AD4AD3AD2AD1AD0對應(yīng)端口×××××000命令/狀態(tài)寄存器×××××001A口×××××010B口×××××011C口×××××100定時器/計數(shù)器低8位×××××101定時器/計數(shù)器高8位8155內(nèi)部有一個8位地址鎖存器,無需外接鎖存器;8155的許多信號與MCS-51單片機兼容,可以直接連接。表8-5列出了這些信號的對應(yīng)關(guān)系。在二者的連接中,8155的地址譯碼即片選端可以采用線選法、全譯碼等方法;IO/M#的連接可用或非門產(chǎn)生使用高位地址8155與單片機的連接8155與MSC-51的兼容信號8155MCS-518155MCS-51AD0~AD7P0口RD#RD#ALEALEWR#WR#RESETRST表8-68155與MSC-51的兼容信號IO/M#的連接圖8.15(a)或非門產(chǎn)生IO/M#信號IO/M#的連接圖8.15(b)高位地址作IO/M#信號硬件接口電路舉例圖8-16AT89S51單片機與81C55的接口電路硬件接口電路舉例表8-781C55的各端口及RAM單元地址在圖8-16中,單片機P0口輸出的低8位地址不需要另外加鎖存器(8155片內(nèi)集成有地址鎖存器),而直接與8155的AD0~AD7相連,既可作為低8位地址總線,又可作為數(shù)據(jù)總線,地址鎖存控制直接用AT89S51發(fā)出的ALE信號。81C55的CE#端接P2.7,IO/M#端與P2.0相連。當(dāng)P2.7=0時,若P2.0=0,則訪問8155的RAM單元。由此可得到圖8-17中8155的各端口以及RAM單元的地址編碼,見表8-7。定時器/計數(shù)器的計數(shù)結(jié)構(gòu)8155的定時器/計數(shù)器是一個14位的減法計數(shù)器,由兩個8位寄存器構(gòu)成,以其中的低14位組成計數(shù)器,剩下的兩個高位(M2,M1)用于定義計數(shù)器輸出的信號形式。8155的定時器/計數(shù)器D7D6D5D4D3D2D1D0T7T6T5T4T3T2T1T0D7D6D5D4D3D2D1D0M2M1T13T12T11T10T9T8輸出方式計數(shù)器高6位計數(shù)器低8位8155具有定時、計數(shù)功能,與51單片機定時器的使用類似,其不同之處為:8155的定時器/計數(shù)器是減法計數(shù)。8155的定時器/計數(shù)器則只有一種固定的工作方式,即14位計數(shù),通過軟件方法進行計數(shù)值加載。8155的定時器/計數(shù)器,由外部提供計數(shù)脈沖,信號引腳是TIMERIN。8155的定時器/計數(shù)器,計數(shù)溢出時向芯片外邊輸出一個信號(TIMEROUT)。這一信號有脈沖和方波兩種形式,供用戶進行選擇,具體由:M2、M1

兩位定義。定時器/計數(shù)器的使用8155的定時器/計數(shù)器的輸出方式命令字用于設(shè)置端口及定時器/計數(shù)器的工作方式;命令寄存器只能寫不能讀。狀態(tài)字用于寄存各端口及定時器/計數(shù)器的工作狀態(tài)狀態(tài)字只能讀不能寫8155的控制使用8155主要通過對命令字/狀態(tài)字的設(shè)置來控制8155命令字格式TM1TM2IEBIEAPC2PC1PAPAPBA口方式B口A口計數(shù)器方式00:空操作01:停止計數(shù)10:計滿后停止11:啟動計數(shù)0:輸入1:輸出0:禁止中斷1:允許中斷00011011方式1:A、B口基本I/O;C口輸入方式2:A、B口基本I/O;C口輸出方式3:A口選通I/O,B口基本I/O方式4:A、B口選通I/OB口方式C口方式8155狀態(tài)字格式A口中斷請求標(biāo)志:0:無;1:有

定時器中斷標(biāo)志:1:有定時器溢出中斷0:讀狀態(tài)字后或硬件復(fù)位后INTEBTIMERBBFINTRBINTEAINTRAABF×A口中斷允許:0:禁止;1:允許B口緩沖器:0:空;1:滿B口中斷請求標(biāo)志:0:無;1:有A口緩沖器:0:空;1:滿B口中斷允許:0:禁止;1:允許8155定時器/計數(shù)器的工作方式由命令字中的高兩位

D7D6(M2M1)進行控制。D7D6=00:不影響計數(shù)器工作。D7D6

=01:停止計數(shù)。如計數(shù)器未啟動則無操作,如計數(shù)器正運行則停止計數(shù)。D7D6

=10:達到計數(shù)值(計數(shù)器減為0)后停止。D7D6

=11:啟動。如計數(shù)器沒運行,則在裝入計數(shù)值后開始計數(shù);如計數(shù)器已運行,則在當(dāng)前計數(shù)值計滿后,再以新的計數(shù)值進行計數(shù)。任何時候都可設(shè)置計數(shù)器長度和工作方式,將控制字寫入控制寄存器。如果計數(shù)器正在計數(shù),只有在寫入啟動命令后,計數(shù)器才接收新計數(shù)長度并按新的工作方式計數(shù)。定時器/計數(shù)器的控制8155定時器/計數(shù)器的工作方式由命令字中的高兩位

D7D6(M2M1)進行控制。若寫入計數(shù)器的初值為奇數(shù),引腳的方波輸出是不對稱的。例如,初值為9時,計數(shù)器的輸出,在5個計數(shù)脈沖周期內(nèi)為高電平,4個計數(shù)脈沖周期內(nèi)為低電平,如圖8-17所示。定時器/計數(shù)器的控制圖8-17計數(shù)長度為奇數(shù)時的不對稱方波輸出(長度為9)8155定時器/計數(shù)器的工作方式由命令字中的高兩位

D7D6(M2M1)進行控制。定時器/計數(shù)器的控制注意,81C55的計數(shù)器初值不是從0開始,從2開始。這是因為,如果選擇計數(shù)器的輸出為方波形式(無論是單方波還是連續(xù)方波),則規(guī)定是從啟動計數(shù)開始,前一半計數(shù)輸出為高電平,后一半計數(shù)輸出為低電平。顯然,如果計數(shù)初值是0或1,就無法產(chǎn)生這種方波。因此81C55計數(shù)器的寫入初值范圍是3FFFH~2H。如果硬要將0或1作為初值寫入,其效果將與送入初值2的情況一樣。81C55復(fù)位后使計數(shù)器停止計數(shù)(1)初始化通常要完成兩項任務(wù):確定命令字計數(shù)初值81C55的接口軟件編程初始化舉例:【例8-3】要求使用8155定時器/計數(shù)器對計數(shù)脈沖進行千分頻,即計數(shù)1000后,TIAMEROUT端電平狀態(tài)發(fā)生變化,并重新置數(shù)以產(chǎn)生連續(xù)方波。此外假定A口為輸出方式,允許中斷;B口為輸入方式,禁止中斷;C口為對A口控制方式(ALT3)。請編寫初始化程序。8155初始化舉例(續(xù))要求輸出連續(xù)方波,所以定時器/計數(shù)器的最高兩位:M2M1=01;計數(shù)初值:1000,其16進制數(shù):03E8H,則定時器/計數(shù)器的高8位:43H,低8位:0E8H;命令字的設(shè)置如下:

計數(shù)器B口A口C口B口A口裝入后啟動禁止中斷允許中斷ALT3輸入輸出11011001因此,命令字的內(nèi)容為0D9H。8031與8155的連接如圖8155的RAM地址:7E00H~7EFFHI/O口地址:7F00H~7F05H,其中:PA:7F01H,PB:7F02H

,PC:7F03H,命令口:7F00H

定時器低位:7F04H,定時器高位:7F05H初始化程序:MOV DPTR,#7F00H ;命令/狀態(tài)寄存器地址MOV A,#0D9H ;命令字MOVX @DPTR,A ;裝入命令字MOV DPTR,#7F04H ;計數(shù)器低8位地址MOV A,#0E8H ;低8位計數(shù)值MOVX @DPTR,A ;寫入計數(shù)值低8位INC DPTR ;計數(shù)器高8位地址MOV A,#43H ;高8位計數(shù)值MOVX @DPTR,A ;寫入計數(shù)值高8位P2.7……………P2.0P0.7………………P0.0

RAM單元

0XXXXXX000000000

0號地址0000H

0XXXXXX011111111

255號00FFH8155的擴展應(yīng)用舉例【例8-4】設(shè)計一段程序把8155片內(nèi)RAM全部填滿FFH。由于是對8155片內(nèi)RAM操作,不需要初始化芯片;8155片內(nèi)RAM地址是:0000H~00FFH,其存儲單元地址映像如表8-8:表8-88155片內(nèi)RAM地址【例8-4】設(shè)計一段程序把8155片內(nèi)RAM全部填滿

FFH。MOV R7,#00H ;R7作計數(shù)器,從0開始共減

;256次再到0MOV A,#0FFH ;準(zhǔn)備送FFHMOV DPTR,#0000H ;DPTR指向第一個單元LOOP:MOVX @DPTR,A ;送數(shù)INC DPTR ;調(diào)整指針,指向下一個單元DJNZ R7,LOOP ;循環(huán)控制SJMP $程序如下:【例8-5】在單片機實驗開發(fā)裝置上實現(xiàn)變速的“8”字循環(huán)顯示。首先以“8”字顯示20ms的速度循環(huán)10次,然后變?yōu)槁?,以每個“8”字顯示0.1秒的速度循環(huán)一次,然后再變?yōu)榭焖傺h(huán),如此不斷重復(fù),試編此有關(guān)的程序。單片機實驗器和LED顯示器通過8155連接,設(shè)連接圖如圖8.15所示。已知時鐘頻率為12MHz,LED為其陽極器件,“8”的顯示代碼為80H?!纠?-5】LED顯示器通過8155連接圖圖8.188031通過8155與LED顯示器的連接電路【例8-5】分析端口地址:控制口:0000H,PA:0001H,PB:0002H,PC:0003H,定時器高位:0004H,定時器低位:0005H;8155控制字:應(yīng)規(guī)定A口為輸出(D0=l),C口為輸出方式(ALT2),(D3D2=01),不要中斷??刂谱譃椋?0000101B=05H。單片機時鐘為l2MHz,用T1作定時,設(shè)置為工作方式l,則其工作方式字為l0H;20ms的定時初值為: 216-(20×10-2)/10-2=45536=B1E0H不能直接用定時器產(chǎn)生0.1秒延時,要用軟件計數(shù)器,用20ms定時5次來獲得0.1秒。在中斷服務(wù)程序中處理“8”字的快或慢速循環(huán)顯示。利用程序狀態(tài)寄存器PSW中的用戶標(biāo)志位F0作快慢控制,令F0=0為慢速顯示,F(xiàn)0=l為快速顯示。編程如下:ORG 0000HLJMP MAINORG 00lBHLJMP TlORG l000HMAIN:MOV SP,#52HMOV A,#05H ;8155命令字MOV R0,#00H ;8155命令口地址MOVX @R0,A ;裝8155控制字MOV TMOD,#10H ;設(shè)置T1為定時模式,工作方式1MOV TH1,#0B1H ;設(shè)定時器初值高位MOV TL1,#0E0H ;設(shè)定時器初值低位MOV IE,#88H ;開中斷MOV A,#80H ;“8”字顯示代碼編程如下:(續(xù));續(xù)前INC R0 ;A口地址MOVX @R0,A ;輸出字形碼MOV

A,#01H ;LED最右一位位碼MOV

R0,#03H ;C口地址MOVX @R0,A ;位碼輸出MOV

R1,#10 ;快速循環(huán)10次MOV

R2,#5 ;慢速定時計數(shù)5次SETB

F0 ;先實現(xiàn)快速顯示SETB

TR1 ;啟動T1SJMP $編程如下:(續(xù))ORG 1500HT1:MOV TH1,#0B1H ;賦初值MOV TL1,#0E0HJNB F0,SLOW ;F0為零轉(zhuǎn)慢速JNB ACC.5,NEXT2 ;設(shè)顯示一遍,轉(zhuǎn)出MOV A,#01H ;顯示一遍,重開始DJNZ R1,NEXT3 ;不是10次,轉(zhuǎn)出CLR F0 ;已l0次,轉(zhuǎn)慢速MOV R1,#10 ;重裝R1值SJMP NEXT3SLOW:DJNZ R2,NEXT4 ;0.l秒不到,轉(zhuǎn)出JNB ACC.5,NEXT1 ;設(shè)顯示一遍,轉(zhuǎn)出編程如下:(續(xù));續(xù)前MOV A,#0lH ;顯示一遍SETB F0 ;轉(zhuǎn)為快速MOVR2,#05 ;重裝R2值NEXT1:MOV R2,#05NEXT2:RL ANEXT3:MOVX @R0,ANEXT4:RETI【例8-6】綜合功能多芯片擴展的擴展:使用多個芯片來進行綜合功能擴展,本例使用:1片8155,擴展I/O口;1片2716,外部擴展ROM(2KB);2片6116,外部擴展RAM(4KB);1片373,地址鎖存器;1片138,3:8地址譯碼器。【例8-6】綜合功能多芯片擴展的擴展:硬件連線圖圖8.19綜合功能多芯片的擴展:連接電路圖選片問題單一芯片擴展,由于端口較少,占用地址線少,常使用P2口的某一線接片選端CE#,即線選方式;多芯片擴展,端口很多,占用地址線多,常使用譯碼器芯片作片選譯碼器問題本例使用138芯片,是3:8譯碼器,它在這里的作用是輸出選片信號;輸出端Y0、Y1、Y2分別用來選擇8155、6116(1)、6116(2)問題分析:表8-9

138功能表控制引腳輸入引腳輸出引腳G1G2AG2BCBAY7Y6Y5Y4Y3Y2Y1Y01000001111111010000111111101100010111110111000111111011110010011101111100101110111111001101011111110011101111111

6116(1)的地址范圍是:0800H-0FFFH;

6116(2)的地址范圍是:1000H-17FFH圖中的8155的各端口地址分別是:

0000H、0001H、……、0005H其內(nèi)部RAM地址范圍是:

0000H--00FFH地址分配地址分析:圖中8155的CE#接138的Y0,138的G2B、G2A和CBA分別接到8031的P2.7-P2.3,所以要選中8155,即要CE=0,則必有Y0=0,由Y0=0得到必有G1=1,且G2A=G2B=0,CBA=000,即8031的P2.7-P2.3=00000時,選中8155,在此前提下,當(dāng)8031的P0口輸出地址是:

00000000~11111111;且IO/M#=0時,選中8155的RAM單元,所以其內(nèi)部RAM地址范圍是 0000H--00FFH。8031的P0口輸出地址是:XXXXX000~XXXXX101,且IO/M#=1時,選中8155的各端口,即P2.7……………P2.0P0.7……………P0.0

端口00000

00000000000(0000H)命令口00000

00000000001(0001H)PA口00000

00000000010(0002H)PB口00000

00000000011(0003H)PC口00000

00000000100(0004H)計數(shù)器低00000

00000000101(0005H)計數(shù)器高所以8155的各端口地址分別是:0000H、0001H、……、0005H8155各端口地址分析:圖中6116(1)的CE#接138的Y1#,所以要選中6116(1),則必有Y1#=0,則CBA=001,且G1=1,G2A=G2B=0,即8031的P2.7-P2.3=00001時,選中6116(1)。在此前提下,當(dāng)8031的P2.2-P2.0,P0.7-P0.0輸出地址:00000000000-11111111111時,選中6116(1)中的某一個單元。故6116(1)的地址范圍是:0000100000000000-0000111111111111即0800H-0FFFH(共2K)。同理,故6116(2)的地址范圍是:1000H-17FFH6116地址分析:8.5用51單片機的串行口擴展并行口串口的方式0用于I/O擴展。方式0為同步移位寄存器工作方式,波特率為fosc/12。數(shù)據(jù)由RXD端(P3.0)輸入,同步移位時鐘由TXD端(P3.1)輸出。用74LS165擴展并行輸入口圖8-20串口擴展兩個8位并行輸入口。74LS165是8位并行輸入串行輸出的寄存器。當(dāng)74LS165的S/L#端由高到低跳變,并行輸入端的數(shù)據(jù)被置入寄存器;當(dāng)S/L#=1,且時鐘禁止端(15腳)為低時,允許TXD(P3.1)移位時鐘輸入,在該脈沖作用下,數(shù)據(jù)由右向左方向移動。TXD與所有74LS165的CP相連;RXD與74LS165的串行輸出端QH相連;P1.0與S/L#相連,控制74LS165的串行移位或并行輸入;15腳接地,允許時鐘輸入。當(dāng)擴展多個8位輸入口時,相鄰兩芯片的首尾(QH與SIN)相連。圖8-20利用74LS165擴展并行輸入口【例8-7】從16位擴展口讀入5組數(shù)據(jù)(每組2B),把它們轉(zhuǎn)存到內(nèi)部RAM20H開始的單元。

MOV R7,#05H ;設(shè)置讀入組數(shù) MOVR0,#20H ;設(shè)置內(nèi)部RAM數(shù)據(jù)區(qū)首址START: CLRP1.0 ;并行置入數(shù)據(jù),S/=0 SETBP1.0 ;允許串行移位,S/=1 MOVR2,#02H ;設(shè)每組字節(jié)數(shù),即74LS165的個數(shù)RXDATA: MOVSCON,#10H ;設(shè)置串口方式0,允許接收,啟動接收過程WAIT: JNB

RI,WAIT ;未接收完一幀,循環(huán)等待

CLRRI

;RI標(biāo)志清“0”,準(zhǔn)備下次接收

MOVA,SBUF ;讀入數(shù)據(jù)

MOV@R0,A ;送至RAM緩沖區(qū)

INCR0

;指向下一個地址

DJNZR2,RXDATA ;未讀完一組數(shù)據(jù),繼續(xù)

DJNZR7,START ;5組數(shù)據(jù)未讀完重新并行置入

………… ;對數(shù)據(jù)進行處理串行接收過程采用查詢等待的方式,如必要,可改中斷方式。用74LS164擴展并行輸出口圖8-21為串口外接兩片74LS164(8位串入并出移位寄存器)擴展兩個8位并行輸出口的接口電路。圖8-21利用74LS164擴展并行輸出口用74LS164擴展并行輸出口圖8-21為串口外接兩片74LS164(8位串入并出移位寄存器)擴展兩個8位并行輸出口的接口電路。當(dāng)串口工作在方式0的發(fā)送,串行數(shù)據(jù)由P3.0(RXD)送出,移位時鐘由P3.1(TXD)送出。注意,由于74LS164無并行輸出控制端,在串行輸入中,其輸出端的狀態(tài)會不斷變化,故某些場合,在74LS164輸出端應(yīng)加接輸出三態(tài)門控制,以便保證串行輸入結(jié)束后再輸出數(shù)據(jù)。圖8-21利用74LS164擴展并行輸出口【例8-8】將內(nèi)部RAM單元30H、31H的內(nèi)容經(jīng)串行口由74LS164并行輸出的子程序。START: MOV R7,#02H ;設(shè)置要發(fā)送的字節(jié)個數(shù) MOV R0,#30H ;設(shè)置地址指針 MOV SCON,#00H ;設(shè)置串行口為方式0SEND: MOV A,@R0

MOV SBUF,A

;啟動串行口發(fā)送過程WAIT: JNB TI,WAIT ;一幀未發(fā)完,等待

CLR TI

INC R0

;取下一個數(shù)

DJNZ R7,SEND

;未發(fā)完,繼續(xù),從子程序返回

RET9.6用I/O口控制的聲音報警接口當(dāng)單片機測控系統(tǒng)發(fā)生故障或處于某種緊急狀態(tài)時,單片機系統(tǒng)應(yīng)能發(fā)出提醒人們警覺的聲音報警。用I/O口很容易實現(xiàn)該功能。919.6.1蜂鳴音報警接口購買市售的壓電式蜂鳴器,用一根I/O口線驅(qū)動蜂鳴器發(fā)聲。約需10mA的驅(qū)動電流,可用7406或7407低電平驅(qū)動,如圖9-23所示,也可以用一個晶體管驅(qū)動,如圖9-24所示。

圖9-23

通過74LS06來驅(qū)動蜂鳴器的報警電路91

圖9-24

使用三極管驅(qū)動的蜂鳴器報警電路在圖9-23中,P1.7接驅(qū)動器的輸入端。當(dāng)輸出高電平時,7406的輸出為低電平,使壓電蜂鳴器兩加上近5V的直流電壓,由壓電效應(yīng)而發(fā)出蜂鳴音。當(dāng)P1.7端輸出低電平,7406的輸出端高約+5V,壓電蜂鳴器的兩引線間的直流電壓降至接近于0V,發(fā)音停止。在圖9-24,當(dāng)P1.7輸出高電平時,晶體管導(dǎo)通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當(dāng)P1.7輸出低電平,三極管截止,蜂鳴器停止發(fā)聲。下面是連續(xù)蜂鳴100ms程序,兩個接口電路都適用。SOUND:SETBP1.7 ;P1.7輸出高電平,蜂鳴器開始鳴叫 MOVR4,#64H ;延時100msLOOP: MOVR3,#0F9HLOOP1:DJNZR3,LOOP1 ;延時1ms的循環(huán) DJNZR4,LOOP CLRP1.7 ;P1.7輸出低電平,蜂鳴器停止鳴叫 RET94如果想要發(fā)出更大的聲音,可采用功率大的揚聲器,采用相應(yīng)的功率驅(qū)動電路。9.6.2音樂報警接口音樂報警電路克服了蜂鳴音報警音調(diào)比較單調(diào)的不足。發(fā)聲電路可購買市售的樂曲發(fā)生器,發(fā)出的樂曲聲可用來作為某種提示信號或報警信號。設(shè)計者可根據(jù)自己對的喜好來購買。音樂報警接口由兩部分組成:(1)樂曲發(fā)生器,即集成電子音樂芯片;(2)放大電路,也可采用集成放大器。94音樂報警接口如圖9-25所示,圖中采用華爾茲樂曲的電子音樂芯片7920A。當(dāng)從P1.7輸出高電平時,輸出端Vout便發(fā)出樂曲信號,經(jīng)M51182L放大而驅(qū)動揚聲器發(fā)出樂曲報警聲,音量大小由10kΩ電位器調(diào)整。若P1.7輸出低電平,則7920A因MT輸入電位變低而關(guān)閉,故揚聲器停止奏曲。參考程序:START:SETBP1.7;P1.7為高電平,發(fā)出音樂報警樂曲 RETSTOP:

CLRP1.7;P1.7為低電平,音樂報警樂曲停止 RET圖9-25

音樂報警接口電路8.5單片機鍵盤接口技術(shù)單片機使用的鍵盤可分為獨立式和矩陣式獨立式:結(jié)構(gòu):一組相互獨立的鍵盤,每個鍵盤都與單片機的I/O口的一條口線連接,相互獨立。原理:當(dāng)任何一個鍵被按下時,與其相連的輸入線被置成“0”,平時該線為“1”。特點:接口簡單,但若鍵較多,將占用許多I/O線。8.51鍵盤的工作原理圖8.17獨立式鍵盤結(jié)構(gòu)鍵處理程序ORG2000HSTART:MOV A,#0FFH ;先置P1口為“1”MOV P1,AMOV A,P1 ;輸入鍵狀態(tài)JNB ACC.0,P0F ;查詢0號鍵JNB ACC.1,P1F ;查詢1號鍵JNB ACC.2,P2F ;查詢2號鍵JNB ACC.3,P3F ;查詢3號鍵JNB ACC.4,P4F ;查詢4號鍵JNB ACC.5,P5F ;查詢5號鍵JNB ACC.6,P6F ;查詢6號鍵JNB ACC.7,P7F ;查詢7號鍵LJMP START鍵盤掃描鍵處理程序(續(xù))P0F: LJMP PROM0 ;入口地址表P1F: LJMP PROM1

……

P6F: LJMP PROM6P7F: LJMP PROM7PROM0: ……

;0號鍵功能程序

…… LJMP START ;0號鍵處理完返回鍵盤掃描

……

PROM7: ……

;7號鍵功能程序

…… LJMP START ;7號鍵處理完返回鍵盤掃描矩陣式(行列式):結(jié)構(gòu):鍵的數(shù)目多,將鍵按行列排成矩陣形式。矩陣式鍵盤由行線和列線組成,按鍵位于行、列線的交叉點上。特點:節(jié)省I/O口線按鍵識別原理及過程:先判斷有無鍵按下列線輸出0000,然后輸入行線狀態(tài),若沒有鍵按下,則行線狀態(tài)為全1(1111);若有任一鍵按下,則行線狀態(tài)不為全(1111);按鍵識別過程:再確認(rèn)哪個鍵被按下列線逐行輸出0(如1110),然后輸入行線狀態(tài),若沒有鍵按下,則行線狀態(tài)為全1(1111);若有任一鍵按下,則行線狀態(tài)不為全為1(如0111,說明右上角那個鍵被按下)確定每個鍵的鍵值正邏輯表示----行列線數(shù)據(jù)直接組合,上例中的各鍵值分別為:77H

7BH 7DH 7EH B7H BBH BDH

BEH D7H

DBH

DDH

DEH E7H

EBH

EDH

EEH按鍵識別過程:確定每個鍵的鍵值負(fù)邏輯表示----行列線數(shù)據(jù)求反組合,上例中的各鍵值分別為:88H

84H 82H 81H 48H 44H 42H

41H 28H

24H

22H

21H 18H

14H

12H

11H圖8.18矩陣式鍵盤結(jié)構(gòu)鍵盤接口完成的主要功能:鍵盤掃描:判斷是否有鍵按下;鍵識別:確定閉合鍵的行列位置;產(chǎn)生閉合鍵鍵碼;排除多鍵、串鍵(復(fù)按)及去抖動。鍵的識別和鍵功能實現(xiàn)鍵的識別由接口電路完成,即鍵盤接口問題;鍵的功能實現(xiàn)由中斷程序完成。MCS-51單片機實現(xiàn)鍵盤接口的方法和接口芯片使用單片機本身的并行口;使用單片機本身的串行口;使用通用接口芯片(8255、8155等);使用專用接口芯片82798.5.2單片機鍵盤接口和鍵功能的實現(xiàn)鍵盤接口需要完成幾項任務(wù):判定有沒有鍵被按下

例如矩陣式鍵盤:先經(jīng)輸出口向所有列線輸出低電平,然后再輸入各行線狀態(tài);若行線狀態(tài)皆為高電平,則表明無鍵按下;若行線狀態(tài)中有低電平,則表明有鍵被按下鍵盤接口的處理鍵盤接口需要完成的任務(wù)(續(xù)):再判定被按鍵的位置。先經(jīng)輸出口使一條列線輸出低電平,然后再輸入各行線狀態(tài)。因為在鍵盤矩陣中有鍵被按下時,被按鍵處的行線和列線被接通,使穿過閉合鍵的那條行線變?yōu)榈碗娖?。通過逐行掃描探知了按鍵所在的行和列,確定了按鍵位置;圖8.19掃描法識別按鍵圖示去抖動當(dāng)掃描表明有鍵被按下之后,緊接著應(yīng)進行去抖動處理;去抖動有硬件和軟件兩種方法。硬件方法就是在鍵盤中附加去抖動電路。軟件方法則是采用時間延遲以躲過抖動。圖8.20鍵閉合和斷開時的電壓抖動抖動時間<10ms開關(guān)動作時間>100ms“1”“0”<10ms鍵碼計算例如圖821所示的鍵號是按從左到右、從上向下的順序編排的。鍵碼=行首號+列號圖8.21鍵碼圖等待健釋放是為了保證鍵的一次閉合僅進行一次處理等待鍵釋放鍵盤接口的控制方式在單片機的運行過程中,何時執(zhí)行鍵盤掃描和處理,可有以下3種情況:隨機方式:每當(dāng)CPU空閑時執(zhí)行鍵盤掃描程序。中斷方式:每當(dāng)有健閉合時才向CPU發(fā)出中斷請求,中斷響應(yīng)后執(zhí)行健盤掃描程序。定時方式:每隔一定時間執(zhí)行一次鍵盤掃描程序,定時可由單片機的定時器完成。鍵處理子程序在計算機中每一個鍵都對應(yīng)一個處理子程序,得到閉合鍵的鍵碼后,轉(zhuǎn)相應(yīng)的健處理子程序,實現(xiàn)該鍵所設(shè)定的功能。8.5.3使用8155作為鍵盤接口接口電路邏輯圖8155擴展I/O口組成的行列式鍵盤8155PA口地址7F01HPC口地址7F03H判斷有無鍵按下PA口輸出00H,PC口輸入行狀態(tài)信號;若PC3~PC0≠1111,有鍵按下

去抖動延時5~10ms后再判斷有無鍵按下確認(rèn)哪個鍵被按下及其鍵號8155的PA口依次輸出下列掃描字:鍵掃描及識別過程8155:PA口輸出列掃描信號,PC口輸入行狀態(tài)信號PA7PA6PA5PA4PA3PA2PA1PA011111110FEH11111101FDH……011111117FH,則每個鍵的鍵值(列行組合)FE╳E、FD╳E、FB╳E、F7╳E、EF╳E、DE╳E、BF╳E、7F╳EFE╳D、FD╳D、FB╳D、F7╳D、EF╳D、DE╳D、BF╳D、7F╳DFE╳B、FD╳B、FB╳B、F7╳B、EF╳B、DE╳B、BF╳B、7F╳BFE╳7、FD╳7、FB╳7、F7╳7、EF╳7、DE╳7、BF╳7、7F╳7每個鍵的鍵號(自己安排)N=行首鍵號+列號確認(rèn)哪個鍵被按下及其鍵號(續(xù))8155的PC口輸入行狀態(tài)可能為下列之一:PC5PC4PC3PC2PC1PC0××1110×EH××1101×DH××1010×BH××0111×7H等待鍵釋放后再進行進一步處理。鍵掃描程序框圖入口有鍵按下?延時12ms有鍵按下?①①NYNY鍵號入棧保存按鍵抬起?NY鍵號送A返回判斷按鍵是否抬起(以防止重復(fù)進行鍵處理)

鍵掃描程序ORG 1000HKEY1:ACALL KS1 ;調(diào)用判斷有無鍵按下子程序JNZ LK1 ;有鍵按下,轉(zhuǎn)去抖動AJMP KEY1 ;無鍵按下,返回LK1:ACALL TM12S ;延時12msACALL KS1 ;再查有無鍵按下JNZ LK2 ;確實有鍵按下,逐行掃描,確定具體鍵AJMP KEY1 ;無鍵按下,返回LK2:MOV R2,#0FEH ;首列掃描字送R2MOV R4,#00H ;首列號R4LK4:MOV DPTR,#7F01H ;首列掃描字送8155的PA口MOV A,R2 ;第一列掃描MOVX @DPTR,A ;使第i列為0(R2中Di位為0)鍵掃描程序(續(xù))INC DPTRINC DPTR ;指向8155的PC口MOVX A,@DPTR ;讀入行狀態(tài)JB ACC.0,LONE ;0行無鍵按下,轉(zhuǎn)查1行MOV A,#00H ;0行有鍵按下,行首鍵號#00H送AAJMP LKP ;求鍵號LONE:JB ACC.1,LTWO ;1行無鍵按下,轉(zhuǎn)查2行MOV A,#08H ;1行有鍵按下,行首鍵號#08H送AAJMP LKP ;求鍵號LTWO:JB ACC.2,LTHR ;2行無鍵按下,轉(zhuǎn)查3行MOV A,#10H ;2行有鍵按下,行首鍵號#10H送AAJMP LKP ;求鍵號LTHR:JB ACC.3,NEXT ;3行無鍵按下,轉(zhuǎn)查下一列MOV A,#18H ;3行有鍵按下,行首鍵號#18H送A鍵掃描程序(續(xù))LKP:ADD A,R4 ;求鍵號=行首鍵號+列號PUSH ACC ;鍵號入棧LK3:ACALL KS1 ;等待鍵釋放JNZ LK3 ;未釋放,繼續(xù)等待POP ACC ;已釋放,鍵號送ARETNEXT:INC R4 ;指向下一列,列號加1MOV A,R2 ;判斷8列掃描完沒有JNB ACC.7,KND ;8列掃描完,返回RL A ;沒掃描完,置下一列掃描字MOV R2,A ;掃描字送AAJMP LK4 ;繼續(xù)下列掃描KND:AJMP KEY1 ;8列掃描完,返回鍵掃描程序(續(xù))KS1:MOV DPTR,#7F01H ;查有無鍵按下子程序MOV A,#00HMOVX @DPTR,A ;8155PA口輸出全掃描字#00HINC DPTRINC DPTR ;指向8155的PC口MOVX A,@DPTR ;讀入行狀態(tài),若有鍵按下,則A≠0FFHCPL A ;改成正邏輯,若有鍵按下,則A≠00HANL A,#0FH ;屏蔽高四位RET ;子程序返回,當(dāng)有鍵按下時,AA≠00HT12sm:MOV R7,#18H ;12sm延時子程序TM:MOV R6,#0FFHTM6:DJNZ R6,TM6 ;td=[1+(1+255*2+2)*24+2]*MCDJNZ R7,TMRET鍵操作及功能處理求出鍵號后要進行鍵處理:先判斷是何種鍵,然后:對數(shù)字鍵----送顯示緩沖區(qū)顯示;對功能鍵----執(zhí)行相應(yīng)的功能鍵處理程序。設(shè):0~15號鍵為數(shù)字鍵,即鍵號<10H的是數(shù)字鍵;16~31號鍵為功能鍵,即鍵號≥10H的是功能鍵;其功能鍵處理程序入口地址分別為:AAA、BBB、CCC、……PPP。鍵操作及功能處理(續(xù))ORG 8000HKEYADR:MOV A,BUFF ;鍵號送ACLR CSUBB A,#10H ;Y與10H比較JC DIGPRO ;<10H,數(shù)字鍵,轉(zhuǎn)KEYTBL:MOVDPTR,#JMPTBLRL A ;使鍵值為0、2、4、6、…偶數(shù)AJMP @A+DPTR則轉(zhuǎn)入功能鍵處理程序清單如下:鍵操作及功能處理(續(xù))JMPTBL:AJMP AAA ;2字節(jié)指令散轉(zhuǎn)到16個功能鍵處理AJMP BBB ;程序入口AJMP CCCAJMP DDDAJMP EEEAJMP FFFAJMP GGGAJMP HHHAJMP IIIAJMP JJJAJMP KKKAJMP LLLAJMP MMMAJMP NNNAJMP OOOAJMP PPP8.5.4可編程鍵盤/顯示器接口芯片82798279是一種專用于鍵盤/顯示器的可編程接口電路,能對鍵盤自動掃描,給出閉合鍵的鍵碼,能自動向數(shù)碼管顯示器輸出顯示代碼和位代碼。其中鍵盤接口電路可與64鍵點陣式鍵盤聯(lián)接,具有二鍵封鎖或N鍵巡回功能,可自動消除按鍵抖動。顯示器接口電路可與8位或16位數(shù)碼管顯示器聯(lián)接。8279內(nèi)部結(jié)構(gòu)電路邏輯分為三個部分:(1)芯片接口控制邏輯數(shù)據(jù)緩沖器I/O控制電路(2)鍵盤接口控制邏輯掃描計數(shù)器掃描回送電路鍵盤去抖動與控制電路8×8FIFO/傳感器RAM與狀態(tài)電路控制與時序寄存器及時序控制電路1.8279內(nèi)部結(jié)構(gòu)(3)顯示器接口控制邏輯16×8顯示用RAM顯示寄存器顯示地址寄存器8279內(nèi)部結(jié)構(gòu)8279內(nèi)部結(jié)構(gòu)I/O控制FIFO/傳感器RAM狀態(tài)SL3-0RL7-0控制/選通移位時序與控制掃描計數(shù)器回送48數(shù)據(jù)緩沖器RDW/RCSA0DB7-DB0CLKRESETIRQ顯示寄存器OUTA3-0OUTB3-08控制與時序寄存器顯示地址寄存器16×8顯示RAM8×8FIFO/傳感器RAM鍵盤去抖動與控制BD8279內(nèi)部結(jié)構(gòu)圖讀狀態(tài)字1010讀FIFORAM或顯示RAM0010寫命令字1100寫顯示RAM0100操作A0RDWRCS控制與定時寄存器:寄存鍵盤及顯示器工作方式,完成控制功能

定時控制:包括基本的計數(shù)器是可編程N計數(shù)器,N由編程指定(2~31),對CLK分頻,獲得內(nèi)部所需100kHz工作時鐘;其他再分頻,為鍵盤及顯示器掃描提供掃描時鐘4位的計數(shù)器,有譯碼、編碼兩種方式,由編程設(shè)定譯碼方式:最低兩位經(jīng)譯碼,由SL0~3輸出,作為鍵盤及顯示器的掃描信號.(任何時刻,SL0~3只有一個信號有效,實現(xiàn)4選1)編碼方式:計數(shù)器的狀態(tài)由SL0~3直接輸出,再經(jīng)外部譯碼,才能作為掃描信號.(實現(xiàn)16選1)(1)芯片接口控制邏輯

實現(xiàn)8279和單片機接口,主要包括:數(shù)據(jù)緩沖器雙向、三態(tài)的數(shù)據(jù)緩沖器用于芯片內(nèi)部總線和系統(tǒng)總線的連接,進行單片機和8279之間的數(shù)據(jù)傳送,信號引腳為DBO~DB7。I/O控制電路I/O控制電路用于接收單片機方面送來的控制信號,并產(chǎn)生所需的8279內(nèi)部控制信號,例如控制數(shù)據(jù)緩沖器的數(shù)據(jù)輸入/輸出等。中斷請求產(chǎn)生電路根據(jù)鍵盤存儲區(qū)的狀態(tài)產(chǎn)生中斷請求信號。(2)鍵盤接口控制邏輯掃描計數(shù)器掃描計數(shù)器電路用于為鍵盤提供掃描信號,4位掃描信號從掃描線SL3~SL0輸出,并具有兩種輸出形式①譯碼方式(也稱內(nèi)部譯碼形式)指掃描代碼直接由掃描線SL0~SL3輸出,每次只有1位是低電平(4選1);②編碼方式(也稱外部譯碼形式)指掃描代碼經(jīng)SL0~SL3外接譯碼器輸出掃描輸出波形(2)鍵盤接口控制邏輯(續(xù))控制與時序寄存器及時序控制電路用于對鍵盤掃描進行控制。時序控制部件包括基本定時計數(shù)器,其中第一個N計數(shù)器是一個N預(yù)分頻定標(biāo)器,可通過編程使內(nèi)部時序與CPU相適應(yīng)。預(yù)分頻定標(biāo)器的分頻系數(shù)可由程序設(shè)定為2~31。使內(nèi)部計數(shù)頻率為100KHz時,給出5.1mS的鍵盤掃描時間和10.3mS的去抖動時間。其它計數(shù)器將此基本計數(shù)頻率再分頻,以提供適當(dāng)?shù)逆I掃描、行掃描、鍵盤矩陣掃描及顯示器掃描時間。(2)鍵盤接口控制邏輯(續(xù))回送緩沖器與鍵盤去抖動和控制電路輸入每次掃描的列線RL0~RL7狀態(tài),以進行閉合鍵的搜索?;厮途彌_器具有鎖存功能,可對8條回送線RL7~RL0上的信息進行緩沖和鎖存。在鍵盤工作方式下,對回送線逐條掃描,以確定該行中哪一個鍵閉合。當(dāng)去抖動電路測得某一按鍵閉合后,等待10mS,然后再重新檢查該鍵是否閉合,如果仍然閉合,那么該鍵在陣列中的地址及SHIFT和CNTL的狀態(tài)被送入先進先出寄存器FIFO。在掃描傳感器矩陣方式下,每次掃描按鍵時直接把回送線上的內(nèi)容送入傳感器RAM的相應(yīng)單元中去。在選通輸入方式下,回送線的狀態(tài)將在控制/選通線上的脈沖上升沿送入先進先出寄存器。(2)鍵盤接口控制邏輯(續(xù))FIFO/傳感器RAM與狀態(tài)電路FIFO/傳感器RAM是一個雙功能8×8RAM,在鍵盤或選通輸入方式下是一個先進先出寄存器(FIFO);信息輸入時,每一組信息寫入RAM中的下一單元,然后按寫入順序讀出;FIFO狀態(tài)電路存放FIFO中的字符數(shù)目以及FIFO滿或空的狀態(tài);FIFO寫入或讀出次數(shù)超過FIFO的容量時,視為出錯;在掃描傳感器矩陣方式下,該存儲器用作傳感器RAM;當(dāng)檢測到一個傳感器狀態(tài)發(fā)生變化時,IRQ變?yōu)楦唠娖?,向CPU發(fā)中斷請求。(3)顯示器接口控制邏輯顯示存儲區(qū)8279可連接8位和16位的LED顯示器;為給每位顯示器提供顯示數(shù)據(jù),在8279芯片中有一個16×8的RAM存儲區(qū),其中每一個8位RAM單元對應(yīng)一位LED顯示器,即0到15地址對應(yīng)LED顯示器的0~15位,顯示器的0位在最左邊,15位在最右邊。顯示緩沖器(顯示更新寄存器)用于為顯示器提供段控數(shù)據(jù);使用時,8279自動對顯示器掃描,將顯示緩沖器中的數(shù)據(jù)輸出在顯示器上顯示出來。顯示器地址寄存器及顯示用RAM顯示器地址寄存器用來存放CPU正在讀/寫的字節(jié)地址,以及正在顯示的兩個4位的半字節(jié)地址。讀/寫地址由編程設(shè)定,也可設(shè)定每次讀/寫后地址自動加1。在設(shè)定適當(dāng)?shù)墓ぷ鞣绞胶偷刂芬院螅珻PU可直接讀出顯示用RAM中的內(nèi)容。A、B兩個半字節(jié)地址由8279自動刷新,以便與CPU輸出值相對應(yīng)。A、B兩半字節(jié)可以分別輸出,也可作為一個字節(jié)輸出,由工作方式確定。數(shù)據(jù)送顯示器的方式可設(shè)定為左端送入,也可以設(shè)定為右端輸入。8279的信號引腳8279共有40個引腳,采用雙列直插式封裝圖8279引腳與邏輯符號圖1 402 393 384 375 366 357 348 339 3210 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 218279RL2RL3CLKIRQRL4RL5RL6RL7RESETRDWRDB0DB1DB2DB3DB4DB5DB6DB7VSSVCCRL1RL0CNTL/STBSHIFTSL3SL2SL1SL0OUTB0OUTB1OUTB2OUTB3OUTA0OUTA1OUTA2OUTA3BDCSA0(a)引腳圖CPU接口444鍵數(shù)據(jù)掃描顯示數(shù)據(jù)(b)符號圖VSSWRIRQBUSA0RESETCLKRDCSBD

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論