




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- -教科版高中信息技術(shù)選修3教學(xué)設(shè)計-2.2.2 IP 地址的管理
- 2025至2030年中國板式輸送機數(shù)據(jù)監(jiān)測研究報告
- 第三單元課外古詩詞誦讀《晚春》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版語文七年級下冊
- 浙教版信息技術(shù)五年級上冊《第1課 身邊的算法》教學(xué)設(shè)計
- 第二單元第一節(jié) 確定主題精搜索 教學(xué)設(shè)計 2024-2025學(xué)年川教版(2024)初中信息技術(shù)七年級上冊
- 第23課 教學(xué)設(shè)計-七年級上學(xué)期體育與健康
- 二零二五年度一手房購房稅費計算與繳納協(xié)議
- 二零二五年度校外住宿學(xué)生安全管理與責(zé)任認定合同
- 2025年度無社保的培訓(xùn)生勞動合同
- 二零二五年度安全培訓(xùn)課程免責(zé)協(xié)議
- 北師大版二年級下冊數(shù)學(xué)第一單元 除法教案
- 2024年兒童托管行業(yè)分析報告及未來發(fā)展趨勢
- 野生動植物保護
- 陜09J01 建筑用料及做法圖集
- 核心素養(yǎng)導(dǎo)向的作業(yè)設(shè)計
- 30題工程造價崗位常見面試問題含HR問題考察點及參考回答
- 信息技術(shù)與學(xué)科融合教案(初中數(shù)學(xué)學(xué)科模板)
- 2021年新大象版四年級科學(xué)下冊全冊教案(附板書設(shè)計、教學(xué)反思、總結(jié)點評)
- 城市地理學(xué)第二章城鄉(xiāng)劃分和城市地域
- 對健康體檢異常者開展健康管理干預(yù)的效果評價
- 汽車修理常用配件信息公示
評論
0/150
提交評論