微機(jī)原理課設(shè)電子秒表_第1頁
微機(jī)原理課設(shè)電子秒表_第2頁
微機(jī)原理課設(shè)電子秒表_第3頁
微機(jī)原理課設(shè)電子秒表_第4頁
微機(jī)原理課設(shè)電子秒表_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、湖南文理學(xué)院芙蓉學(xué)院微機(jī)原理課程設(shè)計報告課程名稱: 電子秒表 專業(yè)班級: 學(xué)生學(xué)號: 學(xué)生姓名: 指導(dǎo)教師: 完成時間: 評閱意見:評定成績: 評閱教師 日期 目 錄第1章 總體設(shè)計方案11.1 課程設(shè)計的內(nèi)容和要求11.2 課程設(shè)計原理11.3 課程設(shè)計思路21.4 設(shè)計環(huán)境2第2章 詳細(xì)設(shè)計方案32.1 實(shí)現(xiàn)方法32.2 模塊的設(shè)計與實(shí)現(xiàn)4主程序模塊4初始化模塊5時鐘模塊6秒表模塊62.3 程序連線圖8第3章 調(diào)試及結(jié)果分析93.1 調(diào)試步驟及方法9程序的語法錯誤9時鐘模塊調(diào)試過程9秒表模塊調(diào)試過程113.2 實(shí)驗(yàn)結(jié)果11參考文獻(xiàn)13附 錄(源程序)14第1章 總體設(shè)計方案1.1 課程設(shè)計

2、的內(nèi)容和要求一、課程設(shè)計內(nèi)容:設(shè)計一個帶時間顯示的電子秒表,具體內(nèi)容如下:1. 電子秒表的初始狀態(tài)為零,分別顯示分、秒、毫秒;2. 設(shè)計一個按鈕,按第一次開始計時,按第二次計時暫停,顯示當(dāng)前記錄的時間,按第三次計時停止,回到初始態(tài);3. 有時間顯示的功能,當(dāng)不用電子秒表的功能時,顯示當(dāng)先的時間,分別為時、分、秒形式。二、課程設(shè)計要求:1. 獨(dú)立完成課程設(shè)計任務(wù);2. 通過老師當(dāng)場驗(yàn)收;3. 交出完整的課程設(shè)計報告。1.2 課程設(shè)計原理題目要求實(shí)現(xiàn)電子秒表功能和顯示當(dāng)前時間的功能。這兩部分的共同點(diǎn)是都需要實(shí)現(xiàn)時間顯示和時間運(yùn)行功能。除此之外,電子秒表還需要有開始計時和停止計時功能。因此電子秒表是

3、本次課程設(shè)計的主要部分。在本次設(shè)計中主要使用了8255A并行接口芯片,8253定時/計數(shù)器,8259A中斷控制器,8279鍵盤/顯示芯片。具體原理和功能如下:1. 利用8255A芯片實(shí)現(xiàn)時鐘和秒表之間的切換。將其連接到一個開關(guān)上,讀取開關(guān)的電位,以此來判斷是時鐘模式還是秒表模式。2. 利用8253芯片計時。用8253的分頻功能使其產(chǎn)生周期為1s和1ms的方波,分別為時鐘和秒表計時。3. 利用8259A芯片接收中斷。中斷分為三種類型,分別是一秒一次的時鐘計時中斷,一毫秒一次的秒表計時中斷和控制秒表開始和停止的中斷。4. 利用8279芯片在數(shù)碼管上顯示當(dāng)前時間或秒表時間。1.3 課程設(shè)計思路由于要

4、求實(shí)現(xiàn)時鐘和秒表兩種功能。因此需要設(shè)計時鐘和秒表兩個模式。時鐘模式下,以秒為計時單位,計時功能和顯示當(dāng)前時間功能。秒表模式下,以毫秒為計時單位,有開始、停止和顯示計時結(jié)果的功能。首先,將8255A芯片的PC0接口連接到開關(guān)。讀C端口的值。判斷是0還是1。0代表時鐘模式,1代表秒表模式。然后,根據(jù)判斷結(jié)果調(diào)用相應(yīng)模式下的顯示功能。這樣不停地讀8255A芯片,然后判斷,最后顯示。構(gòu)成一個死循環(huán)。若在這個過程中有中斷,則會執(zhí)行中斷服務(wù)程序。時間中斷由8253芯片產(chǎn)生,周期分別為1s和1ms。時鐘的最大時間為23時59分59秒,超過后從零開始重新計時。秒表最大時間為59分59秒999毫秒。當(dāng)計數(shù)大于這

5、個值時,秒表不再更新。對秒表的控制中斷由一個手動脈沖產(chǎn)生。將按鍵次數(shù)保存在名為pad的內(nèi)存空間中。pad只能有0、1、2三個值,分別代表清零、開始計時和停止計時。8259芯片接收中斷,并調(diào)用相應(yīng)模式下的中斷服務(wù)程序。在時鐘模式下,直接將時間加一秒。在秒表模式下,或清零(重新開始,pad=0),或?qū)r間加一毫秒(開始計時,pad=1),或不做任何處理(停止計時,pad=2)。 要實(shí)現(xiàn)以上分析的功能,可以設(shè)計4個模塊。模塊名和作用見表1.1。表1.1 模塊劃分及功能描述模塊名稱功能主程序模塊調(diào)用初始化模塊,判斷時間模式,調(diào)用相應(yīng)的顯示函數(shù)初始化模塊初始化各芯片,裝入中斷向量時鐘模塊實(shí)現(xiàn)時鐘計時和顯

6、示功能秒表模塊實(shí)現(xiàn)秒表的計時、顯示和控制功能1.4 設(shè)計環(huán)境硬件環(huán)境:AEDK實(shí)驗(yàn)箱軟件環(huán)境:LCT88EA應(yīng)用軟件、WindowXP操作系統(tǒng)、PC機(jī)第2章 詳細(xì)設(shè)計方案2.1 實(shí)現(xiàn)方法1. 內(nèi)存分配程序中所需定義的內(nèi)存單元含義如下:timer0:存放當(dāng)前時鐘的值,共6個字節(jié)。時、分、秒各占兩個字節(jié);timer1:存放秒表的計數(shù)值,共7個字節(jié)。分和秒各占兩個字節(jié),毫秒占三個字節(jié);pad:存放秒表的按鍵次數(shù),共1個字節(jié)??梢杂腥N取值,0代表清零,1代表開始計時,2代表停止計時。當(dāng)計數(shù)值大于2時,變?yōu)?重新開始計數(shù);tab:存放09在數(shù)碼管上顯示的編碼,共10個字節(jié)。2. 按鍵設(shè)置秒表有一個按鈕

7、,接手動脈沖和8259A芯片的中斷引腳。每次按鍵,pad都做相應(yīng)改變。按第一次開始計時(pad=1),按第二次計時暫停(pad=2),顯示當(dāng)前記錄的時間,按第三次計時停止(pad=0),回到初始態(tài)。3. 時鐘頻率選擇CPU的頻率為。用8253芯片產(chǎn)生方波。計數(shù)器1的接CPU時鐘脈沖,計數(shù)初值為307,使產(chǎn)生周期為1ms的方波。計數(shù)器0的接,計數(shù)初值為1000,使產(chǎn)生周期為1s的方波。4. 中斷設(shè)置8259A芯片的中斷引腳、分別接8253芯片的、和手動脈沖。5. 顯示設(shè)置顯示功能由8279芯片和數(shù)碼管實(shí)現(xiàn)。顯示分為兩種情況。時鐘模式下的顯示規(guī)則是(時-分-秒),即(00-00-00)。秒表模式下

8、的顯示規(guī)則是(分-秒.毫秒),即(00-00.000)。6. 端口地址分配本次課程設(shè)計共使用了4種芯片,他們的端口號設(shè)置如表2.1所示。表2.1 端口地址分配表芯片名稱端口號含義8255A200H203HA端口、B端口、C端口、控制端口8253210H213H計數(shù)器0、計數(shù)器1、計數(shù)器2、控制端口8259A220H221H偶地址端口、奇地址端口8279230H、232H數(shù)據(jù)端口、控制端口7. 子程序子程序名稱和功能如表2.2所示。表2.2 子函數(shù)表名稱作用名稱作用i8255初始化8255A芯片i8253初始化8253芯片i8259初始化8259A芯片,裝中斷向量i8279初始化8279芯片in

9、t_timer0時鐘中斷服務(wù)程序display0顯示時鐘int_timer1秒表中斷服務(wù)程序display1顯示秒表int_pad更改按鍵次數(shù)2.2 模塊的設(shè)計與實(shí)現(xiàn)2.2.1主程序模塊主程序的主要功能是初始化各芯片,模式選擇以及調(diào)用顯示函數(shù)。在初始化結(jié)束后,程序進(jìn)入死循環(huán),不斷檢測8255A芯片C端口的狀態(tài),CUP隨時響應(yīng)中斷,更新時鐘狀態(tài),把應(yīng)顯示的結(jié)果送入time0和time1中,以備顯示。主程序的流程如圖2.1。開始設(shè)置數(shù)據(jù)段關(guān)中斷初始化各芯片開中斷讀8255A芯片的C端口值PC=0調(diào)用display0,顯示時鐘調(diào)用display1,顯示秒表是否圖2.1 主程序流程圖2.2.2初始化模

10、塊初始化模塊主要用于初始化各芯片,設(shè)定芯片工作方式,以及裝入中斷向量等。各芯片初始化情況如表2.3所示。表2.3 芯片的初始化芯片名稱初始化8255AC口低四位輸入,控制字9BH8253計數(shù)器1:先送低八位,后高八位,工作方式3,二進(jìn)制計數(shù),計數(shù)初值307;計數(shù)器0:先送低八位,后高八位,工作方式3,二進(jìn)制計數(shù),計數(shù)初值10008259AICW1:上升沿觸發(fā),單片,寫ICW4,控制字13H;ICW2:中斷類型號30H,控制字30H;ICW4:正常EOI,8086/8088系統(tǒng),控制字01H;中斷向量:中斷類型號30H、31H、32H對應(yīng)的中斷服務(wù)程序?yàn)閕nt_timer0、int_timer1

11、、int_pad8279清除顯示和顯示寄存器,控制字0D2H;鍵盤顯示命令,八個字符顯示,左端輸入方式,控制字00H2.2.3時鐘模塊時鐘模塊主要是為了實(shí)現(xiàn)時鐘的計時和顯示功能。時鐘的計時功能由int_timer0子程序?qū)崿F(xiàn),屬于中斷服務(wù)程序。顯示功能由display0程序?qū)崿F(xiàn),由主程序調(diào)用。1. int_timer0這個中斷服務(wù)程序的中斷類型號為30H。8253芯片產(chǎn)生周期為1s的方波,當(dāng)其上升沿到達(dá)8259A芯片的引腳后,進(jìn)入中斷服務(wù)程序int_timer0。進(jìn)入int_timer0后,首先從內(nèi)存中讀出前一秒的時間的最后一位,即time0的最后一位,然后加1。若有進(jìn)位,則把當(dāng)前這一位置零,

12、然后讀出前一位再加一,再判斷是否有進(jìn)位。以此類推,直到?jīng)]有進(jìn)位或者達(dá)到計數(shù)最大值為止。把修改后的時間存回內(nèi)存中,以備顯示。2. display0這是時鐘模式的顯示程序。在時鐘模式下會反復(fù)被主程序調(diào)用。首先設(shè)置8279A芯片的顯示方式。然后讀取time0的最后一位,用XLAT命令查tab表,將得到的結(jié)果輸出到8279A芯片,然后在數(shù)碼管上顯示。每顯示兩位數(shù)字,就在中間顯示一條橫線以分隔時分秒。2.2.4秒表模塊與時鐘模式類似,秒表模式也需要計時和顯示功能。除此之外,秒表模式還需要有按鍵控制功能用于開始、暫停計時和清零。計時功能由int_timer1實(shí)現(xiàn),屬于中斷服務(wù)程序。顯示功能由display

13、1子程序?qū)崿F(xiàn)。按鍵功能由int_pad實(shí)現(xiàn),屬于中斷服務(wù)程序。1. int_timer1這個中斷服務(wù)程序的中斷類型號為31H。8253芯片產(chǎn)生周期為1ms的方波,當(dāng)其上升沿到達(dá)8259芯片的引腳后,進(jìn)入中斷服務(wù)程序int_timer1。進(jìn)入int_timer1后,首先從內(nèi)存pad中讀出按鍵次數(shù)。若pad中的值為2,說明現(xiàn)在秒表處于停止?fàn)顟B(tài),計時停止,不將秒表的計時值刷新,所以直接中斷返回。若pad中的值為1,說明秒表正在計時,應(yīng)將秒表的計時值加1ms。加1的方法與時鐘加1的方法類似。先讀出 time1的最低位,加1后判斷進(jìn)位。最后中斷返回。若pad中的值為0,說明秒表要重新開始計時,需要將秒表

14、清零。即把time0中的每一位都改為零。最后中斷返回。2. display1這是秒表模式的顯示程序,在秒表模式下會反復(fù)被主程序調(diào)用。顯示方法與display1類似。不同的是,秒表的顯示格式是00-00.000,即在顯示秒的最后一位時,需要加一個小數(shù)點(diǎn)。實(shí)現(xiàn)的方法是,先將這一位查表轉(zhuǎn)化為可在數(shù)碼管上的編碼,由于數(shù)碼管是否顯示小數(shù)點(diǎn)是由編碼的最高位指示的,所以只需將編碼和80H進(jìn)行或運(yùn)算即可添加小數(shù)點(diǎn)。最后將結(jié)果輸出到數(shù)碼管顯示。3. int_pad 這個中斷服務(wù)程序的中斷類型號為32H。當(dāng)手動脈沖被按下的時候,進(jìn)入這個中斷服務(wù)程序。將pad中的值加1。pad中的初始值為0,當(dāng)加到3時,將其變?yōu)?

15、。2.3 程序連線圖CS=210H8253OUT1CLK0OUT0CS=220H8259AIR1IR0IR3手動脈沖8279CS=230H數(shù)碼管CLK1CPU時鐘脈沖8255APC0 CS=210H開關(guān)圖2.2 程序連線圖第3章 調(diào)試及結(jié)果分析3.1 調(diào)試步驟及方法由于程序比較大,要整體調(diào)試會非常困難,不容易找出哪里有問題。所以必須分而治之,將程序拆分開來調(diào)試。由于整個程序被化分為了幾個模塊,所以,調(diào)試可以按模塊來進(jìn)行。我將調(diào)試分為時鐘模塊和秒表模塊。因?yàn)闀r鐘模塊相對簡單,所以先調(diào)試時鐘模塊,后調(diào)試秒表模塊。3.1.1程序的語法錯誤 由于對匯編語言還不熟悉,所以出現(xiàn)了較多的語法錯誤。主要錯誤有

16、以下一些。程序格式錯誤。例如,子程序最后應(yīng)寫RET。寄存器尋址方式錯誤。例如,在裝中斷向量的時候,應(yīng)該是寄存器間接尋址,要加中括號。跳轉(zhuǎn)錯誤。跳轉(zhuǎn)的最大值不能超過一定的限度。而且跳轉(zhuǎn)的標(biāo)號不能重復(fù)。寫地址錯。例如,在向某個端口送數(shù)據(jù)的時候,不能直接寫地址,而必須將端口地址放入寄存器DX中,再送數(shù)據(jù)。3.1.2時鐘模塊調(diào)試過程時鐘模塊又分為顯示模塊和計數(shù)模塊。先調(diào)試顯示模塊,再調(diào)試計數(shù)模塊。1. 顯示模塊調(diào)試中的問題及解決方案問題1:數(shù)碼管沒有任何反應(yīng)問題分析:在初始化8279時,數(shù)碼管就應(yīng)該被清除顯示,即會不顯示任何東西,但是先在數(shù)碼管上的數(shù)并沒有被清除,說明了可能是8279工作錯誤。檢查程序

17、后發(fā)現(xiàn),8279的控制端口是231H,但是正確的應(yīng)該為232H。解決方案:將控制端口號改為232H。問題2:數(shù)碼管顯示亂碼問題分析:8279在初始化時已經(jīng)清除了顯示,但是還是顯示亂碼,說明是后送入的數(shù)有錯。解決方案:檢查程序后發(fā)現(xiàn),在初始化各芯片的時候沒有關(guān)中斷和開中斷,8259A可能錯誤的響應(yīng)的中斷。問題3:顯示順序顛倒問題分析:由于設(shè)置的是從左到右的八位顯示,所以應(yīng)該是送顯示數(shù)的順序不對。解決方案:將display0中的送顯順序顛倒。2. 計數(shù)模塊調(diào)試中的問題及解決方案問題1:數(shù)碼管顯示結(jié)果一直為初始值問題分析:可能的原因是8253芯片沒有產(chǎn)生方波或是8259A芯片沒有響應(yīng)中斷。解決方案:

18、將8259A和8253斷開,然后將手動脈沖接到8259A的中斷引腳。用手動脈沖來產(chǎn)生中斷。結(jié)果顯示沒有任何改變,說明中斷有問題。問題2:中斷響應(yīng)問題,當(dāng)接手動脈沖時,8259A的表現(xiàn)是不響應(yīng)中斷,時鐘值不增加。問題分析:檢查中斷向量裝入是否正確,再檢查中斷服務(wù)程序。最后發(fā)現(xiàn)是中斷服務(wù)程序有錯。在使用各寄存器之前,沒有對其進(jìn)行相應(yīng)的保護(hù),導(dǎo)致結(jié)果異常。 解決方案:int_timer0開始時將AX/BX/CX/DX分別壓入棧中,在程序結(jié)束時彈出。問題3:將8253和8259A相連后,只能響應(yīng)一次中斷。問題分析:在中斷沒有錯誤的情況下,只能是8253出錯。8259A響應(yīng)了一次中斷是因?yàn)?253在啟動

19、時,會從低電平變?yōu)楦唠娖?。在這個上升沿,8259A響應(yīng)了中斷,將時鐘加1。但后來就沒有響應(yīng)中斷。再將8253接到LED燈上,發(fā)現(xiàn)其一直不亮,說明8253產(chǎn)生的波有錯誤。檢查8253的初始化后發(fā)現(xiàn)是送的計數(shù)初值和送數(shù)的方式都有錯。解決方案:將計數(shù)初值和送數(shù)方式改正。問題4:時鐘顯示錯位問題分析:在只送初值的情況下,顯示沒有問題,但當(dāng)時鐘增加的時候,顯示會錯位。解決方案:改變顯示方式在顯示之前將顯示方式寫為90H3.1.3秒表模塊調(diào)試過程在時鐘模塊被調(diào)試完后,秒表模塊就更容易調(diào)試了,因?yàn)閮蓚€模式的顯示和計時都大同小異。因此,調(diào)試過程中的主要問題出在秒表的控制上。問題1:按控制按鈕秒表沒有反應(yīng)問題分

20、析:可能是控制信號沒有得到響應(yīng),檢查程序發(fā)現(xiàn),int_pad的中斷類型號裝入有錯。解決方案:將中斷類型好改正后問題解決了。問題2:在秒表模式下開始計后,若切換到時鐘模式,則顯示會發(fā)生錯誤。問題分析:肯能是兩個模式有沖突的地方。經(jīng)過檢查程序發(fā)現(xiàn),可能是因?yàn)闆]有保護(hù)寄存器的原因。解決方案:int_timer1開始時將AX/BX/CX/DX分別壓入棧中,在程序結(jié)束時彈出。問題3:時鐘模擬計時誤差大。在時鐘計時顯示的時候,有時會停頓有時又加的比較快。問題分析:可能是因?yàn)镃PU響應(yīng)中斷需要一定的時間,也可能是程序安排不恰當(dāng)解決方案:優(yōu)化程序的結(jié)構(gòu),適當(dāng)改變8253的計數(shù)初值。3.2 實(shí)驗(yàn)結(jié)果本程序能夠滿

21、足題目的所有要求,其測試結(jié)果如下:1. 將開關(guān)置于低電平,進(jìn)入時鐘模式。數(shù)碼管顯示當(dāng)前時間,并每秒加1。20-13-592. 將開關(guān)置于高電平,進(jìn)入秒表模式。數(shù)碼管顯示計數(shù)初值。00-00.0003. 在秒表模式下,按一下秒表控制按鈕,開始計時,數(shù)碼管不斷刷新秒表計時。00-00.1984. 在秒表開始計數(shù)后,切換到時鐘模式,時鐘仍然在正常計時。20-14-115. 切換回秒表模式下第二次按下按鈕,計時停止,顯示最后計時結(jié)果。00-51.7156. 在秒表模式下第三次按下按鈕,計時停止,結(jié)果清零。00-00.0007. 將時鐘的初值設(shè)定為23時59分40秒,30秒后觀察結(jié)果。00-00-108

22、. 將秒表的初值設(shè)定為59分40秒000毫秒,30秒后觀察結(jié)果。59-59.999參考文獻(xiàn)1 龔尚福.微機(jī)原理與接口技術(shù)M.西安:西安電子科技大學(xué)出版社,20032 王忠民.微型計算機(jī)原理M. 西安:西安電子科技大學(xué)出版社,20033 沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計M.北京:清華大學(xué)出版社,20014 鄭初華.匯編語言、微機(jī)原理及接口技術(shù)M. 西安:西安電子科技大學(xué)出版社,20035 仇玉章.32位微型計算機(jī)原理與接口技術(shù)M. 北京:清華大學(xué)出版社,20006 王富榮.微機(jī)原理與匯編語言實(shí)用教程M. 北京:清華大學(xué)出版社,20097 白中英.計算機(jī)組成原理M. 北京:科學(xué)出版社,

23、20008 羅云彬. Windows環(huán)境下32位匯編語言程序設(shè)計M. 北京:電子工業(yè)出版社,2002附 錄(源程序)C8255 EQU 203HD8255C EQU 202HC8253 EQU 213HD82530 EQU 210HD82531 EQU 211HD82532 EQU 212HC82590 EQU 220HC82591 EQU 221HC8279 EQU 232HD8279 EQU 230Htime0 EQU 1000time1 EQU 307CODE SEGMENTASSUME CS:CODESTART: JMP Ytimer0 DB 2,0,1,3,5,9timer1 DB

24、7 DUP(0)pad DB 0tabDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;09Y: ;初始化各芯片MOV AX,8100H MOV DS,AX CLICALL i8279CALL i8259CALL i8253CALL i8255STIbig_lp:MOV DX,202H;讀8255 C口IN AL,DXCMP AL,01H;判斷是什么模式JE mode1CALL display0;時間模式,顯示時間JMP big_lpmode1:CALL display1;秒表模式,顯示秒表JMP big_lpi8253: ;210,211,212,213分別

25、為:計數(shù)器0/計數(shù)器1/計數(shù)器2/控制端口;CPU時鐘頻率為307200HZ;初始化計數(shù)器1,先送低八位,后送高八位,工作方式3,二進(jìn)制計數(shù)MOV DX,C8253MOV AL,76HOUT DX,AL;使OUT1產(chǎn)生周期為1ms的方波MOV DX,D82531MOV AX,time1OUT DX,ALMOV AL,AHOUT DX,AL;初始化計數(shù)器0,先送低八位,后送高八位,工作方式3,二進(jìn)制計數(shù)MOV DX,C8253MOV AL,36HOUT DX,AL;CLK0接OUT1,OUT0產(chǎn)生周期為1s的方波MOV DX,D82530MOV AX,time0OUT DX,ALMOV AL,A

26、HOUT DX,ALPOP BX POP CX POP DX POP AXRETi8259: ;端口地址為220H和221H;ICW1,上升沿觸發(fā),單片,寫ICW4 PUSH AX PUSH DX PUSH CX PUSH BXMOV DX,C82590MOV AL,13H;(00010011)OUT DX,AL;ICW2,中斷類型號為30H,31H,32HMOV DX,C82591MOV AL,30HOUT DX,AL;ICW4,正常EOI,8086/8088系統(tǒng)MOV AL,01HOUT DX,AL PUSH DS MOV AX,0 MOV DS,AX MOV BX,30H*4MOV AX

27、,OFFSET int_timer0MOV DS:BX,AXMOV AX,CSMOV BX,30H*4+2MOV DS:BX,AXMOV BX,31H*4MOV AX,OFFSET int_timer1MOV DS:BX,AXMOV AX,CSMOV BX,31H*4+2MOV DS:BX,AXMOV BX,32H*4MOV AX,OFFSET int_padMOV DS:BX,AXMOV AX,CSMOV BX,32H*4+2MOV DS:BX,AXPOP DSPOP BX POP CX POP DX POP AXRETi8279: ;數(shù)據(jù)端口230H,控制端口232H;清除顯示和顯示寄存器

28、MOV DX,C8279MOV AL,0D2HOUT DX,AL;鍵盤顯示命令,八個字符顯示,左端輸入方式MOV AL,0OUT DX,ALRETi8255: ;200,201,202,203分別為:A口/B口/C口/控制端口;只用到PC0,輸入MOV DX,C8255MOV AL,9BHOUT DX,ALRETint_timer0 PROC;1秒產(chǎn)生一次中斷,每次中斷時間加1秒 PUSH AX PUSH DX PUSH CX PUSH BX PUSH DILEA DI,timer0MOV BL,BYTE PTRDI+5CMP BL,9JE c0;有進(jìn)位INC BL;1s位加1MOV BYTE

29、 PTRDI+5,BLJMP addend0 c0: MOV BYTE PTRDI+5,0MOV BL,BYTE PTRDI+4;處理下一位CMP BL,5JE c1;有進(jìn)位INC BL;10s位加1MOV BYTE PTRDI+4,BLJMP addend0 c1: MOV BYTE PTRDI+4,0MOV BL,BYTE PTRDI+3;處理下一位CMP BL,9JE c2;有進(jìn)位INC BL;1min位加1MOV BYTE PTRDI+3,BLJMP addend0 c2: MOV BYTE PTRDI+3,0MOV BL,BYTE PTRDI+2;處理下一位CMP BL,5JE c3

30、;有進(jìn)位INC BL;10min位加1MOV BYTE PTRDI+2,BLJMP addend0 c3: MOV BYTE PTRDI+2,0MOV BL,BYTE PTRDI+1MOV BH,BYTE PTRDI;CMP BH,2JNE c4CMP BL,3JE c5;23h的情況INC BL;21h位加1MOV BYTE PTRDI+1,BLJMP addend0 c5: MOV BYTE PTRDI,0;新的一天MOV BYTE PTRDI+1,0JMP addend0 c4:CMP BL,9JE c6;有進(jìn)位INC BL;01h位加1MOV BYTE PTRDI+1,BLJMP ad

31、dend0 c6: INC BHMOV BYTE PTRDI,BH;10h位加1JMP addend0addend0:MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRETint_timer0 ENDPdisplay0:;顯示時間PUSH DILEA BX,tabMOV AL,90H MOV DX,232H OUT DX,ALMOV DX,D8279LEA DI,timer0MOV AL,BYTE PTRDI+5XLATOUT DX,ALMOV AL,BYTE PTRDI+4XLATOUT DX,ALMOV A

32、L,40HOUT DX,ALMOV AL,BYTE PTRDI+3XLATOUT DX,ALMOV AL,BYTE PTRDI+2XLATOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,BYTE PTRDI+1XLATOUT DX,ALMOV AL,BYTE PTRDIXLATOUT DX,ALPOP DIRETint_timer1 PROC PUSH AX PUSH DX PUSH CX PUSH BX PUSH DI MOV BL,pad CMP BL,0;復(fù)位 JE t0 CMP BL,1;第一次按鍵 JE t1;第二次按鍵MOV AL,20HMOV DX,C825

33、90OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRET t0:;初始狀態(tài)或第三次按鍵,秒表歸零LEA DI,timer1 MOV BYTE PTRDI,0MOV BYTE PTRDI+1,0MOV BYTE PTRDI+2,0MOV BYTE PTRDI+3,0MOV BYTE PTRDI+4,0MOV BYTE PTRDI+5,0MOV BYTE PTRDI+6,0MOV AL,20HMOV DX,C82590OUT DX,ALPOP DIPOP BX POP CX POP DX POP AXIRET t1:;第一次按鍵,開始計時或增加1毫秒LEA

34、DI,timer1MOV BL,BYTE PTRDI+6CMP BL,9JE r0;有進(jìn)位INC BL;0.001s位加1MOV BYTE PTRDI+6,BLJMP addend r0:MOV BYTE PTRDI+6,0;上一位清零MOV BL,BYTE PTRDI+5;處理下一位CMP BL,9JE r1;有進(jìn)位INC BL;0.01s位加1MOV BYTE PTRDI+5,BLJMP addend r1:MOV BYTE PTRDI+5,0MOV BL,BYTE PTRDI+4;處理下一位CMP BL,9JE r2;有進(jìn)位INC BL;0.1s位加1MOV BYTE PTRDI+4,B

35、LJMP addend r2: MOV BYTE PTRDI+4,0MOV BL,BYTE PTRDI+3;處理下一位CMP BL,9JE r3;有進(jìn)位INC BL;1s位加1MOV BYTE PTRDI+3,BLJMP addend r3: MOV BYTE PTRDI+3,0MOV BL,BYTE PTRDI+2;處理下一位CMP BL,5JE r4;有進(jìn)位INC BL;10s位加1MOV BYTE PTRDI+2,BLJMP addend r4: MOV BYTE PTRDI+2,0MOV BL,BYTE PTRDI+1;處理下一位CMP BL,9JE r5;有進(jìn)位INC BL;1min位加1MOV BYTE PTRDI+1,BLJMP addend r5: MOV BYTE PTRDI+1,0MOV BL,BYTE PTRDI;處理下一位CMP BL,5JE addend;有進(jìn)位,但已經(jīng)超出了可表示的范圍INC BL;1min位加1MOV BYTE PTRDI,BLaddend

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論