微機課程設計--數(shù)字秒表_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  目 錄</p><p>  設計任務-------------------------------------------------------------2</p><p>  相關功能的介紹----------------------------------------------------2</p><p>  設計原

2、理-------------------------------------------------------------3</p><p>  1. 原理概述---------------------------------------------------------------------3</p><p>  2. 延時程序---------------------------

3、-----------------------------------------3</p><p>  3. 光標定位子程序原理-----------------------------------------------------3</p><p>  4. 清屏原理-----------------------------------------------------------

4、----------3</p><p>  5. 字符及字符串顯示原理---------------------------------------------------3</p><p>  6. 壓縮BCD轉為ASCII碼原理------------------------------------------4</p><p>  7. 動態(tài)掃描鍵盤原理---

5、------------------------------------------------------4</p><p>  程序流程圖----------------------------------------------------------5</p><p>  1.主程序流程圖-----------------------------------------------

6、----------------5</p><p>  2.各子程序流程圖------------------------------------------------------------5</p><p>  程序代碼-------------------------------------------------------------8</p><p>

7、;  程序運行結果------------------------------------------------------18</p><p>  程序調試中的問題及解決方法---------------------------------19</p><p>  心得收獲---------------------------------------------------------

8、---20</p><p>  參考資料------------------------------------------------------------20</p><p><b>  設計任務</b></p><p>  具有秒和0.1秒計時,并顯示在屏幕中央</p><p>  具有啟(Start)、停(En

9、d)功能</p><p>  具有暫停(End)、繼續(xù)(Continue)功能</p><p>  具有復位(Restart)功能</p><p>  能同時實現(xiàn)多個時間分別計數(shù)(M)</p><p><b>  具有記憶功能</b></p><p><b>  相關功能的介紹</

10、b></p><p>  該秒表計數(shù)功能的實現(xiàn)是通過調用延時程序實現(xiàn)的(為純軟件實現(xiàn),不能達到準確計數(shù))。具有啟、停、繼續(xù)、復位、同時多組計數(shù)等功能。</p><p>  該秒表軟件界面友好,即使對匯編語言一無所知的人也能輕松運行EXE程序,通過軟件的提示輸入S、E、C、R、M來實現(xiàn)秒表計數(shù),易于操作。</p><p>  通過DOS系統(tǒng)9號功能的調用,實現(xiàn)字

11、符串的輸出,展現(xiàn)出一個比較漂亮的秒表計數(shù)界面。</p><p>  通過程序開辟專門的記憶區(qū),實現(xiàn)了同時多組計數(shù)的功能,在實際應用中比較方便。 </p><p><b>  設計原理</b></p><p><b>  1. 原理概述</b></p><p>  通過調用DOS系統(tǒng)的8號功能實現(xiàn)控制

12、字符的輸入,通過調用延時程序實現(xiàn)十分之一秒的定時,通過調用DOS系統(tǒng)的2號功能實現(xiàn)光標定位,調用DOS系統(tǒng)的2號功能實現(xiàn)字符的輸出,通過調用DOS系統(tǒng)的9號功能實現(xiàn)字符串的輸出。</p><p><b>  2. 延時程序</b></p><p>  本設計利用軟件實現(xiàn)延時(不是很精確),調用TIME實現(xiàn)延時。其原理:通過可控制的循環(huán)來占用CPU的時間來實現(xiàn)延時,分為

13、內外兩層循環(huán),外循環(huán)由AX中的數(shù)值來控制,內循環(huán)有CX中的值來控制。</p><p>  3. 光標定位子程序原理</p><p>  DOS顯示屏為25行、80列,左上角為(0,0),右下角(18,4F)</p><p>  設置光標,可調用BIOS系統(tǒng),用匯編語句調用中斷INT10H。入口信息為</p><p>  (AH)=2

14、要設置光標;</p><p>  (BH)=0 頁號;</p><p> ?。―H,DL)=光標的行號、列號</p><p><b>  4. 清屏原理</b></p><p>  開始執(zhí)行程序時為保證有一個潔凈的屏幕,可使顯示屏做上滾動作,使屏幕留下一片空白。要使屏幕上滾,可用匯編語句INT 10H ,入口信息為&l

15、t;/p><p> ?。ˋH )=6 使屏幕上滾</p><p> ?。ˋL)=00上滾行數(shù)</p><p> ?。–H,CL)=滾動區(qū)域左上角的行、列號</p><p> ?。―H,DL)=滾動區(qū)域右下角的行、列號</p><p> ?。˙G)=00 顏色的設置 </p><p>  

16、5. 字符及字符串顯示原理</p><p>  通過調用DOS系統(tǒng)模塊2只能是西安DL中的一個字符的顯示。為了實現(xiàn)字符串的顯示,調用其9號模塊功能,其入口信息為</p><p> ?。ˋH)=9 顯示字符串的功能模塊</p><p>  (DS:DX) 指向字符串的首地址,要求字符串以字符 ‘$’結尾。</p><p>  6.

17、壓縮BCD轉為ASCII碼原理</p><p>  )兩位的:先將壓縮BCD碼的高4位取出,右移四位后,與30H相或,存到相應內存單元;然后將低4位取出,與30H相或,存到下一內存單元。</p><p>  )一位的:原數(shù)字加30H</p><p>  7. 動態(tài)掃描鍵盤原理</p><p>  運用INT 21H的8號功能來實現(xiàn)動態(tài)掃描

18、鍵盤。如果有鍵按下,則相應的鍵值的ASCII碼被存到AL中。判斷AL中的數(shù)值,若不是控制字符,則繼續(xù)循環(huán),從而實現(xiàn)動態(tài)掃描鍵盤。</p><p><b>  四、程序流程圖</b></p><p><b>  1.主程序流程圖</b></p><p><b>  2 .子程序流程圖</b></p

19、><p><b>  程序代碼</b></p><p>  DAT SEGMENT ;設置數(shù)據(jù)段</p><p>  BUF DB 'Input start(S)or memory(M)or end(E) or continu

20、e(C)or restart(R)$' ;設置功能說明</p><p>  MESS DB ' 計 時 器 ',0ah,0dh</p><p>  DB '

21、 ',0ah,0dh</p><p>  DB ' ',0ah,0dh</p><p>  DB ' ********** ********** &

22、#39;,0ah,0dh</p><p>  DB ' ** ** ** ** ',0ah,0dh</p><p>  DB ' ** ** *** ** ** ',0ah,0dh

23、</p><p>  DB ' ** ** *** ** ** ',0ah,0dh</p><p>  DB ' ** ** ** ** ',0ah,0dh</p>

24、<p>  DB ' ** ** *** ** ** ',0ah,0dh</p><p>  DB ' ** ** *** ** ** ',0ah,0dh</p><p>  D

25、B ' ********** ********** ',0ah,0dh</p><p>  DB ' ',0ah,0dh</p><p>  DB '

26、 ',0ah,0dh</p><p>  DB ' **************************** ',0ah,0dh</p><p>  DB '

27、**** **** ',0ah,0dh</p><p>  DB ' **** **** ',0ah,0dh</p><p>  DB ' ****

28、 **** ',0ah,0dh</p><p>  DB ' **** **** ',0ah,0dh</p><p>  DB ' ****

29、 **** ',0ah,0dh</p><p>  DB ' **** **** ',0ah,0dh</p><p>  DB ' **** ****'

30、; ,0ah,0dh </p><p>  DB ' **************************** ',0ah,0dh</p><p>  DB 'Designed by 陳奇 Copyright @ 2013--2014' ,'$'

31、</p><p>  TIP DB 'M E M O R Y$' ;定義記憶提示</p><p>  BUFFER DB 20 DUP(?) ;定義緩存區(qū)</p><p>  NUM DB 1 </p><p>  

32、LOD EQU 0144H ;記憶顯示區(qū)光標的位置</p><p><b>  DAT ENDS</b></p><p>  ;--------------------代碼段----主程序單元------------------</p><p>  COD SEGMENT

33、 ;定義代碼段</p><p>  START PROC FAR</p><p>  ASSUME CS:COD,DS:DAT </p><p>  MOV AX,DAT</p><p>  MOV DS,AX</p><p>  CALL CLR

34、 ;圖形區(qū)清屏并設置顏色</p><p>  CALL CLRDAT ;秒表數(shù)字區(qū)清屏并設置顏色</p><p>  CALL CLRMER ; 記憶區(qū)清屏并設置顏色</p><p>  MOV DX,OFFSET BUF

35、 ;輸出功能說明</p><p>  MOV AH,09H ;輸出字符串</p><p><b>  INT 21H</b></p><p>  MOV DX,OFFSET MESS ;輸出功能說明</p><p>  MOV

36、 AH,09H</p><p><b>  INT 21H</b></p><p>  CALL DISMER ;"MEMORY" 的光標位置</p><p>  MOV DX,OFFSET TIP ;輸出 "MEMO

37、RY"</p><p>  MOV AH,09H</p><p><b>  INT 21H</b></p><p>  CALL GO ;設置初值</p><p>  LOAD: CALL IOSET ;光標

38、定位</p><p>  CALL HALT ;等待輸入</p><p><b>  MOV DX,0</b></p><p><b>  MOV CH,0</b></p><p>  AGAIN:

39、 </p><p>  CALL TIME ;調用延時程序 </p><p>  MOV AL,DL ;十分之一秒加一</p><p><b>  ADD AL,1</b></p><p>&l

40、t;b>  DAA</b></p><p>  CMP AL,10H</p><p>  JE NEXT1 ;滿十進位</p><p>  MOV DL,AL</p><p>  JMP DISPY ;不滿十顯

41、示</p><p><b>  NEXT1: </b></p><p><b>  MOV DL,0</b></p><p>  MOV AL,DH ;秒位加一</p><p><b>  ADD AL,1</b>&l

42、t;/p><p><b>  DAA</b></p><p>  MOV DH,AL</p><p>  CMP AL,60H </p><p>  JNE DISPY</p><p><b>  MOV DH,0</b&

43、gt;</p><p>  MOV AL,CH ;分位加一</p><p><b>  ADD AL,1</b></p><p><b>  DAA</b></p><p>  MOV CH,AL</p><p>

44、  CMP AL,60H</p><p>  JNE DISPY ;滿60清零</p><p><b>  MOV CH,0</b></p><p>  DISPY: ;顯示電子秒表</p><p&g

45、t;  MOV BX,OFFSET BUFFER ;取緩沖區(qū)地址 </p><p>  MOV AL,CH</p><p>  CALL TRAN ;將分位轉變?yōu)锳SCII碼并送緩沖區(qū)</p><p><b>  INC BX</b><

46、;/p><p><b>  INC BX</b></p><p>  MOV AL,DH ;將秒位轉變?yōu)锳SCII碼并送緩沖區(qū)</p><p>  CALL TRAN</p><p><b>  INC BX</b></p>

47、<p><b>  INC BX</b></p><p>  MOV AL,DL ;將十分之一秒位轉變?yōu)锳SCII碼并送緩沖區(qū)</p><p>  CALL TRAN2</p><p><b>  PUSH BX</b></p><

48、;p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p>  CALL IOSET ;光標置位</p><p>  MOV DX,OFFSET BUFFER ;輸出緩沖區(qū)

49、字符串</p><p>  MOV AH,09H</p><p><b>  INT 21H</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP

50、 BX</b></p><p>  MOV AH,0BH ;等待鍵盤輸入</p><p><b>  INT 21H</b></p><p>  AND AL,AL</p><p><b>  JZ AGAIN</b>&l

51、t;/p><p>  MOV AH,08H</p><p><b>  INT 21H</b></p><p>  CMP AL,'M' </p><p><b>  JNZ R1</b></p><p>  CALL MEMORY</p>

52、<p>  JMP AGAIN</p><p>  R1:CMP AL,'R' ;判斷輸入是否為R</p><p>  JNE NEXT2 ;不是則判斷是否為E</p><p>  CALL MEMORY

53、 ;若是則調用記憶功能保存當前值</p><p>  MOV CH,0 ;初值清零重新計數(shù)</p><p><b>  MOV DL,0</b></p><p><b>  MOV DH,0</b></p&

54、gt;<p>  JMP AGAIN</p><p><b>  NEXT2:</b></p><p>  CMP AL,'E' ;判斷是否為E </p><p>  JNE AGAIN ;不

55、是則繼續(xù)計數(shù)</p><p>  NEXT3: ;若是則暫停計數(shù)</p><p>  MOV AH,08H</p><p><b>  INT 21H</b></p><p>  CMP AL,'C'

56、 ;判斷是否輸入C</p><p>  CMP AL,'R' ;判斷是否輸入R</p><p>  JNE NEXT3 ;若不是則繼續(xù)等待輸入</p><p>  CALL MEMOR

57、Y ;若是則調用記憶功能</p><p>  CALL GO ;重新設置初值等待重新啟動</p><p>  CALL IOSET</p><p>  MOV DX,OFFSET BUFFER</p><p&g

58、t;  MOV AH,09H</p><p><b>  INT 21H</b></p><p><b>  JMP LOAD</b></p><p><b>  RET</b></p><p>  START ENDP</p><p>  ;-

59、------------------子程序單元------------設置初值子程序-----------</p><p>  GO PROC </p><p>  MOV BX,OFFSET BUFFER</p><p>  MOV AL,'0'</p><p>  MOV [

60、BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,'0'</p><p>  MOV [BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,':&#

61、39;</p><p>  MOV [BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,'0'</p><p>  MOV [BX],AL</p><p><b>  INC BX</b></p&

62、gt;<p>  MOV AL,'0'</p><p>  MOV [BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,'.'</p><p>  MOV [BX],AL</p><p><

63、;b>  INC BX</b></p><p>  MOV AL,'0'</p><p>  MOV [BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,'$'</p><p>  MOV

64、 [BX],AL</p><p><b>  RET</b></p><p><b>  GO ENDP</b></p><p>  ;-------------------- 光標定位子程序----------------------</p><p>  IOSET PROC

65、 </p><p>  MOV DX,121DH ;光標定位在 18行 39列</p><p>  MOV BH,00 ;頁號</p><p>  MOV AH,02H ;要設置光標

66、</p><p><b>  INT 10H</b></p><p><b>  RET</b></p><p>  IOSET ENDP </p><p>  HALT PROC</p><p>  MOV AH,08H</

67、p><p><b>  INT 21H</b></p><p>  CMP AL,'S'</p><p><b>  JNE HALT</b></p><p><b>  RET</b></p><p><b>  HALT

68、 END</b></p><p>  ; ----------------------BCD轉ASCII碼子程序1------------</p><p>  TRAN PROC </p><p>  MOV CL,AL</p><p><b>  SHR AL,1<

69、/b></p><p><b>  SHR AL,1</b></p><p><b>  SHR AL,1</b></p><p><b>  SHR AL,1</b></p><p>  OR AL,30H</p><p>  MOV

70、[BX],AL</p><p><b>  INC BX</b></p><p>  MOV AL,CL</p><p>  AND AL,0FH</p><p>  OR AL,30H</p><p>  MOV [BX],AL</p><p><b>

71、;  RET</b></p><p>  TRAN ENDP</p><p>  ; ----------------------BCD轉ASCII碼子程序2-----------</p><p>  TRAN2 PROC </p><p>  ADD AL,30H</p>

72、;<p>  MOV [BX],AL</p><p><b>  RET</b></p><p>  TRAN2 ENDP</p><p>  ;------------------延時子程序-----------------</p><p>  TIME PROC

73、 </p><p><b>  PUSH CX</b></p><p><b>  PUSH AX</b></p><p>  MOV AX,06EEH ; 通過改變AX的初值 來校準 秒表</p><p>  MOV CX,0FFFFH<

74、;/p><p>  A1: DEC AX</p><p><b>  JNZ A2</b></p><p><b>  JMP A3</b></p><p>  A2: DEC CX</p><p><b>  JNZ A2</b></p&g

75、t;<p><b>  JMP A1</b></p><p>  A3: POP AX</p><p><b>  POP CX</b></p><p><b>  RET</b></p><p>  TIME ENDP</p><p&

76、gt;  ;-----------------記憶功能子程序-----------</p><p>  MEMORY PROC </p><p><b>  PUSH DX</b></p><p><b>  PUSH BX</b></p><p><

77、;b>  PUSH AX</b></p><p>  CMP NUM,20</p><p><b>  JE X2</b></p><p>  ADD NUM,1</p><p>  X1: MOV DX,LOD</p><p>  ADD DH,NUM</p&

78、gt;<p>  MOV BH,00</p><p>  MOV AH,02H</p><p><b>  INT 10H</b></p><p>  MOV DX,OFFSET BUFFER</p><p>  MOV AH,09H</p><p><b> 

79、 INT 21H</b></p><p><b>  POP AX</b></p><p><b>  POP BX</b></p><p><b>  POP DX</b></p><p><b>  RET</b></p>

80、;<p>  X2: CALL CLRMER</p><p>  MOV NUM,1</p><p><b>  JMP X1</b></p><p>  MEMORY ENDP</p><p>  ;---------------------- 圖形區(qū)清屏并設置顏色子程序----</p&g

81、t;<p>  CLR PROC </p><p>  MOV AH,06H ;使屏幕上滾</p><p>  MOV AL,18H ;上滾行數(shù)</p><p>  MOV CX,0000H

82、 ; 滾動區(qū)域左上角的行號 列號</p><p>  MOV DX,1840H ; 滾動區(qū)域右下角的行號 列號</p><p>  MOV BH,2CH ; 空白行屬性</p><p><b>  INT 10H<

83、;/b></p><p><b>  RET</b></p><p><b>  CLR ENDP</b></p><p>  ;----------------數(shù)據(jù)區(qū)清屏并設置顏色子程序------------</p><p>  CLRDAT PROC

84、 </p><p><b>  MOV AH,6</b></p><p><b>  MOV AL,1</b></p><p>  MOV CX,121DH</p><p>  MOV DX,0E23H</p><p>  MOV BH,6EH</p&g

85、t;<p><b>  INT 10H</b></p><p><b>  RET</b></p><p>  CLRDAT ENDP</p><p>  ;------------------------記憶區(qū)清屏并設置顏色子程序---------</p><p>  CLRMER

86、 PROC </p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX&l

87、t;/b></p><p><b>  MOV AH,6</b></p><p>  MOV AL,18H</p><p>  MOV CX,0141H</p><p>  MOV DX,184FH</p><p>  MOV BH,5EH</p><p>

88、<b>  INT 10H</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</

89、b></p><p><b>  RET</b></p><p>  CLRMER ENDP</p><p>  ;------------------------記憶提示 光標定位---------------</p><p>  DISMER PROC <

90、;/p><p>  MOV AH,02H</p><p>  MOV BH,00</p><p>  MOV DX,0043H</p><p><b>  INT 10H</b></p><p><b>  RET</b></p><p>  DIS

91、MER ENDP</p><p>  COD ENDS ;結束代碼段</p><p>  END START ;結束源程序</p><p>  六、程序運行結果 </p><p>  七、程序調試中的問題及解決方法</p>&l

92、t;p>  1. 主程序的調試</p><p>  主程序使用壓縮BCD碼做的加法,再用DAA進行調整,這時要注意DAA只能對AL中的結果進行調整,因此只能用AL做加法,再將數(shù)據(jù)傳送過去。</p><p>  BCD 碼調整為ASCII碼子程序調試</p><p>  BCD 碼調整為ASCII碼時,分、秒同0.1秒不能調用同一個子程序,否則屏幕顯示時,0.

93、1秒位的顯示的也是兩個數(shù)。應該分開調用,分秒位調用時用TRAN,0.1秒調用時用TRAN2。</p><p>  3. 延時子程序的調試</p><p>  延時程序的時間并沒有經(jīng)過精確計算,因此只能用試探法逐漸增加或減小AX值。最終選定AX= 0BFFH 。</p><p>  4. 圖形顯示程序的調試</p><p>  本設計圖形的

94、顯示用了字符串輸出。剛開始編程時由于圖形太大超過了25行,圖形不能正確的顯示,經(jīng)過多次反復修改,最終圖形得以正確顯示。</p><p>  在使用字符串輸出時一定注意在最后加上‘$’字符,還應該注意“0ah,0dh”的正確使用。</p><p><b>  清屏子程序調試</b></p><p>  書中沒有具體指明顏色代號,只能通過從01H開

95、始依次嘗試。經(jīng)過多次調試最終確定圖形使用0CH綠色 ,字幕使用0EH黃色,記憶區(qū)使用0DH紫色。</p><p><b>  心得體會</b></p><p>  “紙上得來終覺淺,絕知此事要躬行”,這是本次課程設計我最大的體會。剛開始時,看著老師給的參考材料,心里想“這個課程設計不是很難的事情嘛,把這幾個子程序堆一塊不就完了”,可是真正做起來時,才發(fā)現(xiàn)事情遠非想的那

96、么簡單。從上機軟件的選取,到課程設計報告的最終完成,我們經(jīng)歷了很多曲折,也收獲了很多,下面具體闡述一下。</p><p><b>  軟件的選取</b></p><p>  古語云:工欲善其事必先利其器。匯編語言上機軟件和流程圖繪制軟件的選取對此次課程設計非常重要。經(jīng)過對比我們最終選取了Masm,Edrw 最終也能熟練操作這兩款軟件。這是此次設計較大的收獲。<

97、/p><p><b>  圖案的設計 </b></p><p>  為了能得到一個比較漂亮的界面顯示,我們在圖案設計上花了不少功夫。很多次設計的圖案很漂亮,可是搬到程序里面運行時卻是一堆亂碼,讓我們很沮喪...還有要把秒表的顯示正好調到圖案正中央,我們也經(jīng)過了多次調試。在這個過程中,我們學會了耐心,去除浮躁,平心靜氣的把程序一遍遍的修改、調試,臻于完美。</p&

98、gt;<p><b>  3. 程序調試</b></p><p>  程序調試前,我們檢查了好幾遍。可是調試時還是錯誤百出。尤其是“;”的使用,一定要區(qū)分英文輸入的分號和中文分號的區(qū)別,還有字符串結束時一定要加‘$’,否則會出現(xiàn)亂碼。這些都是調試中發(fā)現(xiàn)的問題,只有注意細節(jié),細心,才能順利完成任務。</p><p><b>  總結:</b

99、></p><p>  通過本次課程設計,我加深了對課匯編語言的理解,同時熟練掌握了匯編語言的編輯、調試軟件。在以后的學習生活中還要繼續(xù)保持嚴謹認真的科學態(tài)度,保持不斷嘗試和探索的耐心,保持勇于解決問題的決心。不斷地向老師、同學們學習、交流,分享吸取他們的經(jīng)驗,更好的提高自己。</p><p><b>  參考書目</b></p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論