




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章MCS-51單片機(jī)常用接口
MCS-51單片機(jī)常用接口包括外部存儲(chǔ)器接口、I/O口接口、鍵盤接口和顯示接口等。5.1MCS-51單片機(jī)的最小系統(tǒng)所謂最小系統(tǒng),是指一個(gè)真正可用的單片機(jī)最小配置系統(tǒng)。對(duì)于單片機(jī)內(nèi)部資源已能滿足系統(tǒng)需要的,可直接采用最小系統(tǒng)。MCS-51單片機(jī)根據(jù)片內(nèi)有無(wú)程序存儲(chǔ)器最小系統(tǒng)分兩種情況。5.1.18051/8751的最小系統(tǒng)
8051/8751片內(nèi)有4K的ROM/EPROM,因此,只需要外接晶體振蕩器和復(fù)位電路就可構(gòu)成最小系統(tǒng)。如圖所示。XTAL1
XTAL2
8751
P0P1P2P3
8051
RESET
EA
GND
+5V
+5V8
8
88
該最小系統(tǒng)的特點(diǎn)如下:(1)由于片外沒(méi)有擴(kuò)展存儲(chǔ)器和外設(shè),P0、P1、P2、P3都可以作為用戶I/O口使用。(2)片內(nèi)數(shù)據(jù)存儲(chǔ)器有128字節(jié),地址空間00H~7FH,沒(méi)有片外數(shù)據(jù)存儲(chǔ)器。(3)內(nèi)部有4KB程序存儲(chǔ)器,地址空間0000H~0FFFH,沒(méi)有片外程序存儲(chǔ)器,EA應(yīng)接高電平。(4)可以使用兩個(gè)定時(shí)/計(jì)數(shù)器T0和T1,一個(gè)全雙工的串行通信接口,5個(gè)中斷源。5.1.18031最小應(yīng)用系統(tǒng)
8031片內(nèi)無(wú)程序存儲(chǔ)器片,因此,在構(gòu)成最小應(yīng)用系統(tǒng)不僅要外接晶體振蕩器和復(fù)位電路,還應(yīng)外擴(kuò)展程序存儲(chǔ)器。P2ALE8031P0EAPSENG74LS373A15~A8A7~A0D7~D0OE2764CE高8位地址線P2ALEP0EAPSEN該最小系統(tǒng)特點(diǎn)如下:(1)由于P0、P2在擴(kuò)展程序存儲(chǔ)器時(shí)作為地址線和數(shù)據(jù)線,不能作為I/O線,因此,只有P1、P3作為用戶I/O口使用。(2)片內(nèi)數(shù)據(jù)存儲(chǔ)器同樣有128字節(jié),地址空間00H~7FH,沒(méi)有片外數(shù)據(jù)存儲(chǔ)器。(3)內(nèi)部有無(wú)程序存儲(chǔ)器,但片外擴(kuò)展了程序存儲(chǔ)器,其地址空間隨芯片容量不同而不一樣。圖6.2中使用的是2764芯片,容量為8K字節(jié),地址空間為0000H~1FFFH。由于片內(nèi)沒(méi)有程序存儲(chǔ)器,只能使用片外程序存儲(chǔ)器,EA只能接低電平。(4)同樣可以使用兩個(gè)定時(shí)/計(jì)數(shù)器T0和T1,一個(gè)全雙工的串行通信接口,5個(gè)中斷源。5.2存儲(chǔ)器擴(kuò)展5.2.1存儲(chǔ)器擴(kuò)展概述一、MCS-51單片機(jī)的存儲(chǔ)器擴(kuò)展能力
MCS-51單片機(jī)地址總線寬度為16位,片外可擴(kuò)展的存儲(chǔ)器最大容量為64KB,地址為0000H~FFFFH。因?yàn)槌绦虼鎯?chǔ)器和數(shù)據(jù)存儲(chǔ)器是通過(guò)不同的控制信號(hào)和指令進(jìn)行訪問(wèn),允許兩者的地址空間重疊,所以片外可擴(kuò)展的程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器分別都為64KB。二、存儲(chǔ)器擴(kuò)展的一般方法不論何種存儲(chǔ)器芯片,其引腳都呈三總線結(jié)構(gòu),與單片機(jī)連接都是三總線對(duì)接。另外,電源線接電源線,地線接地線。1.控制線:對(duì)于程序存儲(chǔ)器,一般來(lái)說(shuō),具有輸出允許控制線OE,它與單片機(jī)的PSEN信號(hào)線相連。對(duì)于數(shù)據(jù)存儲(chǔ)器,一般都有輸出允許控制線OE和寫(xiě)控制線WE,它們分別與單片機(jī)的讀信號(hào)線RD和寫(xiě)信號(hào)線WR相連。2、數(shù)據(jù)線:存儲(chǔ)器芯片的數(shù)據(jù)線的數(shù)目由芯片的字長(zhǎng)決定。連接時(shí),存儲(chǔ)器芯片的數(shù)據(jù)線與單片機(jī)的數(shù)據(jù)總線(P0.0~P0.7)按由低位到高位的順序順次相接。3、地址線:存儲(chǔ)器芯片的地址線的數(shù)目由芯片的容量決定。容量(Q)與地址線數(shù)目(N)滿足關(guān)系式:Q=2N。存儲(chǔ)器芯片的地址線與單片機(jī)的地址總線(A0~A15)按由低位到高位的順序順次相接。一般來(lái)說(shuō),存儲(chǔ)器芯片的地址線數(shù)目總是少于單片機(jī)地址總線的數(shù)目,因此連接后,單片機(jī)的高位地址線總有剩余。剩余地址線一般作為譯碼線,譯碼輸出與存儲(chǔ)器芯片的片選信號(hào)線CS相接。片選信號(hào)線與單片機(jī)系統(tǒng)的譯碼輸出相接后,就決定了存儲(chǔ)器芯片的地址范圍。譯碼有兩種方法:部分譯碼法和全譯碼法。部分譯碼:所謂部分譯碼就是存儲(chǔ)器芯片的地址線與單片機(jī)系統(tǒng)的地址線順次相接后,剩余的高位地址線僅用一部分參加譯碼。部分譯碼使存儲(chǔ)器芯片的地址空間有重疊,造成系統(tǒng)存儲(chǔ)器空間的浪費(fèi)。如下圖,存儲(chǔ)器芯片容量為2K,地址線為11根,與地址總線的低11位A0~A10相連,用于選中芯片內(nèi)的單元。地址總線的A11、A12、A13、A14根地址線參加譯碼的選中芯片,設(shè)這四根地址總線的狀態(tài)為0100時(shí)選中該芯片。地址總線A15不參加譯碼,當(dāng)?shù)刂房偩€A15為0、1兩種狀態(tài)都可以選中該存儲(chǔ)器芯片。A15A140A130A121A110A10A9A8A7A6A5A4A3A2A1A0地址譯碼線與存儲(chǔ)器芯片連接的地址線當(dāng)A15=0時(shí),芯片占用的地址是0001000000000000~0001011111111111,即1000H~17FFH。當(dāng)A15=1時(shí),芯片占用的地址是1001000000000000~1001011111111111,即9000H~97FFH。部分譯碼法的一個(gè)特例是線譯碼。所謂線譯碼就是直接用一根剩余的高位地址線與一塊存儲(chǔ)器芯片的片選信號(hào)CS相連。全譯碼:所謂全譯碼就是存儲(chǔ)器芯片的地址線與單片機(jī)系統(tǒng)的地址線順次相接后,剩余的高位地址線全部參加譯碼。這種譯碼方法存儲(chǔ)器芯片的地址空間是唯一確定的,但譯碼電路相對(duì)復(fù)雜。3.?dāng)U展存儲(chǔ)器所需芯片數(shù)目的確定存儲(chǔ)器芯片容量系統(tǒng)擴(kuò)展容量芯片數(shù)目=若所選存儲(chǔ)器芯片字長(zhǎng)與單片機(jī)字長(zhǎng)一致,則只需擴(kuò)展容量。所需芯片數(shù)目按下式確定:若所選存儲(chǔ)器芯片字長(zhǎng)與單片機(jī)字長(zhǎng)不一致,則不僅需擴(kuò)展容量,還需字?jǐn)U展。所需芯片數(shù)目按下式確定:存儲(chǔ)器芯片字長(zhǎng)系統(tǒng)字長(zhǎng)存儲(chǔ)器芯片容量系統(tǒng)擴(kuò)展容量芯片數(shù)目′=5.2.2程序存儲(chǔ)器擴(kuò)展一.單片程序存儲(chǔ)器的擴(kuò)展P2.6P2.4P2.3P2.2P2.1P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P2.7P2.5P0.0ALEVcc8031PSENEAVss+5VA12A11A10A9A8A7A6A5A4A3A2A1A0D7D5D4D3D2D1D0OED6CEGNDVff+5V8D7D6D5D4D3D2D1DGOE8Q7Q6Q5Q4Q3Q2Q1QVcc74LS373二.多片程序存儲(chǔ)器的擴(kuò)展其8個(gè)重疊的地址范圍為如下:0000000000000000~0001111111111111,即0000H~1FFFH;0010000000000000~0011111111111111,即2000H~3FFFH;0100000000000000~0101111111111111,即4000H~5FFFH;0110000000000000~0111111111111111,即6000H~7FFFH;1000000000000000~1001111111111111,即8000H~9FFFH;1010000000000000~1011111111111111,即A000H~BFFFH;1100000000000000~1101111111111111,即C000H~DFFFH;1110000000000000~1111111111111111,即E000H~FFFFH。P2.6P2.5P2.4~P2.0ALE8031PSENEAGP2.774LS373OEA0~A7A8~A12CED0~D7OE2764(1)A0~A7A8~A12CE2764(2)D0~D7OEP0588885885上圖是通過(guò)線選法實(shí)現(xiàn)的兩片2764擴(kuò)展成16KB程序存儲(chǔ)器。兩片2764的地址線A0~A12與地址總線的A0~A12對(duì)應(yīng)相連,2764的數(shù)據(jù)線D0~D7與數(shù)據(jù)總線A0~A7對(duì)應(yīng)相連,兩片2764的輸出允許控制線連在一起與8031的PSEN相連。第一片2764的片選線CS與8031地址總線的P2.7直接相連,第二片2764的片選線CS與8031地址總線的P2.7取反后相連。其兩片的地址空間分別為:第一片:00000000000000000~0001111111111111,即0000H~1FFFH;00100000000000000~0011111111111111,即2000H~3FFFH;01000000000000000~0101111111111111,即4000H~5FFFH;01100000000000000~0111111111111111,即6000H~7FFFH;第二片:10000000000000000~1001111111111111,即8000H~9FFFH;10100000000000000~1011111111111111,即A000H~BFFFH;11000000000000000~1101111111111111,即C000H~DFFFH;11100000000000000~1111111111111111,即E000H~FFFFH。P2.6P2.5P2.4~P2.0ALE8031PSENEAGP2.774LS373OEA0~A7A8~A12CED0~D7OE2764(1)A0~A7A8~A12CE2764(2)OEP0588885885CBAD0~D7GG1G2AG2BY3Y2Y1Y08D0~D7OE2764(3)A0~A7A8~A12CE8D0~D7OECEA8~A12A0~A72764(4)8585Vcc74LS138上圖為采用全譯碼法實(shí)現(xiàn)的4片2764擴(kuò)展成32KB程序存儲(chǔ)器。8031剩余的高3位地址總線P2.7、P2.6、P2.5通過(guò)74LS138譯碼器形成4個(gè)2764的片選信號(hào)由于采用全譯碼,每片2764的地址空間都是唯一的。它們分別是:00000000000000000~0001111111111111,即0000H~1FFFH;00100000000000000~0011111111111111,即2000H~3FFFH;01000000000000000~0101111111111111,即4000H~5FFFH;01100000000000000~0111111111111111,即6000H~7FFFH。5.2.3數(shù)據(jù)存儲(chǔ)器擴(kuò)展數(shù)據(jù)存儲(chǔ)器擴(kuò)展與程序存儲(chǔ)器擴(kuò)展基本相同,只是數(shù)據(jù)存儲(chǔ)器控制信號(hào)一般有輸出允許信號(hào)OE和寫(xiě)控制信號(hào)WE,分別與單片機(jī)的片外數(shù)據(jù)存儲(chǔ)器的讀控制信號(hào)RD和寫(xiě)控制信號(hào)WR相連,其它信號(hào)線的連接與程序存儲(chǔ)器完全相同。下圖是兩片數(shù)據(jù)存儲(chǔ)器芯片6264與8051單片機(jī)的連接。6264是8K8的靜態(tài)數(shù)據(jù)存儲(chǔ)器芯片,有13根地址線,數(shù)據(jù)線8根,一根輸出允許信號(hào)OE和一根寫(xiě)控制信號(hào)WE,兩根片選信號(hào)CE1和CE2,使用時(shí)都應(yīng)為低電平。P2.6P2.5P2.4~P2.0ALE8051RDEAGP2.774LS373OEA0~A7A8~A12CE1D0~D7OE2764(1)A0~A7A8~A12CE12764(2)D0~D7OEP058885885WRWEWE88CE2CE2P2.7為低電平0,兩片6264芯片的地址空間為:第一片:01000000000000000~0101111111111111,即4000H~5FFFH;第二片:00100000000000000~0011111111111111,即2000H~3FFFH;P2.7為高電平1,兩片6264芯片的地址空間為:第一片:11000000000000000~1101111111111111,即C000H~DFFFH;第二片:10100000000000000~1011111111111111,即A000H~BFFFH;5.3輸入/輸出口擴(kuò)展5.3.1簡(jiǎn)單I/O口擴(kuò)展通常通過(guò)數(shù)據(jù)緩沖器、鎖存器來(lái)擴(kuò)展簡(jiǎn)單I/O接口。例如:74LS373、74LS244、74LS273、74LS245等芯片都可以作簡(jiǎn)單I/O擴(kuò)展。實(shí)際上,只要具有輸入三態(tài)、輸出鎖存的電路,就可以用作I/O口擴(kuò)展。下圖是利用74LS373和74LS244擴(kuò)展的簡(jiǎn)單I/O口,其中74LS373擴(kuò)展并行輸出口,74LS244擴(kuò)展并行輸入口。74LS373是一個(gè)帶輸出三態(tài)門的8位鎖存器,8個(gè)輸入端D0~D7,8個(gè)輸出端Q0~Q7,G為數(shù)據(jù)鎖存控制端,G為高電平,則把輸入端的數(shù)據(jù)鎖存于內(nèi)部的鎖存器,OE為輸出允許端,低電平時(shí)把鎖存器中的內(nèi)容通過(guò)輸出端輸出。74LS244是單向數(shù)據(jù)緩沖器,帶兩個(gè)控制端1G和2G,當(dāng)它們?yōu)榈碗娖綍r(shí),輸入端D0~D7的數(shù)據(jù)輸出到Q0~Q7。P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.08051EAD0D1D2D3D4D5D6D7GOEQ0Q1Q2Q3Q4Q5Q6Q774LS373P2.0RDQ0Q1Q2Q3Q4Q5Q6Q71G2G74LS244++L1L2L3L4L5L6L7L0+5VD0D1D2D3D4D5D6D7K1K2K3K4K5K6K7K0圖中,擴(kuò)展的輸入口接了K0~K78個(gè)開(kāi)關(guān),擴(kuò)展的輸出口接了L0~L78個(gè)發(fā)光二極管,如果要實(shí)現(xiàn)K0~K7開(kāi)關(guān)的狀態(tài)通過(guò)L0~L7發(fā)光二極管顯示,則相應(yīng)的匯編程序?yàn)椋篖OOP:MOVDPTR,#0FEFFHMOVXA,@DPTRMOVX@DPTR,ASJMPLOOP如果用C語(yǔ)言編程,相應(yīng)程序段為:#include<absacc.h>//定義絕對(duì)地址訪問(wèn)#defineucharunsignedchar……uchari;i=XBYTE[0xfeff];XBYTE[0xfeff]=i;……5.3.2可編程I/O擴(kuò)展(8255A)一.8255A的結(jié)構(gòu)與功能數(shù)據(jù)總線緩沖器讀/寫(xiě)控制部件雙向數(shù)據(jù)總線
D0~D7
RD
WR
A1
A0RESETCSB組控制部件A組控制部件A組端口AA組端口CB組端口CB組端口BA組B組PA7~PA0PC7~PC4PC3~PC0PB7~PB08位內(nèi)部總線
8255A內(nèi)部有3個(gè)可編程的并行I/O端口:PA口、PB口和PC口。其中C口又可分為兩個(gè)獨(dú)立的4位端口:PC0~PC3和PC4~PC7。A口和C口的高四位合在一起稱為A組,通過(guò)圖中的A組控制部件控制;B口和C口的低四位合在一起稱為B組,通過(guò)圖中的B組控制部件控制。
A口有三種工作方式:無(wú)條件輸入/輸出方式、選通輸入/輸出方式和雙向選通輸入/輸出方式。B口有兩種工作方式:無(wú)條件輸入/輸出方式和選通輸入/輸出方式。當(dāng)A口和B口工作于選通輸入/輸出方式或雙向選通輸入/輸出方式時(shí),C口當(dāng)中的一部分線用作A口和B口輸入/輸出應(yīng)答信號(hào)線。數(shù)據(jù)總線緩沖器是一個(gè)8位雙向三態(tài)緩沖器,是8255A與系統(tǒng)總線之間的接口,8255A與CPU之間傳送的數(shù)據(jù)信息、命令信息、狀態(tài)信息都通過(guò)數(shù)據(jù)總線緩沖器實(shí)現(xiàn)傳送。讀寫(xiě)控制部件接收CPU送來(lái)的控制信號(hào)、地址信號(hào),經(jīng)譯碼選中內(nèi)部的端口寄存器,并指揮從這些寄存器中讀出信息或向這些寄存器寫(xiě)入相應(yīng)的信息。8255A有4個(gè)端口寄存器:A寄存器、B寄存器、C寄存器和控制口寄存器,通過(guò)控制信號(hào)和地址信號(hào)對(duì)這4個(gè)端口寄存器的操作如表所示。CSA1A0RDWRI/O操作00001讀A口寄存器內(nèi)容到數(shù)據(jù)總線00101讀B口寄存器內(nèi)容到數(shù)據(jù)總線01001讀C口寄存器內(nèi)容到數(shù)據(jù)總線00010數(shù)據(jù)總線上內(nèi)容寫(xiě)到A口寄存器00110數(shù)據(jù)總線上內(nèi)容寫(xiě)到B口寄存器01010數(shù)據(jù)總線上內(nèi)容寫(xiě)到C口寄存器01110數(shù)據(jù)總線上內(nèi)容寫(xiě)到控制口寄存器二.8255A的引腳信號(hào)8255A共40引腳,采用雙列直插式封裝,如下圖所示,各引腳信號(hào)功能如下:D7~D0:三態(tài)雙向數(shù)據(jù)線,與單片機(jī)的數(shù)據(jù)總線相連,用來(lái)傳送數(shù)據(jù)信息。CS:片選信號(hào)線,低電平有效,用于選中8255A芯片。RD:讀信號(hào)線,低電平有效,用于控制從8255A端口寄存器讀出信息。WR:寫(xiě)信號(hào)線,低電平有效,用于控制向8255A端口寄存器寫(xiě)入信息。PA7~PA0:A口的8根輸入/輸出信號(hào)線,用于與外部設(shè)備連接。PB7~PB0:B口的8根輸入/輸出信號(hào)線,用于與外部設(shè)備連接。PC7~PC0:C口的8根輸入/輸出信號(hào)線,用于與外部設(shè)備連接。RESET:復(fù)位信號(hào)線。VCC:+5V電源線。GND:地信號(hào)線。8255A12345678910111213141516171819204039383736353433323130292827262524232221PA3PA2PA1RDCSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB2PA0PA4PA5PA6PA7WRRESETD0D1D2D3D4D5D6D7VccPB7PB6PB5PB4PB3三.8255A的控制字8255A有兩個(gè)控制字:工作方式控制字和C口按位置位/復(fù)位控制字。1.工作方式控制字端口A0:輸出1:輸入端口C高4位0:輸出1:輸入端口B0:輸出1:輸入特征位1A組工作方式位00:方式001:方式11X:方式2B組工作方式位0:方式01:方式1端口C低4位0:輸出1:輸入D7D6D5D4D3D2D1D0D7位為特征位。D7=1表示為工作方式控制字。D6、D5用于設(shè)定A組的工作方式。D4、D3用于設(shè)定A口和C口的高4位是輸入還是輸出。D2用于設(shè)定B組的工作方式。D1、D0用于設(shè)定B口和C口的低4位是輸入還是輸出。2.C口按位置位/復(fù)位控制字特征位0這三位不用位選擇位000:C口0位001:C口1位……111:C口7位0:復(fù)位1:置位D7D6D5D4D3D2D1D0D7位為特征位。D7=0表示為C口按位置位/復(fù)位控制字。D6、D5、D4這三位不用D3、D2、D1這三位用于選擇C口當(dāng)中的某一位。D0用于置位/復(fù)位設(shè)置,D0=0則復(fù)位,D0=1則置位。四.8255A的工作方式1.方式0方式0是一種基本的輸入/輸出方式。在這種方式下,三個(gè)端口都可以由程序設(shè)置為輸入或輸出,沒(méi)有固定的應(yīng)答信號(hào)。方式0特點(diǎn)如下:(1)具有兩個(gè)8位端口(A、B)和兩個(gè)4位端口(C口的高4位和C口的低4位)。(2)任何一個(gè)端口都可以設(shè)定為輸入或者輸出。(3)每一個(gè)端口輸出時(shí)是鎖存的,輸入是不鎖存的。方式0輸入/輸出時(shí)沒(méi)有專門的應(yīng)答信號(hào),通常用于無(wú)條件傳送。例如:下圖是8255A工作于方式0的例子,其中A口輸入,B口輸出。8051系統(tǒng)總線8255APA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7+5V+5VK0K7L0L72.方式1方式1是一種選通輸入/輸出方式。在這種工作方式下,端口A和B作為數(shù)據(jù)輸入輸出口,端口C用作輸入/輸出的應(yīng)答信號(hào)。A口和B口既可以作輸入,也可作輸出,輸入和輸出都具有鎖存能力。方式1輸入:無(wú)論是A口輸入還是B口輸入,都用C口的三位作應(yīng)答信號(hào),一位作中斷允許控制位。INTE&PC4PC5PC3PC6、PC7PA0~PA7STBAIBFAI/OINTRAB口輸入INTE&A口輸入PC2PC1PC088IBFBSTBBPB0~PB7INTRB各應(yīng)答信號(hào)含義如下:STB:外設(shè)送給8255A的“輸入選通”信號(hào),低電平有效。IBF:8255A送給外設(shè)的“輸入緩沖器滿”信號(hào),高電平有效。INTR:8255A送給CPU的“中斷請(qǐng)求”信號(hào),高電平有效。INTE:8255A內(nèi)部為控制中斷而設(shè)置的“中斷允許”信號(hào)。INTE由軟件通過(guò)對(duì)PC4(A口)和PC2(B口)的置位/復(fù)位來(lái)允許或禁止。方式1輸出:無(wú)論是A口輸出還是B口輸出,也都用C口的三位作應(yīng)答信號(hào),一位作中斷允許控制位。INTE&PC7PC6PC3PC4、PC5PA0~PA7ACKAOBFAI/OINTRAB口輸出INTE&A口輸出PC2PC1PC088OBFBACKBPB0~PB7INTRB2應(yīng)答信號(hào)含義如下:OBF:8255A送給外設(shè)的“輸出緩沖器滿”信號(hào),低電平有效。ACK:外設(shè)送給8255A的“應(yīng)答”信號(hào),低電平有效。INTR:8255A送給CPU的“中斷請(qǐng)求”信號(hào),高電平有效。INTE:8255A內(nèi)部為控制中斷而設(shè)置的“中斷允許”信號(hào),含義與輸入相同,只是對(duì)應(yīng)C口的位數(shù)與輸入不同,它是通過(guò)對(duì)PC4(A口)和PC2(B口)的置位/復(fù)位來(lái)允許或禁止。3.方式2方式2是一種雙向選通輸入/輸出方式。只適合于端口A。這種方式能實(shí)現(xiàn)外設(shè)與8255A的A口雙向數(shù)據(jù)傳送,并且輸入和輸出都是鎖存的。它使用C口的5位作應(yīng)答信號(hào),兩位作中斷允許控制位。&INTE1INTE2&1PC5PC4PC6PC7PC3PA0~PA7ACKAOBFAINTRASTBAIBFA五.8255A與MCS-51單片機(jī)的接口1.硬件接口8255A與MCS-51單片機(jī)的連接包含數(shù)據(jù)線、地址線、控制線的連接.VccWRRDP2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.08051ALEEAGNDD7D6D5D4D3D2D2D1DOGQ7Q6Q5Q4Q3Q2Q1Q0WRRDCSA1A0D7D6D5D4D3D2D1GNDVcc+5V+5VPA7-PA0PB7-PB0PC7-PC0OED0圖中,8255A的數(shù)據(jù)線與8051單片機(jī)的數(shù)據(jù)總線相連,讀、寫(xiě)信號(hào)線對(duì)應(yīng)相連,地址線A0、A1與單片機(jī)的地址總線的A0和A1相連,片選信號(hào)CS與8051的P2.0相連。則8255A的A口、B口、C口和控制口的地址分別是:FEFCH,F(xiàn)EFDH,F(xiàn)EFEH,F(xiàn)EFFH。2.軟件編程如果設(shè)定8255A的A口為方式0輸入,B口為方式0輸出,則初始化程序?yàn)椋簠R編程序段:MOVA,#90HMOVDPTR,#0FEFFHMOVX@DPTR,AC語(yǔ)言程序段:#include<reg51.h>#include<absacc.h>//定義絕對(duì)地址訪問(wèn)……XBYTE[0xfeff]=0x90;……5.4MCS-51單片機(jī)與LED顯示器接口5.4.1LED顯示器的結(jié)構(gòu)與原理在單片機(jī)應(yīng)用系統(tǒng)中通常使用的是8段式LED數(shù)碼管顯示器,它有共陰極和共陽(yáng)極兩種,如圖所示。abcdefgdpcomabcdefgdpcomabcdefgdp10987612345gfcomabedcomcdp(a)(b)(c)其中:(a)為共陰極結(jié)構(gòu)。(b)為共陽(yáng)極結(jié)構(gòu)。(c)圖為管腳圖,從a~g管腳輸入不同的8位二進(jìn)制編碼,可顯示不同的數(shù)字或字符。共陰極和共陽(yáng)極的字段碼互為反碼。顯示字符共陰極字段碼共陽(yáng)極字段碼顯示字符共陰極字段碼共陽(yáng)極字段碼03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8HY6EH91H87FH80HL38HC7H96FH90H8.FFH00HA77H88H“滅”00FFHB7CH83H………………5.4.2LED數(shù)碼管顯示器的譯碼方式一.硬件譯碼方式譯碼方式是指由顯示字符轉(zhuǎn)換得到對(duì)應(yīng)的字段碼的方式硬件譯碼方式是指利用專門的硬件電路來(lái)實(shí)現(xiàn)顯示字符到字段碼的轉(zhuǎn)換,這樣的硬件電路有很多,比如MOTOTOLA公司生產(chǎn)的MC14495芯片就是其中的一種,MC14495是共陰極一位十六進(jìn)制數(shù)——字段碼轉(zhuǎn)換芯片,能夠輸出用四位二進(jìn)制表示形式的一位十六進(jìn)制數(shù)的七位字段碼,不帶小數(shù)點(diǎn)。它的內(nèi)部結(jié)構(gòu)如圖。4鎖存器地址譯碼和字段碼ROM陣列ABCDLE569107VssVDD816abcdefgh+iVCR11121314151234二.軟件譯碼方式軟件譯碼方式就是通過(guò)編寫(xiě)軟件譯碼程序,通過(guò)譯碼程序來(lái)得到要顯示的字符的字段碼。5.4.3LED數(shù)碼管的顯示方式一.LED靜態(tài)顯示
LED靜態(tài)顯示時(shí),其公共端直接接地(共陰極)或接電源(共陽(yáng)極),各段選線分別與I/O口線相連。要顯示字符,直接在I/O線送相應(yīng)的字段碼。abcdefgdpI/O(1)abcdefgdpI/O(2)二.LED動(dòng)態(tài)顯示方式
LED動(dòng)態(tài)顯示是將所有的數(shù)碼管的段選線并接在一起,用一個(gè)I/O口控制,公共端不是直接接地(共陰極)或電源(共陽(yáng)極),而是通過(guò)相應(yīng)的I/O口線控制。D3D2D1D0I/O(1)I/O(2)設(shè)數(shù)碼管為共陽(yáng)極,它的工作過(guò)程為:第一步使右邊第一個(gè)數(shù)碼管的公共端D0為1,其余的數(shù)碼管的公共端為0,同時(shí)在I/O(1)上送右邊第一個(gè)數(shù)碼管的字段碼,這時(shí),只有右邊第一個(gè)數(shù)碼管顯示,其余不顯示;第二步使右邊第二個(gè)數(shù)碼管的公共端D1為1,其余的數(shù)碼管的公共端為0,同時(shí)在I/O(1)上送右邊第二個(gè)數(shù)碼管的字段碼,這時(shí),只有右邊第二個(gè)數(shù)碼管顯示,其余不顯示,依此類推,直到最后一個(gè),這樣四個(gè)數(shù)碼管輪流顯示相應(yīng)的信息,一個(gè)循環(huán)完后,下一循環(huán)又這樣輪流顯示,從計(jì)算機(jī)的角度看是一個(gè)一個(gè)的顯示,但由于人的視覺(jué)滯留,只要循環(huán)的周期足夠快,看起來(lái)所有的數(shù)碼管都是一起顯示的了。這就是動(dòng)態(tài)顯示的原理。而這個(gè)循環(huán)周期對(duì)于計(jì)算機(jī)來(lái)說(shuō)很容易實(shí)現(xiàn)。所以在單片機(jī)中經(jīng)常用到動(dòng)態(tài)顯示。5.4.4LED顯示器與單片機(jī)的接口
LED顯示器從譯碼方式上有硬件譯碼方式和軟件譯碼方式。從顯示方式上有靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。在使用時(shí)可以把它們組合起來(lái)。在實(shí)際應(yīng)用時(shí),如果數(shù)碼管個(gè)數(shù)較少,通常用硬件譯碼靜態(tài)顯示,在數(shù)碼管個(gè)數(shù)較多時(shí),則通常用軟件譯碼動(dòng)態(tài)顯示。一.硬件譯碼靜態(tài)顯示下圖是一個(gè)兩位數(shù)碼管硬件譯碼靜態(tài)顯示的接口電路圖。abcdefgMC14495abcdefgabcdefgABCDLEMC14495abcdefgABCDLEP1.0P1.1P1.2P1.3P1.4P1.58051二.軟件譯碼動(dòng)態(tài)顯示下圖是一個(gè)8位軟件譯碼動(dòng)態(tài)顯示的接口電路圖。圖中用8255A擴(kuò)展并行I/O口接數(shù)碼管,數(shù)碼管采用動(dòng)態(tài)顯示方式,8位數(shù)碼管的段選線并聯(lián)與8255A的A口通過(guò)74LS373相連,8位數(shù)碼管的公共端通過(guò)74LS373分別與8255A的B口相連。也即8255A的B口輸出位選碼選擇要顯示的數(shù)碼管,8255A的A口輸出字段碼使數(shù)碼管顯示相應(yīng)的字符,8255A的A口和B口都工作于方式0輸出。A口、B口、C口和控制口的地址分別為7F00H、7F01H、7F02H和7F03H。D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0~P0.78051D0~D7A1A0GA1A08255軟件譯碼動(dòng)態(tài)顯示匯編語(yǔ)言程序?yàn)椋海ㄔO(shè)8個(gè)數(shù)碼管的顯示緩沖區(qū)為片內(nèi)RAM的57H~50H單元)DISPLAY:MOVA,#10000000B;8255初始化MOVDPTR,#7F03H;使DPTR指向8155控制寄存器端口MOVX@DPTR,AMOVR0,#57H;動(dòng)態(tài)顯示初始化,使R0指向緩沖區(qū)首址MOVR3,#7FH;首位位選字送R3MOVA,R3LD0:MOVDPTR,#7F00H;使DPTR指向PA口MOVX@DPTR,A;選通顯示器低位(最右端一位)INCDPTR;使DPTR指向PB口MOVA,@R0;讀要顯示數(shù)ADDA,#0DH;調(diào)整距段選碼表首的偏移量MOVCA,@A+PC;查表取得段選碼MOVX@DPTR,A;段選碼從PB口輸出ACALLDL1;調(diào)用1ms延時(shí)子程序DECR0;指向緩沖區(qū)下一單元MOVA,R3;位選碼送累加器AJNBACC.0,LD1;判斷8位是否顯示完畢,顯示完返回RRA;未顯示完,把位選字變?yōu)橄乱晃贿x字MOVR3,A;修改后的位選字送R3AJMPLD0;循環(huán)實(shí)現(xiàn)按位序依次顯示LD1:RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;字段碼表DB:7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOVR7,#02H;延時(shí)子程序DL:MOVR6,#0FFHDL0:DJNZR6,DL0DJNZR7,DLRET軟件譯碼動(dòng)態(tài)顯示C語(yǔ)言程序?yàn)椋?include<reg51.h>#include<absacc.h>//定義絕對(duì)地址訪問(wèn)#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint);//聲明延時(shí)函數(shù)voiddisplay(void);//聲明顯示函數(shù)uchardisbuffer[8]={0,1,2,3,4,5,6,7};//定義顯示緩沖區(qū)voidmain(void){XBYTE[0x7f03]=0x80;//8255A初始化while(1){display();//設(shè)顯示函數(shù)}}//************延時(shí)函數(shù)************voiddelay(uinti)//延時(shí)函數(shù){uintj;for(j=0;j<i;j++){}}//***********顯示函數(shù)voiddisplay(void)//定義顯示函數(shù){ucharcodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F的字段碼表ucharchocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選碼表uchar
i,p,temp;for(i=0;i<8;i++){p=disbuffer[i];//取當(dāng)前顯示的字符temp=codevalue[p];//查得顯示字符的字段碼XBYTE[0x7f00]=temp;//送出字段碼temp=chocode[i];//取當(dāng)前的位選碼XBYTE[0x7f01]=temp;//送出位選碼delay(20);//延時(shí)1ms}}5.5MCS-51單片機(jī)與鍵盤接口5.5.1鍵盤的工作原理鍵盤實(shí)際上是一組按鍵開(kāi)關(guān)的集合,平時(shí)按鍵開(kāi)關(guān)總是處于斷開(kāi)狀態(tài),當(dāng)按下鍵時(shí)它才閉合。它的結(jié)構(gòu)和產(chǎn)生的波形如圖所示。P1.1VCCGND斷開(kāi)閉合斷開(kāi)P1.1(a)(b)鍵盤的處理主要涉及三個(gè)方面:1.按鍵的識(shí)別2.抖動(dòng)的消除消除按鍵盤抖動(dòng)通常有兩種方法:硬件消抖和軟件消抖。硬件消抖是通過(guò)在按鍵輸出電路上加一定的硬件線路來(lái)消除抖動(dòng),一般采用R—S觸發(fā)器或單穩(wěn)態(tài)電路。如圖。斷開(kāi)閉合+5V+5V輸出軟件消抖是利用延時(shí)來(lái)跳過(guò)抖動(dòng)過(guò)程3.鍵位的編碼通常有兩種方法編碼。(1)用連接鍵盤的I/O線的二進(jìn)制組合進(jìn)行編碼。如(a)圖(2)順序排列編碼。如(b)圖,處理方法如下:編碼值=行首編碼值X+列號(hào)Y。P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.788848281484442412824222118141211P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7FEDCBA9876543210(a)(b)5.5.2獨(dú)立式鍵盤與單片機(jī)的接口鍵盤的結(jié)構(gòu)形式一般有兩種:獨(dú)立式鍵盤與矩陣式鍵盤。獨(dú)立式鍵盤就是各按鍵相互獨(dú)立,每個(gè)按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會(huì)影響其它的I/O口線。GNDVCCGNDVCC或(b)8051(a)INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7圖(a)為中斷方式工作的獨(dú)立式鍵盤的結(jié)構(gòu)形式,(b)為查詢方式工作的獨(dú)立式鍵盤的結(jié)構(gòu)形式下面是針對(duì)圖7.4(b)圖查詢方式的匯編語(yǔ)言形式的鍵盤程序。總共有8個(gè)鍵位,KEY0~KEY7為8個(gè)鍵的功能程序。START:MOVA,#0FFH;MOVP1,A;置P1口為輸入狀態(tài)MOVA,P1;鍵狀態(tài)輸入CPLAJZSTART;沒(méi)有鍵按下,則轉(zhuǎn)開(kāi)始JBACC.0,K0;檢測(cè)0號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.1,K1;檢測(cè)1號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.2,K2;檢測(cè)2號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.3,K3;檢測(cè)3號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.4,K4;檢測(cè)4號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.5,K5;檢測(cè)5號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.6,K6;檢測(cè)6號(hào)鍵是否按下,按下轉(zhuǎn)JBACC.7,K7;檢測(cè)7號(hào)鍵是否按下,按下轉(zhuǎn)JMPSTART;無(wú)鍵按下返回,再順次檢測(cè)K0:AJMPKEY0K1:AJMPKEY1……K7:AJIMPKEY7KEY0:……;0號(hào)鍵功能程序JMPSTART;0號(hào)鍵功能程序執(zhí)行完返回KEY1:……;0號(hào)鍵功能程序JMPSTART;1號(hào)鍵功能程序執(zhí)行完返回……KEY7:……;7號(hào)鍵功能程序JMPSTART;7號(hào)鍵功能程序執(zhí)行完返回5.5.3矩陣鍵盤與單片機(jī)的接口矩陣式鍵盤又叫行列式鍵盤。用I/O口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行列的交點(diǎn)上。例如4×4的行、列結(jié)構(gòu)可組成16個(gè)鍵的鍵盤,比一個(gè)鍵位用一根I/O口線的獨(dú)立式鍵盤少了一半的I/O口線。矩陣鍵盤的連接方法有多種,可直接連接于單片機(jī)的I/O口線;可利用擴(kuò)展的并行I/O口連接;也可利用可編程的鍵盤、顯示接口芯片(如8279)進(jìn)行連接等等。其中,利用擴(kuò)展的并行I/O口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。下圖就是通過(guò)8255A芯片擴(kuò)展的并行I/O口連接48的矩陣鍵盤。PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC30123456789101112131415316171819202122232425262728293031CS74LS373WRRDA1A0P2.7WRRDALEP0.0~P0.7D0~D7RESET1K20F+5V+5V82555.1K48051一.矩陣鍵盤的工作過(guò)程對(duì)矩陣鍵盤的工作過(guò)程可分兩步:第一步是CPU首先檢測(cè)鍵盤上是否有鍵按下;第二步是再識(shí)別是哪一個(gè)鍵按下。1.檢測(cè)鍵盤上是否有鍵按下處理方法是:將列線送入全掃描字,讀入行線的狀態(tài)來(lái)判別。其具體過(guò)程如下:PA口輸出00H,即所有列線置成低電平,然后將行線電平狀態(tài)讀入累加器A中。如果有鍵按下,總會(huì)有一根行線電平被拉至低電平,從而使行輸入狀態(tài)不全為"1"。2.識(shí)別鍵盤中哪一個(gè)鍵按下處理方法是:將列線逐列置低電平,檢查行輸入狀態(tài),稱為逐列掃描。其具體過(guò)程如下:從PA0開(kāi)始,依次輸出“0”,置對(duì)應(yīng)的列線為低電平,然后從PC口讀入行線狀態(tài),如果全為“1”,則按下的鍵不在此列;如果不全為“1”,則按下的鍵必在此列,而且是該列與“0”電平行線相交的交點(diǎn)上的那個(gè)鍵。為求取編碼,在逐列掃描時(shí),可用計(jì)數(shù)器記錄下當(dāng)前掃描列的列號(hào),檢測(cè)到第幾行有鍵按下,就用該行的首鍵碼加列號(hào)得到當(dāng)前按鍵的編碼。二.矩陣鍵盤的工作方式1.查詢工作方式這種方式是直接在主程序中插入鍵盤檢測(cè)子程序,主程序每執(zhí)行一次則鍵盤檢測(cè)子程序被執(zhí)行一次,對(duì)鍵盤進(jìn)行檢測(cè)一次,如果把沒(méi)有鍵按下,則跳過(guò)鍵識(shí)別,直接執(zhí)行主程序;如果有鍵按下,則通過(guò)鍵盤掃描子程序識(shí)別按鍵,得到按鍵的編碼值,然后根據(jù)編碼值進(jìn)行相應(yīng)的處理,處理完后再回到主程序執(zhí)行。鍵盤掃描子程序流程如圖。開(kāi)始有鍵按下否?調(diào)用6ms延時(shí)子程序?調(diào)用12ms延時(shí)子程序?有鍵按下否?判閉合鍵,編碼入棧保護(hù)閉合鍵釋放否?編碼A返回否否否是是是鍵盤掃描子程序如下:(硬件線路如圖7.4,8255A的A口、B口、C口和控制口地址分別為7F00H、7F01H、7F02H、7F03H,設(shè)8255A已在主程序中初始化。已設(shè)定為A口方式0輸出,C口的低4位方式0輸入。)KEY1:ACALLKS1;調(diào)用判斷有無(wú)鍵按下子程序JNZLK1;有鍵按下時(shí),(A)≠0轉(zhuǎn)消抖延時(shí)KEY2:ACALLTM6msAJMPKEY1;無(wú)鍵按下返回LK1:ACALLTM12ms;調(diào)12ms延時(shí)子程序ACALLKS1;查有無(wú)鍵按下,若有則真有鍵按下JNZLK2;鍵(A)≠0逐列掃描AJMPKEY2;不是真有鍵按下,返回LK2:MOVR2,#0FEH;初始列掃描字(0列)送入R2MOVR4,#00H;初始列(0列)號(hào)送入R4LK4:MOVDPTR,#7F00H;DPTR指向8155PA口MOVA,R2;列掃描字送至8155PA口
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色債券發(fā)行與投資研究行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 高精度轉(zhuǎn)速測(cè)量?jī)x企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力項(xiàng)目商業(yè)計(jì)劃書(shū)
- 全渠道融合零售平臺(tái)行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 高精度定位軸與銷制造行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 環(huán)保型油墨用顏料行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 電子智能玩具材料行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 維修服務(wù)擔(dān)保服務(wù)行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書(shū)
- 車輛綜合保險(xiǎn)方案行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書(shū)
- 消費(fèi)金融AI應(yīng)用行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書(shū)
- 山東省臨沂市莒南縣第二中學(xué)2023-2024學(xué)年下學(xué)期5月月考高一數(shù)學(xué)試題
- 機(jī)場(chǎng)運(yùn)營(yíng)效率提升策略與創(chuàng)新模式-洞察闡釋
- 安徽省1號(hào)卷A10聯(lián)盟2025屆高三5月最后一卷生物試題及答案
- 網(wǎng)絡(luò)安全等級(jí)保護(hù)備案表(2025版)
- 共情研究的歷史發(fā)展及其當(dāng)前狀況分析
- 《綠色建筑評(píng)價(jià)》課件 - 邁向可持續(xù)建筑的未來(lái)
- 2025年湖南九年級(jí)物理(BEST湘西州聯(lián)考)(含答案)
- 山東省臨沂市2025年普通高等學(xué)校招生全國(guó)統(tǒng)一考試(模擬)語(yǔ)文及答案(臨沂二模)
- 濟(jì)南幼兒師范高等專科學(xué)校招聘真題2024
- 以患者為中心的醫(yī)教融合模式在提升醫(yī)療服務(wù)質(zhì)量中的應(yīng)用研究
- 制氫技術(shù)與工藝課件:液氫
- (2025)全國(guó)小學(xué)生“學(xué)憲法、講憲法”活動(dòng)知識(shí)競(jìng)賽題庫(kù)及答案
評(píng)論
0/150
提交評(píng)論