電子時鐘的設(shè)計與實現(xiàn)_第1頁
電子時鐘的設(shè)計與實現(xiàn)_第2頁
電子時鐘的設(shè)計與實現(xiàn)_第3頁
電子時鐘的設(shè)計與實現(xiàn)_第4頁
電子時鐘的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

PAGEword文檔可自由復制編輯武漢理工大學《微機原理與接口技術(shù)》課程設(shè)計說明書學號:課程設(shè)計題目電子時鐘的設(shè)計與實現(xiàn)學院自動化學院專業(yè)電氣工程及其自動化班級姓名指導教師2014年1月9日

課程設(shè)計任務(wù)書學生姓名:專業(yè)班級:指導教師:工作單位:題目:電子時鐘的設(shè)計與實現(xiàn)初始條件:掌握8086匯編語言程序設(shè)計方法,設(shè)計一個電子時鐘,實現(xiàn)分、秒、時的顯示與刷新功能。要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1.定義顯示界面。2.調(diào)用系統(tǒng)時間,并將調(diào)用的用二進制表示的時間數(shù)轉(zhuǎn)換成ASCII碼,并將時間數(shù)存入內(nèi)存區(qū)。3.將存在系統(tǒng)內(nèi)存區(qū)的時間數(shù)用數(shù)字式或指針式鐘表的形式顯示出來。4.獲取鍵盤的按鍵值,判斷鍵值并退出系統(tǒng)。5.撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。時間安排: 12月26日12月28日查閱資料及方案設(shè)計1月29日1月2日 編程1月3日1月7日 調(diào)試程序1月8日1月9日 撰寫課程設(shè)計報告指導教師簽名:年月日系主任(或責任教師)簽名:年月日目錄摘要 11設(shè)計任務(wù)及要求 21.1設(shè)計題目 21.2設(shè)計要求 21.3設(shè)計目的 22設(shè)計方案論述 32.1設(shè)計方案概括 32.2設(shè)計方案具體說明 33軟件設(shè)計說明 43.1理論知識介紹 43.2設(shè)計思路介紹 73.3設(shè)計流程 73.4程序設(shè)計說明 124調(diào)試結(jié)果及分析 224.1程序初始運行狀態(tài) 224.2日期顯示運行結(jié)果 224.3計時功能運行結(jié)果 235收獲與體會 25參考文獻 26附錄:設(shè)計源程序 27本科生課程設(shè)計成績評定表 36word文檔可自由復制編輯摘要本設(shè)計采用16位微型處理器8086CPU以及86系列微型計算機的指令系統(tǒng)利用匯編語言編寫,設(shè)計一個界面實現(xiàn)系統(tǒng)日期及時間顯示功能,軟件設(shè)計平臺為MasmforWindows集成實驗環(huán)境。在本設(shè)計中,設(shè)計顯示界面并通過DOS中斷調(diào)用系統(tǒng)時間,并將調(diào)用的用二進制表示的時間數(shù)轉(zhuǎn)換成ASCII碼,并將時間數(shù)存入內(nèi)存區(qū)。將存在系統(tǒng)內(nèi)存區(qū)的時間數(shù)用數(shù)字式鐘表的形式顯示出來。通過讀取鍵盤輸入的相關(guān)內(nèi)容,如:輸入D,則設(shè)計程序代碼依次讀取系統(tǒng)日期年、月、日,并轉(zhuǎn)換成ASCII碼調(diào)用中斷予以顯示;若在鍵盤輸入H,則啟動秒表功能;輸入Q,判斷鍵值后退出系統(tǒng);若不是相關(guān)字符,則不會有任何響應(yīng)。關(guān)鍵詞:系統(tǒng)時鐘8086CPU匯編語言

電子時鐘的設(shè)計與實現(xiàn)1設(shè)計任務(wù)及要求1.1設(shè)計題目掌握8086匯編語言程序設(shè)計方法,設(shè)計一個電子時鐘,實現(xiàn)分、秒、時的顯示與刷新功能。1.2設(shè)計要求(1)定義顯示界面;(2)調(diào)用系統(tǒng)時間,并將調(diào)用的用二進制表示的時間數(shù)轉(zhuǎn)換成ASCII碼,并將時間數(shù)存入內(nèi)存區(qū);(3)將存在系統(tǒng)內(nèi)存區(qū)的時間數(shù)用顯示字符串的形式顯示出來;(4)為時鐘加入附加功能,包括日期顯示、計時功能;(5)獲取鍵盤的按鍵值,判斷鍵值并退出系;。(6)撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。1.3設(shè)計目的(1)掌握8086CPU微機系統(tǒng)的存儲子系統(tǒng)設(shè)計;(2)掌握8086CPU微機系統(tǒng)的中斷控制子系統(tǒng)的設(shè)計;(3)掌握8086CPU微機系統(tǒng)的I/O系統(tǒng)的設(shè)計;(4)掌握8086CPU微機系統(tǒng)的初始化匯編編程和具體項目功能的軟件匯編語言代碼編寫。

2設(shè)計方案論述2.1設(shè)計方案概括在此次電子時鐘的設(shè)計中,主要功能是顯示系統(tǒng)時間,通過DOS中斷調(diào)用進行系統(tǒng)時間的提取,然后進行輸出至屏幕。附加功能共包括兩種,第一種功能為顯示系統(tǒng)的日期,也是通過DOS中斷提取系統(tǒng)日期輸出至屏幕;第二種功能為作為計時器使用,判斷一定時間段內(nèi)的具體時間。兩個功能通過鍵盤按鍵進入、退出,整個電子時鐘系統(tǒng)也可通過鍵盤按鍵退出。2.2設(shè)計方案具體說明2.2.1顯示系統(tǒng)時間方案說明時間顯示的重點分為三部分,第一部分是如何調(diào)用系統(tǒng)時間,此次電子時鐘的設(shè)計通過AH=2CH;INT21H的DOS中斷調(diào)用進行系統(tǒng)時間的提取。提取的時間為二進制的存儲模式,第二部分的重點為將二進制數(shù)轉(zhuǎn)換成為ASCII碼。第三部分即為將轉(zhuǎn)換的時間的ASCII碼輸出至屏幕,調(diào)用AH=09H;INT21H中斷,將存儲的時間作為字符輸出。2.2.2顯示系統(tǒng)日期方案說明首先通過判斷是否有按鍵“D”輸入,若有則調(diào)用日期顯示功能,日期顯示同時間顯示基本相同,只是提取系統(tǒng)日期的指令與調(diào)用時間不同,為AH=2AH;INT21H。在進行日期顯示的功能中,若有按鍵“L”則退出此功能。2.2.3計時功能方案說明首先通過判斷是否有按鍵“H”輸入,若有則調(diào)用計時功能。進入計時功能后,按鍵“S”計時開始,按鍵“P”計時暫停,按鍵“G”計時繼續(xù),按鍵“T”計時停止,按鍵“C”計時器清零。

3軟件設(shè)計說明3.1理論知識介紹3.1.1DOS中斷與BIOS中斷的功能及調(diào)用(1)DOS中斷類型如表3-1所示。表3-1DOS中斷類型中斷號中斷名稱中斷號中斷名稱20程序終止27結(jié)束并駐留內(nèi)存21功能調(diào)用28鍵盤忙循環(huán)22終止地址29快速寫字符23Ctrl_C中斷向量2A網(wǎng)絡(luò)接口24嚴重錯誤向量2E執(zhí)行命令25絕對磁盤讀2F多路轉(zhuǎn)接接口26絕對磁盤寫30-3F保留給DOS(2)BIOS中斷類型如表3-2所示。表3-2BIOS中斷類型中斷號中斷名稱中斷號中斷名稱10顯示器I/O16鍵盤I/O11取設(shè)備信息17打印機I/O12取內(nèi)存容量18ROMBASIC13磁盤I/O19引導裝入程序14RS-232串行口I/O1A時鐘15磁帶I/O40軟盤BIOSDOS功能與BIOS功能都通過軟件中斷調(diào)用。在中斷調(diào)用前需要把功能號裝入AH寄存器,把子功能號裝入AL寄存器,除此而外,通常還需在CPU寄存器中提供專門的調(diào)用參數(shù)。一般地說,調(diào)用DOS或BIOS功能時,有以下幾個基本步驟:1)將調(diào)用參數(shù)裝入指定的寄存器中;2)如需功能號,把它裝入AH;3)如需子功能號,把它裝入AL;4)按中斷號調(diào)用DOS或BIOS中斷;5)檢查返回參數(shù)是否正確。本例中需要的BIOS中斷如表3所示。表3本課程設(shè)計所需BIOS中斷類型INTAH功能入口參數(shù)出口參數(shù)1009H表示在當前的光標處按指令屬性顯示字符AH=09HAL=字符BH=顯示頁碼BL=屬性CX=重復輸出字符的次數(shù)無1002H用文本坐標下設(shè)置光標位置AH=02HBH=顯示頁碼DH=行(Y坐標)DL=列(X坐標)無2101H從鍵盤輸入一個字符無AL=ASCII2102H在屏幕上顯示一個字符DL=ASCII無1601H讀取鍵盤狀態(tài),即讀入輸入字符AH=01H—檢查普通鍵盤ZF=1——無字符輸入,否則,AH=鍵盤的掃描碼,AL=按鍵的ASCII碼(字符鍵)或者0(其他鍵)1600H從鍵盤讀入字符AH=00H—強制讀普通鍵盤AH=鍵盤的掃描碼AL=按鍵的ASCII碼(字符鍵)或者0(其他鍵)1008H讀光標處的字符及其屬性AH=08HBH=顯示頁碼AH=屬性AL=字符2106H1號2號功能的組合DL=0FFH時為1號功能;DL寄存器放入字符的ASCII值時就是2號功能無或AL=ASCII1A02H讀取時間AH=02HCH=BCD碼格式的小時;CL=BCD碼格式的分鐘;DH=BCD碼格式的秒;DL=00H——標準時間,否則,夏令時;CF=0——時鐘在走,否則,時鐘停止3.1.2子程序的設(shè)計子程序又稱為過程,它相當于高級語言中的過程和函數(shù)。在一個程序的不同部分,往往要用到類似的程序段,這些程序段的功能和結(jié)構(gòu)形式都相同,只是某些變量的賦值不同,此時就可以把這些程序段寫成子程序形式,以便需要時可以調(diào)用它。過程定義偽操作用在過程(子程序)的前后,使整個過程形成清晰的、具有特定功能的代碼塊。其格式為:procedurenamePROCAttribute…procedurenameENDP其中過程名為標識符,它又是子程序入口的符號地址。它的寫法和標號的寫法相同。屬性(attribute)是指類型屬性,它可以是NEAR或FAR。段內(nèi)調(diào)用使用NEAR屬性,段間調(diào)用使用FAR屬性。為了使用戶的工作更加方便,80x86的匯編程序用PROC偽操作的類型屬性來確定CALL和RET指令的屬性。也就是說,如果所定義的過程是FAR屬性的,那么對它的調(diào)用和返回一定都是FAR屬性的;如果所定義的過程是NEAR屬性的,那么對它的調(diào)用和返回也一定是NEAR屬性的。這樣,用戶只需在定義過程時考慮它的屬性,而CALL和RET的屬性可以由匯編程序來確定。用戶對過程屬性的確定原則很簡單,即:(1)如調(diào)用程序和過程在同一個代碼段中,則使用NEAR屬性;(2)如調(diào)用程序和過程不在同一個代碼段中,則使用FAR屬性。3.1.3中斷概述CPU在執(zhí)行某一程序的過程中,出現(xiàn)了內(nèi)部或外部某些事件的請求,CPU暫時停止當前程序的正常執(zhí)行,轉(zhuǎn)去執(zhí)行請求事件的處理工作,CPU在事件處理結(jié)束后又繼續(xù)原來的程序,這個過程稱作中斷。中斷程序的入口地址稱作中斷向量。8086中斷系統(tǒng)最多可以支持256個中斷源,系統(tǒng)將這些中斷向量按照中斷類型碼的順序依次存放在內(nèi)存RAM的最低地址區(qū)的1024個內(nèi)存單元中,這就構(gòu)成了中斷向量表。中斷向量表的邏輯地址范圍為0000H:0000H-0000H:03FF。另外,中斷向量在中斷向量表中的位置就是中斷向量地址,它與中斷類型碼之間的關(guān)系可以表示如下:中斷向量地址=0000H:中斷類型碼*4CPU在響應(yīng)中斷后,根據(jù)中斷源提供的中斷類型碼,首先計算出中斷向量地址,然后根據(jù)中斷向量地址在表中查找到相應(yīng)的中斷服務(wù)程序的入口地址。本例中即利用了鍵盤中斷來實現(xiàn)相應(yīng)的功能。3.2設(shè)計思路介紹首先在數(shù)據(jù)段開辟一顯示緩沖區(qū),用來存儲系統(tǒng)時間。調(diào)用DOS中斷,返回系統(tǒng)時間,并將來返回的二進制時間轉(zhuǎn)換成ASCII碼,方便時間顯示時的調(diào)用。分別將來小時數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū),并最終存入一結(jié)束字符號’$’。調(diào)用DOS字符串顯示功能將時間顯示出來。并調(diào)用屏幕I/O中斷,定位光標的開始位置,結(jié)合著將時間顯示在我們預(yù)先定義好的位置上。由于獲取了的系統(tǒng)時間不會自動刷新,所以我們要設(shè)計成刷新的方式來不斷獲取系統(tǒng)的時間,這樣就形成了會跳動的電子鐘了。時間顯示的刷新要配合延時程序進行,為了得到良好的顯示效果,延時程序要盡量接近1秒,但又不能超過一秒,所以本程序調(diào)用了一段較精確的時間延遲程序,屏幕顯示延遲一段時間后再提取系統(tǒng)時間,然后顯示,由此循環(huán)下去。程序加入附加功能,根據(jù)不同的按鍵選擇不同的功能進行實現(xiàn),D為顯示系統(tǒng)日期,W為整點報時,H為計時功能。各個功能的推出均為L按鍵。選擇的某個功能推出后才可以重新選擇功能。程序的最后還設(shè)計一了個按“Q”鍵就退出的功能。所有的按鍵都采取了判斷鍵值A(chǔ)SCII碼確定輸入字符的方法確定按鍵值。為了顯示的美觀,還設(shè)計一個字符圖界面,通過顯示字符串的方法顯示出來。3.3設(shè)計流程在此次的設(shè)計中根據(jù)設(shè)想功能的實現(xiàn),在主流程下,共有兩個分支功能,故其流程圖為一個主流程圖,兩個附加功能的子流程圖。3.3.1主流程圖及說明在主流程圖中可以了解到,進入程序后首先清屏,設(shè)置屏幕的顯示,使得界面整體布局安排以及功能的提示信息出現(xiàn)在屏幕上。然后調(diào)用系統(tǒng)時間,將時間顯示到設(shè)定好的位置上。接著是進行鍵盤狀態(tài)的讀取,判斷有無按鍵按下,如果沒有,重新調(diào)用系統(tǒng)時間并顯示,如果有按鍵按下,判斷按鍵字符,若為“D”,執(zhí)行讀取日期子程序;若為“H”,執(zhí)行計時器子程序;若為“Q”,則退出程序;如果均不為上述字符,則返回調(diào)用系統(tǒng)時間。開始判斷按鍵是否為H判斷按鍵是否為開始判斷按鍵是否為H判斷按鍵是否為D判斷是否有鍵盤按鍵輸入讀取按鍵字符調(diào)用系統(tǒng)時間輸出至屏幕顯示設(shè)置屏幕顯示進入計時器子程序進入顯示日期子程序是是否否否是圖3-1系統(tǒng)主程序流程圖判斷按鍵是否為Q結(jié)束是否3.3.2顯示日期子流程圖及說明日期顯示子程序流程圖如圖3-2所示。開始開始提取系統(tǒng)日期將年份數(shù)轉(zhuǎn)為ASCII碼并存入DATEDIS中將日期數(shù)轉(zhuǎn)為ASCII碼并存入DATEDIS中將分月份轉(zhuǎn)為ASCII碼并存入DATEDIS中顯示系統(tǒng)日期返回圖3-2日期顯示子程序流程圖根據(jù)圖3-2所示的子流程圖可以分到系統(tǒng)日期顯示的整體過程。在經(jīng)過功能選擇進入日期顯示后,首先提取電腦內(nèi)部的系統(tǒng)日期,提取到的系統(tǒng)日期為二進制碼,首先將年份的二進制碼轉(zhuǎn)換為ASCII碼,存入數(shù)據(jù)段的緩沖區(qū),然后將月份的二進制碼轉(zhuǎn)換為ASCII碼,存入數(shù)據(jù)段的緩沖區(qū),接著是將日期的二進制碼轉(zhuǎn)換為ASCII碼,存入數(shù)據(jù)段的緩沖區(qū),于是緩沖區(qū)中就包含了系統(tǒng)日期的ASCII碼,調(diào)用輸出函數(shù),將系統(tǒng)日期輸出到系統(tǒng)的指定位置。3.3.3計時器的流程圖及說明計時器子程序流程圖如圖3-3所示。開始開始讀取鍵盤值讀取鍵盤值讀取鍵盤值判斷有無按鍵按下按鍵為S按鍵為T按鍵為G按鍵為P按鍵為L按鍵為C開始計時停止計時判斷有無按鍵按下判斷有無按鍵按下退出子程序計數(shù)器清零是否是否否否是是是否否是是否是否否是圖3-3計時器子程序流程圖根據(jù)計時器子程序的流程圖可知,進入計時器程序后,首先是等待計時開始,掃面鍵盤是否有按鍵按下,若按下“L”則推出此計時程序,若按下的為“S”則計時開始,在計時的過程中進行按鍵掃描,判斷有無按鍵的輸入,如果沒有則保持計時,如果判斷按鍵為“P”,則暫停計時,此時不斷掃描鍵盤,若發(fā)現(xiàn)按鍵“G”,則繼續(xù)計時,同時繼續(xù)掃描鍵盤狀態(tài),若發(fā)現(xiàn)按鍵“T”按下,則停止計時,同時掃描按鍵,如果獲取到“C”按下,則對計數(shù)器清零,此時返回子程序開始端,重新掃描鍵盤,準備新一輪的計時。3.3.4系統(tǒng)時間顯示子程序系統(tǒng)時間顯示子程序流程圖如圖3-4所示。開始開始提取系統(tǒng)時間將小時數(shù)轉(zhuǎn)為ASCII碼并存入TIMEDIS中將秒數(shù)轉(zhuǎn)為ASCII碼并存入TIMEDIS中將分鐘轉(zhuǎn)為ASCII碼并存入TIMEDIS中顯示系統(tǒng)時間返回圖3-4時間顯示子程序流程圖3.4程序設(shè)計說明3.4.1清屏程序介紹CLEAR_SCREENMACROOP1,OP2,OP3,OP4;清屏 PUSHAX;入棧保護現(xiàn)場PUSHBXPUSHCXPUSHDX MOVAH,06H;向上滾屏 MOVAL,00H;全屏幕為空白 MOVBH,79H;空白區(qū)域缺省屬性 MOVCH,OP1;左上角行號 MOVCL,OP2;左上角列號 MOVDH,OP3;右下角行號 MOVDL,OP4;右下角列號 INT10H;BIOS對屏幕及顯示器中斷調(diào)用 POPDX;出棧顯示數(shù)據(jù)POPCXPOPBXPOPAX ENDM此為宏定義寫出的清屏指令,首先將寄存器的數(shù)據(jù)壓入堆棧進行保護,然后調(diào)用INT10中斷設(shè)定屏幕顯示。其中AH設(shè)置滾屏方式06為向上滾屏,AL=0為設(shè)置窗口的清屏,而CH、CL、DH、DL為設(shè)置窗口的大小,根據(jù)設(shè)定的窗口大小確定清屏的范圍。清屏結(jié)束后,將壓入堆棧的寄存器的數(shù)據(jù)彈出,使清屏命令不會影響寄存器的數(shù)值。3.4.2光標定位程序介紹CURSOR_POSITIONMACROROW,CLM;設(shè)置光標位置宏定義PUSHAX;入棧保護現(xiàn)場PUSHBXPUSHCXPUSHDX MOVAH,2MOVBH,0;光標頁號MOVDH,ROW;光標行號MOVDL,CLM;光標列號INT10H;BIOS對屏幕及顯示器中斷調(diào)用 MOVAH,1;置光標類型,不顯示光標 MOVCH,20H INT10HPOPDX;出棧顯示數(shù)據(jù)POPCXPOPBXPOPAX ENDM此宏定義為光標位置的設(shè)定,首先是寄存器數(shù)據(jù)壓入堆棧保護。光標設(shè)定需要調(diào)用INT10H,給AH賦值02H,執(zhí)行設(shè)置光標位置命令,然后由DH、DL的數(shù)值確定光標的行號和列號。由于根據(jù)設(shè)計需求,在此還需設(shè)置光標屬性為隱藏,此功能同樣為調(diào)用INT10H,使得AH賦值為01H,根據(jù)CH的值確定光標的屬性。最后為寄存器數(shù)據(jù)出棧。3.4.3多字符顯示程序介紹SHOWMACROB ;宏定義顯示寄存器中內(nèi)容 LEADX,B ;將b的首地址給DX MOVAH,9 ;顯示器I/O,多字符輸出 INT21H ;DOS中斷調(diào)用 ENDM此處宏定義為多字符的屏幕顯示,首先是將需要顯示的字符的存儲區(qū)的便宜地址給DX,然后通過功能調(diào)用AH=09H;INT21H,便可將多個字符輸出至屏幕。3.4.4讀取鍵盤狀態(tài)程序介紹SCANKEYMACRO PUSHAX MOVAH,01H INT16H POPAX ENDM此處宏定義為讀取鍵盤狀態(tài),通過功能調(diào)用AH=01H;INT21H即可實現(xiàn),如有按鍵按下,則ZF=1,若無,則ZF=0。3.4.5讀取鍵盤值程序介紹INPKEYMACRO PUSHAX MOVAH,00H INT16H MOVBL,AL POPAX ENDM此處宏定義為讀取鍵盤函數(shù)值,通過功能調(diào)用AH=00H;INT21H實現(xiàn),此命令會將鍵盤按鍵的ASCII碼值輸入至AL寄存器中。3.4.6調(diào)用系統(tǒng)時間顯示程序介紹TIMEDISPLAYPROCNEAR;定義時間顯示子程序 MOVAH,2CH;取當前系統(tǒng)時間 INT21H MOVBX,10 LEADI,TIMEDIS;TIMEDIS的首地址給DI MOVAL,CH;小時傳遞給AL XORAH,AH;AH清零 DIVBL;小時的十位為AH,個位為AL ADDAX,3030H;轉(zhuǎn)為ASCII碼 MOV[DI+1],AX;將小時存入[DI+1] MOVAL,CL;將分鐘傳遞給AL XORAH,AH;AH清零 DIVBL;分鐘的高位為AH,低位為AL ADDAX,3030H;轉(zhuǎn)為ASCII碼 MOV[DI+6],AX;將分鐘存入[DI+6] MOVAL,DH;將秒傳遞給AL XORAH,AH;AH清零 DIVBL;秒的高位存入AH,低位存入AL ADDAX,3030H;轉(zhuǎn)換ASCII碼 MOV[DI+11],AX;將秒存入[DI+11] CURSOR_POSITION8,21H SHOWTIMEDIS;顯示TIMEDIS中內(nèi)容系統(tǒng)時間 RET;時間調(diào)用返回 TIMEDISPLAYENDP此處子程序為調(diào)用系統(tǒng)時間,然后到屏幕輸出,系統(tǒng)時間的調(diào)用采用DOS功能調(diào)用,AH=2CH;INT21H,調(diào)用后的系統(tǒng)時間,將小時的二進制碼保存在CH寄存器中,分鐘的二進制碼存入CL寄存器中,秒數(shù)的二進制碼存入DH寄存器中,然后DL寄存器中的值為1/100秒,根據(jù)設(shè)計要求只需要保存CH、CL、DH中的內(nèi)容,并將其除以10,先轉(zhuǎn)換為BCD碼,再加上3030H,轉(zhuǎn)換為ASCII碼,存入設(shè)置的數(shù)據(jù)緩沖區(qū)。然后定義光標位置,調(diào)用輸出命令,將其輸出至屏幕。3.4.7調(diào)用系統(tǒng)日期顯示程序介紹DATEDISPLAYPROCNEAR;定義日期顯示子程序 MOVAH,2AH;取當前系統(tǒng)日期 INT21H MOVAX,CX;送年份入AX(二進制數(shù)) MOVBX,10;(BX)=10 LEASI,DATEDIS+14;使SI指向年的最后一位 MOVCX,4;(CX)=4 PUSHDX;保存月日TAB:XORDX,DX;DX清零 DIVBX;(DX,AX)/BX,商送AX,余數(shù)送DX() ADDDL,30H;余數(shù)與30H相加變?yōu)樽址腁SCII碼 MOV[SI],DL;余數(shù)送入SI所指向的字節(jié)區(qū) DECSI;SI減一 LOOPTAB ;循環(huán)(將4個8字節(jié)的年份存入SI) POPDX;DX還原 MOVAL,DL;日送AL XORAH,AH;AH清零 DIVBL;AX/BL,商送AH,余數(shù)送AL ADDAX,3030H;轉(zhuǎn)變?yōu)閿?shù)字字符的ASCII碼 SUBSI,4;使SI指向日的第一位 MOV[SI],AX;(AX)送SI所指向的字節(jié)區(qū)(將4位表示變?yōu)?位表示) MOVAL,DH;月送AL XORAH,AH;AH清零 DIVBL;AX/BL,商送AH,余數(shù)送AL ADDAX,3030H;轉(zhuǎn)變?yōu)閿?shù)字字符的ASCII碼 SUBSI,5;使SI指向月的第一位 MOV[SI],AX;(AX)送SI所指向的字節(jié)區(qū) CURSOR_POSITION10H,28H SHOWDATEDIS;顯示日期 CURSOR_POSITION10H,10H SHOWmess3 RET;調(diào)用后返回DATEDISPLAYENDP此處子程序為調(diào)用系統(tǒng)日期,然后到屏幕輸出,系統(tǒng)時間的調(diào)用采用DOS功能調(diào)用,AH=2AH;INT21H,調(diào)用后的系統(tǒng)日期,將年份的二進制碼保存在CX寄存器中,月份的二進制碼存入DH寄存器中,日的二進制碼存入DL寄存器中。其流程跟時間顯示基本一致,將提取的二進制碼轉(zhuǎn)換為ASCII碼,存入緩沖區(qū),定義輸出位置輸出。3.4.8計時器程序介紹CHRONOGRAPHPROCNEAR CURSOR_POSITION10H,14H SHOWmess4 CURSOR_POSITION10H,28H SHOWmess5CHPH: CALLTIMEDISPLAYSCANKEY CALLDELAY_1 JECLEAR INPKEY CMPBL,53H JESTAT JMPCLEARSTAT: CALLTIMEDISPLAY CALLTIME SCANKEY JESTAT INPKEY CMPBL,50H JEPAUSE CMPBL,54H JEPAUSE JMPSTATPAUSE: CALLTIMEDISPLAY SCANKEY JEPAUSE INPKEY CMPBL,47H JESTAT CMPBL,43H JECLEAR CALLTIMEDISPLAY JMPPAUSECLEAR:CALLTIMEDISPLAY MOVCOUNT1,0 MOVCOUNT2,0 MOVCOUNT3,0 RET CHRONOGRAPHENDP計時器子程序首先顯示提示界面,通過按鍵的判斷執(zhí)行不同的功能選擇,主要通過提取鍵盤值,然后進行程序的跳轉(zhuǎn)完成。3.4.9將二進制數(shù)轉(zhuǎn)換為ASCII碼程序介紹CHANGEPROCNEARMOVCX,10D;顯示十位CALLDECDIVMOVCX,1;顯示個位CALLDECDIVRETCHANGEENDPDECDIVPROCNEAR;轉(zhuǎn)化成字符顯示MOVDX,0DIVCXMOVBX,0ADDAL,30H;轉(zhuǎn)換成ASCIIMOVAH,0EHINT10H;顯示一個字符MOVAX,DXRETDECDIVENDP以上程序完成的為進制轉(zhuǎn)換,首先將二進制數(shù)除以10將商和余數(shù)分別保存,轉(zhuǎn)換為BCD碼,分十位、個位分別操作,分別加上30H調(diào)整為ASCII碼。3.4.10計時程序介紹TIME PROC PUSHAX PUSHDXMAIN: MOVAH,2 INT1AH CMPDH,SECOND JNEGET JMPNEXTGET: MOVSECOND,DH INCCOUNT1 MOVAX,COUNT1 CMPAX,32H JNENEXT4 MOVCOUNT1,0 INCCOUNT2 MOVAX,COUNT2 CMPAX,32H JNENEXT4 MOVCOUNT2,0 INCCOUNT3NEXT4: CURSOR_POSITION10H,28H MOVAX,COUNT3 CALLCHANGE MOVAH,2 MOVDL,':' INT21H CURSOR_POSITION10H,2BH MOVAX,COUNT2 CALLCHANGE MOVAH,2 MOVDL,':' INT21H CURSOR_POSITION10H,2EH MOVAX,COUNT1 CALLCHANGENEXT: POPDX POPAX RETTIME ENDP此程序為計時器的主體程序,通過功能調(diào)用AH=2;INT1AH,得到系統(tǒng)時間,并且得到系統(tǒng)現(xiàn)在的秒數(shù),保存至DH寄存器中,首先將SECOND賦值為0,然后和提取的秒對比,若相等,則輸出此時的計時的小時、分鐘、秒,若不想等,秒加一,且將DH的值賦給SECOND,在此輸出,同時考慮分鐘的最大值,若到達60,則將分鐘值加一,秒數(shù)清零,輸出,若分鐘數(shù)達到60,則將小時數(shù)加一,分鐘數(shù)清零輸出。

4調(diào)試結(jié)果及分析4.1程序初始運行狀態(tài)程序運行之后,屏幕出現(xiàn)程序初始界面如圖4-1所示。圖4-1程序初始界面在此界面下,如果有按鍵“Q”(必須是大寫的)按下,則會退出此執(zhí)行界面。根據(jù)界面顯示的不同提示語句,可根據(jù)不同的輸入實現(xiàn)不同的功能。4.2日期顯示運行結(jié)果在程序初始界面的前提下,按下鍵盤“D”,則進入日期顯示功能,其日期顯示界面如圖4-2所示。在此界面下,會輸出系統(tǒng)的當前日期,只有當按下鍵盤“L”后,退出此功能,且回到程序初始界面。圖4-2日期顯示界面4.3計時功能運行結(jié)果在程序初始界面的前提下,按下鍵盤“H”,則進入計時功能,計時功能界面如圖4-3所示。圖4-3計時功能界面此界面顯示程序進入計時器功能,程序準備好計時,此事按下鍵盤“S”,計時開始,計時時間開始運行,得到的計時功能開始后界面如圖4-4所示。圖4-4計時功能開始后界面在此界面中,顯示已經(jīng)經(jīng)過的時間,在此狀態(tài)下,按下鍵盤“P”,計時暫停,界面上的計時器出的時間顯示暫停,不再變化。此時若按下“G”,計時繼續(xù)開始,在原來時間的基礎(chǔ)上繼續(xù)變化。若有鍵盤“T”按下,則計時停止。如果按下鍵盤“C”,計時器清零,界面計時器處的顯示重新為00:00:00,此事等待重新計時按鍵“S”,或退出按鍵“L”使屏幕恢復到初始運行狀態(tài)。

5收獲與體會微機原理與接口技術(shù)是一門很有趣的課程,任何一個計算機系統(tǒng)都是一個復雜的整體,學習計算機原理是要涉及到整體的每一部分。討論某一部分原理時又要涉及到其它部分的工作原理。這樣一來,不僅不能在短時間內(nèi)較深入理解計算機的工作原理,而且也很難孤立地理解某一部分的工作原理。所以,在循序漸進的課堂教學過程中,我總是處于“學會了一些新知識,弄清了一些原來保留的問題,又出現(xiàn)了一些新問題”的循環(huán)中,直到課程結(jié)束時,才把保留的問題基本搞清楚。在此次的課程設(shè)計的上機與理論學習,帶給了我更深的感受。此次課程設(shè)計讓我了解到編寫程序的復雜性,必須保持編寫程序時的細心認真。為了編寫程序方便,以及程序調(diào)試的方便,將程序進行分塊書寫,便于程序的閱讀、改正,以及更多功能的增添。同時在程序的運行、調(diào)試過程也遇到了比較繁瑣的難題。第一是光標的閃爍問題,由于要不斷的調(diào)用系統(tǒng)時間,不斷的光標定位,然后輸出到屏幕顯示。由于時間比較快,所以不斷閃爍。最后選擇解決方案為設(shè)置光標的屬性,將光標設(shè)置為隱藏不顯示。第二是功能選擇問題,由于跳轉(zhuǎn)的選項較多,使得各功能的進入退出出現(xiàn)問題,經(jīng)過不斷的調(diào)試,整理思路,調(diào)整程序順序,以達到最后的功能。第三就是計時器功能的實現(xiàn),需要不斷的需系統(tǒng)時間進行對比,系統(tǒng)時間變化一秒,計時器數(shù)值增加一秒,同時將計時器存儲的數(shù)值分為小時、分鐘、秒存儲,且需要將其轉(zhuǎn)換為ASCII碼進行輸出。在解決程序設(shè)計出現(xiàn)的問題的同時我也體會到在二進制轉(zhuǎn)化成ASCII碼的過程中,二進制數(shù)首先轉(zhuǎn)化為雙四位的BCD碼,再將高四位低四位分別相加30H,從而轉(zhuǎn)化為ASCII碼,此時要對照書本ASCII碼表,了解電腦CPU如何將ASCII碼的信息轉(zhuǎn)換成顯示字符。再有要多多學習經(jīng)典程序書寫思路、方式,且熟練掌握,將其作為自己的子程序運用到自己的設(shè)計當中去。此次課程設(shè)計,讓我們將理論知識于實際相結(jié)合,自己深入設(shè)計其中,感到了自己的進步,也發(fā)現(xiàn)了自己的不足。明確自己需要在以后不斷學習,不斷進取,同時也感謝老師在此次課程設(shè)計中的指導幫助。

參考文獻姚燕南,薛均義主編.微型計算機原理與接口技術(shù).高等教育出版社,2004李群芳,張士軍,黃建編著.單片機微型計算機與接口技術(shù).電子工業(yè)出版社,2005薛均義主編.微型計算機原理及應(yīng)用(Intel80X86系列).機械工業(yè)出版,2002黃明,梁旭,常征著.匯編語言程序設(shè)計習題詳解.北京:機械工業(yè)出版社,2004王永山,楊宏五,楊嬋娟著.微型計算機原理與應(yīng)用(第二版).西安:西安電子科技大學出版社,2006溫冬蟬,沈美明.IBMPC匯編語言程序設(shè)計(第2版).北京:清華大學出版社,2002姚燕南,薛均義主編.微型計算機原理與接口技術(shù).北京:高等教育出版社,2004

附錄:設(shè)計源程序;name:ELECTRONICCLOCK;designbybaixiaomeng,dianqi1107;*****************************清屏*******************************CLEAR_SCREENMACROOP1,OP2,OP3,OP4;清屏 PUSHAX;入棧保護現(xiàn)場PUSHBXPUSHCXPUSHDX MOVAH,06H;向上滾屏 MOVAL,00H;全屏幕為空白 MOVBH,79H;空白區(qū)域缺省屬性 MOVCH,OP1;左上角行號 MOVCL,OP2;左上角列號 MOVDH,OP3;右下角行號 MOVDL,OP4;右下角列號 INT10H;BIOS對屏幕及顯示器中斷調(diào)用 POPDX;出棧顯示數(shù)據(jù)POPCXPOPBXPOPAX ENDM;******************************光標定位******************************* CURSOR_POSITIONMACROROW,CLM;設(shè)置光標位置宏定義PUSHAX;入棧保護現(xiàn)場PUSHBXPUSHCXPUSHDX MOVAH,2MOVBH,0;光標頁號MOVDH,ROW;光標行號MOVDL,CLM;光標列號INT10H;BIOS對屏幕及顯示器中斷調(diào)用 MOVAH,1;置光標類型,不顯示光標 MOVCH,20H INT10HPOPDX;出棧顯示數(shù)據(jù)POPCXPOPBXPOPAX ENDM;**********************************字符顯示***************************** SHOWMACROB ;宏定義顯示寄存器中內(nèi)容 LEADX,B ;將b的首地址給DX MOVAH,9 ;顯示器I/O,多字符輸出 INT21H ;DOS中斷調(diào)用 ENDM ;**************************從鍵盤輸入一個字符************************INPUTMACROPUSHAXMOVAH,1 INT21H MOVBL,AL POPAX ENDM;********************************讀取鍵盤狀態(tài)***************************SCANKEYMACRO PUSHAX MOVAH,01H INT16H POPAX ENDM ;**********************************讀取鍵盤值***************************INPKEYMACRO PUSHAX MOVAH,00H INT16H MOVBL,AL POPAX ENDM;*******************************定義數(shù)據(jù)段******************************DATASEGMENTmess1db'Welcometomybeautiful!','$',0ah,0dhmess2db'',0ah,0dh db'+~~~(*^__^*)~~~+',0ah,0dh db'++',0ah,0dh db'+ELECTRONICCLOCK+',0ah,0dh db'+baixiaomeng+',0ah,0dh db'+Thetimeisnow:+',0ah,0dhdb'++',0ah,0dh db'++',0ah,0dh db'+AdditionalFunction:+',0ah,0dh db'+1.ShowDateTimeOpen:DClose:L+',0ah,0dh db'+2.ChronographOpen:HClose:L+',0ah,0dh db'+Start:SPause:PContinue:GStop:TClear:C+',0ah,0dh db'++',0ah,0dh db'++',0ah,0dh db'++',0ah,0dh db'+PressQbuttontoquit+',0ah,0dh db'+****************************************************+','$' mess3db'TheDateTimeisnow:',0ah,0dh,'$' mess4db'ThePastTimeis:',0ah,0dh,'$' mess5db'00:00:00',0ah,0dh,'$'mess6db'ZhengDianBaoShi',0ah,0dh,'$' D_BUF1db20DUP(?);在數(shù)據(jù)段開辟一時間顯示緩沖區(qū) D_BUF2db20DUP(?)SECONDDB0 COUNT1DW0 ;秒COUNT2DW0 ;分COUNT3DW0 ;時 DATEDISDB'00-00-0000',0AH,'$';顯示DATE TIMEDISDB'00',3AH,'00',3AH,'00',0AH,'$' DATAENDS;*********************************定義堆棧段****************************STACKSEGMENTdb100dup(?)STACKENDS;***********************************定義指令段**************************CODESEGMENTASSUMEcs:code,ss:stack,ds:dataSTART: MOVAH,0;設(shè)置顯示模式 MOVAL,3 ;文字分辨率80*25顏色16 INT10H;BIOS對屏幕及顯示器中斷調(diào)用 CLEAR_SCREEN00H,00H,50H,50H;調(diào)用宏定義設(shè)置區(qū)域 MOVAX,DATA;數(shù)據(jù)段首地址給AX MOVDS,AX;數(shù)據(jù)段首地址給DS MOVAX,STACK;堆棧段首地址給AX MOVSS,AX;堆棧段首地址給SS CURSOR_POSITION1,1 SHOWmess1 CURSOR_POSITION2,1 SHOWmess2LOOP1: CALLTIMEDISPLAY SCANKEY JELOOP1 INPKEY CMPBL,57H JEZDTM CMPBL,44H JEDATE CMPBL,48H JECHRO CMPBL,51H JEQUIT JMPLOOP1DATE:CALLDATEDISPLAYCALLTIMEDISPLAYSCANKEY JEDATE INPKEY CMPBL,4CH JNEDATE CLEAR_SCREEN0FH,0FH,10H,37H CURSOR_POSITION0EH,15JMPLOOP1CHRO: CALLCHRONOGRAPHCALLTIMEDISPLAYSCANKEY JECHRO INPKEY CMPBL,4CH JNECHRO CLEAR_SCREEN0FH,0FH,10H,37H CURSOR_POSITION0EH,15JMPLOOP1`ZDTM:CURSOR_POSITION10H,1DHSHOWmess6 CALLTIMEDISPLAYSCANKEY JEZDTM INPKEY CMPBL,4CH JNEZDTM CLEAR_SCREEN0FH,0FH,10H,37HJMPLOOP1QUIT:CURSOR_POSITION14H,1HMOVAH,4CHINT21H ;***********************秒表子程序***************************CHRONOGRAPHPROCNEAR CURSOR_POSITION10H,14H SHOWmess4 CURSOR_POSITION10H,28H SHOWmess5CHPH: CALLTIMEDISPLAYSCANKEY CALLDELAY_1 JECLEAR INPKEY CMPBL,53H JESTAT JMPCLEARSTAT: CALLTIMEDISPLAY CALLTIME SCANKEY JESTAT INPKEY CMPBL,50H JEPAUSE CMPBL,54H JEPAUSE JMPSTATPAUSE: CALLTIMEDISPLAY SCANKEY JEPAUSE INPKEY CMPBL,47H JESTAT CMPBL,43H JECLEAR CALLTIMEDISPLAY JMPPAUSECLEAR:CALLTIMEDISPLAY MOVCOUNT1,0 MOVCOUNT2,0 MOVCOUNT3,0 RET CHRONOGRAPHENDP ;***********************時間顯示子程序***********************TIMEDISPLAYPROCNEAR;定義時間顯示子程序 MOVAH,2CH;取當前系統(tǒng)時間 INT21H MOVBX,10 LEADI,TIMEDIS;TIMEDIS的首地址給DI MOVAL,CH;小時傳遞給AL XORAH,AH;AH清零 DIVBL;小時的十位為AH,個位為AL ADDAX,3030H;轉(zhuǎn)為ASCII碼 MOV[DI+1],AX;將小時存入[DI+1] MOVAL,CL;將分鐘傳遞給AL XORAH,AH;AH清零 DIVBL;分鐘的高位為AH,低位為AL ADDAX,3030H;轉(zhuǎn)為ASCII碼 MOV[DI+6],AX;將分鐘存入[DI+6] MOVAL,DH;將秒傳遞給AL XORAH,AH;AH清零 DIVBL;秒的高位存入AH,低位存入AL ADDAX,3030H;轉(zhuǎn)換ASCII碼 MOV[DI+11],AX;將秒存入[DI+11] CURSOR_POSITION8,21H SHOWTIMEDIS;顯示TIMEDIS中內(nèi)容系統(tǒng)時間 RET;時間調(diào)用返回 TIMEDISPLAYENDP;************************延遲時間子程序****************************DELAY PROC PUSHCX MOVCX,0FFFHNEXT_D:NOP LOOPNEXT_D POPCX RETDELAY ENDP;*************************短延時**********************************DELAY_1 PROC PUSHCX MOVCX,00FFHNEXT_D1:NOP LOOPNEXT_D1 POPCX RETDELAY_1 ENDP;****************************日期顯示子程序*****

溫馨提示

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

評論

0/150

提交評論