版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南文理學(xué)院芙蓉學(xué)院 微機(jī)原理課程設(shè)計(jì)報(bào)告微機(jī)原理課程設(shè)計(jì)報(bào)告 課程名稱: 電子秒表 專業(yè)班級(jí): 學(xué)生學(xué)號(hào): 學(xué)生姓名: 指導(dǎo)教師: 完成時(shí)間: 評(píng)閱意見: 評(píng)定成績(jī): 評(píng)閱教師 日期 目目 錄錄 第第 1 章章 總體設(shè)計(jì)方案總體設(shè)計(jì)方案.1 1.1 課程設(shè)計(jì)的內(nèi)容和要求.1 1.2 課程設(shè)計(jì)原理.1 1.3 課程設(shè)計(jì)思路.2 1.4 設(shè)計(jì)環(huán)境.2 第第 2 章章 詳細(xì)設(shè)計(jì)方案詳細(xì)設(shè)計(jì)方案.3 2.1 實(shí)現(xiàn)方法.3 2.2 模塊的設(shè)計(jì)與實(shí)現(xiàn).4 2.2.1 主程序模塊.4 2.2.2 初始化模塊.5 2.2.3 時(shí)鐘模塊.6 2.2.4 秒表模塊.6 2.3 程序連線圖.8 第第 3 章章 調(diào)
2、試及結(jié)果分析調(diào)試及結(jié)果分析.9 3.1 調(diào)試步驟及方法.9 3.1.1 程序的語法錯(cuò)誤.9 3.1.2 時(shí)鐘模塊調(diào)試過程.9 3.1.3 秒表模塊調(diào)試過程.11 3.2 實(shí)驗(yàn)結(jié)果.11 參考文獻(xiàn)參考文獻(xiàn).13 附附 錄(源程序)錄(源程序).14 第 1 章 總體設(shè)計(jì)方案 1.1 課程設(shè)計(jì)的內(nèi)容和要求課程設(shè)計(jì)的內(nèi)容和要求 一、課程設(shè)計(jì)內(nèi)容: 設(shè)計(jì)一個(gè)帶時(shí)間顯示的電子秒表,具體內(nèi)容如下: 1.電子秒表的初始狀態(tài)為零,分別顯示分、秒、毫秒; 2.設(shè)計(jì)一個(gè)按鈕,按第一次開始計(jì)時(shí),按第二次計(jì)時(shí)暫停,顯示當(dāng)前記錄 的時(shí)間,按第三次計(jì)時(shí)停止,回到初始態(tài); 3.有時(shí)間顯示的功能,當(dāng)不用電子秒表的功能時(shí),顯示
3、當(dāng)先的時(shí)間,分別 為時(shí)、分、秒形式。 二、課程設(shè)計(jì)要求: 1. 獨(dú)立完成課程設(shè)計(jì)任務(wù); 2. 通過老師當(dāng)場(chǎng)驗(yàn)收; 3. 交出完整的課程設(shè)計(jì)報(bào)告。 1.2 課程設(shè)計(jì)原理課程設(shè)計(jì)原理 題目要求實(shí)現(xiàn)電子秒表功能和顯示當(dāng)前時(shí)間的功能。這兩部分的共同點(diǎn)是都 需要實(shí)現(xiàn)時(shí)間顯示和時(shí)間運(yùn)行功能。除此之外,電子秒表還需要有開始計(jì)時(shí)和停 止計(jì)時(shí)功能。因此電子秒表是本次課程設(shè)計(jì)的主要部分。 在本次設(shè)計(jì)中主要使用了 8255a 并行接口芯片,8253 定時(shí)/計(jì)數(shù)器,8259a 中斷控制器,8279 鍵盤/顯示芯片。具體原理和功能如下: 1. 利用 8255a 芯片實(shí)現(xiàn)時(shí)鐘和秒表之間的切換。將其連接到一個(gè)開關(guān)上, 讀取
4、開關(guān)的電位,以此來判斷是時(shí)鐘模式還是秒表模式。 2. 利用 8253 芯片計(jì)時(shí)。用 8253 的分頻功能使其產(chǎn)生周期為 1s 和 1ms 的方 波,分別為時(shí)鐘和秒表計(jì)時(shí)。 3. 利用 8259a 芯片接收中斷。中斷分為三種類型,分別是一秒一次的時(shí)鐘 計(jì)時(shí)中斷,一毫秒一次的秒表計(jì)時(shí)中斷和控制秒表開始和停止的中斷。 4. 利用 8279 芯片在數(shù)碼管上顯示當(dāng)前時(shí)間或秒表時(shí)間。 1.3 課程設(shè)計(jì)思路課程設(shè)計(jì)思路 由于要求實(shí)現(xiàn)時(shí)鐘和秒表兩種功能。因此需要設(shè)計(jì)時(shí)鐘和秒表兩個(gè)模式。 時(shí)鐘模式下,以秒為計(jì)時(shí)單位,計(jì)時(shí)功能和顯示當(dāng)前時(shí)間功能。秒表模式下, 以毫秒為計(jì)時(shí)單位,有開始、停止和顯示計(jì)時(shí)結(jié)果的功能。
5、首先,將 8255a 芯片的 pc0 接口連接到開關(guān)。讀 c 端口的值。判斷是 0 還是 1。0 代表時(shí)鐘模式,1 代表秒表模式。然后,根據(jù)判斷結(jié)果調(diào)用相應(yīng)模式下的顯 示功能。這樣不停地讀 8255a 芯片,然后判斷,最后顯示。構(gòu)成一個(gè)死循環(huán)。若 在這個(gè)過程中有中斷,則會(huì)執(zhí)行中斷服務(wù)程序。 時(shí)間中斷由 8253 芯片產(chǎn)生,周期分別為 1s 和 1ms。時(shí)鐘的最大時(shí)間為 23 時(shí) 59 分 59 秒,超過后從零開始重新計(jì)時(shí)。秒表最大時(shí)間為 59 分 59 秒 999 毫秒。 當(dāng)計(jì)數(shù)大于這個(gè)值時(shí),秒表不再更新。 對(duì)秒表的控制中斷由一個(gè)手動(dòng)脈沖產(chǎn)生。將按鍵次數(shù)保存在名為 pad 的內(nèi)存 空間中。pa
6、d 只能有 0、1、2 三個(gè)值,分別代表清零、開始計(jì)時(shí)和停止計(jì)時(shí)。 8259 芯片接收中斷,并調(diào)用相應(yīng)模式下的中斷服務(wù)程序。在時(shí)鐘模式下,直 接將時(shí)間加一秒。在秒表模式下,或清零(重新開始,pad=0) ,或?qū)r(shí)間加一毫 秒(開始計(jì)時(shí),pad=1) ,或不做任何處理(停止計(jì)時(shí),pad=2) 。 要實(shí)現(xiàn)以上分析的功能,可以設(shè)計(jì) 4 個(gè)模塊。模塊名和作用見表 1.1。 表表 1.1 模塊劃分及功能描述模塊劃分及功能描述 模塊名稱功能 主程序模塊調(diào)用初始化模塊,判斷時(shí)間模式,調(diào)用相應(yīng)的顯示函數(shù) 初始化模塊初始化各芯片,裝入中斷向量 時(shí)鐘模塊實(shí)現(xiàn)時(shí)鐘計(jì)時(shí)和顯示功能 秒表模塊實(shí)現(xiàn)秒表的計(jì)時(shí)、顯示和控制功
7、能 1.4 設(shè)計(jì)環(huán)境設(shè)計(jì)環(huán)境 硬件環(huán)境:aedk 實(shí)驗(yàn)箱 軟件環(huán)境:lct88ea 應(yīng)用軟件、windowxp 操作系統(tǒng)、pc 機(jī) 第 2 章 詳細(xì)設(shè)計(jì)方案 2.1 實(shí)現(xiàn)方法實(shí)現(xiàn)方法 1.內(nèi)存分配 程序中所需定義的內(nèi)存單元含義如下: timer0:存放當(dāng)前時(shí)鐘的值,共 6 個(gè)字節(jié)。時(shí)、分、秒各占兩個(gè)字節(jié); timer1:存放秒表的計(jì)數(shù)值,共 7 個(gè)字節(jié)。分和秒各占兩個(gè)字節(jié),毫秒占三 個(gè)字節(jié); pad:存放秒表的按鍵次數(shù),共 1 個(gè)字節(jié)。可以有三種取值,0 代表清零,1 代表開始計(jì)時(shí),2 代表停止計(jì)時(shí)。當(dāng)計(jì)數(shù)值大于 2 時(shí),變?yōu)?0 重新開始計(jì)數(shù); tab:存放 09 在數(shù)碼管上顯示的編碼,共
8、10 個(gè)字節(jié)。 2.按鍵設(shè)置 秒表有一個(gè)按鈕,接手動(dòng)脈沖和 8259a 芯片的中斷引腳。每次按鍵,pad 都 做相應(yīng)改變。按第一次開始計(jì)時(shí)(pad=1) ,按第二次計(jì)時(shí)暫停(pad=2) ,顯示當(dāng) 前記錄的時(shí)間,按第三次計(jì)時(shí)停止(pad=0) ,回到初始態(tài)。 3.時(shí)鐘頻率選擇 cpu 的頻率為。用 8253 芯片產(chǎn)生方波。計(jì)數(shù)器 1 的接hz 5 103.072 1 clk cpu 時(shí)鐘脈沖,計(jì)數(shù)初值為 307,使產(chǎn)生周期為 1ms 的方波。計(jì)數(shù)器 0 的 0 out 接,計(jì)數(shù)初值為 1000,使產(chǎn)生周期為 1s 的方波。 0 clk 1 out 0 out 4.中斷設(shè)置 8259a 芯片的中
9、斷引腳、分別接 8253 芯片的、和 0 ir 1 ir 2 ir 0 out 1 out 手動(dòng)脈沖。 5.顯示設(shè)置 顯示功能由 8279 芯片和數(shù)碼管實(shí)現(xiàn)。顯示分為兩種情況。時(shí)鐘模式下的顯 示規(guī)則是(時(shí)-分-秒) ,即(00-00-00) 。秒表模式下的顯示規(guī)則是(分-秒.毫秒) , 即(00-00.000) 。 6.端口地址分配 本次課程設(shè)計(jì)共使用了 4 種芯片,他們的端口號(hào)設(shè)置如表 2.1 所示。 表表 2.1 端口地址分配表端口地址分配表 芯片名稱端口號(hào)含義 8255a200h203ha 端口、b 端口、c 端口、控制端口 8253210h213h計(jì)數(shù)器 0、計(jì)數(shù)器 1、計(jì)數(shù)器 2、控
10、制端口 8259a220h221h偶地址端口、奇地址端口 8279230h、232h數(shù)據(jù)端口、控制端口 7.子程序 子程序名稱和功能如表 2.2 所示。 表表 2.2 子函數(shù)表子函數(shù)表 名稱作用名稱作用 i8255初始化 8255a 芯片i8253初始化 8253 芯片 i8259初始化 8259a 芯片,裝中斷向 量 i8279初始化 8279 芯片 int_timer0時(shí)鐘中斷服務(wù)程序display0顯示時(shí)鐘 int_timer1秒表中斷服務(wù)程序display1顯示秒表 int_pad更改按鍵次數(shù) 2.2 模塊的設(shè)計(jì)與實(shí)現(xiàn)模塊的設(shè)計(jì)與實(shí)現(xiàn) 2.2.1 主程序模塊主程序模塊 主程序的主要功能
11、是初始化各芯片,模式選擇以及調(diào)用顯示函數(shù)。在初始化 結(jié)束后,程序進(jìn)入死循環(huán),不斷檢測(cè) 8255a 芯片 c 端口的狀態(tài),cup 隨時(shí)響應(yīng) 中斷,更新時(shí)鐘狀態(tài),把應(yīng)顯示的結(jié)果送入 time0 和 time1 中,以備顯示。 主程序的流程如圖 2.1。 開始 設(shè)置數(shù)據(jù)段 關(guān)中斷 初始化各芯片 開中斷 讀 8255a 芯片的 c 端口值 pc=0 調(diào)用 display0,顯示時(shí)鐘調(diào)用 display1,顯示秒表 是否 圖圖 2.1 主程序流程圖主程序流程圖 2.2.2 初始化模塊初始化模塊 初始化模塊主要用于初始化各芯片,設(shè)定芯片工作方式,以及裝入中斷向量 等。各芯片初始化情況如表 2.3 所示。
12、表表 2.3 芯片的初始化芯片的初始化 芯片名稱初始化 8255ac 口低四位輸入,控制字 9bh 8253計(jì)數(shù)器 1:先送低八位,后高八位,工作方式 3,二進(jìn)制計(jì)數(shù),計(jì)數(shù) 初值 307; 計(jì)數(shù)器 0:先送低八位,后高八位,工作方式 3,二進(jìn)制計(jì)數(shù),計(jì)數(shù) 初值 1000 8259aicw1:上升沿觸發(fā),單片,寫 icw4,控制字 13h; icw2:中斷類型號(hào) 30h,控制字 30h; icw4:正常 eoi,8086/8088 系統(tǒng),控制字 01h; 中斷向量:中斷類型號(hào) 30h、31h、32h 對(duì)應(yīng)的中斷服務(wù)程序?yàn)?int_timer0、int_timer1、int_pad 8279清除顯
13、示和顯示寄存器,控制字 0d2h; 鍵盤顯示命令,八個(gè)字符顯示,左端輸入方式,控制字 00h 2.2.3 時(shí)鐘模塊時(shí)鐘模塊 時(shí)鐘模塊主要是為了實(shí)現(xiàn)時(shí)鐘的計(jì)時(shí)和顯示功能。時(shí)鐘的計(jì)時(shí)功能由 int_timer0 子程序?qū)崿F(xiàn),屬于中斷服務(wù)程序。顯示功能由 display0 程序?qū)崿F(xiàn),由主 程序調(diào)用。 1.int_timer0 這個(gè)中斷服務(wù)程序的中斷類型號(hào)為 30h。8253 芯片產(chǎn)生周期為 1s 的方波, 當(dāng)其上升沿到達(dá) 8259a 芯片的引腳后,進(jìn)入中斷服務(wù)程序 int_timer0。 0 ir 進(jìn)入 int_timer0 后,首先從內(nèi)存中讀出前一秒的時(shí)間的最后一位,即 time0 的最后一位,然
14、后加 1。若有進(jìn)位,則把當(dāng)前這一位置零,然后讀出前一位再加 一,再判斷是否有進(jìn)位。以此類推,直到?jīng)]有進(jìn)位或者達(dá)到計(jì)數(shù)最大值為止。把 修改后的時(shí)間存回內(nèi)存中,以備顯示。 2.display0 這是時(shí)鐘模式的顯示程序。在時(shí)鐘模式下會(huì)反復(fù)被主程序調(diào)用。首先設(shè)置 8279a 芯片的顯示方式。然后讀取 time0 的最后一位,用 xlat 命令查 tab 表, 將得到的結(jié)果輸出到 8279a 芯片,然后在數(shù)碼管上顯示。每顯示兩位數(shù)字,就在 中間顯示一條橫線以分隔時(shí)分秒。 2.2.4 秒表模塊秒表模塊 與時(shí)鐘模式類似,秒表模式也需要計(jì)時(shí)和顯示功能。除此之外,秒表模式還 需要有按鍵控制功能用于開始、暫停計(jì)時(shí)
15、和清零。 計(jì)時(shí)功能由 int_timer1 實(shí)現(xiàn),屬于中斷服務(wù)程序。顯示功能由 display1 子程 序?qū)崿F(xiàn)。按鍵功能由 int_pad 實(shí)現(xiàn),屬于中斷服務(wù)程序。 1.int_timer1 這個(gè)中斷服務(wù)程序的中斷類型號(hào)為 31h。8253 芯片產(chǎn)生周期為 1ms 的方波, 當(dāng)其上升沿到達(dá) 8259 芯片的引腳后,進(jìn)入中斷服務(wù)程序 int_timer1。 1 ir 進(jìn)入 int_timer1 后,首先從內(nèi)存 pad 中讀出按鍵次數(shù)。 若 pad 中的值為 2,說明現(xiàn)在秒表處于停止?fàn)顟B(tài),計(jì)時(shí)停止,不將秒表的計(jì) 時(shí)值刷新,所以直接中斷返回。 若 pad 中的值為 1,說明秒表正在計(jì)時(shí),應(yīng)將秒表的計(jì)
16、時(shí)值加 1ms。加 1 的 方法與時(shí)鐘加 1 的方法類似。先讀出 time1 的最低位,加 1 后判斷進(jìn)位。最后中 斷返回。 若 pad 中的值為 0,說明秒表要重新開始計(jì)時(shí),需要將秒表清零。即把 time0 中的每一位都改為零。最后中斷返回。 2.display1 這是秒表模式的顯示程序,在秒表模式下會(huì)反復(fù)被主程序調(diào)用。顯示方法與 display1 類似。不同的是,秒表的顯示格式是 00-00.000,即在顯示秒的最后一位 時(shí),需要加一個(gè)小數(shù)點(diǎn)。實(shí)現(xiàn)的方法是,先將這一位查表轉(zhuǎn)化為可在數(shù)碼管上的 編碼,由于數(shù)碼管是否顯示小數(shù)點(diǎn)是由編碼的最高位指示的,所以只需將編碼和 80h 進(jìn)行或運(yùn)算即可添加
17、小數(shù)點(diǎn)。最后將結(jié)果輸出到數(shù)碼管顯示。 3.int_pad 這個(gè)中斷服務(wù)程序的中斷類型號(hào)為 32h。當(dāng)手動(dòng)脈沖被按下的時(shí)候,進(jìn)入這 個(gè)中斷服務(wù)程序。將 pad 中的值加 1。pad 中的初始值為 0,當(dāng)加到 3 時(shí),將其變 為 0。 2.3 程序連線圖程序連線圖 cs=210h 8253 out1 clk0 out0 cs=220h 8259a ir1 ir0 ir3 手動(dòng)脈沖 8279 cs=230h 數(shù)碼管 clk1 cpu 時(shí)鐘脈沖 hz 5 103.072 8255a pc0 cs=210h 開關(guān) 圖圖 2.2 程序連線圖程序連線圖 第 3 章 調(diào)試及結(jié)果分析 3.1 調(diào)試步驟及方法調(diào)試
18、步驟及方法 由于程序比較大,要整體調(diào)試會(huì)非常困難,不容易找出哪里有問題。所以必 須分而治之,將程序拆分開來調(diào)試。由于整個(gè)程序被化分為了幾個(gè)模塊,所以, 調(diào)試可以按模塊來進(jìn)行。 我將調(diào)試分為時(shí)鐘模塊和秒表模塊。因?yàn)闀r(shí)鐘模塊相對(duì)簡(jiǎn)單,所以先調(diào)試時(shí) 鐘模塊,后調(diào)試秒表模塊。 3.1.1 程序的語法錯(cuò)誤程序的語法錯(cuò)誤 由于對(duì)匯編語言還不熟悉,所以出現(xiàn)了較多的語法錯(cuò)誤。主要錯(cuò)誤有以下 一些。 程序格式錯(cuò)誤。例如,子程序最后應(yīng)寫 ret。 寄存器尋址方式錯(cuò)誤。例如,在裝中斷向量的時(shí)候,應(yīng)該是寄存器間接尋 址,要加中括號(hào)。 跳轉(zhuǎn)錯(cuò)誤。跳轉(zhuǎn)的最大值不能超過一定的限度。而且跳轉(zhuǎn)的標(biāo)號(hào)不能重復(fù)。 寫地址錯(cuò)。例如,
19、在向某個(gè)端口送數(shù)據(jù)的時(shí)候,不能直接寫地址,而必須 將端口地址放入寄存器 dx 中,再送數(shù)據(jù)。 3.1.2 時(shí)鐘模塊調(diào)試過程時(shí)鐘模塊調(diào)試過程 時(shí)鐘模塊又分為顯示模塊和計(jì)數(shù)模塊。先調(diào)試顯示模塊,再調(diào)試計(jì)數(shù)模塊。 1. 顯示模塊調(diào)試中的問題及解決方案 問題 1:數(shù)碼管沒有任何反應(yīng) 問題分析:在初始化 8279 時(shí),數(shù)碼管就應(yīng)該被清除顯示,即會(huì)不顯示任何 東西,但是先在數(shù)碼管上的數(shù)并沒有被清除,說明了可能是 8279 工作錯(cuò)誤。檢查程序后發(fā)現(xiàn),8279 的控制端口是 231h,但是正 確的應(yīng)該為 232h。 解決方案:將控制端口號(hào)改為 232h。 問題 2:數(shù)碼管顯示亂碼 問題分析:8279 在初始化
20、時(shí)已經(jīng)清除了顯示,但是還是顯示亂碼,說明是后 送入的數(shù)有錯(cuò)。 解決方案:檢查程序后發(fā)現(xiàn),在初始化各芯片的時(shí)候沒有關(guān)中斷和開中斷, 8259a 可能錯(cuò)誤的響應(yīng)的中斷。 問題 3:顯示順序顛倒 問題分析:由于設(shè)置的是從左到右的八位顯示,所以應(yīng)該是送顯示數(shù)的順序 不對(duì)。 解決方案:將 display0 中的送顯順序顛倒。 2.計(jì)數(shù)模塊調(diào)試中的問題及解決方案 問題 1:數(shù)碼管顯示結(jié)果一直為初始值 問題分析:可能的原因是 8253 芯片沒有產(chǎn)生方波或是 8259a 芯片沒有響應(yīng) 中斷。 解決方案:將 8259a 和 8253 斷開,然后將手動(dòng)脈沖接到 8259a 的中斷 0 ir 引腳。用手動(dòng)脈沖來產(chǎn)生
21、中斷。結(jié)果顯示沒有任何改變,說明中 斷有問題。 問題 2:中斷響應(yīng)問題,當(dāng)接手動(dòng)脈沖時(shí),8259a 的表現(xiàn)是不響應(yīng)中斷,時(shí) 鐘值不增加。 問題分析:檢查中斷向量裝入是否正確,再檢查中斷服務(wù)程序。最后發(fā)現(xiàn)是 中斷服務(wù)程序有錯(cuò)。在使用各寄存器之前,沒有對(duì)其進(jìn)行相應(yīng)的 保護(hù),導(dǎo)致結(jié)果異常。 解決方案:int_timer0 開始時(shí)將 ax/bx/cx/dx 分別壓入棧中,在程序結(jié)束時(shí) 彈出。 問題 3:將 8253 和 8259a 相連后,只能響應(yīng)一次中斷。 問題分析:在中斷沒有錯(cuò)誤的情況下,只能是 8253 出錯(cuò)。8259a 響應(yīng)了一 次中斷是因?yàn)?8253 在啟動(dòng)時(shí),會(huì)從低電平變?yōu)楦唠娖健T谶@個(gè)
22、上升沿,8259a 響應(yīng)了中斷,將時(shí)鐘加 1。但后來就沒有響應(yīng)中 斷。再將 8253 接到 led 燈上,發(fā)現(xiàn)其一直不亮,說明 8253 產(chǎn) 生的波有錯(cuò)誤。檢查 8253 的初始化后發(fā)現(xiàn)是送的計(jì)數(shù)初值和送 數(shù)的方式都有錯(cuò)。 解決方案:將計(jì)數(shù)初值和送數(shù)方式改正。 問題 4:時(shí)鐘顯示錯(cuò)位 問題分析:在只送初值的情況下,顯示沒有問題,但當(dāng)時(shí)鐘增加的時(shí)候,顯 示會(huì)錯(cuò)位。 解決方案:改變顯示方式在顯示之前將顯示方式寫為 90h 3.1.3 秒表模塊調(diào)試過程秒表模塊調(diào)試過程 在時(shí)鐘模塊被調(diào)試完后,秒表模塊就更容易調(diào)試了,因?yàn)閮蓚€(gè)模式的顯示和 計(jì)時(shí)都大同小異。因此,調(diào)試過程中的主要問題出在秒表的控制上。 問
23、題 1:按控制按鈕秒表沒有反應(yīng) 問題分析:可能是控制信號(hào)沒有得到響應(yīng),檢查程序發(fā)現(xiàn),int_pad 的中斷類 型號(hào)裝入有錯(cuò)。 解決方案:將中斷類型好改正后問題解決了。 問題 2:在秒表模式下開始計(jì)后,若切換到時(shí)鐘模式,則顯示會(huì)發(fā)生錯(cuò)誤。 問題分析:肯能是兩個(gè)模式有沖突的地方。經(jīng)過檢查程序發(fā)現(xiàn),可能是因?yàn)?沒有保護(hù)寄存器的原因。 解決方案:int_timer1 開始時(shí)將 ax/bx/cx/dx 分別壓入棧中,在程序結(jié)束時(shí) 彈出。 問題 3:時(shí)鐘模擬計(jì)時(shí)誤差大。在時(shí)鐘計(jì)時(shí)顯示的時(shí)候,有時(shí)會(huì)停頓有時(shí)又 加的比較快。 問題分析:可能是因?yàn)?cpu 響應(yīng)中斷需要一定的時(shí)間,也可能是程序安排 不恰當(dāng) 解決
24、方案:優(yōu)化程序的結(jié)構(gòu),適當(dāng)改變 8253 的計(jì)數(shù)初值。 3.2 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果 本程序能夠滿足題目的所有要求,其測(cè)試結(jié)果如下: 1. 將開關(guān)置于低電平,進(jìn)入時(shí)鐘模式。數(shù)碼管顯示當(dāng)前時(shí)間,并每秒加 1。 2. 將開關(guān)置于高電平,進(jìn)入秒表模式。數(shù)碼管顯示計(jì)數(shù)初值。 3. 在秒表模式下,按一下秒表控制按鈕,開始計(jì)時(shí),數(shù)碼管不斷刷新秒表計(jì)時(shí)。 4. 在秒表開始計(jì)數(shù)后,切換到時(shí)鐘模式,時(shí)鐘仍然在正常計(jì)時(shí)。 5.切換回秒表模式下第二次按下按鈕,計(jì)時(shí)停止,顯示最后計(jì)時(shí)結(jié)果。 6. 在秒表模式下第三次按下按鈕,計(jì)時(shí)停止,結(jié)果清零。 7. 將時(shí)鐘的初值設(shè)定為 23 時(shí) 59 分 40 秒,30 秒后觀察結(jié)果。
25、 8. 將秒表的初值設(shè)定為 59 分 40 秒 000 毫秒,30 秒后觀察結(jié)果。 20-13-59 00-00.000 00-00.198 20-14-11 00-51.715 00-00.000 00-00-10 59-59.999 參考文獻(xiàn) 1 龔尚福.微機(jī)原理與接口技術(shù)m.西安:西安電子科技大學(xué)出版社,2003 2 王忠民.微型計(jì)算機(jī)原理m. 西安:西安電子科技大學(xué)出版社,2003 3 沈美明,溫冬嬋.ibm-pc 匯編語言程序設(shè)計(jì)m.北京:清華大學(xué)出版社, 2001 4 鄭初華.匯編語言、微機(jī)原理及接口技術(shù)m. 西安:西安電子科技大學(xué)出 版社,2003 5 仇玉章.32 位微型計(jì)算機(jī)
26、原理與接口技術(shù)m. 北京:清華大學(xué)出版社, 2000 6 王富榮.微機(jī)原理與匯編語言實(shí)用教程m. 北京:清華大學(xué)出版社,2009 7 白中英.計(jì)算機(jī)組成原理m. 北京:科學(xué)出版社,2000 8 羅云彬. windows 環(huán)境下 32 位匯編語言程序設(shè)計(jì)m. 北京:電子工業(yè)出版 社,2002 附 錄(源程序) c8255 equ 203h d8255c equ 202h c8253 equ 213h d82530 equ 210h d82531 equ 211h d82532 equ 212h c82590 equ 220h c82591 equ 221h c8279 equ 232h d827
27、9 equ 230h time0 equ 1000 time1 equ 307 code segment assume cs:code start: jmp y timer0 db 2,0,1,3,5,9 timer1 db 7 dup(0) pad db 0 tab db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;09 y: ;初始化各芯片 mov ax,8100h mov ds,ax cli call i8279 call i8259 call i8253 call i8255 sti big_lp:mov dx,202h;讀 8255 c 口 in
28、al,dx cmp al,01h ;判斷是什么模式 je mode1 call display0;時(shí)間模式,顯示時(shí)間 jmp big_lp mode1:call display1;秒表模式,顯示秒表 jmp big_lp i8253: ;210,211,212,213 分別為:計(jì)數(shù)器 0/計(jì)數(shù)器 1/計(jì)數(shù)器 2/控制端口 ;cpu 時(shí)鐘頻率為 307200hz ;初始化計(jì)數(shù)器 1,先送低八位,后送高八位,工作方式 3,二進(jìn)制計(jì)數(shù) mov dx,c8253 mov al,76h out dx,al ;使 out1 產(chǎn)生周期為 1ms 的方波 mov dx,d82531 mov ax,time1
29、out dx,al mov al,ah out dx,al ;初始化計(jì)數(shù)器 0,先送低八位,后送高八位,工作方式 3,二進(jìn)制計(jì)數(shù) mov dx,c8253 mov al,36h out dx,al ;clk0 接 out1,out0 產(chǎn)生周期為 1s 的方波 mov dx,d82530 mov ax,time0 out dx,al mov al,ah out dx,al pop bx pop cx pop dx pop ax ret i8259: ;端口地址為 220h 和 221h ;icw1,上升沿觸發(fā),單片,寫 icw4 push ax push dx push cx push bx m
30、ov dx,c82590 mov al,13h;(00010011) out dx,al ;icw2,中斷類型號(hào)為 30h,31h,32h mov dx,c82591 mov al,30h out dx,al ;icw4,正常 eoi,8086/8088 系統(tǒng) mov al,01h out dx,al push ds mov ax,0 mov ds,ax mov bx,30h*4 mov ax,offset int_timer0 mov ds:bx,ax mov ax,cs mov bx,30h*4+2 mov ds:bx,ax mov bx,31h*4 mov ax,offset int_t
31、imer1 mov ds:bx,ax mov ax,cs mov bx,31h*4+2 mov ds:bx,ax mov bx,32h*4 mov ax,offset int_pad mov ds:bx,ax mov ax,cs mov bx,32h*4+2 mov ds:bx,ax pop ds pop bx pop cx pop dx pop ax ret i8279: ;數(shù)據(jù)端口 230h,控制端口 232h ;清除顯示和顯示寄存器 mov dx,c8279 mov al,0d2h out dx,al ;鍵盤顯示命令,八個(gè)字符顯示,左端輸入方式 mov al,0 out dx,al re
32、t i8255: ;200,201,202,203 分別為:a 口/b 口/c 口/控制端口 ;只用到 pc0,輸入 mov dx,c8255 mov al,9bh out dx,al ret int_timer0 proc ;1 秒產(chǎn)生一次中斷,每次中斷時(shí)間加 1 秒 push ax push dx push cx push bx push di lea di,timer0 mov bl,byte ptrdi+5 cmp bl,9 je c0;有進(jìn)位 inc bl;1s 位加 1 mov byte ptrdi+5,bl jmp addend0 c0: mov byte ptrdi+5,0 m
33、ov bl,byte ptrdi+4;處理下一位 cmp bl,5 je c1;有進(jìn)位 inc bl;10s 位加 1 mov byte ptrdi+4,bl jmp addend0 c1: mov byte ptrdi+4,0 mov bl,byte ptrdi+3;處理下一位 cmp bl,9 je c2;有進(jìn)位 inc bl;1min 位加 1 mov byte ptrdi+3,bl jmp addend0 c2: mov byte ptrdi+3,0 mov bl,byte ptrdi+2;處理下一位 cmp bl,5 je c3;有進(jìn)位 inc bl;10min 位加 1 mov b
34、yte ptrdi+2,bl jmp addend0 c3: mov byte ptrdi+2,0 mov bl,byte ptrdi+1 mov bh,byte ptrdi; cmp bh,2 jne c4 cmp bl,3 je c5;23h 的情況 inc bl;21h 位加 1 mov byte ptrdi+1,bl jmp addend0 c5: mov byte ptrdi,0; 新的一天 mov byte ptrdi+1,0 jmp addend0 c4: cmp bl,9 je c6;有進(jìn)位 inc bl;01h 位加 1 mov byte ptrdi+1,bl jmp add
35、end0 c6: inc bh mov byte ptrdi,bh;10h 位加 1 jmp addend0 addend0:mov al,20h mov dx,c82590 out dx,al pop di pop bx pop cx pop dx pop ax iret int_timer0 endp display0: ;顯示時(shí)間 push di lea bx,tab mov al,90h mov dx,232h out dx,al mov dx,d8279 lea di,timer0 mov al,byte ptrdi+5 xlat out dx,al mov al,byte ptrd
36、i+4 xlat out dx,al mov al,40h out dx,al mov al,byte ptrdi+3 xlat out dx,al mov al,byte ptrdi+2 xlat out dx,al mov al,40h out dx,al mov al,byte ptrdi+1 xlat out dx,al mov al,byte ptrdi xlat out dx,al pop di ret int_timer1 proc push ax push dx push cx push bx push di mov bl,pad cmp bl,0;復(fù)位 je t0 cmp b
37、l,1;第一次按鍵 je t1;第二次按鍵 mov al,20h mov dx,c82590 out dx,al pop di pop bx pop cx pop dx pop ax iret t0:;初始狀態(tài)或第三次按鍵,秒表歸零 lea di,timer1 mov byte ptrdi,0 mov byte ptrdi+1,0 mov byte ptrdi+2,0 mov byte ptrdi+3,0 mov byte ptrdi+4,0 mov byte ptrdi+5,0 mov byte ptrdi+6,0 mov al,20h mov dx,c82590 out dx,al pop
38、 di pop bx pop cx pop dx pop ax iret t1:;第一次按鍵,開始計(jì)時(shí)或增加 1 毫秒 lea di,timer1 mov bl,byte ptrdi+6 cmp bl,9 je r0;有進(jìn)位 inc bl;0.001s 位加 1 mov byte ptrdi+6,bl jmp addend r0:mov byte ptrdi+6,0;上一位清零 mov bl,byte ptrdi+5;處理下一位 cmp bl,9 je r1;有進(jìn)位 inc bl;0.01s 位加 1 mov byte ptrdi+5,bl jmp addend r1:mov byte ptr
39、di+5,0 mov bl,byte ptrdi+4;處理下一位 cmp bl,9 je r2;有進(jìn)位 inc bl;0.1s 位加 1 mov byte ptrdi+4,bl jmp addend r2: mov byte ptrdi+4,0 mov bl,byte ptrdi+3;處理下一位 cmp bl,9 je r3;有進(jìn)位 inc bl;1s 位加 1 mov byte ptrdi+3,bl jmp addend r3: mov byte ptrdi+3,0 mov bl,byte ptrdi+2;處理下一位 cmp bl,5 je r4;有進(jìn)位 inc bl;10s 位加 1 mov byte ptrdi+2,bl jmp addend r4: mov byte ptrdi+2,0 mov bl,byte ptrdi+1;處理下一位 cmp bl,9 je r5;有進(jìn)位 inc bl;1min 位加 1 mov byte ptrdi+1,bl jmp addend r5: mov byte ptrdi+1,0 mov bl,byte ptrdi;處理下一位 cmp bl,5 je addend
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川電影電視學(xué)院《大學(xué)書法》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《學(xué)前教育史》2022-2023學(xué)年第一學(xué)期期末試卷
- 幽雅的畢業(yè)贈(zèng)言給老師
- 石河子大學(xué)《微信公眾號(hào)的運(yùn)營與營銷》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《色彩》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《機(jī)械工程測(cè)試技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《電路(一)》2023-2024學(xué)年期末試卷
- 沈陽理工大學(xué)《材料科學(xué)基礎(chǔ)》2022-2023學(xué)年第一學(xué)期期末試卷
- 廣東省住建局勞務(wù)分包合同
- 合同變更模板聲明
- 實(shí)驗(yàn)五 PCR擴(kuò)增課件
- 馬拉松運(yùn)動(dòng)醫(yī)療支援培訓(xùn)課件
- 中醫(yī)藥宣傳手冊(cè)
- 不良資產(chǎn)處置盡職指引
- 人教部編版七年級(jí)歷史上冊(cè)第19課 北魏政治和北方民族大交融課件(23張PPT)
- 機(jī)械設(shè)備定期檢查維修保養(yǎng)使用臺(tái)賬
- 麗聲北極星分級(jí)繪本第四級(jí)上 Stop!Everyone Stop!教學(xué)設(shè)計(jì)
- 小學(xué)科學(xué)教育科學(xué)三年級(jí)上冊(cè)天氣《認(rèn)識(shí)氣溫計(jì)》教學(xué)設(shè)計(jì)
- 希爾頓酒店市場(chǎng)營銷環(huán)境的swot分析 2
- 液化氣站氣質(zhì)分析報(bào)告管理制度
- 可編輯修改中國地圖模板
評(píng)論
0/150
提交評(píng)論