匯編實(shí)驗(yàn)講課微機(jī)原理實(shí)驗(yàn)課演示文稿_第1頁(yè)
匯編實(shí)驗(yàn)講課微機(jī)原理實(shí)驗(yàn)課演示文稿_第2頁(yè)
匯編實(shí)驗(yàn)講課微機(jī)原理實(shí)驗(yàn)課演示文稿_第3頁(yè)
匯編實(shí)驗(yàn)講課微機(jī)原理實(shí)驗(yàn)課演示文稿_第4頁(yè)
匯編實(shí)驗(yàn)講課微機(jī)原理實(shí)驗(yàn)課演示文稿_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、微機(jī)原理實(shí)驗(yàn)課西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)教學(xué)中心MASM 611使用簡(jiǎn)要說(shuō)明 Microsoft宏匯編程序MASM611有建立匯編語(yǔ)言所需的全部工具,我們簡(jiǎn)要介紹其集成開(kāi)發(fā)軟件PWB。PWB是集匯編程序的編輯、編譯、連接、調(diào)試、運(yùn)行于一體的綜合軟件。 運(yùn)行 PWB 在計(jì)算機(jī) C:盤上具體使用方法結(jié)合實(shí)例介紹 MASM611文件夾BINR文件夾運(yùn)行程序PWB軟件實(shí)驗(yàn)局部 本局部共進(jìn)行4次實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容如下: 1實(shí)驗(yàn)一 BCD碼的運(yùn)算 2實(shí)驗(yàn)三 循環(huán)結(jié)構(gòu)程序 3實(shí)驗(yàn)四 排序程序 4實(shí)驗(yàn)五 分支程序 實(shí)驗(yàn)一 BCD碼的運(yùn)算 一實(shí)驗(yàn)?zāi)康?1.熟悉在MASM611集成環(huán)境下建立、匯編、鏈接、調(diào)試和運(yùn)行匯

2、編語(yǔ)言程序的全過(guò)程。 2.掌握匯編語(yǔ)言程序結(jié)構(gòu)中數(shù)據(jù)段、堆棧段、代碼段定義及內(nèi)存分配方法。 3.學(xué)會(huì)DEBUG調(diào)試程序主要命令的使用方法。 4.掌握用組合BCD碼表示數(shù)據(jù)的方法,并熟悉其加、減、乘、除運(yùn)算。二實(shí)驗(yàn)內(nèi)容 1.多位十進(jìn)制數(shù)加法。 2.兩位十進(jìn)制數(shù)乘法。三實(shí)驗(yàn)要求 1.多位十進(jìn)制數(shù)加法:在內(nèi)存中以DATA1和DATA2為首址,各分配5個(gè)字節(jié)單元,分別存入兩個(gè)8位組合BCD碼數(shù)據(jù)低位在前,將兩數(shù)相加,結(jié)果送回到DATA2處。 2.兩位十進(jìn)制數(shù)乘法:將被乘數(shù)和乘數(shù)以組合BCD碼形式分別存放于DATA1和DATA2定義的節(jié)單元中,經(jīng)乘法運(yùn)算,乘積存入DATA3定義的兩個(gè)內(nèi)存單元中。 3.用

3、DEBUG調(diào)試程序、查看運(yùn)算結(jié)果,進(jìn)行手工驗(yàn)證;并且用DEBUG修改數(shù)據(jù),重新執(zhí)行。關(guān)于BCD碼、十六進(jìn)制數(shù)的說(shuō)明BCD碼用4位二進(jìn)制編碼表示一個(gè)十進(jìn)制數(shù),又稱二十進(jìn)制數(shù)。由于這4位二進(jìn)制數(shù)的權(quán)值為8421,故也稱BCD碼為8421碼。在計(jì)算機(jī)里,用一個(gè)字節(jié)的低4位表示一位十進(jìn)制數(shù)非組合BCD碼;用一個(gè)字節(jié)表示兩位十進(jìn)制數(shù)組合BCD碼。非組合BCD碼uuuu 1001例:計(jì)算機(jī)里 79d 非組合BCD碼:uuuu0111 uuuu1001組合BCD碼0111 1001例:計(jì)算機(jī)里 79d 組合BCD碼:0111100116進(jìn)制數(shù)0123456789ABCDEF二進(jìn)制碼0000000100100

4、011010001010110011110001001101010111100110111101111BCD碼000000010010001101000101011001111000100110進(jìn)制數(shù)0123456789在計(jì)算機(jī)里,所有的運(yùn)算都是按二進(jìn)制進(jìn)行的,運(yùn)算結(jié)果是二進(jìn)制數(shù)即十六進(jìn)制數(shù) 。為了把十六進(jìn)制運(yùn)算結(jié)果轉(zhuǎn)換成十進(jìn)制,匯編語(yǔ)言中引進(jìn)了組合BCD碼加法調(diào)整指令DAA和減法調(diào)整指令DAS。 DAA 加法的十進(jìn)制調(diào)整指令 該指令之前要執(zhí)行ADD或ADC。調(diào)整方法:假設(shè)AF為1,或AL中的低4位是十六進(jìn)制的A F,那么AL內(nèi)容加06H,AF置1; 假設(shè)CF為1,或AL中的高4位是十六進(jìn)制的

5、A F,那么AL內(nèi)容加60H,CF置1。 AF 輔助進(jìn)位標(biāo)志 CF進(jìn)位標(biāo)志AL AL中的十六進(jìn)制數(shù)調(diào)整為BCD格式多位十進(jìn)制數(shù)加法 .model small .data data1 db 11h,22h,33h,44h,00h data2 db 99h,88h,77h,66h,00h .code .startup mov si,offset data1 ;設(shè)指針 mov di,offset data2 clc ;清進(jìn)位 mov cx,5 ;設(shè)加法次數(shù)lop: mov al,si ;取第一加數(shù) adc al,di ;取第二加數(shù) daa ;十進(jìn)制調(diào)整 mov di,al ;結(jié)果存入指定單元 inc

6、 si ;指針加1 inc diloop lop ;循環(huán) .exit end 流程圖:開(kāi)始SI Data1首址DI Data2首址清進(jìn)位設(shè)加法次數(shù)十進(jìn)制調(diào)整; 局部和回送指向下單元數(shù)AL 第一加數(shù)AL AL+第二加數(shù)CX-1=0?結(jié)束YN兩位十進(jìn)制數(shù)乘法.model small.586.datadata1 db 34hdata2 db 56hdata3 dw 1 dup (?).code.startup mov bl,data1 ;第一乘數(shù)轉(zhuǎn)換成16進(jìn)制數(shù) mov bh,bl and bh,0fh and bl,0f0h mov cL,4 shr bl,cL mov al,10 mul bl

7、add al,bh movzx cx, al ;置加法次數(shù)計(jì)數(shù)器 mov bl,data2 ; 第二乘數(shù)做BCD 加法,加第一乘數(shù)次 mov ax,0 clclop: add al,bl daa xchg ah,al adc al,0 daa xchg ah,al loop lop mov data3,ax;積送乘積存儲(chǔ)單元 nop nop nop .exit end兩位十進(jìn)制數(shù)乘法流程圖:開(kāi)始BL 第一乘數(shù)BH 第一乘數(shù)別離出第一乘數(shù)的“個(gè)位別離出第一乘數(shù)的“十位第一乘數(shù)的“十位移到“個(gè)位后,再乘 10合成得到16進(jìn)制的第一乘數(shù)CX 16進(jìn)制的第一乘數(shù)BCD碼轉(zhuǎn)換成16進(jìn)制數(shù)11AX 0清進(jìn)

8、位BL 第二乘數(shù)第二乘數(shù)做加法次數(shù)十進(jìn)制調(diào)整AL與AH內(nèi)容交換AL AL+0+CFAL AL+BLAL與AH內(nèi)容交換十進(jìn)制調(diào)整CX-1=0?NY存儲(chǔ)結(jié)果結(jié)束一、實(shí)驗(yàn)?zāi)康?掌握循環(huán)結(jié)構(gòu)程序的設(shè)計(jì)、調(diào)試。二、實(shí)驗(yàn)內(nèi)容1 多字節(jié)無(wú)符號(hào)數(shù)加法。2 設(shè)計(jì)一軟件延時(shí)器,并在屏幕上顯示軟件延時(shí)倒計(jì)時(shí)過(guò)程。三、實(shí)驗(yàn)要求1多字節(jié)無(wú)符號(hào)加法:在DATAS中存放10個(gè)雙字節(jié)無(wú)符號(hào)數(shù), 用循環(huán)結(jié)構(gòu)設(shè)計(jì)程序,通過(guò)程序運(yùn)算,把這10個(gè)雙字節(jié)無(wú)符號(hào) 數(shù)相加,其和存入緊鄰加數(shù)之后的四個(gè)單元中。2軟件延時(shí)器:做一延時(shí)約1秒的軟件延時(shí)器,在屏幕上按9、 8、0順序顯示軟件延時(shí)倒計(jì)時(shí)過(guò)程。 實(shí)驗(yàn)三 循環(huán)結(jié)構(gòu)程序有關(guān)問(wèn)題的說(shuō)明循環(huán)程

9、序的三個(gè)組成局部: 循環(huán)初始狀態(tài)設(shè)置。設(shè)置循環(huán)次數(shù)、為循環(huán)體正常工作建立初始狀態(tài)等。 循環(huán)體。循環(huán)工作的主體,包含循環(huán)的工作局部和修改局部。循環(huán)的工作局部是為完成程序功能而設(shè)計(jì)的程序段;循環(huán)的修改局部是為保證每一次重復(fù)時(shí),參加執(zhí)行的信息能發(fā)生有規(guī)律的變化而建立的程序段。 循環(huán)控制局部。選擇一個(gè)循環(huán)控制條件來(lái)控制循環(huán)的運(yùn)行和結(jié)束。循環(huán)程序的結(jié)構(gòu):循環(huán)初始狀態(tài)循環(huán)控制條件循環(huán)體YN循環(huán)初始狀態(tài)循環(huán)體循環(huán)控制條件YNDO-WHILE結(jié)構(gòu)DO-UNTIL結(jié)構(gòu)子程序結(jié)構(gòu): procedure name PROC Attribute RET procedure name ENDP Attribute NE

10、AR 調(diào)用程序和過(guò)程在同一個(gè)代碼段中FAR 調(diào)用程序和過(guò)程不在同一個(gè)代碼段中系統(tǒng)功能調(diào)用:系統(tǒng)功能調(diào)用是DOS為方便匯編語(yǔ)言編寫而提供的一組約80個(gè)功能調(diào)用的常用子程序,它分為設(shè)備管理、文件管理和目錄管理等幾類。DOS規(guī)定用軟中斷指令 INT 21H 進(jìn)入各功能調(diào)用子程序的總?cè)肟?,再為每個(gè)功能調(diào)用規(guī)定一個(gè)功能號(hào),以便進(jìn)入相應(yīng)各用子程序的入口。系統(tǒng)功能調(diào)用的使用方法:指定的寄存器入口參數(shù)AH調(diào)用功能的功能號(hào)INT 21HEX1:從鍵盤輸入單字符 MOV AH,01H ;1號(hào)功能調(diào)用 INT 21H將鍵盤輸入字符的ASCII碼送到 AL。EX2:從鍵盤輸入字符串 BUF DB 10 DUP? LE

11、A DX,BUF MOV AH,0AH ;0A號(hào)功能調(diào)用 INT 21H將鍵盤輸入的字符串寫到 RAM 中去,擊回車鍵表示字符串結(jié)束。字符數(shù)與予留空間的關(guān)系為:少補(bǔ)零多喪失。EX3:輸出單字符 MOV DL,M MOV AH,02H; 2號(hào)功能調(diào)用 INT 21H將 DL 中字符從屏幕上顯示出來(lái)。EX4:輸出字符串 BUF DB Thank you MOV DX,OFFSET BUF MOV AH,09H;9號(hào)功能調(diào)用 INT 21H將 指定 RAM 緩沖區(qū)中的字符串從屏幕上顯示出來(lái)。 為字符串結(jié)束符。EX5:直接控制臺(tái)輸入/輸出單字符 MOV DL,0FFH;DL=0FFH時(shí), MOV AH

12、,06H; 6號(hào)功能調(diào)用 INT 21H; 將鍵盤輸入字符 送到 AL 中。 MOV DL,M; DL 0FFH時(shí), MOV AH,06H; 6號(hào)功能調(diào)用 INT 21H; 將 DL 中字符送到 屏幕上顯示。多字節(jié)無(wú)符號(hào)數(shù)加法 .MODEL SMALL .586 .DATADATAS DW 1111H,2222H,3333H,4444H,5555H DW 6666H,7777H,8888H,9999H,0AAAAHRESULT DD 1 DUP(?) .CODE.STARTUP MOV SI,OFFSET DATAs;設(shè)指針 MOV CX,10;累加次數(shù) MOV EAX,0;清累加器 CLC;

13、清進(jìn)位LOP: MOV BX,SI;取加數(shù)到BX MOVZX EBX,BX ;將BX擴(kuò)展成32位 ADC EAX,EBX;帶進(jìn)位加 INC SI;改指針 INC SI LOOP LOP;循環(huán)加 MOV RESULT,EAX;存結(jié)果 .EXIT END開(kāi)始SI DATAS的首址CX 累加次數(shù)EAX 0清進(jìn)位BX SI所指加數(shù)將BX擴(kuò)展為32位EAX EAX+EBX+CFSI 指向下一加數(shù)CX-1=0?NY存結(jié)果 結(jié)束軟件延時(shí)器.model small.data data db 20h,20h,20h,20h,20h,39h,0dh,$.code.startupmov cx,09h; 設(shè)循環(huán)次數(shù)l

14、op:mov ah,09h;顯示功能調(diào)用lea dx,dataint 21hcall near ptr delay;調(diào)用延時(shí)子程序dec data+5;修改顯示數(shù)字loop lop.exitDelay proc near uses cx ;延時(shí)子程序 mov bx,06ffh ;設(shè)第二時(shí)常數(shù)Delay1 :mov cx,0h loop $ ;自身循環(huán)CX次 dec bx ;第二時(shí)常數(shù)減1 jnz delay1 ;不為零循環(huán) retDelay endpend開(kāi)始CX 循環(huán)次數(shù)字符串顯示功能調(diào)用延時(shí)子程序調(diào)用顯示數(shù)字修改CX-1=0?NY結(jié)束主程序流程:延時(shí)子程序流程:延時(shí)子程序定義BX 第二時(shí)常

15、數(shù)CX 第一時(shí)常數(shù)CX-1=0?NYBX-1BX=0?NY子程序返回子程序結(jié)束關(guān)鍵詞實(shí)驗(yàn)四 排序程序 一實(shí)驗(yàn)?zāi)康?1學(xué)習(xí)無(wú)符號(hào)數(shù)比較大小指令; 2掌握多重循環(huán)編程方法; 3掌握匯編語(yǔ)言編寫排序程序的思路和方法。二實(shí)驗(yàn)內(nèi)容 1單字節(jié)無(wú)符號(hào)數(shù)排序。 2去極值濾波。三實(shí)驗(yàn)要求 1單字節(jié)無(wú)符號(hào)數(shù)排序:DATANUM單元開(kāi)始存放雙字節(jié)無(wú)符號(hào)數(shù),表示要排序數(shù)據(jù) 的個(gè)數(shù),DATAS單元開(kāi)始存放要排序的數(shù)據(jù),數(shù)據(jù)個(gè)數(shù)至少10個(gè),程序運(yùn)行之后, 這些數(shù)據(jù)按照由小到大的順序仍然存放于DATAS單元開(kāi)始的位置。 2 去極值濾波:某控制系統(tǒng)為了抗干擾,采用去極值濾波法處理采集數(shù)據(jù),取連 續(xù)6個(gè)A/D采樣值12位雙字節(jié)

16、,低12位,要求去掉最大值和最小值,將 余下4個(gè)數(shù)求平均值,用該平均值代表當(dāng)前時(shí)刻系統(tǒng)狀態(tài)的真值。試編一程序完 成這個(gè)濾波過(guò)程。單字節(jié)無(wú)符號(hào)數(shù)排序流程圖:開(kāi)始BL 數(shù)據(jù)個(gè)數(shù)-1CX BL擴(kuò)展數(shù)據(jù)指針 SI 置 0累加器 前數(shù) 前數(shù)與后數(shù)比較前數(shù)后數(shù)前、后數(shù)交換數(shù)據(jù)指針 SI 指向下一數(shù)數(shù)據(jù)指針 SI 指向下一數(shù)YNBL-1CX-1=0?CX-1=0?NNYYZF=1?N結(jié)束Y .model small .586 .data datanum db 10 datas db 21h,13h,4h,5h,7h db 6h,8h,20h,9h,11h .code .startup mov bl,data

17、num dec bl lop0: movzx cx,bl mov si,0 lop: mov al,datassi cmp al,datassi+1 ja jh inc si loop lop jmp next jh: xchg al,datassi+1 mov datassi,al inc si loop lopnext: dec bl jz finish jmp lop0finish: nop .exit end去極值濾波開(kāi)始調(diào)排序子程序?qū)?shù)據(jù)進(jìn)行排序?qū)ε磐晷虻臄?shù)據(jù)掐頭去尾求和求均值保存結(jié)果結(jié)束 .model small .586 .datadatanum db 6datasdw 0123

18、h,0abch,0234h dw 0345h,0456h,0567h .code.startupcall px ;排序mov si,offset datas+2 ;掐頭去尾送指針mov cx,4 ;送累加次數(shù)clc ;清進(jìn)位mov ax,0 ;取首數(shù)qh:adc ax,si ;累加inc siinc siloop qhshr ax,2 ;除4mov datas,ax ;存結(jié)果到DATAS首位 .exitpxproc near mov bl,datanum;取字長(zhǎng) dec bllop0: movzx cx,bl;送比較次數(shù) mov si,0lop:mov ax,datassi;送前數(shù)cmp ax

19、,datassi+2;與后數(shù)比較 ja jh;前大于后,轉(zhuǎn)交換inc siinc si;指針加 1 loop lop;循環(huán)比較 jmp next;一輪排序完jh: xchg ax,datassi+2;交換 mov datassi,ax inc siinc si loop lopnext: dec bl;修改比較次數(shù) jz finish jmp lop0finish: nop;結(jié)束 retpx endp end實(shí)驗(yàn)五 分支程序一、實(shí)驗(yàn)?zāi)康?掌握分支程序編程方法,復(fù)雜分支程序的查表法等。二、實(shí)驗(yàn)內(nèi)容 1、 學(xué)生課程成績(jī)分段統(tǒng)計(jì)。 2、 鍵盤及屏幕顯示功能調(diào)用。三、實(shí)驗(yàn)要求 1、 學(xué)生課程成績(jī)分段統(tǒng)

20、計(jì):用單字節(jié)表示每個(gè)學(xué)生的學(xué)號(hào),學(xué)生的課程成績(jī)用兩位十進(jìn)制數(shù)表示最低0分,最高99分,規(guī)定0F0H表示作弊,0F1H表示缺考,0FFH為一組學(xué)生成績(jī)的結(jié)束符。學(xué)生成績(jī)?cè)趦?nèi)存的存放形式為“學(xué)號(hào),成績(jī),每個(gè)學(xué)生占兩個(gè)字節(jié),從內(nèi)存SCORE為首址開(kāi)始存放。要求學(xué)生人數(shù)不少于10個(gè),試編程序,按0 9、10 19、20 29、80 89、90 99及作弊、缺考等12種情況把學(xué)生的課程成績(jī)進(jìn)行分段統(tǒng)計(jì),將統(tǒng)計(jì)結(jié)果存入以COUNT為首址的12個(gè)單元中。 2、試編一程序掃描鍵盤,當(dāng)B鍵按下時(shí),在屏幕上顯示09循環(huán)計(jì)數(shù);S鍵按下時(shí)停止計(jì)數(shù);再按B鍵繼續(xù)計(jì)數(shù)過(guò)程。E鍵按下時(shí)退出程序。 3、用DEBUG調(diào)試程序預(yù)

21、置數(shù)據(jù)和查看程序運(yùn)行結(jié)果,以驗(yàn)證程序正確性。 學(xué)生課程成績(jī)分段統(tǒng)計(jì)開(kāi)始設(shè)置學(xué)號(hào)、成績(jī)指針取學(xué)號(hào)取成績(jī)是結(jié)束標(biāo)志?取十分位,并將十分值擴(kuò)展為16位送DI,對(duì)DI所指統(tǒng)計(jì)區(qū)段統(tǒng)計(jì)值加1是作弊?是缺考?修改指針CX-1=0?CX 統(tǒng)計(jì)上限作弊統(tǒng)計(jì)區(qū)段統(tǒng)計(jì)值加1缺考統(tǒng)計(jì)區(qū)段統(tǒng)計(jì)值加1結(jié)束YYYYNNNN .model small .586 .data score db 1,10h,2,20h,3,30h,4,40h,5,50h,6,77h,7,70h db 8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffhcount db 12 dup(?) .code .startu

22、p mov cx,20;送統(tǒng)計(jì)上限 mov si,0;SCORE 統(tǒng)計(jì)指針statistic: mov al,scoresi ;取學(xué)號(hào) cmp al,0ffh ;判是否為結(jié)束 je sta_end;轉(zhuǎn)統(tǒng)計(jì)結(jié)束 mov bl,scoresi+1;取成績(jī) cmp bl,0f0h;是否作弊 je fake;是,轉(zhuǎn)作弊處理 cmp bl,0f1h;是否缺考 je miss;是,轉(zhuǎn)缺考處理 shr bl,4;取十分位 movzx di,bl ;將十分值擴(kuò)展為16位送DI inc countdi ;相應(yīng)區(qū)段統(tǒng)計(jì)值加1down: inc si ;改指針 inc si loop statistic;循環(huán)sta

23、_end:nop;結(jié)束 .exitfake: mov di,10;作弊處理 inc countdi jmp downmiss: mov di,11;缺考處理 inc countdi jmp down end鍵盤及屏幕顯示功能調(diào)用開(kāi)始顯示提示信息置處理指針為“停止調(diào)延時(shí)、鍵盤掃描程序有鍵動(dòng)?轉(zhuǎn)處理指針處B 鍵?S 鍵?E 鍵?轉(zhuǎn)處理指針處結(jié)束置處理指針為“計(jì)數(shù)置處理指針為“停止NYYYYNNN處理指針為“計(jì)數(shù)處理指針為“停止計(jì)數(shù)顯示延時(shí)、鍵盤掃描程序子程序定義BX 第二時(shí)常數(shù)CX 第一時(shí)常數(shù)CX-1=0?NYBX-1BX=0?NY子程序返回監(jiān)測(cè)鍵動(dòng)有鍵動(dòng)?做鍵動(dòng)標(biāo)志bx=1NY.model sm

24、all.dataMess1 db press b button - count,0dh,0ahmess2 db press s button - stop,0dh,0ahMess3 db press e button - exit,0dh,0ah,$count db 20h,20h,20h,20h,20h,30h,0dh,$.code.startupmov ah,09h;顯示提示信息mov dx,offset mess1int 21hmov si,stop;設(shè)處理指針scan: call near ptr delay ;調(diào)延時(shí)、鍵掃程序 or bx,bx;判有無(wú)鍵動(dòng) jnz scan1;有鍵動(dòng)

25、,轉(zhuǎn)鍵處理 jmp si;無(wú)鍵動(dòng),轉(zhuǎn)當(dāng)前處理程序scan1: cmp al,b ;鍵處理程序 je b_proc cmp al,s je s_proc cmp al,e je e_proc call delay jmp sib_proc: mov si,count_;B鍵處理 jmp scans_proc: mov si,stop;S鍵處理 jmp scane_proc: nop;E鍵處理 nop .exitcount_: inc count+5;修改顯示數(shù)字 mov al,3ah;比較超限 cmp al,count+5 ja down;假設(shè)不超限,調(diào)顯示 mov count+5,30h;超限

26、,設(shè)啟始值down: mov ah,09h;顯示功能調(diào)用 lea dx,count int 21h jmp scanstop: jmp scan nopDelay proc near uses cx;延時(shí)子程序 mov bx,380h;設(shè)第二時(shí)常數(shù)delay1: mov cx,0h loop $;自身循環(huán)CX次 mov dl,0ffh;監(jiān)測(cè)鍵動(dòng) mov ah,06h int 21h jnz key_ret ;假設(shè)有鍵動(dòng),延時(shí)終止,轉(zhuǎn)鍵處理 dec bx;第二時(shí)常數(shù)減1 jnz delay1;不為零循環(huán) jmp delay_retkey_ret: mov bx,1;做鍵動(dòng)標(biāo)志delay_ret:

27、 retDelay endp end硬件實(shí)驗(yàn)局部本局部共進(jìn)行3次實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容如下:1 實(shí)驗(yàn)六 并行接口技術(shù)實(shí)驗(yàn) 2 實(shí)驗(yàn)七 8254定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)3 實(shí)驗(yàn)九 A/D轉(zhuǎn)換實(shí)驗(yàn) 下面根據(jù)實(shí)驗(yàn)臺(tái)實(shí)物介紹實(shí)驗(yàn)臺(tái)特別說(shuō)明:為了方便實(shí)驗(yàn),實(shí)驗(yàn)臺(tái)設(shè)計(jì)時(shí)已將實(shí)驗(yàn)用相關(guān)器件的地址線、數(shù)據(jù)總線及除片選CS外的控制線連接到位,并在每一個(gè)實(shí)驗(yàn)電路附近予留有假設(shè)干信號(hào)連線插孔。實(shí)驗(yàn)時(shí)只要將相應(yīng)插孔用單股導(dǎo)線對(duì)應(yīng)相連即可組成完整的實(shí)驗(yàn)電路。在給出的實(shí)驗(yàn)電路圖中,線路所帶小圓圈即表示連線插孔。硬件實(shí)驗(yàn)本卷須知:1.在實(shí)驗(yàn)臺(tái)斷電條件下,才能用單股導(dǎo)線連接電路;2.線路連接完成、檢查確認(rèn)沒(méi)有錯(cuò)誤后,再開(kāi)通實(shí)驗(yàn)臺(tái)電源;3.用

28、單股導(dǎo)線連接電路時(shí),要將單股導(dǎo)線線頭整直,并確認(rèn)線頭沒(méi)有斷裂;4.實(shí)驗(yàn)完成后,關(guān)斷實(shí)驗(yàn)臺(tái)電源,再一根一根垂直拔掉連接導(dǎo)線,并把連接導(dǎo)線整好放入線盒。實(shí)驗(yàn)六 并行接口技術(shù)實(shí)驗(yàn) 一實(shí)驗(yàn)?zāi)康?1.掌握8255A并行接口的根本使用方法。 2.理解數(shù)碼管掃描顯示原理,學(xué)習(xí)數(shù)碼管掃描顯示方法。二實(shí)驗(yàn)內(nèi)容 1.用8255A作為并行接口,從8255A的一個(gè)端口輸入開(kāi)關(guān)量到CPU或內(nèi)存,再將這一數(shù)據(jù)通過(guò)數(shù)據(jù)總線和8255A的另一個(gè)端口掃描輸出到數(shù)碼管。設(shè)8255A的A口為輸入方式,接邏輯電平開(kāi)關(guān);8255A的B口為輸出方式,通過(guò)MC1413驅(qū)動(dòng)器接數(shù)碼管的位選端;數(shù)碼管的字劃端通過(guò)74HC573與數(shù)據(jù)總線相連;

29、邏輯電平開(kāi)關(guān)SK1SK6按16編號(hào)。試編一程序,用一位數(shù)碼管指示出邏輯電平開(kāi)關(guān)為“0狀態(tài)的開(kāi)關(guān)編號(hào),即當(dāng)1號(hào)邏輯電平開(kāi)關(guān)為“0時(shí),所選數(shù)碼管顯示“1,2號(hào)邏輯電平開(kāi)關(guān)為“0時(shí),數(shù)碼管顯示“2,6號(hào)邏輯電平開(kāi)關(guān)為“0時(shí),數(shù)碼管顯示“6。所有邏輯開(kāi)關(guān)的初始狀態(tài)為“1。 2.設(shè)8255A的B口為輸出方式,通過(guò)MC1413驅(qū)動(dòng)器接數(shù)碼管的位選端;數(shù)碼管的字劃端通過(guò)74HC573與數(shù)據(jù)總線相連。試編一動(dòng)態(tài)掃描程序,讓6個(gè)數(shù)碼管“同時(shí)點(diǎn)亮,顯示“1、2、3、4、5、6。三實(shí)驗(yàn)電路及設(shè)計(jì) 1.實(shí)驗(yàn)電路圖 2.實(shí)驗(yàn)連線1邏輯電平開(kāi)關(guān)輸出孔K1K6對(duì)應(yīng)連接到8255A的PA0PA5;28255A的PB0PB5對(duì)

30、應(yīng)連接到數(shù)碼管的位選端JM1JM6;3數(shù)據(jù)總線D0、D1、D2、D3、D4、D5、D6、D7對(duì)應(yīng)連接到數(shù)碼 管的字劃端a、b、c、d、e、f、g、dp;48255A的片選端CS8255連到譯碼控制單元的300-303H;574HC573的使能端CS573連到譯碼控制單元的310H。3.8255A的端口地址 PA口:300H,PB 口:301H,PC口:302H,控制存放器:303H。4.數(shù)碼管編碼表 “0-3FH “1-06H “2-5BH “3-4FH “4-66H “5-6DH “6-7DH “7-07H “8-7FH “9-6FH “A-77H “B-7CH “C-39H “D-3EH

31、“E-79H “F-71H 有關(guān)問(wèn)題的說(shuō)明數(shù)碼管共陰:DPDP共陰地?cái)?shù)字字型碼5不閉合,數(shù)碼管就點(diǎn)不亮多個(gè)數(shù)碼管掃描顯示:多個(gè)數(shù)碼管掃描顯示:限流電阻鎖存器JM3、JM2、JM1誰(shuí)為,誰(shuí)連接的數(shù)碼管就顯示鎖存器當(dāng)前鎖存的值所謂掃描顯示是:對(duì)個(gè)數(shù)碼管:.給鎖存器送第個(gè)數(shù)碼管顯示內(nèi)容,而后第個(gè)數(shù)碼管公共端接低,延時(shí).給鎖存器送第個(gè)數(shù)碼管顯示內(nèi)容,而后第個(gè)數(shù)碼管公共端接低,延時(shí).給鎖存器送第個(gè)數(shù)碼管顯示內(nèi)容,而后第個(gè)數(shù)碼管公共端接低,延時(shí)第步后,再?gòu)拈_(kāi)始,周而復(fù)始。那么, JM3、JM2、JM1是互斥的了!連接數(shù)據(jù)總線D7D0 驅(qū)動(dòng)器實(shí)驗(yàn) 6.174HC573鎖存器A口 K6 K5 K4 K3 K2

32、 K1 開(kāi)關(guān)ABCDEFGDP限流電阻DbusD7D08255MC1413驅(qū)動(dòng)器B口COMDbusD7D0CS573CS8255A口開(kāi)始初始化8255點(diǎn)亮一位數(shù)碼管讀鍵盤有鍵?讀開(kāi)關(guān)量,并取反位掃描,確定開(kāi)關(guān)號(hào)取對(duì)應(yīng)開(kāi)關(guān)號(hào)的字型碼輸出對(duì)應(yīng)的數(shù)字結(jié)束; CS8255 - 300_303h; CS573 - 310h; k1.k6 - PA0.PA5; JM1.JM6-PB0.PB5; D0.D7-A.B.DP.model small .586 p8255 equ 0300h ;片選地址 p_ctl equ 90h ;8255控制字 s_l_a equ 310h ;573鎖存地址.datatabl

33、e db 3fh,06h,5bh,4fh,66h ;0,1,2,3,4字型 db 6dh,7dh,07h,7fh,6fh ;5,6,7,8,9 .code .startup mov dx , p8255+3 ;8255初始化 mov al , p_ctl out dx,al mov dx , p8255 +1 ;點(diǎn)亮數(shù)碼管SM1 mov al, 01h out dx,allop: mov ah,06h ;鍵入“e結(jié)束執(zhí)行 mov dl,0ffh int 21h cmp al,e je scan_end mov dx,p8255 ;讀開(kāi)關(guān) in al,dx not al movzx ax,al

34、bsf bx,ax ;從ax低位起掃描,將第一個(gè) ; 為1的位號(hào)存BXxchg al,blmov bx,offset table ;讀字型碼xlat ;查表,BX+AL送ALmov dx,s_l_a;輸出對(duì)應(yīng)的數(shù)字out dx,aljmp lop ;循環(huán)掃描scan_end:.exit end實(shí)驗(yàn) 6.2限流電阻DbusD7D08255MC1413驅(qū)動(dòng)器B口COMDbusD7D0CS573CS825574HC573鎖存器COMCOMCOMCOMCOMABCDEFGDP開(kāi)始初始化查表取顯示數(shù)字字型碼顯示字型碼送鎖存器輸出取對(duì)應(yīng)數(shù)碼管字位、并輸出+下一掃描位置掃描位數(shù)?調(diào)延時(shí)初始掃描位置(顯示數(shù)字

35、)初始掃描位置讀鍵盤有鍵動(dòng)?結(jié)束延時(shí)程序流程見(jiàn)前; CS8255 - 300_303h; CS573 - 310h; JM1.JM6-PB0.PB5; D0.D7-A.B.DP; .model small p8255 equ 300h;片選地址 p_ctl equ 10010000b;8255控制字s_l_a equ 310h ;573鎖存地址.datatable db 3FH,06H,5BH,4FH ,66H ;0,1,2,3,4 db 6DH,7DH,07H,7FH ,6FH ;5,6,7,8,9 .code .startup mov dx,p8255+3;發(fā)控制字 mov al,p_ct

36、lout dx,almov cl,1;設(shè)掃描位置lop:mov al,cl;取顯示數(shù)字mov bx,offset table;讀字型碼xlatmov dx,s_l_a;輸出字型碼out dx,al mov al,80hrol al,cl ;左循環(huán)移位mov dx,p8255+1out dx,al ;送B口控制的數(shù)碼管位inc clcmp cl,6jbe down;假設(shè)顯示位置大于等于6,;返回啟始位置1mov cl,1down:call delaymov ah,06;判有鍵動(dòng),跳出循環(huán)mov dl,0ffhint 21hjnz scan_endjmp lop;循環(huán)掃描scan_end:nop.

37、exit delayproc near uses cx;延時(shí)子程序 mov bx,02hdelay1:mov cx,0h loop $ dec bx jnz delay1 retdelayendp end實(shí)驗(yàn)七 8254定時(shí)/計(jì)數(shù)器實(shí)驗(yàn) 一實(shí)驗(yàn)?zāi)康?1.掌握8254定時(shí)/計(jì)數(shù)器的根本使用方法。 2.了解8254定時(shí)/計(jì)數(shù)器利用級(jí)連擴(kuò)大計(jì)數(shù)范圍的方法。 3.了解多I/O芯片協(xié)同工作的原理和方法。二實(shí)驗(yàn)內(nèi)容 1.將8254定時(shí)器0設(shè)置為方式2分頻,定時(shí)器1設(shè)置為方式3方波,定時(shí)器0的CLK0端接1M或2M時(shí)鐘,定時(shí)器0的輸出脈沖作為定時(shí)器1的時(shí)鐘輸入。將定時(shí)器1的輸出脈沖接在一個(gè)LED燈上或風(fēng)鳴器

38、上。編程使8254工作,觀察燈的狀態(tài)或風(fēng)鳴器聲響。 2.用8254做秒信號(hào)源,用8255A控制交通燈的紅綠變化,完成一交通燈控制系統(tǒng),使每10秒切換一次通行方向。三實(shí)驗(yàn)電路及設(shè)計(jì) 1 .實(shí)驗(yàn)電路圖 2.“實(shí)驗(yàn)內(nèi)容1實(shí)驗(yàn)連線 18254的GATE0、GATE1接高電平; 28254 T0的CLK0接1M或2M時(shí)鐘孔; 38254 T1的CLK1接T0的OUT0; 48254的片選端CS8254連到譯碼控制單元的304-307H; 58254 T1的OUT1接LED燈或風(fēng)鳴器的輸入端L1或BJ孔。 3.“實(shí)驗(yàn)內(nèi)容2實(shí)驗(yàn)連線 以下連線假設(shè)8255A的A口為輸入方式、B口為輸出方式,8255A的PA1

39、 連接8254 T1的OUT1,8255A的B口控制交通燈的八只LED燈。 1連線同“實(shí)驗(yàn)內(nèi)容1的14; 28254 T1的OUT1接8255A的PA1孔; 38255A的PB7PB0對(duì)應(yīng)連接到dp、g、f、e、d、c、b、a,它們對(duì) 應(yīng)交通燈的Wr、 Er、 Wg、 Eg、 Nr、 Sr、 Ng、 Sg燈; 4交通燈八只LED發(fā)光管的公共控制端JTD孔接高電平; 58255A的片選端CS8255連到譯碼控制單元的300-303H。 4.8254和8255A的端口地址 8254的端口地址: 定時(shí)器0分頻系數(shù)存放器 304H, 定時(shí)器1分頻系數(shù)存放器 305H, 控制存放器 307H。 8255

40、A的端口地址: PA口:300H,PB 口:301H,PC口:302H,控制存放器:303H。 實(shí)驗(yàn) .1開(kāi)始初始化T0初始化T裝T0低字節(jié)計(jì)數(shù)初值結(jié)束裝T0高字節(jié)計(jì)數(shù)初值裝T低字節(jié)計(jì)數(shù)初值裝T高字節(jié)計(jì)數(shù)初值;cs8253-304_307h;clk0 - 1M;out0 -CLK1;out1 - BJ 或 DL1;gate0 - K1,令k1=1;gate1 - K2,令k2=1.MODEL SMALL CS8253 EQU 304H T0_CTL EQU 00110100B ; 對(duì)T0 兩次讀寫,先低后;高。 T0為方式2分頻 T1_CTL EQU 01110110B ;對(duì)T1 兩次讀寫,先

41、低;后高。 T1為方式3方波.DATA T0_DATA DB 0FFH,040H T1_DATA DB 0FFH,0.CODE.STARTUPMOV DX,CS8253+3 ;初始化T0MOV AL,T0_CTLOUT DX,ALMOV DX,CS8253 ;給T0低字節(jié)裝計(jì)數(shù)初值MOV AL,T0_DATAOUT DX,ALMOV AL,T0_DATA+1 ;給T0高字節(jié)裝計(jì)數(shù)初值OUT DX,ALMOV DX,CS8253+3 ;初始化T1MOV AL,T1_CTLOUT DX,ALMOV DX,CS8253+1MOV AL,T1_DATA ;給T1低字節(jié)裝計(jì)數(shù)初值OUT DX,ALMOV

42、 AL,T1_DATA+1 ;給T1高字節(jié)裝計(jì)數(shù)初值OUT DX,AL.EXITEND實(shí)驗(yàn) .開(kāi)始8254 T0 初始化給8254 T0裝初值8254 T 初始化給8254 T裝初值8255初始化為A口入、B口出8255 B口輸出方向初值讀8255 PA1、測(cè)試8255 PA1PA1?讀8255 PA1、測(cè)試8255 PA1PA1?控制換向8255 B口輸出方向值檢查鍵盤有鍵盤動(dòng)?結(jié)束;cs8254-304_307h;clk0 - 1M;out0 - clk1;out1 - 8255 的 PA1;gate0 - k1,令k1=1;gate1 - k2,令k2=1;JTD- k3,令k3=1;c

43、s8255 - 300_303h;8255(PB7 . PB0)- (dp.G.F.E.D.C.B.A) .MODEL SMALLT8254 EQU 304HT0_CTL EQU 00110100BT1_CTL EQU 01110110Bp8255 equ 300h;片選地址p_ctl equ 10010000B;8255控制字.DATAT0_DATA DB 0FFH,040HT1_DATA DB 0FFH,0dir_data DB 00111100B.CODE.STARTUPMOV DX,T8254+3;8254 T0 初始化MOV AL,T0_CTLOUT DX,ALMOV DX,T825

44、4 ;給8254 T0裝初值MOV AL,T0_DATAOUT DX,ALMOV AL,T0_DATA+1OUT DX,ALMOV DX,T8254+3 ;8254 T1初始化MOV AL,T1_CTLOUT DX,ALMOV DX,T8254+1 ;給8254 T1裝初值MOV AL,T1_DATAOUT DX,ALMOV AL,T1_DATA+1OUT DX,ALmov dx,p8255+3;8255為A口入,B口出 mov al,p_ctlout dx,almov dx,p8255+1;8255 B口輸出方向初值mov al,dir_dataout dx,albit_test0:;掃描上

45、升沿mov dx,p8255in al,dxtest al,2 ;測(cè)試8255 PA1,等待PA1=0jz bit_test1 ;PA1=0轉(zhuǎn)jmp bit_test0 ;PA1=1再測(cè)bit_test1:mov dx,p8255in al,dxtest al,2 ; 測(cè)試8255 PA1,等待PA1=1jnz dir_ctl ;有上升沿轉(zhuǎn)jmp bit_test1 ;上升沿沒(méi)到再測(cè)dir_ctl:mov al,dir_data ;方向控制not al ;換向mov dir_data,almov dx,p8255+1 ;8255 B口輸出方向值out dx,almov ah,0bh ;檢查鍵盤

46、int 21hor al,al ;有鍵盤輸入轉(zhuǎn)jnz dir_endjmp bit_test0dir_end:.EXITEND實(shí)驗(yàn)九 A/D轉(zhuǎn)換實(shí)驗(yàn) 一實(shí)驗(yàn)?zāi)康?學(xué)習(xí)模/數(shù)轉(zhuǎn)換器使用方法,理解模/數(shù)轉(zhuǎn)換原理。二實(shí)驗(yàn)內(nèi)容 1給A/D轉(zhuǎn)換器輸入一可調(diào)節(jié)的電壓信號(hào),假設(shè)該輸入信號(hào)為一水塔的水位高度信號(hào),請(qǐng)結(jié)合應(yīng)用8255A接口芯片,編程完成以下功能:當(dāng)水位低于PL時(shí)開(kāi)報(bào)警、并翻開(kāi)水泵點(diǎn)亮一指示燈,水位在PLPH之間時(shí)關(guān)閉報(bào)警,水位高于PH時(shí)開(kāi)報(bào)警、并關(guān)閉水泵指示燈熄滅。設(shè)PH=0B4H 約3.5V,PL=66H 約2.0V。 2用A/D轉(zhuǎn)換器對(duì)電壓信號(hào)V4連續(xù)采集4次,求出均值,放入指定單元;并把采集均值轉(zhuǎn)換為電壓,通過(guò)8255在數(shù)碼管上顯示。三實(shí)驗(yàn)電路及設(shè)計(jì) 1.實(shí)驗(yàn)電路圖.“實(shí)驗(yàn)內(nèi)容1實(shí)驗(yàn)連線 以下連線假設(shè)8255A的A口為輸出方式,8255A的PA6控制一LED燈、8255A的PA7控制報(bào)警風(fēng)鳴器。(1)J18、J19短路塊接到I/O端;(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論