北郵微機(jī)原理中斷程序報(bào)告_第1頁(yè)
北郵微機(jī)原理中斷程序報(bào)告_第2頁(yè)
北郵微機(jī)原理中斷程序報(bào)告_第3頁(yè)
北郵微機(jī)原理中斷程序報(bào)告_第4頁(yè)
北郵微機(jī)原理中斷程序報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、北京郵電大學(xué)實(shí)驗(yàn)報(bào)告題目:微機(jī)原理軟件實(shí)驗(yàn)學(xué)院:信息與通信工程專(zhuān)業(yè):信息工程_中斷實(shí)驗(yàn)報(bào)告一、 實(shí)驗(yàn)?zāi)康?#160;1、 初步掌握中斷程序的設(shè)計(jì)方法; 2、 初步掌握修改 DOS 系統(tǒng)中斷,以適應(yīng)實(shí)際使用的方法。二:實(shí)驗(yàn)要求 編一程序,在顯示器上顯示時(shí)、分、秒。1: 借用計(jì)數(shù)器8253的Timer0作為中斷源,通過(guò)8259A下向CPU發(fā)中斷,每10ms 產(chǎn)生一次中斷。2:在中斷服務(wù)程序中管理刷新時(shí)、分、秒。3:輸入文件名(如:CLK)后清屏顯示 Current time is XX:XX:XX(時(shí)分秒鍵盤(pán)輸入) 打回車(chē),時(shí)、分、秒開(kāi)始

2、計(jì)時(shí),時(shí)鐘不停的刷新。4:當(dāng)鍵入CTRL+C時(shí),停止計(jì)時(shí),返回系統(tǒng),且系統(tǒng)正常運(yùn)行不死機(jī)。提示: 1、8253的初始化程序段可借用。2、口地址為40H、41H、42H、43H,控制字為36H=00110110B3、時(shí)間常數(shù)TC=11932:1.1932MHz/11932=100Hz,輸出方波頻率為100Hz,其周期為1000/100=10ms三:設(shè)計(jì)思路這個(gè)實(shí)驗(yàn)需要用到中斷控制器8259A和計(jì)數(shù)器8253。我們先初始化8253的工作方式,利用工作方式3來(lái)計(jì)數(shù)時(shí)間,讓其分頻后產(chǎn)生100hz的方波,每100個(gè)周期即為1s,將這個(gè)方波作為中斷源,通過(guò)8259A每10ms向CPU發(fā)出一次中斷

3、。然后我們將子程序Timer0的地址(CS以及IP)設(shè)置為中斷向量,每次中斷即執(zhí)行這個(gè)子程序,在這個(gè)之程序中編寫(xiě)相應(yīng)代碼,看時(shí)間是否到1S,沒(méi)到則跳出中斷,等待下一次(1ms之后)中斷到來(lái),到1S則讓時(shí)間+1并且重置計(jì)數(shù)值,再加上相應(yīng)的時(shí)間顯示程序,這樣即可實(shí)現(xiàn)時(shí)間的自動(dòng)增加與顯示,可以當(dāng)做一個(gè)計(jì)時(shí)器來(lái)用,這即是這個(gè)工程的主體部分。除此之外,還需要一部分程序來(lái)實(shí)現(xiàn)鍵盤(pán)輸入相應(yīng)時(shí)間,這里要注意時(shí)間的每一位都有取值方面的要求,這里就要通過(guò)一系列的CMP/JMP指令的組合來(lái)達(dá)到正確輸入的效果,將順序輸入的時(shí)間存儲(chǔ)起來(lái),配合Timer0子程序即可輸出當(dāng)前設(shè)置的時(shí)間并且實(shí)現(xiàn)時(shí)間刷新。當(dāng)然,如果選擇不輸入

4、時(shí)間直接回車(chē)的話(huà),程序可以從0開(kāi)始計(jì)時(shí),可以當(dāng)成一個(gè)秒表。還有一些細(xì)節(jié)的設(shè)計(jì)如在計(jì)時(shí)過(guò)程中輸入S可以重新設(shè)置時(shí)間,Ctrl+C可以退出這些也是利用CMP/JMP組合來(lái)實(shí)現(xiàn)。最后整個(gè)程序可以實(shí)現(xiàn)以下功能:可以設(shè)置開(kāi)始時(shí)間然后自動(dòng)計(jì)時(shí),也可以當(dāng)做秒表來(lái)使用,可以正常退出。開(kāi)始四:實(shí)驗(yàn)流程 關(guān)中斷,保存源中斷向量Timer0地址設(shè)為中斷向量初始化8253,8259A開(kāi)中斷提示輸入時(shí)間提示錯(cuò)誤格式規(guī)范? 否 是顯示時(shí)間,計(jì)時(shí),檢測(cè)鍵盤(pán)輸入輸入S? 是 否輸入回車(chē)? 是秒表計(jì)時(shí) 否Ctrl+c? 否 是結(jié)束中斷流程: 開(kāi)始 統(tǒng)計(jì)進(jìn)入中斷次數(shù)已經(jīng)100次 否 是計(jì)數(shù)器清0,時(shí)間+1有進(jìn)位? 否是進(jìn)位調(diào)整結(jié)

5、束五:實(shí)驗(yàn)結(jié)果執(zhí)行程序,輸入格式不對(duì)時(shí)有錯(cuò)誤提示:直接按回車(chē),清屏后進(jìn)入秒表計(jì)時(shí)模式:按下S后重新設(shè)置時(shí)間為12:34:10后開(kāi)始計(jì)時(shí):計(jì)時(shí)時(shí)按回車(chē)可以保存當(dāng)前時(shí)間:利用ctrl+c退出:六:實(shí)驗(yàn)總結(jié)這次綜合實(shí)驗(yàn)是很有難度的,它不僅需要對(duì)匯編語(yǔ)言有一定層次的了解,還需要對(duì)8259A與8253這兩個(gè)硬件的工作方式很熟悉。通過(guò)不斷的查找資料,參考學(xué)習(xí),我終于完成了這次實(shí)驗(yàn),在這個(gè)過(guò)程中我經(jīng)歷了許多也學(xué)習(xí)到了許多。首先得到提升的是我的debug能力,編的越多能力也就越強(qiáng)。除此之外,我對(duì)課本上學(xué)習(xí)到的微機(jī)原理有了更直觀與深層次的了解,這對(duì)我使用計(jì)算機(jī)以及今后的學(xué)習(xí)都是非常有幫助的,最后,感謝這次實(shí)驗(yàn)給

6、我?guī)?lái)的寶貴的經(jīng)歷。附錄(源代碼與子程序清單)datasegmentcount100 db 100;100個(gè)10ms=1s,此處起計(jì)數(shù)作用msg1 db 'Please enter the current time(XX:XX:XX)!(Press ENTER to use default time)$'msg2 db 'Input Error,please use the correct format!$'msg3 db 'Now, the time is:',0ah,'(Press Ctrl+C to EXIT.)',0ah,

7、'(Press Enter to use as a Stopwatch.)',0ah,'(Press S or s to set current time again.)(XX:XX:XX)$'msg4 db 0ah,'Program EXIT.$'tenhourdb '0' ;小時(shí)十位數(shù)hourdb '0',':' ;小時(shí)個(gè)位數(shù)tenmindb '0' ;分鐘十位數(shù)minutedb '0',':' ;分鐘個(gè)位數(shù)tensecdb '0'

8、 ;秒十位數(shù)seconddb '0' ;秒個(gè)位數(shù)dataendsstacksegment stack 'stack'db 256 dup(0)stackendscodesegmentassume cs:code,ds:data,es:datastart:mov ax,seg datamov es,axmov ds,axcli ;置中斷標(biāo)志IF=0mov al,8 ;保存源中斷向量,8中斷為定時(shí)器mov ah,35h ;取中斷向量,al為中斷類(lèi)型,ES:BX為中斷向量int 21hpush espush bxmov ax,0mov es,ax ; es置零,這是準(zhǔn)

9、備中斷向量的寫(xiě)入mov di,20hmov ax,offset Timer0 ;中斷子程序timer的偏移量stosw ;字符串填充,將AX的內(nèi)容;(timer偏移量)存入di所指向的單元, ;di的增減取決于DF,默認(rèn)段基址總是ESmov ax,csstosw ;timer端基址mov al,36hout 43h,al ;設(shè)置8253控制字為36Hmov bx,11932 ;分頻系數(shù)為11932,分頻結(jié)果1.1932MHz/11932=100Hz,10ms變化一次mov al,bl ;分兩次設(shè)置分頻系數(shù)out 40h,almov al,bhout 40h,almov al,0fch ;主PI

10、C端口設(shè)置為0fchout 21h,alsti ;開(kāi)中斷,允許外部中斷mov ax,seg datamov es,axmov ds,axmov dx,offset msg1 ;打印提示信息1mov ah,09hint 21hmov dl,0ah ;回車(chē)mov ah,02hint 21hsettime:mov si,offset tenhour ;設(shè)定時(shí)間mov ah,01hint 21hcmp al,0dhjz forever1cmp al,'0'jc error2 ;如果輸入不合法,報(bào)錯(cuò)cmp al,'3'jnc error2mov si,alinc sicm

11、p al,'2'jz ershimov ah,01h ;如果小時(shí)高位為1,低位可以設(shè)置09int 21hcmp al,0dhjz forever1cmp al,'0'jc error2cmp al,'9'+1jnc error2mov si,alinc sijmp fenershi:mov ah,01h ;如果小時(shí)高位為2,低位可以設(shè)置04int 21hcmp al,0dhjz forever1cmp al,'0'jc error2cmp al,'4'jnc error2mov si,alinc sijmp fen

12、fen:mov ah,01h ;分高位可設(shè)置05int 21hcmp al,0dhjz forever1cmp al,':'jnz error1mov si,alinc simov ah,01hint 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'6'jnc error1mov si,alinc sizcy4:mov ah,01h ;分低位09int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'9'+1

13、jnc error1mov si,alinc sijmp zcysettime2:jmp settime ;用來(lái)跳轉(zhuǎn)接力error2:jmp error1forever1:jmp next2zcy:mov ah,01h ;秒高位可設(shè)置05int 21hcmp al,0dhjz forever1cmp al,':'jnz error1mov si,alinc simov ah,01hint 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'6'jnc error1mov si,alinc simo

14、v ah,01h ;秒低位可設(shè)置09int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'9'+1jnc error1mov si,alinc sijmp next2error1: mov dl,0ah ;用來(lái)報(bào)錯(cuò):設(shè)置時(shí)間不合法mov ah,02hint 21hmov dx,offset msg2 ;打印提示信息2mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hjmp settimesettime3: jmp settime2 ;跳轉(zhuǎn)接力next2: MOV AX,

15、0003H ;做時(shí)鐘顯示初始化INT 10H ;清屏顯示mov dl,0ahmov ah,02hint 21hmov dx,offset msg3 ;打印提示信息3mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hforever:mov bx,offset tenhour ;這個(gè)程序段循環(huán)執(zhí)行mov cx,8cmp tenhour,'2' ;如果超過(guò)24點(diǎn),置為0點(diǎn)jnz dispclkcmp hour,'4'jnz dispclkmov tenhour,'0'mov hour,'0'disp

16、clk:mov dl,bx ;用來(lái)顯示當(dāng)前時(shí)間call dispcharinc bxloop dispclk ;調(diào)用顯示子程序,顯示初始狀態(tài)時(shí)間, ;比如”11:11:11"mov dl,0dh ;輸出一個(gè)換行call dispcharxor al,al ;讀鍵盤(pán)緩沖區(qū)mov ah,0bhint 21hcmp al,0FFHjnz next3mov ah,08h ;取其字符int 21hcmp al,03h ;Ctrl+C退出jz stopcmp al,'s' ;S/s設(shè)定時(shí)間jz settime3cmp al,'S'jz settime3cmp al

17、,0dhjnz next3mov dl,0ah ;回車(chē)則使用秒表功能mov ah,02hint 21hjmp forevernext3:mov al,secondnext:cmp al,second ;判斷second是否發(fā)生變化je next ;如果沒(méi)有,循環(huán)比較jmp forever ;如果有變化,刷新輸出stop:mov dx,offset msg4 ;打印提示信息4mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hpop dx ;恢復(fù)中斷向量pop dsmov al,8mov ah,25h ;25H 設(shè)置中斷向量int 21hmov ah,4chi

18、nt 21hTimer0 proc far ;中斷程序timerpush axdec count100 ;計(jì)數(shù)100次jnz timerx ;如果計(jì)數(shù)小于100,跳出中斷mov count100,100 ;否則重置count100<=100;1s已經(jīng)到達(dá)inc second ;加一秒cmp second,'9' ;判斷大小,用于進(jìn)位,以下原理相同jle timerxmov second,'0'inc tenseccmp tensec,'6'jl timerxmov tensec,'0'inc minutecmp minute,'9'jle timerxmov m

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論