版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> ( 2013—2014年度第一學(xué)期)</p><p> 名 稱:微機(jī)原理及應(yīng)用 </p><p> 題 目:8253定時(shí)中斷時(shí)鐘 </p><p> 院 系:控計(jì)學(xué)院 </p><p&g
2、t; 班 級(jí): </p><p> 學(xué) 號(hào): </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)周數(shù):1周 </p><p> 成 績:
3、 </p><p> 日期:2013年12月30日</p><p><b> 目錄</b></p><p> 一、課程設(shè)計(jì)的目的與要求2</p><p> 1.課程設(shè)計(jì)的題目2</p><p> 2.課程設(shè)計(jì)的要求2</p><p><b>
4、 二、設(shè)計(jì)正文2</b></p><p><b> 1.基本原理2</b></p><p><b> 2.代碼示例2</b></p><p> 三、課程設(shè)計(jì)總結(jié)6</p><p><b> 四、參考文獻(xiàn)7</b></p><p
5、><b> 附錄7</b></p><p><b> 1.程序源碼7</b></p><p> 2.程序流程圖13</p><p> 一、課程設(shè)計(jì)的目的與要求</p><p><b> 課程設(shè)計(jì)的題目</b></p><p> 題
6、目:用8253定時(shí)器實(shí)現(xiàn)屏幕上的日歷時(shí)鐘,帶有年月日時(shí)分秒(1人) 在DOS屏幕上右上角動(dòng)態(tài)顯示日期、時(shí)間,要求格式:年-月-日 時(shí):分:秒。要求采用8253定時(shí)器中斷方式實(shí)現(xiàn)定時(shí)及顯示刷新。</p><p><b> 課程設(shè)計(jì)的要求</b></p><p> 通過對(duì)微機(jī)系統(tǒng)分析和具體設(shè)計(jì),使學(xué)生對(duì)所學(xué)課程的理解。培養(yǎng)分析能問題,解決問題的能力。要求學(xué)生掌握匯編語
7、言程序設(shè)計(jì)的基本方法,學(xué)會(huì)典型接口的基本設(shè)計(jì)方法</p><p><b> 二、設(shè)計(jì)正文</b></p><p><b> 1.基本原理</b></p><p> 獲取系統(tǒng)時(shí)間與日期的方式有兩種,比較簡單的途徑是直接用DOS時(shí)間與日期功能調(diào)。比如:向量號(hào)為21,功能號(hào)為2A,可以調(diào)出系統(tǒng)的時(shí)間,分別存放在DX和CX之
8、中;向量號(hào)為21,功能號(hào)為2C可以調(diào)出系統(tǒng)的日期,年月日信息存儲(chǔ)在DX和CX中;向量號(hào)為1A,功能號(hào)為02,也可以調(diào)用系統(tǒng)時(shí)間,同樣存放在DX和CX中,不過是以壓縮BCD碼的形式存放的;向量號(hào)為1A,功能號(hào)為04可以調(diào)出系統(tǒng)的日期,以BCD碼的形式存放在DX和CX中。編程的時(shí)候就會(huì)發(fā)現(xiàn),后者比前者使用起來方便很多,因?yàn)轱@示的時(shí)候要用到ASC碼,壓縮BCD碼可以通過與30H相加,便可以得到相應(yīng)的ASC碼。而前者存儲(chǔ)方式十六進(jìn)制的,所以必須
9、先轉(zhuǎn)換成BCD碼,在轉(zhuǎn)換成ASC碼,而十六進(jìn)制與BCD碼之間的轉(zhuǎn)換比較復(fù)雜。</p><p><b> 2.代碼示例</b></p><p> 用1A向量實(shí)現(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,時(shí)間為:2014年1月2日17點(diǎn)17分52秒</p><p> 用21號(hào)向量實(shí)現(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,當(dāng)前系統(tǒng)時(shí)間用16進(jìn)制表示的,換算之后,可以得到:2014年1月2日17點(diǎn)23分22秒</p><p> 另一種方式就是題目所要求的,利用82
14、53的55MS中斷產(chǎn)生定時(shí),不過仍然需要讀一次系統(tǒng)的時(shí)間,作為計(jì)時(shí)開始的基準(zhǔn)。8253每過50MS,就會(huì)申請(qǐng)一次中斷,向量號(hào)為1C。通過修改這個(gè)中斷向量,使其指向自己編寫的中斷服務(wù)程序入口。通過計(jì)算中斷的次數(shù),便可以得到從計(jì)時(shí)開始到當(dāng)前時(shí)刻的時(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> 每次進(jìn)入中斷服務(wù)程序,COUNT加一,加到18的時(shí)候,便可以計(jì)為一秒。TEMP用來存放當(dāng)前時(shí)刻的壓縮BCD碼,比如:18:37:50,則TEMP中存放18H,37H,50H。由于顯示的時(shí)候,必須用ASC碼,所以TEMP中的數(shù)據(jù)不能直接用于顯示,需通過下面的TRANS PR
17、OC進(jìn)行轉(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,用來存放時(shí)刻的壓縮BCD碼,出口為AX,存放的是轉(zhuǎn)化后的ASC碼形式。比如:壓縮BCD碼18H,轉(zhuǎn)換之后為3138H,就可以直接用來顯示。轉(zhuǎn)換思想為:取前四位=01H,加上30H,得到31H,同樣取出后四位=08H,加上30H,得到38H。轉(zhuǎn)化之后的結(jié)果存入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 ;將時(shí)間的ASC碼送入TIME</p><p> 中斷向量的修改通過下面代碼實(shí)現(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、;設(shè)置新中斷向量 </p><p><b> STI</b></p><p> 在修改之前需把原本的中斷向量保存起來,以便程序運(yùn)行結(jié)束后進(jìn)行還原。下面是中斷服務(wù)程序:</p><p> INT_PRO PROC FAR ;時(shí)間產(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 ;修改小時(shí)</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> 中斷服務(wù)程序最開始對(duì)COUNT加一,當(dāng)加到18時(shí)清零并且秒加一,如果秒數(shù)變?yōu)?0,清零并且分加一,當(dāng)
34、分計(jì)滿60的時(shí)候,時(shí)加一,時(shí)滿24時(shí),清零。最后用IRET返回。</p><p> 程序的退出通過檢測(cè)鍵盤是否輸入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> 三、課程設(shè)計(jì)總結(jié)</b></p><p> 通過3天的奮戰(zhàn),完成了課設(shè),最大的感覺:好幸福!這些程序是我一步一步的查課本,查資料,還有
37、不斷的實(shí)驗(yàn)調(diào)試得出來的,當(dāng)顯示出穩(wěn)定并且正確的時(shí)刻時(shí),前所未有的成就感涌上心頭!最初,為了將16位的二進(jìn)制表示的年份轉(zhuǎn)換成BCD碼,頭疼了一天,一步一步的執(zhí)行,一個(gè)一個(gè)的查看寄存器、查堆棧,最終驚奇的發(fā)現(xiàn)另一個(gè)中斷向量1AH竟然可以調(diào)用出BCD碼形式的日期,別提多興奮!以及,在之后建立過程的時(shí)候,由于忘了在末尾加上RET,發(fā)現(xiàn)程序總是莫名其妙的跳來跳去。感慨:有些東西想起來簡單,做起來的時(shí)候很多細(xì)節(jié)是能夠決定成敗的!后來呢,程序有了雛形
38、,可以正確顯示,卻發(fā)現(xiàn)畫面異常不穩(wěn),閃來閃去,于是有絞盡腦汁,想起來之前自己在編液晶顯示驅(qū)動(dòng)的時(shí)候,由于不停地刷屏導(dǎo)致閃屏的狀況,發(fā)現(xiàn)這個(gè)程序的顯示部分也有相同的狀況,改變了一下GO的位置,畫面終于穩(wěn)定了!</p><p> 所有的奮戰(zhàn)凝結(jié)成一句話:我愛微機(jī)!</p><p><b> 四、參考文獻(xiàn)</b></p><p> 《新編16/
39、32位微型計(jì)算機(jī)原理及應(yīng)用(第四版)》,清華大學(xué)出版社,李繼燦主編</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 ;設(shè)置新中斷向量 </p><p>&
45、lt;b> STI</b></p><p> CALL MAIN ;進(jìn)入主函數(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)時(shí)間&
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 ;屏幕設(shè)置成80X25黑白文本方式</p><p> MOV CX,2
52、000H</p><p> MOV AH,01H</p><p> INT 10H ;隱藏光標(biāo)</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 ;移動(dòng)光標(biāo)到屏幕右上角 </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 ;將時(shí)間的ASC碼送入TIME</p><p> MOV AH,09H </p><p> MOV DX,OFFSET TIME </p><p> INT 21H ;顯示時(shí)刻 </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 ;恢復(fù)原中斷向量</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 ;時(shí)間產(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 ;修改小時(shí)</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)課程設(shè)計(jì)---硬件中斷時(shí)鐘設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 微機(jī)原理課程設(shè)計(jì)---電子時(shí)鐘
- 微機(jī)原理課程設(shè)計(jì)--數(shù)字時(shí)鐘 (2)
- 《電子時(shí)鐘》微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---指針顯示時(shí)鐘
- 微機(jī)原理課程設(shè)計(jì)(電子時(shí)鐘)
- 微機(jī)原理課程設(shè)計(jì)—— 定時(shí)器系統(tǒng)
- 組成原理課程設(shè)計(jì)報(bào)告之8253定時(shí)計(jì)數(shù)器
- 基于微機(jī)原理電子時(shí)鐘課程設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)--實(shí)時(shí)鐘顯示與定時(shí)控制設(shè)計(jì)
- arm課程設(shè)計(jì)報(bào)告--使用中斷定時(shí)器設(shè)計(jì)時(shí)鐘
- 微機(jī)原理課程設(shè)計(jì)--中斷實(shí)現(xiàn)雙機(jī)通訊程序
- 微機(jī)原理課程設(shè)計(jì)報(bào)告--數(shù)據(jù)采集系統(tǒng)三(中斷法)
- 微機(jī)課程設(shè)計(jì)--計(jì)時(shí)時(shí)鐘
- 微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì).rar
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 2017微機(jī)原理課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論