微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告1_第1頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告1_第2頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告1_第3頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告1_第4頁
微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告1_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理與接口技術(shù)實(shí)驗(yàn)報告班班 級:級: 自動化(鐵道信號)自動化(鐵道信號)姓姓 名:名: *學(xué)學(xué) 號:號: 1121*1121*授課教師:授課教師: 陳福恩陳福恩目錄目錄1 1. . 實(shí)驗(yàn)一實(shí)驗(yàn)一 .3 32. 2. 實(shí)驗(yàn)二實(shí)驗(yàn)二 .8 83. 3. 實(shí)驗(yàn)三實(shí)驗(yàn)三 .13134. 4. 實(shí)驗(yàn)四實(shí)驗(yàn)四 .22225. 5. 實(shí)驗(yàn)五實(shí)驗(yàn)五 .26266. 6. 實(shí)驗(yàn)六實(shí)驗(yàn)六 .33337. 7.參考文獻(xiàn)參考文獻(xiàn).3838實(shí)驗(yàn)一實(shí)驗(yàn)一 交通燈控制實(shí)驗(yàn)交通燈控制實(shí)驗(yàn)一一. .實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康耐ㄟ^應(yīng)用接口技術(shù)設(shè)計十字路口、復(fù)雜路口交通燈控制系統(tǒng),學(xué)會應(yīng)用“微機(jī)原理與接口技術(shù)”課程所學(xué)的 x86 匯編

2、語言和接口技術(shù)掌握可編程并行接口芯片的硬件設(shè)計、軟件編程,實(shí)現(xiàn)十字路口交通燈的模擬控制并思考計算機(jī)如何應(yīng)用在各種控制系統(tǒng)中。(1)掌握利用 x86 匯編語言技巧(2)掌握 x86 微處理器與可編程并行接口芯片 8255a 硬件電路設(shè)計(3)熟悉模擬交通燈控制的實(shí)現(xiàn)方法并思考如何應(yīng)用在實(shí)際中。二二. .實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容設(shè)計一個交通控制系統(tǒng),該控制系統(tǒng)工作后,交通燈按照如下規(guī)律變化:(1)南北路口的綠燈、東西路口的紅燈同時亮 3 秒左右。(2)南北路口的黃燈閃爍若干次,同時東西路口的紅燈繼續(xù)亮。(3)南北路口的紅、東西路口的綠燈同時亮 3 秒。(4)南北路口的紅燈繼續(xù)亮、同時東西路口的黃燈亮閃爍若

3、干次。(5)返回(1)依次循環(huán)。三實(shí)驗(yàn)電路三實(shí)驗(yàn)電路 如下圖,l7、l6、l5 作為南北路口的交通燈與 pc7、pc6、pc5 相連,l2、l1、l0 作為東西路口的交通燈與 pc2、pc1、pc0 相連。編程使六個燈按交通燈變化規(guī)律燃滅。8255 動態(tài)分配地址: 控制寄存器:0ec0bha 口地址: 0ec08hc 口地址: 0ec0ah 紅 黃 綠 紅 黃 綠圖圖 1-11-1 交通燈實(shí)驗(yàn)電路圖交通燈實(shí)驗(yàn)電路圖四程序流程圖四程序流程圖五源程序五源程序code segmentassume cs:code ;* 工作狀態(tài)控制字設(shè)置 start: mov dx,0ec0bh ;寫控制端口,地址0

4、ec0bh mov al,10010000b ;c口方式0輸出 out dx,al ;*南北路口綠燈亮,東西路口紅燈亮first: mov dx,0ec0ah ;寫pc口,地址0ec0ah mov al,00100100b ;南北綠,東西紅,pc口寫00100100 out dx,al ;-兩層嵌套實(shí)現(xiàn)長延時 mov cx,0 ;外層循環(huán)送入初值65536 mov ax,2000h ;內(nèi)層循環(huán)送入初值2000h delay1: dec ax jnz delay1 loop delay1 ;*南北路口黃燈閃爍,東西路口紅燈亮 mov bl,5 ;bl控制黃燈亮的次數(shù)5次second:mov dx

5、,0ec0ah mov al,01000100b out dx,al ;南北黃,東西紅 mov cx,3000h mov ax,0100h li1: dec ax jnz li1 loop li1 mov dx,0ec0ah ;短延時 mov al,00000100b ;南北路口黃燈先滅 out dx,al mov cx,3000h mov ax,0100hwen1: dec ax jnz wen1 ;短延時 loop wen1 dec bl jnz second ;南北路口黃燈再亮;*南北路口紅燈亮,東西路口綠燈亮third: mov dx,0ec0ah ;寫入c口 mov al,10000

6、001b out dx,al ;南北紅,東西綠 mov cx,0 ;長延時 mov ax,2000hdelay2: dec ax jnz delay2 loop delay2 mov bl,4 ;控制黃燈亮的次數(shù)forth: mov dx,0ec0ah ;寫入c口 mov al,10000010b out dx,al ;南北紅,東西黃 mov cx,3000h mov ax,0100hli2: dec ax jnz li2 ;短延時 loop li2;*南北路口紅燈亮,東西路口黃燈閃爍 mov dx,0ec0ah mov al,10000000b out dx,al ;東西路口黃燈先滅 mov

7、 cx,3000h mov ax,0100hwen2: dec ax jnz wen2 loop wen2 dec bl jnz forth ;東西路口黃燈再亮 mov dl,0ffh;*檢測是否有鍵按下,調(diào)用6號功能 mov ah,06h int 21h ;執(zhí)行鍵盤輸入操作 jz first mov ah,4ch int 21h ;返回操作系統(tǒng)code endsend start六實(shí)驗(yàn)總結(jié)六實(shí)驗(yàn)總結(jié)這是我們的首個微機(jī)原理實(shí)驗(yàn),對實(shí)驗(yàn)箱以及 tpc-2003 集成開發(fā)環(huán)境都比較陌生,也沒有事先編寫好程序,因此時間很緊張,今后一定要在實(shí)驗(yàn)前做好充分的預(yù)習(xí)工作,現(xiàn)根據(jù)實(shí)驗(yàn)指導(dǎo)書上的要求,編寫好程序

8、。這個實(shí)驗(yàn)主要是用 8255 的定時功能來定時,然后使用 jz、jnz 來實(shí)現(xiàn)閃爍和紅綠燈轉(zhuǎn)換等功能,運(yùn)用循環(huán)進(jìn)行延時,實(shí)驗(yàn)中還使用了 6 號功能來實(shí)現(xiàn)顯示的功能。通過這次實(shí)驗(yàn)使我對 8255 的工作原理、定時功能有了進(jìn)一步的了解,同時也對匯編的程序結(jié)構(gòu)和調(diào)試方法更加熟悉。一開始,程序編譯連接都沒有錯誤,但是有一個紅燈一直亮,其他功能均正常,我又去檢查程序是否存在邏輯錯誤,并反調(diào)試運(yùn)行,都不能解決問題,后來在別人的實(shí)驗(yàn)箱上就運(yùn)行成功了,可靠的硬件保障是實(shí)驗(yàn)成功的首要條件。實(shí)驗(yàn)二實(shí)驗(yàn)二 可編程定時器可編程定時器/ /計數(shù)器計數(shù)器一實(shí)驗(yàn)?zāi)康囊粚?shí)驗(yàn)?zāi)康耐ㄟ^實(shí)驗(yàn)了解可編程定時器/計數(shù)器的本質(zhì)是計數(shù),學(xué)

9、會再設(shè)計應(yīng)用系統(tǒng)中如何用接口芯片實(shí)現(xiàn)計數(shù)和定時功能,通過實(shí)驗(yàn)思考并比較標(biāo)準(zhǔn) ttl 集成電路實(shí)現(xiàn)計數(shù)和可編程定時器/計數(shù)器有什么不同,各有哪些特點(diǎn)?思考計數(shù)器可以用哪些場合。(1)掌握 8253a 與 x86 微機(jī)處理硬件連接原理。(2)掌握 8253a 計數(shù)定時應(yīng)用編程。(3)熟悉掌握 8253a 在 pc 機(jī)系統(tǒng)中典型應(yīng)用方法并思考如何應(yīng)用在其他系統(tǒng)中。二實(shí)驗(yàn)內(nèi)容二實(shí)驗(yàn)內(nèi)容(1)利用單脈沖發(fā)生器作為 8253a 可編程計數(shù)定時器時鐘信號,實(shí)現(xiàn) n 個脈沖后產(chǎn)生輸出高電平信號。(2)利用 8253a 可編程計數(shù)定時器實(shí)現(xiàn)產(chǎn)生 1s 鐘定時輸出程序設(shè)計,輸入 1mhz。三實(shí)驗(yàn)電路三實(shí)驗(yàn)電路1

10、按圖 2.1 虛線連接電路,將計數(shù)器 0 設(shè)置為方式 0,計數(shù)器初值為 n(n0fh) ,用手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀察 out0 電平變化(當(dāng)輸入 n+1 個脈沖后 out0 變高電平) 。圖圖 2.12.1 可編程計時器可編程計時器/ /計數(shù)器計數(shù)器 電路圖一電路圖一2 按圖 2.2 連接電路圖,將計數(shù)器 0、計數(shù)器 1 分別設(shè)置為方式 3,計數(shù)初值設(shè)為 1000,用邏輯筆觀察 out1 輸出電平的變化(頻率為 1mhz) 。圖圖 2.22.2 可編程定時器可編程定時器/ /計數(shù)器計數(shù)器 電路圖二電路圖二四實(shí)驗(yàn)原理四實(shí)驗(yàn)原理8253 具有 3 個獨(dú)立的計

11、數(shù)通道,采用減 1 計數(shù)方式。在門控信號有效時,每輸入 1 個計數(shù)脈沖,通道作 1 次計數(shù)操作。當(dāng)計數(shù)脈沖是已知周期的時鐘信號時,計數(shù)就成為定時。作計數(shù)器時, 要求計數(shù)的次數(shù)可直接作為計數(shù)器的初值預(yù)置到減“1”計數(shù)器中。8253 中各通道可有 6 種可供選擇的工作方式, 以完成定時、計數(shù)或脈沖發(fā)生器等多種功能。方式 0計數(shù)結(jié)束終端:在寫入計數(shù)值 n 之后的第一個 clk 的下降沿將 n 裝入計數(shù)執(zhí)行單元,待下一個 clk 的下降沿到來且門控信號 gate 為高電平時,通道開始啟動計數(shù)。在計數(shù)過程中,out 一直保持低電平,直到計數(shù)達(dá)“0”時,out 輸出由低電平變?yōu)楦唠娖剑⑶冶3指唠娖?。方?/p>

12、 3方波發(fā)生器:out 輸出低電平, 裝入計數(shù)值后,out 立即跳變?yōu)楦唠娖?。如果?dāng) gate 為高電平, 則立即開始減“1”計數(shù),out 保持為高電平,若 n 為偶數(shù),則當(dāng)計數(shù)值減到 n/2 時,out 跳變?yōu)榈碗娖?,一直保持到計?shù)值為“0” ,系統(tǒng)才自動重新置入計數(shù)值 n,實(shí)現(xiàn)循環(huán)計數(shù)。這時 out 端輸出的周期為 nclki 周期,占空比為 1:1 的方波序列; 若 n 為奇數(shù), 則 outi 端輸出周期為 nclk 周期,占空比為(n+1)/2)/(n-1)/2)的近似方波序列。8253 動態(tài)分配地址: 控制寄存器: 0ec03h計數(shù)器 0 地址: 0ec00h計數(shù)器 1 地址: 0e

13、c01h clk0連接時鐘: 1mhz五程序流程圖五程序流程圖圖圖 2.32.3 可編程定時器可編程定時器/ /計數(shù)器計數(shù)器 流程圖流程圖六源程序六源程序(1 1)data segment n equ 0bh ;定義計數(shù)器初值n,初值n在0到f之內(nèi),便于字符顯示簡單 string db 0ah,0dh,$ ;定義string用來換行,0dh回車,0ah換行,$是字符串的結(jié)尾標(biāo)志data endsstack1 segment stack dw 100 dup(0)stack1 endscode segment assume cs:code,ds:data,ss:stack1start: mov

14、ax,data mov ds,ax;*8253的初始化mov dx,0ec03h ;控制寄存器地址0ec03hmov al,10h;計數(shù)器0:00,只讀/寫計數(shù)器的低字節(jié):01,方式0:000,;二進(jìn)制計數(shù):0, 所以控制字寫00010000bout dx,al ;寫入控制字mov dx,0ec00h ;計數(shù)器0地址0ec00hmov al,nout dx,al ;寫入計數(shù)初值為n,即0bh,11mov cl,n;用cl控制計數(shù)n次l00p: mov dx,0ec00hin al,dx;讀取當(dāng)前數(shù)值cmp al,cljne l00p;若al不等于cl,則繼續(xù)到l00p循環(huán)dec cl;更改cl

15、值;*單字符輸出程序,先轉(zhuǎn)換成asiicmov dl,alcmp dl,09h ;轉(zhuǎn)換為asiic,09內(nèi)的數(shù)字加30,a到f加37jle add30 add dl,07h ; af先加7,下一步再加30add30: add dl,30hmov ah,02h ;02號功能是單字符輸出顯示,顯示計數(shù)器當(dāng)前值int 21h;*mov dx,offset string ;換行mov ah,09h ;,int 21hcmp cl,0 jnl l00p;循環(huán)至cl等于0,即n次mov ah,4chint 21hcode endsend start(2 2)data segmentn db 07hdata

16、 endsstack1 segment para stackdb 20 dup(0)stack1 endscode segmentassume cs: codestart: mov al, 36h ;設(shè)置 8253 計數(shù)器 0 為工作方式 3,十進(jìn)制計數(shù)mov dx,0ec03hout dx, al ;送方式控制字到控制口mov dx, 0ec00hmov ax, 1000 ;計數(shù)初值為 1000out dx, al ;送計數(shù)初值的低字節(jié)到計數(shù)器 0 的端口mov al, ah out dx, al ;送計數(shù)初值的高字節(jié)到計數(shù)器 0 的端口mov al, 76h ;設(shè)置 8253 計數(shù)器 1

17、為工作方式 3,十進(jìn)制計數(shù)mov dx, 0ec03hout dx, al ;送方式控制字到控制口mov dx, 0ec01hmov ax, 1000 ;計數(shù)初值為 1000out dx, al ;送計數(shù)初值的低字節(jié)到計數(shù)器 1 的端口mov al, ah out dx, al ;送計數(shù)初值的高字節(jié)到計數(shù)器 1 的端口mov ah, 4ch ;返回 dosint 21hcode endsend start七實(shí)驗(yàn)總結(jié)七實(shí)驗(yàn)總結(jié)經(jīng)過第一次實(shí)驗(yàn)的教訓(xùn)后,我在實(shí)驗(yàn)前做了充足的預(yù)習(xí)工作,已經(jīng)將程序?qū)懞茫恍枰趯?shí)驗(yàn)室連接外部電路,調(diào)試程序即可,因此實(shí)驗(yàn)進(jìn)行得很順利。這次實(shí)驗(yàn)是針對可編程定時時鐘/計數(shù)器(

18、8253) ,8253 有六種工作方式,我在實(shí)驗(yàn)中主要用到了 8253 的工作方式 0 和工作方式 3,此外調(diào)用了 02 號功能單字符輸出顯示,以及 09 號功能輸出顯示字符串,我在做宏匯編研究性學(xué)習(xí)的時候就已經(jīng)研究過這兩個功能的使用方法,所以這次使用得心應(yīng)手,要注意的是:執(zhí)行 02 號功能必須進(jìn)行 assic 碼轉(zhuǎn)換,執(zhí)行 09 號功能必須在字符串結(jié)尾寫一個符號$,表示字符串結(jié)束。此外,在實(shí)驗(yàn)老師的指導(dǎo)下,我進(jìn)一步熟悉了調(diào)試的方法,之前只會 f8 單步調(diào)試,但是在遇到很長的循環(huán)程序時,就不能單步調(diào)試的了,通過這次實(shí)驗(yàn)我學(xué)會了如何使用 f4 讓程序進(jìn)行到任意指定位置,這樣就可以跳過循環(huán)繼續(xù)執(zhí)行

19、代碼。實(shí)驗(yàn)三、可編程中斷控制器實(shí)驗(yàn)三、可編程中斷控制器一實(shí)驗(yàn)?zāi)康囊粚?shí)驗(yàn)?zāi)康?通過實(shí)驗(yàn)了解中斷是計算機(jī)系統(tǒng)最重要的工作方式之一,理解中斷能實(shí)現(xiàn)系統(tǒng)協(xié)調(diào)工作,了解中斷在操作系統(tǒng),工業(yè)控制中的應(yīng)用。通過實(shí)驗(yàn)可學(xué)會可編程中斷控制器 8259 的結(jié)構(gòu)、中斷申請、中斷響應(yīng)、中斷處理、中斷返回等中斷原理,掌握中斷系統(tǒng)的編程與應(yīng)用。(1)掌握 pc 機(jī) 8259a 可編程中斷控制器中斷基本原理。(2)掌握中斷源、中斷處理過程、中斷向量表的建立、dos 的使用。(3)熟悉主程序、中斷服務(wù)程序編寫,了解中斷相應(yīng)過程 。二實(shí)驗(yàn)內(nèi)容二實(shí)驗(yàn)內(nèi)容(1)學(xué)習(xí) pc 機(jī)系統(tǒng)中斷原理(2)利用手動產(chǎn)單脈沖作為中斷請求信號 ,

20、要求每按一次開關(guān)產(chǎn)生一次中斷在屏幕上顯示一次 “tpc pci card interrupt” 中斷 10 次后程序退出。三實(shí)驗(yàn)原理三實(shí)驗(yàn)原理pc機(jī)用戶可使用的硬件中斷只有可屏蔽中斷由8259中斷控制器管理中斷控制器用于接收外部的中斷請求信號經(jīng)過優(yōu)先級判別等處理后向cpu發(fā)出可屏蔽中斷請求 ibmpc、pc/xt機(jī)內(nèi)有一片8259中斷控制器對外可以提供8個中斷源中斷源中斷類型號 中斷功能irq0 08h 時鐘irq1 09h 鍵盤irq2 0ah 保留irq3 obh 串行口2 irq4 0ch 串行口1 irq5 0dh 硬盤irq6 0eh 軟盤irq7 0fh 并行打印機(jī)8個中斷源的中斷

21、請求信號線irq0 irq7在主機(jī)的62線isa總線插座中可以引出系統(tǒng)已設(shè)定中斷請求信號為邊沿觸發(fā)普通結(jié)束方式對于pc/at及286以上微機(jī)內(nèi)又?jǐn)U展了一片8259中斷控制 irq2用于兩片8259之間級連對外可以提供16個中斷源中斷源 中斷類型號 中斷功能 irq8 070h 實(shí)時時鐘 irq9 071h 用戶中斷 irq10 072h 保留 irq11 o73h 保留 irq12 074h 保留 irq13 075h 協(xié)處理器 irq14 076h 硬盤 irq15 077h 保留pci總線中的中斷線只有四根 inta# intb# intc# intd# 它們需要通過p&p的設(shè)置來

22、和某一根中斷相連接才能進(jìn)行中斷申請四編程提示四編程提示1. 由于 9054 的驅(qū)動程序影響直寫 9054 芯片的控制寄存器,中斷實(shí)驗(yàn)需要在純 dos的環(huán)境中才能正常運(yùn)行。這里指的純 dos 環(huán)境是指微機(jī)啟動時按 f8 鍵進(jìn)入的 dos 環(huán)境。windows 重啟進(jìn)入 msdos 方式由于系統(tǒng)資源被重新規(guī)劃過,所以也不能正常實(shí)驗(yàn)。 2. 由于 tpc 卡使用 pci 總線,所以分配的中斷號每臺微機(jī)可能都不同,編程時需要了解當(dāng)前的微機(jī)使用那個中斷號并進(jìn)行設(shè)置,獲取方法請參看匯編程序使用方法的介紹。(也可使用自動獲取資源分配的程序取得中斷號) 3. 在純 dos 環(huán)境下,有些微機(jī)的 bios 設(shè)置中

23、有將資源保留給 isa 總線使用的選項(xiàng),致使在純 dos 環(huán)境(windows 環(huán)境下不會出現(xiàn)此問題)下 pci 總線無法獲得系統(tǒng)資源,也就無法做實(shí)驗(yàn),這時需要將此選項(xiàng)修改為使用即插即用。 4. 在純 dos 環(huán)境下,有些微機(jī)的 bios 設(shè)置中有使用即插即用操作系統(tǒng)的選項(xiàng),如果在使用即插即用操作系統(tǒng)狀態(tài)下,bios 將不會給 tpc 卡分配系統(tǒng)資源,致使在純 dos 環(huán)境(windows 環(huán)境下不會出現(xiàn)此問題)下 pci 總線無法獲得系統(tǒng)資源,也就無法做實(shí)驗(yàn),這時需要將此選項(xiàng)修改為不使用即插即用操作系統(tǒng)。 5. 由于 tpc 卡使用 9054 芯片連接微機(jī),所以在編程使用微機(jī)中斷前需要使能

24、9054的中斷功能,代碼如下: mov dx,ioport_cent+68h ;設(shè)置 tpc 卡中9054芯片io口,使能中斷 in ax,dx or ax,0900h out dx,ax 其中 ioport_cent 是 9054 芯片寄存器組的 i/o 起始地址,每臺微機(jī)可能都不同,編程時需要了解當(dāng)前的微機(jī)使用哪段并進(jìn)行設(shè)置,獲取方法請參看本書結(jié)尾部分的介紹。(也可使用自動獲取資源分配的程序取得) ,+68h 的偏移是關(guān)于中斷使能的寄存器地址,設(shè)置含義如下: 設(shè)置 intcsr(68h)寄存器 中斷模式設(shè)置bits 功能 8 1: 能夠產(chǎn)生pci中斷 0 :禁止產(chǎn)生pci中斷 11 1:

25、能夠local端輸入的中斷送到pci端0: 禁止local端輸入的中斷送到pci端其它位為零即可 更多內(nèi)容參看9054芯片數(shù)據(jù)手冊 程序退出前還要關(guān)閉 9054 的中斷,代碼如下: mov dx,ioport_cent+68h ;設(shè)置 tpc 卡中9054芯片io口,關(guān)閉中斷 in ax,dx and ax,0f7ffh out dx,ax 6. pc 機(jī)中斷控制器 8259 的地址為 20h、21h,編程時要根據(jù)中斷類型號設(shè)置中斷矢量,8259 中斷屏蔽寄存器 imr 對應(yīng)位要清零(允許中斷) ,中斷服務(wù)結(jié)束返回前要使用中斷結(jié)束命令: mov al,20h out 20h,al 中斷結(jié)束返回

26、 dos 時應(yīng)將 imr 對應(yīng)位置 1,以關(guān)閉中斷 。五實(shí)驗(yàn)電路五實(shí)驗(yàn)電路實(shí)驗(yàn)電路如圖,直接用手動產(chǎn)單脈沖作為中斷請求信號,只需連接一根導(dǎo)線。圖圖 3.13.1 中斷實(shí)驗(yàn)電路圖中斷實(shí)驗(yàn)電路圖六流程圖六流程圖 圖圖 3.23.2 中斷實(shí)驗(yàn)流程圖中斷實(shí)驗(yàn)流程圖五五. .源程序源程序;386 以上微機(jī)適用;純 dos 下才能使用;tasm4.1 或以上編譯;*;* 中斷 *;*;data segment int_vect equ 073h ;中斷 0-7 的向量為:08h-0fh,中斷 8-15 的向量為:70h-77h irq_mask_2_7 equ 11111011b ;中斷掩碼,中斷 0-7

27、 時從低至高相應(yīng)位為零,中斷 8-15時第 2 位為零 irq_mask_9_15 equ 11110111b ;中斷 0-7 時全一,中斷 8-15 時從低至高相應(yīng)位為零 ioport_cent equ 0e800h ;tpc 卡中 9054 芯片的 io 地址 csreg dw ? ipreg dw ? ;舊中斷向量保存空間 irq_times dw 00h ;中斷計數(shù) msg1 db 0dh,0ah,tpc pci card interrupt,0dh,0ah,$ msg2 db 0dh,0ah,press any key to exit!,0dh,0ah,$ msg3 db 0dh,0

28、ah,press dmc to interrupt 10 times and exit!,0dh,0ah,$data endsstack segment stackdb 100 dup (?)stack endscode segmentassume cs:code,ds:data,ss:stack,es:datastart:;enable local interrupt input.386climov ax,datamov ds,axmov es,axmov ax,stackmov ss,axmov dx,ioport_cent+68h ;設(shè)置 tpc 卡中 9054 芯片 io 口,使能中斷

29、in ax,dxor ax,0900hout dx,axmov al,int_vect ;調(diào)用 35 號功能,保存原中斷向量 int_vectmov ah,35hint 21hmov ax,esmov csreg,ax mov ipreg,bx ;ipreg csreg 是舊中斷向量保存空間mov ax,seg int_proc ;調(diào)用 25 號功能設(shè)置新中斷向量mov ds,ax ;中斷服務(wù)程序的的段基址送 dxmov dx,offset int_proc ;中斷服務(wù)程序的的偏移地址送 dxmov al,int_vectmov ah,25hint 21hin al, 21h ;設(shè)置中斷掩碼a

30、nd al, irq_mask_2_7 ;主片端口地址 21h,d2 允許中斷 11111011b out 21h, al in al, 0a1hand al, irq_mask_9_15 ;從片端口地址 a1h,d3 允許中斷 11110111bout 0a1h, almov ax,datamov ds,axmov dx,offset msg2 mov ah,09h ;09 號功能顯示press any key to exit!int 21hmov dx,offset msg3 ;顯示press dmc to interrupt 10 times and exit!mov ah,09h in

31、t 21h mov irq_times,0ahsti ;允許可屏蔽中斷請求進(jìn)入 loop1:cmp irq_times,0 ;等待中斷并判斷中斷 10 次后退出jz exitmov ah,1 ;bios 功能調(diào)用 int 16h ah=01h 檢測字符是否準(zhǔn)備好int 16h ;zf=0,表示無字符可接收,zf=1,表示有字符可接收jnz exit ;按任意鍵退出 if=1jmp loop1exit: climov bl, irq_mask_2_7 ;恢復(fù)中斷掩碼not blin al, 21hor al, bl out 21h, almov bl, irq_mask_9_15not blin

32、 al, 0a1hor al, blout 0a1h, almov dx,ipreg ;恢復(fù)原中斷向量 int_vectmov ax,csregmov ds,axmov ah,25hmov al,int_vectint 21hmov dx,ioport_cent+68h ;設(shè)置 tpc 卡中 9054 芯片 io 口,關(guān)閉中斷in ax,dxand ax,0f7ffhout dx,axmov ax,4c00h ;返回操作系統(tǒng)int 21hint_proc proc farpush axpush dxpush dsdec irq_timesmov ax,data ;interrupt to do

33、mov ds,axmov dx,offset msg1mov ah,09hint 21hmov al,20h ;send eoiout 0a0h,alout 20h,alpop dspop dxpop axsti ;開中斷iretint_proc endpcode endsend start六六 . .實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)總結(jié)這次的實(shí)驗(yàn)感覺比較難,首先是中斷程序復(fù)雜,其次,要在純 dos 環(huán)境下運(yùn)行。這次實(shí)驗(yàn)重點(diǎn)是要理解中斷的概念和熟悉中斷中 8352 主片和從片的如何級聯(lián)工作,具體包括:知道如何查找中斷源、確定中斷類型,設(shè)置 tpc 卡中斷使能、調(diào)用 35 號功能保護(hù)原中斷向量、調(diào)用 25 號功能設(shè)

34、置新的中斷向量,設(shè)置中斷屏蔽字等諸多內(nèi)容。雖然老師已經(jīng)給了我們程序,但是要在短時間內(nèi)徹底地讀懂全部程序,并透徹的理解每一句代碼的意義還是比較困難的,尤其是使用微機(jī)中斷前使能 9054 的中斷功能這一部分的程序令人費(fèi)解,特地請教了老師幫我解惑。通過此次試驗(yàn)。我對整個中斷服務(wù)流程的理解更加清晰,對 8352 主片和從片的級聯(lián)工作用以拓展中斷源的工作方式有了進(jìn)一步的認(rèn)識。實(shí)驗(yàn)四實(shí)驗(yàn)四 模模/ /數(shù)轉(zhuǎn)換器數(shù)轉(zhuǎn)換器 a/dc0809a/dc0809一一. .實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?通過實(shí)驗(yàn)了解計算機(jī)能直接處理的通常是數(shù)字信號,學(xué)會利用 a/d 器件把模擬信號轉(zhuǎn)換成數(shù)字信號,學(xué)會 a/d 芯片如何與計算機(jī)連接,

35、掌握有哪些主要參數(shù)影響采集的速度和精度,掌握軟件編程實(shí)現(xiàn)模擬信號采集,思考如何解決實(shí)際多通道數(shù)據(jù)采集處理問題,思考數(shù)據(jù)采集后如何處理等問題,了解模/數(shù)轉(zhuǎn)換的基本原理,掌握 adc0809 的使用方法。 (1)掌握單通道模擬信號采集到數(shù)據(jù)處理的方法。(2)掌握采集電路和計算機(jī)連接的硬件電路。(3)熟悉多通道模擬信號采集到數(shù)據(jù)處理的方法。二二. .實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)電路原理圖如圖4.1。通過實(shí)驗(yàn)臺左下角電位器rw1輸出05直流電壓送入adc0809通道0(in0), 編程采集in0輸入的電壓,在屏幕上顯示出轉(zhuǎn)換后的數(shù)據(jù)(用16進(jìn)制數(shù)) 三實(shí)驗(yàn)電路三實(shí)驗(yàn)電路 圖圖 4.14.1 模數(shù)轉(zhuǎn)換電路模數(shù)

36、轉(zhuǎn)換電路四參考流程圖四參考流程圖圖圖 4.2 a/d 轉(zhuǎn)換流程圖轉(zhuǎn)換流程圖五五, ,實(shí)驗(yàn)提示實(shí)驗(yàn)提示 、adc0809 的 in0 口地址為 298h,in1 口地址為 299h。 、in0 單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為: 其中 ui 為輸入電壓,uref 為參考電壓,這里的參考電壓為機(jī)的電源。 、一次 a/d 轉(zhuǎn)換的程序可以為 mov dx,口地址 ;啟動轉(zhuǎn)換out dx,al ;延時 in al,dx ;讀取轉(zhuǎn)換結(jié)果放在 al 中六源程序六源程序code segmentassume cs:codestart: mov al,0 mov dx,0ec18h ;in0 口動態(tài)地址 out

37、 dx,al ;啟動 mov dx,0fffh mov cx,0delate:loop delate dec dx jnz delate ;延時wp: mov dx,0ec18h in al,dx ;讀 in0 口 mov dl,al mov cl,4 shr dl,cl ;右移 4 位 cmp dl,9 jg big add dl,30h ;ascii 顯示 09,并顯示 mov ah,06h int 21h jmp nextbig: add dl,37h ;ascii 碼 af,并顯示 mov ah,06h int 21h jmp nextnext: mov dx,0ec18h ;讀 in

38、0 口 in al,dx mov dl,al and dl,00001111b ;屏蔽高 4 位 cmp dl,9 jg bigs add dl,30h ;ascii 顯示 09,并顯示 mov ah,06h int 21h jmp judgebigs: add dl,37h ;ascii 碼 af,并顯示 mov ah,06h int 21h jmp judgejudge: mov dl,0dh ;加回車符,只顯示一個兩位數(shù)字 int 21h mov dl,0ffh mov ah,06h int 21h jz start ;有鍵按下返回 dos mov ah,4ch int 21hcode

39、ends end start七實(shí)驗(yàn)總結(jié)七實(shí)驗(yàn)總結(jié)這次試驗(yàn)之前我也同樣進(jìn)行了預(yù)習(xí),了解了模/數(shù)轉(zhuǎn)換的基本原理,掌握 adc0809 的使用方法。在將 in0 口的輸入電壓顯示在屏幕上時,通過實(shí)驗(yàn)臺左下角電位器 rw1 輸出05v 直流電壓送入 adc0809 通道 0,調(diào)節(jié)電位器的阻值,屏幕上顯示的數(shù)字隨著電阻值的變化而變化,不需要按 enter 鍵換行,通過和老師的交流,才明白過來,這是因?yàn)槌绦虻膉udge 段加了回車符,只顯示一個兩位數(shù)字,所以不需要按 enter 鍵進(jìn)行換行,直接改變電阻值,即可顯示出相應(yīng)的輸入電壓值。通過這幾次的實(shí)驗(yàn),我發(fā)現(xiàn)微機(jī)實(shí)驗(yàn)其實(shí)很簡單,在扎實(shí)掌握基本知識的基礎(chǔ)上,

40、靈活的做一些變動,就可以實(shí)現(xiàn),這讓我體會到面對難題,如果你不愿嘗試就一定不會有突破,只要愿意思考,并且舉一反三,不斷嘗試,才會有成功的機(jī)遇。五、五、pcpc 機(jī)串行通訊實(shí)驗(yàn)機(jī)串行通訊實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康囊?、?shí)驗(yàn)?zāi)康?、 進(jìn)一步了解串行通信的基本原理。2、 掌握串行接口芯片 8250 的工作原理和編程方法。3、 熟悉 pc 機(jī)串行口的基本連接方法二、實(shí)驗(yàn)內(nèi)容二、實(shí)驗(yàn)內(nèi)容1、pc 機(jī) rs-232 串口自發(fā)自收。按照 pc 機(jī)串口自發(fā)自收的連接方法連線。編寫 pc 機(jī)自發(fā)自收串行通信程序,要求:從鍵盤輸入一個字符,將字符通過串口發(fā)送出去,再由此串口將字符接收回來并在屏幕上顯示,實(shí)現(xiàn)自發(fā)自收。2、 兩臺

41、 pc 機(jī)間 rs-232 串口通信。按照 pc 機(jī) rs-232 串口直接互連的方法連接兩臺 pc 機(jī)。 編寫 pc 機(jī)直接互連串行通信程序;要求:由甲機(jī)鍵盤鍵入字符經(jīng)串口發(fā)送給乙機(jī),再由乙機(jī)通過串口接收字符并顯示在屏幕上。當(dāng)鍵入感嘆號“!” ,結(jié)束收發(fā)過程。 圖 5-1 db-9 連接器 圖 5-2 雙機(jī)近距離通信連接圖三、實(shí)驗(yàn)原理三、實(shí)驗(yàn)原理(1)本實(shí)驗(yàn)為異步通信:以字符為單位進(jìn)行傳送,每傳送一個字符,以起始位作為開始標(biāo)志,以停止位作為結(jié)束標(biāo)志。異步串行通信的工作過程是:傳送開始后,接收設(shè)備不斷地檢測傳輸線是否有起始位到來,當(dāng)接收到一系列的“1” (空閑或停止位)之后,檢測到第一個“0”

42、 ,說明起始位出現(xiàn),就開始接收所規(guī)定的數(shù)據(jù)位、奇偶校驗(yàn)位及停止位。經(jīng)過接收器處理,將停止位去掉,把數(shù)據(jù)位拼裝成一字節(jié)數(shù)據(jù),并且經(jīng)奇偶校驗(yàn)無錯誤,才算是正確地接收到了一個字符。當(dāng)一個字符接收完畢,接收設(shè)備又繼續(xù)測試傳輸線,監(jiān)視“0”電平的到來(下一個字符的開始) 。 d0 d1 dn 空閑位 數(shù)據(jù)位 奇 偶 校驗(yàn)位 停 止 位 幀 起始 位 空閑位 (2)8250 各部分功能說明8250 片內(nèi)有 10 個寄存器,其中有幾個是共用地址的,其識別由線路控制寄存器(lcr)的最高位 dlab 來決定。各寄存器的地址和格式如下所示:(3)數(shù)據(jù)發(fā)送和接收:數(shù)據(jù)發(fā)送:cpu數(shù)據(jù)數(shù)據(jù)發(fā)送r時鐘控制發(fā)送移位r并

43、轉(zhuǎn)串發(fā)送端sout(插入起始、校驗(yàn)、停止位后發(fā)出)數(shù)據(jù)接收:數(shù)據(jù)起始位時鐘控制sin數(shù)據(jù)移位r串轉(zhuǎn)并數(shù)據(jù)接收rcpu四源程序四源程序1 1pcpc 機(jī)機(jī) rs-232rs-232 串口自發(fā)自收。串口自發(fā)自收。code segmentassume cs:codestart:mov al,10000000b;8250 初始化,設(shè) dlab=1mov dx,3fbhout dx,almov ax,30h;寫入除數(shù)低字節(jié)mov dx,3f8hout dx,almov al,ah;寫入除數(shù)高字節(jié)mov dx,3f9hout dx,almov al,00001010b;7 位數(shù)據(jù),1 位停止,奇校驗(yàn)mov

44、 dx,3fbh out dx,al;寫入線路控制寄存器mov al,00010000b;自檢控制mov dx,3fchout dx,al;寫入 modem 控制寄存器mov al,0mov dx,3f9hout dx,al;寫中斷允許寄存器,屏蔽中斷wait_for:mov dx,3fdh;讀線路狀態(tài)寄存器in al,dxtest al,00011110b;出錯否jnz error;出錯,轉(zhuǎn) errortest al,00000001b;接收數(shù)據(jù)就緒否jnz receive;就緒,轉(zhuǎn)接受test al,00100000b;發(fā)送寄存器空否,不空,返回等待jz wait_formov ah,1i

45、nt 21h;讀鍵盤mov dx,3f8h;發(fā)送out dx,aljmp wait_for;返回等待receive: push cx push ax mov cx,02000h t1: mov ax,0ffffh t2: dec ax jnz t2 loop t1 ;延時程序mov dx,3f8h;讀接收數(shù)據(jù)in al,dxand al,01111111b;保留 7 位數(shù)據(jù)cmp al,03h;是 ctrl+c?jnz charmov ah,4ch;返回 dosint 21hchar: push ax mov dl,almov ah,2h;顯示接收字符int 21hpop axjmp wait

46、_for;返回等待error: mov dx,3fdh;出錯則清除線路狀態(tài)寄存器in al,dxmov dl,?;顯示?mov ah,02hint 21hjmp wait_forcode endsend start 2. 兩臺兩臺pcpc機(jī)間機(jī)間rs-232rs-232串口通信。串口通信。(1 1)發(fā)送端)發(fā)送端: :code segmentassume cs:codestart:mov al,80h;8250初始化,設(shè)dlab=1mov dx,3fbhout dx,almov ax,0030hmov dx,3f8hout dx,al;寫入除數(shù)低字節(jié)mov al,ahmov dx,3f9hou

47、t dx,al;寫入除數(shù)高字節(jié)mov al,0ah;7位數(shù)據(jù),1位停止,奇校驗(yàn)mov dx,3fbhout dx,al;寫入線路控制寄存器mov al,03h;數(shù)據(jù)終端就緒,請求發(fā)送數(shù)據(jù)mov dx,3fchout dx,al;寫入modem控制寄存器mov al,0mov dx,3f9hout dx,al;寫中斷允許寄存器,屏蔽中斷wait_for:mov dx,3fdh;讀線路狀態(tài)寄存器in al,dxtest al,00100000b;發(fā)送寄存器空否,不空,返回等待jz wait_forsend:mov ah,1int 21hcmp al,21hjz exitmov dx,3f8h;讀鍵

48、盤,若是!,返回dos,若不是,則發(fā)送out dx,aljmp wait_for;返回等待exit:mov ax,4c00h int 21hcode endsend start(2)(2)接收端:接收端:code segmentassume cs:code start:mov al,80h;8250初始化,設(shè)dlab=1mov dx,3fbhout dx,almov ax,0030hmov dx,3f8hout dx,al;寫入除數(shù)低字節(jié)mov al,ahmov dx,3f9hout dx,al;寫入除數(shù)高字節(jié)mov al,0ah;7位數(shù)據(jù),1位停止,奇校驗(yàn)mov dx,3fbhout dx,

49、al;寫入線路控制寄存器mov al,03h;數(shù)據(jù)終端就緒,請求發(fā)送數(shù)據(jù)mov dx,3fchout dx,al;寫入modem控制寄存器mov al,0mov dx,3f9hout dx,al;寫中斷允許寄存器,屏蔽中斷wait_for:mov dx,3fdh;讀線路狀態(tài)寄存器in al,dxtest al,00000001b;接收數(shù)據(jù)就緒否jnz receive;轉(zhuǎn)接收jmp wait_for;返回等待receive:mov dx,3f8h;讀接收數(shù)據(jù)in al,dxand al,01111111b;保留7位數(shù)據(jù)cmp al,21h;是!?jnz charmov ax,4c00h;返回do

50、sint 21hchar:push axmov dl,almov ah,2;顯示接收字符int 21hpop axjmp wait_for;返回等待code endsend start5 5實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)總結(jié)在這次實(shí)驗(yàn)中,pc機(jī)rs-232串口自發(fā)自收實(shí)驗(yàn)進(jìn)行得比較順利,但是在兩臺pc機(jī)間rs-232串口通信時,遇到了問題:實(shí)驗(yàn)題目要求從鍵盤輸入“!”時,結(jié)束雙機(jī)通信,可是我作為發(fā)送端可以在輸入感嘆號時立即結(jié)束通信并返回dos,而對方接收端確認(rèn)就處于等待接收的狀態(tài)。一開始,我認(rèn)為一定是接收端的程序有漏洞,反復(fù)檢查與調(diào)試運(yùn)行都沒有發(fā)現(xiàn)問題,然后冷靜下來重新審查全部程序,發(fā)現(xiàn)竟然是發(fā)送端的錯誤,當(dāng)判

51、斷出此刻輸入的是感嘆號時,沒有將感嘆號發(fā)送給對方,就立即結(jié)束了發(fā)送程序,接收方一直接收不到代表終止通信命令的感嘆號,所以一直在等待接收。由此我認(rèn)識到排查錯誤時一定要全面考慮,錯誤的發(fā)生點(diǎn)不一定是錯因的根節(jié)點(diǎn),某一環(huán)節(jié)出現(xiàn)錯誤或是有所遺漏,即使不會對當(dāng)前部分有影響,也會埋下隱患,對其他環(huán)節(jié)造成不利影響,尤其是通信過程每一環(huán)節(jié)都要做到面面俱到,萬無一失,才能保證提供可靠的通信質(zhì)量。六、競賽搶答器六、競賽搶答器一實(shí)驗(yàn)?zāi)康囊粚?shí)驗(yàn)?zāi)康耐ㄟ^本實(shí)驗(yàn)鍛煉接口技術(shù)完成一個較大的綜合設(shè)計,學(xué)會綜合使用本課程中的接口芯片、中斷、定時、dos 功能調(diào)用等知識,學(xué)會多種接口的配合使用,掌握軟件、硬件協(xié)同工作,掌握微機(jī)原理與接口技術(shù)的綜合應(yīng)用。(1)了解微機(jī)化競賽搶答器的基本原理。(2)掌握微機(jī)通過 8255a 控制七段數(shù)碼管的原理。(3)掌握并行接口 8255、中斷、定時、d0s 功能綜合應(yīng)用。二實(shí)驗(yàn)內(nèi)容二實(shí)驗(yàn)內(nèi)容下圖為競賽搶答器(模擬)的原理圖,邏輯開關(guān) k0k7 代表競賽搶答按鈕 07 號,當(dāng)某個邏輯電平開關(guān)置“”時,相當(dāng)某組搶答按鈕按下。在七段數(shù)碼管上

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論