版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課課程程設(shè)設(shè)計(jì)計(jì)任任務(wù)務(wù)書書學(xué)生姓名:學(xué)生姓名: * 專業(yè)班級(jí):專業(yè)班級(jí): 電信 0802 指導(dǎo)教師:指導(dǎo)教師: * 工作單位:工作單位: 信息工程學(xué)院 題題 目:打字練習(xí)程序設(shè)計(jì)目:打字練習(xí)程序設(shè)計(jì)初始條件:初始條件:具備數(shù)字電路的理論知識(shí);具備微機(jī)原理的理論知識(shí)和實(shí)踐能力;熟悉匯編語(yǔ)言編程技術(shù);熟悉 80x86 的 cpu 結(jié)構(gòu)和指令系統(tǒng);熟悉相關(guān)常用接口電路的設(shè)計(jì)使用方法。要求完成的主要任務(wù):要求完成的主要任務(wù):(包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1、隨機(jī)顯示一段字符(可含有字母和數(shù)字)2、根據(jù)屏幕顯示進(jìn)行打字練習(xí),出錯(cuò)時(shí)聲響報(bào)警3、打字完成后統(tǒng)計(jì)正確率和打字時(shí)間
2、4、程序采用匯編語(yǔ)言在 pc 機(jī)上完成5、完成符合學(xué)校要求的設(shè)計(jì)說明書時(shí)間安排:時(shí)間安排:一周,其中 2 天程序設(shè)計(jì),2 天程序調(diào)試,1 天完成課程設(shè)計(jì)報(bào)告書及答辯指導(dǎo)教師簽名:指導(dǎo)教師簽名: 年年 月月 日日1系主任(或責(zé)任教師)簽名:系主任(或責(zé)任教師)簽名: 年年 月月 日日1.設(shè)計(jì)概述設(shè)計(jì)概述.2設(shè)計(jì)題目.22設(shè)計(jì)要求.2設(shè)計(jì)方案.22.硬件說明硬件說明.38255a介紹.38253a介紹.33.軟件流程軟件流程.9軟件流程圖軟件流程圖.94.部分結(jié)果截圖部分結(jié)果截圖.115.調(diào)試正確的程序清單調(diào)試正確的程序清單.126.設(shè)計(jì)心得設(shè)計(jì)心得.16 摘要本次課程設(shè)計(jì)是利用微機(jī)原理知識(shí)和匯編
3、語(yǔ)言來(lái)完成打字練習(xí)的程序設(shè)計(jì),是要求可以顯示打字時(shí)間,正確率等趣味練習(xí)。能夠正確運(yùn)用書上的語(yǔ)句進(jìn)行3簡(jiǎn)單功能的設(shè)計(jì),在不斷的編程與檢查問題的過程中提高自己的能力,真正達(dá)到學(xué)習(xí)知識(shí)的目的。對(duì)典型的微機(jī)應(yīng)用系統(tǒng)進(jìn)行設(shè)計(jì),要求根據(jù)具體的課題題目畫出系統(tǒng)結(jié)構(gòu)框圖、系統(tǒng)接線圖;能用所學(xué)習(xí)的匯編語(yǔ)言進(jìn)行典型的程序設(shè)計(jì)并上機(jī)進(jìn)行調(diào)試。本次設(shè)計(jì)主要運(yùn)用了8255a和8253a兩個(gè)芯片。其中8255a是intel公司生產(chǎn)的為x86系列cpu配套的可編程并行接口芯片,也可以用于其他微處理器系統(tǒng)中。通過對(duì)它進(jìn)行編程,芯片可工作于不同的工作方式。在微型計(jì)算機(jī)系統(tǒng)中,用8255a作接口時(shí),通常不需要附加外部邏輯電路就可
4、直接為cpu提供數(shù)據(jù)通道,因此得到了極為廣泛的應(yīng)用。8253a是可編程定時(shí)計(jì)數(shù)器,它是intel公司專為x86系列cpu配置的外圍接口芯片。它在微機(jī)系統(tǒng)中可用作定時(shí)器和計(jì)數(shù)器。定時(shí)時(shí)間與計(jì)數(shù)次數(shù)由用戶事先設(shè)定。 關(guān)鍵詞:匯編語(yǔ)言、8255a、8253a1. 設(shè)計(jì)概述設(shè)計(jì)概述 設(shè)計(jì)題目設(shè)計(jì)題目 打字練習(xí)程序設(shè)計(jì) 設(shè)計(jì)要求41、隨機(jī)顯示一段字符(可含有字母和數(shù)字)2、根據(jù)屏幕顯示進(jìn)行打字練習(xí),出錯(cuò)時(shí)聲響報(bào)警3、打字完成后統(tǒng)計(jì)正確率和打字時(shí)間4、程序采用匯編語(yǔ)言在pc機(jī)上完成5、完成符合學(xué)校要求的設(shè)計(jì)說明書用led 點(diǎn)陣顯示器ldm-1088ax 來(lái)隨機(jī)顯示26 個(gè)英文字母,以按 az 26 個(gè)鍵來(lái)
5、模擬打字,如果在某個(gè)字母點(diǎn)亮期間按下相應(yīng)字母鍵,表示打字正確并熄燈,記錄擊中次數(shù)。實(shí)現(xiàn)下列功能:1.用數(shù)字按鍵選擇打字練習(xí)的速度(即點(diǎn)陣上字母刷新的速度);2.按鍵開始打字練習(xí);3.點(diǎn)陣顯示的字母以一定速度(如每1 秒或2 秒換一個(gè)字母)刷新,打字需在該字母的點(diǎn)亮期間進(jìn)行才算有效;4.若在某個(gè)字母的出現(xiàn)時(shí)間內(nèi)未有打字動(dòng)作,則該次打字失敗,屏幕上顯示“超時(shí)”;5.若一次打字錯(cuò)誤,屏幕上顯示“錯(cuò)誤”, 微機(jī)發(fā)出一次短暫的鳴響,并且在該字母未被更新之前還可以進(jìn)行第二次、第三次打字動(dòng)作;6.每次打字正確,屏幕上顯示“正確”,并將燈全部熄滅,分?jǐn)?shù)加1;7.按鍵退出打字過程,顯示所得的分?jǐn)?shù);.退出后屏幕上
6、顯示繼續(xù)游戲的提示。 設(shè)計(jì)方案設(shè)計(jì)方案 設(shè)計(jì)方案選擇與討論(1)本課程設(shè)計(jì)通過對(duì)8253 的設(shè)置,使之產(chǎn)生一定頻率的波形,將該波形輸出到中斷口irq。每次進(jìn)入中斷都刷新led點(diǎn)陣上的字母顯示,從而控制打字練習(xí)的速度。通過改變8253的計(jì)數(shù)初值可以改變速度。(2)8253 通道1 工作于方式3,輸入1mhz 的時(shí)鐘,設(shè)置分頻系數(shù)為1000,輸出1khz 的方波,此輸出作為通道0 的輸入時(shí)鐘。通道0 工作于方式3,分頻系數(shù)為 用戶輸入的速度等級(jí)1000。 注:速度等級(jí):1-快速 2-中速 3-慢速(3)將8255 的a 口接到led 點(diǎn)陣的col18,c 口接到led 點(diǎn)陣的row18,每當(dāng)進(jìn)入中
7、斷,就把在數(shù)據(jù)段存好的字母的段碼送到a 口和c 口,顯示相應(yīng)的字母。(4) 每個(gè)字母都需要分段循環(huán)顯示,利用人眼的視覺暫留便可看見點(diǎn)陣上顯示整個(gè)字母。5(5)為避免中斷服務(wù)程序過長(zhǎng),在寫中斷服務(wù)程序時(shí),只需要把中斷標(biāo)志置1即可,其余操作可在主程序中進(jìn)行。(6)在字母顯示期間,要不斷讀取按鍵輸入,直到按鍵正確或進(jìn)入下一次中斷(即表示該字母的出現(xiàn)時(shí)間已經(jīng)結(jié)束),準(zhǔn)備出現(xiàn)下一個(gè)字母。(7)在字母顯示期間,若讀入的按鍵是錯(cuò)誤的,則在屏幕上顯示“錯(cuò)誤”,并繼續(xù)顯示該字母,等待按鍵或中斷;若未能在字母消失前按下正確的鍵,則在屏幕上顯示“超時(shí)”,并顯示下一個(gè)字母;若在字母消失前按下正確的鍵,則在屏幕上顯示“
8、正確”,往a 口和c 口輸出00h,使字母消失,分?jǐn)?shù)加1,并準(zhǔn)備顯示下一個(gè)字母。(8)在字母顯示期間,若按鍵輸入是鍵則結(jié)束本次游戲。每次游戲結(jié)束后進(jìn)入等待按鍵的狀態(tài)按鍵退出程序,按鍵則開始下一次游戲。2. 硬件說明硬件說明 8255a介紹介紹8255a是intel公司生產(chǎn)的為x86系列cpu配套的可編程并行接口芯片,也可以用于其他微處理器系統(tǒng)中。通過對(duì)它進(jìn)行編程,芯片可工作于不同的工作方式。在微型計(jì)算機(jī)系統(tǒng)中,用8255a作接口時(shí),通常不需要附加外部邏輯電路就可直接為cpu提供數(shù)據(jù)通道,因此得到了極為廣泛的應(yīng)用。1. 8255a內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)b 組控制部件內(nèi)部db(8)數(shù)據(jù)總線緩沖器讀/寫控
9、制邏輯a0a組端口a(8)a組端口c(高4位)b組端口c(低4位)b組端口b(8)a 組控制控制部件部件件pa7pa0pc7pc4pc3pc0pb7pb0d7d0csa1rdwr 8255a內(nèi)部結(jié)構(gòu)框圖reset68255a的內(nèi)部結(jié)構(gòu)框圖如上圖所示,其內(nèi)部由以下四部分組成。 (1) 端口a、端口b和端口c端口a、端口b和端口c都是8位端口,可以選擇作為輸入或輸出。還可以將端口c的高4位和低4位分開使用,分別作為輸入或輸出。當(dāng)端口a和端口b作為選通輸入或輸出的數(shù)據(jù)端口時(shí),端口c的指定位與端口a和端口b配合使用,用做控制信號(hào)或狀態(tài)信號(hào)。 (2) a組控制和b組控制部件這兩組控制部件有兩個(gè)功能:一是
10、接收來(lái)自芯片內(nèi)部數(shù)據(jù)總線上的控制字;二是接收來(lái)自讀寫控制邏輯電路的讀寫命令,以此來(lái)決定兩組端口的工作方式和讀寫操作。(3)數(shù)據(jù)總線緩沖器它是一個(gè)雙向三態(tài)的8位數(shù)據(jù)緩沖器,8255a正是通過它與系統(tǒng)數(shù)據(jù)總線相連。輸入數(shù)據(jù)、輸出數(shù)據(jù)、cpu發(fā)給8255a的控制字都是通過該部件傳遞的。(4) 讀寫控制邏輯電路讀/寫控制邏輯電路的功能是負(fù)責(zé)管理8255a的數(shù)據(jù)傳輸過程。它接收cs及來(lái)自地址總線的信號(hào)a1、a0(在8086總線中為a2、a1)和控制總線的信號(hào)reset、wr、rd,將它們組合后,得到對(duì)a組控制部件和b組控制部件的控制命令,并將命令送給這兩個(gè)部件,再由它們完成對(duì)數(shù)據(jù)信息,狀態(tài)信息和控制信息
11、的傳輸。2. 8255a的工作方式的工作方式8255a共有三種工作方式:1方式 0 為基本輸入/輸出方式,方式 0 下,可供使用的是兩個(gè) 8 位口(a 口和 b 口)及兩個(gè) 4 位口(c 口高 4 位部分和低 4 位部分) 。四個(gè)口可以是輸入和輸出的任何組合。方式 0 適用于無(wú)條件數(shù)據(jù)傳送,也可以把 c 口的某一位作為狀態(tài)位,實(shí)現(xiàn)查詢方式的數(shù)據(jù)傳送。2方式 1 為選通輸入/輸出方式,a 口和 b 口分別用于數(shù)據(jù)的輸入/輸出。而 c 口則作為數(shù)據(jù)傳送的聯(lián)絡(luò)信號(hào)。a 口和 b 口的聯(lián)絡(luò)信號(hào)都是三個(gè),如果 a 或 b 只有一個(gè)口按方式1 使用,則剩下的另外 13 位口線仍然可按方式 0 使用。如果兩
12、個(gè)口都按方式 1 使用,則還剩下 2 位口線,這兩位口線仍然可以進(jìn)行位狀態(tài)的輸入輸出。方式 1 適用于查詢或中斷方式的數(shù)據(jù)輸入/輸出。8255 作為輸入時(shí)如下圖。輸入過程如下:當(dāng)輸入設(shè)備準(zhǔn)備好數(shù)據(jù),將數(shù)據(jù)送至pa7pa0 或 pb7pb0,同時(shí)發(fā) ,在 下降沿控制下,8255 將 pa7pa0 或pb7pb0 上的數(shù)據(jù)鎖存到 a 口或 b 口數(shù)據(jù)輸入寄存器中,同時(shí) 8255 向輸入設(shè)備發(fā) ibf有效,告知輸入設(shè)備暫緩送數(shù)。8255a 可以兩種方式通知 cpu 取走數(shù)據(jù): 第一種方式是用中斷方式,在 inte=1ibf=1 時(shí), 的上升沿使 intr=1,8255 向 cpu 提出中斷申請(qǐng),cp
13、u 以中斷方式取走數(shù)據(jù),在 cpu 響應(yīng)中斷后,執(zhí)行 in 指令,將 8255 a 口或 b 口數(shù)據(jù)輸入寄存器中的數(shù)據(jù)取走,同時(shí), 信號(hào)的下降沿清除 intr 信號(hào), 信號(hào)的上升沿復(fù)位 ibf。輸入設(shè)備僅當(dāng)檢測(cè)到 ibf 為低電平后,才開始傳送下一個(gè)數(shù)據(jù),如此循環(huán);第二種方式是用軟件查詢,cpu 僅當(dāng)查詢到 ibf=1 時(shí),才從 8255a 口或 b 口數(shù)據(jù)輸入寄存器中取走數(shù)據(jù)。7 8255 作為輸出時(shí)如下圖所示。輸出過程如下:首先 cpu 執(zhí)行 out 指令,在 信號(hào)的下降沿 cpu 輸出的數(shù)據(jù)送入 8255 數(shù)據(jù)輸出緩沖器,并使 intr 復(fù)位。 信號(hào)上升沿將 置為有效,通知輸出設(shè)備,cp
14、u 已把數(shù)據(jù)輸出到 8255 的指定端口中,輸出設(shè)備接到信號(hào)有效后,發(fā)有效,下降沿將 置為 1, 上升沿表示輸出設(shè)備已從 8255a 指定端口取走數(shù)據(jù),此時(shí)若 inte=1,則 intr 被置為高電平,向 cpu 申請(qǐng)中斷,cpu 可采用中斷方式輸出下一個(gè)數(shù)據(jù)。cpu 也可通過查詢 信號(hào),若 =1,cpu 輸出下一個(gè)數(shù)據(jù)給 8255a,即查詢方式傳送數(shù)據(jù)。3方式 2 雙向數(shù)據(jù)傳送方式。只允許 a 口工作在方式 2,當(dāng) a 口工作在方式 2 時(shí),b 口可工作在方式 0 或方式 1。 所謂雙向,即 a 口可分時(shí)進(jìn)行 i/o 操作。 a 口工作在方式 2,信號(hào)聯(lián)絡(luò)線如下: (pc6), (pc7),
15、 (pc4),ibfa(pc5); inte1(pc6)與輸出中斷有關(guān),可由用戶給 8255a 控制字寄存器送 pc6 的置位/復(fù)位字來(lái)實(shí)現(xiàn)允許/禁止 a 口輸出中斷。 inte2(pc4):與輸入中斷有關(guān),可由用戶給 8255a 控制字寄存器送 pc4 的置位/復(fù)位字來(lái)實(shí)現(xiàn)允許/禁止 a 口輸入中斷。 intra(pc3):i/o 中斷申請(qǐng),高電平有效,產(chǎn)生中斷請(qǐng)求信號(hào)的條件為: intra=ibfainte2 (輸入8中斷); intra= inte1 (輸出中斷)。 在本設(shè)計(jì)系統(tǒng)中運(yùn)用的是工作方式0,這種方式比較簡(jiǎn)單。在這里,主要是a口用于輸入,與8個(gè)常開型開關(guān)連接,用于采集輸入。3.
16、8255a的控制字的控制字 (1) 工作方式選擇控制字 它可以使8255a的三個(gè)端口工作于不同的工作方式。(2) c口按位置位/復(fù)位控制字8255a的c口具有位控功能,即端口c的8位中的任一位都可通過cpu向8255a的控制寄存器寫入一個(gè)按位置位/復(fù)位控制字來(lái)置1或清0,而c口中其他位的狀態(tài)不變。8253a介紹介紹8253a是可編程定時(shí)計(jì)數(shù)器,它是intel公司專為x86系列cpu配置的外圍接口芯片。它在微機(jī)系統(tǒng)中可用作定時(shí)器和計(jì)數(shù)器。定時(shí)時(shí)間與計(jì)數(shù)次數(shù)由用戶事先設(shè)定。方式控制字的特征位d d d7 7 7a口工作方式0 0 方式00 1 方式11 方式21 1 1d d d6 6 6d d
17、d5 5 5d d d4 4 4d d d3 3 3d d d2d d d1d d d0a口輸入/輸出1 輸入0 輸出 c 口高四位位輸入/輸出1 輸入0 輸出b口工作方式0 方式01 方式1b口輸入/輸出1 輸入0 輸出c口低四位輸入/輸出1 輸入0 輸出91. 8253a內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)四大部分:數(shù)據(jù)總線緩沖器、讀寫控制邏輯、控制字寄存器以及三個(gè)獨(dú)立的16位的計(jì)數(shù)器通道。這三個(gè)計(jì)數(shù)器分別是計(jì)數(shù)器0通道、計(jì)數(shù)器1通道和計(jì)數(shù)器2通道。(1)數(shù)據(jù)總線緩沖器:8位的雙向三態(tài)緩沖器。用于暫存數(shù)據(jù),使用在以下幾個(gè)方面:cpu在初始化編程時(shí),向8253寫入控制字。cpu向某一通道寫計(jì)數(shù)初值。cpu從某一
18、通道讀計(jì)數(shù)初值。(2)讀寫控制邏輯電路:接受輸入的rd、wr、cs、a1、a0等信號(hào)組合產(chǎn)生出對(duì)8253要執(zhí)行的操作,見操作表。(3)控制字寄存器:只能寫入,不能讀出。8初始化編程時(shí),寫入控制字決定通道的工作方式。(4)3個(gè)計(jì)數(shù)器:分別為0、1和2,是3個(gè)獨(dú)立的計(jì)數(shù)定時(shí)通道,都可按不同的方式工作。每個(gè)計(jì)數(shù)器內(nèi)部都包含一個(gè)16位的預(yù)置初始值寄存器。一個(gè)可預(yù)置數(shù)減法計(jì)數(shù)器和一個(gè)鎖存器。2. 8253a的工作方式的工作方式(1) 方式0:計(jì)數(shù)結(jié)束產(chǎn)生中斷方式 當(dāng)寫入控制字后,out變?yōu)榈碗娖?,?dāng)寫入初值后立即開始計(jì)數(shù),當(dāng)計(jì)數(shù)結(jié)束時(shí),變成高電平。 (2) 方式1:可編程單次脈沖方式 當(dāng)初值裝入后且ga
19、te由低變高時(shí),out變?yōu)榈碗娖剑?jì)數(shù)結(jié)束變?yōu)楦唠娖健?(3) 方式2:頻率發(fā)生器方式 當(dāng)初值裝入時(shí),out變?yōu)楦?;?jì)數(shù)結(jié)束,out變?yōu)榈汀T摲绞较氯绻?jì)數(shù)未結(jié)束,但gate為低時(shí),立即停止計(jì)數(shù),強(qiáng)制out變高,當(dāng)gate再變高時(shí),便啟動(dòng)一次新的計(jì)數(shù)周期。(4) 方式3:方波發(fā)生器 當(dāng)裝入初值后,在gate上升沿啟動(dòng)計(jì)數(shù),out 輸出高電平; 當(dāng)計(jì)數(shù)完成一半時(shí),out輸出低電平。 (5) 方式4:軟件觸發(fā)選通數(shù)據(jù)總線緩沖器d7 d0 計(jì)數(shù)器0rda0wr計(jì)數(shù)器1讀 / 寫邏 輯a1cs計(jì)數(shù)器2控 制寄存器10 當(dāng)寫入控制字后,out輸出為高;裝入初值且gate為高時(shí)開始計(jì)數(shù),當(dāng)計(jì)數(shù)結(jié)束,out
20、端輸出一個(gè)寬度等于一個(gè)時(shí)鐘周期的負(fù)脈沖。 (6) 方式5:硬件觸發(fā)選通在gate上升沿啟動(dòng)計(jì)數(shù)器,out一直保持高電平;計(jì)數(shù)結(jié)束,out端輸出一個(gè)寬度等于一個(gè)時(shí)鐘周期的負(fù)脈沖。 3.2. 8253a的控制字的控制字bcdbcdbcdm0m0m0m1m1m1m2m2m2rl0rl0rl0rl1rl1rl1sc0sc0sc0sc1sc1sc1rl1rl1rl1bcdbcdbcdm0m0m0m1m1m1m2m2m2rl0rl0rl0sc0sc0sc0sc1sc1sc10二進(jìn)制碼讀寫001方式1000方式001只讀寫低字節(jié)01計(jì)數(shù)器100計(jì)數(shù)器01 bcd碼讀寫*10方式2000方式011先低再高10
21、只讀寫高字節(jié)10計(jì)數(shù)器2*11方式311非法101方式5100方式400將ce送ol118255a的控制字格式3軟件流程軟件流程1.軟件流程圖軟件流程圖. 開始輸入速度等級(jí)并顯示,把速度等級(jí)轉(zhuǎn)化為分頻系數(shù)輸入速度等級(jí)并顯示,把速度等級(jí)轉(zhuǎn)化為分頻系數(shù)初始化8255,方式0,a 口輸出,b 口輸出,c 口輸出設(shè)置中斷向量,開放irq7 中斷,段寄存器重新賦值清記分器cl,清中斷標(biāo)致bh, si 指向隨機(jī)字母表mes1按鍵開始游戲,開中斷nbh1? bh0;產(chǎn)生一個(gè)隨機(jī)數(shù),把si+隨機(jī)數(shù)指向的字符存入al bh0;產(chǎn)生一個(gè)隨機(jī)數(shù),把si+隨機(jī)數(shù)指向的字符存入al提示超時(shí)判斷al 中的字符是az 中的
22、哪一個(gè),并讓di 指向相應(yīng)字母的碼表分3 段循環(huán)把該字母的碼表輸出到a口和c口,輸出的過程中查詢中斷標(biāo)志和鍵盤n錯(cuò)誤提示按鍵正確?退出本次游戲y把存在cl 中的分?jǐn)?shù)轉(zhuǎn)換為十進(jìn)制顯示出來(lái)向a 口和c 口輸出00h,使該字母消失,提示正確,鳴響一次,分?jǐn)?shù)加1(inc cl)提示開始下一次游戲或結(jié)束bh1?輸入122.22.2、功能圖、功能圖:開始 段地址初始化隨機(jī)產(chǎn)生字符串開窗口開始打字輸入字符字符=27?退出打字屏幕上顯示結(jié)果結(jié)束將產(chǎn)生的字符串輸出到屏幕上緩沖區(qū)中字是否打完?yynny結(jié)束133.23.2、各功能模塊及流程圖、各功能模塊及流程圖 輸出正確率模塊 計(jì)算打字時(shí)間并輸出模塊 輸出正確率
23、rightrata_outmov ax,rnumber mov cx,100mul cxdiv anumbermov bx,ax輸出整數(shù)部分輸出.輸出小數(shù)部分輸出%結(jié)束14計(jì)計(jì)算算打打字字時(shí)時(shí)間間并并輸輸出出u us se et ti im me ea an nd do ou ut t 提提取取打打字字結(jié)結(jié)束束時(shí)時(shí)系系統(tǒng)統(tǒng)時(shí)時(shí)間間 s su ub b d dh h, ,s st ti im me e 2 2 j ja ae e s se ec cu un nb bl lo ow w a ad dd d d dh h, ,6 60 0 d de ec c c cl l s su ub b c c
24、l l, ,s st ti im me e 1 1 j jn ns s m mi in nu un nb bl lo ow wj jz z s se ec cu un nb bl lo ow wa ad dd d c cl l, ,6 60 0 d de ec c c ch h s su ub b c ch h, ,s st ti im me e 0 0 c ca al ll l o ou ut tt ti im me e結(jié)結(jié)束束n nn nn ny yy yy y154部分結(jié)果截圖部分結(jié)果截圖經(jīng)過對(duì)程序的連接和編譯,生成的可執(zhí)行文件,進(jìn)入界面如上圖所示:游戲過程的界面如上圖:165. 調(diào)試后
25、的正確程序清單調(diào)試后的正確程序清單stack segment ;堆棧段db 100stack endsdata segment ;數(shù)據(jù)段ioport equ 0c400h-0280hport0 equ ioport+2b0h ;8279 數(shù)據(jù)端口port1 equ ioport+2b1h ;8279 控制端口led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;led字型代碼表db 67h,37h,73h,31h,3eh,36h,66hio8253a equ ioport+280h ;8253計(jì)數(shù)器0端口
26、io8253b equ ioport+283h ;8253控制器端口io8255a equ ioport+288h ;8255端口a地址io8255b equ ioport+28bh ;8255控制端口地址 io0832a equ ioport+290h ;0832數(shù)據(jù)輸入端口wave db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04hdb 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波
27、數(shù)據(jù),32個(gè)time db 120,110,100,89,79,70,60,50 ;產(chǎn)生不同音階時(shí)8253的計(jì)數(shù)器初值msg1 db please press one of 0,1,2,3,4,5,6,7,8,r,:,0dh,0ah ;程序開始時(shí)的提示信息db function:,0dh,0ah db 0 = edit music and end with 9,less then 100 db r = return to dos,0dh,0ah,$ ;r返回dosmsg2 db 0dh,0ah,input error,take a rechoice,0dh,0ah,0dh,0ah,$ ;輸入錯(cuò)
28、誤的提示信息data endscode segment ;代碼段assume cs:code,ds:datastart: mov ax,datamov ds,ax mov dx,port1 ;初始化8279芯片mov al,0d3hout dx,al ;清除8279內(nèi)部顯示ram狀態(tài)為全“0”mov al,2ah17out dx,al ;設(shè)定8279分頻系數(shù)mov al,40h out dx,al ;讀fifo/傳感器mov al,00hout dx,al ;鍵盤、顯示器方式設(shè)置:8個(gè)8位字符左端傳人,編碼掃描鍵盤mov al,80hout dx,al ;寫顯示器ram命令lea dx,msg
29、1 ;顯示提示信息mov ah,09hint 21hbegin: call judgekey ;調(diào)用鍵盤程序,判斷輸入lp0: cmp al,13h ;r鍵,返回dos命令jnz lp1mov ax,4c00h ;返回dosint 21hlp1: cmp al,1 ;輸入是否超出范圍,是則跳到提示出錯(cuò)程序段 jb err cmp al,7 ja err call sound ;調(diào)用發(fā)音子程序,播放按下的相應(yīng)音階 jmp begin ;返回初始界面musi: mov al,di ;音樂播放程序段 cmp al,9 ;檢查是否為當(dāng)前音樂結(jié)束標(biāo)志9 jz begin ;是則跳回初始界面 mov bu
30、ff,al ;將當(dāng)前音階存入緩沖 call sound ;調(diào)用發(fā)音子程序 inc di ;取下一音階 jmp musi ;重復(fù) err: lea dx,msg2 ;提示出錯(cuò)程序段 mov ah,09h ;顯示提示出錯(cuò)信息 int 21h lea dx,msg1 ;回到初始界面 int 21h jmp begin judgekey proc near ;鍵盤輸入判斷程序 mov dx,port1 mov al,0d1h out dx,al ;清led顯示read: mov dx,port118 in al,dx and al,07h jz read ;讀狀態(tài),看鍵盤是否有鍵按下,無(wú)則繼續(xù)讀取ke
31、yn: mov dx,port0 ;有鍵按下,判斷按鍵位置 in al,dxmov bl,aland al,07hand bl,38hmov cl,03shr bl,clcmp bl,00hjnz line2add al,08h ;為第一行的鍵,鍵位值加08hjmp quit1 line2: cmp bl,01h jnz line3jmp quit1 ;為第二行的鍵,直接返回line3: add al,10h ;為第三行的鍵,鍵位值加10hquit1: mov buff,al ;將鍵位信息存入buff retjudgekey endpdisp proc near ;顯示子程序 push ax
32、mov ax,data mov ds,ax mov dx,port1 mov al,80h ;寫8279顯示ram控制字 out dx,al lea si,buff ;將buff的地址賦給si lea bx,led ;將led的起始地址賦給bxdisp1: mov al,si ;將buff地址存儲(chǔ)的內(nèi)容賦給al xlat ;完成一個(gè)字節(jié)的查表轉(zhuǎn)換,即bx+al賦給almov dx,port0 ;將顯示信息輸出顯示out dx,al pop ax retdisp endp sound proc near ;發(fā)音子程序call disp ;調(diào)用顯示子程序,發(fā)音的同時(shí)顯示音階 mov num,al
33、;求出相應(yīng)的時(shí)間常數(shù)的序號(hào) mov cx,60 ;取60次32個(gè)正弦波數(shù)據(jù)ddd: mov si,019lll: mov al,wavesi ;取正弦波數(shù)據(jù) mov dx,io0832a out dx,al ;放音 call delay ;調(diào)用延時(shí)子程序 inc si ;si加1 cmp si,32 ;是否取完32個(gè)數(shù)據(jù)jl lll ;若沒有,則繼續(xù)loop ddd ;總循環(huán)次數(shù)60是否完,沒有,則繼續(xù)exit: retsound endp delay proc near ;延時(shí)子程序ccc: mov bx,offset timemov dx,io8253b ;設(shè)定8253計(jì)數(shù)器1為方式0工作
34、mov al,10h out dx,almov dx,io8255b ;設(shè)8255a口輸入mov al,9bh out dx,almov al,num ;取相應(yīng)的時(shí)間常數(shù) xlatmov dx,io8253aout dx,al ;向8253通道0輸出相應(yīng)延遲kkk: mov dx,io8255ain al,dx ;從8255a口讀取數(shù)據(jù)信息test al,01 ;判斷pa0口是否為1,即8253是否計(jì)數(shù)完畢,輸出out是否為高電平j(luò)z kkk ;若不為1,則轉(zhuǎn)kkkret ;子程序返回delay endpcode endsend start ;結(jié)束整個(gè)程序段206. 設(shè)計(jì)心得設(shè)計(jì)心得本次設(shè)計(jì)中
35、,可以說是一次對(duì)自己能力與學(xué)習(xí)結(jié)果的考驗(yàn)。在我們學(xué)完了微型計(jì)算機(jī)原理及應(yīng)用這門課的基礎(chǔ)上來(lái)搞這個(gè)設(shè)計(jì),通過設(shè)計(jì)后,使我們對(duì)這門課的理論知識(shí)的理解有很大程度上的加強(qiáng)。微機(jī)原理這門課程本身是一門實(shí)驗(yàn)性和工程性很強(qiáng)的專業(yè)技術(shù)課,因此不僅要重視理論教學(xué),更應(yīng)注意實(shí)踐技能的培養(yǎng)和訓(xùn)練。課程設(shè)計(jì)是這門課程的一個(gè)重要環(huán)節(jié),通過課程設(shè)計(jì),鞏固、加深和拓寬了學(xué)習(xí)的理解,使自己的分析、設(shè)計(jì)和調(diào)試 8086 微機(jī)系統(tǒng)的能力得到了進(jìn)一步的提高。在設(shè)計(jì)過程中,對(duì)不同方案的構(gòu)思、分析、比較到最后的定案,這些工作,培養(yǎng)我們的分析問題,解決問題和創(chuàng)新的能力。在方案確定后,在軟件編程方面,對(duì)編寫的程序經(jīng)上機(jī)實(shí)踐和調(diào)試,對(duì)存在的問題進(jìn)行反復(fù)修改,使其達(dá)到了最優(yōu)方案。這樣的編程機(jī)會(huì)在平時(shí)是很少有的,所以,在編程方面我們得到了很多的鍛煉,使自己更加熟悉了匯編語(yǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒園教育集團(tuán)股權(quán)收購(gòu)與教育產(chǎn)業(yè)發(fā)展合作協(xié)議3篇
- 2024年酒吧經(jīng)營(yíng)權(quán)承接合同
- 2024年集裝箱搬運(yùn)吊裝合同6篇
- 2024年高端電子產(chǎn)品研發(fā)與銷售合同
- 2024年跨國(guó)技術(shù)授權(quán)與關(guān)鍵設(shè)備進(jìn)口合同樣本版B版
- 2024年適用出租車租賃承包協(xié)議版
- 2024年跨區(qū)域醫(yī)療機(jī)構(gòu)雙向轉(zhuǎn)診服務(wù)合作協(xié)議3篇
- 2024年軟件開發(fā)合同-軟件公司為客戶定制開發(fā)軟件
- 2025年度智能溫室大棚控制系統(tǒng)集成合同3篇
- 第16課-三國(guó)鼎立-作業(yè)課件-2020-2021學(xué)年部編版歷史與社會(huì)七年級(jí)上冊(cè)
- 酒店預(yù)訂確認(rèn)函
- 小學(xué)課愛國(guó)主義教育教案
- 會(huì)計(jì)師事務(wù)所審計(jì)工作底稿
- 內(nèi)科抗菌藥物合理使用優(yōu)秀課件
- 觸摸一體機(jī)整機(jī)檢驗(yàn)標(biāo)準(zhǔn)?1.0
- 關(guān)于人員的處置方案
- 2023年社區(qū)體育研究報(bào)告5篇
- RBA社會(huì)責(zé)任商業(yè)聯(lián)盟準(zhǔn)則(管理手冊(cè)+程序+記錄+培訓(xùn))
- MT/T 323-1993中雙鏈刮板輸送機(jī)用刮板
- GB/T 7260.3-2003不間斷電源設(shè)備(UPS)第3部分:確定性能的方法和試驗(yàn)要求
- GB/T 459-2002紙和紙板伸縮性的測(cè)定
評(píng)論
0/150
提交評(píng)論