微機(jī)實(shí)驗(yàn)源程序_第1頁
微機(jī)實(shí)驗(yàn)源程序_第2頁
微機(jī)實(shí)驗(yàn)源程序_第3頁
微機(jī)實(shí)驗(yàn)源程序_第4頁
微機(jī)實(shí)驗(yàn)源程序_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目錄TOC\o"1-2"\h\z\u第一章TD-PIT++實(shí)驗(yàn)系統(tǒng)的硬件環(huán)境 1一.概述 1二.系統(tǒng)總線單元電路 3第二章32位微機(jī)原理軟件實(shí)驗(yàn) 15實(shí)驗(yàn)一四那么運(yùn)算 15實(shí)驗(yàn)二均值濾波 18實(shí)驗(yàn)三代碼轉(zhuǎn)換 22實(shí)驗(yàn)四字符串冒泡排序 26實(shí)驗(yàn)五描述符和描述符表實(shí)驗(yàn) 29實(shí)驗(yàn)六局部描述符表實(shí)驗(yàn) 33第三章32位微機(jī)接口硬件實(shí)驗(yàn) 36實(shí)驗(yàn)一地址譯碼電路與I/O接口 36實(shí)驗(yàn)二8254定時(shí)/計(jì)數(shù)器 41實(shí)驗(yàn)三8259中斷控制器 47實(shí)驗(yàn)四8255并口控制器 56實(shí)驗(yàn)五A/D與D/A轉(zhuǎn)換實(shí)驗(yàn) 65第四章32位微機(jī)接口課程設(shè)計(jì) 72課程設(shè)計(jì)一數(shù)據(jù)采集系統(tǒng)一 72課程設(shè)計(jì)二數(shù)據(jù)采集系統(tǒng)二〔查詢法〕 76課程設(shè)計(jì)三數(shù)據(jù)采集系統(tǒng)三〔中斷法〕 80課程設(shè)計(jì)四信號發(fā)生器 85課程設(shè)計(jì)五交通燈實(shí)時(shí)控制系統(tǒng)設(shè)計(jì) 93課程設(shè)計(jì)六步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì) 99附錄1常用DOS系統(tǒng)功能(INT21H) 105第一章TD-PIT++實(shí)驗(yàn)系統(tǒng)的硬件環(huán)境一.概述TD-PIT++實(shí)驗(yàn)系統(tǒng)硬件主要由PCI總線擴(kuò)展卡和TD-PIT++實(shí)驗(yàn)平臺構(gòu)成,其硬件系統(tǒng)的連接接如圖1-1a所示。USB總線USB總線PCI總線內(nèi)存總線總線AGP總線CPU北橋芯片顯卡顯示器內(nèi)存PCI槽PCI槽南橋芯片IED接口硬盤鍵盤鼠標(biāo)FlashBIOSUSB設(shè)備PCI卡微機(jī)實(shí)驗(yàn)箱...圖1-1a硬件系統(tǒng)的連接PCI總線擴(kuò)展卡包括PCI總線接口電路和系統(tǒng)配置電路以及擴(kuò)展總線插座。主要實(shí)現(xiàn)PCI總線接口以及將32位高速總線從PC機(jī)引出。PCI總線擴(kuò)展卡結(jié)構(gòu)如圖1-1所示。圖1-1PCI總線擴(kuò)展卡結(jié)構(gòu)TD-PIT++實(shí)驗(yàn)平臺上的電路結(jié)構(gòu)主要分兩局部:系統(tǒng)總線單元電路和實(shí)驗(yàn)單元電路。是32位微機(jī)接口實(shí)驗(yàn)的主要操作平臺。實(shí)驗(yàn)平臺結(jié)構(gòu)如圖1-2所示。圖1-2實(shí)驗(yàn)平臺結(jié)構(gòu)二.系統(tǒng)總線單元電路準(zhǔn)系統(tǒng)總線單元實(shí)現(xiàn)了面向80x86微機(jī)系統(tǒng)的32位系統(tǒng)總線,符合80x86總線時(shí)序標(biāo)的接口電路均可以直接連接到該總線上??偩€信號說明如表1-1所示。表1-1總線信號實(shí)驗(yàn)系統(tǒng)向PC機(jī)申請了接口實(shí)驗(yàn)所需的配置資源。其中包括16MB的存儲地址空間、255字節(jié)的I/O地址空間和一個(gè)中斷請求線。中斷請求線是映射到PC機(jī)內(nèi)15個(gè)中斷線中的一個(gè)。系統(tǒng)總線單元將地址空間進(jìn)行了譯碼,各提供4個(gè)片選信號,片選信號同偏移地址空間對應(yīng)關(guān)系如表1-2所示。表1-2片選信號同偏移地址空間對應(yīng)關(guān)系用PC機(jī)分配的I/O或存儲器空間始地址加上這個(gè)偏移地址,就是實(shí)驗(yàn)系統(tǒng)中端口占用的實(shí)際地址,I/O和或存儲器地址電原理如圖1-2A所示。PC機(jī)分配的起始地址可以在Tdpit軟件中查看或由實(shí)驗(yàn)系統(tǒng)附帶的配置資源檢查程序CHECK.EXE獲得。圖1-2A1.地址譯碼單元該單元提供一片開放的譯碼器74LS138,用于學(xué)習(xí)地址譯碼方法。其線路連接如圖1-3所示。圖1-3地址譯碼單元2.32位I/O接口單元該單元通過4片三態(tài)緩沖器和4片鎖存器組成32位的I/O接口,并根據(jù)32位總線時(shí)序設(shè)計(jì)了譯碼電路,可以8/16/32位不同字節(jié)寬度來訪問該接口。用于學(xué)習(xí)8位和32位I/O接口設(shè)計(jì)及編程。其線路連接如圖1-4所示。圖1-432位I/O接口單元3.32位存儲器單元該單元提供32位存儲器及其連接電路,并針對32位系統(tǒng)總線提供了存儲器譯碼電路,可以任意完成8位、16位及32位不同字節(jié)寬度的存儲器操作。其線路連接如圖1-5所示。圖1-532位存儲器單元4.FLASHROM單元該單元提供一片開放的FLASH存儲器,用于學(xué)習(xí)FLASH存儲器的編程操作方法。其線路連接如圖1-6所示。圖1-6FLASHROM單元5.8259單元該單元提供中斷控制器8259的連接電路,用于學(xué)習(xí)中斷控制器的操作方法。其線路連接如圖1-7所示。圖1-78259單元6.8237單元該單元提供DMA控制器8237的連接電路,用于學(xué)習(xí)DMA傳送應(yīng)用編程方法。其線路連接如圖1-8所示。圖1-88237單元7.8255單元該單元提供一片開放的并口控制器8255,用于學(xué)習(xí)并行接口8255的編程方法。其線路連接如圖1-9所示。圖1-98255單元8.8251單元該單元提供串行控制器8251的連接電路,用于學(xué)習(xí)串行通訊編程方法。其線路連接如圖1-10所示。圖1-1016550單元9.串行接口單元該單元提供用來將串行通訊信號引出到實(shí)驗(yàn)箱體后側(cè)的接口插座,包含USB和RS232接口。使用USB接口插座時(shí)將VDD、D-、D+和GND四個(gè)信號連接到標(biāo)有USB的插座上。使用RS232串口時(shí)將TXD、RXD信號連接到標(biāo)有RS-232的插座上。其電路結(jié)構(gòu)如圖1-11所示。圖1-1116550單元10.8254單元該單元提供一片開放的定時(shí)/計(jì)數(shù)器8254,用于學(xué)習(xí)定時(shí)/計(jì)數(shù)器的應(yīng)用編程方法。其線路連接如圖1-12所示。圖1-128254單元11.A/D轉(zhuǎn)換單元該單元提供模/數(shù)轉(zhuǎn)換器ADC0809的連接電路,用于學(xué)習(xí)A/D轉(zhuǎn)換原理及編程操作方法。其線路連如圖1-13所示。圖1-1312.D/A轉(zhuǎn)換單元該單元提供數(shù)/模轉(zhuǎn)換器DAC0832的連接電路,用于學(xué)習(xí)D/A轉(zhuǎn)換原理及編程操作方法。其線路連接1-14所示。圖1-14D/A轉(zhuǎn)換單元13.電子發(fā)聲單元該單元提供一個(gè)微型揚(yáng)聲器,控制和驅(qū)動(dòng)電路已經(jīng)連接好。在控制輸入端輸入一定頻率的波形信號即可發(fā)聲。其線路連接電路如圖1-15所示。圖1-15電子發(fā)聲單元14.鍵盤及數(shù)碼管顯示單元該單元提供4×4的小鍵盤矩陣及6位七段數(shù)碼管,電路連接為掃描電路形式。其線路連接如圖1-16所示。圖1-16鍵盤及數(shù)碼管顯示單元15.點(diǎn)陣LED顯示單元該單元使用4片8×8的點(diǎn)陣LED構(gòu)成了一個(gè)16×16點(diǎn)陣顯示模塊,點(diǎn)陣LED的行列控制已經(jīng)連接好。行控制為R0~R15,列控制為L0~L15。其線路連接如圖1-17所示。圖1-17點(diǎn)陣LED顯示單元16.驅(qū)動(dòng)電路和直流電機(jī)單元這兩個(gè)單元由ULN2803驅(qū)動(dòng)芯片、一臺DC12V直流電機(jī)及霍爾測速電路構(gòu)成,N為一組反相驅(qū)動(dòng)信號輸入端。其線路連接如圖1-18所示。圖1-18驅(qū)動(dòng)電路和直流電機(jī)單元17.溫度控制單元該單元由7805芯片產(chǎn)生+5V的穩(wěn)定電壓和一個(gè)24歐的電阻構(gòu)成回路。其線路圖連接如圖1-19所示。圖1-19溫度控制單元18.步進(jìn)電機(jī)單元該單元提供一個(gè)四項(xiàng)八拍的步進(jìn)電機(jī),如圖1-20所示。圖1-20步進(jìn)電機(jī)單元19.開關(guān)及LED顯示單元該單元包括十六組撥動(dòng)開關(guān)及LED顯示燈,用于輸出和指示邏輯電平(正邏輯)。當(dāng)顯示燈亮?xí)r表示邏輯高電平,滅時(shí)表示邏輯低電平。其電路連接如圖1-21所示。圖1-21開關(guān)及LED顯示單元20.時(shí)鐘源單元該單元提供一個(gè)1.8432MHz的晶振電路,主要作為16550時(shí)鐘輸入。另外還有兩個(gè)十分頻電路,將1.8432MHz分頻得到184.32KHz和18.432KHz,如圖1-22所示。圖1-22時(shí)鐘源單元21.PWM轉(zhuǎn)換電路該單元提供了一個(gè)PWM脈沖產(chǎn)生電路,在IN端輸入0~5V電壓,OUT輸出脈沖的占空比會(huì)跟隨產(chǎn)生相應(yīng)的變化。其線路如圖1-23所示。圖1-23PWM轉(zhuǎn)換電路22.?dāng)U展單元該單元由假設(shè)干組排針、單股導(dǎo)線插座和電源引出插座組成,用于將排針形式的電路引腳和單股導(dǎo)線形式的引腳相互轉(zhuǎn)換。從而為各實(shí)驗(yàn)單元的相互配合使用提供方便。另外,還提供了一塊面包板,用戶可以自己在上面搭接電路,通過小圓孔和排針與實(shí)驗(yàn)平臺上的單元連接,擴(kuò)展靈活。23.LCD顯示單元〔選件〕在實(shí)驗(yàn)平臺上的LED顯示單元區(qū)域可以插接擴(kuò)展板。其中一個(gè)可選的擴(kuò)展板就是LCD顯示單元。該單元采用型號為MSC-G12864-5W,一種128×64的圖形點(diǎn)陣液晶,LCD類型為STN,內(nèi)置控制器,配置有LED背光。板上微調(diào)電位器可以調(diào)節(jié)液晶的比照度。其連接電路如圖1-24所示。圖1-24LCD顯示單元第二章32位微機(jī)原理軟件實(shí)驗(yàn)實(shí)驗(yàn)一四那么運(yùn)算一.實(shí)驗(yàn)?zāi)康氖煜R編語言上機(jī)操作過程。熟悉Tddebug調(diào)試環(huán)境和TurboDebugger的使用。3.熟悉匯編語言程序的框架結(jié)構(gòu),掌握順序結(jié)構(gòu)的編程方法。二.實(shí)驗(yàn)內(nèi)容無符號數(shù)的32位加法,32位減法,16位乘以16位,32位除以16位除法的四那么運(yùn)算練習(xí)。實(shí)驗(yàn)源程序DATA SEGMENTA DW1234H,5678H ;被加數(shù)B DW0FEDCH,123AH ;加數(shù)C DW2DUP(?) ;預(yù)留和AD DW0FEDCH,0BA98H ;被減數(shù)BD DW1234H,789AH ;減數(shù)CD DW2DUP(?) ;預(yù)留差A(yù)1 DW0D678H ;被乘數(shù)B1 DW0012H ;乘數(shù)C1 DW2DUP(?) ;預(yù)留積A2 DW5678H,0234H ;被除數(shù)B2 DW0F234H ;除數(shù)C2 DW2DUP(?) ;預(yù)留商,余數(shù)DATA ENDSSTACK1 SEGMENT STACKDB100DUP(?)STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1STARTPROC FAR PUSH DSMOV AX,0;標(biāo)準(zhǔn)序PUSH AXMOV AX,DATAMOV DS,AXMOV AX,A ADD AX,BMOV C,AXMOV AX,A+2;32位加32位ADC AX,B+2MOV C+2,AXMOV AX,AD SUB AX,BDMOV CD,AX;32位減32位MOV AX,AD+2SBB AX,BD+2MOV CD+2,AXMOV AX,A1 MUL B1;16位乘16位MOV C1,AXMOV C1+2,DXMOV AX,A2 MOV DX,A2+2DIV B2;32位除16位MOV C2,AXMOV C2+2,DXRETSTARTENDPCODEENDSENDSTART實(shí)驗(yàn)歩驟1翻開實(shí)驗(yàn)箱電源開關(guān),實(shí)驗(yàn)箱電源指示燈亮。2輸入源程序:單擊文件\新建,在光標(biāo)處輸入源程序,輸完源程序后,單擊工具欄或文件\另存為,選擇存放路徑,輸入文件名.ASM。3編譯程序:單擊工具欄,鏈接程序,在屏幕下方的信息欄窗口顯示編譯信息,假設(shè)有語法錯(cuò)誤,逐一雙擊該行,系統(tǒng)將自動(dòng)定位錯(cuò)誤行,並有紅色的箭頭指向錯(cuò)誤行,逐一修改后存盤,再編譯,直到錯(cuò)誤為零。4連接程序:單擊工具欄,在屏幕下方的信息欄窗口顯示連接信息。5調(diào)試程序:單擊工具欄,單擊View\Cpu,在代碼顯示區(qū)單擊右鍵\點(diǎn)擊MixedBoth,為MixedNo,按F7單歩執(zhí)行,當(dāng)執(zhí)行完MOVDS,AX后,單擊View\Cpu,使屏幕下方的數(shù)據(jù)顯示區(qū)為DS的內(nèi)容:(1)單歩執(zhí)行:按F7,,觀察調(diào)試過程中,指令執(zhí)行后各存放器及數(shù)據(jù)區(qū)的內(nèi)容變化。(2)執(zhí)行到光標(biāo)處:將光標(biāo)移到所需處並單擊,使之成為蘭底白字的光帶,按F4,觀察執(zhí)行最后一條指令執(zhí)行后存放器及數(shù)據(jù)區(qū)的內(nèi)容。(3)連續(xù)執(zhí)行:按F9,觀察最后一條指令執(zhí)行后存放器及數(shù)據(jù)區(qū)的內(nèi)容。實(shí)驗(yàn)報(bào)告內(nèi)容1.實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2.記錄數(shù)據(jù)段存放的原始數(shù)據(jù),和程序執(zhí)行結(jié)束后的數(shù)據(jù)。DS:0000DS:0008DS:0010DS:0018DS:0020DS:00283.寫岀和、差、積、商、余數(shù)運(yùn)算結(jié)果。如:56781234H+123AFEDCH=0BA98FEDCH-789A1234H= 0D687H×0012H= 02345678H÷0F234H=4.心得體會(huì)和建議。實(shí)驗(yàn)二均值濾波一.實(shí)驗(yàn)?zāi)康?.掌握在數(shù)據(jù)表中找最大、最小數(shù)的方法。2.學(xué)會(huì)子程序的使用方法,參數(shù)傳遞的方法,掌握分支程序,循環(huán)程序的設(shè)計(jì)方法。3.熟悉Tddebug調(diào)試環(huán)境和TurboDebugger的使用。二.實(shí)驗(yàn)內(nèi)容均值濾波算法:對N(2<N<256)個(gè)無符號數(shù),去掉一個(gè)最大值、最小值,然后求其平均值,其中最大值,最小值的査找通過分別調(diào)用子程序SMAX和SMIN實(shí)現(xiàn)。三.程序流程圖主程序流程圖如下圖2-2-1,SMAX子程序流程圖如圖2-2-2所示,SMIN子程序流程圖與SMAX類似。圖圖2-2-2圖2-2-1主程序流程是否N否是開始找最大值,找最小值CALLSMAX,SMIN求N個(gè)數(shù)之和減去最大值,最小值除以(N-2),求平均值結(jié)束初始化AL=[SI]保存最大值CX-1=0?SI=SI+1AL≥[SI]?返回四.參考源程序STACK1SEGMENTSTACKDB100DUP(?)STACK1ENDSDATASEGMENTAVERAGEDB?NUMDB12H,34H,56H,78H,90H,21H,43H,65H,87H,09HL_NUMEQU$-NUMMAXNUMDB?MINNUMDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1STARTPROC FARPUSH DS;標(biāo)準(zhǔn)序XOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV SI,OFFSETNUMMOV DI,OFFSETMAXNUM;求最大數(shù)MOV CX,L_NUMCALL SMAX MOV SI,OFFSETNUMMOV DI,OFFSETMINNUM;求最小數(shù)MOV CX,L_NUMCALL SMINMOV CX,L_NUMXOR AX,AXMOV SI,OFFSETNUMNEXT:ADD AL,[SI];求N??數(shù)之和ADC AH,0INC SILOOP NEXTMOV BH,0 MOV BL,MAXNUM;減去最大值SUB AX,BXMOV BL,MINNUM ;減去最小值SUB AX,BXMOV CL,L_NUM SUB CL,2;求均值DIV CLMOV AVERAGE,AL ;平均值存放在AVERAGE中RETSTARTENDPSMAXPROC MOV AL,0 NEXT1:CMP AL,[SI]JNC NEXT2MOV AL,[SI];求最大數(shù)子程序NEXT2:INC SILOOP NEXT1MOV [DI],ALRETSMAXENDPSMINPROC MOV AL,0FFH NEXT3:CMP AL,[SI]JC NEXT4MOV AL,[SI];求最小數(shù)子程序NEXT4:INC SILOOP NEXT3MOV [DI],ALRETSMINENDPCODEENDSEND START五.實(shí)驗(yàn)歩驟1同實(shí)驗(yàn)一實(shí)驗(yàn)歩驟1~4。2調(diào)試程序:單擊工具欄,單擊View\Cpu,在代碼顯示區(qū)單擊右鍵\點(diǎn)擊MixedBoth,為MixedNo,按F7單歩執(zhí)行,當(dāng)執(zhí)行完MOVDS,AX后,單擊View\Cpu,使屏幕下方的數(shù)據(jù)顯示區(qū)為DS的內(nèi)容:(1)用單歩和執(zhí)行到光標(biāo)處相結(jié)合,調(diào)試求最大值子程序,觀察指令執(zhí)行后各存放器及數(shù)據(jù)區(qū)的內(nèi)容。(2)用執(zhí)行到光標(biāo)處,調(diào)試求最小值子程序,觀察指令執(zhí)行后數(shù)據(jù)區(qū)最小值的內(nèi)容。(3)用連續(xù)執(zhí)行方式調(diào)試求平均值。3修改源程序,用同一個(gè)子程序求出最大值、最小值。六.實(shí)驗(yàn)報(bào)告1、實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2、記錄主程序、子程序SMAX、子程序SMIN的起始地址和結(jié)束地址。地址主程序子程序SMAX子程序SMIN起始地址結(jié)束地址3、記錄數(shù)據(jù)段中存放的的10個(gè)原始數(shù)據(jù)、最大數(shù)、最小數(shù)及平均數(shù)。DS:0000DS:00084、記錄剛進(jìn)入SMAX時(shí),壓入堆棧的內(nèi)容,它就是從子程序SMAX返回主程序的地址。執(zhí)行CALLSMAX前IP=SP執(zhí)行CALLSMAX后IP=SP執(zhí)行RET前IP=SP執(zhí)行RET后IP=SP執(zhí)行CALLSMAX前IP=SP執(zhí)行CALLSMAX前IP=SP執(zhí)行RET前IP=SP執(zhí)行RET后IP=SP5、最大值=?最大值=?平均值=?6、心得體會(huì)和建議。實(shí)驗(yàn)三代碼轉(zhuǎn)換一.實(shí)驗(yàn)?zāi)康?.掌握代碼轉(zhuǎn)換的根本方法。2.學(xué)會(huì)INT21功能調(diào)用,掌握人機(jī)對話的設(shè)計(jì)方法。3.進(jìn)一歩熟悉Tddebug調(diào)試環(huán)境和TurboDebugger的使用。二.實(shí)驗(yàn)內(nèi)容從鍵盤輸入小寫字母(最多20個(gè)),以“.〞號作為結(jié)束標(biāo)志,在屏幕上輸岀相應(yīng)的大寫字母。用INT21中的09H號功能實(shí)現(xiàn)輸出對話,0AH號功能實(shí)現(xiàn)輸入對話。輸入小寫字母用INT21的0AH號功能,將讀入的數(shù)據(jù)存放在緩沖區(qū)SMALL中,其中SMALL的笫一個(gè)字節(jié)指岀緩沖區(qū)能容納的字符數(shù),不能為0(程序暫定為50),第二個(gè)字節(jié)保存,以用作存放實(shí)際鍵入的輸入字符的個(gè)數(shù);從笫三個(gè)字節(jié)開始存放從鍵盤上接受的字符,所以轉(zhuǎn)換時(shí)要從SMALL的笫三個(gè)字節(jié),即SMALL+2開始。SMALL中存放的是小寫字母的ASSII碼,將此值減去20H,即為大寫字母的ASSII碼,將其依次存放在名為CAPITAL的數(shù)據(jù)段中,然后用INT21中的09H功能輸出。三.程序流程圖主程序流程圖如下圖2-3-1。否否否是輸岀提示信息從鍵盤輸入小寫字母回車換行CX=20字符=“·〞?變換成大寫字母存入輸岀緩沖區(qū)CX-1=0?輸岀緩沖區(qū)以“$〞結(jié)尾顯示大寫字母返回DOS是圖2-3-1四.源程序CRLFMACRO MOV DL, 0DHMOV AH, 02H INT 21HMOV DL, 0AH ;宏定義了回車,換行的ASCII碼MOV AH, 02HINT 21HENDMDATASEGMENTMES1DB'PLEASEINPUTTHESMALLLETTER,ENDEDWITH".":$'MES2DB'THECAPTALLETTERIS:$'SMALL1DB50 ;預(yù)留鍵盤輸入緩沖區(qū)長度為50個(gè)DB? ;預(yù)留實(shí)際鍵盤輸入字符的個(gè)數(shù)DB50DUP(?)CAPITALDB50DUP(?);預(yù)留大寫字母緩沖區(qū)長度為50個(gè)DATAENDSSTACK1SEGMENTSTACKDB100DUP(?)STACK1ENDSCODESEGMENTSTARTPROC FARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXMOV AH, 9 MOV DX, OFFSETMES1;輸岀提示信息EMS1INT 21HCRLF ;宏調(diào)用MOV AH, 0AHMOV DX,OFFSETSMALL1 ;接收小寫字符串INT 21HCRLFMOV BX, OFFSETSMALL1MOV DI, OFFSETCAPITALMOV CX, 20NEXT:MOV AL,[BX+2]MOV AH, ALCMP AL, 2EH ;小寫字母ASCII碼字符串JE KE;轉(zhuǎn)換成大寫字母ASCII碼字符串SUB AL, 20HMOV [DI],ALINC BXINC DILOOP NEXTKE:INC DI MOV AL, '$';大寫字符串后加“$〞MOV [DI],ALMOV DX, SEGMES2 MOV DS, DXMOV DX, OFFSETMES2;輸岀提示信息EMS2MOV AH, 9INT 21HCRLFMOV DX, OFFSETCAPITALMOV AH, 9;輸岀大寫字符串INT 21HRETSTARTENDPCODEENDSEND START五.實(shí)驗(yàn)歩驟1同實(shí)驗(yàn)一實(shí)驗(yàn)歩驟1~4;注意:(1)本程序在結(jié)構(gòu)上不完整,需自行修改源程序后才能匯編通過;(2)程序正確運(yùn)行應(yīng)是根據(jù)屏幕提示信息,從鍵盤輸入小寫字母,且“.〞號作為結(jié)束標(biāo)志,然后在屏幕上輸岀大寫字母提示信息和相應(yīng)的大寫字母,但源程序不能按這種方式運(yùn)行,需自行修改源程序后才能正確運(yùn)行。2調(diào)試程序:單擊工具欄,單擊View\Cpu,在代碼顯示區(qū)單擊右鍵\點(diǎn)擊MixedBoth,為MixedNo,按F7單歩執(zhí)行,當(dāng)執(zhí)行完MOVDS,AX后,單擊View\Cpu,使屏幕下方的數(shù)據(jù)顯示區(qū)為DS的內(nèi)容:3.分別用執(zhí)行到光標(biāo)處,連續(xù)執(zhí)行二種方法調(diào)試,觀察調(diào)試過程中,指令執(zhí)行后各存放器及數(shù)據(jù)區(qū)的內(nèi)容。4.修改源程序,對輸入的非法字符進(jìn)行處理。六.實(shí)驗(yàn)報(bào)告1、實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2、顯示MES1的信息修改后的局部源程序。3、數(shù)據(jù)段存放的鍵盤輸入的小寫字母的ASCII碼和轉(zhuǎn)換成大寫字母的ASCII碼。DS:040DS:048DS:050DS:058DS:078DS:080DS:088DS:0904、在屏幕顯示相應(yīng)的大寫字母。5、心得體會(huì)和建議。實(shí)驗(yàn)四字符串冒泡排序一.實(shí)驗(yàn)?zāi)康?.進(jìn)一歩掌握主、子程序設(shè)計(jì)方法。2.掌握人機(jī)對話的設(shè)計(jì)方法。3.進(jìn)一歩熟悉Tddebug調(diào)試環(huán)境和TurboDebugger的使用。4.掌握冒泡排序的一種方法。二.實(shí)驗(yàn)內(nèi)容試設(shè)計(jì)名為“TITLEBOBBLESORT〞冒泡程序,當(dāng)屏幕上顯示一行“PLESAEENTRYSTR1NG〞提示信息,屏幕上立即在下一行輸入字符串;程序用冒泡法對字符串以ASCII碼的值按升序來排序,屏幕在下一行顯示這個(gè)排序好的字符串。三.程序思路冒泡法排序有多種算法,本程序采用的是循環(huán)次數(shù)固定法,設(shè)有N個(gè)元素串,首先把笫一個(gè)元素送入AL,並設(shè)定其為“當(dāng)前最小值〞單元,然后和剩下的(N-1)個(gè)元素值比擬,假設(shè)有一個(gè)元素比它小,那么兩個(gè)元素互換,經(jīng)(N-1)次比擬,“當(dāng)前最小值〞單元是N個(gè)元素的最小值,之后再把它寫回到笫一個(gè)元素的位置,即冒出了一個(gè)最輕的泡,如此下去,順序冒出(N-1)個(gè)泡后,N個(gè)元素就排序好了。四.程序清單;TITLEBUBBLFSORTSTACK1SEGMENTSTACKDB64DUP(0)STACK1 ENDSDATA SEGMENTPROMPTDB0DH,0AH,'PLEASEENTRYSTRING',0DH,0AH,'$';顯示提示信息CRLFDB0DH,0AH,'$' ;回車,換行,顯示數(shù)據(jù)CHARLABELBYTE ;輸入緩沖區(qū)結(jié)構(gòu)CHARHDB60 ;緩沖區(qū)大小CHARNDB? ;字符記數(shù)CHARFDB60DUP(?) ;緩沖區(qū)空間DATAENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1BEGINPROCFARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXAGAIN: LEA DX, PROMPT MOV AH, 9;9號功能調(diào)用,顯示提示信息INT 21HLEA DX, CHAR MOV AH, 0AH ;0AH號功能調(diào)用INT 21HMOV CL, CHARN ;輸入字符數(shù)送CLOR CL, CL ;假設(shè)字符數(shù)為0,那么退回DOS系統(tǒng)JZ DONECALL SORT ;否那么,排序並顯示JMP AGAINDONE: RETBEGIN ENDPSORT PROC ;冒泡法排序子程序XOR CH, CH ;字符串長度為CL值MOV BX, CXMOV SI, OFFSETCHARF MOV BYTEPTR[SI+BX],'$';在輸入緩沖區(qū)的串后參加一個(gè)$CLDBIGLOOP:MOV AL,[SI] ;以AL為“當(dāng)前最小值〞單元DEC CX ;CX為比擬計(jì)數(shù)??JCXZ EXIT ;假設(shè)CX為0,表示已排好序PUSH CX ;保存CXINC SI ;取下一單元地址PUSH SISMALLOOP:CMPAL, [SI] ;取一個(gè)元素與“當(dāng)前最小值〞單元比擬JBE NEXT ;假設(shè)該元素值小,那么交換位置XCHG AL, [SI]NEXT: INC SILOOP SMALLOOP;循環(huán),使“當(dāng)前最小值〞確實(shí)為最小POP SI ;SI為余下的笫一個(gè)字符MOV [SI-1], AL ;冒岀一個(gè)泡,寫回隊(duì)列中POP CX ;CX為余丈的字符個(gè)數(shù)JMP BIGLOOP ;繼續(xù)求余下字符中的最小值EXIT: MOV DX,OFFSETCRLF ;巳排好序,先回車換行MOV AH,9INT 21HMOV DX,OFFSETCHARF ;顯示排好序的字符串MOV AH,9INT 21HRETSORTENDPCODEENDSENDBEGIN五.實(shí)驗(yàn)要求1、同實(shí)驗(yàn)一實(shí)驗(yàn)歩驟1~4。2、對實(shí)驗(yàn)程序進(jìn)行匯編、連接。3、調(diào)試程序,分別用執(zhí)行到光標(biāo)處,連續(xù)執(zhí)行二種方法調(diào)試,觀察調(diào)試過程中,指令執(zhí)行后數(shù)據(jù)區(qū)的內(nèi)容。4、連續(xù)執(zhí)行程序,觀察運(yùn)行結(jié)果。六.實(shí)驗(yàn)報(bào)告1、實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2、數(shù)據(jù)段存放的鍵盤輸入的ASCII碼和屏幕顯示的字符串。3、在屏幕顯示排好序的字符串。4、心得體會(huì)和建議。實(shí)驗(yàn)五描述符和描述符表實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康?1)熟悉保護(hù)模式的編程格式。(2)掌握描述符的聲明方法。(3)掌握使用選擇符訪問段的尋址方法。二.實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)在一個(gè)0級代碼段中將源數(shù)據(jù)段中的一段數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)段中。其中所有段的段描述符均放置在GDT中。1.實(shí)驗(yàn)分析為了實(shí)現(xiàn)在0級代碼段中完成數(shù)據(jù)傳輸,實(shí)驗(yàn)程序中需要安排一個(gè)0級代碼段和兩個(gè)0級數(shù)據(jù)段〔可以是0~3級任一級別的數(shù)據(jù)段〕。在程序開始聲明一個(gè)數(shù)據(jù)段‘DSEG’,來描述這三個(gè)段的描述符,其中有代碼段描述符Scode,源數(shù)據(jù)段描述符DataS和目標(biāo)數(shù)據(jù)段描述符DataD,將它們相應(yīng)的選擇子分別定義為Scode_Sel,DataS_Sel,DataD_Sel。按照實(shí)驗(yàn)程序編寫格式的約定及描述符的格式定義,為這三個(gè)段分別定義描述符:(1)代碼段描述符:ScodeDesc<Clen,CSEG,,ATCE,,>;段屬性說明:G: 0;以字節(jié)為段界限粒度D: 0;是16位的段P: 1;描述符對地址轉(zhuǎn)換有效/該描述符對應(yīng)的段存在DPL:0;0級段DT:1;描述符描述的是存儲段TYPE:0x8;只執(zhí)行段段基地址說明:定義代碼段的標(biāo)號為CSEG,那么在段基地址處填寫CSEG,為調(diào)試器提供重定位信息。段界限說明:段界限定義為Clen。(2)源數(shù)據(jù)段描述符:DataSDesc<DLEN,DSEG1,,ATDW,,>;段屬性說明:G: 0;以字節(jié)為段界限粒度D: 0;是16位的段P:1;描述符對地址轉(zhuǎn)換有效/該描述符對應(yīng)的段存在DPL:0;0級段DT:1;描述符描述的是存儲段TYPE:0x2;可讀寫段段基地址說明:定義源數(shù)據(jù)段標(biāo)號為DSEG1,那么在段基地址處填寫CSEG,為調(diào)試器提供重定位信息。段界限說明:定義段界限為DLEN。(3)目標(biāo)數(shù)據(jù)段描述符:DatadDesc<BUFLEN,DSEG2,,ATDW,,>目標(biāo)數(shù)據(jù)段描述符的內(nèi)容根本與源數(shù)據(jù)段的內(nèi)容相同,只要修改段基地址和段界限的定義即可。為了給裝入程序提供重定位信息,三個(gè)存儲段描述符中地址的低16位,用每個(gè)描述符對應(yīng)段的標(biāo)號來填寫。在程序裝入內(nèi)存時(shí),調(diào)試系統(tǒng)會(huì)根據(jù)地址的低16位定位該段對應(yīng)的真實(shí)物理地址,并將該地址寫入描述符中〔系統(tǒng)沒有使用分頁機(jī)制,線性地址等價(jià)于物理地址〕。在實(shí)驗(yàn)中可查詢GDT表來確定每個(gè)段的真實(shí)物理地址。在程序定義過程中,首先使用一個(gè)全“F〞的描述符作為定義的開始,然后定義代碼段描述符Scode、源數(shù)據(jù)段的描述符DSEG1和目標(biāo)數(shù)據(jù)段描述符DSEG2。為了區(qū)分LDT表和GDT表的定義,再使用一個(gè)全“F〞的描述符作為界限。由于本實(shí)驗(yàn)中不使用LDT表,那么再使用一個(gè)全“F〞的描述符結(jié)束描述符的聲明。本程序可實(shí)現(xiàn)將一個(gè)數(shù)據(jù)段中數(shù)據(jù)搬移到另一個(gè)數(shù)據(jù)段的過程。傳輸過程中可使用DS,ES兩個(gè)段存放器,其中DS裝入源數(shù)據(jù)段的選擇符DataS_Sel,ES裝入目標(biāo)數(shù)據(jù)段的選擇符DataD_Sel。在實(shí)驗(yàn)程序的最后使用“INT0FFH〞指令,正常結(jié)束程序運(yùn)行。三.實(shí)驗(yàn)步驟(1)進(jìn)入純DOS環(huán)境,運(yùn)行Tddebug集成操作軟件。(2)運(yùn)行Tddebug軟件,使用Alt+E選擇Edit菜單項(xiàng)進(jìn)入程序編輯環(huán)境。按實(shí)驗(yàn)要求編寫程序。實(shí)驗(yàn)參考流程圖如圖2-5-1.(3)程序編寫完后保存退出,使用Alt+C選擇Compile菜單中的Compile和Link命令對實(shí)驗(yàn)程序進(jìn)行編譯、連接。(4)編譯輸出信息表示無誤后,使用Alt+P選擇Pmrun命令裝入實(shí)驗(yàn)程序,如果裝入成功,屏幕上會(huì)顯示“LoadOK!〞,否那么,會(huì)給出相應(yīng)的錯(cuò)誤提示信息。(5)假設(shè)程序裝入成功,那么進(jìn)入保護(hù)模式調(diào)試環(huán)境。在命令輸入行使用GDT命令查詢系統(tǒng)的GDT表,并且查看實(shí)驗(yàn)程序中聲明的代碼段、數(shù)據(jù)段描述符在GDT表中的位置以及對應(yīng)段的物理地址、段屬性、段界限等。(6)使用F7單步執(zhí)行程序,執(zhí)行LLDTAX語句后,使用LDT命令查看LDT局部描述符表的內(nèi)容。(7)根據(jù)LDT內(nèi)容使用D命令查看源數(shù)據(jù)區(qū)的數(shù)據(jù)和目的數(shù)據(jù)區(qū)數(shù)據(jù)內(nèi)容。(8)按F9運(yùn)行程序,如果程序正常運(yùn)行結(jié)束,命令顯示區(qū)中將顯示“CorrectRunning〞。(9)運(yùn)行結(jié)束后,再次查看目的數(shù)據(jù)區(qū)內(nèi)容,觀察數(shù)據(jù)傳輸是否正確。四.程序流程圖全局描述符表實(shí)驗(yàn)參考流程圖見圖2-5-1描述GDT表項(xiàng)描述GDT表項(xiàng)聲明各數(shù)據(jù)段描述符輸在0級代碼段中實(shí)現(xiàn)數(shù)據(jù)傳輸調(diào)用INT0FFH返回調(diào)試系統(tǒng)結(jié)束圖2-5-1五.參考實(shí)驗(yàn)程序.386PDESCSTRUC ;定義描述符結(jié)構(gòu) LIMITL DW0 BASEL DW0 BASEM DB0 ATTR DB0 LIMITH DB0 BASEH DB0DESCENDS ATCE=98H ;定義特殊常量 ATDR=90H ATDW=92HDSEG SEGMENT USE16 ;聲明開始初始化GDT表中的描述符 GDT LABEL BYTE ID1 DESC<0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH>;標(biāo)記1 ID2 DESC<0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH>;標(biāo)記2 ID3 DESC<0FFFFH,0FFFFH,0FFH,0FFH,0FFH,0FFH>;標(biāo)記3 SCODE DESC<0FFFFH,CSEG,,ATCE,,> ;代碼段描述符 DATAS DESC<D1LEN,DSEG1,,ATDW,,> ;源數(shù)據(jù)段描述符 DATAD DESC<BUFLEN-1,DSEG2,,ATDW,,>;目標(biāo)數(shù)據(jù)段描述符 GDTLEN=$-GDT ;目標(biāo)數(shù)據(jù)段描述符 SCODE_SEL=SCODE-GDT ;代碼段選擇子 DATAS_SEL=DATAS-GDT ;源數(shù)據(jù)段選擇子 DATAD_SEL=DATAD-GDT ;目標(biāo)數(shù)據(jù)段選擇子DSEG ENDSDSEG1 SEGMENT USE16 ;定義源數(shù)據(jù)段 BUF DB00H,11H,22H,33H,44H,55H,66H,77H DB88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH DB240DUP(0) D1LEN=$-1DSEG1 ENDSDSEG2 SEGMENT USE16 ;定義目標(biāo)數(shù)據(jù)段 BUFLEN=256 BUFFER DB BUFLENDUP(0)DSEG2ENDSCSEG SEGMENT USE16ASSUMECS:CSEG, DS:DSEGSTART PROC MOVAX,DATAS_SEL ;裝入源數(shù)據(jù)段選擇子 MOVDS,AX MOVAX,DATAD_SEL ;裝入目標(biāo)數(shù)據(jù)段選擇子 MOVES,AX CLD XORSI,SI XORDI,DI MOVCX,32M1: MOVSB LOOPM1 INT0FFH ;返回調(diào)試系統(tǒng)STARTENDPCLEN=$-1CSEGENDSENDSTART實(shí)驗(yàn)六局部描述符表實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康模?熟悉編程格式,掌握通過ldt表訪問段的編程方法本實(shí)驗(yàn)與上一實(shí)驗(yàn)所完成的功能相同,但要求將代碼段安排在全局描述符表中,而將數(shù)據(jù)段安排在局部描述符表中。二.實(shí)驗(yàn)分析本實(shí)驗(yàn)需要為代碼段和數(shù)據(jù)段分別聲明描述符,由于要求將數(shù)據(jù)段的描述符放入LDT表中,所以實(shí)驗(yàn)程序需要建立一張局部描述符表,并在GDT表中聲明LDT表對應(yīng)的描述符。描述符聲明完成,還需要為它們定義相應(yīng)的選擇子。實(shí)驗(yàn)程序在DSEG段中描述GDT表中的描述符。先用一個(gè)全“F〞的描述符作為定義的開始,然后定義主程序段和LDT表描述符,然后使用一個(gè)全“F〞的描述符作為區(qū)分于LDT表的界限。在DSEG段后,用DSEG1段來描述LDT表中的描述符,其中包括源數(shù)據(jù)段描述符目標(biāo)數(shù)據(jù)段描述符。在DSEG1段的末尾再使用一個(gè)全“F〞描述符作為描述符聲明的結(jié)尾。由于主代碼段需要訪問的段是在LDT表中聲明的,所以在程序的初始需要執(zhí)行裝載LDTR的指令。裝載LDT表使用的指令如下:MOVAX,LDT_SelLLDTAX(1)LDT表對應(yīng)段描述符:LDTableDesc<LDTLen-1,DSEG1,,ATLDT,,>段屬性說明:G:0;以字節(jié)為段界限粒度D:0;是16位的段P:1;描述符對地址轉(zhuǎn)換有效/該描述符對應(yīng)的段存在DPL:0;0級段DT:0;描述符描述的是系統(tǒng)段或門描述符TYPE:0x8;LDT表段基地址說明:需要在重定位后確定,但可以知道,該描述符對應(yīng)的數(shù)據(jù)段是DSEG1段界限說明:段界限為LDTLen-1ATLDTEQU82h;局部描述符表段類型值(2)數(shù)據(jù)段選擇子實(shí)驗(yàn)中的兩個(gè)數(shù)據(jù)段均在LDT表中聲明,那么描述符對應(yīng)的段選擇符應(yīng)該標(biāo)記出來TILEQU04hDataS_Sel=DataS-LDT+TILDataD_Sel=DataD-LDT+TIL三.實(shí)驗(yàn)步驟(1)進(jìn)入純DOS環(huán)境,運(yùn)行Tddebug集成操作軟件。(2)運(yùn)行Tddebug軟件,使用Alt+E選擇Edit菜單項(xiàng)進(jìn)入程序編輯環(huán)境。按實(shí)驗(yàn)要求編寫程序。實(shí)驗(yàn)參考流程圖如下圖2-6-1。(3)程序編寫完后保存退出,使用Alt+C選擇Compile菜單中的Compile和Link命令對實(shí)驗(yàn)程序進(jìn)行編譯、連接。(4)編譯輸出信息表示無誤后,使用Alt+P選擇Pmrun命令裝入實(shí)驗(yàn)程序,如果裝入成功,屏幕上會(huì)顯示“LoadOK!〞,否那么,會(huì)給出相應(yīng)的錯(cuò)誤提示信息。(5)假設(shè)程序裝入成功,那么進(jìn)入保護(hù)模式調(diào)試環(huán)境。在命令輸入行使用GDT命令查詢系統(tǒng)的GDT表,并且查看實(shí)驗(yàn)程序中聲明的代碼段、數(shù)據(jù)段描述符在GDT表中的位置以及對應(yīng)段的物理地址、段屬性、段界限等。(6)使用F7單步執(zhí)行程序,執(zhí)行LLDTAX語句后,使用LDT命令查看LDT局部描述符表的內(nèi)容。(7)根據(jù)LDT內(nèi)容使用D命令查看源數(shù)據(jù)區(qū)的數(shù)據(jù)和目的數(shù)據(jù)區(qū)數(shù)據(jù)內(nèi)容。(8)按F9運(yùn)行程序,如果程序正常運(yùn)行結(jié)束,命令顯示區(qū)中將顯示“CorrectRunning〞。(9)運(yùn)行結(jié)束后,再次查看目的數(shù)據(jù)區(qū)內(nèi)容,觀察數(shù)據(jù)傳輸是否正確。四.程序流程圖描述符GDT表項(xiàng)描述符GDT表項(xiàng)描述符LDT表項(xiàng)聲明各數(shù)據(jù)段描述符在0級主代碼段中裝載LDT在0級代碼段中實(shí)現(xiàn)數(shù)據(jù)傳輸調(diào)用INT0FFH返回調(diào)試系統(tǒng)結(jié)束圖2-6-1五.參考實(shí)驗(yàn)程序;實(shí)驗(yàn)結(jié)果: 可以用dump命令檢查數(shù)據(jù)區(qū),驗(yàn)證程序的運(yùn)行結(jié)果;編程考前須知: ldt表所在段對應(yīng)的描述符必須在gdt表中聲明,程序起始代碼段對應(yīng)描,述符也應(yīng)該在gdt表中聲明INCLUDE 386SCD.INCDSEG SEGMENTuse16GDT LABELBYTE ;全局描述符表ID1 Desc<0ffffh,0ffffh,0ffh,0ffh,0ffh,0ffh>;空描述符Mcode Desc<0ffffh,CSEG,,ATCE,,> ;代碼段描述符LDTable Desc<LDTLen-1,DSEG1,,ATLDT,,> ;局部描述符表段的描述符GDTLen =$-GDT ;全局描述符表長度MCode_Sel =MCode-GDTLDT_Sel =LDTable-GDT ;局部描述符表段的選擇子ID2 Desc<0ffffh,0ffffh,0ffh,0ffh,0ffh,0ffh>DSEG ENDS ;數(shù)據(jù)段定義結(jié)束DSEG1 SEGMENTuse16LDT LABEL BYTE ;局部描述符表DataS Desc<0ffffh,0,11h,ATDW,,> ;源數(shù)據(jù)段描述符DataD Desc<0ffffh,Dseg2,,ATDW,,> ;目標(biāo)數(shù)據(jù)段描述符DataS_Sel =DataS-LDT+TILDataD_Sel =DataD-LDT+TILLDTLen =$-LDT;局部描述符表長度ID3 Desc<0ffffh,0ffffh,0ffh,0ffh,0ffh,0ffh>DSEG1 ENDSDseg2 Segmentuse16BufLen =256;緩沖區(qū)字節(jié)長度Buffer DBBufLenDUP(0);緩沖區(qū)Dseg2 endsCSEG SEGMENTuse16;16位代碼段ASSUMECS:CSEGStart PROC mov ax,LDT_Sel lldt axmovax,DataS_Selmovds,ax;加載源數(shù)據(jù)段描述符movax,DataD_Selmoves,ax;加載目標(biāo)數(shù)據(jù)段描述符cldxorsi,sixordi,di;設(shè)置指針初值movcx,BufLen/4;設(shè)置4字節(jié)為單位的緩沖區(qū)長度repzmovsd;傳送 int 0ffhStartENDPCSEGENDS;代碼段定義結(jié)束ENDStart第三章32位微機(jī)接口硬件實(shí)驗(yàn)實(shí)驗(yàn)一地址譯碼電路與I/O接口一、實(shí)驗(yàn)?zāi)康?1)學(xué)習(xí)3-8譯碼器在接口電路中的應(yīng)用。(2)掌握地址譯碼電路的一般設(shè)計(jì)方法。二、實(shí)驗(yàn)設(shè)備PC微機(jī)一臺、TD-PIT++實(shí)驗(yàn)系統(tǒng)一套。三、實(shí)驗(yàn)內(nèi)容用74LS138譯碼器設(shè)計(jì)地址譯碼電路,Y7作為根本輸入/輸出單元的片選信號。1.讀入74LS245輸入的八位數(shù)據(jù),在74LS574上輸出,用八位LED顯示開關(guān)狀態(tài)。2.當(dāng)有鍵按下,且讀入的數(shù)字量為1,那么八位LED從右向左依次循點(diǎn)亮,否那么重讀數(shù)字量。3.再有鍵按下,且讀入的數(shù)字量為2,那么八位LED交替亮,否那么重讀數(shù)字量。4.再有鍵按下返回。四、實(shí)驗(yàn)原理微機(jī)接口電路中,常采用74LS138譯碼器來實(shí)現(xiàn)I/O端口或存儲器的地址譯碼。74LS138有3個(gè)輸入引腳、3個(gè)控制端A、B、C及8個(gè)輸出引腳,其管腳信號如下圖3-1-1。當(dāng)3個(gè)控制信號有效時(shí),來確定那個(gè)輸出端為低電平,而其它輸出端為高電平,該低電平信號即可作為片選信號。32位擴(kuò)展系統(tǒng)總線上有一個(gè)/IOM信號,該信號為低電平時(shí)表示當(dāng)前操作為I/O操作,為高電平指示當(dāng)前操作為存儲器操作,它和譯碼器不同的連接可以用來區(qū)分是I/O端口譯碼還是存儲器端口譯碼。32位總線地址是由A2開始,所以地址是以4字節(jié)邊界對齊的。實(shí)驗(yàn)系統(tǒng)的I/O地址空間共有256字節(jié),偏移地址一般從00H~FFH。起始地址由PC機(jī)系統(tǒng)分配,可以用CHECK程序讀出。所以設(shè)計(jì)地址譯碼電路,主要是針對低8位地址線譯碼,得到偏移在00H~FFH之間的端口。本實(shí)驗(yàn)要求不使用總線上的片選信號,自行設(shè)計(jì)端口偏移地址分別為0C0H~0DFH和0E0H~0FFH的譯碼電路,然后用譯碼輸出作為根本輸入輸出單元的片選。編寫程序,完成I/O數(shù)據(jù)操作。實(shí)驗(yàn)電原理框圖如下圖3-1-1。圖3-1-四、流程圖及實(shí)驗(yàn)步驟地址譯碼電路與I/O接口設(shè)計(jì)流程圖如下圖3-1-2。YNYNYNYNNNNYNNYNN??初始化讀入八位開關(guān)量輸岀八位數(shù)據(jù)有鍵按下嗎?結(jié)束讀入八位開關(guān)量有鍵按下嗎?AL=1?AL=2?讀入八位開關(guān)量八位LED左循環(huán)點(diǎn)亮有鍵按下嗎?八位LED交替亮圖3-1-實(shí)驗(yàn)步驟:1.按圖3-1-1所示連接實(shí)驗(yàn)線路。2.32位I/O接囗單元自檢(1)點(diǎn)擊工具欄c:\(2)C:\TangDu\PitPP\Asm1>DEBUGI30E0;讀入當(dāng)前八位開關(guān)狀態(tài),改變八位開關(guān)狀態(tài),開關(guān)量亦不同O30E0FF;八位LED全亮Q;退岀自檢(3)返回WINDOWSC:\TangDu\PitPP\Asm1>EXIT3.編譯鏈接。4.運(yùn)行程序,撥動(dòng)開關(guān),觀看LED顯示是否正確。五、參考程序IOY0 EQU3000H ;片選IOY0對應(yīng)的端口始地址Y7 EQUIOY0+0E0H;譯碼電路輸出Y7對應(yīng)的端口地址DATASEGMENTNUM DB 01HDATA ENDSSTACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX, DATA MOV DS, AXMOV DX, Y7;讀入開關(guān)量IN AL, DXOUT DXMOV DL,0FFHMOV AH, 6;判斷是否有按鍵按下INT 21HJZ START;無按鍵那么跳回繼續(xù)循環(huán),有那么退出 L1: MOV DX,Y7 IN AL,DX;讀入開關(guān)量,判斷是否為1CMP AL,1 JNE L1L2: MOV DX,Y7 MOV AL,NUM OUT DX,AL;八位LED從右向左依次循點(diǎn)亮 ROL AL,1 MOV NUM CALL DELAY MOVDL,0FFHMOV AH, 6;判斷是否有按鍵按下INT 21HJZ L2;無按鍵那么跳回繼續(xù)循環(huán),有那么退出L3: MOV DX,Y7 IN AL,DX;讀入開關(guān)量,判斷是否為2 CMP AL,2 JNE L3MOV NUM,55HL4: MOV DX,Y7 MOV AL,NUM OUT DX,AL;八位LED交替亮 NOT AL MOV NUM CALL DELAY MOVDL,0FFHMOV AH, 6;判斷是否有按鍵按下INT 21HJZ L4 ;無按鍵那么跳回繼續(xù)循環(huán),有那么退出 MOV AX, 4C00H;結(jié)束程序退出INT 21HDELAY PROC MOV BX,8FFHDELAY1:MOV CX,0FFFFH LOOP $;延時(shí)子程序 DEC BX JNZ DELAY1 RETDELAY ENDPCODEENDSENDSTART六、實(shí)驗(yàn)報(bào)告1.實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2.簡要的電原理框圖。3.流程圖。4.實(shí)驗(yàn)結(jié)果。5.心得體會(huì)和建議。實(shí)驗(yàn)二8254定時(shí)/計(jì)數(shù)器一.實(shí)驗(yàn)?zāi)康?1)掌握8254的工作方式及應(yīng)用編程。(2)掌握8254的典型應(yīng)用電路接法。二.實(shí)驗(yàn)設(shè)備PC微機(jī)一臺、TD-PIT++實(shí)驗(yàn)系統(tǒng)一套,示波器一臺。三.實(shí)驗(yàn)內(nèi)容1.計(jì)數(shù)器0工作在方式3,初值為4800H,OUT0分兩路輸出,一路外接2位LED,使其以亮0.5秒滅0.5秒閃亮,另一路作為計(jì)數(shù)器1的計(jì)數(shù)脈沖CLK1.。2.計(jì)數(shù)器1工作在方式2,初值為4,OUT1的輸出外接2位LED,使其以亮3秒滅1秒閃亮。3.計(jì)數(shù)器2工作在方式0,初值為0FH,按壓開關(guān)產(chǎn)生的脈沖作為計(jì)數(shù)器2的計(jì)數(shù)脈沖,按壓開關(guān)的次數(shù)將在屏幕上顯示,當(dāng)按壓開關(guān)到17次時(shí),觀察OUT2電平的變化。四.實(shí)驗(yàn)原理8254是Intel公司生產(chǎn)的可編程間隔定時(shí)器。是8253的改良型,比8253具有更優(yōu)良的性能。8254具有以下根本功能:(1)有3個(gè)獨(dú)立的16位計(jì)數(shù)器;(2)每個(gè)計(jì)數(shù)器可按二進(jìn)制或十進(jìn)制〔BCD〕計(jì)數(shù);(3)每個(gè)計(jì)數(shù)器可編程工作于6種不同工作方式;(4)8254每個(gè)計(jì)數(shù)器允許的最高計(jì)數(shù)頻率為10MHz〔8253為2MHz〕;(5)8254有讀回命令〔8253沒有〕,除了可以讀出當(dāng)前計(jì)數(shù)單元的內(nèi)容外,還可以讀出狀態(tài)存放器的內(nèi)容。(6)計(jì)數(shù)脈沖可以是有規(guī)律的時(shí)鐘信號,也可以是隨機(jī)信號。計(jì)數(shù)初值公式為:n=Fclk÷Fout其中Fclk是輸入計(jì)數(shù)脈沖的頻率,F(xiàn)out是輸出信號頻率。圖3-2-1是8254的內(nèi)部結(jié)構(gòu)框圖和引腳圖,它是由與CPU的接口、內(nèi)部控制電路和三個(gè)計(jì)數(shù)器組成。8254的工作方式如下:(1)方式0:計(jì)數(shù)到0結(jié)束輸出正躍變信號方式。(2)方式1:硬件可重觸發(fā)單穩(wěn)方式。(3)方式2:頻率發(fā)生器方式。(4)方式3:方波發(fā)生器。(5)方式4:軟件觸發(fā)選通方式。(6)方式5:硬件觸發(fā)選通方式。圖3-2-18254的內(nèi)部接口和引腳8254的控制字有兩個(gè):一個(gè)用來設(shè)置計(jì)數(shù)器的工作方式,稱為方式控制字;另一個(gè)用來設(shè)置讀回命令,稱為讀回控制字。這兩個(gè)控制字共用一個(gè)地址,由標(biāo)識位來區(qū)分。控制字格式如表3-2-1所示。讀回控制字格式如表3-2-2所示。當(dāng)讀回控制字的D4位為0時(shí),由該讀回控制字D1~D2位指定的計(jì)數(shù)器的狀態(tài)存放器內(nèi)容將被鎖存到狀態(tài)存放器中。狀態(tài)字格式如表3-2-3所示。表3-2-18254的方式控制字格式表3-2-28254讀出控制字格式表3-2-38254狀態(tài)字格式五.實(shí)驗(yàn)說明及流程圖根據(jù)計(jì)數(shù)初值公式n=n=Fclk÷Fout,可計(jì)算計(jì)數(shù)器0,,的初值:N0=18432=4800H8254定時(shí)/計(jì)數(shù)器電原理圖如下圖3-2-2,流程圖如圖3-2-3所示。圖3-2-28254定時(shí)/計(jì)數(shù)器電原理圖實(shí)驗(yàn)步驟如下。1.首先運(yùn)行CHECK程序,查看I/O空間始地址。2.編譯鏈接。3.參考圖3-2-3所示連接實(shí)驗(yàn)線路。4.8254單元自檢(1)點(diǎn)擊工具欄c:\(2)C:\TangDu\PitPP\Asm1>DEBUGO300C36;計(jì)數(shù)器0O300000;計(jì)數(shù)器0低八位初值O300090;計(jì)數(shù)器2高八位初值,執(zhí)行后LED一滅一亮計(jì)數(shù)器1,2自檢類似Q ;退岀自檢(3)返回WINDOWSC:\TangDu\PitPP\Asm1>EXIT5.可以改變計(jì)數(shù)初值,從而實(shí)現(xiàn)不同要求的計(jì)數(shù)。YYN初始化計(jì)數(shù)器0方式3,初值=4800H計(jì)數(shù)器1方式2,初值=`4計(jì)數(shù)器2方式0,初值=0FH有鍵按下嗎?結(jié)束讀計(jì)數(shù)器2當(dāng)前值調(diào)用屏幕顯示子程序圖3-2-38254定時(shí)/計(jì)數(shù)器參考程序流程圖六.參考程序IOY0EQU3000HTIMER0EQU IOY0+00H*4;8254計(jì)數(shù)器0端口地址TIMER1EQU IOY0+01H*4;8254計(jì)數(shù)器1端口地址TIMER2EQU IOY0+02H*4;8254計(jì)數(shù)器2端口地址TCTLEQU IOY0+03H*4;8254控制存放器端口地址STACK1SEGMENTSTACKDW 256DUP(?)STACK1ENDSDATASEGMENTMES0DB‘Pressed:$’MES1DB ‘Pressanykeytoexit!’,0DH,0AH,’$’NUM DB ?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS, AX MOV DX,OFFSETMES1 MOV AH,9 INT 21H MOV DX,TCTLMOV AL,00110110B;計(jì)數(shù)器0初始化,方式3OUT DX,MOV DX,TIMER0MOV AL,00HOUT DX,AL;計(jì)數(shù)器0初值=4800HMOV AL,48HOUT DXMOV DX,TCTLMOV AL,01010101B;計(jì)數(shù)器1初始化,方式2OUT DX,MOV DX,TIMER1MOV AL,04H;計(jì)數(shù)器1初值=04HOUT DX,MOV DX,TCTLMOV AL,10010001B;計(jì)數(shù)器2初始化,方式0OUT DX,MOV DX,TIMER2MOV AL,0FH;計(jì)數(shù)器0初值=0FHOUT DX,ALL1: MOV DX,TIMER2 IN AL,DX;讀入計(jì)數(shù)器2值保存 MOV NUM CALL DISPMOV AL, NUM;當(dāng)按壓開關(guān)17次時(shí)退出 CMP AL, 0 JZ QUITMOV DL,0FFH MOV AH,6;判主鍵盤有無鍵按下INT 21H JZ L1 ;有鍵按下跳轉(zhuǎn)QUIT: MOV AX,4C00H;結(jié)束程序退出INT 21HDISP PROC;顯示子程序 MOV DX,OFFSETMES0 MOV AH,9;顯示MES0 INT 21H MOV AL,NUM CMP AL, 9;判斷是否<=9 JLE L2;假設(shè)是那么為'0'-'9',ASCII碼加30H ADD AL,7;否那么為'A'-'F',ASCII碼加37HL2: ADD AL,30H MOV DL,ALMOV AH,2;在顯示器上顯示按壓開關(guān)的次數(shù) INT 21H MOV DL,0DH INT 21H RETDISP ENDPCODE ENDSEND START七、改變計(jì)數(shù)器0、計(jì)數(shù)器1初值,使OUT0輸出5KHZ方波,OUT輸出1KHZ脈沖波。八、實(shí)驗(yàn)報(bào)告1.實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容。2.簡要的電原理框圖。3.流程圖。4.實(shí)驗(yàn)結(jié)果。5.心得體會(huì)和建議。實(shí)驗(yàn)三8259中斷控制器一.實(shí)驗(yàn)?zāi)康?1)學(xué)習(xí)中斷控制器8259的工作原理。(2)掌握可編程控制器8259的應(yīng)用編程方法。二.實(shí)驗(yàn)設(shè)備PC微機(jī)一臺、TD-PIT+實(shí)驗(yàn)系統(tǒng)一套。三.實(shí)驗(yàn)內(nèi)容用KK1+和KK2+模擬兩個(gè)中斷源,在IR0對應(yīng)的效勞程序中顯示字符“0〞,在IR1對應(yīng)的效勞程序中顯示字符“1〞。四.實(shí)驗(yàn)原理1.8259控制器的介紹中斷控制器8259A是Intel公司專為控制優(yōu)先級中斷而設(shè)計(jì)開發(fā)的芯片。它將中斷源優(yōu)先級排隊(duì)、區(qū)分中斷源以及提供中斷矢量的電路集于一片中,因此無需附加任何電路,只需對8259A進(jìn)行編程,就可以管理8級中斷,并選擇優(yōu)先模式和中斷請求方式,即中斷結(jié)構(gòu)可以由用戶編程來設(shè)定。同時(shí),在不需增加其他電路的情況下,通過多片8259A的級連,能構(gòu)成多達(dá)64級的矢量中斷系統(tǒng)。它的管理功能包括:1〕記錄各級中斷源請求,2〕判別優(yōu)先級,確定是否響應(yīng)和響應(yīng)哪一級中斷,3〕響應(yīng)中斷時(shí),向CPU傳送中斷類型號。8259A的內(nèi)部結(jié)構(gòu)和引腳如下圖3-3-1。8259A的命令共有7個(gè),一類是初始化命令字,另一類是操作命令。8259A的編程就是根據(jù)應(yīng)用需要將初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分別寫入初始化命令存放器組和操作命令存放器組。ICW1-ICW4的命令字格式如下圖3-3-2,OCW1-OCW3的命令字格式如圖3-3-3所示,其中OCW1用于設(shè)置中斷屏蔽操作字,OCW2用于設(shè)置優(yōu)先級循環(huán)方式和中斷結(jié)束方式的操作命令字,OCW3用于設(shè)置和撤銷特殊屏蔽方式、設(shè)置中斷查詢方式以及設(shè)置對8259內(nèi)部存放器的讀出命令。圖3-3-18259內(nèi)部結(jié)構(gòu)和引腳圖圖3-3-2圖3-3-2圖3-3-2圖3-3-2圖3-3-32.8259存放器及命令的控制訪問在硬件系統(tǒng)中,8259僅占用兩個(gè)外設(shè)接口地址,在片選有效的情況下,利用A0來尋址不同的存放器和命令字。對存放器和命令的訪問控制如表3-3-1所示。表3-3-18259存放器及命令的控制訪問3.PC微機(jī)系統(tǒng)中的8259在80x86系列PC微機(jī)系統(tǒng)中,系統(tǒng)中包含了兩片8259A中斷控制器,經(jīng)級連可以管理15級硬件中斷,但其中局部中斷號已經(jīng)被系統(tǒng)硬件占用,具體使用情況如表3-3-2示。兩片8259A的端口地址為:主片8259使用020H和021H兩個(gè)端口;從片使用0A0H和0A1H兩個(gè)端口。系統(tǒng)初始化兩片8259的中斷請求信號均采用上升沿觸發(fā),采用全嵌套方式,優(yōu)先級的排列次序?yàn)?級最高,依次為1級、8級~15級,然后是3級~7級。在擴(kuò)展系統(tǒng)總線上的INTR對應(yīng)的中斷線就是PC機(jī)保存中斷其中的一個(gè)。對INTR中斷的初始化PC機(jī)已經(jīng)完成,在使用時(shí)主要是將其中斷屏蔽翻開,修改中斷向量。表3-3-2四.實(shí)驗(yàn)說明及流程圖本實(shí)驗(yàn)要求實(shí)現(xiàn)8259控制器IR0、IR1兩路中斷。用KK1+和KK2+模擬兩個(gè)中斷源,在IR0對應(yīng)的效勞程序中顯示字符“0〞,在IR1對應(yīng)的效勞程序中顯示字符“1〞。電原理框圖如下圖3-3-4。實(shí)驗(yàn)程序參考流程如圖3-3-5所示。圖3-3-48259中斷控制器電原理圖圖3-3-58259中斷控制器參考流程圖五.參考程序;8259擴(kuò)充中斷應(yīng)用實(shí)驗(yàn)INTR_IVADD EQU01C8H ;INTR對應(yīng)的中斷矢量地址INTR_OCW1EQU0A1H ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW1地址INTR_OCW2EQU0A0H ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW2地址INTR_IM EQU0FBH ;INTR對應(yīng)的中斷屏蔽字IOY0 EQU3000H ;片選IOY0對應(yīng)的端口始地址MY8259_ICW1EQUIOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW1端口地址MY8259_ICW2EQUIOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW2端口地址MY8259_ICW3EQUIOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW3端口地址MY8259_ICW4EQUIOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW4端口地址MY8259_OCW1 EQUIOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW1端口地址MY8259_OCW2 EQUIOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW2端口地址MY8259_OCW3 EQUIOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW3端口地址STACK1SEGMENTSTACKDW 256 DUP(?)STACK1ENDSDATASEGMENTMESDB'Pressanykeytoexit!',0AH,0DH,0AH,0DH,'$'CS_BAKDW? ;保存INTR原中斷處理程序入口段地址的變量IP_BAKDW? ;保存INTR原中斷處理程序入口偏移地址的變量IM_BAKDB? ;保存INTR原中斷屏蔽字的變量DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOV DS, AXMOV DX, OFFSETMES MOV A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論