版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 課程名稱:微機原理與接口技術課程設計</p><p> 設計題目: 數字鐘 </p><p> 系 別: </p><p> 專 業(yè):
2、 </p><p> 組 別: </p><p> 學生姓名: 學 號:</p><p><b> 起止日期: </b></p><p> 指導教師:
3、</p><p> 教研室主任: </p><p><b> 目錄</b></p><p> 需求分析 ………………………………………………… 3</p><p> 課程設計題目 ………………………………………………………… 3</p&g
4、t;<p> 課程設計任務及要求 ………………………………………………… 3</p><p> 課程設計思想 ……………………………………………………… 3</p><p> 軟硬件運行環(huán)境及開發(fā)工具 ……………………………………… 3</p><p> 概要設計 ………………………………………………… 4</p>
5、;<p> 程序流程圖 …………………………………………………………… 4</p><p> 設計方法及原理說明 ………………………………………………… 6</p><p> 詳細設計 ………………………………………………… 6</p><p> 程序代碼 ……………………………………………………………… 6</p>
6、<p> 運行結果 ………………………………………………………………11</p><p> 調試與操作說明 ……………………………………………12</p><p> 課程設計體會與總結 ………………………………………12</p><p> 致謝 …………………………………………………………13</p><p> 參
7、考文獻 …………………………………………………… 13</p><p><b> 第一章 需求分析</b></p><p><b> 課程設計題目:</b></p><p><b> 數字鐘</b></p><p> 課程設計任務及要求:</p><
8、;p> 在屏幕上顯示時:分:秒(HH:MM:SS)。按下非空格鍵開始計時,并顯示00:00:00,每過1秒,SS增1,到60秒MM增1,到60分HH增1,到24后回歸到00:00:00重新計時。當按下空格鍵時,程序結束并返回DOS,數字鐘消失。</p><p><b> 課程設計思想</b></p><p> 數字鐘的設計包括兩個方面,一是計時,一是顯示。
9、①計時利用INT 1CH調用次數來實現。INT 1CH是每秒鐘被定時器硬件中斷8調用18.2次,在程序的數據段中設立1個計數單元COUNT,令INT 1CH用戶中斷服務程序每次對它加1,若計到18次,則為1秒。這樣一直累加下去,直到計滿24小時,然后清零,又重新開始。②時間顯示利用DOS系統功能調用功能,將時、分、秒計時的內容送到屏幕顯示。</p><p> 本題是利用系統的定時器資源,用戶不用設計硬件電路。&
10、lt;/p><p> 系統BIOS已對定時器進行了初始化,不需再寫定時器的初始化程序段。</p><p> 程序分主程序和中斷服務程序兩部分:</p><p> 主程序包括對INT 1CH向量的獲取、修改和恢復,數字鐘的顯示、啟動和停止退出控制。主程序的主體是一個循環(huán)結構:判斷有無鍵按下,有鍵按下是否為空格鍵,若是空格鍵則退出循環(huán)轉到程序結束處理;否則,顯示數字鐘
11、的HH:MM:SS。</p><p> 中斷服務程序主要是對計數單元加1及秒、分、小時進位的調整。服務程序不寫中斷結束指令,以IRET指令返回。</p><p> 軟硬件運行環(huán)境及開發(fā)工具</p><p> 根據BIOS對8253初始化的規(guī)定,裝入計數初值后,定時的計數通道0就自動地從輸出端OUT0向8259A的IRQ0每隔55ms申請1次中斷,并進入硬件中斷
12、8的服務程序。</p><p> 中斷8中斷服務程序的功能有三項:①對日時鐘雙字計數區(qū)(地址為0040:006C)進行加1計數,以實現日時鐘的計時功能。當計數到001800B0H時(以55ms為計時單位),即到24小時,雙字計數區(qū)復位到0,并建立“新日”標志,開始第二天計時。②在中斷8的服務程序中,發(fā)出一條INT 1CH軟中斷指令,即調用1次INT 1CH。但是,INT 1CH的服務程序只是一條IRET指令,沒
13、有做任何事情就返回到中斷8的服務程序中。③對軟盤動馬達定時單元進行減1計數,減到0時,表示馬達轉速已達到要求。</p><p> INT 1CH的作用:INT 1CH作為用戶定時中斷。</p><p> 其方法是用戶自己編制一個定時中斷服務程序,并修改1CH號中斷的中斷向量,使之指向自編中斷服務程序的入口地址。服務程序的主體部分是作加1操作,即對55ms進行累加。每調用1次,加55ms
14、,當加到預設的時間就結束。這實際上是統計INT 1CH調用的次數,若要求定時的時間為T,調用次數為N,則T=55N(ms)。從式中就可以知道所要求的定時,需要調用多少次INT 1CH。用戶自編INT 1CH中斷服務程序時,程序結束應以IRET指令返回。注:修改了INT 1CH中斷向量,使其指向自編中斷服務程序入口,則自編中斷程序就會不停地每秒被調用18.2次,與CPU的運行速度無關。這說明了采用INT 1CH定時中斷作為用戶的定時或延
15、時,具有通用性和可移植性好的特點。</p><p><b> 設計提示</b></p><p> 數字鐘的設計包括兩個方面,一是計時,一是顯示。①計時利用INT 1CH調用次數來實現。INT 1CH是每秒鐘被定時器硬件中斷8調用18.2次,在程序的數據段中設立1個計數單元COUNT,令INT 1CH用戶中斷服務程序每次對它加1,若計到18次,則為1秒。這樣一直累加
16、下去,直到計滿24小時,然后清零,又重新開始。②時間顯示利用DOS系統功能調用功能,將時、分、秒計時的內容送到屏幕顯示。</p><p> 本題是利用系統的定時器資源,用戶不用設計硬件電路。</p><p> 系統BIOS已對定時器進行了初始化,不需再寫定時器的初始化程序段。</p><p> 程序分主程序和中斷服務程序兩部分:</p><
17、p> 主程序包括對INT 1CH向量的獲取、修改和恢復,數字鐘的顯示、啟動和停止退出控制。主程序的主體是一個循環(huán)結構:判斷有無鍵按下,有鍵按下是否為空格鍵,若是空格鍵則退出循環(huán)轉到程序結束處理;否則,顯示數字鐘的HH:MM:SS。</p><p> 中斷服務程序主要是對計數單元加1及秒、分、小時進位的調整。服務程序不寫中斷結束指令,以IRET指令返回。</p><p><b
18、> 第二章 概要設計</b></p><p><b> 程序流程圖</b></p><p> 中斷服務子程序流程圖</p><p><b> 設計方法及原理說明</b></p><p> 數字鐘的設計包括兩個方面,一是計時,一是顯示。①計時利用INT 1CH調用次數來實
19、現。INT 1CH是每秒鐘被定時器硬件中斷8調用18.2次,在程序的數據段中設立1個計數單元COUNT,令INT 1CH用戶中斷服務程序每次對它加1,若計到18次,則為1秒。這樣一直累加下去,直到計滿24小時,然后清零,又重新開始。②時間顯示利用DOS系統功能調用功能,將時、分、秒計時的內容送到屏幕顯示。</p><p> 主程序包括對INT 1CH向量的獲取、修改和恢復,數字鐘的顯示、啟動和停止退出控制。主程
20、序的主體是一個循環(huán)結構:判斷有無鍵按下,有鍵按下是否為空格鍵,若是空格鍵則退出循環(huán)轉到程序結束處理;否則,顯示數字鐘的HH:MM:SS。</p><p> 中斷服務程序主要是對計數單元加1及秒、分、小時進位的調整。服務程序不寫中斷結束指令,以IRET指令返回。</p><p><b> 第三章 詳細設計</b></p><p><b
21、> 程序代碼</b></p><p> DATAS SEGMENT</p><p> COUNT DB 0</p><p> HH DW 3 DUP(0)</p><p> YY DW 0,':',0,':',0,'$' </p><p>
22、INT_SEG DW ?</p><p> INT_OFF DW ?</p><p> GG DB '00 :00 :00$'</p><p> TISHI1 DB 'Press not space to start!$' </p><p> TISHI2 DB 'If you want to
23、exit,press space!$' </p><p> DATAS ENDS</p><p> STACKS SEGMENT</p><p> FD DB 50 DUP(0)</p><p> STACKS ENDS</p><p> CODES SEGMENT</p><p&
24、gt; ASSUME CS:CODES,DS:DATAS,SS:STACKS</p><p><b> START:</b></p><p> MOV AX,DATAS</p><p><b> MOV DS,AX</b></p><p> CALL CLEAR</p>&l
25、t;p> MOV AH,02 </p><p><b> MOV BH,00</b></p><p> MOV DL,18H</p><p> MOV DH,09H</p><p> INT 10H ;移動光標到指定位置</p><p> MOV DX,OFFSET
26、 TISHI1</p><p> MOV AH,09H</p><p> INT 21H </p><p> MOV AH,02 </p><p><b> MOV BH,00</b></p><p> MOV DL,20H</p><p> M
27、OV DH,0CH</p><p><b> INT 10H </b></p><p> MOV DX,OFFSET GG</p><p> MOV AH,09H</p><p> INT 21H ;顯示開始計時提示語 </p><p> MOV AH,01H</p
28、><p><b> INT 16H</b></p><p><b> JZ TT</b></p><p> MOV AH,00H</p><p><b> INT 16H</b></p><p> CMP AL,20H</p><
29、;p> JZ TT ;檢測是否按下非空格鍵</p><p> MOV AX,351CH </p><p><b> INT 21H</b></p><p><b> MOV AX,ES</b></p><p> MOV INT_SEG,AX</p>
30、;<p> MOV INT_OFF,BX ;保存原中斷向量</p><p> CLI </p><p> MOV AX,251CH </p><p> MOV DX,SEG INT_PRO</p><p><b> MOV DS,DX</b></p
31、><p> MOV DX,OFFSET INT_PRO</p><p> INT 21H ;設置新中斷向量</p><p> STI </p><p> CALL MAIN ;進入主函數main</p><p> MOV AH,4CH</p><p>
32、;<b> INT 21H</b></p><p> TT: LOOP START</p><p><b> MAIN PROC</b></p><p><b> PUSH AX</b></p><p><b> PUSH SI</b></
33、p><p><b> PUSH DX</b></p><p><b> PUSH BX</b></p><p><b> PUSH DS</b></p><p> FF: MOV AX,DATAS</p><p><b> MOV DS,
34、AX</b></p><p> CALL CLEAR</p><p> MOV AH,02 </p><p><b> MOV BH,00</b></p><p> MOV DL,15H</p><p> MOV DH,09H</p><p><
35、b> INT 10H</b></p><p> MOV DX,OFFSET TISHI2</p><p> MOV AH,09H</p><p> INT 21H ;顯示退出提示語 </p><p> MOV AH,02 </p><p><b> MO
36、V BH,00</b></p><p> MOV DL,20H</p><p> MOV DH,0CH</p><p> INT 10H ;移動光標到屏幕中間</p><p> MOV SI,OFFSET HH </p><p> MOV DI,OFFSET YY</p>
37、;<p> MOV AL,[SI+4]</p><p><b> OR AL,30H</b></p><p> MOV [DI+9],AL</p><p> MOV AL,[SI+5]</p><p><b> OR AL,30H</b></p><p&g
38、t; MOV [DI+8],AL</p><p> MOV AL,[SI+3]</p><p><b> OR AL,30H</b></p><p> MOV [DI+4],AL</p><p> MOV AL,[SI+2]</p><p><b> OR AL,30H<
39、;/b></p><p> MOV [DI+5],AL</p><p> MOV AL,[SI+1]</p><p><b> OR AL,30H</b></p><p> MOV [DI],AL</p><p> MOV AL,[SI]</p><p>&
40、lt;b> OR AL,30H</b></p><p> MOV [DI+1],AL ;根據小端法則將數據交叉放入指定空間</p><p> MOV AH,09H</p><p> MOV DX,OFFSET YY</p><p><b> INT 21H</b></p>&
41、lt;p> MOV AH,01H</p><p><b> INT 16H</b></p><p><b> JZ FF</b></p><p> MOV AH,00H</p><p><b> INT 16H</b></p><p>
42、 CMP AL,20H</p><p><b> JZ QUIT</b></p><p><b> LOOP FF</b></p><p><b> QUIT:</b></p><p><b> CLI</b></p><p&
43、gt; MOV AX,251CH ;恢復原中斷向量</p><p> MOV DX,INT_SEG</p><p> MOV DS,DX </p><p> MOV DX,INT_OFF</p><p><b> INT 21H</b></p><p><b>
44、; STI </b></p><p><b> POP DS</b></p><p><b> POP BX</b></p><p><b> POP DX</b></p><p><b> POP SI</b></p>
45、<p><b> POP AX</b></p><p><b> RET</b></p><p><b> MAIN ENDP</b></p><p> CLEAR PROC ;刷新屏幕</p><p> MOV AX,3600H&l
46、t;/p><p><b> MOV BH,07</b></p><p> MOV CX,0000H</p><p> MOV DX,184FH</p><p><b> INT 10H</b></p><p><b> RET</b></p&
47、gt;<p> CLEAR ENDP</p><p> INT_PRO PROC FAR</p><p><b> PUSH AX</b></p><p><b> PUSH SI</b></p><p><b> CLI</b></p>
48、<p> MOV AX,DATAS</p><p><b> MOV DS,AX</b></p><p> MOV SI,OFFSET HH</p><p><b> INC COUNT</b></p><p> CMP COUNT,12H</p><p>
49、;<b> JNZ KK</b></p><p><b> MOV AL,0</b></p><p> MOV COUNT,AL</p><p> MOV AX,[SI+4]</p><p><b> ADD AX,1</b></p><p>
50、<b> AAA</b></p><p> MOV [SI+4],AX ;修改秒</p><p> CMP AX,600H</p><p><b> JNZ KK</b></p><p><b> MOV AX,0</b></p><
51、;p> MOV [SI+4],AX</p><p> MOV AX,[SI+2]</p><p><b> ADD AX,1</b></p><p><b> AAA</b></p><p> MOV [SI+2],AX ;修改分</p><p> CM
52、P AX,600H</p><p><b> JNZ KK</b></p><p><b> MOV AX,0</b></p><p> MOV [SI+2],AL</p><p> MOV AX,[SI]</p><p><b> ADD AX,1<
53、;/b></p><p><b> AAA</b></p><p> MOV [SI],AX ;修改小時</p><p> CMP AX,204H</p><p><b> JNZ KK</b></p><p><b> MOV AX,0<
54、;/b></p><p> MOV [SI],AX</p><p> KK:POP SI</p><p><b> POP AX</b></p><p><b> STI</b></p><p><b> IRET</b></p&
55、gt;<p> INT_PRO ENDP</p><p> CODES ENDS</p><p><b> END START</b></p><p><b> 運行結果</b></p><p> 第四章 調試與操作說明</p><p> 根據BI
56、OS對8253初始化的規(guī)定,裝入計數初值后,定時的計數通道0就自動地從輸出端OUT0向8259A的IRQ0每隔55ms申請1次中斷,并進入硬件中斷8的服務程序。</p><p> 中斷8中斷服務程序的功能有三項:①對日時鐘雙字計數區(qū)(地址為0040:006C)進行加1計數,以實現日時鐘的計時功能。當計數到001800B0H時(以55ms為計時單位),即到24小時,雙字計數區(qū)復位到0,并建立“新日”標志,開始第二
57、天計時。②在中斷8的服務程序中,發(fā)出一條INT 1CH軟中斷指令,即調用1次INT 1CH。但是,INT 1CH的服務程序只是一條IRET指令,沒有做任何事情就返回到中斷8的服務程序中。③對軟盤動馬達定時單元進行減1計數,減到0時,表示馬達轉速已達到要求。</p><p> INT 1CH的作用:INT 1CH作為用戶定時中斷。</p><p> 其方法是用戶自己編制一個定時中斷服務程
58、序,并修改1CH號中斷的中斷向量,使之指向自編中斷服務程序的入口地址。服務程序的主體部分是作加1操作,即對55ms進行累加。每調用1次,加55ms,當加到預設的時間就結束。這實際上是統計INT 1CH調用的次數,若要求定時的時間為T,調用次數為N,則T=55N(ms)。從式中就可以知道所要求的定時,需要調用多少次INT 1CH。用戶自編INT 1CH中斷服務程序時,程序結束應以IRET指令返回。</p><p>
59、; 第五章 課程設計體會和總結</p><p> 經過這為期三天的實訓,我清晰的認識到了自己在匯編語言的學習上的不足。剛剛接觸到這個課程設計的題目的時候自己是很迷茫的,不知道怎么下手,但是仔細的看了老師所給的課程設計任務書以后感覺自己的思路一下子被打開了??墒窃谧约涸O計程序的時候就又遇到了一個問題,對于修改中斷服務子程序的入口地址雖然在理論上自己懂,但是從來都沒寫過這種程序,所以自己查了一下相關的書籍才真正
60、的完整的知道怎么修改中端服務子程序的入口地址了。隨后是中端服務子程序中時分秒數據的進位問題。最后就是進入數字鐘顯示界面的設計問題,主要是INT 10H號終端來控制輸出屬性和字符輸出的位置。這整個課程設計下來我感覺確實對自己在這半年來所學習到的知識起到很好的練手作用。</p><p><b> 第六章 致謝</b></p><p> 感謝學院和系部給了我們這次實訓
61、的機會,同時也感謝黃老師分出您寶貴的時間來給我們做指導。</p><p><b> 第七章 參考文獻</b></p><p> 楊幫華、馬世偉、王健、劉廷章等編著《微機原理與接口技術》,清華大學出版社</p><p> Muhammad Ali Mazidi Janice Gillispie Mazidi 著</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論