《匯編語言程序設(shè)計(第2版)》第七章 輸入輸出程序設(shè)計_第1頁
《匯編語言程序設(shè)計(第2版)》第七章 輸入輸出程序設(shè)計_第2頁
《匯編語言程序設(shè)計(第2版)》第七章 輸入輸出程序設(shè)計_第3頁
《匯編語言程序設(shè)計(第2版)》第七章 輸入輸出程序設(shè)計_第4頁
《匯編語言程序設(shè)計(第2版)》第七章 輸入輸出程序設(shè)計_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計(第2版)第7章輸入/輸出程序設(shè)計

在本章中講述輸入輸出的基本技術(shù)及相關(guān)概念,應(yīng)重點掌握數(shù)據(jù)信息、狀態(tài)信息、控制信息的含義;端口地址的概念與兩種編址方式;輸入/輸出的四種方式及其特點;中斷的概念、中斷源及內(nèi)外部中斷的劃分、中斷矢量表結(jié)構(gòu)、中斷響應(yīng)條件、中斷響應(yīng)過程等內(nèi)容以及能編寫簡單的中斷服務(wù)程序。7.1工作原理

7.2數(shù)據(jù)的輸入/輸出方式實訓(xùn)一數(shù)據(jù)采集:查詢方式實訓(xùn)二PC機間的相互通信:查詢方式

輸入就是CPU從外設(shè)中讀取信息,輸出就是CPU向外設(shè)寫入信息。程序和各種數(shù)據(jù)都要通過輸入操作才能進入計算機內(nèi),而計算結(jié)果或控制指令則要通過輸出操作送給相關(guān)外設(shè)。因此,輸入/輸出操作是CPU訪問的外設(shè)關(guān)鍵環(huán)節(jié)。7.1工作原理7.1.1CPU與外設(shè)的信息交換7.1.2CPU尋址外設(shè)的方式7.1.3數(shù)據(jù)傳送方式第7章輸入/輸出程序設(shè)計7.1.1CPU與外設(shè)的信息交換CPU與外設(shè)之間要交換的信息,如圖7-1所示。一般情況下,外設(shè)并不直接與CPU相連,而是通過稱為I/O接口的電路與CPU連接。I/O接口一方面起信號轉(zhuǎn)換作用,使CPU和外設(shè)可以互相“理解”對方的信號;另一方面匹配雙方的工作速度。

端口地址

數(shù)據(jù)

控制或狀態(tài)

數(shù)據(jù)

控制

狀態(tài)

I/O設(shè)備

I/O接口

CPU

第7章輸入/輸出程序設(shè)計CPU與I/O接口間通常需要下列接口信號:1.數(shù)據(jù)信息:

數(shù)據(jù)通常為8位或16位,可分為三種基本形式:數(shù)字量、開關(guān)量和模擬量。

由鍵盤、光電輸入機等提供的二進制形式的信息為數(shù)字量。

只有兩個狀態(tài)的量,如電機的啟停、開關(guān)的開合等,只須用一位二進制數(shù)即可表示,稱為開關(guān)量。

由傳感器等提供的信號往往是模擬量(連續(xù)變化的信號),它需先經(jīng)過模數(shù)(A/D)轉(zhuǎn)換后,才能輸入到計算機中去。如溫度、電壓等。第7章輸入/輸出程序設(shè)計2.狀態(tài)信息:指I/O接口反映I/O設(shè)備工作狀態(tài)的信息。如表示輸入裝置是否已準備好的信息(READY信號),表示輸出裝置是否忙的信息(BUSY信號)等。3.控制信息:指CPU向I/O設(shè)備發(fā)送的控制其工作的信息。如選通信號、啟停信號等。第7章輸入/輸出程序設(shè)計

這三類信息的性質(zhì)是不同的,必須分別傳送。通常是分配不同的端口地址的方法加以區(qū)別,所以一個外設(shè)往往要占幾個端口地址。一般狀態(tài)信息和控制信息往往只有一位或二位,故也常常是狀態(tài)和控制信息共用一個端口地址。返回本節(jié)首頁返回本章首頁第7章輸入/輸出程序設(shè)計7.1.2CPU尋址外設(shè)的方式1.端口地址的概念

CPU能夠與內(nèi)存交換數(shù)據(jù),也能與外設(shè)交換數(shù)據(jù),其工作原理是相似的。內(nèi)存單元都進行了編址,每一個字節(jié)的存儲單元占一個地址,CPU通過在其地址線上發(fā)地址信號來通知存儲器要與哪一個存儲單元交換數(shù)據(jù);同樣,計算機對外設(shè)的接口也進行了編址,這叫做端口地址。在與I/O接口(有時也簡稱為外設(shè),但實際指的是I/O接口)交換數(shù)據(jù)時,CPU通過在地址線上發(fā)出要訪問外設(shè)的端口地址來指出要與哪個外設(shè)交換數(shù)據(jù)。第7章輸入/輸出程序設(shè)計2.兩種編址方式

存儲器有地址,I/O接口也有地址,那么CPU在地址線上發(fā)出的地址是存儲器地址呢?還是I/O接口地址?這就涉及到了I/O接口的編址方式,有兩種方式,如下:第7章輸入/輸出程序設(shè)計①I/O設(shè)備與存儲器統(tǒng)一編址

這種方式對二者統(tǒng)一編址,在整個CPU地址空間中,劃出一部分地址為存儲器地址,另一部分地址為I/O設(shè)備地址。在此編址方式下,CPU將I/O設(shè)備與存儲器同樣看待,因此不需要專門的I/O指令,CPU對存儲器的全部操作指令均可用于I/O操作,故尋址方式和訪問指令多,而且方便。統(tǒng)一編址的缺點是I/O設(shè)備占用了部分存儲器地址空間,從而減少了存儲器可用地址空間的大小,同時在程序中不好區(qū)分是訪問存儲器還是訪問I/O設(shè)備。第7章輸入/輸出程序設(shè)計②I/O設(shè)備獨立編址

這種方式中存儲器與I/O設(shè)備各有自己獨立的地址空間,各自單獨編址,互不相關(guān)。這種方式下硬件上CPU需要一根專門的引腳來指明地址線上的地址是存儲器地址還是I/O設(shè)備地址;軟件上需要專門的輸入輸出指令來訪問I/O設(shè)備。此方式的優(yōu)點是I/O設(shè)備不占存儲器地址空間;缺點是需要專門的I/O指令。返回上一節(jié)返回本章首頁返回本節(jié)首頁第7章輸入/輸出程序設(shè)計7.1.3數(shù)據(jù)傳送方式

外部設(shè)備多種多樣,不同的設(shè)備需要不同的控制方法。例如:外設(shè)的工作速度高于CPU,則CPU可直接向其發(fā)送或讀取數(shù)據(jù)而不用考慮數(shù)據(jù)丟失問題,而對慢速外設(shè)則不能這樣。CPU與外設(shè)間交換數(shù)據(jù)的方法,共有四種可供選擇。不同的方法其效率、安全性、復(fù)雜性、成本各不相同,不同的外設(shè)需要不同的數(shù)據(jù)交換方式。下面對這些方式作簡要介紹,下節(jié)中進行詳述。第7章輸入/輸出程序設(shè)計1.無條件傳送方式

又稱直接I/O方式,這種方式下,CPU不管外設(shè)的狀態(tài)如何,直接對其執(zhí)行輸入或輸出操作。

2.查詢方式

采用這種方式,CPU在進行輸入輸出前,先檢查外設(shè)提供的READY(準備好)號是否有效,若有效,表示外設(shè)可以接受操作,CPU即進行操作;若無效,表示外設(shè)暫不能接受操作,CPU則等待。在等待期間,CPU所做的只是循環(huán)檢測READY信號,一旦發(fā)現(xiàn)其變?yōu)橛行?,則立即進行操作。第7章輸入/輸出程序設(shè)計3.中斷方式

這種方式下,CPU執(zhí)行主程序,當(dāng)外設(shè)有數(shù)據(jù)要和CPU交換時,外設(shè)向CPU發(fā)送一中斷請求信號,CPU收到這一信號后中止當(dāng)前正在運行的程序,轉(zhuǎn)而執(zhí)行一段特定的程序(中斷服務(wù)程序)來為外設(shè)服務(wù)。服務(wù)完后,CPU再恢復(fù)執(zhí)行原先被中止的程序。第7章輸入/輸出程序設(shè)計4.DMA方式

前三種方式中,數(shù)據(jù)的傳輸都要經(jīng)過CPU,而有時外設(shè)有大量數(shù)據(jù)需要放入內(nèi)存(或從內(nèi)存讀出),如果每個字節(jié)都先由CPU從外設(shè)中讀入,然后再寫入內(nèi)存,這樣的方式效率太低(尤其當(dāng)外設(shè)是高速外設(shè)時),這時可采用DMA方式。這種方式下,DMA控制器先請求CPU讓出總線控制權(quán),CPU同意后,將自己掛起,總線由DMA控制器控制,它引導(dǎo)外設(shè)直接將數(shù)據(jù)送入內(nèi)存(或反之)。在傳送結(jié)束后,DMA控制器通知CPU重新接管總線控制權(quán),隨后自己放棄總線控制。返回本章首頁返回上一節(jié)返回本節(jié)首頁第7章輸入/輸出程序設(shè)計7.2數(shù)據(jù)的輸入/輸出方式7.2.1直接I/O方式7.2.2查詢方式第7章輸入/輸出程序設(shè)計7.2.1直接I/O方式

這種方式下,CPU不查詢外設(shè)狀態(tài),在其需要時直接對外設(shè)執(zhí)行I/O操作。此方式優(yōu)點是硬件和軟件都達到最簡單;缺點是外設(shè)必須隨時處于待命狀態(tài),并且外設(shè)的處理速度能跟上CPU的速度,否則就會出錯。第7章輸入/輸出程序設(shè)計【例7.1】發(fā)聲程序

PC機的揚聲驅(qū)動系統(tǒng)如圖7-2所示。8253定時器

與門驅(qū)動器8255APB口D0D1D2D3D4D5D6D7圖7-2PC機的揚聲驅(qū)動系統(tǒng)第7章輸入/輸出程序設(shè)計

揚聲器的發(fā)聲是由輸出寄存器的二位進行控制的。輸出寄存器的端口地址為61H。

揚聲器發(fā)聲有兩種方式:直接對端口61H的D1位交替輸出0或1,使揚聲器交替地通與斷,推動揚聲器發(fā)聲;定時器控制輸出方式是控制端口61H的D0位驅(qū)動揚聲器發(fā)出聲音。若發(fā)聲程序不使用定時器,端口61H的D0位清0。

由于揚聲器總是隨時可用的,故CPU可用直接I/O方式對其操作。

程序如下:第7章輸入/輸出程序設(shè)計CODE SEGMENT

ASSUMECS:CODE

START: MOV DX,1000H ;開關(guān)次數(shù)

IN AL,61H ;取端口61H的內(nèi)容

PUSH AX ;入棧保存,以便退出時恢復(fù)

AND AL,11111100B ;將第0、1位置0

SOUND: XOR AL,2 ;D1位取反

OUT 61H,AL ;輸出到端口61H

MOV CX,2000H ;設(shè)置延時空循環(huán)的次數(shù)

DELAY: LOOP DELAY ;空循環(huán),延時一小會兒

DEC DX ;共1000H次

JNZ SOUND

POP AX ;從堆棧中彈出原AX內(nèi)容

OUT 61H,AL ;恢復(fù)原61H端口內(nèi)容

MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS

END START返回本章首頁返回本節(jié)首頁第7章輸入/輸出程序設(shè)計

采用這種方式時,CPU在進行一次I/O操作之前,必須先對外設(shè)的狀態(tài)進行查詢,流程如右圖所示。7.2.2查詢I/O方式

查詢傳送方式的優(yōu)點:①安全可靠;②用于接口的硬件較省。缺點:CPU必須循環(huán)等待外設(shè)準備就序,導(dǎo)致效率不高。

啟動

測試I/O設(shè)備狀態(tài)

準備就緒?

執(zhí)行數(shù)據(jù)傳送

結(jié)束

第7章輸入/輸出程序設(shè)計有關(guān)打印機的控制方法說明如下:

1.打印機與CPU要交換的信息

①數(shù)據(jù):CPU要打印機打印的字符。

②狀態(tài)信息:表明打印機運行情況的信息。

③控制信息:CPU用以控制打印機動作的信息。

這三種信息分別用打印機的數(shù)據(jù)寄存器、狀態(tài)寄存器、控制寄存器存放,這三個寄存器均為8位,其端口地址分別為378H、379H、37AH(在BIOS數(shù)據(jù)區(qū)0040:0008H存放著這三個寄存器的首地址)。

【例7.2】用查詢輸出方式使打印機打印AL內(nèi)的一個字符。第7章輸入/輸出程序設(shè)計2.控制寄存器各位含義

位0:選通信號。正常工作時該位為0,當(dāng)已將數(shù)據(jù)發(fā)送到打印機的數(shù)據(jù)寄存器后,應(yīng)將該位置1,以通知打印機從數(shù)據(jù)寄存器取出數(shù)據(jù)。置1后,須馬上再置回0。

位1:自動換行。置1要求打印機在打印完一行后(回車時)自動走紙。置0則需要先向打印機輸出換行符(0AH)控制走紙。通常設(shè)為0。

位2:初始化信號。正常工作時這一位為1,需要重新初始化打印機時,將這一位 先清0再置1,并且清0時間要維持0.05秒以上。初始化又稱打印機復(fù)位,打印頭回到最左邊。

位3:聯(lián)機命令。置1將設(shè)置打印機在聯(lián)機工作方式,控制打印機時總是把這一位置1,否則打印機不能正常工作。正常打印時這一位需保持1。

位4:中斷允許。置0為不允許打印機產(chǎn)生中斷。置1允許打印機中斷,這時采用中斷方式傳送數(shù)據(jù),當(dāng)打印機可以接收新數(shù)據(jù)時,產(chǎn)生IRQ7中斷。

位5~位7:未用。第7章輸入/輸出程序設(shè)計3.狀態(tài)寄存器各位含義

位0~2:未用。

位3:0=打印機出錯。1=沒有錯誤。

位4:0=打印機脫機,這時不能正常工作。1=打印機聯(lián)機。

位5:0=打印機有紙,1=無紙。

位6:0=打印機確認接收到字符。1=正常。當(dāng)打印機正確接收1字節(jié)的數(shù)據(jù)后,就送回一個低電位的認可信號,這個信號只維持很短的時間,然后又恢復(fù)高電位。

位7:0=打印機忙,1=打印機不忙。第7章輸入/輸出程序設(shè)計4.打印過程說明

要打印一個字符,須先將字符寫入打印機的數(shù)據(jù)寄存器,然后置控制寄存器的選通位為1,即將控制碼0DH(即位0、位2、位3為1,其余為0)送給打印機,選通打印機后,再改送控制碼0CH(即置選通位為0),使打印機恢復(fù)正常。這樣才能使打印機從數(shù)據(jù)寄存器中取出字符打印。并且,只有在打印機不忙時,才可向它發(fā)送選通信號。

程序如下:第7章輸入/輸出程序設(shè)計CODE SEGMENT

ASSUMECS:CODE

START: MOV DX,37AH

MOV AL,08H

OUT DX,AL ;初始化打印機

MOV CX,1000

INIT1: LOOP INIT1 ;延遲,維持初始化信號一段時間

MOV AL,0CH

OUT DX,AL ;結(jié)束初始化,保持聯(lián)機

MOV DX,379H第7章輸入/輸出程序設(shè)計WAIT1: IN AL,DX ;讀取打印機狀態(tài)寄存器

TEST AL,80H

JZ WAIT1 ;若打印機忙,循環(huán)等待

MOV AL,‘A’ ;設(shè)置待打印字符

MOV DX,378H

OUT DX,AL ;AL中數(shù)據(jù)→打印機數(shù)據(jù)寄存器

MOV DX,37AH

MOV AL,0DH ;選通打印機

OUT DX,AL

DEC AL

OUT DX,AL ;恢復(fù)正常

MOV AH,4CH

INT 21H

CODE ENDS

END START返回本章首頁返回本節(jié)首頁返回上一節(jié)第7章輸入/輸出程序設(shè)計實訓(xùn)一數(shù)據(jù)采集:查詢方式

實訓(xùn)內(nèi)容:一個有8個模擬量的數(shù)據(jù)采集系統(tǒng),CPU用查詢方式與其交換數(shù)據(jù),電路如圖7-5所示。8個輸入模擬量,經(jīng)過多路開關(guān)選通后送入A/D轉(zhuǎn)換器,多路開關(guān)由端口2的D0、D1、D2位控制。000相應(yīng)于選通A0輸入,…,111選通A7輸入。每次只有一個模擬量送入A/D轉(zhuǎn)換器。端口2的D3位控制A/D轉(zhuǎn)換器的啟停。A/D轉(zhuǎn)換器的READY信號由端口1的D0輸出到CPU的數(shù)據(jù)總線,經(jīng)A/D轉(zhuǎn)換后的數(shù)據(jù)由端口0輸出至數(shù)據(jù)總線。對這樣一個數(shù)據(jù)采集系統(tǒng),編寫數(shù)據(jù)采集程序。第7章輸入/輸出程序設(shè)計圖7-4數(shù)據(jù)采集系統(tǒng)8個模擬量…A0A7

數(shù)據(jù)線DB

8088

CPU

端口0端口1端口2A/D轉(zhuǎn)換

多路

開關(guān)

8位數(shù)據(jù)

1位狀態(tài)

READY

數(shù)據(jù)

1個模擬量D3D2D1D0

啟動第7章輸入/輸出程序設(shè)計

分析:CPU可以依次向端口2的D2-D0位寫入0~7之間的一個數(shù),以便控制多路開關(guān)選通一個模擬量輸出;同時CPU要使端口2的D3位為1,以啟動A/D轉(zhuǎn)換器。然后,CPU循環(huán)查詢A/D轉(zhuǎn)換器的READY信號,一旦發(fā)現(xiàn)該信號為1,表示A/D轉(zhuǎn)換器已將數(shù)據(jù)準備好,CPU即可讀取。

采集程序如下:第7章輸入/輸出程序設(shè)計 MOV SI,100H ;設(shè)置輸入數(shù)據(jù)緩沖區(qū)首址

MOV BL,08H ;使D3位為1,同時選擇第1個模擬量通過多路開關(guān)

MOV CX,8 ;設(shè)置循環(huán)次數(shù)

AGAIN: MOV AL,0 ;使D3位為0

OUT 2,AL ;停止A/D轉(zhuǎn)換

CALL DELAY ;調(diào)用延時子程序,等待A/D停止操作完成

MOV AL,BL

OUT 2,AL ;啟動A/D轉(zhuǎn)換,且選擇一個模擬量

WAIT1: IN AL,1 ;輸入A/D狀態(tài)信息

TEST AL,1

JZ WAIT1 ;若未準備好,則循環(huán)等待

IN AL,0 ;輸入數(shù)據(jù)

MOV [SI],AL ;保存數(shù)據(jù)

INC SI

INC BL ;使多路開關(guān)選通下一個模擬量

LOOP AGAIN ;循環(huán)輸入8個模擬量

HLT返回本章首頁第7章輸入/輸出程序設(shè)計實訓(xùn)二PC機間的相互通信:查詢方式

實訓(xùn)內(nèi)容:設(shè)計一套系統(tǒng),能在二臺PC機之間以查詢方式實現(xiàn)串行通信。

分析:這套系統(tǒng)應(yīng)包含硬件連接圖及軟件二部分。由于串行通信的知識前面沒講,所以下面先對相關(guān)知識作一下簡介,最后再給出參考硬件連接圖及程序。第7章輸入/輸出程序設(shè)計1.串行通信基本概念

微機間的通信有并行通信和串行通信兩種方式。并行通信中一次可以傳輸一個字節(jié)或更多的位數(shù)。串行通信是在一根傳輸線上一位一位地傳送信息。與并行通信相比,串行通信所用傳輸線少,成本低,因而應(yīng)用廣泛。

在通信中,通信雙方要想相互理解對方所發(fā)信號的含義,就必須先就信號發(fā)送速度、信息格式等諸多問題作統(tǒng)一的約定,這就涉及到了通信協(xié)議。第7章輸入/輸出程序設(shè)計(l)異步通信的信息格式

串行通信的通信方式又分異步通信和同步通信兩種。本處只介紹異步通信。

異步通信的信息格式是,一個傳輸線上的字符由四個部分組成:起始位(占1位),數(shù)據(jù)位(占5~8位),奇偶校驗位(占1位,也可以沒有校驗位),停止位(占1位或1位半或2位)。如圖7-6所示。(2)傳輸速率

串行通信中,傳輸速率是用每秒傳送的位數(shù)(位/p)即波特率來表示的。最常用的標準波特率是110,300,1000,1200,2400,4800,9600和19200位/S。第7章輸入/輸出程序設(shè)計圖7-5異步通信信息格式

傳送開始之前,發(fā)收雙方要把所采用的信息格式(包括字符的數(shù)據(jù)位長度,停止位長度,有無奇仍校驗位以及采用奇校還是偶校等)和數(shù)據(jù)傳輸速率即波特率作統(tǒng)一的約定,即規(guī)定傳輸協(xié)議。如果要改變格式和傳輸速率,則只能雙方同時修改,否則會出錯。1(Mark)起始位校驗位停止位0(Space)數(shù)據(jù)位第7章輸入/輸出程序設(shè)計(3)連接方式

近距離的二臺計算機可以直接通過機箱后面的RS-232C串行接口連接起來,從而實現(xiàn)串行通信。所謂的RS-232C,實際上是一種接口標準,即對接口的機械特性、電氣特性、信號功能等信息所做的一種規(guī)定。由于每臺PC機后的串行接口均符合此標準,所以可以相互連接起來。RS-232C接口有25根信號線,但常用的只有9根。如果進行近距離通信(不需要控制調(diào)制解調(diào)器),最簡單的情況只需使用3根線(發(fā)送線、接收線、信號地線)便可實現(xiàn)全雙工異步串行通信,如圖7-7所示。第7章輸入/輸出程序設(shè)計圖7-6近距離通信的連接方式

2

5

3

6

4

7

202

5

3

6

4

7

20

計算機計

第7章輸入/輸出程序設(shè)計

下面簡單介紹一下這幾個引腳的含義。

2腳:發(fā)送數(shù)據(jù)(TXD)—通過TXD終端將數(shù)據(jù)發(fā)送到MODEM。

3腳:接收數(shù)據(jù)(RXD)—通過RXD終端接收從MODEM發(fā)來的串行數(shù)據(jù)。

4腳:請求發(fā)送(RTS)—當(dāng)終端要發(fā)送數(shù)據(jù)時,使該信號有效(高電平),向MODEM請求發(fā)送。它用來控制MODEM是否要進入發(fā)送狀態(tài)。

5腳:允許發(fā)送(CTS)—是對請求發(fā)送信號RTS的響應(yīng)信號。當(dāng)MODEM已準備好接收終端傳來的數(shù)據(jù),并向前發(fā)送時,使該信號有效,通知終端開始沿發(fā)送數(shù)據(jù)線TXD發(fā)送數(shù)據(jù)。

6腳:數(shù)據(jù)裝置準備好(DSR)—高電平有效。有效時,表明MODEM處于可以使用的狀態(tài)。

7腳:信號地線。

20腳:數(shù)據(jù)終端準備好(DTR)—高電平有效。有效時,通知MODEM計算機已可用。

注:數(shù)據(jù)終端設(shè)備(DTE)指計算機和各種終端。第7章輸入/輸出程序設(shè)計2.通用異步接收發(fā)送器UART

把字符的并行代碼轉(zhuǎn)換成串行通信所需格式并發(fā)送出去,同時能把收到的串行數(shù)據(jù)接收下來,并轉(zhuǎn)換成并行格式,這樣的部件稱為異步接收發(fā)送器,簡稱UART。PC系列機中的UART為8250及其各種變型。

從程序員的觀點來看,通信芯片由一系列寄存器所組成,它們對應(yīng)著一個端口地址序列。8250UART具有十個可編程的單字節(jié)寄存器,用于控制并監(jiān)視串行口。這十個寄存器通過七個端口地址訪問,情況如下:(1)8250的寄存器第7章輸入/輸出程序設(shè)計3F8h(OUT,3FBh處位7=0)發(fā)送保持寄存器

3F8h(IN,3FBh處位7=0)接收數(shù)據(jù)寄存器

3F8h(OUT,3FBh處位7=1)波特率除數(shù)(低字節(jié))

3F9h(OUT,3FBh處位7=l)波特率除數(shù)(高字節(jié))

3F9h(OUT,3FBh處位7=0)中斷允許寄存器

3FAh(IN)中斷標識寄存器

3FBh(OUT)線路控制寄件器

3FCh(OUT)調(diào)制解調(diào)器控制寄存器

3FDh(IN)線路狀態(tài)寄存器

3FEh(IN)調(diào)制解調(diào)器狀態(tài)寄存器第7章輸入/輸出程序設(shè)計

由于3F8H與3F9H是共用端口地址,為了區(qū)分被訪問的寄存器,在訪問兩個波特率除數(shù)寄存器時,必須首先設(shè)置3FBh處的線路控制寄存器的D7位為1,而訪問其它寄存器時則需將這一位置0。

這十個寄存器的大致作用如下:①發(fā)送保持寄存器:

保存將要傳送的數(shù)據(jù)字節(jié)。在發(fā)送方CPU將需要發(fā)送的數(shù)據(jù)寫入這一寄存器。②接收數(shù)據(jù)寄存器:

保存最近接收到的數(shù)據(jù)字節(jié)。在接收方,CPU需要從這一寄存器中取走收到的數(shù)據(jù)。③線路控制寄存器:

主要用于設(shè)置通訊中數(shù)據(jù)格式,在初始化時也用其D7位區(qū)分復(fù)用地址的端口。④線路狀態(tài)寄存器:

反映通信線路狀態(tài),供CPU讀出查詢。⑤兩個波特率除數(shù)寄存器:

存放波特率除數(shù)。⑥中斷允許寄存器:

控制8250是否以中斷方式工作,以及設(shè)置引發(fā)中斷的條件。⑦中斷標識寄存器:標記發(fā)生中斷的原因,供CPU查詢。第7章輸入/輸出程序設(shè)計⑧調(diào)制解調(diào)器控制寄存器:

這個寄存器用來設(shè)置對MODEM的聯(lián)絡(luò)控制信號和芯片自檢,但即使不用MODEM,這個寄存器的其中二個位也常用。它們是:

D3位:用于中斷控制,為使8250能發(fā)出中斷請求信號,此位必須置1。

D4位:是供8250本身自檢診斷而設(shè)置的。當(dāng)這位置1時,8250處于診斷方式,在這種方式下,8250芯片將收、發(fā)端在內(nèi)部連接起來,形成自發(fā)自收的“環(huán)路”。在正常通信時,此位置0。⑨調(diào)制解調(diào)器狀態(tài)寄存器:

用來檢測和記錄來自MODEM的聯(lián)絡(luò)控制信號及其狀態(tài)的變化第7章輸入/輸出程序設(shè)計(2)初始化串行口

串行口在使用前必須初始化,包括設(shè)置波特率除數(shù)寄存器,設(shè)置線路控制寄存器和設(shè)置中斷允許寄存器。如使用MODEM進行通信,還要設(shè)置調(diào)制解調(diào)器控制寄存器。

①波特率除數(shù):

波特率除數(shù)是一個數(shù)字,系統(tǒng)時鐘除以波特率除數(shù)以得到所需的波特率。設(shè)外部時鐘頻率為f,而8250所要求的波特率為F,則波特率除數(shù)可由以下公式求出:

波特率除數(shù)=f/(F×16)

例如,當(dāng)輸入的時鐘頻率為1.8432MHZ時,若要求的波特率為1200,則波特率除為應(yīng)為96。除數(shù)越大,波特率越低。300及以下的波特率所需除數(shù)為雙字節(jié)數(shù),為此8250芯片需要兩個存放除數(shù)的寄存器。一些常用波特率所對應(yīng)的數(shù)值如表7-2所示。第7章輸入/輸出程序設(shè)計波特率波特率除數(shù)(高字節(jié))波特率除數(shù)(低字節(jié))11004h17h30001h80h60000hC0h120000h60h180000h40h240000h30h360000h20h480000h18h960000h0Ch表7-1常用的波特率除數(shù)值

波特率除數(shù)寄存器總是要首先設(shè)置,因為只有這兩個寄存器要求線路控制寄存器的位7置1。第7章輸入/輸出程序設(shè)計②線路控制寄存器各位含義:

位l-0字符長度:00=5位,01=6位,10=7位,11=8位。

2停止位數(shù):0=l位,1=1.5位,l=2位。

3奇偶校驗:1=1位奇偶校驗位,0=無奇偶校驗位。

4奇偶校驗類型:0=奇校驗,1=偶校驗。

5保持奇偶校驗:使得奇偶校驗恒為1或0。

0=禁止

1=恒為1(若位3=1且位4=0)

l=恒為0(若位3=l且位4=1)

l=無奇偶校驗(若位3=0)

6設(shè)置暫停:輸出空字符串作為發(fā)往遠程站的信號。0=禁止,1=暫停。

7轉(zhuǎn)向芯片的其它寄存器端口。

通常位5-7置0,其它位按所要求的通信協(xié)議設(shè)置。第7章輸入/輸出程序設(shè)計③中斷允許寄存器各位含義:

位01=當(dāng)接收到數(shù)據(jù)時發(fā)中斷。

11=當(dāng)發(fā)送保持寄存器為空時發(fā)中斷。

21=當(dāng)接收數(shù)據(jù)出錯時發(fā)中斷。

31=當(dāng)調(diào)制解調(diào)器狀態(tài)寄存器狀態(tài)改變時發(fā)中斷。

4-7未用,恒為0。

8250既可以以查詢方式工作,也可以以中斷方式工作。即使在查詢方式下工作,也應(yīng)設(shè)置中斷允許寄存器(置0),以確保中斷禁止。第7章輸入/輸出程序設(shè)計(3)監(jiān)視串行口狀態(tài)

CPU通過查詢8250的線路狀態(tài)寄存器,可以獲取串行口狀態(tài)信息。線路狀態(tài)寄存器各位含義如下:

位01=接收到一個數(shù)據(jù)字節(jié)。

11=所接收的數(shù)據(jù)已溢出(以前的字符未及時取走)。

21=奇偶校驗錯誤。

31=幀錯誤(傳輸未能同步)。

41=暫停檢測(收到很長的全“1”字符串,表明其它站請求傳送結(jié)束)。

51=發(fā)送保持寄存器為空。

61=發(fā)送轉(zhuǎn)移寄存器為空。

71=超時(脫機)。

在查詢方式通信中,CPU不斷讀取線路狀態(tài)寄存器,以判斷是否可以發(fā)送數(shù)據(jù)或是否收已到數(shù)據(jù)需要取走。第7章輸入/輸出程序設(shè)計

3.參考硬件連接圖及程序

硬件連接圖采用圖7-7即可。

參考程序:

在本例中,將通信協(xié)議設(shè)置為:傳輸率1200波特,8位數(shù)據(jù)位,偶校驗和1個停止位。CPU以查詢方式進行通訊。在參加通信的雙方均運行此程序后,雙方即以全雙工方式工作,每方均可以隨時向?qū)Ψ桨l(fā)送數(shù)據(jù),也可以隨時接收對方發(fā)來的數(shù)據(jù)。運行時,在一臺機器上鍵入的字符將通過線路發(fā)送給對方,對方收下后顯示自己的屏幕上。任一方只要鍵入Ctrl+C鍵即可結(jié)束己方程序的運行。程序流程見圖7-8所示。第7章輸入/輸出程序設(shè)計

初始化8250

有錯?

讀線路狀態(tài)寄存器

開始已收到數(shù)據(jù)?可以發(fā)送數(shù)據(jù)?顯示出錯提示

退出

①②

YYNYN

N圖7-7a

主流程圖

第7章輸入/輸出程序設(shè)計退出

接收字符→ALAL內(nèi)為Ctrl-C?顯示該字符AL內(nèi)為回車?

加顯示一個換行

Y

YNN

圖7-7b接收模塊流程圖

第7章輸入/輸出程序設(shè)計

退出

發(fā)送此字符

有鍵入字符?

是Ctrl-C鍵?①

YNYN

圖7-7

c發(fā)送模塊流程圖

第7章輸入/輸出程序設(shè)計CODE SEGMENT

ASSUMECS:CODE

START:

;以下初始化波特率除數(shù)寄存器

MOV DX,3FBH ;指向線路控制寄存器

MOV AL,80H ;位7置1

OUT DX,AL ;發(fā)送此字節(jié)

MOV DX,3F9H ;指向波特率除數(shù)的最高有效位

MOV AL,0 ;

1200BPS對應(yīng)的最高有效位

OUT DX,AL ;發(fā)送此字節(jié)

DEC DX ;指向波特率除數(shù)的最低有效位

MOV AL,60H ;1200BPS對應(yīng)的最低有效位

OUT DX,AL ;發(fā)送此字節(jié) 第7章輸入/輸出程序設(shè)計;以下初始化線路控制寄存器:

MOV AL,1BH ;數(shù)據(jù)長度為8位,1個奇偶校驗位,偶校驗,1個停止位

MOV DX,3FBH ;指向線路控制寄存器

OUT DX,AL ;發(fā)送此字節(jié)

;以下初始化中斷允許寄存器

MOV DX,3F9H ;指向中斷允許寄存器

MOV AL,0 ;禁止所有中斷

OUT DX,AL ;發(fā)送字節(jié)第7章輸入/輸出程序設(shè)計READ:

;線路狀態(tài)檢測循環(huán)

MOV DX,3FDH ;指向線路狀態(tài)寄存器

IN AL,DX ;取狀態(tài)字節(jié)

TEST AL,1EH ;檢查錯誤

JNZ ERROR ;若出錯則轉(zhuǎn)錯誤處理例程

TEST AL,01H ;測試是否已收到數(shù)據(jù)

JNZ RECEIVE ;轉(zhuǎn)接收例程

TEST AL,20H ;測試是否可以發(fā)送字符

JNZ SEND ;若是轉(zhuǎn)發(fā)送例程

JMP R

溫馨提示

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

最新文檔

評論

0/150

提交評論