2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論