天天看點

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

本節書摘來自異步社群《51單片機應用開發範例大全(第3版)》一書中的第2章,第2.2節,作者 張傑,宋戈,黃鶴松,員玉良,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

用序列槽擴充i/o口非常實用,但是序列槽是按位讀取的,輸入的資料必須重組後才能使用,速度受到限制,同時還需要嚴格的時鐘配合。

在有些場合,利用序列槽擴充i/o口不是很理想,比如bcd碼的輸入及多組速率較高的并行資料的輸入。是以,用并行資料端口擴充i/o口也是很有必要的。

bcd碼由四位二進制數組成,有些裝置直接以bcd碼的形式收發資料。如果這類接口的裝置比較多,就需要擴充4位并行接口。本設計利用單片機4個i/o接口,擴充成4個4位的并行i/o端口,用于4位并行資料的輸入/輸出。

1.8243簡介

8243共有4個4位的并行i/o端口,即p4、p5、p6、p7口,這4個端口均可獨立地設定為輸入口或輸出口。由于各端口均為4位。是以,十分适宜用于bcd碼的輸入/輸出。圖2-7所示為8243引腳圖,具體引腳說明如下。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充
《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

prog信号用于選擇p2口的功能。在進行輸入/輸出時,先通過p2口傳送選擇端口及端口操作方式的控制指令,該指令由prog的下跳沿所存至8243内部的指令寄存器和位址譯碼器,而進行的資料傳送,由prog的上跳沿将資料通過指定的端口輸入/輸出。p2傳送指令時,由p2.1和p2.0指定端口位址,由p2.3和p2.2規定端口的工作方式,各位具體的定義如表2-1所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

表中的“或”、“與”方式是指分别把輸出的資料與被尋址端口的内容進行“邏輯或”以及“邏輯與”運算後再寫入該端口。

2.8243與單片機的接口設計

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

以下是單片機序列槽驅動8243的程式代碼:

可程式設計并行i/o接口晶片8255a是intel公司生産的标準外圍接口電路。它采用nmos工藝制造,用單一+5v電源供電,具有40條引腳,采用雙列直插式封裝。它有a、b、c共3個端口共24條i/o線,可以通過程式設計的方法來設定端口的各種i/o功能。由于它功能強,又能友善地與各種微機系統相連,而且在連接配接外部裝置時,通常不需要再附加外部電路,是以得到了廣泛的應用。

1.8255a的引腳介紹

8255a是一種有40個引腳的雙列直插式标準晶片,其引腳如圖2-9所示。除電源(+5v)和位址外,其他信号可以分為兩組。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

與外設相連接配接的如下。

pa7~pa0:端口a資料線。

pb7~pb0:端口b資料線。

pc7~pc0:端口c資料線。

與cpu相連接配接的如下。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充
《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

2.8255a的工作方式

8255a共有3種工作方式,即工作方式0、工作方式1和工作方式2,這些工作方式可以用軟體程式設計來指定。

(1)工作方式0。

工作方式0也叫基本輸入/輸出方式。這種工作方式不需任何選通信号,端口a、端口b及端口c的高4位和低4位都可以設定為輸入或輸出。作為輸出端口時,輸出的資料均被鎖存;作為輸入端口時,端口a的資料能鎖存,端口b與端口c的資料不能鎖存。

(2)工作方式1。

工作方式1也叫選通輸入/輸出方式。在這種工作方式下,端口a可由程式設計指定為輸入口或輸出口,端口c的高4位用來作為輸入/輸出操作的控制聯絡信号;端口b同樣可由程式設計指定為輸入口或輸出口,端口c的低4位用來作為輸入/輸出操作的控制聯絡信号。在方式1下,端口a和端口b的輸入資料或輸出資料均能被鎖存。

(3)工作方式2。

8255a的工作方式2僅适合于端口a,這種工作方式下,端口a可作為8位的雙向資料傳輸端口,即可發送資料,也可接收資料。端口c的pc7~pc3用來作為輸入/輸出的同步控制信号。此時,端口b和pc2~pc0隻能程式設計為方式0或方式1工作,而端口c剩下的3條線可作為輸入或輸出線使用或用作端口b方式1下的控制線。

3.8255a的控制字及初始化

8255a為可程式設計接口晶片,以控制字形式對其工作方式和端口c各位的狀态進行設定,它有兩種控制字:工作方式控制字和端口c置位/複位控制字。

工作方式控制字用于确定各端口的工作方式及資料傳送方向,其格式如表2-3所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

對工作方式控制字作如下說明。

端口a有3種工作方式,而端口b隻有2種工作方式。

a組包括端口a與端口c的高4位,b組包括端口b與端口c的低4位。

在方式1或方式2下,對端口c的定義(輸入或輸出)不影響作為聯絡使用的端口c各位的功能。

最高位(d7)為标志位,d7為方式控制字。

利用端口c置位/複位控制字可以很友善地使端口c8位任一位清0或置1,控制字的格式如表2-4所示。d7位為控制字的标志位,d7 = 0為端口c置位/複位控制字。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

在使用中,控制字每次隻能對端口c的一位進行置位或複位。

應注意的是,作為聯絡信号使用的端口c各位是不能采用置位/複位操作來使其置位或複位的。其數值應視現場的具體情況而定。

8255a初始化的内容就是向控制寄存器寫入工作方式控制字或端口c置位/複位控制字。

這兩個控制字可按同一位址寫入且不受先後順序限制,因為兩個控制字标志位的狀态不同,是以8255a能加以區分。

例如,對8255a各口作如下設定:端口a方式0輸入,端口b方式0輸出,端口c高位部分為輸出、低位部分為輸入。假設控制寄存器的位址為03ffh,則其工作方式控制字可設定如下。

d0 = 1:端口c低半部分輸入。

d1 = 0:端口b輸出。

d2 = 0:端口b方式0。

d3 = 0:端口c高半部分輸出。

d4 = 0:端口a輸入。

d6d5 = 00:端口a方式0。

d7 = 1:工作方式字标志。

是以工作方式控制字為10010001b,即91h。

4.8255a與單片機的接口電路

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

因為8255a所有的寄存器、i/o端口都對應有讀寫位址,是以可以對8255a的各i/o口和控制字寄存器進行編址。令a15~a8為01111111,a6~a2為11111時,8255a才會工作。

pa位址:7f7ch。

pb位址:7f7dh。

pc位址:7f7eh。

控制字位址:7f7fh。

5.8255a驅動程式設計

8255a的驅動程式主要是涉及對端口a、b、c以及控制字的設定,8255a具體的驅動程式主要包括以下代碼及函數。

(1)管腳定義及函數聲明。

管腳定義是指端口a、端口b、端口c和控制字的位址說明以及狀态标志位的定義;函數的聲明包括端口a、端口b、端口c的讀寫函數和控制字以及c口配置函數,具體代碼如下:

(2)端口a、b、c讀寫函數。

端口a、b、c讀寫函數完成8255a端口a、b、c的資料讀寫,程式代碼如下:

(3)端口c配置函數。

端口c配置函數可實作pc口具體某一位的輸入/輸出設定,程式代碼如下:

(4)寫控制字函數。

寫控制字函數完成對控制字的寫,進而實作對端口a、b、c口輸入/輸出的配置,程式

代碼如下:

8155是intel公司生産的可程式設計多功能接口晶片。它的内部有兩個可程式設計的8位并行i/o口、一個6位并行i/o口、一個14位定時/計數器以及256位元組的ram存儲器。8155可以直接和mcs-51系列單片機連接配接,而不需增加硬體電路,它是單片機應用系統中最常用的晶片之一。8155的結構及引腳如圖2-11所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

8155有3個可程式設計并行i/o端口:端口a、端口b、端口c。其中,端口a和端口b是8位,端口c是6位;1個14位可程式設計定時/計數器和256b的靜态ram,能友善地進行i/o端口擴充和ram擴充。

8155共有40個引腳,按其功能特點分類說明如下。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充
《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

1.8155的工作方式及基本操作

8155可作為通用i/o端口,也可作為片外256b ram及定時器使用,在各種不同類型下使用時的基本操作如下。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

8155的i/o端口各種方式選擇是通過對8155内部指令寄存器指令字來實作的。指令寄存器由8位鎖存器組成,隻能寫入不能讀出。指令字各位定義如表2-6所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

8155的工作狀态由狀态寄存器指出,與指令字寄存器用同一個位址,隻能讀出不能寫入。狀态字的格式如表2-7所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

端口操作如下。

端口a寄存器和端口b寄存器有完全相同的功能,可工作于基本i/o方式或選通i/o方式。

端口c可工作于基本i/o方式,也可作為端口a、端口b選通方式工作時的狀态控制信号線。

當8155設定為方式1和方式2時,端口a、端口b、端口c均工作于基本輸入/輸出方式,由“movx”類指令進行輸入/輸出操作。

設定為方式3時,端口a定義為選通輸入/輸出,由端口c低3位作為端口a聯絡線,端口c其餘位作為i/o端口線。

設定為方式4,端口a、端口b均定義為選通輸入/輸出方式,由端口c作為端口a、端口b的聯絡線。

邏輯組态如表2-8所示。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

intr為中斷請求輸出線,作為cpu的中斷源,高電平有效。當8155的端口a或端口b緩沖器接收到裝置輸入的資料或裝置從緩沖器中取走資料時,中斷請求線intr升高(僅當指令字寄存器相應中斷允許位為1),向cpu請求中斷,cpu對8155的相應i/o端口進行一次讀/寫操作後,intr自動變為低電平。

bf為i/o端口緩沖器标志輸出線,緩沖器存有資料時,bf為高電平,否則為低電平。為裝置選通信号輸入線,低電平有效。

在i/o端口設定為輸出口時,仍可用對應的端口位址執行讀操作,讀取輸出端口的内容;設定為輸入端口時,輸出鎖存器被清除,無法将資料寫入輸出鎖存器。是以每次通道由輸入方式轉為輸出方式時,輸出端總是低電平。8155複位時,清除所有輸出寄存器,3個端口都為輸入方式。

2.8155與單片機的接口電路

圖2-12所示為8155與單片機接口電路。

《51單片機應用開發範例大全(第3版)》——2.2 擴充晶片實作端口擴充

根據圖中連線圖,假設a14~a9均為高電平,8155才工作,是以會有下述資訊。

存儲器位址:0x7f00~0x7fff。

指令/狀态寄存器位址:0x7e00(共有32個位址對應,選期中一個有效位址)。

端口a位址:0x7e01(共有32個位址對應,選期中一個有效位址)。

端口b位址:0x7e02(共有32個位址對應,選期中一個有效位址)。

端口c位址:0x7e03(共有32個位址對應,選期中一個有效位址)。

定時器寄存器a位址:0x7e04(共有32個位址對應,選期中一個有效位址)。

定時器寄存器b位址:0x7e05(共有32個位址對應,選期中一個有效位址)。

3.8155驅動程式設計

8155驅動程式主要是涉及對端口pa、pb、pc、控制字以及定時器的設定,主要包括以下代碼及函數。

(1)相關函數聲明及管腳定義。

管腳定義主要是指端口pa、端口pb、端口pc、控制字以及定時器a、b和存儲器首地

址和相關标志位的定義;函數的聲明涉及存儲器及端口pa、端口pb、端口pc的讀寫函數、中斷的開關函數和定時器相關函數,具體代碼如下。

(2)讀寫外ram函數。

讀寫外ram函數對外部存儲器指定單中繼資料進行讀寫,程式代碼如下。

(3)端口pa、端口pb以及端口pc的讀寫設定函數。

端口pa、端口pb以及端口pc的讀寫設定函數主要完成對8155端口的輸入輸出設定及

資料讀寫,程式代碼如下。

(4)端口pa、端口pb以及端口pc的中斷設定函數。

① 端口pa、端口pb以及端口pc的中斷設定函數完成各個端口的中斷開啟和關斷,程式代碼如下。

② 端口pc上下半口配置函數可實作端口pc上半口配置為pa狀态輸出和pc下半口配置為pb狀态輸出。程式代碼如下。

③ 計數器設定函數完成計數器的起停和讀寫和輸出模式設定,具體程式代碼如下。

繼續閱讀