單片機接口擴展
教學目標
介紹單片機程序存儲器的擴展方法
介紹單片機數據存儲器的擴展方法
介紹單片機I/O口的擴展方法
學習要求
熟悉單片機片外三總線結構和擴展能力
掌握單片機接口擴展EPROM,RAM,I/O口方法
掌握地址譯碼及片選方法
了解單片機總線驅動能力和擴展方法
通常情況下,采用8051/8751/89C51的最小應用系統最能發揮單片機體積小,成本低的優點.但在很多情況下,構成一個工業測控系統時,考慮到傳感器接口,伺服控制接口以及人機對話接口等的需要,最小應用系統常常不能滿足要求,因此,必須在片外擴展相應的外圍芯片,這就是單片機接口擴展.它包括程序存儲器(ROM)擴展,數據存儲器(RAM)擴展,I/O口擴展,定時/計數器擴展,中斷單片機接口擴展以及其它特殊功能擴展等.
7.1 MCS-51系列單片機的外部擴展性能
7.1.1 MCS-51系列單片機的片外總線結構
為了滿足單片機接口擴展要求,MCS-51系列單片機的片外引腳可以構成圖7-1所示的三總線結構,即地址總線(AB),數據總線(DB)和控制總線(CB).所有的外部芯片都是通過這三組總線進行擴展.
圖7-1 單片機的片外三總線結構
高8位地址
低8位地址 16位地址總線
__
8位數據總線
控制總線
_
P2口
ALE
8051
P0口
RD
EA WR
PSEN
地址
鎖存器
1.地址總線(AB)
地址總線寬度為16位,因此可尋址范圍為216=64KB.地址總線由P0口提供低8位地址A7~A0,由P2口提供高8位地址A15~A8.
2.數據總線(DB)
數據總線由P0口提供,其寬度為8位.
3.控制總線(CB)
控制總線包括片外單片機接口擴展用線和片外信號對單片機的控制線.
, :用于片外數據存儲器(RAM)的讀寫控制.當執行片外數據存儲器操作指令MOVX時,這兩個信號自動生效.
:用于片外程序存儲器(EPROM)的讀數控制.
ALE:用于鎖存P0口輸出的低8位地址的控制線.通常,ALE在P0口輸出地址期間用其下降沿控制鎖存器鎖存地址數據.
:用于選擇片內或片外程序存儲器.當 =0時,只訪問片外程序存儲器,而不管片內有無程序存儲器.因此,在擴展并使用外部程序存儲器時,必須將 接地.
7.1.2 MCS-51系列單片機的單片機接口擴展能力
根據地址總線寬度,MCS-51系列單片機在片外可擴展的存儲器最大容量為64KB,地址范圍為0000H~FFFFH.
1.片外數據存儲器與程序存儲器的地址范圍一樣為64KB,地址也可重復,它們由單片機不同的指令和控制信號區分:讀片外程序存儲器的指令為MOVC,讀寫片外數據存儲器的指令為MOVX;讀片外程序存儲器的控制信號為 ,讀寫片外數據存儲器的控制信號為 和 .
2.片外數據存儲器與片內數據存儲器的地址可重復,但操作指令不同.對片內數據存儲器讀寫的指令為MOV,對片外數據存儲器讀寫的指令為MOVX.
3.為配置外圍設備而需要擴展的I/O接口,如A/D,D/A等,與片外數據存儲器統一編址,
7.1.3 MCS-51系列單片機的總線驅動能力及擴展方法
一,總線的驅動能力
MCS-51系列單片機作為數據總線和低8位地址總線的P0口可驅動8個LSTTL電路,而P1,P2,P3只能驅動4個LSTTL電路.當應用系統規模過大時,可能造成負載過重,致使驅動能力不夠,系統不能可靠地工作.
二,總線的擴展概述
在設計計算機應用系統硬件電路時,首先要估計總線的負載情況,以確定是否需要對總線的驅動能力進行擴展.
地址總線和控制總線為單向的,可采用單向三態線驅動器(如74LS244)進行驅動能力的擴展.數據總線為雙向的,必須采用雙向三態線驅動器(如74LS245)進行驅動能力的擴展.
7.2 MCS-51系列單片機存儲器擴展
7.2.1程序儲存器擴展
一,_ 儲存器擴展概述
外部程序存儲器芯片與單片機可按如下方式連接:
1.地址線的連接
外部程序存儲器低8位地址線A0~A7與P0口的口線P0.0~P0.7對應相連;外部程序存儲器高8位地址線A8~A15與P2口的口線P2.0~P2.7對應相連.
2.數據線的連接
外部程序存儲器8位數據線D0~D7與P0口的口線P0.0~P0.7對應相連.
3.控制線的連接
(片外程序存儲器取指信號)和 (程序存儲器輸出允許信號)相連;ALE(地址鎖存允許信號)和 (地址鎖存器鎖存信號)相連; (片內/片外程序存儲器選擇信號),當選用8031/8032時,應接地;單片機的相關地址線經過地址譯碼和程序存儲器的片選信號 相連.
由上面論述可以得到外部擴展程序存儲器的一般連接方法,見圖7-2所示.
圖7-2 單片機的外部程序存儲器一般連接方法
地址
鎖存器
P2.7
P2.0
ALE
8031
P0.7~P0.0
EA PSEN
A15
A8
A7外部程序
A0存儲器
D7~D0
OE
二,程序儲存器EPROM的擴展
1.使用單片EPROM的擴展電路
圖7-3為8031單片機外接一片EPROM 27256的擴展電路.
圖7-3 8031單片機擴展一片27256的電路
27256的 端是輸出使能端,與8031的
端相連,當 有效時,把27256中的指令送上P0口線.由于只擴展一片EPROM,27256的片選端 可直接接地.27256的編程電壓端VPP接電源.
當用戶熟悉了其它EPROM芯片后,很容易改成其它容量EPROM的單片擴展電路:擴展27128時,去掉P2.7引出線,將27128的27腳接Vcc;擴展2764時,去掉P2.6,P2.5引出線,并將2764的27腳接Vcc,26腳不接;擴展2732時,去掉P2.6,P2.5和P2.4引出線;擴展2716時,去掉P2.6,P2.5,P2.4和P2.3引出線,并將2764的Vpp接Vcc即可.
3.使用多片EPROM的擴展電路
在擴展多片EPROM時,所有芯片的片選端都必須按照地址線進行選擇.芯片的片選是在保證對EPROM片內存儲空間尋址條件下,使用剩余的地址線進行的,分為線選法和譯碼法.現以擴展多片2764 EPROM為例來說明這兩種片選法:
2764的片內地址為8K,因此片內尋址需占用A12~A0的13根地址線,尚剩余3根地址線A13,A14,A15,采用線選法時,剩余的三根地址線每根可接一個芯片的片選信號,則只能擴展3片2764,見圖7-4(a)所示;采用譯碼法時,剩余三根地址線經過3-8譯碼得到8根片選信號,可擴展8片2764,見圖7-4(b)所示.
圖7-4(a) 線選法擴展三片2764的電路
圖7-4(b) 譯碼法擴展三片2764的電路
目前,隨著大容量EPROM的出現,像圖7-4(b)這種多片地址譯碼的方法已不太常用,它完全可以用兩片27256代替.對于擴展兩片27256 EPROM的電路如圖7-5所示,它是帶反相器的線選法:用一根地址線,使它不經反相器和經反向器后分別連接到兩個EPROM的片選.
圖7-5 兩片27256的擴展電路
三,作為程序儲存器EEPROM的擴展
電擦除可編程只讀存儲器EEPROM(Electrically Erasable PROM)具有能在應用系統中進行在線改寫,并可在斷電情況下保存數據而不需保護電源等優點,在智能儀表,控制裝置,分布式監控系統子站以及開發裝置中得到了廣泛的應用.
圖7-6為8031單片機的EEPROM 28C16的擴展電路,圖中使用了控制線 , , .圖中 線是 由 和
相"與"后提供,無論 有效還是 有效都能使28C16的輸出允許端有效,這種聯接方法是把EEPROM既作為程序存儲器,也作為數據存儲器用;28C16的 與8031的 相連,單片機可以向28C16寫指令數據或數據,表格;28C16的 與8031的P2.7進行線選,當系統中有其它程序存儲器或數據存儲器時,要統一考慮地址選擇.
7.2.2數據儲存器擴展
一, 數據儲存器擴展概述
外部數據存儲器芯片與單片機可按如下方式連接:
1.地址線的連接
外部程序存儲器低8位地址線A0~A7與P0口的口線P0.0~P0.7對應相連;
外部程序存儲器高8位地址線A8~A15與P2口的口線P2.0~P2.7對應相連.
2.數據線的連接
外部程序存儲器8位數據線D0~D7與P0口的口線P0.0~P0.7對應相連.
3.控制線的連接
(單片機片外數據讀信號)和 (數據存儲器讀信號)相連;
ALE(單片機地址鎖存允許信號)和G(地址鎖存器鎖存信號)相連;
(單片機片外數據寫信號)和 (數據存儲器寫信號)相連;
單片機的相關地址線經過線譯碼或地址譯碼和數據存儲器的片選信號 相連.
由上面論述可以得到外部擴展數據存儲器的一般連接方法,見圖7-6所示.
圖7-6 單片機的外部數據存儲器一般連接方法
地址
鎖存器
P2.7
P2.0
ALE
8031
P0.7~P0.0
EA WR
RD
A15 CE
A8
A7
A0 外部數據
存儲器
D7~D.0
WE
RD
訪問外部數據區可只采用低8位地址線尋址,這時可尋址空間為256B,采用下面讀,寫指令來訪問此數據存儲區:
MOVX A,@Ri (i=0,1)
MOVX @Ri,A (i=0,1)
由于8位尋址指令所占字節少,指令執行速度快,故在數據量不大的情況下,應盡可能采用這種8位尋址指令.在單片機系統中通常選用8155外圍芯片,其內部的256B就可以作為外部擴展RAM使用.
也可以采用16位地址線尋址外部數據區,這時可尋址空間為64KB,采用下面8位尋址指令來讀,寫此數據存儲區:
MOVX A,@DPTR
MOVX @DPTR,A
當外部RAM容量較大(大于256B)時,采用此尋址方法.
二,數據儲存器靜態RAM的擴展
由于單片機是面向測,控為主的,實際所需要的數據存儲器的擴展容量不會很大,所以在擴展時為了電路的簡單,一般使用靜態RAM,如6116和6264.
圖7-7為擴展單片6116時的電路.前面講過,擴展單片程序存儲器時,片選端直接接地即可,因為系統中不會再有其它程序存儲器芯片.但擴展單片數據存儲器時,其片選端能否直接接地則還要考慮應用系統中有無I/O口及外圍設備擴展,如果有,則要統一進行片選選擇.
圖7-7 6116的擴展電路
三,作為數據儲存器EEPROM的擴展
EEPROM兼有程序存儲器與數據存儲器的特點,故在單片機應用系統中既可作為程序存儲器,又可作為數據存儲器.作為程序存儲器,其操作主要是程序運行操作,必須嚴格按照程序存儲器的地址總線,數據總線,控制總線的聯接方式.而將EEPROM作為數據存儲器時,與單片機的接口較靈活,既可直接將EEPROM作為片外數據存儲器擴展,也可以作為一般外圍設備電路擴展,而不影響數據的存取.
圖7-8為并行EEPROM的數據存儲器擴展電路.圖中2816A可按照典型的數據存儲器擴展電路聯接方式,如2814A(1)芯片.也可以作為外設電路,通過擴I/O口8255連接,如2816A(2).可以看出,作為數據存儲器時其電路連接較為靈活.2816A(2)工作時,要使8255進入工作狀態(P2.7使8255有效),2816A所需的地址采用通過8255用MOVX指令送入.
圖7-8 28C16作為數據存儲器的擴展電路
7.3 MCS-51系列單片機I/O口擴展
MCS-51單片機共有四個8位并行I/O口,但這些I/O口并不能完全提供給用戶使用.只有對于片內有ROM/EPROM/FLASH-RAM單片機8051/8751/89C51,在不使用外部擴展時,才允許這四個I/O口作為用戶I/O口使用.然而對于大多數使用8031以及使用8051/8751/89C51需外部擴展時,MCS-51單片機可提供給用戶使用的I/O只有P1口和部分P3口線.因此,在大部分的MCS-51單片機應用系統設計中都不可避免地要進行I/O口的擴展.
擴展I/O口可以通過MCS-51單片機的數據總線進行,也可以利用移位寄存器通過MCS-51單片機的串行口進行.
7.3.1通過數據總線擴展
通過數據總線擴展I/O口,是采用外部數據存儲器映射方式進行輸入,輸出的,與外部數據存儲器的擴展在方法上是基本相同的.從功能上看,通過數據總線擴展的I/O口有兩種基本類型:簡單I/O口擴展和可編程I/O口的擴展.
一,采用簡單并行I/O接口芯片擴展
P0口是數據總線口,通過P0口擴展I/O口時,P0口只能分時使用,故輸出時,接口電路應具有鎖存功能,如采用8D鎖存器74LS273,74LS373,74LS377組成輸出口;輸入時,接口電路應能三態緩沖,如采用8位三態緩沖器74LS244組成輸入口.
1.用三態門擴展8位輸入并行口
圖7-9是用74LS244通過P0口擴展的8位并行輸入接口.74LS244由兩組4位三態緩沖器組成,分別由選通端和控制.當它們為低電平時,這兩組緩沖器被選通,數據從輸入端A送到輸出端Y. 和 同時由P2.7和相或后控制,由此可知74LS244的地址為7FFFH,其數據的輸入使用以下幾條指令即可:
MOVX DPTR,#7FFFH ;數據指針指向74LS244口地
址
MOVX A,@DPTR ;讀入數據
圖7-9 簡單I/O口的擴展電路
2.用鎖存器擴展簡單的8位輸出口
圖7-9是用74LS273通過P0口擴展的8位并行輸出接口.74LS273是帶三態門控的鎖存器,CLR為數據清零端,其為低電平時有效,故此處應接高電平.CLK為鎖存時鐘端,由P2.7和相或后控制,當同時為低電平時,將P0口的數據鎖存到74LS273.因此74LS273的地址為7FFFH,和輸入口地址相同,但由于它們分別由和信號控制,仍然不會發生沖突.其數據的輸出使用以下幾條指令即可:
MOVX DPTR,#7FFFH;數據指針指向 74LS273口地址
MOVX A,#data ;輸出數據要通過累加器傳送
MOVX @DPTR,A ;P0口通過74LS273輸出數據
當要擴展多個簡單的8位輸入口和輸出口,多個74LS244的選通端和和多個74LS273的鎖存時鐘CLK,應采用類似前面所講述的多片EPROM擴展時的片選方法.但要注意8031的I/O口驅動能力,在實際應用時,要根據負載的大小適當增設驅動電路.
二,采用可編程并行I/O接口芯片擴展
在單片機接口中,常使用一些結構復雜的接口芯片,以完成各種復雜的操作.這類芯片一般具有多種功能,在使用前,必須由CPU對其編程,以確定其工作方式,之后才能使芯片按設定的方式進行操作,這就是可編程接口.下面將通過使用8255擴展并行I/O口重點說明這個問題.
1. 8255的初始化
使用8255時,首先要由CPU對8255寫入控制命令字,有兩種控制命令字:一個是方式選擇控制字,另一個是C口按位置位/復位控制字,8255的各種工作方式都要由控制命令字來設定,這個設置過程稱為"初始化".
(1)方式選擇控制字(D7=1)
D0~D2三位用來對B組的端口進行工作方式設定.D2設置B口的工作方式,D2=1為方式1;D2=0為方式0.D1位設定B口的輸入或輸出,D1=1為輸入;D1=0為輸出.D0位設定C口的低半部,D0=1為輸入,D0=0為輸出.
D3~D6四位用來對A組的端口進行設定.D6D5組合起來設定A口工作方式,D6D5=00,為方式0;D6D5=01為方式1;D6D5=10和11都為方式2.D4位用來設定A口的輸入或輸出.D3位用來設定C口上半部的輸入或輸出,D3=1為輸入,D3=0為輸出.
(2)_ C口按位置/復位控制字(D7=0)
因為C口共有8個二進制位,要確定對其中某一位進行操作,就要在控制字中指定該位的編號.圖中用了D3D2D1三位的編碼與C口的某一位相對應,對指定位進行的操作則由D0確定,如D0=1時,將指定位置"1".D0=0則將指定位置"0".
2. 8255和8031的接口方法
MCS-51單片機與8255的接口邏輯簡單,其接口電路如圖7-10所示.圖中,8255的片選信號及口地址選擇線A0,A1分別由8031的P0.7和P0.0,P0.1經地址鎖存后提供.故8255的A,B,C口及控制口地址分別為FF7CH,FF7DH,FF7EH,FF7FH.8255的復位端與8031的復位端相連,都接到8031的復位電路上.
_
圖7-10 8031與8255接口電路
7.3.2通過串行口擴展
一,用并入串出移位寄存器擴展并行輸入口
圖7-11是利用兩片74LS165擴展2個8位并行輸入口的電路.74LS165是8位并行輸入串行輸出移位寄存器,單片機的RXD(P3.0)作為串行數據輸入端與74LS165的串行輸出端Q7相連;單片機的TXD(P3.1)為移位脈沖輸出端,與所有的74LS164芯片的移位脈沖輸入端CLK相連;用1根I/O線(P1.0)與74LS165的移位/置位端相連,來控制其移位與置位.當 為低電平時,并行數據置入74LS165的寄存器;當 為高電平時,開始串行移位.當擴展多個8位輸入口時,相鄰兩芯片的首尾(串行輸出端Q7與串行輸入端SER)相連.
串行接收時,由RI引起中斷或對RI查詢來決定何時接受下一個字符(在采用查詢方式時,也需預先關閉中斷).
單片機擴展中斷的簡便方法(zz)
MCS—51系列單片機內部只有兩個外部中斷源輸入端,當外部中斷源多于兩個時,就必須進行擴展,下面介紹兩種簡單的擴展方法:
一、采用硬件請求和軟件查詢的方法:
這種方法是:把各個中斷源通過硬件“或非”門引入到單片機外部中斷源輸入端(INT0或INT1),同時再把外部中斷源送到單片機的某個輸入輸出端口,這樣當外部中斷時,通過“或非”門引起單片機中斷,在中斷服務程序中再通過軟件查詢,進而轉相應的中斷服務程序。顯然,這種方法的中斷優先級取決于軟件查詢的次序。其硬件連接和軟件編程如下:
Void zhongduan (void) interrupt 0 using 3 //中斷函數
{
EX0=0;//關中斷
If(P0_0=1) { *****}//中斷查詢
If(P0_1=1) { *****}//中斷查詢
If(P0_2=1) { *****}//中斷查詢
EX0=1;開中斷
}
二、用定時器/計數器作外部中斷
單片機的定時器/計數器是一個加一計數器,每當計數輸入端有一個“1—0”的負跳變時,計數器加一,當加一計數器溢出時,就向CPU發出中斷,利用這個特性來擴展中斷的方法是:首先把定時器/計數器設置成計數方式,并預置滿值,把外部中斷源輸入到P3口第4引腳或第5引腳(計數器輸入端),這樣就可以利用定時器/計數器作為單片機外部中斷了。注意這種方法的中斷服務的入口地址應在000BH或001BH。
圖7-11 利用串行口擴展并行輸入口
下面程序為利用圖7-11讀入16位數據并存入8031的片內RAM30H和31H兩個端單元中:
MOV R0,#30H ;建立指針
MOV R7,#02H ;字節計數初值
CLR P1.0 ;=0,并置入數據
SETB P1.0 ;=1,允許串行移位
LOOP:MOV SCON,#10H ;置串行口方式0,REN=1,RI=0
NB RI,$ ;等待一幀數據接受完
MOV A,SBUF ;讀接受數據
MOV @R0,A ;存入RAM緩沖區
INC R0 ;調整指針
DJNZ R7,LOOP ;數據未接受完,繼續
CLR RI ;清接收標志
二,采用串入并出移位寄存器擴展并行輸出口
圖7-12是利用兩片74LS164擴展2個2位輸出口的接口電路. 74LS164是8位串入并出移位寄存器,單片機的RXD(P3.0)為串行輸出與74LS164數據輸入端(1,2)相連;TXD(P3.1)為移位脈沖輸出,與74LS164的時鐘脈沖輸出端(8)相連;由P1.0口線控制74LS164的清除端
(9).當 為低電平時,清除74LS165中的數據;當 為高電平時,開始串行移位.當擴展多個8位輸入口時,相鄰兩芯片的首尾(串行輸出端Q7與串行輸入端A,B)相連.
圖7-12 利用串行口擴展并行輸出口
下面程序為利用圖7-12擴展一個16位并行輸出口,將8031的片內RAM30H和31H兩個單元中的數據通過兩片74LS164輸出:
MOV R0,#30H ;建立指針
MOV R7,#02H ;字節計數初值
SETB P1.0 ;=1,清零端無效
LOOP:MOV SCON,#10H ;置串行口方式0,REN=1,RI=0
MOV A,@R0 ;取RAM緩沖區內容
MOV SBUF,A ;發送
JNB RI,$ ;等待一幀數據發送完
INC R0 ;調整指針
DJNZ R7,LOOP ;數據未發送完,繼續
CLR TI ;清發送標志
應當指出,再兩次發送過程中,兩片74LS164的16位輸出端是連續變化的.每個移位脈沖使數據自Q0向Q7方向移動一位,待兩個字節全部發送完畢時,輸出穩定下來.
小 結
在很多情況下,構成一個單片機應用系統時,考慮到傳感器接口,伺服控制接口以及人機對話接口等的需要,必須在片外擴展相應的外圍芯片,這就是單片機接口擴展.它包括程序存儲器(ROM)擴展,數據存儲器(RAM)擴展,I/O口擴展等.
MCS-51單片機片外引腳可以構成三總線結構,即地址總線(AB),數據總線(DB)和控制總線(CB),所有的外部芯片都是通過這三組總線進行擴展.由于P0口分時用作數據總線和地址總線的低8位,因此必須采用地址鎖存器將P0口輸出的低8位地址進行鎖存.
根據地址總線寬度,在片外可擴展的程序存儲器和數據存儲器最大容量都為64KB,地址范圍為0000H~FFFFH.擴展的程序存儲器和數據存儲器的地址范圍雖然相同,但可通過不同的指令和控制信號加以區別.讀片外程序存儲器采用MOVC指令和 取指信號 ;讀和寫片外數據存儲器采用MOVX指令和 ,
片外數據讀,寫信號.
擴展的I/O口與片外數據存儲器采用統一編址,這樣做的優點是不必為擴展的I/O另外提供地址線,減少單片機的引腳數.但當應用系統需要擴展較多的I/O口時,要占去大量的數據存儲器的地址.
當片外擴展單一芯片(存儲器和I/O芯片)時,該芯片的片選信號可以直接接地;當擴展多片程序存儲器或多片數據存儲器(包括I/O口芯片)時,所有芯片的片選端都必須按照地址線進行選擇,常用線選法或地址譯碼法.
片外擴展的程序存儲器常用EPROM和EEPROM,片外擴展的數據存儲器常用靜態RAM和EEPROM.擴展I/O口常用數據總線進行,在串行口不作它用時,還可以用串行口外接并入串出移位寄存器和串入并出移位寄存器,擴展并行輸入口和并行輸出口.用數據總線擴展并行I/O時,可采用簡單的8位三態緩沖器和8位三態鎖存器擴展并行輸入口和輸出口,也可以采用可編程I/O芯片擴展并行I/O口.
思考題與習題七
1.MCS-51單片機與外部擴展的存儲器相接時,為何低8位地址信號需通過地址鎖存器,而高8位不需經過地址鎖存器
2.在MCS-51擴展系統中,程序存儲器和數據存儲器共有16位地址和8位數據線,為什么兩個存儲空間不會發生沖突
3.利用74LS138設計一個譯碼電路,分別選中8片6116,且列出各芯片所占的地址空間范圍.
4.程序存儲器的擴展和數據存儲器的擴展有何異同 試在8031芯片外采用2732作ROM,6116作RAM,擴展具有12KB ROM和6KB RAM的存儲系統.
5.8255芯片內部有哪幾個主要部分 各部分的功能如何
6.用8255和8031構成一個EPROM2732的編程器接口,該系統含2K字節的EPROM外部程序存儲器和兩片6116共4K字節的數據存儲器.用8255作為EPROM2732的編程器接口,8255的A,B,C口均設置為方式0輸出,A口作為編程數據輸出口,B口為編程器的低8位地址輸出口,PC0~PC3為高4位地址輸出口,PC7為編程信號輸出端.試設計該編程器的硬件電路和編程寫出子程序.
7.試利用8031的串行口設計一個接口電路和相應的軟件,用于讀取8位開關信號,并用8個LED顯示對應開關的狀態.
單片機擴展中斷的簡便方法(zz)
MCS—51系列單片機內部只有兩個外部中斷源輸入端,當外部中斷源多于兩個時,就必須進行擴展,下面介紹兩種簡單的擴展方法:
一、采用硬件請求和軟件查詢的方法:
這種方法是:把各個中斷源通過硬件“或非”門引入到單片機外部中斷源輸入端(INT0或INT1),同時再把外部中斷源送到單片機的某個輸入輸出端口,這樣當外部中斷時,通過“或非”門引起單片機中斷,在中斷服務程序中再通過軟件查詢,進而轉相應的中斷服務程序。顯然,這種方法的中斷優先級取決于軟件查詢的次序。其硬件連接和軟件編程如下:
Void zhongduan (void) interrupt 0 using 3 //中斷函數
{
EX0=0;//關中斷
If(P0_0=1) { *****}//中斷查詢
If(P0_1=1) { *****}//中斷查詢
If(P0_2=1) { *****}//中斷查詢
EX0=1;開中斷
}
二、用定時器/計數器作外部中斷
單片機的定時器/計數器是一個加一計數器,每當計數輸入端有一個“1—0”的負跳變時,計數器加一,當加一計數器溢出時,就向CPU發出中斷,利用這個特性來擴展中斷的方法是:首先把定時器/計數器設置成計數方式,并預置滿值,把外部中斷源輸入到P3口第4引腳或第5引腳(計數器輸入端),這樣就可以利用定時器/計數器作為單片機外部中斷了。注意這種方法的中斷服務的入口地址應在000BH或001BH。