版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> ( 2013—2014年度第一學期)</p><p> 名 稱:微機原理及應用 </p><p> 題 目:8253定時中斷時鐘 </p><p> 院 系:控計學院 </p><p&g
2、t; 班 級: </p><p> 學 號: </p><p> 學生姓名: </p><p> 指導教師: </p><p> 設計周數(shù):1周 </p><p> 成 績:
3、 </p><p> 日期:2013年12月30日</p><p><b> 目錄</b></p><p> 一、課程設計的目的與要求2</p><p> 1.課程設計的題目2</p><p> 2.課程設計的要求2</p><p><b>
4、 二、設計正文2</b></p><p><b> 1.基本原理2</b></p><p><b> 2.代碼示例2</b></p><p> 三、課程設計總結6</p><p><b> 四、參考文獻7</b></p><p
5、><b> 附錄7</b></p><p><b> 1.程序源碼7</b></p><p> 2.程序流程圖13</p><p> 一、課程設計的目的與要求</p><p><b> 課程設計的題目</b></p><p> 題
6、目:用8253定時器實現(xiàn)屏幕上的日歷時鐘,帶有年月日時分秒(1人) 在DOS屏幕上右上角動態(tài)顯示日期、時間,要求格式:年-月-日 時:分:秒。要求采用8253定時器中斷方式實現(xiàn)定時及顯示刷新。</p><p><b> 課程設計的要求</b></p><p> 通過對微機系統(tǒng)分析和具體設計,使學生對所學課程的理解。培養(yǎng)分析能問題,解決問題的能力。要求學生掌握匯編語
7、言程序設計的基本方法,學會典型接口的基本設計方法</p><p><b> 二、設計正文</b></p><p><b> 1.基本原理</b></p><p> 獲取系統(tǒng)時間與日期的方式有兩種,比較簡單的途徑是直接用DOS時間與日期功能調(diào)。比如:向量號為21,功能號為2A,可以調(diào)出系統(tǒng)的時間,分別存放在DX和CX之
8、中;向量號為21,功能號為2C可以調(diào)出系統(tǒng)的日期,年月日信息存儲在DX和CX中;向量號為1A,功能號為02,也可以調(diào)用系統(tǒng)時間,同樣存放在DX和CX中,不過是以壓縮BCD碼的形式存放的;向量號為1A,功能號為04可以調(diào)出系統(tǒng)的日期,以BCD碼的形式存放在DX和CX中。編程的時候就會發(fā)現(xiàn),后者比前者使用起來方便很多,因為顯示的時候要用到ASC碼,壓縮BCD碼可以通過與30H相加,便可以得到相應的ASC碼。而前者存儲方式十六進制的,所以必須
9、先轉(zhuǎn)換成BCD碼,在轉(zhuǎn)換成ASC碼,而十六進制與BCD碼之間的轉(zhuǎn)換比較復雜。</p><p><b> 2.代碼示例</b></p><p> 用1A向量實現(xiàn),程序代碼如下: </p><p> MOV AH,02H</p><p><b> INT 1AH</b></p>&
10、lt;p><b> PUSH DX</b></p><p> PUSH CX </p><p> MOV AH,04H</p><p><b> INT 1AH</b></p><p><b> PUSH DX</b></p>&l
11、t;p><b> PUSH CX</b></p><p> 這段代碼執(zhí)行后,查看堆棧得:14 20 02 01 17 17 07 52,時間為:2014年1月2日17點17分52秒</p><p> 用21號向量實現(xiàn),程序代碼如下:</p><p> MOV AH,2CH</p><p><b>
12、 INT 21H</b></p><p><b> PUSH DX</b></p><p><b> PUSH CX</b></p><p> MOV AH,2AH</p><p><b> INT 21H</b></p><p>
13、<b> PUSH DX</b></p><p><b> PUSH CX</b></p><p> 代碼執(zhí)行后,查看堆棧得:DE 07 02 01 17 11 40 16,當前系統(tǒng)時間用16進制表示的,換算之后,可以得到:2014年1月2日17點23分22秒</p><p> 另一種方式就是題目所要求的,利用82
14、53的55MS中斷產(chǎn)生定時,不過仍然需要讀一次系統(tǒng)的時間,作為計時開始的基準。8253每過50MS,就會申請一次中斷,向量號為1C。通過修改這個中斷向量,使其指向自己編寫的中斷服務程序入口。通過計算中斷的次數(shù),便可以得到從計時開始到當前時刻的時間。程序的數(shù)據(jù)段定義如下:</p><p> DATAS SEGMENT </p><p> COUNT DB 0 </p>&l
15、t;p> TEMP DB 3 DUP(0)</p><p> TIME DW 0,':',0,':',0,'$'</p><p> DATE DW 0,0,'-',0,'-',0,'$'</p><p> INT_SEG DW ? </p>
16、<p> INT_OFF DW ? </p><p> DATAS ENDS</p><p> 每次進入中斷服務程序,COUNT加一,加到18的時候,便可以計為一秒。TEMP用來存放當前時刻的壓縮BCD碼,比如:18:37:50,則TEMP中存放18H,37H,50H。由于顯示的時候,必須用ASC碼,所以TEMP中的數(shù)據(jù)不能直接用于顯示,需通過下面的TRANS PR
17、OC進行轉(zhuǎn)換:</p><p> TRANS PROC ;BCD-ASC碼轉(zhuǎn)化,入口AL,出口AX</p><p><b> PUSH CX</b></p><p><b> PUSH DX</b></p><p> MOV BL,AL</p
18、><p> MOV BH,AL</p><p><b> MOV CL,4</b></p><p> SHR BL,CL</p><p> ADD BL,30H</p><p> AND BH,0FH</p><p> ADD BH,30H</p&
19、gt;<p> MOV AX,BX</p><p><b> POP DX</b></p><p><b> POP CX</b></p><p><b> RET</b></p><p> TRANS ENDP </p><p
20、> 此過程的入口參數(shù)為AL,用來存放時刻的壓縮BCD碼,出口為AX,存放的是轉(zhuǎn)化后的ASC碼形式。比如:壓縮BCD碼18H,轉(zhuǎn)換之后為3138H,就可以直接用來顯示。轉(zhuǎn)換思想為:取前四位=01H,加上30H,得到31H,同樣取出后四位=08H,加上30H,得到38H。轉(zhuǎn)化之后的結果存入TIME中,用來顯示,轉(zhuǎn)換過程的代碼如下:</p><p> MOV SI,OFFSET TEMP </p>
21、<p> MOV DI,OFFSET TIME </p><p> MOV AL,[SI] </p><p> CALL TRANS</p><p> MOV [DI],AX</p><p> MOV AL,[SI+1]</p><p> CALL TRANS</p&g
22、t;<p> MOV [DI+4],AX</p><p> MOV AL,[SI+2]</p><p> CALL TRANS</p><p> MOV [DI+8],AX ;將時間的ASC碼送入TIME</p><p> 中斷向量的修改通過下面代碼實現(xiàn):</p><p> MOV
23、 AX,351CH</p><p><b> INT 21H</b></p><p> MOV AX,ES</p><p> MOV INT_SEG,AX</p><p> MOV INT_OFF,BX ;保存原中斷向量 </p><p><b>
24、CLI</b></p><p> MOV AX,251CH</p><p> MOV DX,SEG INT_PRO</p><p> MOV DS,DX</p><p> MOV DX,OFFSET INT_PRO</p><p> INT 21H
25、;設置新中斷向量 </p><p><b> STI</b></p><p> 在修改之前需把原本的中斷向量保存起來,以便程序運行結束后進行還原。下面是中斷服務程序:</p><p> INT_PRO PROC FAR ;時間產(chǎn)生程序</p><p><b> PUSH
26、 AX </b></p><p><b> PUSH SI </b></p><p><b> CLI </b></p><p> MOV AX,DATAS </p><p> MOV DS,AX </p><p> MOV SI,OFFSET TEMP
27、 </p><p> INC COUNT </p><p> CMP COUNT,12H </p><p><b> JNZ KK </b></p><p><b> MOV AL,0 </b></p><p> MOV COUNT,AL </p>&
28、lt;p> MOV AL,[SI+2] </p><p><b> ADD AL,1</b></p><p><b> DAA </b></p><p> MOV [SI+2],AL ;修改秒 </p><p> CMP AL,60H </p><p>
29、;<b> JNZ KK</b></p><p><b> MOV AL,0 </b></p><p> MOV [SI+2],AL </p><p> MOV AL,[SI+1] </p><p><b> ADD AL,1 </b></p><
30、p><b> DAA </b></p><p> MOV [SI+1],AL ;修改分 </p><p> CMP AX,60H </p><p><b> JNZ KK </b></p><p><b> MOV AL,0 </b></p>
31、<p> MOV [SI+1],AL </p><p> MOV AL,[SI] </p><p><b> ADD AL,1 </b></p><p><b> DAA </b></p><p> MOV [SI],AL ;修改小時</p><p
32、> CMP AX,24H </p><p><b> JNZ KK </b></p><p><b> MOV AX,0 </b></p><p> MOV [SI],AL </p><p> KK: POP SI </p><p><b>
33、 POP AX </b></p><p><b> STI </b></p><p><b> IRET </b></p><p> INT_PRO ENDP</p><p> 中斷服務程序最開始對COUNT加一,當加到18時清零并且秒加一,如果秒數(shù)變?yōu)?0,清零并且分加一,當
34、分計滿60的時候,時加一,時滿24時,清零。最后用IRET返回。</p><p> 程序的退出通過檢測鍵盤是否輸入ESC鍵,代碼如下:</p><p> MOV AH,0BH </p><p><b> INT 21H</b></p><p> CMP AL,00 </p><p> J
35、NE AA ;看一看是否有按鍵輸入</p><p><b> JMP GO </b></p><p> AA: MOV AH,08H</p><p><b> INT 21H</b></p><p> CMP AL,1BH </p><
36、p> JE QUIT ;如果有按鍵按下,檢查是不是ESC,是的話就退出</p><p> JMP GO ;不是的話,繼續(xù)執(zhí)行 </p><p><b> 三、課程設計總結</b></p><p> 通過3天的奮戰(zhàn),完成了課設,最大的感覺:好幸福!這些程序是我一步一步的查課本,查資料,還有
37、不斷的實驗調(diào)試得出來的,當顯示出穩(wěn)定并且正確的時刻時,前所未有的成就感涌上心頭!最初,為了將16位的二進制表示的年份轉(zhuǎn)換成BCD碼,頭疼了一天,一步一步的執(zhí)行,一個一個的查看寄存器、查堆棧,最終驚奇的發(fā)現(xiàn)另一個中斷向量1AH竟然可以調(diào)用出BCD碼形式的日期,別提多興奮!以及,在之后建立過程的時候,由于忘了在末尾加上RET,發(fā)現(xiàn)程序總是莫名其妙的跳來跳去。感慨:有些東西想起來簡單,做起來的時候很多細節(jié)是能夠決定成敗的!后來呢,程序有了雛形
38、,可以正確顯示,卻發(fā)現(xiàn)畫面異常不穩(wěn),閃來閃去,于是有絞盡腦汁,想起來之前自己在編液晶顯示驅(qū)動的時候,由于不停地刷屏導致閃屏的狀況,發(fā)現(xiàn)這個程序的顯示部分也有相同的狀況,改變了一下GO的位置,畫面終于穩(wěn)定了!</p><p> 所有的奮戰(zhàn)凝結成一句話:我愛微機!</p><p><b> 四、參考文獻</b></p><p> 《新編16/
39、32位微型計算機原理及應用(第四版)》,清華大學出版社,李繼燦主編</p><p><b> 附錄</b></p><p><b> 1.程序源碼</b></p><p> DATAS SEGMENT </p><p> COUNT DB 0 </p><p> T
40、EMP DB 3 DUP(0)</p><p> TIME DW 0,':',0,':',0,'$'</p><p> DATE DW 0,0,'-',0,'-',0,'$'</p><p> INT_SEG DW ? </p><p>
41、 INT_OFF DW ? </p><p> DATAS ENDS </p><p> STACKS SEGMENT </p><p> FD DB 50 DUP(0) </p><p> STACKS ENDS </p><p> CODES SEGMENT </p>
42、<p> ASSUME CS:CODES,DS:DATAS,SS:STACKS </p><p> START: MOV AX,DATAS </p><p> MOV DS,AX </p><p> CALL CLEAR </p><p> MOV AX,351CH</p><p>
43、;<b> INT 21H</b></p><p> MOV AX,ES</p><p> MOV INT_SEG,AX</p><p> MOV INT_OFF,BX ;保存原中斷向量 </p><p><b> CLI</b></p><p&g
44、t; MOV AX,251CH</p><p> MOV DX,SEG INT_PRO</p><p> MOV DS,DX</p><p> MOV DX,OFFSET INT_PRO</p><p> INT 21H ;設置新中斷向量 </p><p>&
45、lt;b> STI</b></p><p> CALL MAIN ;進入主函數(shù)main </p><p> MOV AH,4CH</p><p><b> INT 21H</b></p><p> MAIN PROC
46、 ;主函數(shù)</p><p><b> PUSH AX</b></p><p><b> PUSH SI</b></p><p><b> PUSH DX</b></p><p><b> PUSH BX</b></p>
47、;<p><b> PUSH DS</b></p><p> MOV AX,DATAS </p><p><b> MOV DS,AX</b></p><p> MOV AH,02H</p><p> INT 1AH ;讀取系統(tǒng)時間&
48、lt;/p><p> MOV SI,OFFSET TEMP</p><p> MOV [SI],CH</p><p> MOV [SI+1],CL</p><p> MOV [SI+2],DH</p><p> MOV AH,04H </p><p> INT
49、1AH ;讀取系統(tǒng)日期</p><p> MOV SI,OFFSET DATE</p><p> MOV AL,CH</p><p> CALL TRANS</p><p> MOV [SI],AX</p><p> MOV AL,CL</p>
50、<p> CALL TRANS</p><p> MOV [SI+2],AX</p><p> MOV AL,DH</p><p> CALL TRANS</p><p> MOV [SI+6],AX</p><p> MOV AL,DL</p><p&g
51、t; CALL TRANS</p><p> MOV [SI+10],AX</p><p> MOV AH,0</p><p> MOV AL,2</p><p> INT 10H ;屏幕設置成80X25黑白文本方式</p><p> MOV CX,2
52、000H</p><p> MOV AH,01H</p><p> INT 10H ;隱藏光標</p><p> GO: MOV AX,DATAS </p><p> MOV DS,AX </p><p> CALL CLEAR </p>
53、<p> MOV AH,02H</p><p> MOV BH,00H</p><p> MOV DL,50</p><p> MOV DH,1</p><p><b> INT 10H</b></p><p> MOV AH,09H </p
54、><p> MOV DX,OFFSET DATE</p><p> INT 21H ;顯示日期 </p><p> MOV AH,02H</p><p> MOV BH,00H</p><p> MOV DL,69</p><p><
55、;b> MOV DH,1</b></p><p> INT 10H ;移動光標到屏幕右上角 </p><p> MOV SI,OFFSET TEMP </p><p> MOV DI,OFFSET TIME </p><p> MOV AL,[SI] <
56、;/p><p> CALL TRANS</p><p> MOV [DI],AX</p><p> MOV AL,[SI+1]</p><p> CALL TRANS</p><p> MOV [DI+4],AX</p><p> MOV AL,[SI+2]</p>&
57、lt;p> CALL TRANS</p><p> MOV [DI+8],AX ;將時間的ASC碼送入TIME</p><p> MOV AH,09H </p><p> MOV DX,OFFSET TIME </p><p> INT 21H ;顯示時刻 </p><p>
58、; MOV AH,0BH </p><p><b> INT 21H</b></p><p> CMP AL,00 </p><p> JNE AA ;看一看是否有按鍵輸入</p><p><b> JMP GO </b></p><p>
59、 AA: MOV AH,08H</p><p><b> INT 21H</b></p><p> CMP AL,1BH </p><p> JE QUIT ;如果有按鍵按下,檢查是不是ESC,是的話就退出</p><p> JMP GO ;不是的話,繼續(xù)執(zhí)行
60、 </p><p> QUIT: CLI </p><p> MOV AX,251CH ;恢復原中斷向量</p><p> MOV DX,INT_SEG </p><p> MOV DS,DX </p><p> MOV DX,INT_OFF </p><p><
61、;b> INT 21H </b></p><p><b> STI </b></p><p><b> POP DS </b></p><p><b> POP BX </b></p><p><b> POP DX </b>&
62、lt;/p><p><b> POP SI </b></p><p><b> POP AX </b></p><p><b> RET </b></p><p> MAIN ENDP </p><p> CLEAR PROC
63、 ;刷新屏幕 </p><p> MOV AX,3600H </p><p> MOV BH,07 </p><p> MOV CX,0000H </p><p> MOV DX,184FH </p><p><b> INT 10
64、H </b></p><p><b> RET </b></p><p> CLEAR ENDP </p><p> TRANS PROC ;BCD-ASC碼轉(zhuǎn)化,入口AL,出口AX</p><p><b> PUSH CX</b></p><p><
65、;b> PUSH DX</b></p><p> MOV BL,AL</p><p> MOV BH,AL</p><p><b> MOV CL,4</b></p><p> SHR BL,CL</p><p> ADD BL,30H</p>
66、<p> AND BH,0FH</p><p> ADD BH,30H</p><p> MOV AX,BX</p><p><b> POP DX</b></p><p><b> POP CX</b></p><p><b>
67、RET</b></p><p> TRANS ENDP </p><p> INT_PRO PROC FAR ;時間產(chǎn)生程序</p><p><b> PUSH AX </b></p><p><b> PUSH SI </b></p>
68、<p><b> CLI </b></p><p> MOV AX,DATAS </p><p> MOV DS,AX </p><p> MOV SI,OFFSET TEMP </p><p> INC COUNT </p><p> CMP COUNT,12H <
69、/p><p><b> JNZ KK </b></p><p><b> MOV AL,0 </b></p><p> MOV COUNT,AL </p><p> MOV AL,[SI+2] </p><p><b> ADD AL,1</b>&
70、lt;/p><p><b> DAA </b></p><p> MOV [SI+2],AL ;修改秒 </p><p> CMP AL,60H </p><p><b> JNZ KK</b></p><p><b> MOV AL,0 </b
71、></p><p> MOV [SI+2],AL </p><p> MOV AL,[SI+1] </p><p><b> ADD AL,1 </b></p><p><b> DAA </b></p><p> MOV [SI+1],AL ;修改分
72、</p><p> CMP AX,60H </p><p><b> JNZ KK </b></p><p><b> MOV AL,0 </b></p><p> MOV [SI+1],AL </p><p> MOV AL,[SI] </p>&l
73、t;p><b> ADD AL,1 </b></p><p><b> DAA </b></p><p> MOV [SI],AL ;修改小時</p><p> CMP AX,24H </p><p><b> JNZ KK </b></p>
74、;<p><b> MOV AX,0 </b></p><p> MOV [SI],AL </p><p> KK: POP SI </p><p><b> POP AX </b></p><p><b> STI </b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機課程設計---硬件中斷時鐘設計
- 微機原理課程設計--數(shù)字時鐘
- 微機原理課程設計---電子時鐘
- 微機原理課程設計--數(shù)字時鐘 (2)
- 《電子時鐘》微機原理課程設計
- 微機原理課程設計---指針顯示時鐘
- 微機原理課程設計(電子時鐘)
- 微機原理課程設計—— 定時器系統(tǒng)
- 組成原理課程設計報告之8253定時計數(shù)器
- 基于微機原理電子時鐘課程設計
- 微機原理與接口技術課程設計--實時鐘顯示與定時控制設計
- arm課程設計報告--使用中斷定時器設計時鐘
- 微機原理課程設計--中斷實現(xiàn)雙機通訊程序
- 微機原理課程設計報告--數(shù)據(jù)采集系統(tǒng)三(中斷法)
- 微機課程設計--計時時鐘
- 微機原理課程設計
- 微機原理課程設計報告
- 微機原理課程設計.rar
- 微機原理課程設計報告
- 2017微機原理課程設計
評論
0/150
提交評論