《微型計(jì)算機(jī)原理及應(yīng)用》課件第6章_第1頁(yè)
《微型計(jì)算機(jī)原理及應(yīng)用》課件第6章_第2頁(yè)
《微型計(jì)算機(jī)原理及應(yīng)用》課件第6章_第3頁(yè)
《微型計(jì)算機(jī)原理及應(yīng)用》課件第6章_第4頁(yè)
《微型計(jì)算機(jī)原理及應(yīng)用》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩392頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

6.1簡(jiǎn)單接口6.2可編程并行接口82556.3可編程定時(shí)器82536.4可編程串行接口82506.5鍵盤(pán)接口6.6打印機(jī)接口6.7顯示器接口6.8光電隔離輸入/輸出接口6.9數(shù)/模(D/A)變換器接口6.10模/數(shù)(A/D)變換器接口習(xí)題6.1簡(jiǎn)單接口6.1.1三態(tài)門(mén)

在本書(shū)的第2章中,曾描述過(guò)由8個(gè)三態(tài)門(mén)構(gòu)成的芯片74LS244。在那里,244是作為信號(hào)驅(qū)動(dòng)器使用的。在第5章的圖5.2中,描述過(guò)利用三態(tài)門(mén)作為輸入接口的實(shí)例。

由于單獨(dú)的三態(tài)門(mén)沒(méi)有數(shù)據(jù)的鎖存能力,因此它只能作為輸入接口來(lái)使用。6.1.2鎖存器

鎖存器具有保持(或鎖存)數(shù)據(jù)的能力,可以用做輸出接口。常用的鎖存器接口芯片有許多,其中有74LS273,它是由8個(gè)D觸發(fā)器集成在一塊芯片中構(gòu)成的。其引線及真值表如圖6.1所示。圖6.174LS2738D鎖存器引線及真值表

在圖5.3中,已經(jīng)利用273作為輸出接口,用來(lái)控制發(fā)光二極管發(fā)光。圖6.174LS2738D鎖存器引線及真值表由于鎖存器的輸出是二態(tài)的,沒(méi)有第三態(tài)(高阻)狀態(tài)。因此,單獨(dú)的鎖存器只能作為輸出接口。鎖存器不能單獨(dú)作為輸入接口,因?yàn)楫?dāng)它作為輸入接口時(shí),必然引起數(shù)據(jù)總線競(jìng)爭(zhēng)。6.1.3帶有三態(tài)門(mén)輸出的鎖存器

帶有三態(tài)門(mén)輸出的鎖存器有多種。前面第2章中曾給出8282(74LS373)和8283,它們是用高電平鎖存數(shù)據(jù)。在這里再給讀者介紹另一種帶有三態(tài)門(mén)輸出的鎖存器芯片74LS374,這也是經(jīng)常使用的芯片,其引線圖及真值表如圖6.2所示。圖6.274LS274的引線及真值表由于374中既集成了鎖存器又集成了三態(tài)門(mén),因此它既可以作為輸出接口又可以作為輸入接口使用。為說(shuō)明它的應(yīng)用,現(xiàn)舉例如下:

假定某外設(shè)需要實(shí)現(xiàn)最簡(jiǎn)單的溫度控制,外設(shè)的引線如圖6.3所示,其中溫度輸出信號(hào)D0~D7可輸出最高為100℃、最低為0℃的二進(jìn)制編碼表示的溫度值。其控制輸入A和B是用數(shù)字編碼實(shí)現(xiàn)對(duì)溫度的控制,具體控制規(guī)則如下:在上述已知條件下,即在已知外設(shè)的引線和它的控制特性的情況下,需要做好下面兩件事:

首先指定接口地址8000H~801FH可隨意使用,并利用上面提到的接口芯片74LS374,將此外設(shè)連接到8088的系統(tǒng)總線上,畫(huà)出連接圖。也就是說(shuō),要做的第一件事就是硬件連接。

現(xiàn)將外設(shè)和它的接口連接電路一并畫(huà)在圖6.3上。圖6.374LS374作輸入/輸出口與外設(shè)連接圖在圖6.3中,接口地址譯碼采用了部分地址譯碼方式。兩片74LS374分別用做輸出接口和輸入接口,而且各自占用16個(gè)接口地址,其中輸入接口的地址為8010H~801FH,而輸出接口的地址為8000H~800FH。由于采用部分地址譯碼,因此可以使用其中任何一個(gè)地址,而剩下的地址空著不用。當(dāng)然,也可以采用全地址譯碼方式或采用其他譯碼電路來(lái)實(shí)現(xiàn),只是譯碼電路更復(fù)雜一些。輸出接口用于輸出控制信號(hào),輸入接口用于輸入當(dāng)前的溫度。值得注意的是,外設(shè)輸出的溫度值是由內(nèi)總線上的時(shí)鐘信號(hào)CLK不斷地鎖存于74LS374內(nèi)部的。由于CLK的頻率足夠高,因此可即時(shí)將溫度數(shù)據(jù)鎖存。

要做的第二件事是在硬件連接的基礎(chǔ)上編寫(xiě)程序來(lái)控制外設(shè)工作。

若要求保持外設(shè)的溫度為95℃±1℃,則溫度高了降溫,溫度低了升溫。根據(jù)硬件連接圖和控制要求,編寫(xiě)程序如下:6.2可編程并行接口82556.2.18255的引線及內(nèi)部結(jié)構(gòu)

1.外部引線及其功能

8255的外部引線如圖6.4所示。假設(shè)想像成將8255從中間分成兩半,其左邊與系統(tǒng)總線相連接,而其右邊則與外設(shè)相連接。它與系統(tǒng)總線相連接的引線有:

8條雙向數(shù)據(jù)線D0~D7,用以傳送命令、數(shù)據(jù)或8255的狀態(tài)。為讀控制信號(hào)線,與其他信號(hào)線一起實(shí)現(xiàn)對(duì)8255的讀操作。通常接系統(tǒng)總線的信號(hào)(或信號(hào))。圖6.48255的外部引線為寫(xiě)控制信號(hào)線,與其他信號(hào)線一起實(shí)現(xiàn)對(duì)8255的寫(xiě)操作。通常接系統(tǒng)總線的信號(hào)(或信號(hào))。為片選信號(hào)線,當(dāng)它為低電平時(shí)才能選中該8255,才能對(duì)它進(jìn)行讀寫(xiě)操作。通常由高位地址譯碼輸出接在上,以便將該8255放在接口地址空間的規(guī)定地址上。

A0、A1為8255的地址選擇信號(hào)線。8255內(nèi)部有三個(gè)口:A口、B口和C口,還有一個(gè)控制寄存器CR。它們各占一個(gè)接口地址。A0、A1的不同編碼可產(chǎn)生它們的地址,詳情見(jiàn)后面8255的尋址。通常將8255的A0、A1與系統(tǒng)總線的A0、A1相連接,它們與一起決定8255的接口地址。

RESET為復(fù)位輸入信號(hào)。此端上的高電平可使8255復(fù)位。復(fù)位后,8255的A口、B口和C口均被定為輸入狀態(tài)。該端低電平使8255正常工作。

PA0~PA7為A口的8條輸入輸出信號(hào)線。該口的這8條線是工作于輸入、輸出還是雙向(輸入、輸出)方式可由軟件編程決定。

PB0~PB7為B口的8條輸入輸出信號(hào)線。利用軟件編程可指定這8條線是輸入還是輸出。

PC0~PC7這8條線根據(jù)其工作方式可作為數(shù)據(jù)的輸入或輸出線,也可以用做控制信號(hào)的輸出或狀態(tài)信號(hào)的輸入線,具體情況將在本節(jié)后面做介紹。

2.內(nèi)部結(jié)構(gòu)

8255的內(nèi)部結(jié)構(gòu)框圖如圖6.5所示。

從圖6.5中可以看到,左邊的信號(hào)與系統(tǒng)總線相接,而右邊是與外設(shè)相連接的3個(gè)口。

為了控制方便,將8255的3個(gè)口分成A、B兩組。其中A組包括A口的8條線PA0~PA7和C口的高4位PC4~PC7;B組包括B口的8條線PB0~PB7和C口的低4位PC0~PC3。A組和B組的具體工作方式由軟件編程規(guī)定。圖6.58255的內(nèi)部結(jié)構(gòu)框圖6.2.28255的工作方式

1.工作方式0

工作方式0又稱(chēng)為基本輸入輸出方式。在此方式下,8255的三個(gè)接口(A、B、C口)24條線全部規(guī)定為數(shù)據(jù)的輸入輸出線。A口的8條線(PA0~PA7)、B口的8條線(PB0~PB7)、C口的高4位(PC4~PC7)和C口的低4位(PC0~PC3)可用程序分別規(guī)定它們的輸入輸出方向,即可以分別規(guī)定它們哪個(gè)作為輸入,哪個(gè)作為輸出。由于A口、B口、C口高4位和C口的低4位共有四部分,可以分別指定它們的輸入輸出方向,因此它們的輸入輸出共有16種不同的組合。在方式0下,A口、B口和C口輸出均有鎖存能力,即只要向這些輸出口寫(xiě)入數(shù)據(jù),則數(shù)據(jù)將一直維持到寫(xiě)入新的數(shù)據(jù)為止。但在方式0下,這三個(gè)口輸入全無(wú)鎖存能力,也就是說(shuō)外設(shè)的數(shù)據(jù)要一直加在這些接口上,必須保持到被CPU讀走。

在方式0下,可以對(duì)C口實(shí)現(xiàn)按位操作。其詳細(xì)情況后面再予以說(shuō)明。

由于方式0使用十分簡(jiǎn)單,可滿足無(wú)條件傳送和查詢(xún)方式傳送的需要,因此這種工作方式應(yīng)用特別廣泛。

2.工作方式1

工作方式1又稱(chēng)為選通輸入輸出方式。只有A口和B口能工作在此方式之下,而且還必須使用C口的某些引線來(lái)實(shí)現(xiàn)數(shù)據(jù)傳送所需要的握手信號(hào)和中斷請(qǐng)求輸出。通常該方式是以中斷方式工作的,這并不是說(shuō)該方式不能進(jìn)行查詢(xún)工作,而查詢(xún)方式用方式0更加方便,不必要用方式1。在工作方式1下,A口和B口均可分別作為輸入接口,也可以作為輸出接口,且由軟件編程來(lái)指定。在此工作方式下,A口和B口的輸出、輸入均有鎖存能力。為了說(shuō)明問(wèn)題方便,下面分別以A口、B口均為輸出或?yàn)檩斎爰右杂懻?。?shí)際工作時(shí),則可隨意指定。

1)方式1下A口、B口均為輸出

當(dāng)在方式1下,A口和B口均工作在輸出狀態(tài)時(shí),要利用C口的6條線作為控制和狀態(tài)信號(hào)線來(lái)實(shí)現(xiàn)。其定義如圖6.6所示。圖6.6方式1下A口、B口均為輸出的信號(hào)定義(a)?A口輸出;(b)?B口輸出為了使A口或B口工作于方式1下,必須利用C口的一些線來(lái)實(shí)現(xiàn)。如圖6.6所示,在方式1下用A口或B口輸出時(shí),所用到的C口線是固定不變的,A口使用PC3、PC6和PC7,而B(niǎo)口用PC0、PC1和PC2。C口提供的信號(hào)功能如下:

(1)為輸出緩沖器滿信號(hào),低電平有效。利用該信號(hào)告訴外設(shè),在規(guī)定的口上已由CPU輸出一個(gè)有效數(shù)據(jù),外設(shè)可從此接口獲取此數(shù)據(jù)。

(2)為外設(shè)響應(yīng)信號(hào),低電平有效。該信號(hào)用來(lái)通知接口,外設(shè)已將數(shù)據(jù)接收,并使=1。

(3)?INTR為中斷請(qǐng)求信號(hào),高電平有效。當(dāng)外設(shè)收到一個(gè)數(shù)據(jù)后,由此信號(hào)通知CPU,剛才的輸出數(shù)據(jù)已經(jīng)被接收,可以再輸出下一個(gè)數(shù)據(jù)。

(4)?INTE為中斷允許狀態(tài)。由圖6.6可以看到,A口和B口的INTR均受INTE控制。只有當(dāng)INTE為高電平時(shí),才有可能產(chǎn)生有效的INTR。

A口的INTEA由PC6來(lái)控制。用下面提到的C口按位操作可對(duì)PC6置位或復(fù)位,用以對(duì)中斷請(qǐng)求INTRA進(jìn)行控制。同理,B口的INTEB用PC2的按位操作來(lái)進(jìn)行控制。在方式1下,某口的輸出過(guò)程若利用中斷方式進(jìn)行,則該過(guò)程從CPU響應(yīng)中斷開(kāi)始。進(jìn)入中斷服務(wù)程序,CPU向接口寫(xiě)數(shù)據(jù),將數(shù)據(jù)鎖存于接口之中。當(dāng)數(shù)據(jù)鎖存并由信號(hào)線輸出,8255就去掉INTR信號(hào)并使有效。有效的通知外設(shè)接收數(shù)據(jù)。一旦外設(shè)將數(shù)據(jù)接收,就送出一個(gè)有效的脈沖,該脈沖使無(wú)效(高電平)。同時(shí),產(chǎn)生一圖6.7方式1下的數(shù)據(jù)輸出時(shí)序個(gè)新的中斷請(qǐng)求,請(qǐng)求CPU向外設(shè)輸出下一個(gè)數(shù)據(jù)。上述過(guò)程可用圖6.7所示的簡(jiǎn)單時(shí)序圖進(jìn)一步說(shuō)明。在這里提醒讀者注意,當(dāng)兩個(gè)口同時(shí)為方式1輸出時(shí),使用C口的6條線。剩下的兩條線還可以用程序指定它們的數(shù)據(jù)傳送方向是輸入還是輸出,而且也可以以位操作方式對(duì)它們進(jìn)行置位或復(fù)位。當(dāng)一個(gè)口工作在方式1時(shí),只用去C口3條線,剩下的5條線也可按照上面所說(shuō)的方式工作。圖6.7方式1下的數(shù)據(jù)輸出時(shí)序

2)方式1下A口、B口均為輸入

與方式1下兩個(gè)口均為輸出類(lèi)似,為實(shí)現(xiàn)選通輸入,則同樣要利用C口的信號(hào)線。其定義如圖6.8所示。圖6.8方式1下A口、B口均為輸入的信號(hào)定義(a)?A口輸入;(b)?B口輸入在兩個(gè)口均為輸入時(shí)所用到的控制信號(hào)的定義如下:

(1)為低電平有效的輸入選通信號(hào)。它由外設(shè)提供,外設(shè)利用該信號(hào)可將其數(shù)據(jù)鎖存于8255口的輸入鎖存器中。

(2)IBF為高電平有效的輸入緩沖器滿信號(hào)。當(dāng)它有效時(shí),表示已有一個(gè)有效的外設(shè)數(shù)據(jù)鎖存于8255口的鎖存器中。可用此信號(hào)通知外設(shè),它的數(shù)據(jù)已鎖存于接口中,尚未被CPU讀走,暫不能向接口輸入數(shù)據(jù)。

(3)?INTR為中斷請(qǐng)求信號(hào),高電平有效。對(duì)于A口、B口可利用位操作命令分別使PC4=1或PC2=1,此時(shí)若IBF和均為高電平時(shí),可使INTR有效,向CPU提出中斷請(qǐng)求。也就是說(shuō),當(dāng)外設(shè)將數(shù)據(jù)鎖存于接口之中,且又允許中斷請(qǐng)求發(fā)生時(shí),就會(huì)產(chǎn)生中斷請(qǐng)求。

(4)INTE為中斷允許狀態(tài)。見(jiàn)圖6.8,在方式1下輸入數(shù)據(jù)時(shí),INTR同樣受中斷允許狀態(tài)INTE的控制。A口的INTEA是由PC4控制的,當(dāng)它為1時(shí)允許中斷;當(dāng)它為0時(shí)禁止中斷。B口的INTEB是由PC2控制的。利用C口的按位操作即可實(shí)現(xiàn)這樣的控制。方式1下的數(shù)據(jù)輸入過(guò)程如下所述。當(dāng)外設(shè)有數(shù)據(jù)需要輸入時(shí),外設(shè)將數(shù)據(jù)送到8255口上,并利用輸出脈沖將數(shù)據(jù)鎖存于8255內(nèi)部,同時(shí),產(chǎn)生INTR信號(hào)并使IBF有效。有效的IBF通知外設(shè),數(shù)據(jù)產(chǎn)生已鎖存而中斷請(qǐng)求要求CPU從8255的口上讀取數(shù)據(jù)。CPU響應(yīng)中斷,讀取數(shù)據(jù)后使IBF和INTR變?yōu)闊o(wú)效。上述過(guò)程可用圖6.9的簡(jiǎn)單時(shí)序圖進(jìn)一步說(shuō)明。圖6.9方式1下的數(shù)據(jù)輸入時(shí)序在方式1下,8255的A口和B口可以均為輸入或輸出;也可以一個(gè)為輸入,另一個(gè)為輸出;還可以一個(gè)工作于方式1,而另一個(gè)工作于方式0。這種靈活的工作特點(diǎn)是由其可編程的功能來(lái)實(shí)現(xiàn)的。

3.工作方式2

工作方式2又稱(chēng)為雙向輸入輸出方式,這種工作方式只有8255的A口才有。在A口工作于雙向輸入輸出方式時(shí),要利用C口的5條線才能實(shí)現(xiàn)。此時(shí),B口只能工作在方式0或方式1,而C口剩下的3條線可作為輸入輸出線使用或用做B口方式1之下的控制線。

A口工作于方式2之下時(shí),各信號(hào)的定義如圖6.10所示。圖中未畫(huà)B口和C口的其他引線。圖6.10方式2下的信號(hào)定義當(dāng)A口工作在方式2時(shí),其控制信號(hào)、、及INTR與前面的敘述是一樣的,所不同的主要是:

(1)因?yàn)樵诜绞?之下,A口既作為輸出又作為輸入,所以只有當(dāng)有效時(shí),才能打開(kāi)A口輸出數(shù)據(jù)三態(tài)門(mén),使數(shù)據(jù)由PA0~PA7輸出;當(dāng)無(wú)效時(shí),A口的輸出數(shù)據(jù)三態(tài)門(mén)呈高阻狀態(tài)。

(2)工作在此方式時(shí),A口輸入、輸出均具備鎖存數(shù)據(jù)的能力。CPU寫(xiě)A口時(shí),數(shù)據(jù)鎖存于A口,外設(shè)的脈沖可將輸入數(shù)據(jù)鎖存于A口。

(3)在此方式下,A口的輸入或輸出均可產(chǎn)生中斷。中斷信號(hào)的輸出同時(shí)還受到中斷允許狀態(tài)INTE1和INTE2的控制。INTE1和INTE2的狀態(tài)分別利用PC6和PC4按位操作來(lái)指定。當(dāng)它們置位時(shí),允許中斷;而當(dāng)它們復(fù)位時(shí),禁止中斷。

A口方式2的工作過(guò)程簡(jiǎn)述如下。

A口工作在方式2時(shí),可以認(rèn)為A口是工作在前面所描述的方式1的輸入和輸出相結(jié)合而分時(shí)工作,其工作過(guò)程和方式1的輸入和輸出過(guò)程十分相似。

在方式2之下,A口的PA0~PA7這8條數(shù)據(jù)線既要向外設(shè)輸出數(shù)據(jù),又要從外設(shè)輸入數(shù)據(jù)。因此,PA0~PA7是雙向工作的。這就必須仔細(xì)進(jìn)行控制,以防止總線競(jìng)爭(zhēng)發(fā)生。

A口工作在方式2下的時(shí)序圖如圖6.11所示。圖6.11方式2下的工作時(shí)序在圖6.11中,輸入或輸出的順序是任意的。但應(yīng)發(fā)生在有效之前,也就是先有CPU向A口寫(xiě)數(shù)據(jù),再有外設(shè)利用從A口取數(shù)據(jù)。同樣,應(yīng)發(fā)生在之前,以保證外設(shè)先利用將數(shù)據(jù)鎖存于A口之內(nèi),再由CPU從A口讀(有效)取數(shù)據(jù)。一旦數(shù)據(jù)由鎖存,外設(shè)即可撤消其輸入數(shù)據(jù),以便保證PA0~PA7的雙向數(shù)據(jù)傳送的實(shí)現(xiàn)。6.2.3控制字及狀態(tài)字

前面已經(jīng)敘述了可編程并行接口8255的工作方式??梢钥吹?,8255有很強(qiáng)的功能,能夠工作在各種工作方式下,在應(yīng)用過(guò)程中,可以利用軟件編程來(lái)指定8255的工作方式。也就是說(shuō),只要將不同的控制字裝入芯片中的控制寄存器,即可確定8255的工作方式。

1.控制字

8255的控制字由8位二進(jìn)制數(shù)構(gòu)成,各位的控制功能如圖6.12所示。

當(dāng)控制字bit7=1時(shí),控制字的bit6~bit3這4位用來(lái)控制A組,即A口的8位和C口的高4位,而控制字的低3位bit2~bit0用來(lái)控制B組,包括B口的8位和C口的低4位。

當(dāng)控制字的bit7=0時(shí),指定該控制字僅對(duì)C口進(jìn)行位操作——按位置位或復(fù)位操作。對(duì)C口按位置/復(fù)位操作的控制字格式如圖6.13所示。如前所敘,在必要時(shí),可利用C口的按位置/復(fù)位控制字來(lái)使C口的某一位輸出0或1。圖6.128255的控制字格式圖6.13C口的按位操作控制字

2.狀態(tài)字

當(dāng)8255的A口、B口工作在方式1或A口工作在方式2時(shí),通過(guò)讀C口的狀態(tài),可以檢測(cè)A口和B口的狀態(tài)。

當(dāng)8255的A口和B口均工作在方式1的輸入時(shí),由C口讀的8位數(shù)據(jù)各位的意義如圖6.14所示。當(dāng)8255的A口和B口均工作在方式1的輸出時(shí),由C口讀出的狀態(tài)字各位的意義如圖6.15所示。當(dāng)8255的A口工作于方式2時(shí),由C口讀入的狀態(tài)字如圖6.16所示。圖6.14A、B口均為方式1輸入時(shí)的狀態(tài)字

圖6.15A、B口均為方式1輸出時(shí)的狀態(tài)字圖6.16中狀態(tài)字的D0~D2由B口的工作方式來(lái)決定。當(dāng)為方式1輸入時(shí),其定義同圖6.14的D0~D2。當(dāng)工作在方式1輸出時(shí),與圖6.15所定義的D0~D2相同。另外需要說(shuō)明的是,圖6.14和圖6.15分別表示在方式1之下,A口、B口同為輸入或同為輸出的情況。若在此方式下,A口、B口各為輸入或輸出時(shí),狀態(tài)字為上述兩狀態(tài)字的組合。圖6.16A口工作在方式2輸入時(shí)的狀態(tài)字6.2.48255的尋址及連接

8255占外設(shè)編址的4個(gè)地址,即A口、B口、C口和控制寄存器各占一個(gè)外設(shè)接口地址。對(duì)同一個(gè)地址分別可以進(jìn)行讀寫(xiě)操作。例如,讀A口可將A口的數(shù)據(jù)讀出;寫(xiě)A口可將CPU的數(shù)據(jù)寫(xiě)入A口并輸出。利用8255的片選信號(hào)、A0、A1以及讀寫(xiě)信號(hào),即可方便地對(duì)8255進(jìn)行尋址。這些信號(hào)的功能如表6.1所示。表6.18255的尋址根據(jù)這種尋址結(jié)構(gòu),可以方便地將8255連接到系統(tǒng)總線上,如圖6.17所示。

由圖6.17可見(jiàn),8255與8088的總線連接是比較容易的。只是圖中為了簡(jiǎn)化起見(jiàn),未畫(huà)出AEN的形成。這里可以認(rèn)為只要CPU正常地執(zhí)行指令,AEN就為低電平。這樣,可以看到在圖6.17中,8255是由A9~A0這10條地址線來(lái)決定其地址的,它所占的地址為380H~383H。圖6.178255的一種連接6.2.5初始化及應(yīng)用

由于8255有多種工作方式,在使用它實(shí)現(xiàn)某種功能前,必須對(duì)它進(jìn)行初始化。同時(shí),也需要利用初始化程序使外設(shè)處于準(zhǔn)備就緒狀態(tài)。8255的初始化就包括這兩部分工作,即將控制字寫(xiě)入控制寄存器(CR),指定工作方式和數(shù)據(jù)傳送方向;再就是輸出相應(yīng)的控制信號(hào)使外設(shè)準(zhǔn)備就緒。

在這里,仍以前面圖5.5(a)中所示的外設(shè)﹙打印機(jī)﹚為例,說(shuō)明8255的初始化及應(yīng)用。首先將打印機(jī)經(jīng)8255連接到8086系統(tǒng)總線上,連接圖如圖6.18所示。圖6.18利用8255構(gòu)成打印機(jī)接口從圖6.18中可以看到,8255占4個(gè)偶數(shù)接口地址:8000H~8006H。在這里仍以查詢(xún)方式實(shí)現(xiàn)打印機(jī)的打印。圖5.5(a)中的打印機(jī)響應(yīng)信號(hào)仍不使用(留待后面再用)。對(duì)于8255在圖6.18中的應(yīng)用,其初始化程序可如下編寫(xiě):初始化8255工作在方式0,A口8條線、B口8條線和C口的低4條線(PC0~PC3)均規(guī)定為輸出;C口的高4條線(PC4~PC7)定義為輸入。而且,利用C口的按位操作將PC0輸出高電平。編寫(xiě)打印程序如下:當(dāng)主程序?qū)⒁蛴〉囊恍凶址麥?zhǔn)備好,這一行字符放在數(shù)據(jù)段,偏移地址由DATAP開(kāi)始的順序單元中。一行字符由0AH結(jié)束。每當(dāng)一行字符準(zhǔn)備好,便可以調(diào)用上面的打印子程序,利用此程序打印這一行字符。6.3可編程定時(shí)器82536.3.18253的引線功能及內(nèi)部結(jié)構(gòu)

1.8253的引線及其功能

8253的外部引線如圖6.19所示。可以形象地將8253分成圖6.19所示的左右兩半,左側(cè)與系統(tǒng)總線連接,而右側(cè)則是3個(gè)可編程定時(shí)/計(jì)數(shù)器,即3個(gè)功能完全一樣的定時(shí)/計(jì)數(shù)器。每個(gè)定時(shí)/計(jì)數(shù)器都有3條引線,其中CLK為外部計(jì)數(shù)時(shí)鐘輸入,每一個(gè)時(shí)鐘周期可以對(duì)定時(shí)/計(jì)數(shù)器內(nèi)部的16位計(jì)數(shù)器減1;OUT為定時(shí)/計(jì)數(shù)器的輸出信號(hào),不同的工作方式輸出不同的波形,詳見(jiàn)下面工作方式;門(mén)控信號(hào)GATE用以控制定時(shí)/計(jì)數(shù)器的工作,詳見(jiàn)下面工作方式的描述。圖6.198253的引線引線A0、A1為8253內(nèi)部計(jì)數(shù)器和控制寄存器的編碼選擇信號(hào),其功能如下:為片選信號(hào),當(dāng)其有效(低電平)時(shí),選中該8253,實(shí)現(xiàn)對(duì)它的讀寫(xiě)操作。為讀控制信號(hào),低電平有效。為寫(xiě)控制信號(hào),低電平有效。上述信號(hào)A0、A1和、、共同實(shí)現(xiàn)8253的尋址及讀寫(xiě)。詳情下面再仔細(xì)說(shuō)明。

8253芯片的雙向數(shù)據(jù)總線D0~D7,用于傳送控制字和計(jì)數(shù)器的計(jì)數(shù)值。

2.8253的內(nèi)部結(jié)構(gòu)

8253的內(nèi)部結(jié)構(gòu)框圖如圖6.20所示。圖6.208253的內(nèi)部結(jié)構(gòu)框圖6.3.28253的工作方式

從內(nèi)部結(jié)構(gòu)圖6.20可以看到,可編程定時(shí)器8253的內(nèi)部有3個(gè)相同的16位計(jì)數(shù)器。它們都能夠?qū)崿F(xiàn)以下6種工作方式。

1.方式0(計(jì)數(shù)結(jié)束產(chǎn)生中斷)

在方式0下,GATE必須為1,計(jì)數(shù)器在外部時(shí)鐘作用下,每個(gè)時(shí)鐘周期計(jì)數(shù)器減1。當(dāng)GATE=0時(shí),計(jì)數(shù)停止。當(dāng)GATE=1,寫(xiě)入控制字和計(jì)數(shù)值后,需要一個(gè)CLK脈沖周期才將計(jì)數(shù)初值傳送到計(jì)數(shù)器減1部件。而OUT是在寫(xiě)入控制字和計(jì)數(shù)值后就變低,直到計(jì)數(shù)減到0才變高。因此,OUT的負(fù)脈沖寬度應(yīng)為計(jì)數(shù)值加1個(gè)時(shí)鐘周期。例如,若計(jì)數(shù)值為100,寫(xiě)入后OUT變低,此低電平持續(xù)時(shí)間為101個(gè)時(shí)鐘周期。

方式0下,每寫(xiě)一次計(jì)數(shù)值,可獲得一個(gè)負(fù)脈沖。若想再產(chǎn)生負(fù)脈沖,就再寫(xiě)一次計(jì)數(shù)值。OUT總是在寫(xiě)入計(jì)數(shù)值時(shí)變低,在計(jì)數(shù)值加1個(gè)時(shí)鐘周期后變高。如果在計(jì)數(shù)過(guò)程中寫(xiě)入新的計(jì)數(shù)值,則寫(xiě)第一個(gè)字節(jié)時(shí)停止計(jì)數(shù),寫(xiě)入第二個(gè)字節(jié)的下一個(gè)時(shí)鐘周期開(kāi)始按新的計(jì)數(shù)值重新計(jì)數(shù)。

若在GATE=0時(shí)寫(xiě)入計(jì)數(shù)值N,計(jì)數(shù)器不工作。當(dāng)GATE變?yōu)楦唠娖綍r(shí),計(jì)數(shù)開(kāi)始,并且OUT輸出端經(jīng)計(jì)數(shù)值N個(gè)時(shí)鐘周期(不是N+1)變?yōu)楦唠娖健?/p>

在方式0下,常利用OUT的上升沿作為中斷請(qǐng)求信號(hào)。

2.方式1(可編程單穩(wěn))

在此方式下,寫(xiě)入控制字和計(jì)數(shù)值后,計(jì)數(shù)開(kāi)始是以GATE的上升沿啟動(dòng)。同時(shí),OUT輸出低電平,此低電平一直維持到計(jì)數(shù)器減到0。這樣一來(lái),就可以從OUT輸出一個(gè)負(fù)脈沖,該脈沖由GATE上升沿開(kāi)始,負(fù)脈沖的寬度為計(jì)數(shù)值個(gè)時(shí)鐘脈沖周期。若想再次獲得同樣寬度的負(fù)脈沖,只要用GATE上升沿再觸發(fā)一次即可。可見(jiàn),此種方式下,裝入計(jì)數(shù)值后可多次觸發(fā)。如果在形成單個(gè)負(fù)脈沖的計(jì)數(shù)過(guò)程中改變計(jì)數(shù)值,則不會(huì)影響正在進(jìn)行的計(jì)數(shù)。新的計(jì)數(shù)值只有在前面的負(fù)脈沖形成后,又出現(xiàn)GATE上升沿時(shí)才起作用。但是,若在形成單個(gè)負(fù)脈沖的計(jì)數(shù)過(guò)程中又出現(xiàn)新的GATE上升沿,則當(dāng)前計(jì)數(shù)停止時(shí),后面的計(jì)數(shù)以原初始的計(jì)數(shù)值開(kāi)始工作。這時(shí)的負(fù)脈沖寬度將包括前面未計(jì)數(shù)完的部分和全部原始計(jì)數(shù)值兩部分,使負(fù)脈沖加寬。

3.方式2(頻率發(fā)生器)

在該方式下,計(jì)數(shù)器裝入初值。開(kāi)始工作后,計(jì)數(shù)器的輸出OUT將連續(xù)輸出一個(gè)時(shí)鐘周期寬的負(fù)脈沖。兩個(gè)負(fù)脈沖之間的時(shí)鐘周期數(shù)就是計(jì)數(shù)器裝入的計(jì)數(shù)初值。這樣一來(lái),就可以利用不同的計(jì)數(shù)值達(dá)到對(duì)時(shí)鐘脈沖的分頻,而分頻輸出就是OUT輸出。

在這種方式下,門(mén)控信號(hào)GATE用作控制信號(hào)。當(dāng)GATE為低電平時(shí),強(qiáng)迫OUT輸出高電平。當(dāng)GATE為高時(shí),分頻繼續(xù)進(jìn)行。在此方式下,計(jì)數(shù)周期數(shù)應(yīng)包括負(fù)脈沖所占的那一個(gè)時(shí)鐘周期。也就是說(shuō),計(jì)數(shù)減到1時(shí)開(kāi)始送出負(fù)脈沖。

在計(jì)數(shù)過(guò)程中,若改變計(jì)數(shù)值,則不影響當(dāng)前的計(jì)數(shù)過(guò)程,而在下一次計(jì)數(shù)分頻時(shí),采用新的計(jì)數(shù)值。

4.方式3(方波發(fā)生器)

在這種方式下,可以從OUT得到對(duì)稱(chēng)的方波輸出。當(dāng)裝入的計(jì)數(shù)值N為偶數(shù)時(shí),則前N/2計(jì)數(shù)過(guò)程中,OUT為高;后N/2計(jì)數(shù)過(guò)程中,OUT為低,如此這般一直進(jìn)行下去。若N為奇數(shù),則(N+1)/2計(jì)數(shù)過(guò)程中,OUT保持高電平;而(N?-1)/2計(jì)數(shù)期間,OUT為低電平。

在此方式下,GATE信號(hào)為低電平時(shí),強(qiáng)迫OUT輸出高電平;當(dāng)GATE為高電平時(shí),OUT輸出對(duì)稱(chēng)方波。

在產(chǎn)生方波過(guò)程中,若裝入新的計(jì)數(shù)值,則方波的下一個(gè)電平將反映新計(jì)數(shù)值所規(guī)定的方波寬度。

5.方式4(軟件觸發(fā)選通)

該方式與方式0有類(lèi)似的地方,即寫(xiě)入計(jì)數(shù)值后,要用一個(gè)時(shí)鐘周期將計(jì)數(shù)值傳送到計(jì)數(shù)器的減1部件,然后計(jì)數(shù)開(kāi)始,每個(gè)時(shí)鐘周期減1。當(dāng)計(jì)數(shù)減到0時(shí),由OUT輸出一個(gè)時(shí)鐘周期寬度的負(fù)脈沖。

若寫(xiě)入的計(jì)數(shù)值為N,在計(jì)數(shù)值寫(xiě)入后經(jīng)過(guò)N+1個(gè)時(shí)鐘周期才有負(fù)脈沖出現(xiàn)。在此方式下,每寫(xiě)入一次計(jì)數(shù)值只得到一個(gè)負(fù)脈沖。

此方式同樣受GATE信號(hào)控制。只有當(dāng)GATE為高電平時(shí),計(jì)數(shù)才進(jìn)行;當(dāng)GATE為低電平時(shí),禁止計(jì)數(shù)。

若在計(jì)數(shù)過(guò)程中裝入新的計(jì)數(shù)值,計(jì)數(shù)器從下一時(shí)鐘周期開(kāi)始以新的計(jì)數(shù)值進(jìn)行計(jì)數(shù)。

6.方式5(硬件觸發(fā)選通)

設(shè)置此方式后,OUT輸出為高電平。GATE的上升沿使計(jì)數(shù)開(kāi)始,當(dāng)計(jì)數(shù)結(jié)束時(shí)由輸出端OUT送出一個(gè)寬度為一個(gè)時(shí)鐘周期的負(fù)脈沖。

在此方式下,GATE電平的高低不影響計(jì)數(shù),計(jì)數(shù)由GATE的上升沿啟動(dòng)。

若在計(jì)數(shù)結(jié)束前,又出現(xiàn)GATE上升沿,則計(jì)數(shù)從頭開(kāi)始??梢?jiàn),若寫(xiě)入計(jì)數(shù)值為N,則GATE上升沿后N個(gè)時(shí)鐘周期結(jié)束時(shí),OUT會(huì)輸出一個(gè)時(shí)鐘周期寬度的負(fù)脈沖。同樣,可用GATE上升沿多次觸發(fā)計(jì)數(shù)器產(chǎn)生負(fù)脈沖。

從8253的6種工作方式中可以看到,門(mén)控信號(hào)GATE十分重要,而且對(duì)不同的工作方式,其作用也不一樣。現(xiàn)將各種方式下GATE的作用列于表6.2中。表6.2GATE信號(hào)功能表6.3.38253的控制字

8253的控制字格式如圖6.21所示。

8253的控制字在初始化時(shí)要寫(xiě)入控制寄存器。而8253的控制寄存器只分配一個(gè)接口地址,但是每個(gè)計(jì)數(shù)器都必須有自己的控制字。為了加以區(qū)別,就利用控制字的最高兩位(D7D6)的編碼來(lái)指定在該地址上的控制字是哪個(gè)計(jì)數(shù)器的控制字。這樣就不會(huì)發(fā)生混亂了。圖6.218253的控制字格式

8253的控制字D0用來(lái)定義用戶(hù)所使用的計(jì)數(shù)值是二進(jìn)制數(shù)還是BCD數(shù)。因?yàn)槊總€(gè)計(jì)數(shù)器都是16位(二進(jìn)制)計(jì)數(shù)器,所以允許用戶(hù)使用的二進(jìn)制數(shù)為0000H~FFFFH,十進(jìn)制數(shù)為0000~9999。由于計(jì)數(shù)器做減1操作,所以當(dāng)初始計(jì)數(shù)值為0000時(shí),對(duì)應(yīng)最大計(jì)數(shù)值。

8253的控制字中,RL1RL0為00時(shí)的作用將在下面說(shuō)明。控制字其他各位的功能一目了然,此處不再說(shuō)明。

8253的每個(gè)計(jì)數(shù)器都有自己的一個(gè)16位的計(jì)數(shù)值寄存器,存放16位的計(jì)數(shù)值。由于其使用簡(jiǎn)單,此處不做說(shuō)明。6.3.48253的尋址及連接

1.尋址

8253占用4個(gè)接口地址,地址由、A0、A1來(lái)確定。同時(shí),再配合、控制信號(hào),可以實(shí)現(xiàn)對(duì)8253的各種讀寫(xiě)操作。上述信號(hào)的組合功能由表6.3來(lái)說(shuō)明。表6.3各尋址信號(hào)的組合功能從表6.3可以看到,對(duì)8253的控制字或任一計(jì)數(shù)器均可以用它們各自的地址進(jìn)行寫(xiě)操作。只是要注意,應(yīng)根據(jù)相應(yīng)控制字中RL1和RL0的編碼,向某一計(jì)數(shù)器寫(xiě)入計(jì)數(shù)值。當(dāng)其編碼是11時(shí),一定要裝入兩個(gè)字節(jié)的計(jì)數(shù)值,且先寫(xiě)入低字節(jié)再寫(xiě)入高字節(jié)。若此時(shí)只寫(xiě)了一個(gè)字節(jié),就去寫(xiě)其他計(jì)數(shù)器或控制字,則寫(xiě)入的字節(jié)將被解釋為計(jì)數(shù)值的高字節(jié),從而產(chǎn)生錯(cuò)誤。當(dāng)對(duì)8253的計(jì)數(shù)器進(jìn)行讀操作時(shí),可以讀出計(jì)數(shù)值,具體實(shí)現(xiàn)方法有如下兩種:

(1)先使計(jì)數(shù)器停止計(jì)數(shù),再讀計(jì)數(shù)值。先寫(xiě)入控制字,規(guī)定好RL1和RL0的狀態(tài)——也就是規(guī)定讀一個(gè)字節(jié)還是讀兩個(gè)字節(jié)。若其編碼為11,則一定讀兩次,先讀出計(jì)數(shù)值低8位,再讀出高8位。若讀一次同樣會(huì)出錯(cuò)。

為了使計(jì)數(shù)器停止計(jì)數(shù),可用GATE門(mén)控信號(hào)或自己設(shè)計(jì)的邏輯電路使計(jì)數(shù)時(shí)鐘停止工作。

(2)在計(jì)數(shù)過(guò)程中讀計(jì)數(shù)值。這時(shí)讀出當(dāng)前的計(jì)數(shù)值并不影響計(jì)數(shù)器工作。

為做到這一點(diǎn),首先寫(xiě)入8253一個(gè)特定的控制字:SC1SC200××××。這是控制字的一種形式。其中SC1和SC0與圖6.21的定義一樣。后面兩位剛好定義RL1和RL0為00。將此控制字寫(xiě)入8253后,就可將選中的計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值鎖存到一個(gè)暫存器中,然后,利用讀計(jì)數(shù)器操作——兩條輸入指令即可把16位計(jì)數(shù)值讀出。

2.連接

為了用好8253,讀者必須能熟練地將它連接到系統(tǒng)總線上。圖6.22就是8253與8088系統(tǒng)總線連接的例子。

在圖6.22中,主要解決了8253與8088總線的連接。通過(guò)譯碼器,使8253占FF04H~FF07H四個(gè)接口地址。假如在連接中采用了部分地址譯碼方式,使A0不參加譯碼,則8253的每一個(gè)計(jì)數(shù)器和控制寄存器可分別占用兩個(gè)接口地址。圖6.228253與8088系統(tǒng)總線的連接圖6.3.5初始化及應(yīng)用

與任何可編程接口芯片一樣,由于8253有多種功能,因此在使用它之前必須進(jìn)行初始化。初始化程序通常放在加電復(fù)位后進(jìn)行,也可放在用戶(hù)程序的開(kāi)始。8253的初始化可以靈活地進(jìn)行,通常可采用下述初始化順序的任一種:

1.逐個(gè)計(jì)數(shù)器分別初始化

對(duì)某一計(jì)數(shù)器先寫(xiě)入控制字,再寫(xiě)入計(jì)數(shù)值,如圖6.23所示。初始化完一個(gè)計(jì)數(shù)器后,用同樣的順序初始化下一個(gè)計(jì)數(shù)器,直至要初始化的計(jì)數(shù)器全部初始化完為止。圖6.23一個(gè)計(jì)數(shù)器初始化順序在初始化過(guò)程中,先初始化哪一個(gè)計(jì)數(shù)器無(wú)關(guān)緊要,重要的是對(duì)每一個(gè)計(jì)數(shù)器的初始化順序不能錯(cuò),必須按圖6.23所示的順序進(jìn)行。

2.各計(jì)數(shù)器統(tǒng)一初始化

先將計(jì)數(shù)器的控制字寫(xiě)入各計(jì)數(shù)器,再將各計(jì)數(shù)器的計(jì)數(shù)值寫(xiě)入各計(jì)數(shù)器。其順序如圖6.24所示。

從圖6.24可以看到,先寫(xiě)控制字后寫(xiě)計(jì)數(shù)值,這一順序不能錯(cuò)。但在寫(xiě)控制字或?qū)懹?jì)數(shù)值時(shí),先寫(xiě)哪個(gè)計(jì)數(shù)器則無(wú)關(guān)緊要。

為了說(shuō)明8253的初始化及其應(yīng)用,以圖6.25為例,說(shuō)明如何利用8255獲得所需要的定時(shí)波形。圖6.24各計(jì)數(shù)器統(tǒng)一初始化順序

圖6.258253的應(yīng)用舉例連接圖由圖6.25可以看到,8253的接口地址為D0D0H~D0D3H。外部計(jì)數(shù)時(shí)鐘頻率為2MHz。該例是利用8253的三個(gè)計(jì)數(shù)器輸出OUT,分別產(chǎn)生周期為100μs的對(duì)稱(chēng)方波、周期為1s的負(fù)窄脈沖和周期為10s的對(duì)稱(chēng)方波。為達(dá)到此目的,采用如圖6.25所示的連接,用上一級(jí)的OUT輸出兼做下一級(jí)的計(jì)數(shù)時(shí)鐘。與圖6.25相對(duì)應(yīng)的8253的初始化程序如下:6.4可編程串行接口82506.4.1概述在串行通信中,經(jīng)常采用兩種最基本的通信方式,一種是同步通信,另一種是異步通信。

1.同步通信

所謂同步通信,是指在約定的波特率(每秒鐘傳送的位數(shù))下,發(fā)送端和接收端的頻率保持嚴(yán)格的一致(同步)。因?yàn)榘l(fā)送和接收的每一位數(shù)據(jù)均保持同步,故傳送信息的位數(shù)幾乎不受限制,通常一次通信傳送的數(shù)據(jù)有幾十到幾百字節(jié)。這種通信的發(fā)送器和接收器比較復(fù)雜,成本也較高。

同步通信的數(shù)據(jù)格式有許多種,圖6.26所示為常見(jiàn)的幾種。圖6.26常見(jiàn)的幾種同步通信數(shù)據(jù)格式(a)單同步格式;(b)雙同步格式;(c)?SDLC格式;(d)外同步格式;(e)?HDLC格式在圖6.26中,除數(shù)據(jù)場(chǎng)的字節(jié)數(shù)不受限制外,其他均為8位。其中圖(a)為單同步格式,傳送一幀數(shù)據(jù)僅使用一個(gè)同步字,當(dāng)接收端收到——檢測(cè)出一個(gè)完整同步字后,就連續(xù)接收數(shù)據(jù)。一幀數(shù)據(jù)結(jié)束,進(jìn)行CRC校驗(yàn)。圖(b)為雙同步格式,這時(shí)利用兩個(gè)同步字進(jìn)行同步。圖(c)為同步數(shù)據(jù)鏈路控制(SDLC),圖(e)則稱(chēng)為高級(jí)數(shù)據(jù)鏈路控制(HDLC),它們均用于同步通信。這兩種規(guī)約的細(xì)節(jié)本書(shū)不做詳細(xì)說(shuō)明。圖(d)則是一種外同步方式所采用的數(shù)據(jù)格式。對(duì)這種方式,在發(fā)送的一幀數(shù)據(jù)中不包含同步字。同步信號(hào)(SYNC)通過(guò)專(zhuān)門(mén)的

控制線加到串行接口上。當(dāng)SYNC一到達(dá),表明數(shù)據(jù)場(chǎng)開(kāi)始,接口就連續(xù)接收數(shù)據(jù)和CRC編碼。

2.異步通信

異步通信是指收發(fā)端在約定的波特率下,不需要嚴(yán)格的同步,允許有相對(duì)的遲延,即兩端的頻率差別在5%以?xún)?nèi),就能正確地實(shí)現(xiàn)通信的通信方式。異步串行通信的數(shù)據(jù)傳送格式如圖6.27所示。圖6.27異步串行通信數(shù)據(jù)格式異步通信每傳送一個(gè)字符,均由一位低電平的起始位開(kāi)始,接著傳送數(shù)據(jù)位,數(shù)據(jù)可以是5位、6位、7位或者8位,可由程序指定。在傳送時(shí),按低位在前、高位在后順序傳送。數(shù)據(jù)位的后面可以加上一位奇偶校驗(yàn)位,也可以不加這一位,可由程序來(lái)指定。最后傳送的是一位、一位半或兩位高電平的停止位。這樣,一個(gè)字符就傳送完了。在傳送兩個(gè)字符之間的空閑期間,要由高電平1來(lái)填充。

異步通信每傳送一個(gè)字符,都要增加大約20%的用于同步和幀格式檢測(cè)的附加信息位,這必然降低了傳送效率。但這種通信方式簡(jiǎn)單可靠,實(shí)現(xiàn)起來(lái)比較容易,故廣泛應(yīng)用于各種微型機(jī)系統(tǒng)中。6.4.2串行接口8250

各微處理器廠家都為自己的微處理器生產(chǎn)出了相應(yīng)的可編程串行接口,Intel公司提供的常用串行接口就有8250和8251。選擇某一片串行接口芯片,掌握它的使用,以后再遇到其他類(lèi)似芯片也就不難使用它了。為此,在這里選擇8250為對(duì)象,介紹它的應(yīng)用。

1.引線及功能

8250的外部引線及內(nèi)部結(jié)構(gòu)簡(jiǎn)圖如圖6.28(a)和(b)所示。圖6.288250的外部引線及內(nèi)部結(jié)構(gòu)(a)外部引線;(b)內(nèi)部結(jié)構(gòu)

CS0、CS1、為輸入片選信號(hào)。只有當(dāng)它們同時(shí)有效——CS0=1,CS1=1,=0時(shí),才能選中該片8250。

A0、A1、A2為8250內(nèi)部寄存器的選擇信號(hào)。這3個(gè)輸入信號(hào)的不同編碼,用以選中8250內(nèi)部不同的寄存器。詳細(xì)情況,在尋址時(shí)再做介紹。為地址選通信號(hào)。該輸入信號(hào)有效(低電平)時(shí),可將CS0、CS1、及A0、A1、A2鎖存于8250內(nèi)部。若在工作中不需要隨時(shí)鎖存上述信號(hào),則可把直接接地,使其總有效。

DISTR、為數(shù)據(jù)輸入選通信號(hào)。當(dāng)它們其中一個(gè)有效——DISTR為高或?yàn)榈蜁r(shí),被選中的8250寄存器內(nèi)容可被讀出,經(jīng)常與系統(tǒng)總線上的IOR相連接。當(dāng)它們同時(shí)無(wú)效時(shí),8250不能讀出。

DOSTR、為數(shù)據(jù)輸出選通信號(hào)。當(dāng)它們其中一個(gè)有效——DOSTR為高電平或者為低電平時(shí),被選中的8250寄存器可寫(xiě)入數(shù)據(jù)或控制字。常與系統(tǒng)總線的相連。當(dāng)它們同時(shí)無(wú)效時(shí),8250則不能寫(xiě)入。

RCLK為接收時(shí)鐘信號(hào)。該輸入信號(hào)的頻率為接收信號(hào)波頻率的16倍。

SIN為串行信號(hào)輸入端。外設(shè)或其他系統(tǒng)傳送來(lái)的串行數(shù)據(jù)由該端進(jìn)入8250。為清除發(fā)送信號(hào)。該輸入信號(hào)為低電平時(shí),表示提供CTS信號(hào)的設(shè)備已準(zhǔn)備好,可以接收8250發(fā)來(lái)的數(shù)據(jù)。為請(qǐng)求發(fā)送信號(hào)。該輸出信號(hào)為低電平時(shí),用作8250向外設(shè)發(fā)送數(shù)據(jù)的請(qǐng)求信號(hào)。它與下面的信號(hào)有同樣的功能。為數(shù)據(jù)終端準(zhǔn)備好信號(hào)。該輸出信號(hào)有效——低電平時(shí),表示8250已準(zhǔn)備好。它是向外設(shè)發(fā)送數(shù)據(jù)的請(qǐng)求信號(hào)。為數(shù)據(jù)裝置準(zhǔn)備好信號(hào)。該輸入信號(hào)低電平有效,用來(lái)表示接收數(shù)據(jù)的外設(shè)已準(zhǔn)備好接收數(shù)據(jù)。為接收線路信號(hào)檢測(cè)信號(hào)。該信號(hào)低電平有效,表示MODEM(調(diào)制解調(diào)器)已將載波檢出,通信信號(hào)傳輸正常。?為振鈴指示信號(hào)。該輸入信號(hào)低電平有效,表示MODEM已接收到一個(gè)電話鈴聲信號(hào)。是由用戶(hù)編程指定的輸出端。若用戶(hù)在MODEM控制寄存器第二位(

)寫(xiě)入1,則輸出端可輸出低電平。主復(fù)位信號(hào)(MR)可將置高。與一樣,可以由用戶(hù)編程指定。只是要將MODEM控制寄存器的第三位(

)寫(xiě)入1,才能使為低電平。主復(fù)位信號(hào)(MR)可使其置高電平。

CSOUT為片選輸出信號(hào)。當(dāng)8250的CS0、CS1和同時(shí)有效時(shí),CSOUT為高電平。

DDIS為驅(qū)動(dòng)器禁止信號(hào)。該輸出信號(hào)在CPU讀8250時(shí)為低電平,非讀時(shí)為高電平。可用此信號(hào)來(lái)控制8250與系統(tǒng)總線間的數(shù)據(jù)總線驅(qū)動(dòng)器。為波特率輸出。該端輸出的是,主參考時(shí)鐘頻率除以8250內(nèi)部除數(shù)寄存器中的除數(shù)后所得到的頻率信號(hào)。這個(gè)頻率信號(hào)就是8250的發(fā)送時(shí)鐘信號(hào),是發(fā)送波特率的16倍,若將此信號(hào)接到RCLK上,又可以同時(shí)作為接收時(shí)鐘使用。

INTR為中斷請(qǐng)求輸出信號(hào)。當(dāng)8250中斷允許時(shí),接收錯(cuò)誤、接收數(shù)據(jù)寄存器滿、發(fā)送數(shù)據(jù)寄存器空以及MODEM的狀態(tài)均可產(chǎn)生有效的INTR——高電平信號(hào)。主復(fù)位信號(hào)(MR)可使該輸出信號(hào)無(wú)效。

SOUT為串行輸出信號(hào)。主復(fù)位信號(hào)可使其變?yōu)楦唠娖健?/p>

XTAL1、XTAL2為外部時(shí)鐘端。這兩端可接晶體或直接接外部時(shí)鐘信號(hào)。

D0~D7為雙向數(shù)據(jù)線。該線與系統(tǒng)數(shù)據(jù)總線相連接,用以傳送數(shù)據(jù)、控制信息和狀態(tài)信息。

MR為主復(fù)位輸入信號(hào),高電平有效。主復(fù)位時(shí),除了接收數(shù)據(jù)寄存器、發(fā)送數(shù)據(jù)寄存器和除數(shù)鎖存器外,其他內(nèi)部寄存器及信號(hào)均受到主復(fù)位的影響。詳細(xì)情況如表6.4所示。在表中,有關(guān)中斷狀態(tài),除受MR的影響外,還指出了當(dāng)CPU對(duì)某些寄存器進(jìn)行讀寫(xiě)時(shí)也會(huì)使其復(fù)位的情況。MR通常與系統(tǒng)復(fù)位信號(hào)RESET相連。表6.4MR的功能

2.8250的工作過(guò)程

這里簡(jiǎn)要說(shuō)明8250的工作過(guò)程。

1)發(fā)送數(shù)據(jù)

CPU執(zhí)行有關(guān)程序,可將要發(fā)送的數(shù)據(jù)寫(xiě)到8250的發(fā)送數(shù)據(jù)寄存器中(見(jiàn)圖6.28(b))。當(dāng)發(fā)送移位寄存器中的數(shù)據(jù)全部由SOUT移出,則發(fā)送移位寄存器就空了。這時(shí),發(fā)送數(shù)據(jù)寄存器中待發(fā)送的數(shù)據(jù)會(huì)自動(dòng)并行送到發(fā)送移位寄存器中。發(fā)送移位寄存器在發(fā)送時(shí)鐘的激勵(lì)下,一位接一位地發(fā)送出去。在發(fā)送過(guò)程中,它會(huì)按照事先由程序規(guī)定好的格式加上啟動(dòng)位、校驗(yàn)位和停止位。一旦發(fā)送數(shù)據(jù)寄存器的內(nèi)容送到發(fā)送移位寄存器中,則發(fā)送數(shù)據(jù)寄存器就空了。它變空后,會(huì)在狀態(tài)寄存器中建立發(fā)送數(shù)據(jù)寄存器空的狀態(tài)位;而且也可以因此而產(chǎn)生中斷。因此,利用查詢(xún)?cè)摖顟B(tài)或者利用中斷都可實(shí)現(xiàn)數(shù)據(jù)的串行發(fā)送。

2)接收數(shù)據(jù)

由通信對(duì)方來(lái)的數(shù)據(jù)在接收時(shí)鐘RCLK的作用下,通過(guò)SIN逐位進(jìn)入接收移位寄存器。當(dāng)接收移位寄存器接收到一個(gè)完整的數(shù)據(jù)后會(huì)立即自動(dòng)并行傳送到接收數(shù)據(jù)寄存器中,這時(shí)接收數(shù)據(jù)寄存器就滿了。該寄存器滿后,可在狀態(tài)寄存器中建立收滿的狀態(tài);而且也可以因此而產(chǎn)生中斷。因而,利用查詢(xún)?cè)摖顟B(tài)或者利用中斷均可實(shí)現(xiàn)串行數(shù)據(jù)的接收。

目前,串行異步通信的速率一般在幾百波特到幾k波特。無(wú)論是用查詢(xún)方式或中斷方式實(shí)現(xiàn)通信均不是很困難。

3.內(nèi)部寄存器

現(xiàn)在介紹8250的一些內(nèi)部寄存器。只有了解這些內(nèi)部寄存器各位的功能,才能用好8250。介紹這些內(nèi)部寄存器的出發(fā)點(diǎn)也在于此。以下10個(gè)內(nèi)部寄存器與用戶(hù)編程使用8250有關(guān)。

1)通信控制字寄存器

通信控制字寄存器是一個(gè)8位的寄存器,其主要功能如圖6.29所示。圖6.29通信控制字格式該控制字主要用于決定在串行通信時(shí)所使用的數(shù)據(jù)格式,例如數(shù)據(jù)位數(shù)、奇偶校驗(yàn)及停止位的多少。應(yīng)特別注意該控制字的D7。當(dāng)需要讀寫(xiě)除數(shù)鎖存器時(shí),必須先將該字的D7置1;而在讀寫(xiě)其他三個(gè)寄存器時(shí),又要使其為0。

2)通信狀態(tài)寄存器

通信狀態(tài)寄存器是一個(gè)8位寄存器,其各位的功能如圖6.30所示。圖6.30通信狀態(tài)字格式通信狀態(tài)字用于說(shuō)明在通信過(guò)程中8250接收和發(fā)送數(shù)據(jù)的情況。

D0為1時(shí)表示8250已接收到一個(gè)完整的字符,處理器可以從8250的接收數(shù)據(jù)寄存器中讀取。一旦讀取后,該位即變?yōu)?。

D1是越限狀態(tài)標(biāo)志。當(dāng)前一數(shù)據(jù)尚在接收數(shù)據(jù)寄存器中而未被處理器讀走,后一個(gè)數(shù)據(jù)已經(jīng)到來(lái)而將其破壞時(shí),該位為1。處理器讀接收數(shù)據(jù)寄存器時(shí)使該位清0。

D2為奇偶校驗(yàn)錯(cuò)標(biāo)志。在8250對(duì)收到的一個(gè)完整的數(shù)據(jù)進(jìn)行奇偶校驗(yàn)運(yùn)算時(shí),若發(fā)現(xiàn)算出的值與發(fā)送來(lái)的奇偶校驗(yàn)位不同,則使該位為1,表示數(shù)據(jù)可能有錯(cuò)。在處理器讀寄存器時(shí)該位復(fù)位。當(dāng)收到正確數(shù)據(jù)時(shí),可使該位復(fù)位。

D3為結(jié)構(gòu)錯(cuò)標(biāo)志。當(dāng)接收到的數(shù)據(jù)停止位不正確時(shí),該位置1。

D4為線路間斷標(biāo)志。若在大于一個(gè)完整的數(shù)據(jù)字的時(shí)間里收到的均為空閑狀態(tài),則該位置1,表示線路信號(hào)間斷。當(dāng)處理器讀寄存器時(shí)使其復(fù)位。

出現(xiàn)以上4種狀態(tài)中的任何一種都會(huì)使8250發(fā)出線路狀態(tài)錯(cuò)中斷。

D5為1時(shí)表示發(fā)送數(shù)據(jù)寄存器空。處理器一將數(shù)據(jù)寫(xiě)入發(fā)送數(shù)據(jù)寄存器,則使其復(fù)位。

D6為1時(shí)表示發(fā)送移位寄存器中無(wú)數(shù)據(jù)。當(dāng)發(fā)送數(shù)據(jù)寄存器并行送入發(fā)送移位寄存器數(shù)據(jù)時(shí),該位清0。

D7位恒為0。

3)發(fā)送數(shù)據(jù)寄存器

發(fā)送數(shù)據(jù)寄存器是一個(gè)8位的寄存器,發(fā)送數(shù)據(jù)時(shí),處理器將數(shù)據(jù)寫(xiě)入該寄存器。只要發(fā)送移位寄存器空,發(fā)送數(shù)據(jù)寄存器的數(shù)據(jù)便會(huì)由8250的硬件自動(dòng)并行送到移位寄存器中,以便串行移出。

4)接收數(shù)據(jù)寄存器

接收數(shù)據(jù)寄存器是一個(gè)8位的寄存器。8250接收到一個(gè)完整的字符時(shí),便會(huì)將該字符由接收移位寄存器傳送到接收數(shù)據(jù)寄存器。處理器可直接由此寄存器讀取數(shù)據(jù)。

5)除數(shù)鎖存器

除數(shù)鎖存器為16位,它包含兩個(gè)鎖存器,分別為除數(shù)(低8位)鎖存器和除數(shù)(高8位)鎖存器。外部時(shí)鐘被除數(shù)鎖存器中的除數(shù)相除,可以獲得所需的波特率。如果外部時(shí)鐘頻率f已知,而8250所要求的波特率F也已規(guī)定,那么,就可以由下式求出除數(shù)鎖存器應(yīng)鎖存的除數(shù):

除數(shù)?=?f/(16F)

6)中斷允許寄存器

中斷允許字的格式如圖6.31所示,該字存于中斷允許寄存器中,它只用D0~D3這4位。每位的1或0分別用于允許或禁止8250的4個(gè)中斷源提出中斷。如果該寄存器的D0~D3均為0,則禁止8250提出中斷。該寄存器的高4位不用。

在中斷允許字中,接收線路狀態(tài)包括越限錯(cuò)、奇偶錯(cuò)、結(jié)構(gòu)錯(cuò)及間斷等中斷源引起的中斷。對(duì)于MODEM狀態(tài)引起的中斷見(jiàn)下面對(duì)MODEM狀態(tài)寄存器的解釋。圖6.31中斷允許字格式

7)中斷標(biāo)志寄存器

中斷標(biāo)志寄存器為8位,高5位為0,只用低3位做8250的中斷標(biāo)志。8250有4個(gè)中斷源,在8250內(nèi)部安排優(yōu)先級(jí)的順序如下所述:

(1)最高優(yōu)先級(jí)為接收器線路狀態(tài)中斷,包括越限、奇偶錯(cuò)、結(jié)構(gòu)錯(cuò)、間斷等。讀通信狀態(tài)寄存器可使此中斷復(fù)位。

(2)下一個(gè)優(yōu)先級(jí)是接收數(shù)據(jù)寄存器滿中斷。讀接收數(shù)據(jù)寄存器可復(fù)位此中斷。

(3)再下一個(gè)優(yōu)先級(jí)為發(fā)送數(shù)據(jù)寄存器空中斷。寫(xiě)發(fā)送數(shù)據(jù)寄存器可使這一中斷復(fù)位。

(4)最低優(yōu)先級(jí)為MODEM狀態(tài)中斷,包括發(fā)送結(jié)束、數(shù)傳機(jī)準(zhǔn)備好、振鈴指示、接收線路信號(hào)檢測(cè)等MODEM狀態(tài)中斷源。讀MODEM狀態(tài)寄存器可復(fù)位該中斷。

中斷標(biāo)志字的格式如圖6.32所示。圖6.32中斷標(biāo)志字格式

8)?MODEM控制寄存器

MODEM控制寄存器是一個(gè)8位的寄存器,用以控制MODEM或其他數(shù)字設(shè)備。各位的功能如圖6.33所示。

D0位表示數(shù)據(jù)終端準(zhǔn)備好。當(dāng)該位為1時(shí),使8250的DTR輸出為低,向MODEM表明8250已準(zhǔn)備好。若該位為0,則DTR為高,表明8250未準(zhǔn)備好。圖6.33MODEM控制字格式

D1位為1時(shí),8250的輸出低電平,向MODEM發(fā)出請(qǐng)求發(fā)送信號(hào),也以此來(lái)通知MODEM串行接口8250已準(zhǔn)備好。當(dāng)它為0時(shí),?輸出高電平,表明8250未準(zhǔn)備好。

D2位和D3位分別用以控制8250的輸出信號(hào)和。當(dāng)它們?yōu)?時(shí),對(duì)應(yīng)的輸出為0;而當(dāng)它們?yōu)?時(shí),控制8250的輸出為1??梢?jiàn),上面4位的作用在于,它們的狀態(tài)反相后,從相應(yīng)的引線上輸出。

D4位用來(lái)控制循環(huán)檢測(cè),實(shí)現(xiàn)8250的自測(cè)試。當(dāng)D4=1時(shí),SOUT為高電平狀態(tài),而SIN將與系統(tǒng)相分離。這時(shí)發(fā)送移位寄存器的數(shù)據(jù)將由8250內(nèi)部直接回送到接收移位寄存器的輸入端。MODEM的用以控制8250的4個(gè)信號(hào)、、和與系統(tǒng)分離。同時(shí),8250的用來(lái)控制MODEM的4個(gè)輸出信號(hào)、、和,在8250芯片內(nèi)部分別與、、及相連,完成信號(hào)在8250芯片內(nèi)部的返回。這樣一來(lái),8250發(fā)送的串行數(shù)據(jù)立即在8250內(nèi)部被接收,從而完成8250的自檢,而且在完成自測(cè)試過(guò)程中不需要外部連接。在D4=1,即自測(cè)試情況下,中斷仍能進(jìn)行。值得注意的是,在這種情況下,MODEM狀態(tài)中斷是由MODEM控制寄存器提供的。這一點(diǎn)在上面已經(jīng)闡明。

當(dāng)D4=0時(shí),8250正常工作。若由自測(cè)試轉(zhuǎn)到正常工作,則必須對(duì)8250重新初始化,其中包括將D4清0。

9)?MODEM狀態(tài)寄存器

MODEM狀態(tài)寄存器用以提供MODEM或其他外設(shè)加到8250上的控制線的信號(hào)狀態(tài)以及這些控制線的狀態(tài)變化。當(dāng)由MODEM來(lái)的控制線變化時(shí),MODEM狀態(tài)寄存器的低4位被相對(duì)應(yīng)地置1。在讀此寄存器時(shí),使這4位同時(shí)清0。MODEM狀態(tài)字的格式如圖6.34所示。圖6.34MODEM狀態(tài)字格式

MODEM狀態(tài)字的低4位分別對(duì)應(yīng)、、和。當(dāng)某位為1時(shí),表示自上次讀該寄存器之后,相應(yīng)的輸入信號(hào)已改變狀態(tài)。當(dāng)某位為0時(shí),則說(shuō)明相應(yīng)輸入信號(hào)狀態(tài)無(wú)改變。該寄存器D4位的狀態(tài)是輸入信號(hào)反相之后的狀態(tài)。在自測(cè)試時(shí),該位的狀態(tài)等于MODEM控制寄存器位的狀態(tài)。該寄存器的D5位對(duì)應(yīng)輸入狀態(tài)的反相,自測(cè)試時(shí)為的狀態(tài)。

D6位對(duì)應(yīng)輸入信號(hào)的反相,自測(cè)試時(shí)為的狀態(tài)。

D7位對(duì)應(yīng)狀態(tài)的反相,自測(cè)試時(shí)為的狀態(tài)。

4.8250的尋址及連接

8250內(nèi)部有10個(gè)與編程使用有關(guān)的寄存器,利用片選信號(hào)CS0、CS1和可以選中8250。利用片上的A0、A1、A2三條地址線最多可以選擇8個(gè)寄存器——對(duì)應(yīng)3位地址線的8種不同編碼。再利用通信控制字的最高位——除數(shù)鎖定位(DLAB)來(lái)選中除數(shù)鎖定寄存器。由于有的寄存器是只寫(xiě)的,有的寄存器是只讀的,故還可以利用讀寫(xiě)信號(hào)來(lái)加以選擇。通過(guò)上述這些辦法,可以順利地對(duì)8250進(jìn)行尋址。一個(gè)8250芯片占用7個(gè)接口地址。具體的地址安排見(jiàn)表6.5。表6.58250的尋址為了說(shuō)明8250的連接,現(xiàn)以早期PC中的8250與8088系統(tǒng)總線的連接為例,畫(huà)出其連接圖如圖6.35所示。

在圖6.35中,8250的片選信號(hào)是由AEN和A3~A9譯碼產(chǎn)生的,這是由PC的結(jié)構(gòu)決定的。PC的接口地址采用部分地址譯碼,只用A0~A9這10條地址線譯碼決定接口地址。剩下的6條地址線A10~A15空著不用。因此,PC可用的接口地址只有1K(1024)個(gè)。同時(shí),由于DMAC的工作需要,只有AEN信號(hào)為低電平時(shí),接口才能工作,故出現(xiàn)了圖6.35中的譯碼器產(chǎn)生8250的片選信號(hào)。這時(shí),8250的地址范圍為3F8H~3FFH。圖6.358250的連接圖6.35中利用外部時(shí)鐘發(fā)生器產(chǎn)生時(shí)鐘信號(hào)加到8250的XTAL1上。8250的波特率輸出信號(hào)BAUDOUT加到RCLK上作為接收時(shí)鐘。圖中的MC1488和MC1489是用于電平轉(zhuǎn)換的,它們可分別進(jìn)行TTL與RS-232C間的電平轉(zhuǎn)換。

5.初始化及應(yīng)用

8250的初始化過(guò)程,通常是首先將通信控制字的D7置1,即使DLAB=1。在此條件下,將除數(shù)的低8位和高8位分別寫(xiě)入8250的除數(shù)鎖存器。然后,再以不同的地址分別寫(xiě)入通信控制字、MODEM控制字、中斷允許字等。具體初始化過(guò)程可按圖6.36所示的順序依次進(jìn)行。圖6.368250的初始化順序依據(jù)圖6.35的連接,對(duì)8250初始化的程序如下:從上面的初始化程序可以看到,首先寫(xiě)除數(shù)鎖存器。為寫(xiě)除數(shù),首先寫(xiě)通信控制寄存器,使DLAB=1,然后寫(xiě)入16位的除數(shù)0060H,即十進(jìn)制數(shù)96。由于加在XTAL1上的時(shí)鐘頻率為1.8432MHz,故波特率為1200波特。初始化通信控制字為00001010。其指定數(shù)據(jù)為7位,停止位為1位,奇校驗(yàn)。MODEM控制字為03H,即00000011,使和均為低電平,即有效狀態(tài)。最后,將中斷允許控制字寫(xiě)入中斷允許寄存器。由于中斷允許字為00H,故禁止4個(gè)中斷源可能形成的中斷。有關(guān)8250中斷的問(wèn)題,在硬件上INTR是通過(guò)輸出控制的三態(tài)門(mén)接到8259上去的。若允許中斷,則一方面要使輸出為低電平,同時(shí),再初始化中斷允許寄存器。是由MODEM控制字的D3來(lái)控制的。只有當(dāng)MODEM控制字的D3=1時(shí),才為低電平。上述的MODEM控制字為03H,其D3=0,故OUT2=1,這時(shí)禁止中斷請(qǐng)求輸出。發(fā)送數(shù)據(jù)的程序接在初始化程序之后。若采用查詢(xún)方式發(fā)送數(shù)據(jù),且要發(fā)送數(shù)據(jù)的字節(jié)數(shù)放在BX中,要發(fā)送的數(shù)據(jù)順序存放在以SEDATA為首地址的內(nèi)存區(qū)中,則發(fā)送數(shù)據(jù)的程序如下:同樣,在初始化后,可以利用查詢(xún)方式實(shí)現(xiàn)數(shù)據(jù)的接收。下面是8250接收一個(gè)數(shù)據(jù)的程序:該程序首先測(cè)試通信狀態(tài)寄存器,看接收的數(shù)據(jù)是否有錯(cuò)。若有錯(cuò)就轉(zhuǎn)向錯(cuò)誤處理ERROR;若無(wú)錯(cuò)時(shí),再看是否已收到一個(gè)完整的數(shù)據(jù)。若是這樣,則從8250的接收數(shù)據(jù)寄存器中讀出,并取事先約定的7位數(shù)據(jù),將其放在AL中。

下面仍以圖6.35所示的連接形式為例,說(shuō)明利用中斷方式,通過(guò)8250實(shí)現(xiàn)串行異步通信的過(guò)程。為了便于敘述,設(shè)想系統(tǒng)以查詢(xún)方式發(fā)送數(shù)據(jù),以中斷方式接收數(shù)據(jù),則對(duì)8250初始化的程序如下:該程序?qū)?250進(jìn)行初始化,并在初始化完時(shí)(假如其他接口初始化在此之前)開(kāi)中斷。接收中斷服務(wù)程序可如下編寫(xiě):以上就是接收一個(gè)字符的中斷服務(wù)程序。當(dāng)接收數(shù)據(jù)寄存器滿而產(chǎn)生中斷時(shí),此中斷請(qǐng)求經(jīng)過(guò)中斷控制器8259加到CPU上。如前一章所述,中斷響應(yīng)后,可以轉(zhuǎn)向上述中斷服務(wù)程序。該中斷服務(wù)程序首先進(jìn)行斷點(diǎn)現(xiàn)場(chǎng)保護(hù),再取接收數(shù)據(jù)過(guò)程中的狀態(tài),看有無(wú)差錯(cuò)。若有錯(cuò)則轉(zhuǎn)向錯(cuò)誤處理;無(wú)錯(cuò)則取得接收到的一個(gè)字符,將它放在DS:BX指定的存儲(chǔ)單元中,并存儲(chǔ)接收數(shù)據(jù)緩沖區(qū)的指針到BUFFER,以使下次中斷使用。然后恢復(fù)斷點(diǎn),開(kāi)中斷并中斷返回。這里需特別說(shuō)明的是,在中斷服務(wù)程序結(jié)束前,必須給8259一個(gè)中斷結(jié)束命令EOI,這是第4章敘述過(guò)的。只有這樣,8259才能將接收中斷的狀態(tài)復(fù)位,使系統(tǒng)正常工作。6.4.3串行通信總線RS-232C

隨著微型機(jī)的發(fā)展,先后研制出多種串行總線標(biāo)準(zhǔn)。過(guò)去的PC上主要是RS-232C,現(xiàn)在的PC上已廣泛采用通用串行總線(USB)及IEEE-1394。在工作控制領(lǐng)域則采用多種串行總線標(biāo)準(zhǔn),如BIT-BUS,I2C,SPI/SCI,RS-232C,RS-422,RS-488等。

RS-232C以其簡(jiǎn)單可靠、易于實(shí)現(xiàn)的特點(diǎn),在微型機(jī)中獲得廣泛的應(yīng)用。下面就對(duì)RS-232C進(jìn)行簡(jiǎn)單描述。

1.RS-232C總線的特點(diǎn)

在過(guò)去,在這些串行總線中,RC-232C應(yīng)用得最為廣泛,這是因?yàn)樗邆湓S多優(yōu)點(diǎn):

(1)信號(hào)線少。RS-232C總線規(guī)定了25條線,包含兩個(gè)信號(hào)通道,即第一通道(又稱(chēng)主通道)和第二通道(又稱(chēng)副通道)。利用該總線可以實(shí)現(xiàn)雙工通信,通常主通道較常使用,而副通道較少使用。在一般應(yīng)用中,雙工通信只用很少幾條線就可實(shí)現(xiàn)。例如,一條收、一條發(fā)、再加一條地線就可以實(shí)現(xiàn)微機(jī)到微機(jī)或微機(jī)到其他設(shè)備的全雙工通信。目前所見(jiàn)到的應(yīng)用中,少則3條線,多則7條或8條線即可完成。

(2)有多種可供選擇的傳送速率。RS-232C規(guī)定的標(biāo)準(zhǔn)傳送速率有:50,75,110,150,300,600,1200,2400,4800,9600和19200波特。可以靈活地適應(yīng)于不同速率的設(shè)備。對(duì)于慢速外設(shè)可以選較低的傳送速率;反之,可選較高的傳送速率。

(3)傳送距離遠(yuǎn)。由于RS-232C采用串行傳送方式,并且將微機(jī)的TTL電平轉(zhuǎn)換為RS-232C的電平,因此其傳送距離在基帶傳送時(shí)可達(dá)30m。若利用光電隔離20mA的電流環(huán)進(jìn)行傳送,其傳送距離可以達(dá)到1000m。當(dāng)然,如果在該總線接口上再加上調(diào)制解調(diào)器(MODEM),通過(guò)有線、無(wú)線或光纖進(jìn)行傳送,其傳送距離就會(huì)更遠(yuǎn)。

(4)?RS-232C采用負(fù)邏輯無(wú)間隔不歸零電平碼傳送。規(guī)定邏輯“1”為低于?-5?V的信號(hào),邏輯“0”為大于?+5?V的信號(hào)。一般多采用?±12?V或?±15?V,這就大大提高了抗干擾能力。

2.RS-232C接口總線的實(shí)現(xiàn)

根據(jù)前面的敘述,RS-232C總線的接口信號(hào)可以用多種方法形成。特別是各微型機(jī)芯片生產(chǎn)廠家提供了多種芯片,使實(shí)現(xiàn)該總線變得非常容易。例如,Z80系列的SIO、M68系列的ACIA、Intel80系列的8251(8250)等等均可以實(shí)現(xiàn)接口信號(hào)。同時(shí),不少?gòu)S家也生產(chǎn)了插在各種總線上的RS-232C通信接口插件(卡)。需要時(shí),也可以直接選購(gòu)。為了說(shuō)明問(wèn)題,將簡(jiǎn)化的RS-232C接口形成電路畫(huà)在圖6.37上。圖6.37RS-2322C總線形成電路由圖6.37可以看到,接口芯片8250提供的輸出信號(hào),主要是SOUT、、等,均要通過(guò)電平轉(zhuǎn)換電路75150將8250的TTL電平轉(zhuǎn)換成負(fù)邏輯的RS-232C電平,然后接到25線插座的相應(yīng)引線上,傳送到接收端。同樣,對(duì)方發(fā)送來(lái)的RS-232C電平信號(hào),如、、等也要經(jīng)電平轉(zhuǎn)換電路75154將RS-232C電平轉(zhuǎn)換為8250所需要的TTL電平。除了上面的電路之外,也常用MC1488和MC1489來(lái)實(shí)現(xiàn)RS-232C收發(fā)器。信號(hào)由8250產(chǎn)生并發(fā)送,此信號(hào)經(jīng)MC1488驅(qū)動(dòng)器轉(zhuǎn)換為RS-232C電平進(jìn)行傳送。信號(hào)到達(dá)對(duì)方,再由對(duì)方的接收電路MC1489將其轉(zhuǎn)換為T(mén)TL電平,加到對(duì)方的8250或其他類(lèi)似芯片上。對(duì)方發(fā)來(lái)的信號(hào)同樣用MC1489進(jìn)行轉(zhuǎn)換,見(jiàn)圖6.35。為了提高串行傳送的抗干擾性,增加傳送距離(通常可達(dá)1?km),經(jīng)常采用電流環(huán)進(jìn)行串行數(shù)據(jù)傳送。實(shí)際上,圖6.37中已包括了電流環(huán)電路。為了更加清楚起見(jiàn),現(xiàn)只將電流環(huán)部分畫(huà)出,表示在圖6.38上。

圖6.38只畫(huà)出了由微型機(jī)甲向微型機(jī)乙的電流環(huán)傳送電路。讀者一定可以想像出從乙向甲的電流環(huán)傳送的情況。當(dāng)SOUT輸出為高電平時(shí),環(huán)路中有20mA左右的電流,使發(fā)光二極管發(fā)光,經(jīng)光敏三極管可在8250SIN端得到高電平。當(dāng)SOUT發(fā)送低電平時(shí),電流環(huán)路中無(wú)電流,則SIN可收到低電平。圖6.38電流環(huán)傳輸電路6.5.1概述

鍵盤(pán)是微型機(jī)應(yīng)用系統(tǒng)中不可缺少的外圍設(shè)備,即使是單片機(jī),通常也配有十六進(jìn)制的鍵盤(pán)。操作人員通過(guò)鍵盤(pán)可以進(jìn)行數(shù)據(jù)輸入、輸出,程序生成,程序查錯(cuò),程序執(zhí)行等操作。它是人—機(jī)會(huì)話的一個(gè)重要輸入工具。

在最簡(jiǎn)單的微型機(jī)系統(tǒng)中,在控制面板上僅設(shè)置幾個(gè)鍵。當(dāng)按鍵數(shù)很少時(shí),常采用三態(tài)門(mén)直接接口輸入的形式,如圖6.39所示。6.5鍵盤(pán)接口圖6.39三態(tài)門(mén)按鍵接口圖6.39中,采用的三態(tài)門(mén)可以是前面提到的74LS244。利用一片244即可接8個(gè)按鍵。由于這種鍵很少,接口很簡(jiǎn)單,此處不再說(shuō)明。

常用的鍵盤(pán)有兩種類(lèi)型,即編碼式鍵盤(pán)和非編碼式鍵盤(pán)。編碼式鍵盤(pán)包括檢測(cè)按了哪一個(gè)鍵并產(chǎn)生這個(gè)鍵相應(yīng)代碼的一些必要硬件(通常這種鍵盤(pán)中有一塊單片機(jī)作為其控制核心)。非編碼式鍵盤(pán)沒(méi)有這樣一些獨(dú)立的硬件,而分析哪一個(gè)鍵按下這樣的操作是通過(guò)接口硬件,并由主處理器執(zhí)行相應(yīng)程序來(lái)完成的。主處理器需要周期性地對(duì)鍵盤(pán)進(jìn)行掃描,查詢(xún)是否有鍵閉合,這樣主機(jī)效率就會(huì)下降。由此可見(jiàn),兩種鍵盤(pán)各有優(yōu)缺點(diǎn),前者費(fèi)硬件,價(jià)格較高;后者主機(jī)效率低,費(fèi)時(shí)間,但價(jià)格低。目前小型的微型機(jī)應(yīng)用系統(tǒng)常使用非編碼式鍵盤(pán)。另外,在微型機(jī)應(yīng)用系統(tǒng)中,控制臺(tái)面板的功能按鍵接口和非編碼式鍵盤(pán)非常類(lèi)似。因此,下面以非編碼式鍵盤(pán)接口為例,講述硬、軟件的接口。6.5.2鍵盤(pán)的基本結(jié)構(gòu)

一般非編碼式鍵盤(pán)采用矩陣結(jié)構(gòu),如圖6.40所示。圖中采用6×5矩陣,共有30個(gè)按鍵。微處理器通過(guò)對(duì)行和列進(jìn)行掃描來(lái)確定有沒(méi)有鍵按下,是哪一個(gè)鍵按下。然后將按下鍵的行、列編碼送處理器進(jìn)行處理。圖6.40矩陣結(jié)構(gòu)鍵盤(pán)及其接口在30個(gè)按鍵中,16個(gè)(0~F)是十六進(jìn)制鍵,其余則是功能鍵。每個(gè)鍵占有惟一的行與列的交叉點(diǎn),每個(gè)交叉點(diǎn)分配有相應(yīng)的鍵值。只要按下某一個(gè)鍵,經(jīng)鍵盤(pán)掃描程序和接口,并經(jīng)鍵盤(pán)譯碼程序,就可以得到相應(yīng)的鍵值。也就是說(shuō),微處理器知道了是哪一個(gè)鍵被按下,然后可以做相應(yīng)的處理。如按下第2行、第4列的按鍵(十六進(jìn)制“4”鍵),則經(jīng)鍵盤(pán)掃描和鍵盤(pán)譯碼以后,就可以在寄存器AL中得到對(duì)應(yīng)的鍵值04H。在圖6.40中,按鍵對(duì)應(yīng)的鍵值被標(biāo)注在交叉點(diǎn)的旁邊。微處理器通過(guò)接口對(duì)鍵盤(pán)矩陣進(jìn)行掃描的過(guò)程如下:在初始狀態(tài)下,所有行線均為高電平。掃描開(kāi)始,首先給第0行加一個(gè)低電平,即掃描第0行。然后檢查一下各列信號(hào),看是否有哪一列輸出變成了低電平(當(dāng)鍵按下時(shí),行線和列線通過(guò)鍵接觸在一起,行線的低電平就傳送到對(duì)應(yīng)的列線)。如果其中有一列變?yōu)榈碗娖剑敲锤鶕?jù)行列號(hào)即可知道是哪一個(gè)鍵按下了。如果未發(fā)現(xiàn)有變?yōu)榈碗娖降牧芯€,則接著掃描下1行。這時(shí),使第0行變高,第1行變低。然后再檢查各列線情況……如此循環(huán)掃描,只要有鍵按下,總是可以發(fā)現(xiàn)的。

在掃描鍵盤(pán)過(guò)程中,應(yīng)注意如下問(wèn)題。

(1)當(dāng)操作者按下或抬起按鍵時(shí),按鍵會(huì)產(chǎn)生機(jī)械抖動(dòng)。這種抖動(dòng)經(jīng)常發(fā)生在按下或抬起的瞬間,一般持續(xù)幾毫秒到十幾毫秒,抖動(dòng)時(shí)間隨鍵的結(jié)構(gòu)不同而不同。在掃描鍵盤(pán)過(guò)程中,必須想辦法消除鍵抖動(dòng),否則會(huì)引起錯(cuò)誤。

消除鍵抖動(dòng)可以用硬件電路來(lái)實(shí)現(xiàn),如圖6.41所示。它利用觸發(fā)器來(lái)鎖定按鍵狀態(tài),以消除抖動(dòng)的影響。也可以利用現(xiàn)成的專(zhuān)用消抖電路,如MC14490就是六路消抖電路。較簡(jiǎn)單的辦法是用軟件延時(shí)方法來(lái)消除鍵的抖動(dòng)。也就是說(shuō),一旦發(fā)現(xiàn)有鍵按下,就延時(shí)20ms以后再檢測(cè)按鍵的狀態(tài)。這樣就避開(kāi)了鍵發(fā)生抖動(dòng)的那一段時(shí)間,使CPU能可靠地讀按鍵狀態(tài)。在編制鍵盤(pán)掃描程序時(shí),只要發(fā)現(xiàn)按鍵狀態(tài)有變化,即無(wú)論是按下還是抬起,程序都應(yīng)延時(shí)20ms以后再進(jìn)行其他操作。圖6.41觸發(fā)器消抖電路

(2)在鍵盤(pán)掃描中,應(yīng)防止按一次鍵而有多個(gè)對(duì)應(yīng)鍵值輸入的情況。這種情況的發(fā)生是由于鍵掃描速度和鍵處理速度較快,而按一次鍵的時(shí)間相對(duì)比較長(zhǎng)(一般在50?ms到100?ms左右)。當(dāng)某一個(gè)按下的按鍵還未釋放時(shí),鍵掃描程序和鍵處理程序已執(zhí)行了多遍。這樣一來(lái),由于程序執(zhí)行和按鍵動(dòng)作不同步,而造成按一次鍵有多個(gè)鍵值輸入的錯(cuò)誤情況發(fā)生。為了防止這種情況的發(fā)生,必須保證按一次鍵,CPU只對(duì)該鍵做一次處理。為此,在鍵掃描程序中不僅要檢測(cè)是否有鍵按下,在有鍵按下的情況,做一次鍵處理,而且在鍵處理完畢后,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論