《單片機系統(tǒng)設計及工程應用》課件第6章_第1頁
《單片機系統(tǒng)設計及工程應用》課件第6章_第2頁
《單片機系統(tǒng)設計及工程應用》課件第6章_第3頁
《單片機系統(tǒng)設計及工程應用》課件第6章_第4頁
《單片機系統(tǒng)設計及工程應用》課件第6章_第5頁
已閱讀5頁,還剩246頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

6.1單片機系統(tǒng)總線的形成6.2外部數(shù)據(jù)存儲器的擴展6.3外部程序存儲器的擴展6.4并行I/O端口擴展技術6.5單片機系統(tǒng)擴展舉例習題6目前,51系列單片機的種類很多,單片機的性能和實用性得到了很大的提升。在有些應用場合,一個單片機本身就是一個最小應用系統(tǒng),許多實際的應用系統(tǒng)就是由這種

低成本和小體積的單片機構成的。

圖6.1是單片機最小系統(tǒng)的一般結構,單片機的四個并行口都可以與外部電路直接相連。圖6.2是單片機最小系統(tǒng)的一個簡單例子,P1口的P1.0~P1.3作輸入,讀取開關S0~S3上的數(shù)據(jù),用P1.4~P1.7作輸出,控制發(fā)光二極管L0~L3。6.1單片機系統(tǒng)總線的形成在圖6.1和圖6.2中,由于AT89C51內部含程序存儲器,故引腳(31腳)應接+5V,加電后,在自動復位電路的作用下,CPU從內部程序存儲器的0000H處開始執(zhí)行程序,系統(tǒng)便可根據(jù)用戶程序的功能正常運行。在實際應用中,有時還需要設計手動復位電路,關于復位電路和時鐘電路的細節(jié)請參閱第2章的有關內容,在此不再贅述。

單片機本身的資源是有限的,如51系列單片機的片內RAM容量一般為128~256B,片內程序存儲器為4~8KB。對復雜系統(tǒng)而言,若單片機本身的資源滿足不了實際要求時,就需要進行系統(tǒng)擴展。圖6.1AT89C51單片機最小系統(tǒng)圖6.2最小系統(tǒng)應用實例系統(tǒng)擴展的主要內容有如下幾個方面:

(1)外部數(shù)據(jù)存儲器擴展;

(2)外部程序存儲器擴展;

(3)輸入/輸出接口擴展;

(4)A/D和D/A擴展;

(5)管理功能器件的擴展(如擴展定時器/計數(shù)器、鍵盤/顯示器等)。

為了使單片機能方便地與各種芯片連接,常用單片機的外部連線構成3總線結構形式——地址總線、數(shù)據(jù)總線和控制總線。對于51系列單片機,3總線形成如圖6.3所示。圖6.3系統(tǒng)總線形成電路地址總線形成電路:對單片機進行系統(tǒng)擴展時,P2口作為高8位地址總線。單片機訪問外部程序存儲器,或訪問外部數(shù)據(jù)存儲器和擴展I/O端口(即執(zhí)行MOVXA,@DPTR

和MOVX@DPTR,A指令)時,由P2口輸出高8位地址信號A15~A8,P2口具有輸出鎖存功能,在CPU訪問外部部件期間,P2口能保持地址信息不變。P0口為地址/數(shù)據(jù)分時

復用口,分時用作低8位地址總線和8位雙向數(shù)據(jù)總線。因此,構成系統(tǒng)總線時,應加1個74LS373鎖存器,用于鎖存低8位地址信號A7~A0。

74LS373是一個8位鎖存器,三態(tài)輸出,其真值表見表6.1。在圖6.3所示的電路中,74LS373的8個輸入端8D~1D分別與P0.7~P0.0相連。G為373的使能端,用地址鎖存信號ALE控制,當ALE為“1”時,使能端G有效,P0口提供的低8位地址信號被373鎖存,其輸出8Q~1Q即為地址信號A7~A0;當ALE為“0”時,CPU用P0口傳送指令代碼或數(shù)據(jù),此時,使能端G無效,地址信號A7~A0保持不變,從而保證了CPU訪問外部部件(外部程序存儲器或外部RAM,也可能是擴展的I/O端口)期間地址信號不會發(fā)生變化。表6.174LS373真值表數(shù)據(jù)總線:P0口作為數(shù)據(jù)總線D7~D0。數(shù)據(jù)總線是雙向三態(tài)總線。

控制總線:系統(tǒng)擴展時常用的控制信號有:

ALE——地址鎖存信號。當CPU訪問外部部件時,利用ALE信號的正脈沖鎖存出現(xiàn)在P0口的低8位地址,因此把ALE稱為地址鎖存信號。

——片外程序存儲器訪問允許信號,低電平有效。當CPU從外部程序存儲器讀取指令或讀取常數(shù)(即執(zhí)行MOVC指令)時,該信號有效,CPU通過數(shù)據(jù)總線讀回指令或常數(shù)。擴展外部程序存儲器時,用該信號作為程序存儲器的讀出允許信號。當CPU訪問外部數(shù)據(jù)存儲器期間,該信號無效。

——片外數(shù)據(jù)存儲器讀信號,低電平有效。

——片外數(shù)據(jù)存儲器寫信號,低電平有效。

當CPU訪問外部數(shù)據(jù)存儲器或訪問外部擴展的I/O端口時(執(zhí)行MOVX指令時),會產(chǎn)生相應的讀/寫信號。擴展外部數(shù)據(jù)存儲器和I/O端口時,和用于外部數(shù)據(jù)存儲器芯片和I/O接口芯片的讀/寫控制。

51系列單片機內部RAM的容量是有限的,一般只有128B或256B。當單片機用于實時數(shù)據(jù)采集或處理大批量數(shù)據(jù)時,僅靠片內提供的RAM是遠遠不夠的。此時,我們可以利用單片機的擴展功能,擴展外部數(shù)據(jù)存儲器。由圖6.3可知,單片機的地址總線為16條A15~A0,可以尋址外部數(shù)據(jù)存儲器的最大空間為64KB,用戶可根據(jù)系統(tǒng)的需要確定擴展存儲器容量的大小。6.2外部數(shù)據(jù)存儲器的擴展數(shù)據(jù)存儲器即隨機存取存儲器(RAM,RandomAccessMemory),用于存放可隨時修改的數(shù)據(jù)信息。常用的外部數(shù)據(jù)存儲器有靜態(tài)RAM(SRAM,StaticRandomAccess

Memory)和動態(tài)RAM(DRAM,DynamicRandomAccessMemory)兩種。前者讀/寫速度高,一般都是8位寬度,使用方便,易于擴展;缺點是集成度低,成本高,功耗大。

后者集成度高,成本低,功耗相對較低;缺點是需要增加動態(tài)刷新電路,硬件電路復雜。因此,對單片機擴展數(shù)據(jù)存儲器時一般都采用靜態(tài)RAM。

常用的靜態(tài)RAM芯片有6264(8k×8)、62256(32k×8)等芯片,其管腳配置均為28腳雙列直插式封裝,有利于印刷板電路設計,使用方便。圖6.4給出了6264的引腳圖和真值表。圖6.46264的引腳圖和真值表存儲器擴展的核心問題是存儲器的編址問題,就是給存儲單元分配地址。由于存儲器通常由多塊芯片組成,因此存儲器的編址分為兩個層次:存儲器芯片內部存儲單元編址和存儲器芯片編址。前者,靠存儲器芯片內部的譯碼器選擇芯片內部的存儲單元。后者,必須利用譯碼電路實現(xiàn)對芯片的選擇。譯碼電路是將輸入的一組二進制編碼變換為一個特定的輸出信號,即將輸入的一組高位地址信號通過變換,產(chǎn)生一個有效的輸出信號,用于選中某一個存儲器芯片,從而確定該存儲器芯片所占用的地址范圍。常用的有3種譯碼方法:全譯碼、部分譯碼和線選法。6.2.1全譯碼

全譯碼是用全部的高位地址信號作為譯碼電路的輸入信號進行譯碼。其特點是:

地址與存儲單元一一對應,也就是說1個存儲單元只占用1個惟一的地址,地址空間的利用率高。對于要求存儲器容量大的系統(tǒng),一般使用這種譯碼方法。

例6.2.1

利用全譯碼為AT89C51擴展16KB的外部數(shù)據(jù)存儲器,存儲器芯片選用SRAM6264,要求外部數(shù)據(jù)存儲器占用從0000H開始的連續(xù)地址空間。

解首先確定要使用的6264芯片的數(shù)目:

芯片數(shù)目=系統(tǒng)擴展的存儲容量÷6264芯片的容量

=16KB÷8KB=2片

然后進行地址分配,畫出地址譯碼關系圖。所謂地址譯碼關系圖,是一種用簡單的符號來表示系統(tǒng)地址與芯片所占用的地址之間相互關系的示意圖,如下所示。最后,根據(jù)地址譯碼關系畫出原理電路圖,如圖6.5所示。圖中,系統(tǒng)的數(shù)據(jù)線與芯片的數(shù)據(jù)線一一對應相連;片內地址線與芯片的地址線一一對應相連,高位地址信號作為譯碼電路的輸入信號進行譯碼。當CPU執(zhí)行MOVX指令時,若指令給出的地址在0000H~1FFFH范圍內,則1號或門輸出為低電平,1#SRAM6264的片選信號有效,CPU訪問1#存儲器芯片;若指令給出的地址在2000H~3FFFH范圍內,則2號或門輸出為低電平,2#SRAM6264的片選信號有效,CPU訪問2#存儲器芯片。和用于外部數(shù)據(jù)存儲器芯片的讀/寫控制。圖6.5擴展16KB的外部數(shù)據(jù)存儲器如把外部RAM的1000H單元的數(shù)據(jù)傳送到外部RAM的2000H單元的程序段為:

MOVDPTR,#1000H ;設置源數(shù)據(jù)指針

MOVXA,@DPTR ;產(chǎn)生信號,讀1#存

;儲器芯片

MOVDPTR,#2000H

MOVX@DPTR,A ;產(chǎn)生信號,寫2#存

;儲器芯片

該例中采用的是全譯碼,故1#和2#存儲器芯片的每一個存儲單元各占用1個惟一的地址,每個芯片為8KB存儲容量,擴展的外部數(shù)據(jù)存儲器總容量為16KB,地址范圍

為0000H~3FFFH。

例6.2.2

利用全譯碼為AT89C51擴展40KB的外部數(shù)據(jù)存儲器,存儲器芯片選用SRAM6264。要求外部數(shù)據(jù)存儲器占用從6000H開始的連續(xù)地址空間。

解首先確定要使用的6264芯片的數(shù)目:

芯片數(shù)目=系統(tǒng)擴展的存儲容量÷6264芯片容量

=40KB÷8KB=5片對于要求存儲器容量大的系統(tǒng),一般使用全譯碼方法進行譯碼。這時擴展的芯片數(shù)目較多,譯碼電路使用專用譯碼器。3-8譯碼器74LS138是一種常用的地址譯碼器,其引腳圖和真值表如圖6.6所示。其中,、和G1為控制端,只有當G1為“1”,且和均為“0”時,譯碼器才能進行譯碼輸出,否則譯碼器的8個輸出端全為高阻狀態(tài)。使用74LS138時,、和G1可直接接固定電平,也可參與地址譯碼,但其譯碼關系必須為001。在本例中,通過進行地址分配可以很方便地畫出存儲器系統(tǒng)的連接圖,如圖6.7所示。圖6.674LS138引腳圖和真值表圖6.7擴展40KB的數(shù)據(jù)存儲器在圖6.7中,各芯片的地址范圍分別為:

1#芯片:6000H~7FFFH (A15A14A13=011)

2#芯片:8000H~9FFFH (A15A14A13=100)

3#芯片:A000H~BFFFH(A15A14A13=101)

4#芯片:C000H~DFFFH(A15A14A13=110)

5#芯片:E000H~FFFFH(A15A14A13=111)6.2.2部分譯碼

部分譯碼是用部分高位地址信號(而不是全部)作為譯碼電路的輸入信號進行譯碼。

其特點是:地址與存儲單元不是一一對應的,而是1個存儲單元占用多個地址。即在部分譯碼電路中,有若干根地址線不參與譯碼,會出現(xiàn)地址重疊現(xiàn)象。我們把不參與譯碼的地址線稱為無關項,若1根地址線不參與譯碼,則一個單元占用2(21)個地址;若2根地址線不參與譯碼,則一個單元占用4(22)個地址;若n根地址線不參與譯碼,則一個單元占用2n個地址,n為無關項的個數(shù)。部分譯碼會造成地址空間的浪費,但譯碼器電路簡單,對地址譯碼電路的設計帶來了很大的方便。一般在較小的系統(tǒng)中常采用部分譯碼方法進行譯碼。

例6.2.3

分析圖6.8中的譯碼方法,寫出存儲器芯片SRAM6264占用的地址范圍。

解畫出地址譯碼關系如下:圖6.8數(shù)據(jù)存儲器擴展通過地址譯碼關系圖可知圖6.8采用的是部分譯碼,地址線A13不參與譯碼,為無關項。當A13=0時,6264占用的地址空間為4000H~5FFFH,當A13=1時,6264占用的地址空間為6000H~7FFFH,出現(xiàn)地址重疊現(xiàn)象。由于存在無關項,使得4000H和6000H這兩個地址指向同一個單元,4001H和6001H這兩個地址指向同一個單元,依此類推,5FFFH和7FFFH這兩個地址指向同一個單元。即存儲器芯片的每個單元都占用兩個地址,其地址空間示意圖如圖6.9所示,一個8KB的存儲器芯片占用了16KB的地址空間,其實際存儲容量只有8KB。我們把無關項為0時的地址稱為基本地址,無關項為1時的地址稱為重疊地址。編程時一般使用基本地址(4000H~5FFFH)訪問該芯片,而重疊地址空著不用。圖6.96264地址空間6.2.3線選法

所謂線選法,是利用系統(tǒng)的某一根地址線作為芯片的片選信號。線選法實際上是部分譯碼的一種極端應用,其具有部分譯碼的所有特點,譯碼電路最簡單,甚至不使用譯

碼器。如直接以系統(tǒng)的某一條地址線作為存儲器芯片的片選信號,只需把用到的地址線與存儲器芯片的片選端直接相連即可。當一個應用系統(tǒng)需要擴展的芯片數(shù)目較少,需要的實際存儲空間較小時,常使用線選法。

例6.2.4

分析圖6.10中的譯碼方法,寫出各存儲器芯片SRAM6264占用的地址范圍。

解圖6.10中,使用線選法選擇芯片,直接把地址線A15、A14和A13作為芯片的片選信號,地址譯碼關系如下:圖6.10數(shù)據(jù)存儲器擴展線選法的優(yōu)點是硬件簡單,不需要譯碼器。缺點是各存儲器芯片的地址范圍不連續(xù),給程序設計帶來不便。但在單片機應用系統(tǒng)中,一般要擴展的芯片數(shù)目較少,廣泛使用線選法作為芯片的片選信號,尤其在I/O端口擴展中更是如此。

51系列單片機具有64KB的程序存儲器空間,其中87C51、AT89C51單片機含有4KB的片內程序存儲器,而8031則無片內程序存儲器。當采用87C51、AT89C51單片機而程序超過4KB,或采用8031型單片機時,就需要進行程序存儲器的擴展。這里要注意的是,51系列單片機有一個管腳跟程序存儲器的擴展有關。如果接低電平,則不使用片內程序存儲器,片外程序存儲器地址范圍為0000H~FFFFH(64KB)。如果接高電平,那么片內存儲器和片外程序存儲器總容量為64KB。6.3外部程序存儲器的擴展6.3.1EPROM擴展

擴展程序存儲器常用的器件是EPROM芯片,如2764(8K×8bit)、27128(16K×8bit)和27256(32K×8bit)等。它們均為28腳雙列直插式封裝,引腳如圖6.11所示。圖6.112764、27128和27256引腳圖我們以2764為例介紹其性能和擴展方法,其他EPROM芯片的使用方法與其相似。

2764是8K×8bit的EPROM,單一+5V供電,工作電流為75mA,維持電流為35mA,讀出時間最大為250ns。其引腳有:

A12~A0:13條地址線。

D7~D0:8位數(shù)據(jù)線。

:片選信號,低電平有效。

:輸出允許信號,當CE=0,且OE=0時,被尋址單元的內容才能被讀出。

VPP:編程電源,當芯片編程時,該端加編程電壓(+25V或+12V);正常使用時,該端接+5V電源。(NC為不用的引腳。)在使用2764時,只能將其所存儲的內容讀出,讀出過程與SRAM的讀出十分相似。

即首先送出要讀出的單元地址,然后使和均有效(低電平),則在芯片的D0~D7數(shù)據(jù)線上就可以輸出要讀出的內容,其讀出時序關系如圖6.12所示。圖6.122764讀出時序

例6.3.1

圖6.13所示的電路中,為AT89C51擴展外部程序存儲器,用作為EPROM的讀出允許信號。分析該電路,寫出該系統(tǒng)的程序存儲器容量及地址范圍。

解圖6.13中,AT89C51內部含4KB的程序存儲器,外部擴展的程序存儲器為8KB,故該系統(tǒng)的程序存儲器總容量為12KB。外部擴展的程序存儲器使用線選法選擇芯片,

當?shù)刂肪€A13=1時選中外部擴展的程序存儲器。系統(tǒng)的程序存儲器的地址空間示意圖如圖6.14所示。圖6.13程序存儲器擴展圖6.14地址空間示意圖該系統(tǒng)中,既有片內程序存儲器,又有片外程序存儲器。執(zhí)行程序時,CPU是從片內程序存儲器取指令,還是從片外程序存儲器取指令,是由單片機引腳電平的高低來決定的。在例6.3.1中,=1為高電平,加電后,CPU先執(zhí)行片內程序存儲器的程序,當PC的值超過0FFFH時將自動轉向片外程序存儲器執(zhí)行指令。但應當注意,由于該系統(tǒng)中的程序存儲器的地址是不連續(xù)的,在編程時應當合理地進行程序的轉移。

例6.3.2

利用全譯碼為AT89C51擴展40KB的外部數(shù)據(jù)存儲器和40KB的外部程序存儲器,存儲器芯片選用SRAM6264和EPROM2764。要求6264和2764占用從6000H開始的連續(xù)地址空間。

解要擴展40KB的外部數(shù)據(jù)存儲器和40KB的外部程序存儲器需要6264和2764各5片,使用專用譯碼器74LS138進行譯碼,其存儲器系統(tǒng)的連接圖如圖6.15所示。其中,各芯片的地址范圍分別為:

芯片1、6:6000H~7FFFH

芯片2、7:8000H~9FFFH

芯片3、8:A000H~BFFFH

芯片4、9:C000H~DFFFH

芯片5、10:E000H~FFFFH圖6.15擴展數(shù)據(jù)存儲器和程序存儲器6.3.2E2PROM擴展舉例

E2PROM(EEPROM)是一種電擦除可編程只讀存儲器,其主要特點是能在計算機系統(tǒng)中進行在線修改,它既有RAM可讀可改寫的特性,又具有非易失性存儲器ROM在掉電后仍能保持所存數(shù)據(jù)的優(yōu)點。因而,E2PROM在智能儀器儀表、控制裝置等領域得到了普遍應用。

E2PROM在單片機存儲器擴展中,可以用作程序存儲器,也可以用作數(shù)據(jù)存儲器,至于具體做什么使用,由硬件電路確定。E2PROM作為程序存儲器使用時,CPU讀取E2PROM數(shù)據(jù)同讀取一般EPROM的操作相同;E2PROM作為數(shù)據(jù)存儲器使用時,總線連接及讀取E2PROM數(shù)據(jù)同讀取RAM的操作相同,但E2PROM的寫入時間較長,必須用軟件或硬件來檢測寫入周期。常用的E2PROM芯片有Intel2816A、2817A和2864A等芯片,其引腳如圖6.16所示。圖6.16E2PROM引腳圖

1)E2PROM2816A

2816A的存儲容量為2K×8bit,單一+5V供電,不需要專門配置寫入電源。2816A能隨時寫入和讀出數(shù)據(jù),其讀取時間完全能滿足一般程序存儲器的要求,但寫入時間較長,需9~15ms,寫入時間完全由軟件延時控制。

2)E2PROM2817A

與2816A一樣,2817A也均屬于5V電擦除可編程只讀存儲器,其容量也是2K×8bit。不同之處在于:2816A的寫入時間為9~15ms,完全由軟件延時控制,與硬件電路無關;2817A可利用硬件引腳RDY/BUSY來檢測寫操作是否完成。

3)E2PROM2864A

2864A是8K×8bitE2PROM,單一+5V供電,最大工作電流為160mA,最大維持電流為60mA,典型讀出時間為250ns。由于芯片內部設有“頁緩沖器”,因此允許對其快

速寫入。2864A內部可以提供編程所需的全部定時控制,編程結束可以給出查詢標志。圖6.172817A的寫入時序在此,我們以2817A芯片為例介紹其性能和擴展方法。2817A的封裝是DIP28,采用單一+5V供電,最大工作電流為150mA,維持電流為55mA,讀出時間最大為250ns。片內設有編程所需的高壓脈沖產(chǎn)生電路,無需外加編程電源和編程脈沖即可工作。

2817A的讀操作與普通EPROM的讀出相同,其寫入時序如圖6.17所示。

2817A的寫入過程如下:CPU向2817A發(fā)出字節(jié)寫入命令后,即當?shù)刂酚行А?shù)據(jù)有效及控制信號=0、=1,且在端加上100ns的負脈沖,便啟動一次寫操作。但應注意的是,寫脈沖過后并沒有真正完成寫操作,還需要一段時間進行芯片內部的寫操作,在此期間,2817A的引腳RDY/為低電平,表示2817A正在進行內部的寫

操作,此時它的數(shù)據(jù)總線呈高阻狀態(tài),因而允許CPU在此期間執(zhí)行其他的任務。當一次寫入操作完畢,2817A便將RDY/置高,由此來通知CPU。

例6.3.3

為AT89C51單片機擴展2KB的E2PROM。

解單片機擴展2817A的硬件電路圖如圖6.18所示。圖6.18擴展E2PROM圖6.18中,P2.6反相后與2817A的片選端相連,2817A的地址范圍是4000H~47FFH(無關項取0,該地址范圍不是惟一的)。

2817A的讀/寫控制線連接采用了將外部數(shù)據(jù)存儲器空間和程序存儲器空間合并的方法,使得2817A既可以作為程序存儲器使用,又可以作為數(shù)據(jù)存儲器使用。如果只是把2817A作為程序存儲器使用,使用方法與EPROM相同。E2PROM也可以通過編程器將程序固化進去。如果將2817A作為數(shù)據(jù)存儲器,讀操作同使用靜態(tài)RAM一樣,用“MOVX

A,@DPTR”指令直接從給定的地址單元中讀取數(shù)據(jù)即可。向2817A中寫數(shù)據(jù)采用“MOVX@DPTR,A”指令。

2817A的RDY/引腳是一個漏極開路的輸出端,故外接上拉電阻后,將其與AT89C51的P1.0相連。采用查詢方式對2817A的寫操作進行管理。在寫操作期間,RDY/腳為低電平,當寫操作完畢時,RDY/變?yōu)楦唠娖?。其實,檢測2817A寫操作是否完成也可以用中斷方式實現(xiàn),方法是將2817A的RDY/反相后與AT89C51的外部中斷輸入腳相連(圖6.18中的虛線所示),當2817A每寫完一個字節(jié),便向單片機提出中斷請求。6.4.1簡單I/O端口的擴展

對一些簡單外設的接口,只要按照“輸入三態(tài),輸出鎖存”與總線相連的原則,選擇74LS系列的TTL或MOS器件即能組成擴展接口電路。例如,可采用8位三態(tài)緩沖器74LS244組成輸入口,采用8D鎖存器74LS273、74LS373、74LS377等組成輸出口。

采用這些簡單接口芯片進行系統(tǒng)擴展,接口電路簡單、配置靈活、編程方便、且價格低廉,是I/O端口擴展的一種首選方案。6.4并行I/O端口擴展技術圖6.19給出了74LS244的引腳圖與真值表,它是8位三態(tài)緩沖器,在系統(tǒng)設計時常常用作系統(tǒng)總線的單向驅動或輸入接口芯片。圖6.20給出了74LS273的引腳圖與真值表。74LS273是8D觸發(fā)器,為低電平有效的清0端,當其為0時,輸出全為0,且與其他輸入端無關;CP端是時鐘信號,當CP由低電平向高電平跳變時,D端輸入數(shù)據(jù)傳送到Q端輸出。在系統(tǒng)設計時常用74LS273作為輸出接口芯片。圖6.1974LS244引腳圖與真值表圖6.2074LS273引腳圖與真值表

例6.4.1

采用74LS244和74LS273為AT89C51單片機擴展8位輸入端口和8位輸出端口。

解單片機擴展74LS244和74LS273的硬件電路圖如圖6.21所示。

圖6.21中,P0口作為雙向8位數(shù)據(jù)線,既能夠從74LS244輸入數(shù)據(jù),又能夠從74LS273輸出數(shù)據(jù)。P2.0分別與、“或運算”作為輸入口和輸出口的選通及鎖存信號。因為74LS244和74LS273都是在P2.0為0時被選通的,所以二者的口地址都為FEFFH(這個地址不是惟一的,只要保證P2.0=0,其他地址位無關)。圖6.21簡單I/O端口擴展在51單片機中,擴展的I/O端口采用與片外數(shù)據(jù)存儲器相同的尋址方法,所有擴展的I/O端口與片外RAM統(tǒng)一編址,因此,對片外I/O端口的輸入/輸出指令就是訪問片外RAM的指令,即:

MOVXA,@DPTR;產(chǎn)生讀信號

MOVXA,@Ri;產(chǎn)生讀信號

MOVX@DPTR,A;產(chǎn)生寫信號

MOVX@Ri,A;產(chǎn)生寫信號針對圖6.21中的電路可編寫程序,實現(xiàn)用開關S0~S7控制對應的發(fā)光二極管L0~L7發(fā)光。程序如下:

NEXT:MOVDPTR,#0FEFFH;數(shù)據(jù)指針指向口地址

MOVXA,@DPTR;輸入數(shù)據(jù)

MOVX@DPTR,A;向74LS273輸出數(shù)據(jù)

LJMPNEXT;循環(huán)6.4.2LED數(shù)碼顯示器擴展

LED數(shù)碼顯示器(又稱為LED數(shù)碼管)是單片機應用系統(tǒng)中最常用的顯示設備之一。

它由8個發(fā)光二極管(以下簡稱字段)構成,通過不同的組合可用來顯示數(shù)字0~9、字符A~F、P、空白字符、符號“-”及小數(shù)點“.”等。LED數(shù)碼管分為共陽極和共陰極兩種,無論是共陽極還是共陰極其外形結構與封裝形式相同,其封裝形式和等效電路如圖6.22所示。圖6.22LED數(shù)碼顯示器共陽極數(shù)碼管的8個發(fā)光二極管的陽極(二極管正端)連接在一起,即公共端COM。

通常,公共陽極COM端接高電平,其他管腳接發(fā)光段驅動電路輸出端。當某段驅動電路的輸出端為低電平時,則該端所連接的字段導通并點亮。根據(jù)發(fā)光字段的不同組合

可顯示出各種數(shù)字或字符。此時,要求段驅動電路能吸收發(fā)光段的導通電流,還需根據(jù)外接電源及發(fā)光段的導通電流來確定相應的限流電阻(發(fā)光段的導通電流一般為5~20mA)。共陰極數(shù)碼管的8個發(fā)光二極管的陰極(二極管負端)連接在一起,即COM端。通常,公共陰極COM端接低電平,其他管腳接段驅動電路輸出端。當某段驅動電路的輸出端為高電平時,該端所連接的字段導通并點亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時,要求段驅動電路能提供額定的導通電流,還需根據(jù)外接電源及導通電流來確定相應的限流電阻。

要使數(shù)碼管顯示出相應的數(shù)字或字符,必須為LED顯示器提供顯示段碼(也稱為字形代碼)。因為LED顯示器共有8個發(fā)光段,所以一個字形代碼正好為一個8位二進制數(shù)。設字形代碼的各二進制位與發(fā)光段的連接對應關系如下:如使用共陽極數(shù)碼管時,若字形代碼的某位數(shù)據(jù)為0,則表示對應字段亮,數(shù)據(jù)為1表示對應字段不亮;若使用共陰極數(shù)碼管,則字形代碼的某位數(shù)據(jù)為0表示對應字段不

亮,數(shù)據(jù)為1表示對應字段亮。如要顯示“0”,共陽極數(shù)碼管的字形代碼應為:

11000000B(即C0H);共陰極數(shù)碼管的字形代碼應為:00111111B(即3FH)。依此類推,可求得數(shù)碼管常用的字形代碼如表6.2所示。表6.2LED顯示器字形代碼(顯示段碼)

1.靜態(tài)顯示器接口

靜態(tài)顯示是指數(shù)碼管顯示某一字符時,相應的發(fā)光二極管恒定導通或恒定截止。就是在同一時刻只顯示1種字符,或者說被顯示的字符在同一時刻是穩(wěn)定不變的。這種顯

示方式的各位數(shù)碼管相互獨立,公共端恒定接地(共陰極)或接正電源(共陽極)。每個數(shù)碼管的8個字段分別與一個8位I/O接口相連,I/O端口只要有字形代碼輸出,相應字符即顯示出來,并保持不變,直到I/O端口輸出新的字形代碼。采用靜態(tài)顯示方式,雖然具有較高的顯示亮度,占用CPU時間少,編程簡單等優(yōu)點,但其占用的端口線多,硬件電路復雜,成本高,只適合于顯示位數(shù)較少的場合。圖6.23是數(shù)碼管靜態(tài)顯示方式的一種典型應用,用兩片74LS273驅動2位靜態(tài)LED顯示器(共陰極數(shù)碼管)。P2.7=0時選通1#顯示器,其地址為7FFFH;P2.6=0時選通2#顯示器,其地址為BFFFH。用下列程序可在顯示器上顯示字符“1”和“2”:圖6.232位靜態(tài)LED顯示器MOV DPTR,#7FFFH

MOV A,#06H ;“1”的字形代碼

MOVX@DPTR,A

MOV DPTR,#0BFFFH

MOV A,#5BH ;“2”的字形代碼

MOVX@DPTR,A

2.動態(tài)顯示接口

動態(tài)顯示是一位一位地輪流點亮各位數(shù)碼管,這種逐位點亮顯示器的方式稱為動態(tài)掃描。通常,各位數(shù)碼管的段選線相應并聯(lián)在一起,由一個8位的I/O端口控制;各位LED顯示器的位選線(COM端)由另外的I/O端口控制。動態(tài)方式顯示時,各數(shù)碼管分時輪流選通,要使其穩(wěn)定顯示,必須采用動態(tài)掃描方式,即在某一時刻只選通一位數(shù)碼管,并送出相應的字形代碼,在另一時刻選通另一位數(shù)碼管,并送出相應的字形代碼。依此規(guī)律循環(huán),逐個循環(huán)點亮各位數(shù)碼管,每位顯示1ms左右,即可使各位數(shù)碼管顯示要顯示的字符。雖然這些字符是在不同的時刻分別顯示的,但由于人眼存在視覺暫留效應,可以給人以同時顯示的感覺。采用動態(tài)顯示方式節(jié)省I/O端口,硬件電路也較靜態(tài)顯示方式簡單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時,CPU要依次掃描,仍占用CPU較多的時間。

用51系列單片機構建數(shù)碼管動態(tài)顯示系統(tǒng)時,采用簡單的接口芯片即可進行系統(tǒng)擴展,其特點是接口電路簡單,編程方便,價格低廉。6位動態(tài)LED顯示器如圖6.24所示。圖6.246位動態(tài)LED顯示器圖6.24中,數(shù)碼管采用共陰極LED,字形碼輸出口74LS273經(jīng)過8路同相驅動電路7407后接至數(shù)碼管的各段,當位線輸出“1”時,驅動數(shù)碼管發(fā)光。7407是集電極

開路的同相驅動器,能為發(fā)光段提供更大的導通電流,增強LED的發(fā)光亮度,其輸出端經(jīng)110Ω的限流電阻接至+5V電源,改變電阻的大小即可調節(jié)發(fā)光亮度。用另一個輸出口74LS273作為LED的位選控制口,其輸出經(jīng)過6路反相驅動器75452后接至數(shù)碼管的COM端。當位選控制口的某位輸出“1”時,75452反相器驅動相應的LED位發(fā)光。字形碼輸出口和位選控制口的地址分別為:

字形碼輸出口地址:DFFFH(地址不是惟一的);

位選控制口的地址:EFFFH(地址不是惟一的)。

3.動態(tài)掃描程序

在單片機應用系統(tǒng)中,為了便于對LED顯示器進行管理,需要建立一個顯示緩沖區(qū)。顯示緩沖區(qū)DISBUF是片內RAM的一個區(qū)域,它的作用是存放要顯示的字符,其長度與LED的位數(shù)相同。圖6.24中的動態(tài)顯示器,DISBUF為6個字節(jié),設DISBUF占用片內RAM的70H~75H單元。顯示緩沖區(qū)DISBUF中的內容是由其他處理程序事先存入DISBUF中的,再由顯示程序進行顯示。設要顯示“P89C51”(P89C51是PHILIPS公司的51系列單片機產(chǎn)品),則“P89C51”在DISBUF中的存放形式見表6.3所示。數(shù)碼顯示器的低位(最右邊的位)顯示的是顯示緩沖區(qū)中的低地址單元中的數(shù),因此在顯示緩沖區(qū)中存放的次序為低地址單元存低位,高地址單元存高位。表6.3顯示緩沖區(qū)要說明的是,顯示程序是利用查表方法來得到要顯示字符的字形代碼的。在顯示程序的字形代碼(顯示段碼)表中,字形代碼存放的次序依次為“0~9”,“A~F”,“空白”和“P”。其中,“P”的序號為18(即11H),故在DISBUF中的75H單元用11H代表“P”。

顯示程序的任務是把顯示緩沖區(qū)中待顯示的字符送往LED顯示器顯示。在進行動態(tài)掃描顯示時,從DISBUF中依次取出待顯示的字符,采用查表的方法得到其對應的字

形代碼,逐個地循環(huán)點亮各位數(shù)碼管,每位顯示1ms左右,即可使各位數(shù)碼管顯示要顯示的字符。設DISBUF中的信息為“P89C51”,可由下列程序在顯示器上顯示“P89C51”:

LOOP1: LCALLDISPLAY ;調用顯示子程序 LJMP LOOP1 ;循環(huán)

DISPLAY:MOV R0,#70H ;R0指向DISBUF首地址

MOV R3,#01H ;右起第1個LED的選擇字

NEXT:MOV A,#00H ;取位選控制字為全滅

MOV DPTR,#0EFFFH ;取位選控制口地址

MOVX @DPTR,A ;瞬時關顯示器

MOV A,@R0 ;從DISBUF中取出字符MOV DPTR,#DSEG ;取段碼表首地址

MOVCA,@A+DPTR ;查表,取對應的字形碼

MOV DPTR,#0DFFFH ;取字形碼輸出口地址

MOVX@DPTR,A ;輸出字形碼

MOV DPTR,#0EFFFH ;取位選控制口地址

MOV A,R3 ;取當前位選控制字

MOVX@DPTR,A ;點亮當前LED顯示位LCALLDELAY ;延時1ms

INC R0 ;R0指向下一個字符

JB ACC.5,EXIT;若當前顯示位是第6位則結束

RL A ;下一個LED的選擇字

MOV R3,A

SJMP NEXTEXIT: RET ;返回段碼表0~9,A~F,空白,

DSEG:DB3FH,06H,5BH,4FH,66H,6DH,7DH,

DB07H,7FH6FH,77H,7CH,39H,5EH,

DB79H,71H,00H,73H

DELAY:MOV R7,#02H ;延時1ms的子程序

DEL1: MOV R6,#0FFH

DEL2: DJNZ R6,DEL2

DJNZR7,DEL1

RET

例6.4.2

針對圖6.24所示的電路,編一顯示程序,調用動態(tài)掃描顯示子程序

DISPLAY,使數(shù)碼顯示器顯示“012345”共6個字符。

解參考程序如下:

MOVA,#05H;取最右邊1位字符

MOVR0,#70H;指向DISBUF首址(最低位)

MOVR1,#06H;共送入6個字符

LOP2:MOV@R0,A;將字符送入DISBUF

INCR0;指向下一顯示單元

DECA;下一個顯示字符

DJNZR1,LOP2;若6個數(shù)未送完,則重復

LOP3:LCALLDISPLAY;掃描顯示一遍

SJMPLOP3;重復掃描6.4.3鍵盤接口

1.按鍵的分類

鍵盤實際上是由排列成矩陣形式的一系列按鍵開關組成的,用戶通過鍵盤可向CPU輸入數(shù)據(jù)信息、地址信息和各種命令。鍵盤按照其接口原理可分為編碼鍵盤與非編碼鍵盤兩類,這兩類鍵盤的主要區(qū)別是識別鍵符及給出相應鍵碼的方法不同。

編碼鍵盤主要是用硬件來實現(xiàn)對按鍵的識別,鍵盤接口電路能夠由硬件邏輯自動提供與鍵對應的編碼。此外,編碼鍵盤一般還具有去抖動和多鍵、竄鍵保護電路。這種鍵盤使用方便,但需要較多的硬件,價格較貴,一般的單片機應用系統(tǒng)較少采用。

非編碼鍵盤的接口電路只是簡單地提供按鍵的行列矩陣,對按鍵的識別、編碼、去抖動等工作均由軟件完成。由于其經(jīng)濟實用,因此常應用于單片機系統(tǒng)中。下面將重點

介紹非編碼鍵盤。

2.矩陣鍵盤的結構及原理

在單片機應用系統(tǒng)中,除了復位按鍵有專門的復位電路及專一的復位功能外,其他按鍵都是以開關狀態(tài)來設置控制功能或輸入數(shù)據(jù)的。當所設置的功能鍵或數(shù)字鍵按下時,單片機應用系統(tǒng)完成該按鍵所設定的功能。一組鍵或一個鍵盤,總有一個接口電路與CPU相連。當按鍵較多時一般采用行列式結構并按矩陣形式排列,如圖6.25所示。圖6.25矩陣鍵盤的結構圖6.25給出了4×4行列式鍵盤的基本結構示意圖。4×4表示有4根行線和4根列線,在每根行線和列線的交叉點上有1個按鍵,組成了一個有16個按鍵的矩陣鍵盤。

列線通過上拉電阻接到+5V上。當無鍵按下時,列線處于高電平狀態(tài);當有鍵按下時,行、列線將導通,此時,列線電平將由與此列線相連的行線電平?jīng)Q定,這是識別按鍵是否按下的關鍵。然而,矩陣鍵盤中的行線、列線和多個鍵相連,因此,必須將行線、列線信號配合起來作適當處理,才能確定閉合鍵的位置。識別按鍵是否按下的方法很

多,其中,最常見的方法是行掃描法。

3.矩陣鍵盤的行掃描法

所謂行掃描法,就是通過行線逐行發(fā)出低電平信號。如果該行線所連接的鍵沒有按下,則列線的電平信號是全“1”;如果有鍵按下的話,則列線得到的是非全“1”信號,即根據(jù)列線的電平信號是否有“0”信號來判斷有無鍵按下。

在使用行掃描法時,為了提高效率,首先快速檢查整個鍵盤中是否有鍵按下。若無鍵按下,則結束鍵盤掃描程序;若有鍵按下,則再用逐行掃描的方法來確定閉合鍵的具體位置(按下的是哪一個鍵)。方法是:先掃描第0行,行輸出值為1110B,第0行為

“0”,其余3行為“1”(通常,把行輸出值為0的行稱為當前行),然后讀入列信號,判斷是否為全“1”。若列輸入值為全“1”,則當前行無鍵按下,行輸出1101(第1行

為“0”,其余3行為“1”),再掃描下一行……依此規(guī)律逐行掃描,直到掃描某行時,其列輸入值不為全“1”,則根據(jù)行輸出值和列輸入值中0的位置確定閉合鍵的具體位置,從而用計算法或查表法得到閉合鍵的鍵值。

例6.4.3為單片機設計一個8×4矩陣鍵盤,并編寫鍵盤掃描程序。

解接口電路如圖6.26所示。用74LS273作為行輸出口,輸出8位行掃描信號。

用74LS244作為列輸入口,輸入4位列輸入值。其口地址分別是:

行輸出口地址:F7FFH;

列輸入口地址:FBFFH。圖6.26一個8×4矩陣鍵盤電路鍵盤采用行掃描法方式工作,鍵盤掃描子程序應具有以下功能:

(1)判斷有無鍵按下。其方法為:行輸出口輸出全為0,讀列輸入口信息,若列輸入值為全1,則說明無鍵按下;若不為全1,則說明有鍵按下。

(2)消除按鍵的抖動。

微機鍵盤通常使用機械觸點式按鍵開關。機械式按鍵在按下或釋放時,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來。其抖動過程如圖6.27所示,抖動時間的長短與開關的機械特性有關,一般為5~10ms。圖6.27按鍵抖動示意圖在觸點抖動期間檢測按鍵的通斷狀態(tài),可能導致判斷出錯,即一次按下按鍵被錯誤地認為是多次操作,這種情況是不允許出現(xiàn)的。為了克服由于按鍵觸點機械抖動所致的檢測誤判,必須采取消抖動措施。

在此,使用軟件延時的方法消除按鍵的抖動。當檢測到有按鍵按下時,調用兩次顯示子程序,每調用一次延時6ms,共延時12ms。這樣既實現(xiàn)了按鍵的消抖動,又可保持顯示器有穩(wěn)定的顯示。同樣,在檢測到閉合鍵釋放后,也采用軟件延時的方法消除按鍵的抖動。

(3)逐行掃描。若有鍵按下,則逐行掃描,以判別閉合鍵的具體位置。

(4)計算閉合鍵的鍵值。計算公式為

鍵值=行號×4+列號

(5)判斷按鍵是否釋放。計算出閉合鍵的鍵值后,再判斷按鍵是否釋放。若按鍵未釋放,則等待;若鍵已釋放,則再延時消抖。

(6)命令處理。根據(jù)閉合鍵的鍵值,程序應完成該按鍵所設定的功能。若按下的是命令鍵,則轉入命令鍵處理程序,完成命令鍵的功能;若按下的是數(shù)字鍵,則轉入數(shù)字

鍵處理程序,進行數(shù)字的存儲和顯示等操作。鍵盤掃描程序如下:

;KEY鍵盤掃描程序

;入口參數(shù): 無

;出口參數(shù): A為返回值

;若有鍵按下,則A為閉合鍵的鍵值0~31;若無鍵按

;下,則A為FFH

;占用寄存器:R3為行計數(shù)器,R2存放行掃描值

; R4、R5為暫存器

KEY: LCALLKS1;快速檢查整個鍵盤中是否有鍵按

;下JNZLK1;A非0,若有鍵按下,

;則轉至LK1

LJMPLK8;若無鍵按下,則返回

LK1: LCALLDISPLAY;若有鍵閉合,則調顯示

;子程,延時12ms

LCALLDISPLAY;消抖動

LCALLKS1;再次檢查有鍵閉合否

JNZLK2;若有鍵閉合,則轉入逐行掃描LJMPLK8;若無鍵閉合,則返回

KL2:MOVR3,#00H;行號初值送R3

MOVR2,#0FEH;行掃描初值送R2LK3: MOVDPTR,#0F7FFH;行輸出口地址,F(xiàn)7FFHMOVA,R2;行掃描值送A

MOVX@DPTR,A;掃描當前行

MOVDPTR,#0FBFFH;列輸入口地址,

;FBFFH

MOVXA,@DPTR;讀入列值

ANLA,#0FH;保留低4位

MOVR4,A;暫存列值

CJNEA,#0FH,LK4;列值非全“1”則轉MOVA,R2;行掃描值送AJNBACC.7,LK8;已掃到最后1行則轉

RLA;若未掃完,則準備掃下一行MOVR2,A;行值存入R2中

INCR3;行號加1

LJMPLK3;轉至掃描下一行

LK4: MOVA,R3;行號送入A

ADDA,R3;行號×2

MOVR5,A;暫存

ADDA,R5;行號×4

MOVR5,A;存入R5中MOVA,R4 ;列值送入A

LK5: RRCA ;列值右移1位

JNCLK6 ;該位為0則轉

INCR5 ;鍵值加1

SJMPLK5 ;列號未判完繼續(xù)

LK6: PUSHR5 ;保護鍵值

LK7: LCALLDISPLAY;掃描一遍顯示器

LCALLKS1 ;發(fā)全掃描信號

JNZLK7 ;鍵未釋放則等待

LCALLDISPLAY;鍵已釋放LCALLDISPLAY;延時12ms,消抖

POPA;鍵值存入A中

KND:RET;返回

LK8:MOVA,#0FFH;無閉合鍵標志,F(xiàn)FH存入A中RET;返回

KS1:MOVDPTR,#0F7FFH ;行輸出口地址:F7FFHMOVA,#00H;取8行全掃描信號MOVX@DPTR,A ;同時掃描8行

MOVDPTR,#0FBFFH ;列輸入口地址:FBFFH

MOVXA,@DPTR;列輸入

ANLA,#0FH;保留低4位

ORLA,#0F0H;高4位取“1”

CPLA ;取反,若無鍵按下,則全0

RET ;返回6.4.48255A可編程并行I/O接口擴展

所謂可編程的接口芯片,是指其功能可由微處理機的指令來加以改變的接口芯片,利用編程的方法,可以使一個接口芯片執(zhí)行不同的接口功能。目前,各生產(chǎn)廠家已提供了很多系列的可編程接口器件,51單片機常用的可編程接口芯片是Intel8255A。

1.8255A的內部結構與端口選擇

8255A是一種8位并行接口芯片,它為用戶提供了3個8位并行端口PA、PB和PC口,3個端口都可以和外設相連,分別傳送外設的輸入/輸出數(shù)據(jù)或控制信息,圖6.28給出了8255A的內部結構和引腳圖。3個端口在8255A內部分成A、B兩組控制電路,這兩組控制電路根據(jù)CPU發(fā)出的方式選擇字來控制8255A的工作方式,每個控制組都接收來自讀/寫控制邏輯的“命令”和內部數(shù)據(jù)總線的“控制字”,并向與其相

連的端口發(fā)出適當?shù)目刂菩盘?。A組控制部件用來控制PA口和PC口高4位(PC7~PC4),B組控制部件用來控制PB口和PC口低4位(PC3~PC0)。圖6.288255A的內部結構和引腳圖讀/寫控制邏輯用來管理數(shù)據(jù)信息、控制字和狀態(tài)字的傳送,它接收來自CPU地址總線的A1、A0和控制總線有關信號(、、RESET等),向8255A的A、B兩組控制部件發(fā)送命令,用于對8255的端口選擇及讀/寫控制,表6.4給出了8255A的端口選擇及讀/寫控制狀態(tài)表。表6.48255A端口選擇及讀/寫控制狀態(tài)表

2.8255A的控制字與工作方式

8255A有兩種控制命令字:一個是方式選擇控制字,另一個是C口按位置位/復位控制字,其控制字格式如圖6.29所示。初始化時,CPU首先對8255A的控制寄存器寫入方式選擇控制字,選擇8255A的工作方式。在8255A工作期間,如果把一個置位/復位控制字送入8255A的控制寄存器,就能將C口的某一位置1或清0,而不影響其他位的狀態(tài),使C口具有位操作功能。圖6.298255A控制字格式(a)方式選擇控制字格式;(b)C口置位/復位控制字格式

8255有3種工作方式:方式0、方式1和方式2。工作方式的選擇是通過上述寫控制字的方法來完成的。

(1)方式0(基本輸入/輸出方式):A口、B口及C口高4位、低4位都可以設置為方式0輸入或輸出,不需要選通信號。單片機可以用8255A進行數(shù)據(jù)的無條件傳送,數(shù)據(jù)在8255A的各端口能得到鎖存和緩沖。在方式0下,輸入口為緩沖輸入方式,輸出口具有鎖存功能。

(2)方式1(選通輸入/輸出方式):A口和B口都可以獨立地設置為方式1,在這種方式下,8255A的A口和B口通常用于傳送和它們相連外設的數(shù)據(jù),C口作為A口和B口的握手聯(lián)絡線,以實現(xiàn)中斷方式傳送數(shù)據(jù)。

A口和B口為方式1輸入時,C口的定義及握手信號的時序如圖6.30所示。其中,為選通信號,低電平有效,當外設送來信號時,輸入的數(shù)據(jù)被裝入8255A的輸入鎖存器中;IBF是輸入緩沖器滿信號,高電平有效。

IBF是一個狀態(tài)信號,當其為高電平表示輸入口的數(shù)據(jù)尚未被CPU取走時,外設暫時不能向輸入口送新的數(shù)據(jù);INTR是中斷請求信號,高電平有效。當IBF為高電平,且中斷允許信號INTE=1時,INTR=1,向CPU請求中斷。CPU響應中斷后,執(zhí)行輸入指令(產(chǎn)生讀信號為負脈沖),讀取輸入口的數(shù)據(jù),同時的下降沿清除中斷請求信號,的上升沿使IBF=0。圖6.30方式1輸入時的握手信號及時序

INTE為中斷允許控制信號。A口由PC4位的置位/復位狀態(tài)進行控制,B口由PC2位的置位/復位狀態(tài)進行控制。只有PC4或PC2置位時,8255A的A口或B口才會產(chǎn)生中斷請求。若A口和B口為方式1輸入時,PC7、PC6可以用作I/O線,即方式0下的輸入或輸出。

A口和B口為方式1輸出時,C口的定義及握手信號的時序如圖6.31所示。其中,OBF是輸出緩沖器滿信號,低電平有效。該信號為低電平表示CPU已將數(shù)據(jù)送到輸出端口,通知外設可將數(shù)據(jù)取走;是外設產(chǎn)生的響應信號,若該信號有效表示數(shù)據(jù)被外設所接收。當外設接收了輸出端口的數(shù)據(jù)后,INTR為高電平向CPU發(fā)出中斷請求,請求CPU輸出新的數(shù)據(jù)。圖6.31方式1輸出時的握手信號及時序

INTE為中斷允許控制信號。A口由PC6位的置位/復位狀態(tài)進行控制,B口由PC2位的置位/復位狀態(tài)進行控制。只有PC6或PC2置位時,8255A的A口或B口才會產(chǎn)生中斷請求。若A口和B口為方式1輸入時,PC5、PC4可以用作I/O線,即方式0下的輸入或輸出。

(3)方式2(A口的雙向選通輸入輸出方式):只有A口可以設置為方式2,在這種方式下,既能輸入,又能輸出。無論是輸入或輸出都可以用中斷方式,也可以用查詢方式進行數(shù)據(jù)交換。A口為方式2時,C口的定義及握手信號的時序如圖6.32所示。

這時,中斷允許控制信號INTE1由PC6位的置位/復位狀態(tài)進行控制,INTE2由PC4位的置位/復位狀態(tài)進行控制。其他握手信號的定義類似于方式1。

當A口工作在方式2時,B口既可工作在方式0下,又可工作在方式1下。圖6.32方式2的握手信號及時序

3.8255A與系統(tǒng)的連接及應用

由于8255A是Intel公司專為其主機配套設計制造的標準化外圍接口芯片,因此它與51單片機的連接是非常簡單的。圖6.33給出了一個8255A與系統(tǒng)的連接實例。圖6.338255A與系統(tǒng)的連接圖6.33中,P0口為地址/數(shù)據(jù)復用口,數(shù)據(jù)通過P0口直接傳送,地址的低8位通過74LS373鎖存。系統(tǒng)的讀/寫控制及復位信號與8255A的讀/寫及復位端對應相連。系統(tǒng)地址總線的A1、A0直接與8255A的地址線A1、A0對應相連。利用高8位地址線的P2.1作為選通信號,直接與8255A的片選端相連,8255A各個端口的地址如下:

A口地址:FD00H(地址不是惟一的,下同);

B口地址:FD01H;

C口地址:FD02H;

控制寄存器地址:FD03H。例6.4.4

針對圖6.33所示的電路進行編程,用位操作方式進行控制,使8255A的PC5端向外輸出一個寬度為1ms的正脈沖信號。

解若要從PC5端輸出一個正脈沖信號,則可通過對PC5位的置位/復位控制來實現(xiàn)。

由于每送1個控制字,只能對1位作1次置位或復位操作,因此產(chǎn)生1個正脈沖要對PC5位先送置位控制字,經(jīng)過一定的延時后再送復位控制字即能實現(xiàn)。程序如下:

MOVDPTR,#0FD03H;指向8255A的控制口

MOV A,#80H;方式字,A、B和C口均為方式

;0輸出

MOVX@DPTR,A;8255A初始化

MOVA,#OBH;置位/復位控制字,對PC5置1

MOVX@DPTR,A

LCALLDELAY1ms;調用延時子程序DELAY1ms

DECA;對PC5置0

MOVX@DPTR,A

例6.4.5

使用8255A芯片為單片機系統(tǒng)設計打印機接口電路,并編寫打印子程序。

解打印機的主要信號及時序如圖6.34所示。其中,DB0~DB7為數(shù)據(jù)線,向打印機提供數(shù)據(jù)。是數(shù)據(jù)選通信號,利用的負脈沖將DB0~DB7上的數(shù)據(jù)鎖存于打印機內部,由打印機處理并打印該字符。在打印該字符期間BUSY為高電平,表示打印機處于“忙”狀態(tài)。一旦BUSY變?yōu)榈碗娖剑捅硎敬蛴C可以接收下一個數(shù)據(jù)。

打印機的接口電路如圖6.35所示。設8255A的地址為FD00H~FD03H,8255A與系統(tǒng)的具體連接方法如圖6.33所示。圖6.34打印機的主要信號及時序圖圖6.35打印機的接口電路打印子程序采用查詢方式傳送數(shù)據(jù),其功能是打印片內RAM30H單元中的ASCII碼字符。程序如下:

;主程序

MOVDPTR,#0FD03H;指向8255A的命令口

MOVA,#88H;取方式字:A口輸出,C口

;低出高入

MOVX@DPTR,A;送入方式字,8255A初始化MOVA,#01H;C口置位/復位命令字

;(PC0=1)

MOVX@DPTR,A;置PC0初始狀態(tài)為1LCALLPRINT;調打印子程序

;調打印子程序

PRINT:MOVDPTR,#0FD02H;指向C口

LOOP1:MOVXA,@DPRT;讀入C口信息

JBA.7,LOOP1;若BUSY=1,則繼

;續(xù)查詢

MOVDPTR,#0FD00H;指向A口

MOVA,30H;取RAM數(shù)據(jù)

MOVX@DPTR,A;數(shù)據(jù)輸出到A口MOVDPTR,#0FD03H;指向命令口

MOVA,#00H;C口置位/復位命令字(PC0=0)MOVX@DPTR,A;產(chǎn)生STB的下降沿

NOP

MOVA,#01H;改變C口置位/復位命令字

;(PC0=1)

MOVX@DPTR,A;產(chǎn)生STB的上升沿

RET ;返回6.5.1LED點陣式大屏幕顯示器設計

無論是單個LED(發(fā)光二極管)還是LED七段碼顯示器(數(shù)碼管),都不能顯示字符(含漢字)及更為復雜的圖形信息,這主要是因為它們沒有足夠的信息顯示單位。點陣式LED顯示是把很多的LED按矩陣方式排列在一起,通過對各LED發(fā)光與不發(fā)光的控制來完成各種字符或圖形的顯示。最常見的LED點陣顯示模塊為8×8結構,其顯示原理如圖6.36所示。在圖6.36中,只要使LED處于正偏(X方向為1,Y方向為0),

對應的LED就發(fā)光。如X7=1,Y7=0時,則與其對應的右下角的LED會發(fā)

溫馨提示

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

評論

0/150

提交評論