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

下載本文檔

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

文檔簡(jiǎn)介

第8章單片機(jī)的I/O擴(kuò)展本章內(nèi)容系統(tǒng)擴(kuò)展的含義I/O口的擴(kuò)展利用I/O接口芯片:82C51、81C51的I/O口擴(kuò)展8.1單片機(jī)的系統(tǒng)擴(kuò)展系統(tǒng)擴(kuò)展的含義在單片機(jī)芯片外加相應(yīng)的芯片、電路,使得有關(guān)功能得以擴(kuò)充,我們稱為系統(tǒng)擴(kuò)展。系統(tǒng)擴(kuò)展包括:外部存儲(chǔ)器擴(kuò)展,I/O接口擴(kuò)展,總線擴(kuò)展等系統(tǒng)擴(kuò)展分類單一功能的擴(kuò)展綜合功能的擴(kuò)展8.2I/O擴(kuò)展概述單片機(jī)本身接口功能有限單片機(jī)控制應(yīng)用中的復(fù)雜接口要求擴(kuò)展I/O接口電路的功能:速度協(xié)調(diào)輸出數(shù)據(jù)鎖存輸入數(shù)據(jù)三態(tài)緩沖數(shù)據(jù)轉(zhuǎn)換為什么要擴(kuò)展I/O口常用編址方法有:獨(dú)立編址和統(tǒng)一編址。MCS-51單片機(jī)采用與外部RAM統(tǒng)一編址方法,即每一個(gè)擴(kuò)展的I/O口相當(dāng)于一個(gè)擴(kuò)展的RAM單元;訪問外部I/O口的指令同訪問外部數(shù)據(jù)存儲(chǔ)器指令。擴(kuò)展I/O接口編址方法例如:MOVX @DPTR,A MOVX A,@DPTRMOVX @RI,AMOVX A,@RI;其中,DPTR、RI中裝I/O對(duì)應(yīng)的地址(1)無(wú)條件傳送方式無(wú)條件傳送也稱為同步程序傳送。只有那些能一直為數(shù)據(jù)I/O傳送作好準(zhǔn)備的設(shè)備,才能使用無(wú)條件傳送方式。因?yàn)樵谶M(jìn)行I/O操作時(shí),不測(cè)試設(shè)備的狀態(tài),可以根據(jù)需要隨時(shí)進(jìn)行數(shù)據(jù)傳送操作。該方式適用于兩類設(shè)備的數(shù)據(jù)輸入/輸出:具有常駐的數(shù)據(jù)信號(hào)變化緩慢的數(shù)據(jù)信號(hào)的設(shè)備。單片機(jī)I/O控制方式在I/O操作之前,要先檢瀏設(shè)備的狀態(tài),以了解設(shè)備是否已為數(shù)據(jù)I/O作好了準(zhǔn)備;只有在確認(rèn)設(shè)備已“準(zhǔn)備好”的情況下,單片機(jī)才能執(zhí)行數(shù)據(jù)I/O操作為了實(shí)現(xiàn)查詢方式的數(shù)據(jù)傳送,需要由接口電路提供設(shè)備狀態(tài),并以軟件方法進(jìn)行狀態(tài)測(cè)試。因此這是一種軟硬件方法結(jié)合的數(shù)據(jù)傳送方式。程序查詢方式,電路簡(jiǎn)單,查詢軟件也不復(fù)雜,而且通用性強(qiáng)。(2)查詢方式(有條件傳送方式)中斷方式又稱程序中斷方式、它與查詢方式的主要區(qū)別在于知何知道設(shè)備是否為數(shù)據(jù)傳送作好了準(zhǔn)備,查詢方式是單片機(jī)的主動(dòng)形式,而中斷方式則是單片機(jī)等待通知(中斷請(qǐng)求)的被動(dòng)形式。采用中斷方式進(jìn)行數(shù)據(jù)傳送時(shí),當(dāng)設(shè)備為數(shù)據(jù)傳送作好準(zhǔn)備之后,就向單片機(jī)發(fā)出中斷請(qǐng)求;單片機(jī)接收到中斷請(qǐng)求之后,即作出響應(yīng),暫停正在執(zhí)行的原程序,而轉(zhuǎn)去為設(shè)備的數(shù)據(jù)輸入/輸出服務(wù)待服務(wù)完成之后,程序返回,單片機(jī)再繼續(xù)執(zhí)行被中斷的原程序。(3)中斷方式并行口擴(kuò)展的分類利用鎖存器、緩沖器進(jìn)行并行口簡(jiǎn)單擴(kuò)展用可編程并行接口芯片進(jìn)行擴(kuò)展I/O接口擴(kuò)展常用芯片8.3簡(jiǎn)單I/O口擴(kuò)展8.3.1簡(jiǎn)單接口常用鎖存器、緩沖器芯片I/O口的簡(jiǎn)單擴(kuò)展輸出口----利用鎖存器擴(kuò)展輸入口----利用緩沖器擴(kuò)展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ū)動(dòng)器/線接收器(3S,兩組控制)內(nèi)部結(jié)構(gòu)邏輯圖:(3)74LS244(續(xù))引出端符號(hào):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簡(jiǎn)單I/O口擴(kuò)展簡(jiǎn)單輸入口擴(kuò)展圖8.574LS244擴(kuò)展輸入接口電路簡(jiǎn)單輸出口擴(kuò)展圖8.674LS377擴(kuò)展輸出接口電路簡(jiǎn)單并行口擴(kuò)展應(yīng)用舉例圖8.774LS系列擴(kuò)展輸入/輸出接口電路8.4可編程并行接口芯片的擴(kuò)展8.4.1利用可編程并行接口芯片8255的I/O擴(kuò)展常用的外圍I/O接口芯片:82C55:可編程通用并行接口(3個(gè)8位I/O口)。81C55:可編程的IO/RAM擴(kuò)展接口電路(2個(gè)8位I/O口,1個(gè)6位I/O口,256RAM單元,1個(gè)14位的減法計(jì)數(shù)器)。都可以和AT89S51直接連接,接口邏輯簡(jiǎn)單。8255的結(jié)構(gòu)圖8.88255的內(nèi)部結(jié)構(gòu)框圖8255的擴(kuò)展邏輯電路MCS-51單片機(jī)可以和8255直接連接,圖8.9給出了一種擴(kuò)展電路。圖8.98255的擴(kuò)展邏輯電路圖8255并口擴(kuò)展舉例【例8-1】8255與8031連接如圖8.10所示,要求:試確定8255A的端口地址欲使A口:方式0,輸出口;B口:方式1,輸入口;上C口:方式0,輸入口。編寫初始化程序欲使8051內(nèi)部RAM30H的內(nèi)容從PA口輸出,試編程。欲使PC3向外輸出一個(gè)正脈沖信號(hào),試編程。

/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è)單片機(jī)通過8255來(lái)控制一順序控制過程,該系統(tǒng)連接如圖8.11,A口輸出6路順序控制信號(hào),以指示燈指示,6道工序,每道工序時(shí)間為10秒。PC0輸入啟動(dòng)信號(hào),PC7輸入停止信號(hào),分別與SA1和SA2相連。試編寫此應(yīng)用程序。圖8.118255A的應(yīng)用舉例(2)端口的工作方式為方式0,A口為輸出口,C口為輸入口,

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

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

PA口;③PB口;④

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

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

兩位定義。定時(shí)器/計(jì)數(shù)器的使用8155的定時(shí)器/計(jì)數(shù)器的輸出方式命令字用于設(shè)置端口及定時(shí)器/計(jì)數(shù)器的工作方式;命令寄存器只能寫不能讀。狀態(tài)字用于寄存各端口及定時(shí)器/計(jì)數(shù)器的工作狀態(tài)狀態(tài)字只能讀不能寫8155的控制使用8155主要通過對(duì)命令字/狀態(tài)字的設(shè)置來(lái)控制8155命令字格式TM1TM2IEBIEAPC2PC1PAPAPBA口方式B口A口計(jì)數(shù)器方式00:空操作01:停止計(jì)數(shù)10:計(jì)滿后停止11:?jiǎn)?dòng)計(jì)數(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口中斷請(qǐng)求標(biāo)志:0:無(wú);1:有

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

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

=01:停止計(jì)數(shù)。如計(jì)數(shù)器未啟動(dòng)則無(wú)操作,如計(jì)數(shù)器正運(yùn)行則停止計(jì)數(shù)。D7D6

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

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

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

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

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

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

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

RAM單元

0XXXXXX000000000

0號(hào)地址0000H

0XXXXXX011111111

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

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

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

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

TR1 ;啟動(dòng)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)慢速M(fèi)OV 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)為快速M(fèi)OVR2,#05 ;重裝R2值NEXT1:MOV R2,#05NEXT2:RL ANEXT3:MOVX @R0,ANEXT4:RETI【例8-6】綜合功能多芯片擴(kuò)展的擴(kuò)展:使用多個(gè)芯片來(lái)進(jìn)行綜合功能擴(kuò)展,本例使用:1片8155,擴(kuò)展I/O口;1片2716,外部擴(kuò)展ROM(2KB);2片6116,外部擴(kuò)展RAM(4KB);1片373,地址鎖存器;1片138,3:8地址譯碼器?!纠?-6】綜合功能多芯片擴(kuò)展的擴(kuò)展:硬件連線圖圖8.19綜合功能多芯片的擴(kuò)展:連接電路圖選片問題單一芯片擴(kuò)展,由于端口較少,占用地址線少,常使用P2口的某一線接片選端CE#,即線選方式;多芯片擴(kuò)展,端口很多,占用地址線多,常使用譯碼器芯片作片選譯碼器問題本例使用138芯片,是3:8譯碼器,它在這里的作用是輸出選片信號(hào);輸出端Y0、Y1、Y2分別用來(lái)選擇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時(shí),選中8155,在此前提下,當(dāng)8031的P0口輸出地址是:

00000000~11111111;且IO/M#=0時(shí),選中8155的RAM單元,所以其內(nèi)部RAM地址范圍是 0000H--00FFH。8031的P0口輸出地址是:XXXXX000~XXXXX101,且IO/M#=1時(shí),選中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)計(jì)數(shù)器低00000

00000000101(0005H)計(jì)數(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時(shí),選中6116(1)。在此前提下,當(dāng)8031的P2.2-P2.0,P0.7-P0.0輸出地址:00000000000-11111111111時(shí),選中6116(1)中的某一個(gè)單元。故6116(1)的地址范圍是:0000100000000000-0000111111111111即0800H-0FFFH(共2K)。同理,故6116(2)的地址范圍是:1000H-17FFH6116地址分析:8.5用51單片機(jī)的串行口擴(kuò)展并行口串口的方式0用于I/O擴(kuò)展。方式0為同步移位寄存器工作方式,波特率為fosc/12。數(shù)據(jù)由RXD端(P3.0)輸入,同步移位時(shí)鐘由TXD端(P3.1)輸出。用74LS165擴(kuò)展并行輸入口圖8-20串口擴(kuò)展兩個(gè)8位并行輸入口。74LS165是8位并行輸入串行輸出的寄存器。當(dāng)74LS165的S/L#端由高到低跳變,并行輸入端的數(shù)據(jù)被置入寄存器;當(dāng)S/L#=1,且時(shí)鐘禁止端(15腳)為低時(shí),允許TXD(P3.1)移位時(shí)鐘輸入,在該脈沖作用下,數(shù)據(jù)由右向左方向移動(dòng)。TXD與所有74LS165的CP相連;RXD與74LS165的串行輸出端QH相連;P1.0與S/L#相連,控制74LS165的串行移位或并行輸入;15腳接地,允許時(shí)鐘輸入。當(dāng)擴(kuò)展多個(gè)8位輸入口時(shí),相鄰兩芯片的首尾(QH與SIN)相連。圖8-20利用74LS165擴(kuò)展并行輸入口【例8-7】從16位擴(kuò)展口讀入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的個(gè)數(shù)RXDATA: MOVSCON,#10H ;設(shè)置串口方式0,允許接收,啟動(dòng)接收過程WAIT: JNB

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

CLRRI

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

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

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

INCR0

;指向下一個(gè)地址

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

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

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

MOV SBUF,A

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

CLR TI

INC R0

;取下一個(gè)數(shù)

DJNZ R7,SEND

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

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

圖9-23

通過74LS06來(lái)驅(qū)動(dòng)蜂鳴器的報(bào)警電路91

圖9-24

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

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

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

……

P6F: LJMP PROM6P7F: LJMP PROM7PROM0: ……

;0號(hào)鍵功能程序

…… LJMP START ;0號(hào)鍵處理完返回鍵盤掃描

……

PROM7: ……

;7號(hào)鍵功能程序

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

7BH 7DH 7EH B7H BBH BDH

BEH D7H

DBH

DDH

DEH E7H

EBH

EDH

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

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

41H 28H

24H

22H

21H 18H

14H

12H

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

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

去抖動(dòng)延時(shí)5~10ms后再判斷有無(wú)鍵按下確認(rèn)哪個(gè)鍵被按下及其鍵號(hào)8155的PA口依次輸出下列掃描字:鍵掃描及識(shí)別過程8155:PA口輸出列掃描信號(hào),PC口輸入行狀態(tài)信號(hào)PA7PA6PA5PA4PA3PA2PA1PA011111110FEH11111101FDH……011111117FH,則每個(gè)鍵的鍵值(列行組合)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每個(gè)鍵的鍵號(hào)(自己安排)N=行首鍵號(hào)+列號(hào)確認(rèn)哪個(gè)鍵被按下及其鍵號(hào)(續(xù))8155的PC口輸入行狀態(tài)可能為下列之一:PC5PC4PC3PC2PC1PC0××1110×EH××1101×DH××1010×BH××0111×7H等待鍵釋放后再進(jìn)行進(jìn)一步處理。鍵掃描程序框圖入口有鍵按下?延時(shí)12ms有鍵按下?①①NYNY鍵號(hào)入棧保存按鍵抬起?NY鍵號(hào)送A返回判斷按鍵是否抬起(以防止重復(fù)進(jìn)行鍵處理)

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論