版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語言程序設(shè)計(jì)(第2版)第7章輸入/輸出程序設(shè)計(jì)
在本章中講述輸入輸出的基本技術(shù)及相關(guān)概念,應(yīng)重點(diǎn)掌握數(shù)據(jù)信息、狀態(tài)信息、控制信息的含義;端口地址的概念與兩種編址方式;輸入/輸出的四種方式及其特點(diǎn);中斷的概念、中斷源及內(nèi)外部中斷的劃分、中斷矢量表結(jié)構(gòu)、中斷響應(yīng)條件、中斷響應(yīng)過程等內(nèi)容以及能編寫簡(jiǎn)單的中斷服務(wù)程序。7.1工作原理
7.2數(shù)據(jù)的輸入/輸出方式實(shí)訓(xùn)一數(shù)據(jù)采集:查詢方式實(shí)訓(xùn)二PC機(jī)間的相互通信:查詢方式
輸入就是CPU從外設(shè)中讀取信息,輸出就是CPU向外設(shè)寫入信息。程序和各種數(shù)據(jù)都要通過輸入操作才能進(jìn)入計(jì)算機(jī)內(nèi),而計(jì)算結(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è)計(jì)7.1.1CPU與外設(shè)的信息交換CPU與外設(shè)之間要交換的信息,如圖7-1所示。一般情況下,外設(shè)并不直接與CPU相連,而是通過稱為I/O接口的電路與CPU連接。I/O接口一方面起信號(hào)轉(zhuǎn)換作用,使CPU和外設(shè)可以互相“理解”對(duì)方的信號(hào);另一方面匹配雙方的工作速度。
端口地址
數(shù)據(jù)
控制或狀態(tài)
數(shù)據(jù)
控制
狀態(tài)
I/O設(shè)備
I/O接口
CPU
第7章輸入/輸出程序設(shè)計(jì)CPU與I/O接口間通常需要下列接口信號(hào):1.數(shù)據(jù)信息:
數(shù)據(jù)通常為8位或16位,可分為三種基本形式:數(shù)字量、開關(guān)量和模擬量。
由鍵盤、光電輸入機(jī)等提供的二進(jìn)制形式的信息為數(shù)字量。
只有兩個(gè)狀態(tài)的量,如電機(jī)的啟停、開關(guān)的開合等,只須用一位二進(jìn)制數(shù)即可表示,稱為開關(guān)量。
由傳感器等提供的信號(hào)往往是模擬量(連續(xù)變化的信號(hào)),它需先經(jīng)過模數(shù)(A/D)轉(zhuǎn)換后,才能輸入到計(jì)算機(jī)中去。如溫度、電壓等。第7章輸入/輸出程序設(shè)計(jì)2.狀態(tài)信息:指I/O接口反映I/O設(shè)備工作狀態(tài)的信息。如表示輸入裝置是否已準(zhǔn)備好的信息(READY信號(hào)),表示輸出裝置是否忙的信息(BUSY信號(hào))等。3.控制信息:指CPU向I/O設(shè)備發(fā)送的控制其工作的信息。如選通信號(hào)、啟停信號(hào)等。第7章輸入/輸出程序設(shè)計(jì)
這三類信息的性質(zhì)是不同的,必須分別傳送。通常是分配不同的端口地址的方法加以區(qū)別,所以一個(gè)外設(shè)往往要占幾個(gè)端口地址。一般狀態(tài)信息和控制信息往往只有一位或二位,故也常常是狀態(tài)和控制信息共用一個(gè)端口地址。返回本節(jié)首頁返回本章首頁第7章輸入/輸出程序設(shè)計(jì)7.1.2CPU尋址外設(shè)的方式1.端口地址的概念
CPU能夠與內(nèi)存交換數(shù)據(jù),也能與外設(shè)交換數(shù)據(jù),其工作原理是相似的。內(nèi)存單元都進(jìn)行了編址,每一個(gè)字節(jié)的存儲(chǔ)單元占一個(gè)地址,CPU通過在其地址線上發(fā)地址信號(hào)來通知存儲(chǔ)器要與哪一個(gè)存儲(chǔ)單元交換數(shù)據(jù);同樣,計(jì)算機(jī)對(duì)外設(shè)的接口也進(jìn)行了編址,這叫做端口地址。在與I/O接口(有時(shí)也簡(jiǎn)稱為外設(shè),但實(shí)際指的是I/O接口)交換數(shù)據(jù)時(shí),CPU通過在地址線上發(fā)出要訪問外設(shè)的端口地址來指出要與哪個(gè)外設(shè)交換數(shù)據(jù)。第7章輸入/輸出程序設(shè)計(jì)2.兩種編址方式
存儲(chǔ)器有地址,I/O接口也有地址,那么CPU在地址線上發(fā)出的地址是存儲(chǔ)器地址呢?還是I/O接口地址?這就涉及到了I/O接口的編址方式,有兩種方式,如下:第7章輸入/輸出程序設(shè)計(jì)①I/O設(shè)備與存儲(chǔ)器統(tǒng)一編址
這種方式對(duì)二者統(tǒng)一編址,在整個(gè)CPU地址空間中,劃出一部分地址為存儲(chǔ)器地址,另一部分地址為I/O設(shè)備地址。在此編址方式下,CPU將I/O設(shè)備與存儲(chǔ)器同樣看待,因此不需要專門的I/O指令,CPU對(duì)存儲(chǔ)器的全部操作指令均可用于I/O操作,故尋址方式和訪問指令多,而且方便。統(tǒng)一編址的缺點(diǎn)是I/O設(shè)備占用了部分存儲(chǔ)器地址空間,從而減少了存儲(chǔ)器可用地址空間的大小,同時(shí)在程序中不好區(qū)分是訪問存儲(chǔ)器還是訪問I/O設(shè)備。第7章輸入/輸出程序設(shè)計(jì)②I/O設(shè)備獨(dú)立編址
這種方式中存儲(chǔ)器與I/O設(shè)備各有自己獨(dú)立的地址空間,各自單獨(dú)編址,互不相關(guān)。這種方式下硬件上CPU需要一根專門的引腳來指明地址線上的地址是存儲(chǔ)器地址還是I/O設(shè)備地址;軟件上需要專門的輸入輸出指令來訪問I/O設(shè)備。此方式的優(yōu)點(diǎn)是I/O設(shè)備不占存儲(chǔ)器地址空間;缺點(diǎn)是需要專門的I/O指令。返回上一節(jié)返回本章首頁返回本節(jié)首頁第7章輸入/輸出程序設(shè)計(jì)7.1.3數(shù)據(jù)傳送方式
外部設(shè)備多種多樣,不同的設(shè)備需要不同的控制方法。例如:外設(shè)的工作速度高于CPU,則CPU可直接向其發(fā)送或讀取數(shù)據(jù)而不用考慮數(shù)據(jù)丟失問題,而對(duì)慢速外設(shè)則不能這樣。CPU與外設(shè)間交換數(shù)據(jù)的方法,共有四種可供選擇。不同的方法其效率、安全性、復(fù)雜性、成本各不相同,不同的外設(shè)需要不同的數(shù)據(jù)交換方式。下面對(duì)這些方式作簡(jiǎn)要介紹,下節(jié)中進(jìn)行詳述。第7章輸入/輸出程序設(shè)計(jì)1.無條件傳送方式
又稱直接I/O方式,這種方式下,CPU不管外設(shè)的狀態(tài)如何,直接對(duì)其執(zhí)行輸入或輸出操作。
2.查詢方式
采用這種方式,CPU在進(jìn)行輸入輸出前,先檢查外設(shè)提供的READY(準(zhǔn)備好)號(hào)是否有效,若有效,表示外設(shè)可以接受操作,CPU即進(jìn)行操作;若無效,表示外設(shè)暫不能接受操作,CPU則等待。在等待期間,CPU所做的只是循環(huán)檢測(cè)READY信號(hào),一旦發(fā)現(xiàn)其變?yōu)橛行В瑒t立即進(jìn)行操作。第7章輸入/輸出程序設(shè)計(jì)3.中斷方式
這種方式下,CPU執(zhí)行主程序,當(dāng)外設(shè)有數(shù)據(jù)要和CPU交換時(shí),外設(shè)向CPU發(fā)送一中斷請(qǐng)求信號(hào),CPU收到這一信號(hào)后中止當(dāng)前正在運(yùn)行的程序,轉(zhuǎn)而執(zhí)行一段特定的程序(中斷服務(wù)程序)來為外設(shè)服務(wù)。服務(wù)完后,CPU再恢復(fù)執(zhí)行原先被中止的程序。第7章輸入/輸出程序設(shè)計(jì)4.DMA方式
前三種方式中,數(shù)據(jù)的傳輸都要經(jīng)過CPU,而有時(shí)外設(shè)有大量數(shù)據(jù)需要放入內(nèi)存(或從內(nèi)存讀出),如果每個(gè)字節(jié)都先由CPU從外設(shè)中讀入,然后再寫入內(nèi)存,這樣的方式效率太低(尤其當(dāng)外設(shè)是高速外設(shè)時(shí)),這時(shí)可采用DMA方式。這種方式下,DMA控制器先請(qǐng)求CPU讓出總線控制權(quán),CPU同意后,將自己掛起,總線由DMA控制器控制,它引導(dǎo)外設(shè)直接將數(shù)據(jù)送入內(nèi)存(或反之)。在傳送結(jié)束后,DMA控制器通知CPU重新接管總線控制權(quán),隨后自己放棄總線控制。返回本章首頁返回上一節(jié)返回本節(jié)首頁第7章輸入/輸出程序設(shè)計(jì)7.2數(shù)據(jù)的輸入/輸出方式7.2.1直接I/O方式7.2.2查詢方式第7章輸入/輸出程序設(shè)計(jì)7.2.1直接I/O方式
這種方式下,CPU不查詢外設(shè)狀態(tài),在其需要時(shí)直接對(duì)外設(shè)執(zhí)行I/O操作。此方式優(yōu)點(diǎn)是硬件和軟件都達(dá)到最簡(jiǎn)單;缺點(diǎn)是外設(shè)必須隨時(shí)處于待命狀態(tài),并且外設(shè)的處理速度能跟上CPU的速度,否則就會(huì)出錯(cuò)。第7章輸入/輸出程序設(shè)計(jì)【例7.1】發(fā)聲程序
PC機(jī)的揚(yáng)聲驅(qū)動(dòng)系統(tǒng)如圖7-2所示。8253定時(shí)器
與門驅(qū)動(dòng)器8255APB口D0D1D2D3D4D5D6D7圖7-2PC機(jī)的揚(yáng)聲驅(qū)動(dòng)系統(tǒng)第7章輸入/輸出程序設(shè)計(jì)
揚(yáng)聲器的發(fā)聲是由輸出寄存器的二位進(jìn)行控制的。輸出寄存器的端口地址為61H。
揚(yáng)聲器發(fā)聲有兩種方式:直接對(duì)端口61H的D1位交替輸出0或1,使揚(yáng)聲器交替地通與斷,推動(dòng)揚(yáng)聲器發(fā)聲;定時(shí)器控制輸出方式是控制端口61H的D0位驅(qū)動(dòng)揚(yáng)聲器發(fā)出聲音。若發(fā)聲程序不使用定時(shí)器,端口61H的D0位清0。
由于揚(yáng)聲器總是隨時(shí)可用的,故CPU可用直接I/O方式對(duì)其操作。
程序如下:第7章輸入/輸出程序設(shè)計(jì)CODE SEGMENT
ASSUMECS:CODE
START: MOV DX,1000H ;開關(guān)次數(shù)
IN AL,61H ;取端口61H的內(nèi)容
PUSH AX ;入棧保存,以便退出時(shí)恢復(fù)
AND AL,11111100B ;將第0、1位置0
SOUND: XOR AL,2 ;D1位取反
OUT 61H,AL ;輸出到端口61H
MOV CX,2000H ;設(shè)置延時(shí)空循環(huán)的次數(shù)
DELAY: LOOP DELAY ;空循環(huán),延時(shí)一小會(huì)兒
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è)計(jì)
采用這種方式時(shí),CPU在進(jìn)行一次I/O操作之前,必須先對(duì)外設(shè)的狀態(tài)進(jìn)行查詢,流程如右圖所示。7.2.2查詢I/O方式
查詢傳送方式的優(yōu)點(diǎn):①安全可靠;②用于接口的硬件較省。缺點(diǎn):CPU必須循環(huán)等待外設(shè)準(zhǔn)備就序,導(dǎo)致效率不高。
啟動(dòng)
測(cè)試I/O設(shè)備狀態(tài)
準(zhǔn)備就緒?
執(zhí)行數(shù)據(jù)傳送
結(jié)束
否
是
第7章輸入/輸出程序設(shè)計(jì)有關(guān)打印機(jī)的控制方法說明如下:
1.打印機(jī)與CPU要交換的信息
①數(shù)據(jù):CPU要打印機(jī)打印的字符。
②狀態(tài)信息:表明打印機(jī)運(yùn)行情況的信息。
③控制信息:CPU用以控制打印機(jī)動(dòng)作的信息。
這三種信息分別用打印機(jī)的數(shù)據(jù)寄存器、狀態(tài)寄存器、控制寄存器存放,這三個(gè)寄存器均為8位,其端口地址分別為378H、379H、37AH(在BIOS數(shù)據(jù)區(qū)0040:0008H存放著這三個(gè)寄存器的首地址)。
【例7.2】用查詢輸出方式使打印機(jī)打印AL內(nèi)的一個(gè)字符。第7章輸入/輸出程序設(shè)計(jì)2.控制寄存器各位含義
位0:選通信號(hào)。正常工作時(shí)該位為0,當(dāng)已將數(shù)據(jù)發(fā)送到打印機(jī)的數(shù)據(jù)寄存器后,應(yīng)將該位置1,以通知打印機(jī)從數(shù)據(jù)寄存器取出數(shù)據(jù)。置1后,須馬上再置回0。
位1:自動(dòng)換行。置1要求打印機(jī)在打印完一行后(回車時(shí))自動(dòng)走紙。置0則需要先向打印機(jī)輸出換行符(0AH)控制走紙。通常設(shè)為0。
位2:初始化信號(hào)。正常工作時(shí)這一位為1,需要重新初始化打印機(jī)時(shí),將這一位 先清0再置1,并且清0時(shí)間要維持0.05秒以上。初始化又稱打印機(jī)復(fù)位,打印頭回到最左邊。
位3:聯(lián)機(jī)命令。置1將設(shè)置打印機(jī)在聯(lián)機(jī)工作方式,控制打印機(jī)時(shí)總是把這一位置1,否則打印機(jī)不能正常工作。正常打印時(shí)這一位需保持1。
位4:中斷允許。置0為不允許打印機(jī)產(chǎn)生中斷。置1允許打印機(jī)中斷,這時(shí)采用中斷方式傳送數(shù)據(jù),當(dāng)打印機(jī)可以接收新數(shù)據(jù)時(shí),產(chǎn)生IRQ7中斷。
位5~位7:未用。第7章輸入/輸出程序設(shè)計(jì)3.狀態(tài)寄存器各位含義
位0~2:未用。
位3:0=打印機(jī)出錯(cuò)。1=沒有錯(cuò)誤。
位4:0=打印機(jī)脫機(jī),這時(shí)不能正常工作。1=打印機(jī)聯(lián)機(jī)。
位5:0=打印機(jī)有紙,1=無紙。
位6:0=打印機(jī)確認(rèn)接收到字符。1=正常。當(dāng)打印機(jī)正確接收1字節(jié)的數(shù)據(jù)后,就送回一個(gè)低電位的認(rèn)可信號(hào),這個(gè)信號(hào)只維持很短的時(shí)間,然后又恢復(fù)高電位。
位7:0=打印機(jī)忙,1=打印機(jī)不忙。第7章輸入/輸出程序設(shè)計(jì)4.打印過程說明
要打印一個(gè)字符,須先將字符寫入打印機(jī)的數(shù)據(jù)寄存器,然后置控制寄存器的選通位為1,即將控制碼0DH(即位0、位2、位3為1,其余為0)送給打印機(jī),選通打印機(jī)后,再改送控制碼0CH(即置選通位為0),使打印機(jī)恢復(fù)正常。這樣才能使打印機(jī)從數(shù)據(jù)寄存器中取出字符打印。并且,只有在打印機(jī)不忙時(shí),才可向它發(fā)送選通信號(hào)。
程序如下:第7章輸入/輸出程序設(shè)計(jì)CODE SEGMENT
ASSUMECS:CODE
START: MOV DX,37AH
MOV AL,08H
OUT DX,AL ;初始化打印機(jī)
MOV CX,1000
INIT1: LOOP INIT1 ;延遲,維持初始化信號(hào)一段時(shí)間
MOV AL,0CH
OUT DX,AL ;結(jié)束初始化,保持聯(lián)機(jī)
MOV DX,379H第7章輸入/輸出程序設(shè)計(jì)WAIT1: IN AL,DX ;讀取打印機(jī)狀態(tài)寄存器
TEST AL,80H
JZ WAIT1 ;若打印機(jī)忙,循環(huán)等待
MOV AL,‘A’ ;設(shè)置待打印字符
MOV DX,378H
OUT DX,AL ;AL中數(shù)據(jù)→打印機(jī)數(shù)據(jù)寄存器
MOV DX,37AH
MOV AL,0DH ;選通打印機(jī)
OUT DX,AL
DEC AL
OUT DX,AL ;恢復(fù)正常
MOV AH,4CH
INT 21H
CODE ENDS
END START返回本章首頁返回本節(jié)首頁返回上一節(jié)第7章輸入/輸出程序設(shè)計(jì)實(shí)訓(xùn)一數(shù)據(jù)采集:查詢方式
實(shí)訓(xùn)內(nèi)容:一個(gè)有8個(gè)模擬量的數(shù)據(jù)采集系統(tǒng),CPU用查詢方式與其交換數(shù)據(jù),電路如圖7-5所示。8個(gè)輸入模擬量,經(jīng)過多路開關(guān)選通后送入A/D轉(zhuǎn)換器,多路開關(guān)由端口2的D0、D1、D2位控制。000相應(yīng)于選通A0輸入,…,111選通A7輸入。每次只有一個(gè)模擬量送入A/D轉(zhuǎn)換器。端口2的D3位控制A/D轉(zhuǎn)換器的啟停。A/D轉(zhuǎn)換器的READY信號(hào)由端口1的D0輸出到CPU的數(shù)據(jù)總線,經(jīng)A/D轉(zhuǎn)換后的數(shù)據(jù)由端口0輸出至數(shù)據(jù)總線。對(duì)這樣一個(gè)數(shù)據(jù)采集系統(tǒng),編寫數(shù)據(jù)采集程序。第7章輸入/輸出程序設(shè)計(jì)圖7-4數(shù)據(jù)采集系統(tǒng)8個(gè)模擬量…A0A7
數(shù)據(jù)線DB
8088
CPU
端口0端口1端口2A/D轉(zhuǎn)換
多路
開關(guān)
8位數(shù)據(jù)
1位狀態(tài)
READY
數(shù)據(jù)
1個(gè)模擬量D3D2D1D0
啟動(dòng)第7章輸入/輸出程序設(shè)計(jì)
分析:CPU可以依次向端口2的D2-D0位寫入0~7之間的一個(gè)數(shù),以便控制多路開關(guān)選通一個(gè)模擬量輸出;同時(shí)CPU要使端口2的D3位為1,以啟動(dòng)A/D轉(zhuǎn)換器。然后,CPU循環(huán)查詢A/D轉(zhuǎn)換器的READY信號(hào),一旦發(fā)現(xiàn)該信號(hào)為1,表示A/D轉(zhuǎn)換器已將數(shù)據(jù)準(zhǔn)備好,CPU即可讀取。
采集程序如下:第7章輸入/輸出程序設(shè)計(jì) MOV SI,100H ;設(shè)置輸入數(shù)據(jù)緩沖區(qū)首址
MOV BL,08H ;使D3位為1,同時(shí)選擇第1個(gè)模擬量通過多路開關(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)用延時(shí)子程序,等待A/D停止操作完成
MOV AL,BL
OUT 2,AL ;啟動(dòng)A/D轉(zhuǎn)換,且選擇一個(gè)模擬量
WAIT1: IN AL,1 ;輸入A/D狀態(tài)信息
TEST AL,1
JZ WAIT1 ;若未準(zhǔn)備好,則循環(huán)等待
IN AL,0 ;輸入數(shù)據(jù)
MOV [SI],AL ;保存數(shù)據(jù)
INC SI
INC BL ;使多路開關(guān)選通下一個(gè)模擬量
LOOP AGAIN ;循環(huán)輸入8個(gè)模擬量
HLT返回本章首頁第7章輸入/輸出程序設(shè)計(jì)實(shí)訓(xùn)二PC機(jī)間的相互通信:查詢方式
實(shí)訓(xùn)內(nèi)容:設(shè)計(jì)一套系統(tǒng),能在二臺(tái)PC機(jī)之間以查詢方式實(shí)現(xiàn)串行通信。
分析:這套系統(tǒng)應(yīng)包含硬件連接圖及軟件二部分。由于串行通信的知識(shí)前面沒講,所以下面先對(duì)相關(guān)知識(shí)作一下簡(jiǎn)介,最后再給出參考硬件連接圖及程序。第7章輸入/輸出程序設(shè)計(jì)1.串行通信基本概念
微機(jī)間的通信有并行通信和串行通信兩種方式。并行通信中一次可以傳輸一個(gè)字節(jié)或更多的位數(shù)。串行通信是在一根傳輸線上一位一位地傳送信息。與并行通信相比,串行通信所用傳輸線少,成本低,因而應(yīng)用廣泛。
在通信中,通信雙方要想相互理解對(duì)方所發(fā)信號(hào)的含義,就必須先就信號(hào)發(fā)送速度、信息格式等諸多問題作統(tǒng)一的約定,這就涉及到了通信協(xié)議。第7章輸入/輸出程序設(shè)計(jì)(l)異步通信的信息格式
串行通信的通信方式又分異步通信和同步通信兩種。本處只介紹異步通信。
異步通信的信息格式是,一個(gè)傳輸線上的字符由四個(gè)部分組成:起始位(占1位),數(shù)據(jù)位(占5~8位),奇偶校驗(yàn)位(占1位,也可以沒有校驗(yàn)位),停止位(占1位或1位半或2位)。如圖7-6所示。(2)傳輸速率
串行通信中,傳輸速率是用每秒傳送的位數(shù)(位/p)即波特率來表示的。最常用的標(biāo)準(zhǔn)波特率是110,300,1000,1200,2400,4800,9600和19200位/S。第7章輸入/輸出程序設(shè)計(jì)圖7-5異步通信信息格式
傳送開始之前,發(fā)收雙方要把所采用的信息格式(包括字符的數(shù)據(jù)位長(zhǎng)度,停止位長(zhǎng)度,有無奇仍校驗(yàn)位以及采用奇校還是偶校等)和數(shù)據(jù)傳輸速率即波特率作統(tǒng)一的約定,即規(guī)定傳輸協(xié)議。如果要改變格式和傳輸速率,則只能雙方同時(shí)修改,否則會(huì)出錯(cuò)。1(Mark)起始位校驗(yàn)位停止位0(Space)數(shù)據(jù)位第7章輸入/輸出程序設(shè)計(jì)(3)連接方式
近距離的二臺(tái)計(jì)算機(jī)可以直接通過機(jī)箱后面的RS-232C串行接口連接起來,從而實(shí)現(xiàn)串行通信。所謂的RS-232C,實(shí)際上是一種接口標(biāo)準(zhǔn),即對(duì)接口的機(jī)械特性、電氣特性、信號(hào)功能等信息所做的一種規(guī)定。由于每臺(tái)PC機(jī)后的串行接口均符合此標(biāo)準(zhǔn),所以可以相互連接起來。RS-232C接口有25根信號(hào)線,但常用的只有9根。如果進(jìn)行近距離通信(不需要控制調(diào)制解調(diào)器),最簡(jiǎn)單的情況只需使用3根線(發(fā)送線、接收線、信號(hào)地線)便可實(shí)現(xiàn)全雙工異步串行通信,如圖7-7所示。第7章輸入/輸出程序設(shè)計(jì)圖7-6近距離通信的連接方式
2
5
3
6
4
7
202
5
3
6
4
7
20
計(jì)算機(jī)計(jì)
算
機(jī)
第7章輸入/輸出程序設(shè)計(jì)
下面簡(jiǎn)單介紹一下這幾個(gè)引腳的含義。
2腳:發(fā)送數(shù)據(jù)(TXD)—通過TXD終端將數(shù)據(jù)發(fā)送到MODEM。
3腳:接收數(shù)據(jù)(RXD)—通過RXD終端接收從MODEM發(fā)來的串行數(shù)據(jù)。
4腳:請(qǐng)求發(fā)送(RTS)—當(dāng)終端要發(fā)送數(shù)據(jù)時(shí),使該信號(hào)有效(高電平),向MODEM請(qǐng)求發(fā)送。它用來控制MODEM是否要進(jìn)入發(fā)送狀態(tài)。
5腳:允許發(fā)送(CTS)—是對(duì)請(qǐng)求發(fā)送信號(hào)RTS的響應(yīng)信號(hào)。當(dāng)MODEM已準(zhǔn)備好接收終端傳來的數(shù)據(jù),并向前發(fā)送時(shí),使該信號(hào)有效,通知終端開始沿發(fā)送數(shù)據(jù)線TXD發(fā)送數(shù)據(jù)。
6腳:數(shù)據(jù)裝置準(zhǔn)備好(DSR)—高電平有效。有效時(shí),表明MODEM處于可以使用的狀態(tài)。
7腳:信號(hào)地線。
20腳:數(shù)據(jù)終端準(zhǔn)備好(DTR)—高電平有效。有效時(shí),通知MODEM計(jì)算機(jī)已可用。
注:數(shù)據(jù)終端設(shè)備(DTE)指計(jì)算機(jī)和各種終端。第7章輸入/輸出程序設(shè)計(jì)2.通用異步接收發(fā)送器UART
把字符的并行代碼轉(zhuǎn)換成串行通信所需格式并發(fā)送出去,同時(shí)能把收到的串行數(shù)據(jù)接收下來,并轉(zhuǎn)換成并行格式,這樣的部件稱為異步接收發(fā)送器,簡(jiǎn)稱UART。PC系列機(jī)中的UART為8250及其各種變型。
從程序員的觀點(diǎn)來看,通信芯片由一系列寄存器所組成,它們對(duì)應(yīng)著一個(gè)端口地址序列。8250UART具有十個(gè)可編程的單字節(jié)寄存器,用于控制并監(jiān)視串行口。這十個(gè)寄存器通過七個(gè)端口地址訪問,情況如下:(1)8250的寄存器第7章輸入/輸出程序設(shè)計(jì)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)中斷標(biāo)識(shí)寄存器
3FBh(OUT)線路控制寄件器
3FCh(OUT)調(diào)制解調(diào)器控制寄存器
3FDh(IN)線路狀態(tài)寄存器
3FEh(IN)調(diào)制解調(diào)器狀態(tài)寄存器第7章輸入/輸出程序設(shè)計(jì)
由于3F8H與3F9H是共用端口地址,為了區(qū)分被訪問的寄存器,在訪問兩個(gè)波特率除數(shù)寄存器時(shí),必須首先設(shè)置3FBh處的線路控制寄存器的D7位為1,而訪問其它寄存器時(shí)則需將這一位置0。
這十個(gè)寄存器的大致作用如下:①發(fā)送保持寄存器:
保存將要傳送的數(shù)據(jù)字節(jié)。在發(fā)送方CPU將需要發(fā)送的數(shù)據(jù)寫入這一寄存器。②接收數(shù)據(jù)寄存器:
保存最近接收到的數(shù)據(jù)字節(jié)。在接收方,CPU需要從這一寄存器中取走收到的數(shù)據(jù)。③線路控制寄存器:
主要用于設(shè)置通訊中數(shù)據(jù)格式,在初始化時(shí)也用其D7位區(qū)分復(fù)用地址的端口。④線路狀態(tài)寄存器:
反映通信線路狀態(tài),供CPU讀出查詢。⑤兩個(gè)波特率除數(shù)寄存器:
存放波特率除數(shù)。⑥中斷允許寄存器:
控制8250是否以中斷方式工作,以及設(shè)置引發(fā)中斷的條件。⑦中斷標(biāo)識(shí)寄存器:標(biāo)記發(fā)生中斷的原因,供CPU查詢。第7章輸入/輸出程序設(shè)計(jì)⑧調(diào)制解調(diào)器控制寄存器:
這個(gè)寄存器用來設(shè)置對(duì)MODEM的聯(lián)絡(luò)控制信號(hào)和芯片自檢,但即使不用MODEM,這個(gè)寄存器的其中二個(gè)位也常用。它們是:
D3位:用于中斷控制,為使8250能發(fā)出中斷請(qǐng)求信號(hào),此位必須置1。
D4位:是供8250本身自檢診斷而設(shè)置的。當(dāng)這位置1時(shí),8250處于診斷方式,在這種方式下,8250芯片將收、發(fā)端在內(nèi)部連接起來,形成自發(fā)自收的“環(huán)路”。在正常通信時(shí),此位置0。⑨調(diào)制解調(diào)器狀態(tài)寄存器:
用來檢測(cè)和記錄來自MODEM的聯(lián)絡(luò)控制信號(hào)及其狀態(tài)的變化第7章輸入/輸出程序設(shè)計(jì)(2)初始化串行口
串行口在使用前必須初始化,包括設(shè)置波特率除數(shù)寄存器,設(shè)置線路控制寄存器和設(shè)置中斷允許寄存器。如使用MODEM進(jìn)行通信,還要設(shè)置調(diào)制解調(diào)器控制寄存器。
①波特率除數(shù):
波特率除數(shù)是一個(gè)數(shù)字,系統(tǒng)時(shí)鐘除以波特率除數(shù)以得到所需的波特率。設(shè)外部時(shí)鐘頻率為f,而8250所要求的波特率為F,則波特率除數(shù)可由以下公式求出:
波特率除數(shù)=f/(F×16)
例如,當(dāng)輸入的時(shí)鐘頻率為1.8432MHZ時(shí),若要求的波特率為1200,則波特率除為應(yīng)為96。除數(shù)越大,波特率越低。300及以下的波特率所需除數(shù)為雙字節(jié)數(shù),為此8250芯片需要兩個(gè)存放除數(shù)的寄存器。一些常用波特率所對(duì)應(yīng)的數(shù)值如表7-2所示。第7章輸入/輸出程序設(shè)計(jì)波特率波特率除數(shù)(高字節(jié))波特率除數(shù)(低字節(jié))11004h17h30001h80h60000hC0h120000h60h180000h40h240000h30h360000h20h480000h18h960000h0Ch表7-1常用的波特率除數(shù)值
波特率除數(shù)寄存器總是要首先設(shè)置,因?yàn)橹挥羞@兩個(gè)寄存器要求線路控制寄存器的位7置1。第7章輸入/輸出程序設(shè)計(jì)②線路控制寄存器各位含義:
位l-0字符長(zhǎng)度:00=5位,01=6位,10=7位,11=8位。
2停止位數(shù):0=l位,1=1.5位,l=2位。
3奇偶校驗(yàn):1=1位奇偶校驗(yàn)位,0=無奇偶校驗(yàn)位。
4奇偶校驗(yàn)類型:0=奇校驗(yàn),1=偶校驗(yàn)。
5保持奇偶校驗(yàn):使得奇偶校驗(yàn)恒為1或0。
0=禁止
1=恒為1(若位3=1且位4=0)
l=恒為0(若位3=l且位4=1)
l=無奇偶校驗(yàn)(若位3=0)
6設(shè)置暫停:輸出空字符串作為發(fā)往遠(yuǎn)程站的信號(hào)。0=禁止,1=暫停。
7轉(zhuǎn)向芯片的其它寄存器端口。
通常位5-7置0,其它位按所要求的通信協(xié)議設(shè)置。第7章輸入/輸出程序設(shè)計(jì)③中斷允許寄存器各位含義:
位01=當(dāng)接收到數(shù)據(jù)時(shí)發(fā)中斷。
11=當(dāng)發(fā)送保持寄存器為空時(shí)發(fā)中斷。
21=當(dāng)接收數(shù)據(jù)出錯(cuò)時(shí)發(fā)中斷。
31=當(dāng)調(diào)制解調(diào)器狀態(tài)寄存器狀態(tài)改變時(shí)發(fā)中斷。
4-7未用,恒為0。
8250既可以以查詢方式工作,也可以以中斷方式工作。即使在查詢方式下工作,也應(yīng)設(shè)置中斷允許寄存器(置0),以確保中斷禁止。第7章輸入/輸出程序設(shè)計(jì)(3)監(jiān)視串行口狀態(tài)
CPU通過查詢8250的線路狀態(tài)寄存器,可以獲取串行口狀態(tài)信息。線路狀態(tài)寄存器各位含義如下:
位01=接收到一個(gè)數(shù)據(jù)字節(jié)。
11=所接收的數(shù)據(jù)已溢出(以前的字符未及時(shí)取走)。
21=奇偶校驗(yàn)錯(cuò)誤。
31=幀錯(cuò)誤(傳輸未能同步)。
41=暫停檢測(cè)(收到很長(zhǎng)的全“1”字符串,表明其它站請(qǐng)求傳送結(jié)束)。
51=發(fā)送保持寄存器為空。
61=發(fā)送轉(zhuǎn)移寄存器為空。
71=超時(shí)(脫機(jī))。
在查詢方式通信中,CPU不斷讀取線路狀態(tài)寄存器,以判斷是否可以發(fā)送數(shù)據(jù)或是否收已到數(shù)據(jù)需要取走。第7章輸入/輸出程序設(shè)計(jì)
3.參考硬件連接圖及程序
硬件連接圖采用圖7-7即可。
參考程序:
在本例中,將通信協(xié)議設(shè)置為:傳輸率1200波特,8位數(shù)據(jù)位,偶校驗(yàn)和1個(gè)停止位。CPU以查詢方式進(jìn)行通訊。在參加通信的雙方均運(yùn)行此程序后,雙方即以全雙工方式工作,每方均可以隨時(shí)向?qū)Ψ桨l(fā)送數(shù)據(jù),也可以隨時(shí)接收對(duì)方發(fā)來的數(shù)據(jù)。運(yùn)行時(shí),在一臺(tái)機(jī)器上鍵入的字符將通過線路發(fā)送給對(duì)方,對(duì)方收下后顯示自己的屏幕上。任一方只要鍵入Ctrl+C鍵即可結(jié)束己方程序的運(yùn)行。程序流程見圖7-8所示。第7章輸入/輸出程序設(shè)計(jì)
初始化8250
有錯(cuò)?
讀線路狀態(tài)寄存器
開始已收到數(shù)據(jù)?可以發(fā)送數(shù)據(jù)?顯示出錯(cuò)提示
退出
③
①②
YYNYN
N圖7-7a
主流程圖
第7章輸入/輸出程序設(shè)計(jì)退出
接收字符→ALAL內(nèi)為Ctrl-C?顯示該字符AL內(nèi)為回車?
加顯示一個(gè)換行
①
Y
YNN
②
圖7-7b接收模塊流程圖
第7章輸入/輸出程序設(shè)計(jì)
退出
發(fā)送此字符
有鍵入字符?
是Ctrl-C鍵?①
③
YNYN
圖7-7
c發(fā)送模塊流程圖
第7章輸入/輸出程序設(shè)計(jì)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對(duì)應(yīng)的最高有效位
OUT DX,AL ;發(fā)送此字節(jié)
DEC DX ;指向波特率除數(shù)的最低有效位
MOV AL,60H ;1200BPS對(duì)應(yīng)的最低有效位
OUT DX,AL ;發(fā)送此字節(jié) 第7章輸入/輸出程序設(shè)計(jì);以下初始化線路控制寄存器:
MOV AL,1BH ;數(shù)據(jù)長(zhǎng)度為8位,1個(gè)奇偶校驗(yàn)位,偶校驗(yàn),1個(gè)停止位
MOV DX,3FBH ;指向線路控制寄存器
OUT DX,AL ;發(fā)送此字節(jié)
;以下初始化中斷允許寄存器
MOV DX,3F9H ;指向中斷允許寄存器
MOV AL,0 ;禁止所有中斷
OUT DX,AL ;發(fā)送字節(jié)第7章輸入/輸出程序設(shè)計(jì)READ:
;線路狀態(tài)檢測(cè)循環(huán)
MOV DX,3FDH ;指向線路狀態(tài)寄存器
IN AL,DX ;取狀態(tài)字節(jié)
TEST AL,1EH ;檢查錯(cuò)誤
JNZ ERROR ;若出錯(cuò)則轉(zhuǎn)錯(cuò)誤處理例程
TEST AL,01H ;測(cè)試是否已收到數(shù)據(jù)
JNZ RECEIVE ;轉(zhuǎn)接收例程
TEST AL,20H ;測(cè)試是否可以發(fā)送字符
JNZ SEND ;若是轉(zhuǎn)發(fā)送例程
JMP R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流管理中的客戶服務(wù)優(yōu)化
- 現(xiàn)代醫(yī)療辦公環(huán)境的電氣化改造
- 國(guó)慶節(jié)包廂套餐活動(dòng)方案
- 2024年五年級(jí)品社下冊(cè)《祖國(guó)不會(huì)忘記他們》說課稿 山東版
- 2023二年級(jí)數(shù)學(xué)上冊(cè) 6 表內(nèi)乘法(二)綜合與實(shí)踐 量一量比一比說課稿 新人教版
- 1 北京的春節(jié) 說課稿-2023-2024學(xué)年語文六年級(jí)下冊(cè)統(tǒng)編版
- 9《生活離不開他們》 感謝他們的勞動(dòng) 說課稿-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- Unit 2 Weather Lesson 1(說課稿設(shè)計(jì))-2023-2024學(xué)年人教新起點(diǎn)版英語二年級(jí)下冊(cè)001
- 2024年高中英語 Unit 3 Welcome to the unit and reading I說課稿 牛津譯林版選擇性必修第二冊(cè)
- 2024-2025學(xué)年高中歷史 第五單元 經(jīng)濟(jì)全球化的趨勢(shì) 第26課 經(jīng)濟(jì)全球化的趨勢(shì)(1)教學(xué)說課稿 岳麓版必修2
- 二零二五年度大型自動(dòng)化設(shè)備買賣合同模板2篇
- 江西省部分學(xué)校2024-2025學(xué)年高三上學(xué)期1月期末英語試題(含解析無聽力音頻有聽力原文)
- GA/T 2145-2024法庭科學(xué)涉火案件物證檢驗(yàn)實(shí)驗(yàn)室建設(shè)技術(shù)規(guī)范
- 寵物護(hù)理行業(yè)客戶回訪制度構(gòu)建
- 電廠檢修管理
- 機(jī)動(dòng)車屬性鑒定申請(qǐng)書
- 2024年中考語文試題分類匯編:非連續(xù)性文本閱讀(學(xué)生版)
- 2024年度窯爐施工協(xié)議詳例細(xì)則版B版
- 2024年北京市平谷區(qū)中考英語二模試卷
- 第一屆山東省職業(yè)能力大賽濟(jì)南市選拔賽制造團(tuán)隊(duì)挑戰(zhàn)賽項(xiàng)目技術(shù)工作文件(含樣題)
- 尿毒癥替代治療
評(píng)論
0/150
提交評(píng)論