微機原理與接口技術(shù)實驗報告_第1頁
微機原理與接口技術(shù)實驗報告_第2頁
微機原理與接口技術(shù)實驗報告_第3頁
微機原理與接口技術(shù)實驗報告_第4頁
微機原理與接口技術(shù)實驗報告_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一 i/o地址譯碼與交通燈控制實驗一、 實驗?zāi)康?、 掌握并行接口8253的基本原理2、 掌握8253的編程方法二、 實驗內(nèi)容如圖所示,l7、l6、l5作為南北路口的交通燈與pc7、pc6、pc5相連,l2、l1、l0作為東西路口的交通燈與pc2、pc1、pc0相連。編程使六個燈按交通變化規(guī)律燃滅。三、 編程分析1、8255地址分析:控制寄存器地址: 0c40bh a口地址: 04c408h c口地址: 04c40ah2、十字路口交通燈的變化規(guī)律要求(1) 南北路口的綠燈、東西路口的紅燈同時亮三秒;(2) 南北路口的黃燈閃爍三次,同時東西路口的紅燈繼續(xù)亮;(3) 南北路口的紅燈、東西路口的

2、綠燈同時亮三秒;(4) 南北路口的紅燈繼續(xù)亮、同時東西路口的黃燈亮閃爍三次;(5) 轉(zhuǎn)(1)重復(fù)。3、 c口置數(shù)分析由于發(fā)光二極管是共陰極相連,所以若要其發(fā)亮應(yīng)給高電平;黃燈閃爍是讓其不斷交替亮滅來實現(xiàn);同時分析可知只要有綠燈亮,燈就會持續(xù)亮三秒,黃燈亮就會閃爍三次。4、程序設(shè)計流程圖開始返回dos設(shè)置8255c口輸出南北路口的綠燈、東西路口的紅燈亮長延時南北路口的黃燈閃爍,東西路口紅燈亮南北路口的紅燈、東西路口的綠燈亮長延時南北路口紅燈亮、東西路口黃燈亮閃爍有鍵按下嗎?yn四、匯編語言程序stack1 segment stack db 100 dup(0) stack endscode se

3、gment assume cs:code, ss:stack1 dy proc near push ax push cx mov ax, 0ffffh ;延時程序 mov cx, 02fffh l0:dec ax jnz l0 loop l0 pop cx pop ax ret dy endpstart: mov dx, 0c40bh mov al, 10000000b out dx, al mov dx, 0c40ah mov bl, 6h ;設(shè)置延遲3秒 l1:mov al, 00100100b ;南北綠燈亮,東西紅燈亮 out dx, al call dy ;調(diào)用延遲子程序 dec bl

4、 jnz l1 mov bl, 4h ;設(shè)置第二次閃爍3次 l2:mov dx, 0c40ah mov al, 01000100b ;南北黃燈亮,東西紅燈亮 out dx, al call dy mov al, 00000100b ;南北黃燈滅,東西紅燈亮,實現(xiàn)要求閃的功能 out dx,al call dy dec bl jnz l2 mov bl,6h ;第三次設(shè)置亮滅時間為3秒 l3:mov al,10000001b ; 南北黃燈亮,東西紅燈亮 out dx,al call dy dec bl jnz l3 mov bl,4h l4:mov al,10000010b ;南北紅燈亮,東西黃

5、燈亮 out dx,al call dy mov al,10000000b ;南北紅燈亮,東西黃燈滅,實現(xiàn)閃的功能out dx,al call dy dec bl jnz l4 mov dl,0ffh ;判斷是否有鍵按下,結(jié)束程序 mov ah,06h int 21h jz start ;沒有鍵按下,進(jìn)入下一次循環(huán) mov ah,4ch int 21h code ends end start五、實驗現(xiàn)象:紅黃綠燈變化規(guī)律如下:南北路口的綠燈、東西路口的紅燈同時亮3秒左右;南北路口的黃燈閃爍若干次,同時東西路口的紅燈繼續(xù)亮;南北路口的紅燈、東西路口的綠燈同時亮3秒左右;南北路口的紅燈繼續(xù)亮,同時

6、東西路口的黃燈閃爍若干次;依次重復(fù)。六、實驗感想這是第一次微機實驗,總體感覺挺難的。雖然課前進(jìn)行了預(yù)習(xí)準(zhǔn)備,但在調(diào)試時還是遇到了燈不亮的情況。仔細(xì)檢查程序后沒有發(fā)現(xiàn)什么問題,所以就換了一個實驗箱,并得到了理想的效果。我覺得這個實驗的關(guān)鍵是設(shè)置延時子程序dy,在每一次燈亮后,都要調(diào)用這個延時程序,并跳轉(zhuǎn)到下一次燈亮。實驗二 可編程定時器/計數(shù)器(8253)一、 實驗?zāi)康?、 掌握并行接口8253的基本工作原理;2、 掌握8253的編程方法。二、 實驗內(nèi)容1、 按圖虛線連接電路,將計數(shù)器0設(shè)置為工作方式0,計數(shù)器初值為n(n0fh),用手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀

7、察out0電平變化(當(dāng)輸入n+1個脈沖后out0遍高電平)。 2、 按圖連接電路,將計數(shù)器0、計數(shù)器1分別設(shè)置為方式3,計數(shù)初值設(shè)為1000,用邏輯筆觀察out1輸出電平的變化(頻率1hz)。三、 編程分析1、8253控制寄存器地址: 0c403h 計數(shù)器0地址: 0c400h 計數(shù)器1地址: 0c401hclk0連接時鐘:1mhz。2、程序參考流程圖開始設(shè)置計數(shù)器0為工作方式0送計數(shù)器初值讀計數(shù)器值顯示計數(shù)值結(jié)束結(jié)束開始設(shè)計數(shù)器1為工作方式3向計數(shù)器1送初值1000先送低字節(jié)后送高字節(jié)向計數(shù)器0送初值1000先送低字節(jié)后送高字節(jié)計數(shù)器0位工作方式3有鍵按下嗎?調(diào)用延時子程序yn(1)(2)四

8、、匯編語言程序(1):code segmentassume cs:codestart: mov dx,0c403h;計數(shù)器0,方式0 mov al,010h out dx,al mov dx,0c400h mov al,06h ;送初值6 out dx,al mov cl,1read: inc cl;自加1 cmp cl,0 jz start mov dx,0c400h ;讀計數(shù)器0口 in al,dx mov dl,al mov cl,al cmp al,9 jg big add dl,30h ; 0到9,數(shù)字ascii偏移30h mov ah,02h int 21h ;顯示ascii數(shù)字

9、mov dl,0dh int 21h jmp returnbig: add dl,37h; 大于9,轉(zhuǎn)換大寫字母ascii碼 mov ah,02h int 21h;顯示ascii字母 mov dl,0dh int 21h jmp returnreturn: mov dl, 0ffh mov ah, 06h int 21h jz read;有鍵按下回dos,沒有則繼續(xù)執(zhí)行 mov ah,4ch int 21hcode endsend start(2): code segmentassume cs:codestart: mov dx,0c403h ;計數(shù)器0方式3控制字寫入 mov al,0011

10、0110b out dx,al mov ax,1000 ;計數(shù)器0置入初值1000,先送低字節(jié)后送高字節(jié) mov dx,0c400h out dx,al mov al,ah out dx,al mov dx,0c403h;計數(shù)器1初始化方式3控制字寫入 mov al,01110110b out dx,al mov ax,1000 ;計數(shù)器1置入初值1000,先送低字節(jié)后送高字節(jié) mov dx,0c401h out dx,al mov al,ah out dx,al mov ah,4ch int 21h;返回操作系統(tǒng)code ends end start五、實驗現(xiàn)象實驗1,用手動逐個輸入單脈沖,

11、在屏幕上從計數(shù)器初值開始顯示,此時邏輯筆顯示為低電平,單脈沖每輸入一個,計數(shù)器值將會減1,進(jìn)行自減計數(shù)。同時在屏幕上顯示,當(dāng)計數(shù)器值減到0時,邏輯筆顯示為高電平,紅燈亮。因為方式0計數(shù)不會重新裝入計數(shù)值,所以如果要重新計數(shù),需要重新啟動程序。實驗2,紅燈綠燈交替變化,表示輸出是矩形脈沖。六、實驗感想這次實驗做得挺不順暢的,一開始我做第一個小實驗時,沒有實現(xiàn)最后判斷是否有健按下,并跳出程序的功能。后來問了同學(xué)以后,在return返回子程序里加了一個dos 6號功能調(diào)用,并加入一個控制轉(zhuǎn)移指令jz read,就實現(xiàn)了有鍵按下返回操作系統(tǒng),無鍵按下繼續(xù)執(zhí)行的功能??傊谶@次實驗中我收獲了很多。實驗三

12、 中斷實驗(純dos)一、 實驗?zāi)康?、掌握pc機中斷處理系統(tǒng)的基本原理2、學(xué)會編寫中斷服務(wù)程序二、 實驗原理與內(nèi)容1、實驗原理pc機用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理,中斷控制器用于接收外部的中斷請求信號,經(jīng)過優(yōu)先級判別等處理后向cpu發(fā)出可屏蔽中斷請求。ibm pc/xt機內(nèi)有一片8259中斷控制器對外可以提供8個中斷源,如表6-1所示。表6-1 中斷源中斷源中斷類型號中斷功能irq008h時鐘irq109h鍵盤irq20ah保留irq30bh串行口2irq40ch串行口1irq50dh硬盤irq60eh軟盤irq70fh并行打印機8個中斷源的中斷請求信號線irq

13、0irq7在主機的62線isa總線插座中可以引出,系統(tǒng)已設(shè)定中斷請求信號為邊沿觸發(fā)、普通結(jié)束方式,對于ibm pc/at及80286以上微機,系統(tǒng)又?jǐn)U展了一片8259中斷控制器,主片的irq2用于兩片8259之間級連,對外可以提供16個中斷源,如表6-2所示。表6-2 中斷源中斷源中斷類型號中斷功能irq8070h實時時鐘irq9071h用戶中斷irq10072h保留irq11073h保留irq12074h保留irq13075h協(xié)處理器irq14076h硬盤irq15077h保留pci總線中的中斷線只有四根:inta#,intb#,intc#,intd#。它們需要通過p&p的設(shè)置來和某

14、一根中斷相連接才能進(jìn)行中斷申請。如圖6-1所示,虛線為實驗中需要連的線。圖6-1 實驗電路圖2、實驗內(nèi)容實驗電路如圖6-1所示直接用手動產(chǎn)生單脈沖作為中斷請求信號,只需連接一根導(dǎo)線,要求每按一次開關(guān)產(chǎn)生一次中斷,在屏幕上顯示一次“tpc pci card interrupt”,中斷10次后程序退出。三、 編程分析1、由于9054的驅(qū)動程序影響直寫9054芯片的控制寄存器,中斷實驗需要在純dos的環(huán)境中才能正常運行。2、由于tpc卡使用pci總線,所以分配的中斷號在每臺微機可能都不同,編程時需要了解當(dāng)前的微機使用哪個中斷號并進(jìn)行設(shè)置。獲取方法是在純dos環(huán)境中,運行一個讀pci配置空間的程序“p

15、ortr.exe”,該程序能夠獲得本機tpc板卡或所有pci板卡的硬件資源,如io、內(nèi)存、中斷占用情況。然后根據(jù)獲得的中斷請求號碼來修改程序中的中斷向量、中斷掩碼的參數(shù),并重新編譯鏈接后即可。圖6-2 pci卡的結(jié)構(gòu)3、由于tpc卡使用9054芯片連接微機,如圖6-2所示,9054通過中斷控制/狀態(tài)寄存器(intcsr)激活/禁用中斷源,所以在編程時,使用微機中斷前需要使用9054的中斷功能,所以要先對中斷控制/狀態(tài)寄存器(intcsr)設(shè)置,代碼如下:mov dx,ioport_cent+68h;設(shè)置tpc卡中9054芯片io口,使能中斷in ax,dxor ax,0900hout dx,a

16、x其中ioport_cent是9054芯片寄存器組的i/o起始地址,每臺微機可能都不同,編程時需要了解當(dāng)前的微機使用哪段并進(jìn)行設(shè)置,獲取方法請參看匯編程序使用方法的介紹。中斷使能寄存器(intcsr)的偏移地址是+68h,設(shè)置含義如表6-3所示:表6-3 bits功能81:使能產(chǎn)生pci中斷0:禁止產(chǎn)生pci中斷111:使能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,dxa

17、nd ax,0f7ffhout dx,ax4、pc機中斷控制器8259的地址為20h、21h,編程時要根據(jù)中斷類型號設(shè)置中斷矢量,8259中斷屏蔽寄存器imr對應(yīng)位要清零(允許中斷),中斷服務(wù)結(jié)束返回前要使用中斷結(jié)束命令:mov al,20hout 20h,al中斷結(jié)束返回dos時應(yīng)將imr對應(yīng)位置1,以關(guān)閉中斷。四、 參考流程圖五、 匯編語言程序;接1根線,單脈沖-irq,輸入一個脈沖中斷一次,輸入10次結(jié)束.data segment int_vect equ 0bh ;中斷0-7的向量為:08h-0fh,中斷8-15的向量為:70h-77h.中斷類型號:73是在本微機設(shè)備管理器中查出的.

18、irq_mask_2_7 equ 011110111b ;中斷掩碼,中斷0-7時從低至高相應(yīng)位為零,中斷8-15時第2位為零 irq_mask_9_15 equ 011111111b ;中斷0-7時全一,中斷8-15時從低至高相應(yīng)位為零 ioport_cent equ 0c000h ;tpc 卡中9054芯片的io地址,地址0e000h是在本微機設(shè)備管理器中查出的. csreg dw ? ipreg dw ? ;舊中斷向量保存空間 irq_times dw 00h ;中斷計數(shù) msg1 db 0dh,0ah,'tpc pci card interrupt',0dh,0ah,&#

19、39;$' msg2 db 0dh,0ah,'press any key to exit!',0dh,0ah,'$' msg3 db 0dh,0ah,'press dmc to interrupt 10 times and exit!',0dh,0ah,'$'data endsstacks segment stackdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;enable local interrup

20、t input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axmov dx,ioport_cent+68h ;設(shè)置 tpc 卡中9054芯片io口,使能中斷in ax,dxor ax,0900hout dx,axmov al,int_vect ;保存原中斷向量mov ah,35hint 21hmov ax,esmov csreg,axmov ipreg,bxmov ax,cs ;設(shè)置新中斷向量mov ds,axmov dx,offset int_procmov al,int_vectmov ah,25hint 21hin al

21、, 21h ;設(shè)置中斷掩碼and al, irq_mask_2_7out 21h, alin al, 0a1hand al, irq_mask_9_15out 0a1h, almov ax,datamov ds,axmov dx,offset msg2mov ah,09hint 21hmov dx,offset msg3mov ah,09hint 21hmov irq_times,0ahstiloop1:cmp irq_times,0 ;等待中斷并判斷中斷10次后退出jz exithlt;jz loop1 ;按任意鍵退出 jmp loop1exit: climov bl, irq_mask_2

22、_7 ;恢復(fù)中斷掩碼not blin al, 21hor al, blout 21h, almov bl, irq_mask_9_15not blin al, 0a1hor al, blout 0a1h, almov dx,ipreg ;恢復(fù)原中斷向量mov 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,4c00hint 21hint_proc proc farclipush

23、axpush dxpush dsdec irq_timesmov ax,data mov ds,axmov dx,offset msg1mov ah,09hint 21hmov al,20h ;寫入eoiout 0a0h,alout 20h,alpop dspop dxpop axstiiretint_proc endpcode endsend start六、 實驗感想在課堂上,戴老師已經(jīng)給我們演示過關(guān)于在dos環(huán)境中調(diào)試程序,所以對于這次實驗,入手并不是很困難,但是在純dos環(huán)境下操作還是第一次,主要把指令和流程記住就不會有太大的問題。實驗四 模/數(shù)轉(zhuǎn)換器一、 實驗?zāi)康牧私饽?數(shù)轉(zhuǎn)換的基本原

24、理,掌握adc0809的使用方法。二、 實驗原理及內(nèi)容1、實驗電路原理圖如下。通過實驗臺左下角電位器 rw1輸出05直流電壓送入adc0809通道0(in0),利用debug的輸出命令啟動/轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果,驗證輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系。實驗電路圖如下:2、編程采集in0輸入的電壓,在屏幕上顯 示出轉(zhuǎn)換后的數(shù)據(jù)(用16進(jìn)制數(shù))。三、 實驗提示1、0809 地址: (原地址(isa) 動態(tài)分配地址)in0口: 298h 0c418h in1口: 299h 0c419h 2、利用debug的輸出命令啟動/轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果。debug-o c418 0 ;啟動in0開始轉(zhuǎn)換

25、 -i c418 ;讀轉(zhuǎn)換結(jié)果 - d8 ;轉(zhuǎn)換后的數(shù)字量 3、in0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為: n = ui/(uref/256) 其中ui為輸入電壓,uref為參考電壓,這里參考電壓為pc機的+5v電壓。四、參考流程圖開始結(jié)束啟動a/d轉(zhuǎn)換延時讀入轉(zhuǎn)換后的數(shù)據(jù)所讀數(shù)據(jù)賦給bl將al數(shù)據(jù)右移4位,顯示其高四位將al數(shù)據(jù)賦給dldl加7dl加30h顯示asc碼為dl的字符將al數(shù)據(jù)賦給dl從bl中取出數(shù)據(jù)至al和0fh相與,顯示其低四位dl加30hdl加7顯示asc碼為dl的字符dl大于9嗎?dl大于9嗎?有鍵按下嗎?nnn五、匯編語言程序code segmentassume cs:

26、codestart:mov dx,0c418h ;adc0809地址為0c418h mov al,0 ;向其地址寫入0,啟動adc0809進(jìn)行模數(shù)轉(zhuǎn)換 out dx,al mov cx,0ffffh ;延時,計數(shù)值為ffff*ffff,使adc0809完成轉(zhuǎn)換 t1:mov ax,0ffffh t2:dec ax jnz t2 loop t1 in al,dx ;將轉(zhuǎn)換結(jié)果讀進(jìn)來 mov bl,al ;將數(shù)據(jù)的高位存入al,低位存入bl and al,11110000b and bl,00001111b mov cl,4 shr al,cl cmp al,0ah ;比較al的值與0ah的大小

27、jae l0 ;若大于等于0ah轉(zhuǎn)l0 add al,30h ;若小于0ah加30h轉(zhuǎn)換成它的ascii碼 jmp l1 l0:add al,37h ;大于0ah時加37h轉(zhuǎn)換成它的ascii碼 l1:cmp bl,0ah ;比較bl的值與0ah的大小 jae l2 ;若大于等于0ah轉(zhuǎn)l2 add bl,30h ;若小于0ah加30h轉(zhuǎn)換成它的ascii碼 jmp l3 l2:add bl,37h l3:mov dl,al ;2號功能調(diào)用,顯示高位 mov ah,02h int 21h mov dl,bl ;顯示低位 mov ah,02h int 21h mov dl,13 ;回車 mov

28、ah,02h int 21h mov dl,10 ;換行 mov ah,02h int 21h mov dl,0ffh ;按任意鍵退出 mov ah,06h int 21h jz start mov ah,4ch int 21hcode ends end start五、實驗現(xiàn)象(1) 用debug完成ad轉(zhuǎn)換。(2) 調(diào)節(jié)實驗臺左下角電位器rw1,即可改變輸入的模擬電壓的值,經(jīng)0809轉(zhuǎn)換成數(shù)字量后顯示在屏幕上。輸入不同電壓值,輸出值也隨其改變。六、實驗感想這次實驗程序中我用的是延遲法進(jìn)行ad轉(zhuǎn)換,所以轉(zhuǎn)換部分程序很簡單,主要困難是將2位數(shù)轉(zhuǎn)換成它們的ascii碼形式并輸出。認(rèn)真的編程后又仔細(xì)

29、檢查,這部分也完成得很好。上機調(diào)試時,發(fā)現(xiàn)每次顯示的電壓值都不停往后輸出,此時認(rèn)為輸出一次后加一個換行會比較好,加上后就出來上面的效果圖了。調(diào)試過程中換了好幾個實驗箱,有好幾次都是第一次調(diào)出來結(jié)果以后,再想給老師演示時就出問題。不過,幸虧我的程序沒有什么問題,完成得還算順利。實驗五 pc機串行通信實驗(8250)一、 實驗?zāi)康?、 掌握串行接口芯片8250的基本原理和編程方法2、 熟悉pc機串行的基本連接方法3、 進(jìn)一步了解串行通信的基本原理二、 實驗內(nèi)容1、 pc機rs-232串口自發(fā)自收。 按照pc機rs-232串口自發(fā)自收的連線方法連線。編寫pc機自發(fā)自收串行通信程序。要求:鍵盤輸入一個

30、字符,將字符通過串口發(fā)送出去,再由此串口將字符接收回來并在屏幕上顯示,實現(xiàn)自發(fā)自收。 2、兩臺pc機間rs-232串口通信。按照pc機rs-232串口直接互連的方法連接兩臺pc機。 編寫pc機直接互連串行通信程序。要求:由甲機鍵盤鍵入字符經(jīng)串口發(fā)送給乙機,再由乙機通過串口接收字符并顯示在屏幕上。當(dāng)鍵入感嘆號“!”,結(jié)束收發(fā)過程。三、硬件連接實驗室提供了2根db-9連接器的串口連接線:1、孔(rs232)-針,9針全部直連方式。作為延長線使用2、孔-孔,引腳 2(rxd)、3(txd)交叉方式,其余信號直連作為交叉連接用。四、編程分析1、接收和發(fā)送數(shù)據(jù)可以采用查詢方式。2、8250輸入的基準(zhǔn)時鐘

31、頻率為:1.8432mhz。3、pc機系統(tǒng)的異步通信接口電路參照書本微機原理與接口技術(shù)p223圖7-45。五、匯編語言程序1、自發(fā)自收(非自檢方式,把2、3端口短路)code segment assume cs:code start: mov al,10000000b ;8250初始化,設(shè)dlab=1 mov dx,3fbh out dx,al mov ax,30h mov dx,3f8h out dx,al ;寫入除數(shù)低字節(jié) mov al,ah mov dx,3f9h out dx,al ;寫入除數(shù)高字節(jié) mov al,00001011b ;8位數(shù)據(jù),1位停止,奇校驗 mov dx,3fbh

32、 out dx,al ;寫入線路控制寄存器 mov al,00000000b ;非自檢 mov dx,3fch out dx,al ;寫入modem控制寄存器 mov al,0 mov dx,3f9h out dx,al ;禁止中斷wait_for: mov dx,3fdh ;讀線路狀態(tài)寄存器 in al,dx test al,00011110b ;出錯否 jnz error test al,00000001b ;接收數(shù)據(jù)就緒否 jnz receive ;轉(zhuǎn)接收 test al,00100000b ;發(fā)送器空否 jz wait_for ;返回等待 mov ah,1 int 21h ;讀鍵盤 m

33、ov dx,3f8h ;發(fā)送 out dx,al call delay jmp wait_for ;返回等待receive: mov dx,3f8h ;讀接收數(shù)據(jù) in al,dx and al,01111111b cmp al,03h ;是ctrl-c? jnz char mov ax,4c00h ;返回dos int 21h char: mov dl,al mov ah,2 ;顯示接受字符 int 21h jmp wait_for ;返回等待 error:mov dl,'?' ;顯示'?' mov ah,02h int 21h jmp wait_fordel

34、ay proc push cx push dx mov cx,0 mov dx,1000 l1: loop l1 dec dx jnz l1 pop dx pop cx retdelay endp code ends end start2、甲機發(fā)送,乙機接收1)發(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,3f9hout dx,al;寫入除數(shù)高字節(jié)mov al,0ah

35、;7位數(shù)據(jù),1位停止,奇校驗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;讀鍵盤,若是'!',返回dos,若不是

36、,則發(fā)送out dx,aljmp wait_for;返回等待exit:mov ax,4c00h int 21hcode endsend start2)接受程序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位停止,奇校驗mov dx,3fbhout dx,al;寫入線路控制寄存器mov al,03h;

37、數(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;返回dosint 21hchar:

38、push axmov dl,almov ah,2;顯示接收字符int 21hpop axjmp wait_for;返回等待code endsend start六、實驗感想這次實驗讓我們深入了解了串行口發(fā)送和接收的原理,是對課堂知識的考查和補充。但是實驗中只實現(xiàn)了8250的單工通信功能,我自己又想實現(xiàn)一個半雙工通信的功能,這作為我最后一個自主設(shè)計實驗來完成。實驗六 競賽搶答器(8255)一、實驗?zāi)康?、了解微機化競賽搶答器的基本原理。、進(jìn)一步學(xué)習(xí)使用并行接口。二、實驗內(nèi)容圖5-4為競賽搶答器(模擬)的原理圖,邏輯開關(guān)k0k7代表競賽搶答按鈕07號,當(dāng)某個邏輯電平開關(guān)置“”時,相當(dāng)某組搶答按鈕按下。

39、在七段數(shù)碼管上將其組號(07)顯示出來,并使喇叭響一下。從鍵盤上按空格鍵開始下一輪搶答,按其它鍵程序退出。三、 編程分析1、設(shè)置8255為c口輸入、a口輸出,讀取c口數(shù)據(jù),若為0表示無人搶答,若不為0則有人搶答。根據(jù)讀取數(shù)據(jù)可判斷其組號。從鍵盤上按空格鍵開始下一輪搶答,按其它鍵程序退出。2、計算組號的算法: 組號=c口數(shù)據(jù)連續(xù)除以2得到商為零的除法運算次數(shù) mov ah,0 mov dl,2 mov cl,0 jisuan: div dl inc cl cmp al,0 jnz jisuan dec cl mov al,cl 3、響鈴的dos功能調(diào)用: mov dl, 7 ; 響鈴ascii碼

40、為07 mov ah ,2 int 21h四、參考流程圖五、匯編語言程序data segment list db 3fh,06h,5bh,4fh,66h,6dh,7dh,07hdata endsstack1 segment para stack db 20 dup(0)stack1 endscode segmentstart:assume cs:code,ds:data,ss:stack1 mov ax,data mov ds,ax mov bx,offset list mov dx,0c40bh mov al,10001001b out dx,al ;8255初始化input: mov dx

41、,0c408h mov al,0ffh out dx,al mov dx,0c40ah in al,dx ;c口輸入 cmp al,0 jz input mov ah,0 mov dl,2 mov cl,0 jisuan: div dl inc cl cmp al,0 jnz jisuan dec cl mov al,cl ;計算出組號 xlat mov dx,0c408h out dx,al ;查表并從a口輸出 mov dl,7 mov ah,2 int 21h ;響鈴 mov ah,01h int 21h cmp al,' ' ;接收一字符 jz inputexit: mo

42、v ah,4ch int 21hcode ends end start 六、實驗現(xiàn)象初始狀態(tài)為數(shù)碼管全亮。撥下任一開關(guān)后,鈴響,同時數(shù)碼管顯示該組的組號。按空格鍵,恢復(fù)到初始狀態(tài)。七、實驗感想在本次實驗中組號的計算是一個難點,在這個算法的設(shè)計上花費了較多的時間。我用除2 循環(huán)實現(xiàn)要求之后,經(jīng)過與別人交流,發(fā)現(xiàn)用移位算法更為直觀,方便理解。但是除以2與右移一位本來是等價的,所以這兩種算法本質(zhì)還是相同的。調(diào)試過程中還是屢出故障,不過經(jīng)仔細(xì)檢查發(fā)現(xiàn),均是實驗箱接觸不良導(dǎo)致的。實驗七 pc機半雙工通信(8250)自主設(shè)計實驗一、實驗?zāi)康慕Y(jié)合教材上的知識,掌握8250半雙工通信的設(shè)計方法,加深對8250串行通信實驗的理解。二、實驗內(nèi)容兩臺pc機間rs-232串口通信。按照pc機rs-232串口直接互連的方法連接兩臺pc機。 編寫pc機直接互連串行通信程序。要求:當(dāng)甲機作為發(fā)送機時,乙機作為接收機;當(dāng)甲機作為接收機時,乙機作為發(fā)送機。能實現(xiàn)半雙工的字符發(fā)送與接收。三、編程分析1、接收和發(fā)送數(shù)據(jù)可以采用查詢方式。2、8250輸入的基準(zhǔn)時鐘頻率為:1.8432mhz。結(jié)合第五次實驗內(nèi)容,將其發(fā)送接收程序稍加改動。在8250初始化后,加入一個判斷子程序,相當(dāng)于半雙工通信中的開關(guān)作用。具體實現(xiàn)形式是

溫馨提示

  • 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

提交評論