微型計算機原理與接口技術(shù)實驗課講義全_第1頁
微型計算機原理與接口技術(shù)實驗課講義全_第2頁
微型計算機原理與接口技術(shù)實驗課講義全_第3頁
微型計算機原理與接口技術(shù)實驗課講義全_第4頁
微型計算機原理與接口技術(shù)實驗課講義全_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . . 35/46 . . 實驗一 匯編語言編輯環(huán)境與調(diào)試命令的認識實驗?zāi)康氖煜DIT編寫匯編程序的環(huán)境;學(xué)習(xí)debug調(diào)試命令。實驗儀器 TDN86/51教學(xué)實驗系統(tǒng),計算機實驗容與步驟(1)、用記事本或EDIT進行匯編程序編輯可編輯匯編程序的環(huán)境很多,記事本和EDIT是其中常用的兩種方法。進入記事本很簡單,這里不再介紹。進入EDIT的方法:開始運行command進入DOS界面edit回車進入EDIT編輯環(huán)境編輯匯編程序程序完成后以“文件名.asm”(文件名不能是中文,一定要是字母,而字母不能超過8個,asm是擴展名)存盤。.asm文件是不能運行的,需要把它變成可執(zhí)行文件(.exe)。它

2、的變化過程是:Masm link .asm.obj.exe練習(xí)1:在EDIT中編寫一個程序,實現(xiàn)數(shù)據(jù)段中的兩個32位數(shù)X、Y相加,結(jié)果存到數(shù)據(jù)段Z中。并以dadd.asm文件名保存。 (2)、目標文件(.obj)、可執(zhí)行文件(.exe)的產(chǎn)生運行masm程序,產(chǎn)生 .obj文件,并且檢查程序是否有語法錯誤。如果有語法錯誤,會有提示,在哪一行有什么樣的錯誤(是英文提示)。根據(jù)提示,再進入EDIT中,打開源文件進行修改,直到?jīng)]有語法錯誤為止。運行l(wèi)ink程序,產(chǎn)生 .exe可執(zhí)行文件。通過運行可執(zhí)行文件,觀察該程序是否能實現(xiàn)相應(yīng)的功能。如若不能,進入debug進行調(diào)試。(3)、debug調(diào)試工具d

3、ebug是為匯編語言設(shè)計的一種調(diào)試工具,它通過單步、設(shè)置斷點等方式為匯編語言程序員提供了非常有效的調(diào)試手段。debug程序的調(diào)用在DOS的提示符下,可鍵入命令:Cdebug 路徑文件名.exe(回車)其中,文件名是被調(diào)試文件的名字(注意:該文件一定要是.exe文件)。如用戶鍵入文件名,則debug將指定的文件裝入存儲器中,用戶可對其進行調(diào)試。如果未鍵入文件名,則用戶可以用debug命令N和L把需要的文件裝入存儲器后在進行調(diào)試。在debug程序調(diào)入后,將出現(xiàn)提示符-,此時就可用debug命令來調(diào)試程序。debug的主要命令顯示存儲單元的命令 D,格式為:-D 地址 從指定地址起顯示80個字節(jié)的容

4、;-D 圍 顯示所指定圍的容,指定圍為起始地址和終止地址;-D顯示從上一個D命令的最后一個單元后面的80個字節(jié)的容,或者在D未使用過的情況下,顯示DS:0100為起始的容。例如,按指定圍顯示存儲單元容的方法為:-d 100 120 其中100 120 給出顯示存儲單元的圍。這里沒有指定段地址,D命令自動顯示DS段的容。修改存儲單元容的命令輸入命令E,有兩種格式如下:-E 地址 容表 用指定的容表去修改指定地址開始的存儲器中容例如-E DS:120 F3A5XYZ96表示用F3、A5、X、Y、Z、96共6個字節(jié)代替了DS:120至DS:125中的容-E 地址 逐個單元修改容例如 -E CS:10

5、0 屏幕顯示為: 18E4:0100 89.- 用戶可以鍵入78,修改次容,再鍵入空格鍵顯示下一個容,不修改時可用空格鍵跳過,逐個修改存儲器容,直到回車鍵結(jié)束。填入命令格式F-F 圍(容表) 將容表中容填入所指定的圍。例如-F 18E4:0200 L10 00將0200H單元開始的16個字節(jié)全部填入0。若容表中字節(jié)數(shù)超過指定圍,則忽略超過項,若容表中字節(jié)數(shù)小于指定圍,則反復(fù)填入,直到填滿所有單元為止。檢查和修改寄存器命令R格式有三種:-R 顯示CPU所有寄存器容和標志位狀態(tài)-R 寄存器名 顯示和修改某一個寄存器容例如-R AX 屏幕顯示:AX 1200 : ;AX當前容為1200,若不修改則按

6、回車鍵,否則鍵入要修改的容。如:-R BXBX 0369:059F則把BX寄存器的容修改為059F。RF 顯示和修改標志位容例如 -RF 屏幕顯示:OV DN EI NG ZR AC PE CY 此時,如不修改其容可按Enter鍵,否則,可鍵入欲修改的容,如:OV DN EI NG ZR AC PE CY PONZDINV即可,可見鍵入的順序可以是任意的。運行命令G格式為:-G =地址1 地址2 地址3其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。后面的地址為斷點地址,當指令執(zhí)行到斷點時,就停止執(zhí)行并顯示當前所有寄存器與標志位的容,和下一條將要執(zhí)行的指令。跟蹤命令T格

7、式有兩種:-T=地址 單條指令跟蹤,執(zhí)行指定地址的一條指令,并顯示CPU所有寄存器容,標志位的狀態(tài),與下條指令的地址和容。若命令中沒有指定地址,則從當前CS:IP開始執(zhí)行。-T=地址 N,N為多條指令跟蹤,從指定地址開始執(zhí)行指令,共執(zhí)行指定的N條后停止,每執(zhí)行一條就顯示CPU中所有寄存器容,標志位的狀態(tài)與下條指令的地址和容。匯編命令A(yù)格式為:-A 地址該命令允許鍵入?yún)R編語言語句,并能把它們匯編成機器代碼,相繼地存放在從指定地址開始的存儲區(qū)中,必須注意:debug把鍵入的數(shù)字均看成十六進制數(shù),所以如要鍵入十進制數(shù),則其后應(yīng)加以說明。反匯編命令 U有兩種格式:-U地址 從指定地址開始,反匯編32個

8、字節(jié),若沒有指定地址,則接著上一個U命令繼續(xù)向下反匯編,若沒有用過U命令,則從CS:0100開始反匯編。-U 圍 對指定圍的存儲單元反匯編,可指定起始地址,結(jié)束地址,也可指定起始地址與長度。例如:U 1CE2:0110 011A 或 U 1CE2:0110 L0B 效果是一樣的。命名命令N命名命令N常與裝入命令L一起使用如:N 路徑文件名.exeL可把文件名.exe裝入存儲器。退出debug命令Q格式為:Q它退出debug,返回DOS。 例:在debug中,匯編一段程序,實現(xiàn)兩個32位數(shù)的加法,12345678H+3456789AH=? 用E命令在 DS:0120存儲單元開始存放78H、56H

9、、34H、12H、9AH、78H、56H、34H, 用匯編命令A(yù)編寫一段程序如下:Mov ax,0120hMov dx,0122hAdd ax,0124hAdc dx,0126hMov 0128h,axMov 012ah,dx 然后用G命令運行該程序段 G=起始地址 終止地址 最后用D命令查看結(jié)果 D DS:0120 012C 練習(xí)2:在debug中,匯編一段程序,實現(xiàn)兩個32位數(shù)的減法,3456789Ah-12345678h=?實驗二 匯編語言程序的編輯與調(diào)試實驗一、實驗?zāi)康?、學(xué)會用EDIT編寫匯編語言程序;2、學(xué)會使用MASM產(chǎn)生目標文件和可執(zhí)行文件;3、掌握在DEBUG下匯編程序的調(diào)試

10、。二、實驗儀器TDN86/51教學(xué)實驗系統(tǒng),計算機三、實驗容與步驟1、容在BCD1單元中,壓縮存放著兩個BCD碼。現(xiàn)編寫一程序,將壓縮的BCD碼轉(zhuǎn)變成兩個非壓縮的BCD碼,分別存放到result和result+1單元中。 2、步驟在EDIT環(huán)境下編寫能實現(xiàn)上述功能的匯編源程序,并以文件名為BCD1.ASM保存。執(zhí)行MASM.EXE文件,檢查程序中是否有語法錯誤;若有錯,則返回到EDIT中,打開源程序進行修改,直到無語法錯誤為止,同時產(chǎn)生相應(yīng)的目標文件。執(zhí)行LINK.EXE文件,產(chǎn)生相應(yīng)的可執(zhí)行文件;打開DEBUG調(diào)試環(huán)境,裝入相應(yīng)的可執(zhí)行文件,并用反匯編命令檢查可執(zhí)行文件是否已裝入;單步運行每

11、條指令,觀察運行結(jié)果;整個程序運行完成后,到指定的存儲單元中觀察運行結(jié)果是否符合要求。思考題執(zhí)行MASM.EXE文件的主要作用是什么?在實驗中,你用了哪些DEBUG命令,目的是什么?實驗三 綜合程序的設(shè)計、編制與調(diào)試一、實驗?zāi)康?1、掌握分支、循環(huán)、子程序調(diào)用等基本的程序結(jié)構(gòu);2、學(xué)習(xí)綜合程序的設(shè)計、編制與調(diào)試。二、實驗儀器TDN86/51教學(xué)實驗系統(tǒng),計算機三、實驗容與步驟1、容 在數(shù)據(jù)段的buffer字單元中存放著一個16位二進制數(shù),編寫一個程序把buffer中的容用十六進制顯示出來。 2、步驟程序流程圖按流程圖編寫程序上機調(diào)試,實現(xiàn)題目要求的功能四、思考題編程顯示F000:0000存儲單

12、元的容,顯示形式為:“F000:0000 90 ”。畫出流程圖,寫出源代碼,上機調(diào)試通過,實現(xiàn)相應(yīng)功能。附件1:實驗源程序data segment string1 db 0dh,0ah,please input 16-bit binary number,0dh,0ah,$ string2 db 0dh,0ah,your input has mistake. string3 db 0dh,0ah, do you want to input again(Y/N)?,0dh,0ah,$ string4 db binary to hexadecimal:,0dh,0ah,$data endsstack

13、 segment stack dw 256 dup(?) top label wordstack endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,offset top next: mov dx,offset string1 mov ah,09h int 21h mov cx,16 xor bx,bx rota: shl bx,1 mov ah,01h int 21h and al,0fh jz rota1 cmp al,1 jnz

14、 again or bx,01h rota1:loop rota mov dl,B mov ah,02h int 21h mov dl,0dh int 21h mov dl,0ah int 21h jmp l4 again:mov dx,offset string2 mov ah,09h int 21h l5: mov ah,08h int 21h and al,0dfh cmp al,Y jz next jmp exit l4: call htodis mov dx,offset string3 mov ah,09h int 21h jmp l5 exit: mov ah,4ch int 2

15、1h htodis proc mov dx,offset string4 mov ah,09h int 21h mov ch,4 l2: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,39h e l1 add al,07h l1: call display dec ch jnz l2 mov dl,H mov ah,2 int 21h ret htodis endp display proc mov dl,al mov ah,2 int 21h ret display endp code ends end start附件2:

16、思考題源程序data segment string db 0dh,0ah,please input address,0dh,0ah,$ string1 db 0dh,0ah,0dh,0ah,do you want to input again(y/n)? ,0dh,0ah,$data endsstack segment stack dw 256 dup(?) top label wordstack endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax

17、 mov sp,offset top next: mov dx,offset string mov ah,9 int 21h call reci mov es,bx mov dl,: mov ah,2 int 21h call reci mov si,bx mov dl, mov ah,2 int 21h mov di,8 l5:mov bl,es:si call htodisb inc si dec di jnz l5 mov dl,- mov ah,2 int 21h mov dl, int 21h mov di,8 l6: mov bl,es:si call htodisb inc si

18、 dec di jnz l6 mov dx,offset string1 mov ah,9 int 21h mov ah,8 int 21h and al,0dfh cmp al,Y jnz exit jmp next exit: mov ah,4ch int 21h htodisb proc mov ch,2 mov cl,4 l3: rol bl,cl mov al,bl and al,0fh add al,30h cmp al,39h e l4add al,07h l4:mov dl,almov ah,2 int 21h dec ch jnz l3 mov dl, mov ah,2 in

19、t 21h ret htodisb endp reci proc xor bx,bx mov ch,4 mov cl,4 l8: shl bx,cl mov ah,1 int 21h sub al,30h cmp al,9h e l7 and al,0dfh sub al,7 l7: or bl,al dec ch jnz l8 ret reci endpcode ends end start實驗四 DOS系統(tǒng)功能調(diào)用實驗一、實驗?zāi)康?、學(xué)習(xí)DOS系統(tǒng)功能調(diào)用的使用方法;2、重點掌握鍵盤輸入和輸出顯示的DOS系統(tǒng)功能調(diào)用的方法。二、實驗儀器TDN86/51教學(xué)實驗系統(tǒng),計算機三、實驗容和步驟

20、無論是用戶程序還是DOS系統(tǒng)本身,都離不開輸入/輸出操作,為了方便用戶,PC DOS系統(tǒng)將輸入/輸出管理程序編成一系列子程序,不僅系統(tǒng)可以使用,用戶也可以像調(diào)子程序一樣方便地使用它們。調(diào)用系統(tǒng)提供的子程序,通常稱為系統(tǒng)功能調(diào)用。DOS系統(tǒng)功能調(diào)用的方式是通過執(zhí)行一條軟中斷指令 INT 21H 實現(xiàn)的。當寄存器AH中設(shè)置不同的值時,該指令將完成不同的功能,我們稱AH中設(shè)置的容為功能號。通過下面的編程練習(xí),學(xué)會DOS系統(tǒng)功能1、2、7、8、9、A的調(diào)用方法。1、容 從鍵盤上輸入一組字符串,將其送入輸入緩沖區(qū),把字符串中小寫的字符轉(zhuǎn)換成大寫后,再顯示這組字符串。流程圖如下:2、步驟按流程圖編寫程序上

21、機調(diào)試,實現(xiàn)題目要求的功能思考題:把上題中輸入字符串中的最小字符和最大字符分別顯示出來。附件:data segment string1 db 0dh,0ah,please input string,0ah,0dh,$ string2 db 0dh,0ah,do you want to input string again(Y/N)?,0ah,0dh,$ buffer db 40h,? buffer1 db 40h dup(?)data endscode segment assume cs:code,ds:data start:mov ax,data mov ds,ax again: mov d

22、x,offset string1 mov ah,9 int 21h mov dx,offset buffer mov ah,0ah int 21h mov al,buffer+1 cbw mov bx,offset buffer1 add bx,ax mov cx,ax mov byte ptr bx,$ mov dx,offset buffer1 mov ah,9 int 21h mov bx,offset buffer1 l1: mov al,bx cmp al,a l2 cmp al,z ja l2 sub al,20h mov byte ptr bx,al l2: inc bx loo

23、p l1 mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h mov dx,offset buffer1 mov ah,9 int 21h mov dx,offset string2 mov ah,9 int 21h mov ah,1 int 21h and al,0dfh cmp al,Y jz again mov ah,4ch int 21hcode endsend start實驗五 綜合編程練習(xí)一、實驗?zāi)康木C合運用分支、循環(huán)、子程序和DOS系統(tǒng)功能調(diào)用編寫程序;二、實驗儀器TDN86/51教學(xué)實驗系統(tǒng),計算機三、實驗容和步驟 1

24、、容從鍵盤輸入一個夾帶有若干個空格的字符串,顯示第一個空格的位置(the first blank position is:)和字符串長度(the length of the string is : ),開始的空格不計算在字符串長度。若輸入的字符串中沒有空格,顯示“there isnt any blank in the string”提示,同時顯示該字符串的長度。完成后提示是否還要繼續(xù)( do you want to input string again(Y/N)?),按Y繼續(xù),其他退出。編寫一程序?qū)崿F(xiàn)上述功能。 2、步驟自己畫出流程圖,寫出符合要求的程序,上機調(diào)試通過。四、思考題如若要顯示字符

25、串中空格的個數(shù),上述程序如何修改。假定有一最大長度為80個字符的字符串已定義為字節(jié)變量STRING,試編寫一程序段,找出第一個空格的位置(00H至4FH表示),并顯示出來。統(tǒng)計該串不包括前導(dǎo)空的實際長度(不包括回車符),統(tǒng)計結(jié)果顯示出來。data segment string1 db 0dh,0ah,please input string,0dh,0ah,$ string2 db 80 db ? string3 db 80 dup(?) string4 db 0dh,0ah,the string has not blank,0dh,0ah,$ string5 db 0dh,0ah,do you

26、 want to input string again(Y/N)?,0dh,0ah,$ string6 db 0dh,0ah,the first blank position is:$ string7 db 0dh,0ah,the length of the string is:$data endsstack segment stack dw 256 dup (?) top label wordstack endscode segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov

27、ss,ax mov sp,offset top again: mov dx,offset string1 mov ah,9 int 21h mov dx,offset string2 mov ah,0ah int 21h mov al,string2+1 cbw mov cx,ax mov al, xor bx,bx next: cmp al,string3bx jz l1 inc bx loop next mov dx,offset string4 mov ah,9 int 21h jmp l4;* l1: mov dx,offset string6 mov ah,9 int 21h cal

28、l display;* l4: mov dx,offset string7 mov ah,9 int 21h call length1 mov dx,offset string5 mov ah,9 int 21h mov ah,1 int 21h and al,0dfh cmp al,Y jz again exit:mov ah,4ch int 21h;* display proc push cx mov ch,2 l3: mov cl,4 rol bl,cl mov dl,bl and dl,0fh cmp dl,9 ja l2add dl,30h jmp dis1 l2:add dl,37

29、h dis1 :mov ah,2 int 21h dec ch jnz l3 mov dl,H mov ah,2 int 21h pop cx ret display endp length1 proc push bx push si push ax mov bl,string2+1 mov si,offset string3 mov al, l7:cmp al,si jnz l6 dec bl inc si cmp byte ptr si,$ jz l6 jmp l7 l6: call display pop ax pop si pop bx ret length1 endpcode end

30、s end start實驗六 中斷特性與8259應(yīng)用編程實驗實驗?zāi)康恼J識TDN86/51系統(tǒng)的中斷特性。掌握8259中斷控制器的工作原理。掌握8259可編程中斷控制器的應(yīng)用編程。學(xué)習(xí)掌握8259級聯(lián)方式的使用方法。學(xué)習(xí)在接口實驗單元上構(gòu)造連接實驗電路的方法。實驗設(shè)備TDN86/51教學(xué)實驗系統(tǒng),計算機排線、導(dǎo)線若干實驗容與步驟系統(tǒng)中的8259芯片 1、8259可編程中斷控制器介紹中斷控制器8259A是Intel公司專為控制優(yōu)先級中斷而設(shè)計開發(fā)的芯片。它將中斷源優(yōu)先級排隊、辨別中斷源以與提供中斷向量的電路集于一片中,因此無需附加任何電路,只需對8259A進行編程,就可以管理8級中斷,并選擇優(yōu)先模

31、式和中斷請求方式,即中斷結(jié)構(gòu)可以由用戶編程來設(shè)定。同時,在不需增加其他電路的情況下,通過多片8259A的級聯(lián),能構(gòu)成多達64級的矢量中斷系統(tǒng)。8259A的編程,就是根據(jù)應(yīng)用需要將初始化命令字ICW1ICW4和工作命令字OCW1OCW3分別寫入初始化命令寄存器組和工作命令寄存器組。寫初始化命令字ICW的流程如圖6-1所示,ICW1ICW4各命令字格式如表6-1所示,OCW1OCW3各命令字格式如圖6-2所示表6-1 8259A的初始化命令字ICWICW1ICW2ICW3(主)ICW3(從)ICW4各位含義D01:需要ICW40:不要ICW4設(shè)為01:IRQi線上有級聯(lián)從片0:無級聯(lián)從片與主片IR

32、Qi對應(yīng)的從片的識別碼,IRQ0為000,IRQ1為001,IRQ7為1111:8086/8088模式0:8080/8085模式D11:單片82590:多片82591:自動EOI0:正常EOID28086/8088中不用,設(shè)為01:主82590:從8259D3中斷請求信號觸發(fā)方式1:電平觸發(fā)0:邊沿觸發(fā)T7T3中斷類型號的高5位由用戶來設(shè)定不用1:緩沖方式0:非緩沖方式D4ICW1標志位:11:特殊嵌套方式 0:一般嵌套方式D58086/8088中不用,設(shè)為0不用D6D7系統(tǒng)設(shè)定值13H08H-0DH系統(tǒng)口地址20H21H21H21H 2、系統(tǒng)中的8259A芯片系統(tǒng)中的8259A芯片工作于單片

33、方式,但可由用戶擴展接成級聯(lián)方式。其線路如圖6-3所示。圖中的圈點表示此為排針形式引出腳。系統(tǒng)啟動時,8259A被初始化,其初始化是通過系統(tǒng)中的初始化程序設(shè)置初始化命令字ICW來實現(xiàn)的。系統(tǒng)初始化時,規(guī)定0#和4#中斷源分別提供給時鐘和與PC微機聯(lián)機的串口通訊,用戶可以使用其余的中斷源。在進入監(jiān)控后,只有4#中斷源處于開啟狀態(tài),其他中斷源都被屏蔽了。中斷向量地址于中斷號之間的關(guān)系如表6-2。 表6-2中斷請求信號引腳IR0IR1IR2IR3IR4IR5IR6IR7中斷類型號08H09H0AH0BH0CH0DH0EH0FH向量地址20H23H24H27H28H2BH2CH2FH30H33H34H

34、37H38H3BH3CH3FH說明可用可用可用串口2串口1可用可用可用3、接口實驗單元中的級聯(lián)實驗用8259A芯片除系統(tǒng)中的8259A芯片外,在接口實驗單元中專門提供了另一片8259A芯片,以便進行8259級聯(lián)實驗。其線路如圖6-4所示4、接口實驗單元中的R-S觸發(fā)器電路實驗容1、8259應(yīng)用實驗(1)按圖6-6所示實驗線路編寫程序,使每次響應(yīng)外部中斷IRQ7時,顯示字符“7”,中斷10次后,程序退出。實驗(1)參考程序:code segment assume cs:codestart: ;中斷服務(wù)程序的入口地址放入中斷向量表 cli push ds xor ax,ax mov ds,ax m

35、ov si,4*0fh mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,axpop ds ;8259A初始化 mov al,13h ;設(shè)置ICW1 out 20h,al mov al,08h ;設(shè)置ICW2 out 21h,al mov al,09h ;設(shè)置ICW4 out 21h,al mov al,6eh ;設(shè)置OCW1 out 21h,al mov cx,0ah sti a: jmp a ;等待中斷;中斷服務(wù)程序 irq7 proc near mov ax,0137h int 10

36、h mov ax,0120h int 10h dec cx jnz l1 mov al,0eeh out 21h,al ;寫OCW1,屏蔽IRQ7 l1: mov al,20h out 20h,al ;發(fā)中斷結(jié)束命令 iret irq7 endp code ends end start2、實驗(1)步驟(1)按圖6-6 連接實驗線路。(2)輸入程序并檢查無誤,經(jīng)匯編、連接后裝入系統(tǒng)。(3)G=0000:2000運行程序。(注意:程序中8259中斷向量地址為絕對地址,已定義為段地址CS=0000H,偏移量地址IP=2000H,故裝載時一定按此填入CS與IP地址,后面實驗不再重述。)(4)重復(fù)按K

37、K2微動開關(guān),顯示屏上應(yīng)顯示“7”,直到按10次后,系統(tǒng)處于停機狀態(tài),用CTRL+C返回監(jiān)控。3、8259應(yīng)用實驗(2)按圖6-8所示實驗線路,編寫程序,完成下面的要求:當無中斷請求時,執(zhí)行主程序(主程序為:延時顯示字符串“)main”),若有中斷請求,則執(zhí)行其中斷服務(wù)程序(按KK1引起IRQ6中斷,將延時顯示10個“)6”;按KK2引起IRQ7中斷,將延時顯示10個“)7”)。若正在執(zhí)行較低級的中斷服務(wù)程序,則允許比它優(yōu)先級高的中斷被響應(yīng)(IRQ6IRQ7)。自己畫出程序流程圖,寫出實驗程序,實現(xiàn)相應(yīng)功能。參考程序:stack segment stack dw 64 dup(?)stack

38、endsdata segment disps db main ,00hdata endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax ;分別把irq7和irq6中斷服務(wù)程序的入口地址放入中斷向量表中 cli push ds xor ax,ax mov ds,ax mov si,4*0fh mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax mov si,4*0eh mov ax,offs

39、et irq6 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax pop ds ;8259A初始化 mov al,13h ;設(shè)置ICW1 out 20h,al mov al,08h ;設(shè)置ICW2 out 21h,al mov al,09h ;設(shè)置ICW4 out 21h,al mov al,2eh ;設(shè)置OCW1 out 21h,al sti;執(zhí)行主程序不斷顯示main_ again: mov cx,0fh next: mov bx,offset disps mov ah,06h int 10h call delay

40、loop next mov ax,010ah int 10h mov ax,010dh int 10h jmp again;中斷服務(wù)程序 irq7: push ax push cx sti mov cx,0ah l1: mov ax,0137h int 10h mov ax,0120h int 10h call delay loop l1 cli pop cx pop ax mov al,20h out 20h,al sti iret irq6: push ax push cx sti mov cx,0ah l2: mov ax,0136h int 10h mov ax,0120h int 1

41、0h call delay loop l2 cli pop cx pop ax mov al,20h out 20h,al sti iret delay: push ax push bx mov al,0ffh a2: mov bl,0ffh a1: nop nop dec bl jnz a1 dec al jnz a2 pop bx pop ax ret code ends end start4、實驗(2)步驟(1)按圖6-8連接實驗電路(2)畫出程序流程圖(3)輸入程序并檢查無誤,經(jīng)匯編、連接后裝入系統(tǒng)。(4)G=0000:2000,運行實驗程序,則連續(xù)顯示“main”,先后按動KK1和K

42、K2微動開關(guān)來模擬中斷請求信號,記錄請求順序與顯示結(jié)果。5、8259級聯(lián)實驗(3)本實驗是以系統(tǒng)中的8259作為主片,外接另一片8259作為從片,構(gòu)成8259級聯(lián)方式的中斷實驗線路,如圖6-9所示,其中規(guī)定主片的IRQ7上連接一片從片,從片上的IRQ7和IRQ6接外中斷請求電路(R-S單脈沖觸發(fā)器),并規(guī)定從片的中斷類型號為30H37H,其命令寄存器組編址為00H和01H。實驗參考程序:stack segment stack dw 64 dup(?)stack endsdata segment disps db main ,00hdata endscode segment assume cs:

43、code,ds:data,ss:stackstart: mov ax,data mov ds,ax ;分別把irq7和irq6中斷服務(wù)程序的入口地址放入中斷向量表中 cli push ds xor ax,ax mov ds,ax mov si,4*37h mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax mov si,4*36h mov ax,offset irq6 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,

44、ax pop ds ;主片8259A初始化 mov al,11h ;設(shè)置ICW1 out 20h,al mov al,08h ;設(shè)置ICW2 out 21h,al mov al,80h ;設(shè)置主片ICW3 out 21h,al mov al,1dh ;設(shè)置ICW4 out 21h,al mov al,7dh ;設(shè)置OCW1 out 21h,al ;從片8259A初始化 mov al,11h ;設(shè)置從ICW1out 00h,al mov al,30h out 01h,al ;設(shè)置從ICW2 mov al,07h out 01h,al ;設(shè)置從ICW3 mov al,09h ;設(shè)置從ICW4 ou

45、t 01h,al mov al,3fh ;設(shè)置從OCW1 out 01h,al mov al,68h ;設(shè)置特殊屏蔽方式 out 00h,al sti;執(zhí)行主程序不斷顯示main_ again: mov cx,0fh next: mov bx,offset disps mov ah,06h int 10h call delay loop next mov ax,010ah int 10h mov ax,010dh int 10h jmp again;中斷服務(wù)程序 irq7: push ax push cx sti mov cx,0ah l1: mov ax,0137h int 10h mov

46、ax,0120h int 10h call delay loop l1 cli pop cx pop ax mov al,20h out 20h,al mov al,20h out 00h,al sti iret irq6: push ax push cx sti mov cx,0ah l2: mov ax,0136h int 10h mov ax,0120h int 10h call delay loop l2 cli pop cx pop ax mov al,20h out 20h,al mov al,20h out 00h,al sti iret delay: push ax push

47、bx mov al,0ffha2: mov bl,0ffh a1: nop nop dec bl jnz a1 dec al jnz a2 pop bx pop ax ret code ends end start 6、實驗(3)步驟(1)畫出程序的流程圖(2)按圖6-9搭接實驗線路,其中INTA連接必須在開機上電之后。(3)輸入程序并檢查無誤,經(jīng)匯編、連接后裝入系統(tǒng)。(4)G=0000:2000,運行實驗程序,則連續(xù)顯示“main”,先后按動KK1和KK2微動開關(guān)來模擬中斷請求信號,記錄請求順序與顯示結(jié)果(對KK1和KK2的響應(yīng)同實驗2)。關(guān)于TDN86/51教學(xué)實驗系統(tǒng)中顯示功能的使用說明

48、在TDN86/51教學(xué)實驗系統(tǒng)中顯示字符或字符串的功能是通過執(zhí)行 INT 10H 指令實現(xiàn)的。AX中的容不同,實現(xiàn)的功能就不一樣。INT 10H使用說明:1、入口:AH=00H,AL=01H 功能:清屏2、入口:AH=01H,AL=數(shù)據(jù)功能:送AL中的數(shù)據(jù)到顯示屏顯示(注意:AL中的數(shù)據(jù)應(yīng)是需要顯示字符的ASCII碼)3、入口:AH=06H,DS:BX=字符串首地址,且字符串尾用00H填充。 功能:顯示一字符串,直到遇到00H為止。思考題用中斷查詢方式解決上述問題,電路如何連接,如何編程實現(xiàn) ;用中斷查詢方式code segment assume cs:codestart: ;中斷服務(wù)程序的入

49、口地址放入中斷向量表 cli push ds xor ax,ax mov ds,ax mov si,4*0fh mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax ;8259A初始化 mov al,13h ;設(shè)置ICW1 out 20h,al mov al,08h ;設(shè)置ICW2 out 21h,al mov al,09h ;設(shè)置ICW4 out 21h,al mov al,7fh ;設(shè)置OCW1 out 21h,al pop ds call disisr mov ax,010dh i

50、nt 10h mov ax,010ah int 10h mov cx,0ah ;用中斷查詢方式不能開中斷 l1: mov al,0ch ; 發(fā)查詢命令 out 20h,al in al,20h ; 接受查詢字 test al,80h ; 檢測是否有中斷請求 jz l1 and al,07h call disisr a:jmp airq7: call disisr mov ax,0120h int 10h mov ax,0120h int 10h mov ax,0137h int 10h mov ax,0120h int 10h mov ax,0120h int 10h dec cx jnz l

51、2 mov al,0ffh out 21h,al l2: mov al,20h out 20h,al call disisr mov ax,010dh int 10h mov ax,010ah int 10h iret irq6: jmp l1irq5: jmp l1irq4: jmp l1irq3: jmp l1irq2: jmp l1irq1: jmp l1irq0: jmp l1disisr: mov ax,0149hint 10hmov ax,0153hint 10h mov ax,0152h int 10h mov ax,013ah int 10h mov al,0bhout 20h

52、,al in al,20h mov bh,al mov bl,8 l3: rol bh,1 jc nextmov ax,0130h int 10h jmp again next: mov ax,0131h int 10hagain: dec bl jnz l3retcode ends end start實驗七 8255并行接口應(yīng)用實驗一、實驗?zāi)康?、學(xué)習(xí)并掌握8255的各種工作方式與其應(yīng)用。2、學(xué)習(xí)在系統(tǒng)接口實驗單元上構(gòu)造實驗電路。二、實驗設(shè)備1、TDN86/51教學(xué)實驗系統(tǒng),計算機2、排線、導(dǎo)線若干三、實驗容與步驟(一)系統(tǒng)中的8255芯片1、系統(tǒng)中的8255芯片8255可編程外圍接口芯片是

53、Intel公司生產(chǎn)的通用并行I/O接口芯片,它具有A、B、C三個并行接口,用+5v單電源供電,能在方式0基本輸入/輸出方式、方式1選通輸入/輸出方式和方式2雙向選通方式下工作。8255的數(shù)據(jù)線片選信號線、地址線、讀寫控制線等分別與系統(tǒng)總線相連,其A、B、C三個端口以排針形式引出,供8255實驗使用,其線路如圖7-1所示,端口地址如表7-1所示表7-1 8255端口地址信號線寄 存 器編 址IOY3 A口60HB口61HC口62H控制寄存器63H2、接口實驗單元中的開關(guān)和發(fā)光二極管電路3、七段數(shù)碼顯示管結(jié)構(gòu)七段LED顯示器由七個發(fā)光段構(gòu)成,每段均是一個LED二極管。如圖7-3所示,這七個發(fā)光段分

54、別稱為a、b、c、d、e、f和g,通過控制不同段的點亮和熄滅,可顯示16進制數(shù)字09和A、B、C、D、E、F,也能顯示H、E、L、P等字符。有的產(chǎn)品還有一個小數(shù)點DP位段,用來顯示小數(shù)。LED顯示器有共陽極和共陰極兩種結(jié)構(gòu),我們的實驗設(shè)備提供的是后者。對于共陰極結(jié)構(gòu)的LED顯示器,陰極連在一起后接地,各陽極段接到器件的引腳上,要想點亮某一段時,只要將相應(yīng)引腳屆高點平。(二)8255接口應(yīng)用實驗1、8255接口應(yīng)用實驗(1)用一組發(fā)光二極管顯示一組開關(guān)的狀態(tài),電路連接如圖7-4所示。使8255端口A工作在方式0并作為輸出口,端口B工作在方式0 并作為輸入口。用一組開關(guān)信號接入端口B,端口A輸出線

55、接至一組發(fā)光二極管上,然后通過對8255芯片的編程來實現(xiàn)輸入/輸出功能。實驗步驟:按圖接線輸入程序并檢查無誤,經(jīng)匯編、連接后裝入系統(tǒng)運行程序,撥動開關(guān)鍵,觀察發(fā)光二極管應(yīng)一一對應(yīng)。2、8255接口應(yīng)用實驗(2)電路連接如圖7-5所示,編程實現(xiàn)連接在8255 A口的一組發(fā)光二極管輪流點亮,A口采用工作方式0,輸出。二極管點亮的方式還很多,同學(xué)們可根據(jù)現(xiàn)實生活中觀察到的情況進行發(fā)揮。3、8255接口應(yīng)用實驗(3)按圖7-6所示連接線路,8255 A口工作方式0,輸出與數(shù)碼顯示管連接,B口工作方式0,輸入與一組開關(guān)相連接。編程實現(xiàn)在數(shù)碼顯示管中顯示開關(guān)閉合的個數(shù)。4、8255接口應(yīng)用實驗(4)該實驗

56、電路連接圖與圖7-6一樣,若任意時刻至多只有一個開關(guān)閉合,編程實現(xiàn)在數(shù)碼顯示管中顯示閉合開關(guān)的序號,沒有開關(guān)閉合時,數(shù)碼顯示管不亮。5、8255接口應(yīng)用實驗(5)按圖7-7連接線路,8255 A口工作方式0,輸出;B口工作方式0,輸入。數(shù)碼管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。kk1+和Kk2+兩個按鍵開關(guān)分別與8255的PB0、PB1連接。要求對該電路進行編程,使數(shù)碼管初始狀態(tài)顯示0。每按下一次kk1+鍵后,數(shù)碼管顯示的數(shù)字減1,減至0后,再按kk1+鍵,則數(shù)碼管顯示9;每按下一次kk2+鍵后,數(shù)碼管顯示的數(shù)字加1,加至9后,再按kk2+鍵,則數(shù)碼管顯示0。若同時按

57、下kk1+和kk2+鍵,則退出程序。6、8255接口應(yīng)用實驗(6)按圖7-8連接線路,8255 A口工作方式0,輸出;B口工作方式0,輸入。數(shù)碼管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。開關(guān)k0、k1、k2和k3分別與PB0、PB1、PB2、PB3相連接。對該電路進行編程,使其滿足下表要求。開關(guān)狀態(tài)數(shù)碼管顯示K3K2K1K0閉閉閉閉0閉閉閉開1閉閉開閉2閉閉開開3閉開閉閉4閉開閉開5閉開開閉6閉開開開7開閉閉閉8開閉閉開9開閉開閉A開閉開開B開開閉閉C開開閉開D開開開閉E開開開開F7、8255接口應(yīng)用實驗(7)按圖7-9連接電路圖,8255 A口工作方式1,輸入;B口工作

58、方式0,輸出。A口的PA0、PA1和PA2分別與開關(guān)K0、K1、K2相連接;B口與8個發(fā)光二極管相連接;PC4與KK1-連接,由KK1-提供一個負脈沖作為選通信號(STB),PC3連接到8259的IRQ7上,8259的INT與系統(tǒng)8088CPU的INTR接在一起。根據(jù)這個電路編程實現(xiàn):先預(yù)置開關(guān)K2K0為一組狀態(tài),然后按下KK1-產(chǎn)生一個負脈沖信號,輸入到PC4上。用發(fā)光二極管LEDi亮來顯示K2K0的狀態(tài)。K2K0的開關(guān)狀態(tài)與發(fā)光二極管亮的對應(yīng)關(guān)系為下表所示開關(guān)狀態(tài)發(fā)光二極管狀態(tài)K2K1K0LEDi000LED0 亮001LED1 亮010LED2 亮011LED3 亮100LED4 亮10

59、1LED5 亮110LED6 亮111LED7 亮8、8255接口應(yīng)用實驗(8)按圖7-10所示接線,編寫程序,使8255端口A工作在方式0并作為輸出口,端口B工作于方式1并作為輸入口,則端口C的PC2成為選通信號輸入端STB,PC0成為中斷請求信號輸出端INTR。當B口數(shù)據(jù)就緒后,通過發(fā)STB信號來請求CPU讀取端口B數(shù)據(jù)并送端口A輸出顯示。9、8255接口應(yīng)用實驗(9)當只需顯示單個數(shù)字時可采用數(shù)碼顯示管的靜態(tài)顯示方法:按圖7-11連接線路,8255 A口工作方式0,輸出,數(shù)碼管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。PA負責(zé)提供數(shù)碼顯示管顯示數(shù)據(jù)所需要的段碼,PC0

60、負責(zé)向數(shù)碼顯示管的共陰極提供一個低電平,以保證數(shù)碼顯示管正常工作。編程實現(xiàn)數(shù)碼管循環(huán)延時顯示十六進制數(shù)09、AF。10、8255接口應(yīng)用實驗(10)實際系統(tǒng)中經(jīng)常要顯示多位數(shù)字,若仍采用上述電路結(jié)構(gòu),就需要增加8255芯片,這不僅增大了顯示系統(tǒng)的體積,也提高了系統(tǒng)的成本和功耗,此刻我們需要采用數(shù)碼顯示管的動態(tài)顯示方法,連接圖如圖7-12所示。通過編程,讓4個數(shù)碼管輪流點亮,但在任何時候只讓一個數(shù)碼管點亮,若每位數(shù)碼管點亮的時間選擇為2ms ,經(jīng)過8ms后又返回去將每位數(shù)字點亮一次,也就是每秒大約刷新125次。由于人眼可以接受的刷新速率約為每秒40200次。因此,這個刷新速率不會讓人的眼睛感到字

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論