I/O接口拓展概述
MCS-51單片機具有4個並行8位I/O 口(即P0、P1、P2、P3),原理上這4個I/O 口均可用作雙向並行I/O接口,但在實際應用中,只有當單片機在不使用外部擴展時,才允許這4個I/O 口作為用戶I/O使用,但是這種情況在單片機應用系統開發中幾乎是不可能的。
在單片機應用系統開發中,需要實現單片機對多種外設(如鍵盤、顯示器等)進行控制,I/O接口是MCS-51與外設交換數字信息的橋梁,也屬於系統擴展的一部分。
在這種情況下,可提供給用戶使用的I/O 口只有P1 口和部分P3 口及作為數據總線用的P0 口,而P3 口在應用系統設計中常使用其第二功能。因此,在單片機的I/O 口不夠用的情況下,可以借助外部器件對I/O 口進行擴展。
I/O接口的功能
I/O接口電路應滿足以下要求:
- 實現和不同外設的速度匹配。大多數外設的速度很慢,無法和微秒量級的單片機速度相比。單片機只有在確認外設已為數據傳送做好准備的前提下才能進行I/O操作。想知道外設是否准備好,需I/O接口電路與外設之間傳送狀態信息。
- 輸出數據鎖存。由於單片機工作速度快,數據在數據總線上保留的時間十分短暫,無法滿足慢速外設的數據接收。I/O電路應具有數據鎖存器,以保證接收設備接收。
- 輸入數據三態緩沖。輸入設備向單片機輸入數據時,但數據總線上面可能“掛”有多個數據源,為不發生沖突,只允許當前時刻正在進行數據傳送的數據源使用數據總線,其余的數據源應處於隔離狀態。
I/O端口的編址
在學習I/O端口的編址方法之前,首先要明確接口和端口的概念。在進行單片機應用系統設計時,通常需要多種外設,而這些外設要想接入,就需要用自己的接口和總線上的某個匹配接口匹配對接,這種單片機與外部設備之間的I/O接口芯片就稱為接口。
而單片機在與外設進行通信時,要發數據到某個外設或從外設讀取信息,其實就是從對應的接口電路中多個寄存器或緩沖器獲取信息,這種具有端口地址的寄存器或緩沖器就稱為端口,簡稱I/O 口。對一個系統而言,通常會有多個外設,每個外設的接電路中又會有多個端口,如數據口、命令口、狀態口對於單片機而言,訪問外部設備就是訪問相關的端口,而所有的信息會由接口轉給外設。
對一個系統而言,通常會有多個外設,每個外設的接口電路中又會有多個端口,每個端口都需要一個地址,為每個端口標識一個具體的地址值,是系統必須解決的事,這就需要進行I/O端口的編址。
I/O端口編址分為兩種方式:獨立編址與統一編址。
- 獨立編址方式
I/O寄存器地址空間和存儲器地址空間分開編址,但需一套專門的讀寫I/O的指令和控制信號。 - 統一編址方式
I/O寄存器與數據存儲器單元同等對待,統一編址。不需要專門的I/O指令,直接使用訪問數據存儲器的指令進行I/O操作,簡單、方便且功能強。
MCS-51單片機使用統一編址的方式 每一接口芯片中的一個功能寄存器(端口)的地址就相當於一個RAM單元。
I/O數據的傳送方式
為實現和不同的外設的速度匹配,I/O接口必須根據不同外設選擇恰當的I/O數據傳送方式。
I/O數據傳送的幾種方式是:同步傳送、異步傳送和中斷傳送。
- 同步傳送方式(無條件傳送)
當外設速度和單片機的速度相比擬時,常釆用同步傳送方式,最典型的同步傳送就是單片機和外部數據存儲器之間的數據傳送。 - 異步傳送方式(條件傳送)
査詢外設“准備好”后,再進行數據傳送。
優點:通用性好,硬件連線和査詢程序十分簡單。
缺點:效率不高。
為提高效率,通常采用中斷傳送方式。 - 中斷傳送方式
外設准備好后,發中斷請求,單片機進入與外設數據傳送的中斷服務程序,進行數據的傳送。中斷服務完成后又返回主程序繼續執行,工作效率高。
I/O接口電路
常用的外圍I/O接口芯片如下所述。
- 82C55:可編程的通用並行接口電路(3個8位I/O 口)。
- 8155H:可編程的IO/RAM擴展接口電路(2個8位I/O 口、1個6位I/O 口、256個RAM字節單元、1個14位的減法定時/計數器)。
這些接口引路芯片都可與MCS-51單片機直接連接,接口邏輯十分簡單。此外,74LS系列的TTL電路也可以作為MCS-51單片機的擴展I/O 口,如74LS244、74LS273等。
MCS-51單片機與可編程並行I/O芯片82C55的接口設計
82C55芯片簡介
82C55可編程並行輸入/輸出接口芯片是Intel公司生產的標准外圍接口電路。它釆用NMOS工藝制造,用單一+5V電源供電,具有40個引腳,采用雙列直插式封裝。它有A、B、C三不端口共24條I/O線,可以通過編程的方法來設定端口的各種I/O功能。由於它功能強,又能方便地與各種微機系統相接,而且在連接外部設備時,通常不需要再附加外部電路,所以得到了廣泛的應用。
82C55內部結構
內部結構如圖8-1所示。
- 端口 A、B、C
PA 口:數據輸出鎖存和緩沖;數據輸入鎖存。
PB 口:數據輸出鎖存和緩沖;數據輸入緩沖。
PC 口:數據輸出鎖存;數據輸入緩沖。PC 口可在軟件的控制下,分為兩個4位端口,作為PA 口、PB 口選通方式操作時的狀態控制信號。 ’ - A組和B組控制電路
A組:PA 口和PC 口的上半部(PC7〜PC4);
B組:PB 口和PC 口的下半部(PC3〜PCO),可根據“命令字”對PC 口按位置1或清0。 - 數據總線緩沖器
數據總線緩沖器是一個三態雙向8位緩沖器,作為82C55與單片機數據線之間的接口,傳送數據、指令、控制命令及外部狀態信息。 - 讀/寫控制邏輯電路線
該電路接收CPU發來的控制信號、RESET信號及地址信號Al、A0等,對端口進行讀/寫。
引腳說明
82C55具有40個引腳,采用雙列直插式封裝。
D7-D0:三態雙向數據線,與單片機數據總線連接。
CS:片選信號線,低電平有效,表示本芯片被選中。
RD:讀出信號線,控制82C55中數據的讀出。
WR:寫入信號線,控制向82C55數據的寫入。
Vcc: +5V 電源。
PA7〜PA0: A 口輸入/輸出線。
PB7-PB0: B 口輸入/輸出線。
PC7-PC0: C 口輸入/輸出線。
A1、A0:地址線,用來選擇82C55內部的4個端口。系如表8-1所示。
工作方式選擇控制字及端口PC置位/復位控制字
82C55有3種工作方式:
- 方式0:基本輸入/輸出;
- 方式1:選通輸入/輸出;
- 方式2:雙向傳送(僅A 口有)。
這3種工作方式由方式控制字來決定。
工作方式選擇控制字
82C55的工作方式選擇控制字是用來設定通道的工作方式及數據傳輸方向的,其內部各位的含義如圖8-3所示。
端口 PC置位復位控制字
82C55的端口PC置位復位控制字可以決定PC 口的復位、置位狀態,其內部各位的含義如圖8-4所示。
82C55的3種工作方式
方式0:基本的輸入/輸出方式
在此種工作方式下,MCS-51可對82C55進行數據的無條件傳送。3個數據端口 A、B、C(C分為兩個4位),通過方式選擇控制字可任意選擇其為輸入或輸出口。特別是歸同一組的兩個端口也可分別定位為輸入口或輸出口。CPU只要對82C55執行I/O指令即可輸入/輸出數據。方式0的主要特點如下:
- 具有兩個8位端口(A、B)和兩個4位端口(C的上半部分和下半部分)。
- 任一個端口都可以設定為輸入或輸出,各端口的輸入、輸出可構成16種組合。
- 數據輸出鎖存,輸入不鎖存。
方式1:選通輸入/輸出工作方式
方式1是一種選通輸入/輸出方式,在此種方式下,82C55的A 口、B 口用於與外設進行數據通信時,必須使用C 口作為A 口、B 口的聯絡線,也就是通過C 口為A 口、B 口提供選通信號、應答信號,以實現中斷方式傳輸I/O數據。
方式1輸入
82C55 工作方式1下,端口 A、B用於輸入的方式控制字以及聯絡信號如圖8-4所示。
當82C55工作於方式1輸入狀態下,控制信號STB與IBF構成了一對應答信號聯絡線,各個聯艷號線功能如下:
STB——選通信號,低電平有效。由外設提供的輸入信號,當其有效時,將輸入設備送來的數據鎖存至82C55的輸入鎖存器。
IBF——輸入緩沖器滿信號,高電平有效。82C55輸出的聯絡信號,當其有效時,表示數據已鎖存在輸入鎖存器。
INTE——中斷請求信號,高電平有效。
82C55輸出的信號,可用於向CPU提出中斷請求,要求CPU讀取外設數據。
下面以A口的方式1輸入為例,介紹方式1輸入的工作過程以及各控制信號聯絡線的功能。
如圖8-5所示,MCS-51單片機通過82C55擴展一外部設備,該外設通過I/O 口將外部信號讀入,並與82C55的PC4、PC5引腳形成應答信號聯絡線,並通過數據總線將外部設備的數據傳輸到單片機中,具體工作過程如下:
- 當外設的數據已經送到PA0〜PA7上時,輸入設備將自動在STBa上向82C55發送一個低電平選通信號。
- 82C55在接收到這個選通信號后,首先將PA0〜PA7上的數據鎖存到A口的輸入數據緩沖/鎖存器上,然后將IBFa變為高電平,以通知外設,82C55己經接收到它送來的數據。
- 82C55檢測到STBa上的信號由低電平變為高電平,並且IBFa為高電平以及INTEa為1時,使輸出線INTRa變為高電平,向單片機發出中斷信號。
- 單片機在接收到中斷信號后,響應中斷,並通過程序讀取由數據總線上傳來的數據,當讀取完成后,82C55撤銷INTRa上的中斷請求,並使IBFa變為低電平,以通知外設可以傳送下一個數據。
方式1輸出
當82C55工作於方式1輸出狀態下,控制信號面OBF與ACK構成了一對應答信號聯絡線,各聯絡信號線功能如下。
OBF——輸出緩沖器滿信號,低有效。82C55輸出給外設的一個控制信號,當其有效時,表示CPU已把數據輸出給指定的端口,外設可以取走。
ACK——響應信號,低電平有效,外設的響應信號,指示82C55的端口數據已由外設接收。
INTR——中斷請求信號,高有效,當輸出設備已接收數據后,82C55輸出此信號向CPU提出中斷請求,要求CPU繼續提供數據。
INTE——中斷允許由PC6 (端口 A)或PC2 (端口 B)的置位/復位控制。
82C55工作方式1下,端口 A、B用於輸出的方式控制字及聯絡信號如圖8-6所示。
下面以A 口的方式1輸出為例,介紹方式1輸出的工作過程以及各控制信號聯絡線的功能,其電路連接示意圖如圖8-7所示。
如圖所示,MCS-51單片機通過82C55擴展一外部設備,該外設通過I/O 口將外部信號輸出,並與82C55的PC7、PC6引腳形成應答信號聯絡線,通過數據總線將單片機中的數據傳輸到外部設備,具體工作過程如下。
- 單片機通過指令將數據通過數據總線傳輸到82C55的A口數據輸出鎖存器上,82C55接收到數據后,將OBFa信號線變為低電平,以便通知外設輸出數據已在A口 PA0〜PA7。
- 輸出設備在接收到OBFa上的低電平后,先將PA0〜PA7的數據取走,然后將ACKa信號線變為低電平,以便通知82C55輸出設備已接收到輸出數據。
- 82C55從應答輸入線ACKa接收到低電平后對OBFa和中斷允許控制位INTEa狀態進行檢測,若皆為低電平,則INTRa變為高電平而向單片機發出中斷請求。
- 單片機響應INTRa的中斷信號后,可通過程序將下一個輸出數據送到82C55的A 口的輸出鎖存器上。
方式2:雙向傳輸工作方式
只有A口才可設定為方式2。
82C55工作在方式2下時,其A端口(PA0〜PA7)8根口線既可以輸出數據,也可以輸入數據。
此外,在方式2,要用到端口C的5根口線為端口A提供相應的聯絡信號。當A端口(PA0〜PA7)作為輸入總線使用時,其控制聯絡線為STBa及IBFa,其工作過程和方式1輸入時相同;
當A端口(PA0〜PA7)作為輸出總線使用時,其控制聯絡線為OBFa和ACKa,其工作過程和方式1輸出時相同。82C55工作方式2下,各信號聯絡線如圖8-8所示。
MCS-51單片機和82C55的接口設計
硬件接口電路設計
如圖8-9所示為89S51單片機擴展82C55的擴展參考電路圖,在擴展中,釆用總線擴展的形式,即通過地址總線確定端口地址,通過數據總線進行數據傳遞。
圖中74LS373是地址鎖存器,用來實現P0 口的地址/數據復用的鎖存功能,其設計原理與在進行存儲器擴展時所涉及的原理相同。
P2.0與82C55的CS引腳相連,用來進行片選;P2.6與P2.7分別與82C55的A0、A1相連,用來確定端口地址;P2 口其余引腳懸空。單片機的WR與RD引腳分別與82C55的WR和RD引腳相連,用於產生讀、寫信號。
82C55的端口地址確定
確定82C55的端口地址是進行82C55操作的關鍵步驟之一,通過得到的端口地址,就可以實現對82C55的I/O 口操作。
在圖中,MCS-51單片機的P2.0引腳與82C55的CS引腳相連,P2.6與P2.7分別與82C55的A0、A1相連,想要選中需要的端口,首先要將與CS相連的P2.0置0,根據各端口地址的不同將與A0、A1相連的P2.6與P2.7按照需要置1,而其他未用到的地址線引腳置1,則根據各端口的工作狀態與控制信號的關系表可以得知,82C55的端口 A、端口 B、端口 C、方式控制字端口地址分別為:
3FFFH、7FFFH、BFFFH、FFFFH
用MCS-51單片機的串行口擴展並行口
在單片機應用系統中常采用串行口對並行口進行擴展的方法,在此種方法下,釆用串行口擴展外部芯片實現串入並出或並入串出。
利用單片機串口方式0進行擴展,MCS-51串口方式0是一種移位寄存器工作方式,在這種方式下其波特率是固定的,為focs/12,數據由RXD端輸入或輸出,同步移位時鍾由TXD輸出,發送、接收數據為8位,低位在前,高位在后。
常用的並行輸入串行輸出的芯片有74LS165、CD4014、74HC597等;常用的串行輸入並行輸出的芯片有74LS164、CD4094、74HC595等。下面以74LST64、74LS165為例,對串行擴展的方法進行介紹。
用74LS165拓展並行輸入口
74LS165是8位並行輸入/串行輸出移位寄存器,當移、位/置入端(S/L)由高到低跳變時,並行輸入端的數據被置入寄存器(並行輸入);當S/L=1, 且時鍾禁止端(第15腳)為低電平時,允許時鍾輸入,這時在時鍾脈沖的作用下,數據由A到G方向移位(串行輸出)。
如圖8-10所示,TXD (P3.1)作為移位脈沖輸出端與所有74LS165的移位脈沖輸入端CP相連;RXD (P3.0)作為串行輸入端與74LS165的串行輸出端Q7相連;P1.2用來控制74LS165的移位與置入而同S/L相連;74LS165的時鍾禁止端(15腳)接地,表示允許時鍾輸入。當擴展多個8位並行輸入口時,兩芯片的首尾(Q7與SIN)相連。
用74LS164擴展畀行輸出口
74LS164是8位串行輸入/並行輸岀移位寄存器,在MCS-51單片機使用74LS164擴展時,單片機RXD (P3.0)引腳接74LS164芯片的串行數據輸入端A、B (1、2引腳),單片機TXD (P3.1)引腳接74LS164芯片的移位脈沖輸入端CLK (8引腳),在移位時鍾脈沖(P3.1)的作用下,串行口發送的數據一位一位地從RXD引腳移入到74LS164中。
其接口電路如圖8-11所示。