版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 信 息 工 程 學(xué) 院</p><p> 課 程 設(shè) 計 報 告</p><p> 設(shè)計題目: </p><p> 名 稱: </p><p> 班 級: </p><p&g
2、t; 姓 名: </p><p> 學(xué) 號: </p><p> 設(shè)計時間: 至 </p><p> 指導(dǎo)教師: </p><p> 評 語:
3、 </p><p> 評閱成績: 評閱教師: </p><p> 一、課程設(shè)計的性質(zhì)和目的</p><p> 通過課程設(shè)計,進行程序設(shè)計方法和技能的基本訓(xùn)練,鞏固在課堂上學(xué)到的有關(guān)軟件程序設(shè)計的基本知識和基本方法,硬件電路的設(shè)計等,通過實際動手能力的培養(yǎng),進一步熟悉匯編語言的結(jié)構(gòu)
4、和使用方法,掌握軟硬結(jié)合的控制程序設(shè)計,達(dá)到能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。</p><p><b> 二、課程設(shè)計的要求</b></p><p> 1、遵循模塊化、結(jié)構(gòu)化的程序設(shè)計方法。</p><p> 2、要求程序必須正確。</p><p> 3、程序簡明易懂,多運用輸入輸出提示,有出錯
5、信息及必要的注釋。</p><p> 4、要求程序結(jié)構(gòu)合理,語句使用得當(dāng)。</p><p> 5、適當(dāng)追求編程技巧和程序運行效率。</p><p> 三、主要儀器設(shè)備及軟件</p><p> PC機、MASM匯編軟件、繪圖軟件及仿真等。</p><p> 四、課程設(shè)計題目及要求</p><
6、p><b> 計時器: </b></p><p> 要求:(1)用字符構(gòu)成的大字顯示分、秒、十分之一秒;(2)正計時能夠用鍵盤控制起</p><p> 動、停止、清0;(3)倒計時能夠用鍵盤設(shè)置初值、控制啟動、減到0自動停止。</p><p> 五、課題分析及設(shè)計思路</p><p><b>
7、 課題分析:</b></p><p> 我們所要設(shè)計的計時器,它的主要作用就是既能產(chǎn)生正計時功能,又能產(chǎn)生倒計時功能,</p><p> 而且正計時的時候能夠用鍵盤控制啟動、停止、清0;倒計時的時候能夠用鍵盤設(shè)置初值、控制啟動、減到為0自動停止。</p><p><b> 設(shè)計思路:</b></p><p&
8、gt; 在主程序中,通過先檢查鍵盤是否有輸入,如果沒有輸入,則跳過檢查鍵盤輸入的鍵</p><p> 值的程序,如果有輸入則比較輸入為“S”或“s”鍵,“P”或“p”鍵,“G”或“g”鍵,</p><p> “C”或“c”鍵,“ESC”鍵中的哪個鍵,進而執(zhí)行相應(yīng)鍵值對應(yīng)的實現(xiàn)該功能的程序,達(dá)</p><p> 到開始,暫停,繼續(xù),清零,退出的功能??紤]到更加
9、直觀的顯示計時器的計時功能,讓其顯示的時候?qū)俸撩牒褪撩胛灰诧@示出來,使計時功能更加準(zhǔn)確。所以在設(shè)計計時器的計時最小單位時,就要使中斷頻率設(shè)置為100Hz,即10ms 一次中斷。于是顯示的計時單位就是“時:分:秒:十毫秒”。同時設(shè)置光標(biāo)位置使其顯示在屏幕中央。當(dāng)十毫秒位超過9 時候,要對百毫秒位進行加1 操作,如果百毫秒位超過9 時,要對秒位進1,當(dāng)秒位超過9 時,對十秒位進1,如果十秒位超過5 時,才對分鐘位進1,分鐘位超過9 時,
10、對十分鐘的位進1,如果十分鐘的位的超過5 時,對小時位進1。小時位的進位設(shè)計就要考慮到小時最多24 的特殊性了,所以設(shè)置一個變量,在小時位加1 的同時給它也加1,如果這個變量加到了24 則重新開始計時,此時再把該變量的置零。為了使計時器的顯示界面更加直觀更加清楚,所以可以在int 10h 的情況下將AH 賦值為0,同時置AL 為10H 將顯示的方式設(shè)置為640×350 彩色圖形,而且為全屏顯示,同時顏色通過在int 10H 的
11、情況下將AH 賦值的為0BH,同時置BL 為04H 可以將屏幕背景顏色設(shè)置為紅色,</p><p><b> 六、程序主要流程圖</b></p><p> 1、正計時流程圖如下:</p><p> 2、倒計時流程圖如下:</p><p> 七、程序主要代碼與分析(關(guān)鍵代碼要有注釋):</p>&l
12、t;p><b> 正計時程序:</b></p><p> data segment</p><p> hou1 db '0'</p><p> hou2 db '0'</p><p><b> mw db ':'</b></p&g
13、t;<p> min1 db '0'</p><p> min2 db '0'</p><p><b> m db ':'</b></p><p> sec1 db '0'</p><p> sec2 db '0'&l
14、t;/p><p><b> m2 db ':'</b></p><p> msec1 db '0'</p><p> msec2 db '0'</p><p> count equ $-hou1</p><p><b> h db &
15、#39;0'</b></p><p> sail db "Copyright by yangfan."</p><p> hello db " Welcome to use the calculagraph of sail. "</p><p> tishi db " s:start p:p
16、ause g:continue Esc:exit c:clear "</p><p><b> data ends</b></p><p> code segment</p><p> assume cs:code,ds:data</p><p><b> start:</b>&l
17、t;/p><p> mov ax, data</p><p> mov ds, ax</p><p> mov ah,01h ;置光標(biāo)類型,不顯示光標(biāo)</p><p> mov ch,20h</p><p><b> int 10h</b></p><p> cal
18、l clean_screen</p><p><b> push ax</b></p><p><b> push bx</b></p><p> mov ah,00h</p><p> mov al,10h ;設(shè)置640*350 彩色圖形方式</p><p><
19、;b> int 10h</b></p><p> mov ah,0bh</p><p> mov bh,00h ;設(shè)置背景顏色為紅色</p><p> mov bl,04h</p><p><b> int 10h</b></p><p><b> pop
20、ax</b></p><p><b> pop bx</b></p><p> mov dh,00h ;行號</p><p> mov dl,00h ;列號</p><p> mov bh,00h ;頁號</p><p> mov ah,02h ;置光標(biāo)位置</p>
21、;<p><b> int 10h</b></p><p> mov cx, 48h</p><p> mov si, offset hello</p><p><b> show2:</b></p><p> mov ah, 0eh ;顯示字符(光標(biāo)前移),al字符,bl
22、前景</p><p> mov al, [si]</p><p><b> int 10h</b></p><p><b> inc si</b></p><p> loop show2</p><p> mov dh,02h ;列號</p><
23、p> mov bh,00h ;頁號</p><p> mov ah,02h ;置光標(biāo)位置</p><p><b> int 10h</b></p><p> mov cx, 80h</p><p> mov si, offset tishi</p><p><b> s
24、how3:</b></p><p> mov ah, 0eh ;顯示字符(光標(biāo)前移),al 字符,bl 前景色</p><p> mov al, [si]</p><p><b> int 10h</b></p><p><b> inc si</b></p>&l
25、t;p> loop show3</p><p> call locate_cursor</p><p><b> call show</b></p><p> q2: mov ah, 08h ; 鍵盤輸入無回顯,al= 輸入字符</p><p><b> int 21h</b><
26、;/p><p> cmp al, 1bh ;按下Esc 鍵結(jié)束程序</p><p><b> je goout1</b></p><p><b> jmp yy</b></p><p> goout1: mov ah, 4ch</p><p><b> int
27、 21h</b></p><p> yy: cmp al ,'s' ;按下's'鍵開始計時</p><p><b> je q1</b></p><p> cmp al ,'S'</p><p><b> je q1</b><
28、/p><p><b> jmp q2</b></p><p> q1: cli ;使IF 清零</p><p> mov al, 08h</p><p> mov ah, 35h ;獲取08h 號中斷的原入口地址</p><p><b> int 21h</b><
29、/p><p><b> push es</b></p><p><b> push bx</b></p><p><b> push ds</b></p><p> mov ax, 3508h</p><p> mov ds, ax</p&g
30、t;<p> mov dx, offset int08h ;設(shè)置08h 號中斷的新入口地址</p><p> mov al,08h</p><p> mov ah,25h</p><p> int 21h ;調(diào)用08h 號中斷的服務(wù)程序</p><p><b> pop ds</b></p&
31、gt;<p> in al,21h ;PC 機中的8253 端口地址為40H-43H,這段程序應(yīng)該是給8253 初始化和寫定時初值</p><p> push ax ;Intel 公司的8253 </p><p> mov al, 11111100b</p><p> out 21h, al</p><p> mov
32、al, 00110110b</p><p> out 43h, al</p><p> mov ax,432h ;定時器的時鐘頻率為1.193187MHz,計數(shù)初值= 1193187/ 100=11932</p><p> out 40h, al</p><p> mov al, ah</p><p> ou
33、t 40h, al</p><p><b> sti</b></p><p> s1: call locate_cursor</p><p><b> call show</b></p><p> mov ah, 0bh ; 檢驗鍵盤狀態(tài),有輸入al=00,無輸入al=0ffh</p&
34、gt;<p><b> int 21h</b></p><p><b> inc al ;</b></p><p><b> jnz s1</b></p><p> mov ah, 08h ; 鍵盤輸入無回顯,al= 輸入字符</p><p><b&
35、gt; int 21h</b></p><p> cmp al, 1bh ;按下Esc 鍵結(jié)束程序</p><p><b> je goout</b></p><p> cmp al, 'p' ;按下'p'鍵停止計時</p><p><b> je paus
36、e</b></p><p> cmp al, 'P' ;按下'p'鍵停止計時</p><p><b> je pause</b></p><p> cmp al, 'c' ;按下c 鍵清零</p><p><b> je clear</b
37、></p><p> cmp al, 'C' ;按下c 鍵清零</p><p><b> je clear</b></p><p><b> jmp s1</b></p><p> clear: pop ax</p><p> out 21h,
38、al</p><p> pop dx ;把bx 送到dx</p><p><b> pop bx</b></p><p><b> push ds</b></p><p><b> mov ds,bx</b></p><p> mov al,0
39、8h</p><p> mov ah,25h</p><p><b> int 21h</b></p><p><b> pop ds</b></p><p> mov hou1, 30h</p><p> mov hou2, 30h</p><
40、p> mov min1, 30h</p><p> mov min2, 30h</p><p> mov sec1, 30h</p><p> mov sec2, 30h</p><p> mov msec1, 30h</p><p> mov msec2, 30h</p><p&
41、gt;<b> jmp start</b></p><p><b> pause:</b></p><p><b> pop ax</b></p><p> out 21h,al</p><p> pop dx ;把bx 送到dx,原中斷向量存在ES:BX 中<
42、/p><p><b> pop bx</b></p><p><b> push ds</b></p><p><b> mov ds,bx</b></p><p> mov al,08h</p><p> mov ah,25h</p>
43、<p><b> int 21h</b></p><p><b> pop ds</b></p><p> aa1:mov ah, 08h ; 鍵盤輸入無回顯,al= 輸入字符</p><p><b> int 21h</b></p><p> cmp
44、al, 1bh ;按下Esc 鍵結(jié)束程序</p><p><b> je goout</b></p><p> cmp al, 'g' ;按下g 鍵繼續(xù)程序</p><p><b> je jixu</b></p><p> cmp al, 'G' ;按下g
45、鍵繼續(xù)程序</p><p><b> je jixu</b></p><p><b> jmp aa1</b></p><p><b> jixu:</b></p><p><b> jmp q1</b></p><p>&
46、lt;b> goout:</b></p><p><b> pop ax</b></p><p> out 21h,al</p><p> pop dx ;把bx 送到dx</p><p> pop ds ;把es 送到ds</p><p> mov ax, 2508
47、h</p><p><b> int 21h</b></p><p> mov al, 00110110b</p><p> out 43h, al</p><p> sub al, al</p><p> out 40h, al</p><p> out 40
48、h, al</p><p> mov ah, 4ch</p><p><b> int 21h</b></p><p> int08h proc near ; 使用8253/8254 定時器0 的中斷類型8 計時,以100 次/s 的頻率發(fā)出中斷,相當(dāng)于一次中斷10ms</p><p><b> pus
49、h ax</b></p><p><b> push ds</b></p><p> mov ax,data</p><p><b> mov ds,ax</b></p><p><b> inc msec2</b></p><p>
50、 cmp msec2, 3ah</p><p><b> jb t</b></p><p> mov msec2,30h</p><p><b> inc msec1</b></p><p> cmp msec1,3ah</p><p><b> jb
51、t</b></p><p> mov msec1,30h</p><p><b> inc sec2</b></p><p> cmp sec2,3ah</p><p><b> jb t</b></p><p> mov sec2,30h</p&
52、gt;<p><b> inc sec1</b></p><p> cmp sec1,36h</p><p><b> jb t</b></p><p> mov sec1,30h</p><p><b> inc min2</b></p>
53、<p> cmp min2,3ah</p><p><b> jb t</b></p><p> mov min2,30h</p><p><b> inc min1</b></p><p> cmp min1,36h</p><p><b>
54、 jb t</b></p><p> mov min1,30h</p><p><b> inc hou2</b></p><p> cmp hou2,3ah</p><p><b> jb t</b></p><p> mov hou2,30h<
55、;/p><p><b> inc hou1</b></p><p> cmp hou1,36h</p><p><b> jb t</b></p><p> mov hou1,30h</p><p> t: mov al,20h</p><p>
56、 out 20h,al ; 中斷結(jié)束命令</p><p><b> pop ds</b></p><p><b> pop ax</b></p><p> iret ;中斷返回</p><p> int08h endp ;中斷服務(wù)程序結(jié)束</p><p> cle
57、an_screen proc near</p><p><b> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></
58、p><p> mov ah, 06h ;屏幕初始化或向上滾動</p><p> mov al, 00h ;清屏</p><p> mov bh, 00h ;滾入行屬性</p><p> mov ch, 00h ;左上角行號</p><p> mov cl, 00h ;左上角列號</p><p&
59、gt; mov dh, 24h ;右下角行號</p><p> mov dl, 79h ;右下角列號</p><p><b> int 10h</b></p><p><b> pop dx</b></p><p><b> pop cx</b></p>
60、<p><b> pop bx</b></p><p><b> pop ax</b></p><p><b> ret</b></p><p> clean_screen endp</p><p> locate_cursor proc near<
61、/p><p><b> push dx</b></p><p><b> push bx</b></p><p><b> push ax</b></p><p> mov dh, 12h ;行號</p><p> mov dl, 33h ;列號&
62、lt;/p><p> mov bh, 00h ;頁號</p><p> mov ah, 20h ;置光標(biāo)位置</p><p><b> int 10h</b></p><p><b> pop ax</b></p><p><b> pop bx</b&
63、gt;</p><p><b> pop dx</b></p><p><b> ret</b></p><p> locate_cursor endp</p><p> show proc near</p><p><b> push cx</b&
64、gt;</p><p><b> push bx</b></p><p><b> push si</b></p><p><b> push ax</b></p><p> mov si, offset hou1</p><p> mov c
65、x, 0506h</p><p><b> show1:</b></p><p> mov bl,07h</p><p> mov ah, 0eh;顯示字符(光標(biāo)前移),al 字符,bl 前景色</p><p> mov al, [si]</p><p><b> int 10
66、</b></p><p><b> inc si</b></p><p> loop show1</p><p><b> pop ax</b></p><p><b> pop si</b></p><p><b> p
67、op bx</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p><b> show endp</b></p><p><b> code ends</b></p>
68、<p><b> end start</b></p><p><b> 倒計時程序:</b></p><p> stack segment ;定義堆棧段stack</p><p> db 100 dup(?)
69、 ;分配堆棧段的大小</p><p> stack ends ;堆棧段結(jié)束</p><p> data segment ;定義數(shù)據(jù)段data</p&g
70、t;<p> IN_BUF: db 100 dup(0) ;定義數(shù)據(jù)</p><p> SEC_60: db 0 ;60秒計時寄存器</p><p> SEC_1: db ?</p><p> Stop_Flag:db ?</p><p> data
71、 ends ;數(shù)據(jù)段結(jié)束</p><p> code segment 'code' ;定義代碼段</p><p> assume cs:code,ds:data,ss:stack ;確定CS/DS/S
72、S指向的邏輯段</p><p> start: mov ax,ss</p><p><b> mov sp,ax</b></p><p> mov ax,data ;設(shè)置數(shù)據(jù)段的段地址DS</p><p><b> mov d
73、s,ax</b></p><p><b> mov cl,60</b></p><p><b> mov al,0</b></p><p><b> mov dl,0</b></p><p> mov ah,2ch</p><p>&
74、lt;b> int 21h</b></p><p><b> mov al,dh</b></p><p><b> loop:</b></p><p><b> mov ah,1</b></p><p><b> int 16h</b
75、></p><p><b> jnz loop1</b></p><p><b> mov ah,0</b></p><p><b> int 16h</b></p><p> mov al,Stop_Flag</p><p><b&
76、gt; inc al</b></p><p><b> and al,1</b></p><p> mov dl,al</p><p><b> loop1:</b></p><p> mov al,Stop_Flag</p><p><b>
77、; or al,1</b></p><p><b> jnz loop</b></p><p> mov ah,2ch</p><p><b> int 21h</b></p><p><b> mov al,al</b></p><p
78、><b> cmp al,dh</b></p><p><b> jz loop</b></p><p><b> mov al,dh</b></p><p><b> mov al,cl</b></p><p><b> dec
79、 al</b></p><p><b> jnz loop</b></p><p> mov ax,4c00h ;返回DOS</p><p><b> int 21h</b></p><p> code e
80、nds ;代碼段結(jié)束</p><p><b> ;子程序代碼</b></p><p> end start ;匯編結(jié)束,程序起始</p><p><b> 八、實驗
81、結(jié)果截圖</b></p><p> 運行程序后得到的初始界面如下:</p><p> 如下圖為在鍵盤上按下“s”鍵時的圖像:</p><p> 在計時器正常工作時按下“p”鍵可以使其時間暫停,得到如下圖像:</p><p> 在計時器被暫停的情況下,按下“g”鍵即可實現(xiàn)繼續(xù)計時的功能。其圖像如下:</p>&
82、lt;p> 在計時器正常運行顯示計時動態(tài)時間的時候,按下“c”鍵可以清零,以便進行進行第二次計時,其圖像如下:</p><p><b> 九、心得體會</b></p><p> 經(jīng)過兩個星期的課程設(shè)計,的確收獲了很多,感覺自己對于微機原理與接口技術(shù)這門</p><p> 程有了更加深刻的認(rèn)識。因為把平時所學(xué)的知識應(yīng)用于實踐真的會遇
83、到很多問題,當(dāng)然也會發(fā)現(xiàn)很多樂趣在其中??梢哉f整個設(shè)計中最麻煩的就是設(shè)置中斷頻率為100Hz,同時使其能夠進入中斷服務(wù)子程序執(zhí)行計時功能。這個就要不斷的多次調(diào)試才能發(fā)現(xiàn)到問題究竟出在哪里。解決了這個問題之后對于如何暫停計時器也想了好多辦法,也調(diào)試了很多次。最終通過將原中斷向量入口地址進行修改,使其不再進入計時中斷服務(wù)子程序就達(dá)到了要求。進位條件的判斷,編程中仔細(xì)思考也就沒有問題。另外對于中斷服務(wù)子程序的類型設(shè)置問題,由于以前對這個概念的
84、理解記得不清楚,于是找出課本再次進行研究。在程序設(shè)計和算法實現(xiàn)上要多方面思考,全面的考慮問題,最好畫好程序流程圖,這樣就能達(dá)到事半功倍的效果。同時上機調(diào)試也是十分重要的,在調(diào)試的過程中能夠不斷的發(fā)現(xiàn)在編寫算法時應(yīng)該注意的一些細(xì)節(jié)和算法語句的非法使用,在調(diào)試過程中通過對算法的不斷測試、更正、擴充功能、修飾細(xì)節(jié),使算法程序不斷的得到完善。通過這次的課程設(shè)計使我認(rèn)識到要將微機原理與接口技術(shù)這門專業(yè)課學(xué)好不僅僅是要把書上的基本知識學(xué)好而且還要不
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理課程設(shè)計--搶答計時器
- 微機課程設(shè)計--搶答計時器
- 微機原理及應(yīng)用課程設(shè)計---可調(diào)計時器設(shè)計
- 測控原理課程設(shè)計--時鐘計時器的設(shè)計
- 時鐘計時器課程設(shè)計
- 籃球計時器課程設(shè)計
- 匯編課程設(shè)計報告--- 計時器
- 課程設(shè)計---vhdl秒表計時器
- 匯編課程設(shè)計報告--計時器
- 24秒計時器課程設(shè)計
- 多功能計時器課程設(shè)計
- 倒計時器課程設(shè)計
- 課程設(shè)計--倒計時計時器的設(shè)計
- 籃球比賽計時器(課程設(shè)計)
- 微機原理課程設(shè)計--打字計時練習(xí)
- 課程設(shè)計--籃球比賽計時器
- 課程設(shè)計報告---倒計時器
- 智能倒計時器課程設(shè)計
- 智能倒計時器課程設(shè)計
- 課程設(shè)計---籃球30秒計時器
評論
0/150
提交評論