第一篇:微機(jī)原理課設(shè)
微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合專業(yè)班級(jí)學(xué)生姓名學(xué)生學(xué)號(hào)指導(dǎo)老師實(shí)驗(yàn)課程設(shè)計(jì)
——信號(hào)發(fā)生器功能程序設(shè)計(jì)
第一章
設(shè)計(jì)課題概述
本學(xué)期開(kāi)設(shè)的《微型計(jì)算機(jī)原理與接口技術(shù)》理論課程是一門專業(yè)基礎(chǔ)課程,1.1 課程設(shè)計(jì)目的
它的主要內(nèi)容包括微型計(jì)算機(jī)體系結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語(yǔ)言設(shè)計(jì)以及微型計(jì)算機(jī)各個(gè)組成部分介紹等內(nèi)容。要求學(xué)生對(duì)微機(jī)原理中的基本概念有較深入的了解,能夠系統(tǒng)地掌握微型計(jì)算機(jī)的結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語(yǔ)言程序設(shè)計(jì)方法、微機(jī)系統(tǒng)的接口電路設(shè)計(jì)及編程方法等,并具有綜合運(yùn)用所學(xué)知識(shí)分析問(wèn)題和解決問(wèn)題的能力。
《微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)(實(shí)踐)》課程設(shè)計(jì),讓學(xué)生對(duì)微機(jī)系統(tǒng)有一個(gè)較全面的理解,掌握常規(guī)的芯片使用方法、掌握簡(jiǎn)單的微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計(jì)方法,對(duì)典型數(shù)字接口電路的應(yīng)用技術(shù)有一個(gè)較深入的掌握,并對(duì)應(yīng)用系統(tǒng)進(jìn)行硬件原理和軟件編程進(jìn)行分析、設(shè)計(jì)和調(diào)試,達(dá)到基本掌握簡(jiǎn)單微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計(jì)方法,提高項(xiàng)目開(kāi)發(fā)能力的目的。課程中要求學(xué)生根據(jù)課程設(shè)計(jì)指導(dǎo)書來(lái)選擇課題,并且獨(dú)立完成課題,寫出課程設(shè)計(jì)說(shuō)明書,畫出電路原理圖,說(shuō)明工作原理,畫出電路板圖,編寫程序以及程序流程圖。
針對(duì)《信號(hào)發(fā)生器功能程序設(shè)計(jì)》這一課題,主要涉及到硬件的連接(主要用到芯片有:8086CPU,DAC0832,8255,74LS273,74LS138,運(yùn)放等)以及數(shù)碼管,鍵盤矩陣硬件,示波器等連接原理圖,程序的編寫(主要涉及到顯示波形,數(shù)碼管顯示以及通過(guò)小鍵盤來(lái)對(duì)波形進(jìn)行選擇控制)以及各個(gè)子程序或程序段的程序流程等,通過(guò)課程設(shè)計(jì)不僅可以鍛煉學(xué)生在微機(jī)應(yīng)用方面的實(shí)際工作能力,將所學(xué)轉(zhuǎn)化為所用,更是一個(gè)鍛煉解決實(shí)際問(wèn)題能力的很好機(jī)會(huì)。
1.2 課程設(shè)計(jì)要求
(1)、分別用C語(yǔ)言和匯編語(yǔ)言編程完成硬件接口功能設(shè)計(jì);(2)、硬件電路基于80x86微機(jī)的接口電路;
(3)、程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對(duì)應(yīng)信號(hào)波形(D/A)輸出(信號(hào)波形包括正弦波、三角波、方波、鋸齒波)、輸出信號(hào)波形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。
? 實(shí)現(xiàn)技術(shù)指標(biāo)
(1)、完全用小鍵盤控制各波形間的切換和頻率和幅值的調(diào)節(jié)以及退出。(2)、實(shí)現(xiàn)正弦波、三角波、方波和鋸齒波信號(hào)的產(chǎn)生。(3)、數(shù)碼管同步顯示當(dāng)前工作波形的頻率和幅值。(4)、實(shí)現(xiàn)頻率的1到5倍可調(diào)。(5)、實(shí)現(xiàn)幅值的1到5倍可調(diào)。
? 使用說(shuō)明
(1)、小鍵盤第一列對(duì)應(yīng)0-3,第二列對(duì)應(yīng)4—7。
(2)、開(kāi)始選擇0—3分別對(duì)應(yīng)方波,三角波,鋸齒波,正弦波。同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率。
(3)、有波形產(chǎn)生以后,再調(diào)節(jié)幅值和頻率。0對(duì)應(yīng)增大頻率,1對(duì)應(yīng)減小頻率,2對(duì)應(yīng)減小幅值,3對(duì)應(yīng)增大幅值。
(4)、頻率和幅值可以實(shí)現(xiàn)1到5倍可調(diào),同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率的倍數(shù)(1~5)。
(5)、任何時(shí)候4都對(duì)應(yīng)退出,回到最開(kāi)始的選擇波形狀態(tài),數(shù)碼管歸零。
第二章 設(shè)計(jì)思想和實(shí)施方案
2.1功能分析
2.1.1波形產(chǎn)生
由于要由數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)來(lái)產(chǎn)生波形,因此要由D/A轉(zhuǎn)換芯片DAC0832來(lái)完成此項(xiàng)任務(wù)。通過(guò)匯編語(yǔ)言編寫各個(gè)波形子程序,由于要顯示波形,所以每輸出一個(gè)值,都要進(jìn)行一定時(shí)間的延時(shí),掃描沒(méi)有按鍵按下后再輸出下一個(gè)值,直到形成一個(gè)周期的代碼。利用循環(huán),就可產(chǎn)生連續(xù)波形代碼,再通過(guò)8255輸出給DAC0832,將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案在后面有分析。
2.1.2波形切換
波形的選擇和調(diào)節(jié)由小鍵盤控制。第一列從上到下編碼為0,1,2,3,分別對(duì)應(yīng)方波、三角波、鋸齒波、正弦波。第二列第一個(gè)鍵的鍵值為4,對(duì)應(yīng)退出波形,可以重新選擇波形,實(shí)現(xiàn)波形切換。當(dāng)沒(méi)有輸出波形的時(shí)候,也就是輸出為零,選擇0到3就會(huì)進(jìn)入相應(yīng)的波形子程序。進(jìn)入波形子程序以后,每一個(gè)點(diǎn)輸出之前都會(huì)調(diào)用掃描子程序,判斷是否有鍵按下,有則跳轉(zhuǎn)到相應(yīng)的程序斷去執(zhí)行,無(wú)則繼續(xù)。由于小鍵盤掃描在程序總是存在的,因此可隨時(shí)進(jìn)行波形間的切換。
2.1.3 數(shù)碼管顯示
數(shù)碼管同步顯示當(dāng)前波形的幅值和頻率。硬件上由8086將數(shù)據(jù)輸出給8255,8255再將輸出送給數(shù)碼管的A~Dp,顯示相應(yīng)字符。軟件上定義一個(gè)緩沖區(qū)存放波形的幅值和頻率,顯示數(shù)碼管時(shí),利用緩沖區(qū)的數(shù)值查找數(shù)碼管鍵值表再輸出對(duì)應(yīng)數(shù)值。循環(huán)輸出波形時(shí)也循環(huán)輸出緩沖區(qū)內(nèi)容對(duì)應(yīng)的值,就可以同步顯示波形的幅值和頻率。利用小鍵盤掃描得到的鍵值進(jìn)行判斷,對(duì)緩沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。
2.1.4小鍵盤控制
使用實(shí)驗(yàn)箱上4×4鍵盤,可以實(shí)現(xiàn)切換波形,調(diào)頻、調(diào)幅和退出波形的控制功能。Protues內(nèi)的鍵盤矩陣掃描時(shí)輪流選通一行,然后從端口處讀取列數(shù)據(jù),如果有按鍵則讀取的數(shù)據(jù)肯定有一位為0,經(jīng)過(guò)取反后,盡有一位為1,然后再根據(jù)選取的列和讀取的行值,確定按的是哪一個(gè)鍵,然后將鍵值編碼保存在一個(gè)名為keyass的存儲(chǔ)單元里。當(dāng)有鍵按下時(shí),從keyass內(nèi)取出鍵值進(jìn)行判斷,就能轉(zhuǎn)入相應(yīng)的子程序進(jìn)行控制,并且鍵盤掃描、獲取鍵值等子程序也能夠很好的嵌入在其他程序中,方便調(diào)用。
2.1.5有極調(diào)頻
改變波形子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,即延時(shí),就可改變整個(gè)波形的頻率。延時(shí)越短頻率越高。定義三個(gè)緩沖區(qū)來(lái)存放延時(shí),其中一個(gè)存放初始值3,一個(gè)存放當(dāng)前波形的延時(shí),還有一個(gè)作為中間暫存用。產(chǎn)生波形以后,取出延時(shí)初值存入中間暫存緩沖區(qū),再掃描鍵盤:0對(duì)應(yīng)減小延時(shí),1對(duì)應(yīng)增大延時(shí),無(wú)鍵則不改變延時(shí)。對(duì)暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaopin的緩沖區(qū)內(nèi)作為當(dāng)前波形的延時(shí)。
2.1.6有極調(diào)幅
和有級(jí)調(diào)頻類似,有極調(diào)幅也是定義三個(gè)緩沖區(qū),功能和有極調(diào)頻類似。幅值緩沖區(qū)存放的是輸出點(diǎn)的值的放大倍數(shù),調(diào)節(jié)放大倍數(shù)也就使幅值改變了。產(chǎn)生波形以后,取出倍數(shù)初值存入中間暫存緩沖區(qū),再掃描鍵盤:2對(duì)應(yīng)減小倍數(shù),3對(duì)應(yīng)增大倍數(shù),無(wú)鍵則不改變倍數(shù)。對(duì)暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaofu的緩沖區(qū)內(nèi)作為當(dāng)前波形的幅值放大倍數(shù)。
2.1.6開(kāi)始結(jié)束
用小鍵盤第二列第一個(gè)也就是4來(lái)結(jié)束波形,無(wú)論在什么時(shí)候只在小鍵盤掃描到了4鍵,它就會(huì)無(wú)條件跳出程序,返回起始狀態(tài),等待選擇波形,同時(shí)數(shù)碼管顯示零。
2.2所用芯片功能簡(jiǎn)介
2.2.1 8086功能簡(jiǎn)介
8086 CPU是由總線接口部件BIU和執(zhí)行部件EU這兩大部分構(gòu)成??偩€接口部件BIU是8086 CPU在存儲(chǔ)器和I/O設(shè)備之間的接口部件,負(fù)責(zé)對(duì)全部引腳的操作,即8086對(duì)存儲(chǔ)器和I/O設(shè)備的所有操作都是由BIU完成的。所有對(duì)外部總線的操作都必須有正確的地址和適當(dāng)?shù)目刂菩盘?hào),BIU中的各部件主要是圍繞這個(gè)目標(biāo)設(shè)計(jì)的。它提供了16位雙向數(shù)據(jù)總線、20位地址總線和若干條控制總線。
其具體任務(wù)是:負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊(duì)列緩沖器暫存。CPU執(zhí)行指令時(shí),總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存單元或I/O端口中。
執(zhí)行單元EU中包含1個(gè)16位的運(yùn)算器ALU、8個(gè)16位的寄存器、1個(gè)16位標(biāo)志寄存器FR、1個(gè)運(yùn)算暫存器和執(zhí)行單元的控制電路。這個(gè)單元進(jìn)行所有指令的解釋和執(zhí)行,同時(shí)管理上述有關(guān)的寄存器。EU對(duì)指令的執(zhí)行是從取指令操作碼開(kāi)始的,它從總線接口單元的指令隊(duì)列緩沖器中每次取一個(gè)字節(jié)。如果指令隊(duì)列緩沖器中是空的,那么EU就要等待BIU通過(guò)外部總線從存儲(chǔ)器中取得指令并送到EU,通過(guò)譯碼電路分析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。
管腳圖如下:
2.2.2 8255A功能簡(jiǎn)介
8255A具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過(guò)它CPU可直接與外設(shè)相連。
8255A在使用前要寫入一個(gè)方式控制字,選擇A、B、C三個(gè)端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無(wú)須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出;方式1 :選通I/O,此時(shí)接口和外圍設(shè)備需聯(lián)絡(luò)信號(hào)進(jìn)行協(xié)調(diào),只有A口和B口可以工作在方式1,此時(shí)C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號(hào),余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時(shí)C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。
管腳圖如下:
2.2.3 DAC0832功能簡(jiǎn)介
DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開(kāi)關(guān)、運(yùn)算放大器和參考電壓VREF四大部分組成。電路有極好的溫度跟隨性,使用了COMS電流開(kāi)關(guān)和控制邏輯而獲得低功耗、低輸出的泄漏電流誤差。集成電路內(nèi)有兩級(jí)輸入寄存器,使DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要.DAC0832有8個(gè)輸入端(其中每個(gè)輸入端是8位二進(jìn)制數(shù)的一位),有一個(gè)模擬輸出端。輸入可有2的8次方,即256個(gè)不同的二進(jìn)制組態(tài),輸出為256個(gè)電壓之一,即輸出電壓不是整個(gè)電壓范圍內(nèi)任意值,而只能是256個(gè)可能值。
D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號(hào),可通過(guò)一個(gè)高輸入阻抗的線性運(yùn)算放大器實(shí)現(xiàn)。運(yùn)放的反饋電阻可通過(guò)RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。
DAC0832的管腳圖如下:
2.2.4 74LS273功能簡(jiǎn)介
地址鎖存器就是一個(gè)暫存器,它根據(jù)控制信號(hào)的狀態(tài),將總線上地址代碼暫存起來(lái)。8086/8088數(shù)據(jù)和地址總線采用分時(shí)復(fù)用操作方法,即用同一總線既傳輸數(shù)據(jù)又傳輸?shù)刂?。?dāng)微處理器與存儲(chǔ)器交換信號(hào)時(shí),首先由CPU發(fā)出存儲(chǔ)器地址,同時(shí)發(fā)出允許鎖存信號(hào)ALE給鎖存器,當(dāng)鎖存器接到該信號(hào)后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。
地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時(shí)才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號(hào)必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。74LS273的引腳1D~8D為數(shù)據(jù)輸入端,1Q~8Q為數(shù)據(jù)輸出端,WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時(shí),芯片被清除,輸出全為0。CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時(shí),D0~D7的數(shù)據(jù)通過(guò)芯片,為0時(shí)將數(shù)據(jù)鎖存,D0~D7的數(shù)據(jù)不變。由于8086有20位物理地址,所以需要用3片74LS273級(jí)聯(lián)。
74LS273的管腳圖如右:
2.3 實(shí)施方案
2.3.1系統(tǒng)總體設(shè)計(jì)方案
該設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分。
1.硬件上要求以8086CPU為核心進(jìn)行電路設(shè)計(jì)。完全用小鍵盤對(duì)波形進(jìn)行控制。小鍵盤作為產(chǎn)生波形、波形切換、調(diào)節(jié)頻率,調(diào)節(jié)幅值、退出波形的控制端口。8255A芯片完成對(duì)小鍵盤掃描,獲取鍵值編碼以及輸出到數(shù)碼管。通過(guò)DAC0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,再由轉(zhuǎn)換電路將電流輸出轉(zhuǎn)換為電壓輸出產(chǎn)生各種波形,通過(guò)虛擬示波器顯示出波形。由于8255A的A,B,C端口都已使用,所以采用鍵盤控制進(jìn)行幅值和頻率的有極調(diào)節(jié)。
2.軟件方面要設(shè)計(jì)方波,三角波,鋸齒波,正弦波何時(shí)產(chǎn)生,如何產(chǎn)生,何時(shí)退出,并且還要設(shè)計(jì)如何通過(guò)對(duì)按鍵的判斷,對(duì)頻率和幅值進(jìn)行調(diào)節(jié)。
方波比較簡(jiǎn)單,先掃描鍵盤,無(wú)鍵按下時(shí)輸出零,保持一個(gè)延時(shí),再掃描鍵盤,無(wú)鍵按下時(shí)輸出20H的倍數(shù),該倍數(shù)就是我定義的幅值,再延時(shí),循環(huán)該周期就可得到方波。如果有鍵按下就會(huì)轉(zhuǎn)入相應(yīng)子程序。
三角波分為兩段,因它的上升斜坡和下降斜坡都是線性關(guān)系,所以只要由數(shù)字量的增減來(lái)控制就可以了。產(chǎn)生上升斜坡時(shí)讓輸出值從零開(kāi)始逐漸遞增,其上升的最大值是30乘以放大倍數(shù),相反,產(chǎn)生下降斜坡時(shí),讓輸出值從最大值逐漸遞減到零。為簡(jiǎn)單起見(jiàn),這里采用的是查表法,在數(shù)據(jù)段定義了三角波函數(shù)表,規(guī)律如上。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。
鋸齒波截取三角波的上升斜坡部分,到達(dá)最大值后就跳回最低值0,方法與三角波相同,也采用查表法。先定義了鋸齒波的函數(shù)表,輸出時(shí)只要按著函數(shù)表一個(gè)一個(gè)往下輸出,當(dāng)顯示到最大值即一個(gè)周期內(nèi)的最后一個(gè)值再將指針指向表的首地址就開(kāi)始了新的周期。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。
正弦波也是用的查表法。該方法的優(yōu)點(diǎn)是速度快,但在精度高的情況下要求的存儲(chǔ)器容量也要增大,所以此種方法應(yīng)用在對(duì)精度要求不高的場(chǎng)合。本程序中制造了一張正弦數(shù)字量表,即查函數(shù)表得到的值轉(zhuǎn)換成十進(jìn)制數(shù)填表。一個(gè)周期內(nèi),采樣點(diǎn)越多,精度越高,本實(shí)驗(yàn)中采樣點(diǎn)為40點(diǎn)/周期。正弦數(shù)字量表中的值為參考值,對(duì)于不同幅值的正弦波可以通過(guò)把表中的每個(gè)值乘以相同的倍數(shù)得到,其頻率由改變輸出點(diǎn)之間的延時(shí)來(lái)實(shí)現(xiàn)。
頻率和幅值的調(diào)節(jié)由每個(gè)點(diǎn)的延時(shí)和幅值的放大倍數(shù)決定。在各個(gè)波形輸出之前,先讀取頻率和幅值的初值,若要增加(減小)頻率,則使延時(shí)減(加)1;若要增大(減?。┓担瑒t使原幅值基礎(chǔ)值得放大倍數(shù)加(減)1。然后再將改變后的幅值頻率送給原波形進(jìn)行輸出,同時(shí),幅值和頻率的值作為偏移量查找數(shù)碼管顯示表,然后送給對(duì)應(yīng)的數(shù)碼管顯示。
2.3.2系統(tǒng)設(shè)計(jì)方框圖
第三章 典型程序模塊及編程技巧分析
3.1鍵盤掃描模塊
小鍵盤工作原理:
(1)初始化8255的工作方式:A,B口作為輸出,C口低四位作為輸入。矩陣的X1~X4接到輸出端口PA0-PA3上,用程序控制4條行線的輸出。4條列線Y1~Y4連接到輸入端口C的PC0-PC3。用讀指令讀取C口狀態(tài)時(shí),可讀取鍵盤的列號(hào)。
(2)在無(wú)鍵按下的時(shí)候,由于接到+5V上的上拉電阻的作用,列線被置成高電平。壓下某一個(gè)鍵所在的行線和列線接通。這時(shí),如果向被壓下的鍵所在的行線上輸出一個(gè)低電平信號(hào),則對(duì)應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從C口讀取列線信號(hào)時(shí),便能檢測(cè)到該列線上的低電平。
(3)掃描鍵盤時(shí),A口輸出全0,讀C口,取低四位再取反,若為0則無(wú)鍵輸入,若不為零則轉(zhuǎn)獲取鍵值子程序。獲取鍵值時(shí),對(duì)X1到X4輪流選中,即輪流輸出0。先把第一行賦0,讀C口檢測(cè)是不是第一行,不是再繼續(xù)第二行,沒(méi)有的話總共循環(huán)4次跳出循環(huán),這樣根據(jù)選中的行和讀入的列狀態(tài)中低電平的位置,便能確定哪個(gè)鍵被按下了。檢測(cè)到按鍵后,對(duì)壓下的鍵進(jìn)行編碼,將該鍵的行列信號(hào)轉(zhuǎn)化成16進(jìn)制碼,將鍵值存入緩沖區(qū),以便以后利用進(jìn)行判斷比較。接著繼續(xù)掃描按鍵,等待按鍵釋放。
具體的實(shí)現(xiàn)如下:
CCSCAN掃描按鍵是否有鍵按下: CCSCAN PROC
NEAR
;掃描是否有按鍵閉合子程序
MOV
AL,00H
MOV
DX,MY8255_A;將4列全選通,X1~X4置0
OUT
DX,AL
MOV
DX,MY8255_C
IN
AL,DX
;讀Y1~Y4
NOT
AL
AND
AL,0FH
;取出Y1~Y4的反值
RET
CCSCAN ENDP
如果有按鍵,就獲取按鍵碼的功能,4×4鍵盤的編碼, 從上到下,從左到右,依次編碼為0~F, 如果有按鍵, 則轉(zhuǎn)入到按鍵處理子程序模塊執(zhí)行, 如果沒(méi)有,則返回主程序循環(huán)。具體的實(shí)現(xiàn)代碼如下:
GETKEY1 PROC
NEAR
;獲取鍵值子程序
CALL
DIS
;顯示刷新
CALL
DALLY
;延時(shí)
CALL
DALLY
;延時(shí)
CALL
CLEAR
;清屏
CALL
JNZ
JMP
GETKEY2: MOV
MOV
COLUM: MOV
MOV
OUT
MOV
IN
L1: TEST
JNZ
MOV
JMP
L2: TEST
JNZ
MOV
JMP
L3: TEST
JNZ
MOV
JMP
L4: TEST
JNZ
MOV
KCODE: ADD
CCSCAN
;再次掃描按鍵
GETKEY2
;有鍵按下則跳置GETKEY2 BEGIN1
;否則跳回開(kāi)始繼續(xù)循環(huán)
CH,0FEH
CL,00H
;設(shè)置當(dāng)前檢測(cè)的是第幾列
AL,CH
;選取一列,將X1~X4中一個(gè)置0
DX,MY8255_A DX,AL
DX,MY8255_C;讀Y1~Y4,用于判斷哪一行按鍵閉合 AL,DX
AL,01H
;是否為第1行 L2
;不是則繼續(xù)判斷
AL,00H
;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值
KCODE
AL,02H
;是否為第2行 L3
;不是則繼續(xù)判斷
AL,04H
;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值
KCODE
AL,04H
;是否為第3行 L4
;不是則繼續(xù)判斷
AL,08H
;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值
KCODE
AL,08H
;是否為第4行 NEXT
;不是則繼續(xù)判斷
AL,0CH
;設(shè)置第4行第1列的對(duì)應(yīng)的鍵值
AL,CL
;將第1列的值加上當(dāng)前列數(shù),確定按鍵值
CALL
PUTBUF
;保存按鍵值
PUSH
AX
KON: CALL
DIS
;顯示刷新
CALL
CLEAR
;清屏
CALL
CCSCAN
;掃描按鍵,判斷按鍵是否彈起
JNZ
KON
;未彈起則繼續(xù)循環(huán)等待彈起
POP
AX
NEXT: INC
CL
;當(dāng)前檢測(cè)的列數(shù)遞增
MOV
AL,CH
TEST
AL,08H
;檢測(cè)是否掃描到第4列
JZ
KERR
;是則跳回到開(kāi)始處
ROL
AL,1
;沒(méi)檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列
MOV
CH,AL
JMP
COLUM
KERR: RET
GETKEY1 ENDP PUTBUF PROC
NEAR
;保存鍵值子程序
MOV
DI,OFFSET KEY
MOV
[DI],AL
CMP
DI,2FFFH
JNZ
GOBACK
MOV
DI,3004H
GOBACK: RET
PUTBUF ENDP
3.2數(shù)碼管顯示模塊
4個(gè)數(shù)碼管的X端為選通端,將小鍵盤的X1~X4對(duì)應(yīng)接到數(shù)碼管,這樣掃描小鍵盤的時(shí)候,也就選中了數(shù)碼管,當(dāng)調(diào)用getkey1獲取鍵值子程序的時(shí)候,數(shù)碼管輪流選中,也就可以控制哪個(gè)數(shù)碼管顯示什么內(nèi)容。通過(guò)對(duì)8255寫入數(shù)據(jù),由B口輸出給數(shù)碼管的A~Dp,當(dāng)沒(méi)有波形輸入時(shí),數(shù)碼管顯示0數(shù)碼管;定義兩個(gè)緩沖區(qū)存放幅值和頻率,有波形輸出時(shí),同步顯示該波形的幅值和頻率。
先在數(shù)據(jù)段定義一個(gè)緩沖區(qū)存放數(shù)碼管顯示0~F的段位值表: DTABLE DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB
7FH,6FH,77H,7CH,39H,5EH,79H,71H 因?yàn)橐恢憋@示數(shù)碼管,所以將顯示部分作為子程序,方便經(jīng)常調(diào)用。DIS PROC
NEAR
;顯示鍵值子程序
AGAIN:
PUSH
AX
;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值
并顯示
MOV
SI,3000H
;緩沖區(qū)3000H內(nèi)存放了當(dāng)前波形的幅
值,3001H存放了頻率。
MOV
DL,0F7H MOV
AL,DL PUSH
DX MOV
DX,MY8255_A OUT
DX,AL
;設(shè)置X1~X4,選通一個(gè)數(shù)碼管 MOV
AL,[SI]
;取出緩沖區(qū)中存放鍵值 MOV
BX,OFFSET DTABLE AND
AX,00FFH ADD
BX,AX MOV
AL,[BX]
;將鍵值作為偏移和鍵值基地址相加得到
相應(yīng)的鍵值
MOV
DX,MY8255_B OUT
DX,AL
;寫入數(shù)碼管A~Dp CALL
DALLY INC
SI
;取下一個(gè)鍵值 POP
DX MOV
AL,DL TEST
AL,01H
;判斷是否顯示完? JZ
OUT1
;顯示完,返回 ROR
AL,1 MOV
DL,AL
JMP
AGAIN
;未顯示完,跳回繼續(xù)
OUT1: POP
AX
RET
DIS ENDP 3.3有級(jí)調(diào)頻調(diào)幅判斷及控制模塊
改變波形產(chǎn)生子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,及延時(shí),就可改變整個(gè)波形的頻率。改變波形產(chǎn)生子程序中的每次輸出數(shù)值的放大倍數(shù),就可以改變整個(gè)波形的幅值。而實(shí)現(xiàn)有級(jí)變化的初值是在數(shù)據(jù)段預(yù)先定義的數(shù)據(jù)表。
在選擇波形以后,才能調(diào)節(jié)頻率和幅值,頻率和幅值的調(diào)節(jié)由小鍵盤控制。在3000H和3001H的緩沖區(qū)內(nèi)存放了幅值和頻率的初值3,在每個(gè)波形輸出之前先掃描鍵盤,鍵值存在KEY里,對(duì)KEY值進(jìn)行判斷后,取出緩沖區(qū)的初值做相應(yīng)改變:0選擇增大頻率,1選擇減小頻率,2選擇減小幅值,3選擇增大幅值,4退出波形,返回開(kāi)始狀態(tài)。
具體的實(shí)現(xiàn)代碼如下:
AMPLFENC PROC
NEAR
;調(diào)節(jié)幅值頻率子程序
CALL
DIS
;刷新
CALL
CCSCAN
;再次掃描按鍵
JNZ
TRI1
;有鍵按下則跳置tri1
JMP
TRI5
;沒(méi)按鍵按下就跳出該子程序
TRI1: CALL
DIS
;刷新
CALL
GETKEY1
MOV
SI,OFFSET KEY
MOV
AL,[SI]
CMP
AL,4
;第五個(gè)鍵就退出
JZ
TRI10
JZ
TRI5
CMP
AL,0
;第一個(gè)鍵減少周期
JNZ
TRI2
MOV
DI,3001H
;取延時(shí)初值
MOV
BL,[DI]
CMP
BL,01H
JE
TRI5
DEC
BL
MOV
[DI],BL
JMP
TRI5
TRI2: CMP
AL,1
;第二個(gè)鍵增加周期
JNZ
MOV
MOV
CMP
JE
INC
MOV
JMP
TRI3: CMP
JNZ
MOV
MOV
CMP
JE
DEC
MOV
JMP
TRI4: CMP
JNZ
MOV
MOV
CMP
JE
INC
MOV
JMP
TRI3
DI,3001H BL,[DI] BL,05H TRI5 BL [DI],BL TRI5
AL,2
TRI4 DI,3000H
BL,[DI]
BL,01H TRI5 BL [DI],BL TRI5
AL,3
TRI5 DI,3000H
BL,[DI]
BL,05H TRI5 BL [DI],BL TRI5
;取延時(shí)初值;第三個(gè)鍵減少幅度
;取幅值初值;第四個(gè)鍵增加幅度
;取幅值初值
TRI10: JMP
FAR PTR BEGIN0
TRI5: RET
AMPLFENC ENDP
3.4 波形切換及基本控制模塊
這個(gè)模塊是本次設(shè)計(jì)的主程序,它控制了波形的輸出和切換。它是根據(jù)對(duì)小鍵盤的操作來(lái)實(shí)現(xiàn)的,不同按鍵對(duì)應(yīng)的編碼轉(zhuǎn)入不同模塊(0:方波,1:三角波,2:鋸齒波,3:正弦波,4:退出波形)。先掃描鍵盤是否有鍵按下,若無(wú)循環(huán)等待,若有則將鍵值保存再比較,然后實(shí)現(xiàn)相應(yīng)操作。為使程序可循環(huán)使用,不至于顯示一次波形就退出,在執(zhí)行完子程序返回時(shí),不退出系統(tǒng),而是返回到開(kāi)始等待輸入狀態(tài),這樣就能切換波形。
具體的實(shí)現(xiàn)代碼如下:
BEGIN0: MOV
SI,3000H
;把數(shù)碼管清0
MOV
AL,00H
;先初始化鍵值為0
MOV
[SI],AL
MOV
AL,00H
MOV
[SI+1],AL
MOV
AL,00H
MOV
[SI+2],AL
MOV
AL,00H
MOV
[SI+3],AL
MOV
SI,OFFSET KEY
MOV
AL,00H
MOV
[SI],AL BEGIN1: CALL
DIS
;顯示刷新
CALL
CCSCAN
;再次掃描按鍵
JNZ
LBEGIN0
;有鍵按下則跳置LBEGIN0
JMP
BEGIN1;不是按下第一或二鍵就繼續(xù)等待輸入
LBEGIN0: CALL
GETKEY1
;第二個(gè)菜單等待輸入
CALL
DIS
MOV
SI,OFFSET KEY
MOV
AL,[SI]
CMP
AL,4
;第5個(gè)鍵退出
JZ
BEGIN0
CMP
AL,0
;第1個(gè)鍵到squ(方波)函數(shù)
JZ
LBEGIN1
CMP
AL,1
;第2個(gè)鍵到tri(三角波)函數(shù)
JZ
LBEGIN2
CMP
AL,2
;第3個(gè)鍵到rec(鋸齒)函數(shù)
JZ
LBEGIN3
CMP
AL,3
;第4個(gè)鍵到sin(正弦)函數(shù)
JZ
LBEGIN4
JMP
BEGIN1
;其他鍵則跳到繼續(xù)等待輸入
LBEGIN1: CALL
SQUREW
;SQUARE
JMP
BEGIN0
LBEGIN2: CALL
TRIW
;TRIANGLE
JMP
BEGIN0
LBEGIN3: CALL
RCTW
;RECANGLE
JMP
BEGIN0
LBEGIN4: CALL
SINW
;SIN
JMP
BEGIN0
;執(zhí)行完輸出波形之后 回到開(kāi)始狀態(tài)
JMP
BEGIN0
3.5波形產(chǎn)生模塊 3.5.1方波
方波的產(chǎn)生只要使DAC0832輸出一個(gè)較大值(此處用20H),并延時(shí)一段時(shí)間,再輸出一個(gè)較小值(此處用00F),延時(shí)一段相同時(shí)間,就是方波的一個(gè)周期。但因?yàn)閷?shí)現(xiàn)過(guò)程中結(jié)合了數(shù)碼管的顯示以及頻率幅值的調(diào)節(jié)所以并不那么簡(jiǎn)單。先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,無(wú)鍵按下則繼續(xù),有鍵按下則先判斷是否為0到3,是則調(diào)節(jié)頻率幅值,是4則退出波形。執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),把低電平的值乘以TIAOFU輸出,延遲時(shí)間乘以TIAOPIN,使該值持續(xù)一段時(shí)間,輸出高電平的過(guò)程與低電平相同,循環(huán)該周期就得到連續(xù)方波。
具體的實(shí)現(xiàn)代碼如下:
SQUREW PROC
NEAR
;方波發(fā)生子程序
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
SQUR1: CALL 調(diào)節(jié)幅值頻率
MOV
MOV
CMP
JZ
CALL
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
TRILOOP1: MOV
MOV
DI,OFFSET FENC
;初始化顯示管的值為3
AL,[DI]
SI,3000H
[SI],AL
DI,OFFSET AMPL
AL,[DI]
SI,3001H
[SI],AL
AMPLFENC
;調(diào)節(jié)幅值頻率子程序,有鍵按下是
SI,OFFSET KEY
;按下第五個(gè)鍵就退出
AL,4
[SI],AL
SQUA
DIS
;刷新數(shù)碼管
SI,3000H
BL,[SI]
DI,OFFSET TIAOFU
[DI],BL
SI,3001H
AL,[SI]
SI,OFFSET TIAOPIN
[SI],AL
DX,DA0832
;輸出低電平
輸出方波形
AL,00H
OUT
DX,AL
CALL
DIS
;刷新
PUSH
CX
PUSH
AX
MOV
CL,TIAOPIN
MOV
CH,00H
D11: MOV
D21: DEC
PUSH
PUSH
CALL
CALL
JNZ
POP
POP
JNZ
LOOP
POP
POP
CALL
JNZ
MOV
MOV
MUL
MOV
OUT
CALL
PUSH
PUSH
MOV
MOV
D12: MOV
AX,00FFH AX AX CX DIS
CCSCAN
;再次掃描按鍵 SQUR1
;有鍵按下則跳置squr1, CX AX D21 D11 AX CX
CCSCAN
;再次掃描按鍵
SQUR1;有鍵按下則跳置squr1,改變幅值頻率 BL,TIAOFU AL,20H BL
DX,DA0832
;輸出高電平DX,AL
DIS
;刷新 CX AX CL,TIAOPIN CH,00H AX,00FFH
D22: DEC
AX
PUSH
AX
PUSH
CX
CALL
DIS
CALL
CCSCAN
;再次掃描按鍵
JNZ
SQUR1
;有鍵按下則跳置tri1
POP
CX
POP
AX
JNZ
D22
LOOP
D12
POP
AX
POP
CX
JZ
TRILOOP1
;沒(méi)按鍵時(shí)繼續(xù)輸出波形
SQUA: RET
SQUREW ENDP
3.5.2三角波
三角波理論上有兩段,上升和下降,上升時(shí)從最低值開(kāi)始自增,直到最大值,然后再自減至最低。本設(shè)計(jì)中,因?yàn)閷?duì)波形精度要求不是很高,所以采用按列表輸出的方式,即先在數(shù)據(jù)段定義了一段三角波一個(gè)周期內(nèi)的采樣值的數(shù)字量表,采樣頻率為60點(diǎn)/周期。數(shù)字量表中的值為參考值,輸出三角波時(shí)通過(guò)把表中的每個(gè)值乘以相同的倍數(shù),該倍數(shù)為我們?cè)O(shè)定的幅值。波形輸出方式都相同,這里簡(jiǎn)要說(shuō)明:先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),將第一個(gè)數(shù)字量乘以TIAOFU輸出,延遲時(shí)間乘以TIAOPIN,再掃描,輸出第二個(gè)值,直到指針指完該數(shù)字量表再循環(huán)該周期就得到連續(xù)三角波。
具體的實(shí)現(xiàn)代碼如下:
TRITAB
DB
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;三角函數(shù)表
DB
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
DB
30,29,28,27,26,25,24,23,22,21,20,19,18,17,16
DB
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 TRIW PROC
NEAR
;三角波形子程序
MOV
DI,OFFSET FENC
MOV
AL,[DI]
MOV
SI,3000H
MOV
[SI],AL
TRA1:
TRLOOP1:
TRLOOP2:
MOV
DI,OFFSET AMPL MOV
AL,[DI] MOV
SI,3001H MOV
[SI],AL CALL
AMPLFENC MOV
SI,OFFSET KEY MOV
AL,4 CMP
[SI],AL JZ
TRIA CALL
DIS MOV
SI,3000H MOV
BL,[SI] MOV
DI,OFFSET TIAOFU MOV
[DI],BL MOV
SI,3001H MOV
AL,[SI] MOV
SI,OFFSET TIAOPIN MOV
[SI],AL MOV
SI,OFFSET TRITAB MOV
AL,[SI] MOV
BL,TIAOFU MUL
BL MOV
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換 OUT
DX,AL PUSH
AX PUSH
SI
PUSH
CX
MOV
CL,TIAOPIN
MOV
CH,00H
DALLYTRI1: CALL
DIS
CALL
CCSCAN
JNZ
TRA1
LOOP
DALLYTRI1
POP
CX
POP
SI
POP
AX
INC
SI
CMP
SI,OFFSET RCTTAB
JNZ
TRLOOP2
JMP
TRLOOP1
TRIA: RET
TRIW ENDP
3.5.3鋸齒波
鋸齒波就是截取了三角波的上升部分,由最小值自增到達(dá)最大值后下一個(gè)值就返回最小值。本設(shè)計(jì)中鋸齒波的產(chǎn)生方式也是對(duì)鋸齒波采樣,采樣周期為32點(diǎn)/周期,然后以采樣表為基礎(chǔ)輸出。鋸齒波的輸出方式與三角波相同,這里不再重復(fù)。
具體的實(shí)現(xiàn)代碼如下:
先在數(shù)據(jù)段定義一張鋸齒波采樣后的數(shù)字量表: RCTTAB DB
1,2,3,4,5,6,7,8
;鋸齒函數(shù)表
DB
9,10,11,12,13,14,15,16
DB
17,18,19,20,21,22,23,24
DB
25,26,27,28,29,30,31,32 RCTW PROC
NEAR
;鋸齒波形子程序
MOV
DI,OFFSET FENC
MOV
AL,[DI]
MOV
SI,3000H
MOV
[SI],AL
MOV
DI,OFFSET AMPL
MOV
AL,[DI]
MOV
SI,3001H
MOV
[SI],AL
RCT1: CALL
AMPLFENC
MOV
MOV
CMP
JZ
CALL
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
RCLOOP1: MOV
RCLOOP2: MOV
MOV
MUL
MOV
OUT
PUSH
PUSH
PUSH
MOV
MOV
DALLYRCT1: CALL
CALL
SI,OFFSET KEY AL,4 [SI],AL DIS SI,3000H BL,[SI]
DI,OFFSET TIAOFU [DI],BL SI,3001H AL,[SI]
SI,OFFSET TIAOPIN [SI],AL
SI,OFFSET RCTTAB AL,[SI] BL,TIAOFU BL
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換 DX,AL AX SI CX CL,TIAOPIN CH,00H
;刷新,掃描,延時(shí)CCSCAN
RCTA
DIS
JNZ
RCT1
LOOP
DALLYRCT1
POP
CX
POP
SI
POP
AX
INC
SI
;下一個(gè)值
CMP
SI,OFFSET STR1
JNZ
RCLOOP2
JMP
RCLOOP1
RCTA: RET
RCTW ENDP
3.5.4正弦波
正弦波的產(chǎn)生方式有兩種,一種是通過(guò)調(diào)用函數(shù)輸出,精度較高,第二種為采樣查表法。本實(shí)驗(yàn)精度要求不高,所以采用第二種。該方法與前面的三角波,鋸齒波方法相同,對(duì)一個(gè)周期內(nèi)的正弦波采樣,采樣周期為40點(diǎn)/周期,輸出方式與三角波相同,不再重復(fù)。
先在數(shù)據(jù)段定義正弦波的采樣數(shù)字量表:
SINTAB DB
16,19,21,23,25,27,29,30,31,32,32,32
;正弦函數(shù)表
DB
31,30,29,27,25,23,21,19,16,13,11,9
DB
7,5,3,2,1,0,0,0,1,2,3,5,7,9,11,13 SINW PROC
NEAR
;正弦波的子程序
MOV
DI,OFFSET FENC
MOV
AL,[DI]
MOV
SI,3000H
;取幅值初值
MOV
[SI],AL
MOV
DI,OFFSET AMPL
MOV
AL,[DI]
MOV
SI,3001H
;取頻率初值
MOV
[SI],AL
SINA1: CALL
AMPLFENC
MOV
SI,OFFSET KEY
MOV
AL,4
CMP
[SI],AL
JZ
SINA
CALL
DIS
MOV
SI,3000H
MOV
BL,[SI]
MOV
MOV
MOV
MOV
MOV
MOV
SINLOOP1: MOV
SINLOOP2: MOV
MOV
MUL
MOV
OUT
PUSH
PUSH
PUSH
MOV
MOV
DALLYSIN1: CALL
CALL
JNZ
LOOP
POP
POP
POP
INC
CMP
DI,OFFSET TIAOFU [DI],BL SI,3001H AL,[SI]
SI,OFFSET TIAOPIN [SI],AL
SI,OFFSET SINTAB AL,[SI] BL,TIAOFU BL
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換
DX,AL AX SI CX CL,TIAOPIN CH,00H CCSCAN SINA1 DALLYSIN1 CX SI AX SI
SI,OFFSET TRITAB
;是否結(jié)束一個(gè)周期
DIS
JNZ
SINLOOP2
JMP
SINLOOP1
SINA: RET
SINW ENDP
第四章 系統(tǒng)調(diào)試遇到的問(wèn)題及解決方法
本次課程設(shè)計(jì)是對(duì)前幾次微機(jī)原理實(shí)驗(yàn)的檢驗(yàn),也是微機(jī)原理與接口技術(shù)這門課程的綜合應(yīng)用。前幾次軟件實(shí)驗(yàn),我都積極地實(shí)現(xiàn)了拓展題目的要求,所以在選擇課題的時(shí)候,我第一印象就感覺(jué)到信號(hào)發(fā)生器對(duì)軟件要求要大于硬件要求,重點(diǎn)是編程,所以,在選擇了這個(gè)題目以后我就開(kāi)始思考用何種方式實(shí)現(xiàn)。
整體分析后,硬件電路的系統(tǒng)設(shè)計(jì)比較簡(jiǎn)單,主程序的設(shè)計(jì)思路也比較清晰,主要分為波形產(chǎn)生,數(shù)碼管顯示,鍵盤控制,頻率幅值調(diào)節(jié)四個(gè)模塊。但是具體每個(gè)模塊的實(shí)現(xiàn)卻又遇到了很多的問(wèn)題,方案上也有些調(diào)整。
在此次實(shí)驗(yàn)系統(tǒng)調(diào)試的過(guò)程中,把整個(gè)大的程序劃分為幾個(gè)小模塊分開(kāi)調(diào)試好,無(wú)誤后再寫主程序?qū)⒏鱾€(gè)子程序整合起來(lái)。雖然一開(kāi)始感覺(jué)思路是很好的,但是在實(shí)現(xiàn)過(guò)程中遇到了很大的麻煩。
1.硬件的連線。硬件連好后,將方波子程序載入8086,最開(kāi)始示波器連輸出都沒(méi)有,DAC0832的片選端一直沒(méi)有被選中,我總是以為是地址的問(wèn)題,可是怎么檢查程序也是沒(méi)有理由出錯(cuò)的,最后發(fā)現(xiàn)DAC0832的WR端虛接了,軟件畫圖容易出現(xiàn)虛接的情況,所以連線的時(shí)候一定要小心。
2.小鍵盤控制,這也是整個(gè)程序中最核心的部分。這個(gè)子程序加在程序的最前面的,如果沒(méi)有掃描到鍵值,整個(gè)程序就會(huì)陷入死循環(huán),不會(huì)有任何輸出變化。要使鍵盤掃描得到鍵值,我參考了實(shí)驗(yàn)指導(dǎo)書上的小鍵盤控制,先把小鍵盤掃描的程序單獨(dú)給出來(lái),看能否顯示數(shù)字,結(jié)果并不能正常顯示,反復(fù)檢查調(diào)試以后,修改了鍵值的存儲(chǔ)方式以及延時(shí),將其修改后,小鍵盤方面能正常掃描了。
3.其實(shí)最復(fù)雜的是將數(shù)碼管顯示和小鍵盤掃描整合在一起。數(shù)碼管顯示問(wèn)題一直很復(fù)雜,總是不能正常的顯示,明明小鍵盤Y端有變化,表明有鍵按下,但是數(shù)碼管就是不能將要顯示的數(shù)平穩(wěn)地顯示,剛開(kāi)始只顯示零,后來(lái)經(jīng)修改后,會(huì)偶爾顯示一下幅值或頻率但又立馬變了,并且顯示的數(shù)字也不正確,貌似會(huì)和之前顯示的數(shù)字有重雙影。查唐都的實(shí)驗(yàn)說(shuō)明得知,數(shù)碼管只提供了一個(gè)8位數(shù)據(jù)端口,一次只能讓一個(gè)數(shù)碼管顯示數(shù)據(jù),然后顯示過(guò)程特別地快,基本上看不到想要的結(jié)果,并且閃爍得特別厲害。經(jīng)過(guò)反復(fù)一直地查找修改,終于發(fā)現(xiàn),有兩個(gè)數(shù)碼管顯示的內(nèi)容重疊了,原來(lái)是要顯示的兩個(gè)存儲(chǔ)單元的地址弄混了,并且延時(shí)也有問(wèn)題。但是數(shù)碼管的延時(shí)又涉及到波形每個(gè)輸出點(diǎn)的延時(shí),所以將波形產(chǎn)生方面,我改用了采樣數(shù)字量表,使所有的波形產(chǎn)生都簡(jiǎn)化了,同時(shí)也使延時(shí)更短,改為增加循環(huán)次數(shù),并且使數(shù)碼管顯示也加入循環(huán)里,這樣利用視覺(jué)暫留,就能看到同時(shí)顯示幅值和頻率。
4.在小鍵盤實(shí)現(xiàn)中還出現(xiàn)了一個(gè)很重要的問(wèn)題,就是在執(zhí)行到對(duì)應(yīng)的波形時(shí)要怎么樣跳出然后執(zhí)行到另外一個(gè)波形里面去。原本我想多設(shè)置幾個(gè)按鍵,4個(gè)負(fù)責(zé)選擇波形,4個(gè)負(fù)責(zé)調(diào)幅調(diào)頻,還要加一個(gè)退出按鍵,每輸出一個(gè)周期就掃描一次,可是這樣按鍵太多了程序顯得臃腫,并且沒(méi)有波形的情況調(diào)節(jié)頻率也是沒(méi)有意義的,而且一個(gè)周期的時(shí)間,很有可能使你的按鍵落空,沒(méi)有掃描進(jìn)去。最后決定只用5個(gè)鍵。沒(méi)有波形時(shí)4個(gè)按鍵選擇波形,每次執(zhí)行完一個(gè)點(diǎn)后再重新鍵盤掃描,此時(shí)那4個(gè)鍵又代表調(diào)幅和調(diào)頻,而4鍵從始至終設(shè)置為退出鍵,只要任何時(shí)候掃描到此鍵就返回初始狀態(tài),重新進(jìn)入波形選擇,這樣就實(shí)現(xiàn)了波形的切換,又使按鍵有效率更高,而且按鍵數(shù)量也很少。
5.方波和三角波的波形產(chǎn)生的程序并不難。鋸齒波就是截取三角波的一半,而正弦波,我找到的正弦波采樣值序列表都很長(zhǎng),而且值都比較大,所以最后,我用計(jì)算器在0~2π內(nèi)取了40個(gè)點(diǎn)的正弦值。最后在調(diào)節(jié)幅值的時(shí)候,當(dāng)調(diào)到最大幅值時(shí),有兩種波形失真了,尤其正弦波和三角波形被截頂了。但是我觀察到鋸齒波卻能正常顯示,原來(lái)鋸齒波的采樣數(shù)字量表的最大值比較小,經(jīng)放大最大倍數(shù)后也沒(méi)有超出范圍。這可能是因?yàn)榉糯蠛笳也ǖ淖畲笾狄呀?jīng)超出了運(yùn)放輸出的最大電壓,所以導(dǎo)致截頂失真。所以我將數(shù)字量的值整體縮小了,最后總算達(dá)到滿意的效果。第五章 課程設(shè)計(jì)收獲與體會(huì)
本次課程設(shè)計(jì)在面臨考試的巨大壓力和編程難度的雙重壓力下終于完成了。這讓我對(duì)于微機(jī)原理與接口技術(shù)這門課程又有了更深的了解,尤其是匯編語(yǔ)言的運(yùn)用。這是一次很好的實(shí)踐的機(jī)會(huì),將我們之前幾個(gè)星期做的微機(jī)原理與接口技術(shù)實(shí)驗(yàn)的軟件和硬件部分都結(jié)合起來(lái),靈活的運(yùn)用,鍛煉我們學(xué)以致用,解決實(shí)際問(wèn)題的能力。我在此次課程設(shè)計(jì)中受益匪淺,收獲良多。
本次設(shè)計(jì)我是用仿真完成的,因?yàn)樯蠈W(xué)期在模電數(shù)電課程設(shè)計(jì)中也使用到了protues軟件,所以這次的設(shè)計(jì),對(duì)于protues的使用我一點(diǎn)也不陌生。但是,這次的仿真比起以前模電數(shù)電仿真要復(fù)雜多了。因?yàn)檫@次我選擇的信號(hào)發(fā)生器重點(diǎn)就是匯編語(yǔ)言程序的編寫和調(diào)試,程序出現(xiàn)的錯(cuò)誤比硬件出現(xiàn)的錯(cuò)要難找的多,尤其是邏輯錯(cuò)誤,有的時(shí)候看都看不出來(lái)。但是我還是比較喜歡匯編語(yǔ)言的,可能是對(duì)C已經(jīng)忘得差不多了的緣故吧,腦子里只有匯編。匯編是一門很原始的語(yǔ)言,但是也是一門很有用的語(yǔ)言,通過(guò)這么一個(gè)比較大的實(shí)驗(yàn),讓我對(duì)匯編的理解有了進(jìn)一步的加深。雖然中間過(guò)程有苦有煎熬,但是還是很值得回味的,因?yàn)槲覀兙褪窃谶@樣一次又一次煎熬中才熬出了頭,才不斷成長(zhǎng)為更加強(qiáng)大的人。
在這次設(shè)計(jì)中,一開(kāi)始想的比較簡(jiǎn)單和樂(lè)觀,因?yàn)樵谧鑫C(jī)原理編程實(shí)驗(yàn)的時(shí)候,我們接觸的都是幾十行到一百來(lái)行的小程序,寫完一檢查就能比較輕松地查找到錯(cuò)誤,但是這次的題目重點(diǎn)就在編程。一開(kāi)始,我以為這些程序不會(huì)錯(cuò),電路也比較簡(jiǎn)單。所以當(dāng)我很快的連好電路,再幾個(gè)子程序都加載進(jìn)去的時(shí)候,就完全不是我想象的那樣輸出。而且從整個(gè)電路分析,我也找不到問(wèn)題到底出在哪里。我必須要一步一步地再回頭檢查錯(cuò)誤。這樣有可能還檢查不出來(lái),最后我只能從一個(gè)小模塊開(kāi)始重新連電路,再將該模塊對(duì)應(yīng)的程序加載,有問(wèn)題再改。就這樣,一步一步,只有解決了局部的問(wèn)題,才能為解決整體的問(wèn)題提供可能。
在小鍵盤和數(shù)碼管顯示的模塊,確實(shí)一度陷入瓶頸,不知道問(wèn)題出在哪里,為什么就是不能顯示。我去了幾次實(shí)驗(yàn)室,想和大家交流一下,但是選擇這個(gè)題目的人真的很少,最后找到幾個(gè)同學(xué),但是他們迫于考試壓力要么放棄了仿真,要么放棄了小鍵盤,當(dāng)時(shí)的情緒真是非常抑郁,難道就真的做不出來(lái)了嗎?怎么可能?就是不相信,感覺(jué)就差一點(diǎn)點(diǎn),就要實(shí)現(xiàn)了,因?yàn)閳?jiān)持,因?yàn)閳?jiān)信,因?yàn)閳?jiān)定,哪怕這個(gè)茬再難找也會(huì)原形畢露的。當(dāng)看到數(shù)碼管顯示正常,自己的心血終于有了結(jié)果,內(nèi)心的喜悅溢于言表。有句話說(shuō)得對(duì):失敗就是離成功最近的地方,邁過(guò)去了就是另一片天。
這次的課程設(shè)計(jì),我要十分感謝同學(xué)們給予我的幫助,還有李志明老師的指導(dǎo),讓我在短短的幾個(gè)星期里學(xué)到了很多很實(shí)用的知識(shí),通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才是真正的知識(shí),才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。而且在做課程設(shè)計(jì)的過(guò)程中,不僅是考驗(yàn)自己所學(xué)的《微機(jī)原理》知識(shí),更是要鍛煉自己的分析問(wèn)題的能力和解決實(shí)際問(wèn)題的能力,而在此次課程設(shè)計(jì)過(guò)程中得到了充分的體現(xiàn)。雖然在設(shè)計(jì)的過(guò)程遇到了各種各樣的問(wèn)題,但同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì),把以前所學(xué)過(guò)的知識(shí)重新溫習(xí),加以鞏固。
這回顧起此次課程設(shè)計(jì),我收獲頗豐,不僅鞏固了《微機(jī)原理》的知識(shí),而且鍛煉了動(dòng)手設(shè)計(jì),解決實(shí)際問(wèn)題的能力,同時(shí)讓我堅(jiān)定了一個(gè)信念,學(xué)習(xí)上,沒(méi)有攀登不了的山峰,即使山重水復(fù)疑無(wú)路,只要堅(jiān)持下去,也會(huì)看到柳暗花明又一村。在今后的學(xué)習(xí)中,我也會(huì)將以這樣的精神面對(duì)所有的困難。
第六章 參考文獻(xiàn)
1.《微機(jī)原理與接口技術(shù)(第4版)》周荷琴等 中國(guó)科學(xué)技術(shù)大學(xué)出版社 2.《TD-PIT+實(shí)驗(yàn)教程》 3.《TD-PIT+用戶手冊(cè)》
第七章 附錄
7.1匯編源程序
IOY0 EQU
0C400H
;片選IOY0對(duì)應(yīng)的端口始地址
IOY1 EQU
0C440H
;片選IOY0對(duì)應(yīng)的端口始地址;*****************************************************************
MY8255_A EQU
IOY0+00H*4;8255的A口地址
MY8255_B EQU
IOY0+01H*4;8255的B口地址
MY8255_C EQU
IOY0+02H*4;8255的C口地址
MY8255_MODE EQU
IOY0+03H*4;8255的控制寄存器地址
DA0832 EQU
IOY1+00H*4;DA0832的端口地址
STACK1 SEGMENT
STACK
DW
256 DUP(?)
STACK1 ENDS
DATA SEGMENT
DTABLE DB
3FH,06H,5BH,4FH,66H,6DH,7DH DB
07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
;鍵值表,0~F對(duì)應(yīng)的7段數(shù)碼管的段位值
SINTAB DB
16,19,21,23,25,27,29,30,31,32,32,32 DB
31,30,29,27,25,23,21,19,16
;正弦函數(shù)表
DB
13,11,9,7,5,3,2,1,0,0,0,1,2,3,5,7,9,11,13
TRITAB DB
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;三角函數(shù)表
DB
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
DB
30,29,28,27,26,25,24,23,22,21,20,19,18,17,16
DB
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
RCTTAB DB
1,2,3,4,5,6,7,8
;鋸齒函數(shù)表
DB
9,10,11,12,13,14,15,16
DB
17,18,19,20,21,22,23,24
DB
25,26,27,28,29,30,31,32
STR1 DB
'press 0~3 to output wave',0AH,0DH
DB
'press 4to quit ',0AH,0DH,'$'
AMPL DB
FENC DB
TIAOFU DB
?
TIAOPIN DB
?
KEY DB
?
DATA ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START: MOV
AX,DATA
MOV
DS,AX
MOV
DX,MY8255_MODE
;初始化8255工作方式
MOV
AL,81H
;方式0,A口、B口輸出,C口低4位輸入
OUT
DX,AL
BEGIN0: MOV
SI,3000H
;把數(shù)碼管清0
MOV
AL,00H
;先初始化鍵值為0
MOV
[SI],AL
MOV
AL,00H
MOV
[SI+1],AL
MOV
AL,00H
MOV
[SI+2],AL
MOV
AL,00H
MOV
[SI+3],AL
MOV
SI,OFFSET KEY
MOV
AL,00H
MOV
[SI],AL
BEGIN1: CALL
DIS
;顯示刷新
CALL
CCSCAN
;再次掃描按鍵
JNZ
LBEGIN0
;有鍵按下則跳置LBEGIN0
JMP
BEGIN1
;不是按下第一或二鍵就繼續(xù)等待輸入
LBEGIN0: CALL
GETKEY1
;第二個(gè)菜單等待輸入
CALL
DIS
MOV
SI,OFFSET KEY
MOV
AL,[SI]
CMP
AL,4
;第5個(gè)鍵退出
JZ
BEGIN0
CMP
AL,0
;第1個(gè)鍵到squ(方波)函數(shù)
JZ
CMP
JZ
CMP
JZ
CMP
JZ
JMP
LBEGIN1: CALL
JMP
LBEGIN2: CALL
JMP
LBEGIN3: CALL
JMP
LBEGIN4: CALL
JMP
JMP
SQUREW PROC
MOV
MOV
MOV
MOV
MOV
MOV
MOV
LBEGIN1
AL,1
;第2個(gè)鍵到tri(三角波)函數(shù) LBEGIN2
AL,2
;第3個(gè)鍵到rec(鋸齒)函數(shù) LBEGIN3
AL,3
;第4個(gè)鍵到sin(正弦)函數(shù) LBEGIN4
BEGIN1
;其他鍵則跳到繼續(xù)等待輸入 SQUREW
;SQUARE BEGIN0
TRIW
;TRIANGLE BEGIN0
RCTW
;RECANGLE BEGIN0
SINW
;SIN
BEGIN0
;執(zhí)行完輸出波形之后 回到開(kāi)始狀態(tài) BEGIN0
;上面是主程序
NEAR
;方波發(fā)生子程序
DI,OFFSET FENC
;初始化顯示管的值為3 AL,[DI] SI,3000H [SI],AL
DI,OFFSET AMPL AL,[DI] SI,3001H
MOV
[SI],AL
SQUR1: CALL
AMPLFENC
;調(diào)節(jié)幅值頻率子程序,有鍵按下是調(diào)節(jié)幅值頻率
MOV
SI,OFFSET KEY
;按下第五個(gè)鍵就退出
MOV
AL,4
CMP
[SI],AL
TRILOOP1:
D11:
D21:
JZ
SQUA CALL
DIS MOV
SI,3000H MOV
BL,[SI] MOV
DI,OFFSET TIAOFU MOV
[DI],BL MOV
SI,3001H MOV
AL,[SI] MOV
SI,OFFSET TIAOPIN MOV
[SI],AL
DX,DA0832
;輸出低電平
輸出方波形 MOV
AL,00H OUT
DX,AL CALL
DIS
;刷新 PUSH
CX PUSH
AX MOV
CL,TIAOPIN MOV
CH,00H MOV
AX,00FFH DEC
AX PUSH
AX PUSH
CX CALL
DIS CALL
CCSCAN
;再次掃描按鍵 JNZ
SQUR1
;有鍵按下則跳置squr1, POP
CX
MOV
POP
AX
JNZ
D21
LOOP
D11
POP
AX
POP
CX
CALL
CCSCAN
;再次掃描按鍵
JNZ
MOV
MOV
MUL
MOV
OUT
CALL
PUSH
PUSH
MOV
MOV
D12: MOV
D22: DEC
PUSH
PUSH
CALL
CALL
JNZ
POP
POP
JNZ
LOOP
POP
POP
JZ
SQUA: RET
SQUR1
;有鍵按下則跳置squr1,改變幅值頻率 BL,TIAOFU AL,20H BL
DX,DA0832
;輸出高電平
DX,AL
DIS
;刷新
CX AX CL,TIAOPIN CH,00H AX,00FFH AX AX CX DIS
CCSCAN
;再次掃描按鍵 SQUR1
;有鍵按下則跳置tri1 CX AX D22 D12 AX CX
TRILOOP1
;沒(méi)按鍵時(shí)繼續(xù)輸出波形
SQUREW ENDP
TRIW PROC
NEAR
;三角波形子程序
MOV
DI,OFFSET FENC
MOV
AL,[DI]
MOV
SI,3000H
TRA1:
TRLOOP1:
TRLOOP2:
MOV
[SI],AL MOV
DI,OFFSET AMPL MOV
AL,[DI] MOV
SI,3001H MOV
[SI],AL CALL
AMPLFENC MOV
SI,OFFSET KEY MOV
AL,4 CMP
[SI],AL JZ
TRIA CALL
DIS MOV
SI,3000H MOV
BL,[SI] MOV
DI,OFFSET TIAOFU MOV
[DI],BL MOV
SI,3001H MOV
AL,[SI] MOV
SI,OFFSET TIAOPIN MOV
[SI],AL MOV
SI,OFFSET TRITAB MOV
AL,[SI] MOV
BL,TIAOFU MUL
BL MOV
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換 OUT
DX,AL PUSH
AX
PUSH
SI
PUSH
CX
MOV
CL,TIAOPIN
MOV
CH,00H
DALLYTRI1: CALL
DIS
CALL
CCSCAN
JNZ
LOOP
POP
POP
POP
INC
CMP
JNZ
JMP
TRIA: RET
TRIW ENDP
RCTW PROC
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
RCT1: CALL
MOV
MOV
CMP
JZ
CALL
TRA1 DALLYTRI1 CX SI AX SI
SI,OFFSET RCTTAB TRLOOP2 TRLOOP1
NEAR
;鋸齒波形子程序 DI,OFFSET FENC AL,[DI] SI,3000H [SI],AL
DI,OFFSET AMPL AL,[DI] SI,3001H [SI],AL AMPLFENC SI,OFFSET KEY AL,4 [SI],AL RCTA DIS
MOV
SI,3000H
MOV
BL,[SI]
MOV
DI,OFFSET TIAOFU
MOV
[DI],BL
MOV
SI,3001H
MOV
AL,[SI]
MOV
MOV
RCLOOP1: MOV
RCLOOP2: MOV
MOV
MUL
MOV
OUT
PUSH
PUSH
PUSH
MOV
MOV
DALLYRCT1: CALL
CALL
JNZ
LOOP
POP
POP
POP
INC
CMP
JNZ
JMP
RCTA: RET
RCTW ENDP
SI,OFFSET TIAOPIN [SI],AL
SI,OFFSET RCTTAB AL,[SI] BL,TIAOFU BL
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換 DX,AL AX SI CX CL,TIAOPIN CH,00H CCSCAN RCT1 DALLYRCT1 CX SI AX SI
SI,OFFSET STR1 RCLOOP2 RCLOOP1
DIS
SINW PROC
NEAR
;正弦波的子程序
MOV
DI,OFFSET FENC
MOV
AL,[DI]
MOV
SI,3000H
MOV
[SI],AL
SINA1:
SINLOOP1:
SINLOOP2:
MOV
DI,OFFSET AMPL MOV
AL,[DI] MOV
SI,3001H MOV
[SI],AL CALL
AMPLFENC MOV
SI,OFFSET KEY MOV
AL,4 CMP
[SI],AL JZ
SINA CALL
DIS MOV
SI,3000H MOV
BL,[SI] MOV
DI,OFFSET TIAOFU MOV
[DI],BL MOV
SI,3001H MOV
AL,[SI] MOV
SI,OFFSET TIAOPIN MOV
[SI],AL MOV
SI,OFFSET SINTAB MOV
AL,[SI] MOV
BL,TIAOFU MUL
BL MOV
DX,DA0832
;啟動(dòng)D/A轉(zhuǎn)換 OUT
DX,AL PUSH
AX PUSH
SI
PUSH
CX
MOV
CL,TIAOPIN
MOV
CH,00H
DALLYSIN1: CALL
DIS
CALL
CCSCAN
JNZ
SINA1
LOOP
POP
POP
POP
INC
CMP
JNZ
JMP
SINA: RET
SINW ENDP
AMPLFENC PROC
CALL
CALL
JNZ
JMP
TRI1: CALL
CALL
MOV
MOV
CMP
JZ
JZ
CMP
JNZ
MOV
DALLYSIN1 CX SI AX SI
SI,OFFSET TRITAB SINLOOP2 SINLOOP1
NEAR
;調(diào)節(jié)幅值頻率子程序 DIS
;刷新
CCSCAN
;再次掃描按鍵 TRI1
;有鍵按下則跳置tri1 TRI5
;沒(méi)按鍵按下就跳出該子程序DIS
;刷新 GETKEY1
SI,OFFSET KEY
AL,[SI]
AL,4
;第五個(gè)鍵就退出 TRI10 TRI5
AL,0
;第一個(gè)鍵減少周期 TRI2
DI,3001H
MOV
BL,[DI]
CMP
BL,01H
JE
TRI5
DEC
BL
MOV
[DI],BL
JMP
TRI5
TRI2: CMP
JNZ
MOV
MOV
CMP
JE
INC
MOV
JMP
TRI3: CMP
JNZ
MOV
MOV
CMP
JE
DEC
MOV
JMP
TRI4: CMP
JNZ
MOV
MOV
CMP
JE
INC
MOV
AL,1
TRI3 DI,3001H BL,[DI] BL,05H TRI5 BL [DI],BL TRI5
AL,2
TRI4 DI,3000H BL,[DI] BL,01H TRI5 BL [DI],BL TRI5
AL,3
TRI5 DI,3000H BL,[DI] BL,05H TRI5 BL [DI],BL
;第二個(gè)鍵增加周期;第三個(gè)鍵減少幅度;第四個(gè)鍵增加幅度
JMP
TRI5
TRI10: JMP
FAR PTR BEGIN0
TRI5: RET
AMPLFENC ENDP
GETKEY1 PROC
NEAR
CALL
CALL
CALL
CALL
CALL
JNZ
JMP
GETKEY2: MOV
MOV
COLUM: MOV
MOV
OUT
MOV
IN
L1: TEST
JNZ
MOV
JMP
L2: TEST
JNZ
MOV
JMP
L3: TEST
JNZ
MOV
JMP
DIS
;顯示刷新 DALLY DALLY
CLEAR
;清屏
CCSCAN
;再次掃描按鍵
GETKEY2
;有鍵按下則跳置GETKEY2 BEGIN1
;否則跳回開(kāi)始繼續(xù)循環(huán)
CH,0FEH
CL,00H
;設(shè)置當(dāng)前檢測(cè)的是第幾列
AL,CH
;選取一列,將X1~X4中一個(gè)置0
DX,MY8255_A DX,AL
DX,MY8255_C;讀Y1~Y4,用于判斷是哪一行按鍵閉合AL,DX
AL,01H
;是否為第1行 L2
;不是則繼續(xù)判斷
AL,00H
;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值
KCODE
AL,02H
;是否為第2行 L3
;不是則繼續(xù)判斷
AL,04H
;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值
KCODE
AL,04H
;是否為第3行 L4
;不是則繼續(xù)判斷
AL,08H
;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值
KCODE
L4: TEST
AL,08H
;是否為第4行
JNZ
NEXT
;不是則繼續(xù)判斷
MOV
AL,0CH
;設(shè)置第4行第1列的對(duì)應(yīng)的鍵值
KCODE: ADD
AL,CL
;將第1列的值加上當(dāng)前列數(shù),確定按鍵值
CALL
PUTBUF
;保存按鍵值
PUSH
AX
KON: CALL
CALL
CALL
JNZ
POP
NEXT: INC
MOV
TEST
JZ
ROL
MOV
JMP
KERR: RET
GETKEY1 ENDP
CCSCAN PROC
MOV
MOV
OUT
MOV
IN
NOT
AND
RET
CCSCAN ENDP
DIS
;顯示刷新 CLEAR
;清屏
CCSCAN
;掃描按鍵,判斷按鍵是否彈起 KON
;未彈起則繼續(xù)循環(huán)等待彈起 AX
CL
;當(dāng)前檢測(cè)的列數(shù)遞增
AL,CH
AL,08H
;檢測(cè)是否掃描到第4列 KERR
;是則跳回到開(kāi)始處
AL,1
;沒(méi)檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列
CH,AL COLUM NEAR
;掃描是否有按鍵閉合子程序
AL,00H
DX,MY8255_A;將4列全選通,X1~X4置0 DX,AL DX,MY8255_C AL,DX
;讀Y1~Y4 AL
AL,0FH
;取出Y1~Y4的反值
CLEAR PROC
NEAR
;清除數(shù)碼管顯示子程序
MOV
DX,MY8255_B;段位置0即可清除數(shù)碼管顯示
MOV
AL,00H
OUT
DX,AL
RET
CLEAR ENDP
DIS
鍵值并顯示
AGAIN:
相應(yīng)的鍵值
NEAR
;顯示鍵值子程序
PUSH
AX
;以緩沖區(qū)存放的鍵值為鍵值表偏移找到MOV
SI,3000H MOV
DL,0F7H MOV
AL,DL PUSH
DX MOV
DX,MY8255_A OUT
DX,AL
;設(shè)置X1~X4,選通一個(gè)數(shù)碼管 MOV
AL,[SI]
;取出緩沖區(qū)中存放鍵值 MOV
BX,OFFSET DTABLE AND
AX,00FFH ADD
BX,AX MOV
AL,[BX]
;將鍵值作為偏移和鍵值基地址相加得到MOV
DX,MY8255_B OUT
DX,AL
;寫入數(shù)碼管A~Dp CALL
DALLY INC
SI
;取下一個(gè)鍵值 POP
DX MOV
AL,DL TEST
AL,01H
;判斷是否顯示完? JZ
OUT1
;顯示完,返回 ROR
AL,1 MOV
DL,AL PROC
JMP
AGAIN
;未顯示完,跳回繼續(xù)
OUT1: POP
AX
RET
DIS ENDP
PUTBUF PROC
NEAR
;保存鍵值子程序
MOV
MOV
CMP
JNZ
MOV
GOBACK: RET
PUTBUF ENDP
DALLY PROC
PUSH
MOV
D1: MOV
D2: DEC
JNZ
LOOP
POP
RET
DALLY ENDP
CODE ENDS
END
DI,OFFSET KEY [DI],AL DI,2FFFH GOBACK DI,3004H NEAR
;軟件延時(shí)子程序 CX CX,000FH AX,000FH AX D2 D1 CX START
7.2 8086 最小模式的硬件連接圖
第二篇:微機(jī)原理課設(shè)
目錄
一.課程設(shè)計(jì)的實(shí)驗(yàn)?zāi)康呐c要求……………………………2 1.教學(xué)目的……………………………2 2.教學(xué)要求……………………………2 3.主要技術(shù)指標(biāo)……………………………2 二.課程設(shè)計(jì)課題的分析……………………………2 三.課程設(shè)計(jì)的結(jié)果……………………………4 1.實(shí)驗(yàn)代碼……………………………4 2.實(shí)驗(yàn)現(xiàn)象……………………………10 四.心得體會(huì) ……………………………12 五.參考文獻(xiàn) ……………………………12
一、課程設(shè)計(jì)的目的與要求 1.教學(xué)目的
本課程的課程設(shè)計(jì)是自動(dòng)化專業(yè)學(xué)生學(xué)習(xí)完《微機(jī)原理及應(yīng)用》課程后,進(jìn)行的一次以匯編語(yǔ)言為主,硬件設(shè)計(jì)為輔的綜合訓(xùn)練。本課程設(shè)計(jì)的其目的在于加深對(duì)微機(jī)原理基本知識(shí)的理解,掌握匯編語(yǔ)言程序設(shè)計(jì)的基本方法;掌握運(yùn)用微機(jī)原理開(kāi)發(fā)系統(tǒng)的基本方法。2.教學(xué)要求
從課程設(shè)計(jì)的目的出發(fā),通過(guò)設(shè)計(jì)工作的各個(gè)環(huán)節(jié),達(dá)到以下要求: 1)掌握匯編語(yǔ)言程序設(shè)計(jì)的基本方法。
2)進(jìn)一步理解各種接口電路的應(yīng)用。例如8255并行接口,8253定時(shí)器等。3)掌握利用PC機(jī)揚(yáng)聲器發(fā)出不同頻率聲音的方法。3.主要技術(shù)指標(biāo)
1)在程序運(yùn)行時(shí)使PC即成為一架可彈奏的電子琴。當(dāng)按下數(shù)字鍵1-8時(shí),依次發(fā)出1,2,3,4,5,6,7,I這八個(gè)音調(diào)。2)在程序運(yùn)行時(shí)使PC自動(dòng)按要求提示演奏樂(lè)曲。
二、課程設(shè)計(jì)課題的分析
圖1.揚(yáng)聲器工作原理圖示
圖2.主程序工作流程圖
圖3.樂(lè)曲演奏子程序工作流程圖 圖4.電子琴子程序工作流程圖
圖5.揚(yáng)聲器工作流程圖
三、課程設(shè)計(jì)的結(jié)果
1、實(shí)驗(yàn)代碼
DATA
SEGMENT INFO1
DB 0AH, 0DH, 'WELCOME YOU TO COME HERE!$'
DB 0AH, 0DH, 'THIS IS A MUSIC PROGRAM!$' DB 0AH, 0DH, 'PLEASE SELECLT!$' INFO4
DB 0AH, 0DH, 'INPUT ERROR!$' INFO5
DB 0AH, 0DH, 'PLEASE INPUT AGAIN!$' MUSLIST
DB 0AH, 0DH, '========================='
DB 0AH, 0DH, 'Press1
HuanLeSong' DB 0AH, 0DH, 'Press2
KaiXin' DB 0AH, 0DH, 'Press3
XiaoBuWuQu' DB 0AH, 0DH, 'Press4
Wonderful' DB 0AH, 0DH, 'Press5
SCALE PLAY ' DB 0AH, 0DH, 'Press6
EXIT' DB 0AH, 0DH, '=========================' DB 0AH, 0DH, '$' MUS_FRQ1
DW 330, 330, 350, 393, 393, 350, 330, 294
DW 262, 262, 294, 330, 330, 294, 294 DW 330, 330, 350, 393, 393, 350, 330, 294
DW 262, 262, 294, 330, 294, 262, 262 DW 294, 294, 330, 262, 294, 330, 350, 330, 262 DW 294, 330, 350, 330, 262, 262, 294, 393 DW 330, 330, 350, 393, 393, 350, 330, 294 DW 262, 262, 294, 330, 294, 262, 262,-1 MUS_TIM1
DW 8 DUP(100)
DW 7 DUP(100),200 DW 8 DUP(100)DW 7 DUP(100),200 DW 5 DUP(100),50,50,2 DUP(100)DW 100,50,50,4 DUP(100),200 DW 8 DUP(100)DW 7 DUP(100),200 MUS_FRQ2
DW 330, 294, 262, 294, 3 DUP(330)DW 3 DUP(294), 330, 392, 392 DW 330, 294, 262, 294, 4 DUP(330)DW 294, 294, 330, 294, 262,-1 MUS_TIM2
DW 6 DUP(100),200 DW 2 DUP(100,100,200)DW 8 DUP(100)DW 4 DUP(100),400 MUS_FRQ3
DW 392, 262, 294, 330, 350, 392, 262, 262 DW 440, 350, 392, 440, 494, 524, 262, 262 DW 350, 392, 350, 330, 294, 330
DW 350, 330, 294, 262, 294, 330, 294, 262, 247, 262,-1 MUS_TIM3
DW 200, 4 DUP(100), 200, 200, 200 DW 200, 4 DUP(100), 200, 200, 200 DW 200, 4 DUP(100), 200 DW 4 DUP(100), 200, 4 DUP(100), 400 MUS_FRQ4
DW 330, 392, 330, 294, 330, 392, 330, 394, 330 DW 330, 392, 330, 294, 262, 294, 330, 392, 294
DW 262, 262, 220, 196, 196, 220, 262, 294, 330, 262,-1 MUS_TIM4
DW 3 DUP(200), 100, 100, 200, 100, 100, 400 DW 2 DUP(200,200,100,100), 400 DW 3 DUP(200,100,100), 400 TABLE
DW 262, 294, 330, 349, 392, 440, 494, 525
NUMB
DB 0AH, 0DH, 'Keyboard number 1~8 keys play notes of the scale'
DB 0AH, 0DH, 'Enter or Ctrl+C to exit' DB 0AH, 0DH, '$' DATA
ENDS STACK
SEGMENT
PARA STACK 'STACK'
STA
DB 200 DUP('STACK')
STACK
ENDS CODE
SEGMENT ASSUME DS: DATA, SS: STACK, CS: CODE, ES: DATA START:
MOV AX, DATA
MOV DS, AX MOV ES, AX MOV AX, STACK
MOV SS, AX SHOW
MACRO B MOV DX, OFFSET B
MOV AH, 09H
INT 21H ENDM SHOW INFO1 LOP:
SHOW MUSLIST MOV AH, 01H
INT
21H
CMP AL, 36H
JZ
RETU
CMP AL, 31H
JNZ
B0 CALL MUSIC1
JMP
EXIT1 B0:
CMP
AL, 32H
JNZ
C0 CALL MUSIC2
JMP
EXIT1 C0:
CMP
AL, 33H
JNZ
D0 CALL MUSIC3
JMP
EXIT1 D0:
CMP
AL, 34H
JNZ
E0 CALL MUSIC4
JMP
EXIT1 E0:
CMP
AL, 35H
JNZ
EXIT SHOW NUMB CALL MUSIC5 EXIT1:
SHOW INFO5
JMP
LOP EXIT:
SHOW INFO4 SHOW INFO5
JMP
LOP RETU:
MOV AX, 4C00H
INT
21H MUSIC1
PROC
LEA
SI, MUS_FRQ1
LEA
BP,DS: MUS_TIM1 FREQ1:
MOV DI, [SI] CMP DI,-1
JE
END_MUS1 MOV BX, DS: [BP] CALL GENSOUND
ADD
SI,2
ADD
BP,2 JMP FREQ1
END_MUS1:RET MUSIC1
ENDP MUSIC2
PROC
LEA
SI, MUS_FRQ2
LEA
BP,DS: MUS_TIM2 FREQ2:
MOV DI, [SI] CMP DI,-1
JE
END_MUS2 MOV BX, DS: [BP] CALL GENSOUND
ADD
SI,2
ADD
BP,2
JMP FREQ2
END_MUS2:RET MUSIC2
ENDP MUSIC3
PROC
LEA
SI, MUS_FRQ3
LEA
BP,DS: MUS_TIM3 FREQ3:
MOV DI, [SI] CMP DI,-1
JE
END_MUS3 MOV BX, DS: [BP] CALL GENSOUND
ADD
SI,2
ADD
BP,2 JMP FREQ3
END_MUS3:RET MUSIC3
ENDP MUSIC4
PROC
LEA
SI, MUS_FRQ4
LEA
BP,DS: MUS_TIM4 FREQ4:
MOV DI, [SI] CMP DI,-1
JE
END_MUS4 MOV BX, DS: [BP] CALL GENSOUND
ADD
SI,2
ADD
BP,2 JMP FREQ4
END_MUS4:RET MUSIC4
ENDP MUSIC5
PROC NEAR PUSH AX PUSH BX PUSH CX LOP5:
MOV AH, 01H
INT
21H
CMP AL, 0DH
JE
EXIT5
CMP AL, 31H
JB
LOP5
CMP AL, 38H
JA
LOP5
AND AX, 0FH
SHL
AX, 1
SUB
AX, 2
MOV SI, AX MOV BX, OFFSET TABLE MOV DI, [BX][SI]
MOV BX, 100
CALL
GENSOUND
JMP LOP5 EXIT5:
POP CX POP BX POP AX
RET MUSIC5
ENDP GENSOUND
PROC
PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL, 0B6H
OUT
43H, AL
MOV
DX, 12H
MOV AX, 533H*896 DIV DI OUT 42H, AL
MOV AL, AH OUT 42H, AL
IN AL, 61H
MOV AH, AL OR AL, 3
OUT 61H, AL
PUSH AX
WAIT1:
MOV CX, 1200
DELA1:
IN AL, 61H
AND AL, 10H CMP AL, AH JE DELA1 MOV AH,AL LOOP DELA1 DEC BX JNZ WAIT1 POP AX MOV AL, AH OUT 61H, AL
POP DI POP DX POP CX
POP
BX POP AX
RET GENSOUND ENDP CODE
ENDS END
START
2、實(shí)驗(yàn)現(xiàn)象
1.進(jìn)入DOS后在DOS界面進(jìn)行匯編鏈接并生成可執(zhí)行文件.exe 2.雙擊可執(zhí)行文件DZQ.exe進(jìn)入操作界面如圖所示
操作界面初始界面
3.在進(jìn)行操作的時(shí)候只要在鍵盤上按1-4這數(shù)字鍵就可以聽(tīng)取歌曲1-4,按數(shù)字鍵5時(shí)進(jìn)入電子琴界面,這時(shí)候1-8分別表示音樂(lè)CDEFGABC這幾個(gè)音符。按回車后退出電子琴操作界面,這時(shí)候按6退出程序。
按數(shù)字鍵5后進(jìn)入電子琴界面
四、心得體會(huì)
這次課程設(shè)計(jì)給我的感覺(jué)是:與其說(shuō)這次課設(shè)是一個(gè)任務(wù),不如說(shuō)是期末對(duì)微機(jī)原理的一次系統(tǒng)的復(fù)習(xí)。通過(guò)課設(shè),我弄清楚了課本上一些比較晦澀但是又非常重要的章節(jié)的內(nèi)容,例如:鍵盤和顯示器DOS功能調(diào)用,數(shù)據(jù)定義偽指令的使用,子程序的嵌套,8253芯片的初始化等等。
剛拿到課設(shè)題目時(shí)可以說(shuō)是毫無(wú)思緒,但是通過(guò)查閱資料,模仿別人的程序,不斷理解,拼湊,改進(jìn),終于按照課設(shè)要求完成任務(wù)。剛開(kāi)始上機(jī)運(yùn)行程序出現(xiàn)的問(wèn)題不可謂不多,但是通過(guò)匯編的錯(cuò)誤提示,我很容易的發(fā)現(xiàn)了問(wèn)題并改正了它,如果不是上機(jī)運(yùn)行,而是一味的盯著程序檢查,那樣的話真可謂無(wú)從下手,事倍功半。這個(gè)告訴我有時(shí)候動(dòng)動(dòng)手實(shí)踐,遠(yuǎn)比啃書學(xué)習(xí)知識(shí)的效率要高得多。
五、參考文獻(xiàn)
[1] 王忠民.微型計(jì)算機(jī)原理(第二版).西安:西安電子科技大學(xué)出版社,2007年
[2] 馬春燕.微機(jī)原理與接口技術(shù)實(shí)驗(yàn)與學(xué)習(xí)輔導(dǎo).北京:電子工業(yè)出版社.2007年
第三篇:通信原理課設(shè)(本站推薦)
目
錄
一、音頻傳輸系統(tǒng)設(shè)計(jì)..................................................................................................................1
1.設(shè)計(jì)目的................................................................................................................................1 2.設(shè)計(jì)內(nèi)容................................................................................................................................1 3.實(shí)現(xiàn)步驟................................................................................................................................1 4.結(jié)論及思考............................................................................................................................5
二、數(shù)字傳輸系統(tǒng)設(shè)計(jì)..................................................................................................................7
1.設(shè)計(jì)目的................................................................................................................................7 2.設(shè)計(jì)內(nèi)容................................................................................................................................7 3.實(shí)現(xiàn)步驟..............................................................................................................................11 4.結(jié)論及思考..........................................................................................................................17
三、總結(jié)與收獲............................................................................................................................18 指導(dǎo)教師意見(jiàn)................................................................................................................................19
《通信原理》課程設(shè)計(jì)報(bào)告
一、音頻傳輸系統(tǒng)設(shè)計(jì)
1.設(shè)計(jì)目的
通信的基本形式是在信源和信宿之間建立一條傳遞信息的通道,通信系統(tǒng)通常由 信源,變換器,信道,反變換器,信宿以及等效噪聲等幾部分構(gòu)成.通過(guò)這次音頻傳輸系統(tǒng)設(shè)計(jì),我們可以深刻體會(huì)到信號(hào)在通信系統(tǒng)中的傳輸和處理過(guò)程有一個(gè)更加清晰的認(rèn)識(shí)和理解,對(duì)于模擬通信系統(tǒng),考查學(xué)生對(duì)調(diào)制技術(shù)的理解和使用, 同時(shí),通過(guò)音頻傳輸系統(tǒng)的設(shè)計(jì),我們更加深刻理解了模擬通信系統(tǒng)設(shè)計(jì),以及模擬通信系統(tǒng)下最重要的調(diào)制技術(shù)的應(yīng)用和設(shè)計(jì),鍛煉了我們獨(dú)立思考和分析工程問(wèn)題的能力,同時(shí),通過(guò)設(shè)計(jì)和實(shí)現(xiàn),我們對(duì)復(fù)雜的工程問(wèn)題會(huì)有更加深刻的認(rèn)識(shí),對(duì)一個(gè)完整的模擬通信系統(tǒng)會(huì)有一個(gè)更加清晰和完善的概念.2.設(shè)計(jì)內(nèi)容
利用NI-USRP節(jié)點(diǎn)設(shè)備接收實(shí)際的廣播信號(hào).結(jié)合LABVIEW,實(shí)現(xiàn)對(duì)音頻信號(hào)的調(diào)制解調(diào),觀察接收信號(hào)的質(zhì)量并進(jìn)行分析.3.實(shí)現(xiàn)步驟
音頻傳輸系統(tǒng)包括發(fā)送端和接收端: 音頻傳輸系統(tǒng)TX.vi: 發(fā)射端主程序的前面板如圖,前面板左側(cè)為參數(shù)輸入圖部分。
(1)首先,用NI-USRP Configuration Utility觀察確保硬件與電腦連接上,以及硬件的地址。
(2)然后修改發(fā)送端前面板的“設(shè)備的IP地址”。
(3)可以設(shè)置聲音文件路徑(labview只能識(shí)別wav格式音頻文件)。
(4)USRP配置各類程序控制參數(shù),包括IQ速率,可以更改,但是發(fā)送端與接收端的IQ速率要相同,載波頻率就是頻點(diǎn)頻率。
《通信原理》課程設(shè)計(jì)報(bào)告
此模塊的作用是根據(jù)輸入的路徑獲取音頻文件,對(duì)應(yīng)于程序框圖SUBVI OPEN Waveform File.vi,輸入是外部音頻文件的路徑,要求必須是wav格式。如果留空,則會(huì)自動(dòng)選擇默認(rèn)音頻文件,輸出時(shí)聲音文件的引用句柄,每次從聲音文件中讀取的樣點(diǎn)數(shù)以及任務(wù)id。此外,這個(gè)子程序還留有一個(gè)選擇是否同時(shí)播放的選項(xiàng),程序的前面板會(huì)有一個(gè)勾選框,可以選擇是否在發(fā)送的同時(shí)也播放聲音。
2.讀取聲音波形
這個(gè)模塊的作用是將打開(kāi)音頻文件模塊中得到的聲音文件轉(zhuǎn)換成波形數(shù)組形式輸出,同時(shí),還將波形數(shù)據(jù)寫進(jìn)聲音輸出設(shè)備,使得在發(fā)送端可以聽(tīng)到將要發(fā)送的聲音,如果在前面板勾選了同時(shí)播放聲音這個(gè)選項(xiàng),那么就可以通過(guò)電腦聲卡播放出聲音,對(duì)應(yīng)于程序框圖中的SubVI Read Waveforem File.vi子程序。
輸出是波形數(shù)據(jù)、任務(wù)ID以及文件標(biāo)示和同時(shí)播放聲音這個(gè)選項(xiàng)。3.進(jìn)行FM調(diào)制
該模塊的作用是對(duì)音頻進(jìn)行FM調(diào)制,對(duì)應(yīng)于Exercises FM Modulation.vi
圖1-3FM調(diào)制圖
該模塊的輸入是聲音波形數(shù)據(jù),IQ 采樣率和頻偏,輸出是經(jīng)過(guò)FM調(diào)制后的時(shí)域波形,調(diào)制后的波形數(shù)據(jù)進(jìn)入niUSRP Write Tx Data(poly)函數(shù)。根據(jù)前面板上配置后的各項(xiàng)參數(shù)發(fā)射到空間中,以供接收端程序,普通的FM收音機(jī)或者有FM接收功能的手機(jī)接收。
該模塊需要分兩步完成對(duì)聲音信號(hào)的FM調(diào)制。
《通信原理》課程設(shè)計(jì)報(bào)告
4.結(jié)論及思考
思考:
1.頻偏的意義是什么?它怎樣影響調(diào)制信號(hào)?從聽(tīng)眾的角度,能做些什么來(lái)解決這些影響,做一些測(cè)試驗(yàn)證觀點(diǎn)。
mf = 最大頻偏低頻信號(hào)的頻率,B = 2*(mf+1)F,影響帶寬,而帶寬影響噪聲,所以同時(shí)頻偏也影響輸出信噪比。
從聽(tīng)眾的角度來(lái)講,因?yàn)楣矎V播的頻帶范圍是有限的,為87.5~108MHz,以100KHz為步進(jìn)搜索電臺(tái)。我們?cè)谑褂猛ㄐ畔到y(tǒng)時(shí)應(yīng)該避開(kāi)這些公共頻帶。
2.找出一些能證明所設(shè)計(jì)的FM收發(fā)機(jī)性能優(yōu)劣的技術(shù)指標(biāo)
采樣率的大?。航邮諜C(jī)的采樣效率越高,相同信噪比下收聽(tīng)效果越好。天線增益:天線增益越小,接收效果越好。結(jié)論:
1.利用NI-USRP節(jié)電設(shè)備,結(jié)合LabVIEW,我實(shí)現(xiàn)了對(duì)音頻信號(hào)的調(diào)制解調(diào),收聽(tīng)到了包含有噪聲的音樂(lè)。
2.提高接收質(zhì)量:有很多因素影響FM通信系統(tǒng)的有效性和可靠性,如帶寬、頻偏、增益和載波頻率對(duì)FM通信系統(tǒng)的影響較大。經(jīng)測(cè)試,提高增益和減小頻偏可以有效改善質(zhì)量。
《通信原理》課程設(shè)計(jì)報(bào)告
3、信源編碼
該模塊主要是完成霍夫曼編碼—基于有序頻率二叉樹(shù)的編碼。
圖2-2信源編碼
4、信道編碼
這里主要是使用的(7,4)分組編碼
5、脈沖調(diào)制
主要完成添加訓(xùn)練隊(duì)列以及脈沖成形濾波的功能。其中添加訓(xùn)練序列主要是為了接收端可以頻偏校正。
6、信道設(shè)置
主要在信道中加入白噪聲。
《通信原理》課程設(shè)計(jì)報(bào)告
前面板左下方是接受信號(hào)的它的星座圖,和誤碼率曲線。可以通過(guò)這些來(lái)判斷程序是否正確。
圖2-5數(shù)字傳輸系統(tǒng)接收端
而對(duì)接收端的程序框圖進(jìn)行分析:
1、初始化
實(shí)現(xiàn)USRP初始化和配置USRP的參數(shù),此時(shí)注意與發(fā)送對(duì)應(yīng)。如圖所示。
圖2-6初始化框圖
2、信號(hào)檢測(cè)
《通信原理》課程設(shè)計(jì)報(bào)告
2.設(shè)計(jì)內(nèi)容
1)完成信道編碼即(7,4)分組編碼的過(guò)程,此時(shí)需要完成Exercises Encode-74.vi,學(xué)習(xí)(7,4)分組碼譯碼的過(guò)程。
2)將脈沖調(diào)制模塊的QPSK/BPSK程序圖補(bǔ)充完整 3)學(xué)習(xí)信源編碼即霍夫曼編譯碼的過(guò)程 3.實(shí)現(xiàn)步驟
1)發(fā)送端接收端程序結(jié)構(gòu):
圖2-6發(fā)送端(1)
圖2-7發(fā)送端(2)
發(fā)送端程序框圖:
《通信原理》課程設(shè)計(jì)報(bào)告
設(shè)置生成矩陣,然后輸入前面板的生成矩陣內(nèi),打開(kāi)程序框圖,進(jìn)行設(shè)計(jì)。
圖2-9分組碼程序框圖
設(shè)計(jì)圖如下:
輸入后將長(zhǎng)串輸入數(shù)據(jù)流進(jìn)行長(zhǎng)度為4的分塊。也即為4維數(shù)組。和G矩陣相乘,之后再轉(zhuǎn)化為一維數(shù)組。由于矩陣乘法是數(shù)值相加的過(guò)程,而分組編碼是異或過(guò)程,因此需要將矩陣內(nèi)每個(gè)元素除二取余,余數(shù)即為正確的異或過(guò)程。
分組碼譯碼: 首先設(shè)計(jì)校驗(yàn)矩陣H。接著設(shè)計(jì)程序框圖如下:
圖2-10解調(diào)程序框圖
《通信原理》課程設(shè)計(jì)報(bào)告
入信號(hào)平均能量,將此能量與符號(hào)能量相乘乘上信號(hào)幅值,得到輸出信號(hào)
圖2-12 BPSK設(shè)計(jì)
BPSK。BPSK解調(diào)如圖所示。輸入數(shù)據(jù)流對(duì)2取余,輸出到下一個(gè)框圖,0對(duì)應(yīng)1,1對(duì)應(yīng)-1.4)利用USRP設(shè)備實(shí)現(xiàn)圖像發(fā)送 首先設(shè)置硬件設(shè)備,選擇好天線,然后打開(kāi)發(fā)送端和接收端。得到結(jié)果如下:
圖2-13發(fā)送和接收?qǐng)D像
在圖像傳輸過(guò)程中會(huì)出現(xiàn)噪聲干擾,通過(guò)增大增益可以使噪聲減小。
《通信原理》課程設(shè)計(jì)報(bào)告
(備注:此處要求手寫,不得拷貝,要有自己的心得體會(huì))
本人簽名:
年
月
月
日指導(dǎo)教師意見(jiàn)
第四篇:通信原理課設(shè)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
摘 要
摘要:所謂調(diào)制,就是在傳送信號(hào)的一方將所要傳送的信號(hào)附加在高頻振蕩上,再由天線發(fā)射出去。這里高頻振蕩波就是攜帶信號(hào)的運(yùn)載工具,也叫載波。振幅調(diào)制,就是由調(diào)制信號(hào)去控制高頻載波的振幅,直至隨調(diào)制信號(hào)做線性變化。在線性調(diào)制系列中,最先應(yīng)用的一種幅度調(diào)制是全調(diào)幅或常規(guī)調(diào)幅,簡(jiǎn)稱為調(diào)幅(AM)。為了提高傳輸?shù)男剩€有載波受到抑制的雙邊帶調(diào)幅波(DSB)和單邊帶調(diào)幅波(SSB)。在頻域中已調(diào)波頻譜是基帶調(diào)制信號(hào)頻譜的線性位移;在時(shí)域中,已調(diào)波包絡(luò)與調(diào)制信號(hào)波形呈線性關(guān)系。
本課程設(shè)計(jì)主要利用MATLAB集成環(huán)境下的Simulink仿真平臺(tái),設(shè)計(jì)一個(gè)AM調(diào)制與相干解調(diào)通信系統(tǒng),分別在理想信道和非理想信道中運(yùn)行,并把運(yùn)行仿真結(jié)果輸入顯示器,根據(jù)顯示結(jié)果分析所設(shè)計(jì)的系統(tǒng)性能。經(jīng)過(guò)調(diào)制,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),并且經(jīng)過(guò)適當(dāng)?shù)耐晟坪?,?shí)驗(yàn)成功。
關(guān)鍵詞: MATLAB7.1 ;Simulink仿真平臺(tái);AM調(diào)制;相干解調(diào)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
目錄 課程設(shè)計(jì)目的…………………………………………………………1 課程設(shè)計(jì)要求…………………………………………………………1 相關(guān)知識(shí)………………………………………………………………1 課程設(shè)計(jì)分析…………………………………………………………2 仿真……………………………………………………………………6
6結(jié)果分析………………………………………………………………10 參考文獻(xiàn)………………………………………………………………12
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
1.課程設(shè)計(jì)的目的
1.掌握模擬系統(tǒng)AM調(diào)制和解調(diào)原理。2.掌握模擬系統(tǒng)AM調(diào)制和解調(diào)的設(shè)計(jì)方法。
3.掌握用MATLAB分析系統(tǒng)時(shí)域、頻域特性的方法,進(jìn)一步鍛煉應(yīng)用MATLAB進(jìn)行編程仿真的能力。
4.熟悉基于Simulink的動(dòng)態(tài)建模和仿真的步驟和過(guò)程。
2.課程設(shè)計(jì)的要求
利用Matlab軟件進(jìn)行振幅調(diào)制和解調(diào)程序設(shè)計(jì),輸出顯示調(diào)制信號(hào)、載波信號(hào)以及已調(diào)信號(hào)波形,并輸出顯示三種信號(hào)頻譜圖。對(duì)產(chǎn)生波形進(jìn)行分析,并通過(guò)參數(shù)的改變,觀察波形變化,分析實(shí)驗(yàn)現(xiàn)象。
3.相關(guān)知識(shí) 3.1 AM調(diào)制原理
幅度調(diào)制是用調(diào)制信號(hào)去控制高頻正弦載波的幅度,使其按調(diào)制信號(hào)的規(guī)律變化的過(guò)程。幅度調(diào)制器的一般模型如圖2.1所示。
圖3.1—1 幅度調(diào)制模型
在圖2-1中,若假設(shè)濾波器為全通網(wǎng)絡(luò)(=1),調(diào)制信號(hào)m?t?疊加直流A0后再與載波相乘,則輸出的信號(hào)就是常規(guī)雙邊帶(AM)調(diào)幅.AM調(diào)制器模型如圖2-2所示
圖3.1—2 AM調(diào)制模型
AM信號(hào)波形的包絡(luò)與輸入基帶信號(hào)m?t?成正比,故用包絡(luò)檢波的方法很容易恢復(fù)原始調(diào)制信號(hào)。但為了保證包絡(luò)檢波時(shí)不發(fā)生失真,必須滿足A0?m?t?max,否
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
則將出現(xiàn)過(guò)調(diào)幅現(xiàn)象而帶來(lái)失真。AM信號(hào)的頻譜是由載頻分量和上、下兩個(gè)邊帶組成(通常稱頻譜中畫斜線的部分為上邊帶,不畫斜線的部分為下邊帶)。上邊帶的頻譜與原調(diào)制信號(hào)的頻譜結(jié)構(gòu)相同,下邊帶是上邊帶的鏡像。顯然,無(wú)論是上邊帶還是下邊帶,都含有原調(diào)制信號(hào)的完整信息。故AM信號(hào)是帶有載波的雙邊帶信號(hào),它的帶寬信號(hào)帶寬的兩倍。
3.2 相干解調(diào)
由AM信號(hào)的頻譜可知,如果將已調(diào)信號(hào)的頻譜搬回到原點(diǎn)位置,即可得到原始的調(diào)制信號(hào)頻譜,從而恢復(fù)出原始信號(hào)。解調(diào)中的頻譜搬移同樣可用調(diào)制時(shí)的相乘運(yùn)算來(lái)實(shí)現(xiàn)。相干解調(diào)的關(guān)鍵是是必須產(chǎn)生一個(gè)與調(diào)制器同頻同相位的載波。如果同頻同相位的條件得不到滿足,則會(huì)破壞原始信號(hào)的恢復(fù)。
4.課程設(shè)計(jì)分析
4.1雙邊帶幅度調(diào)制
在DSB-AM系統(tǒng)中,已調(diào)信號(hào)的幅度正比與消息信號(hào)。這種調(diào)制通過(guò)使用乘法器完成,將消息信號(hào)嗎m(t)與載波Accos(2πfct),如圖4.1—1所示,表示為:
u(t)=Acm(t)cos(2πfct)
(1)
圖 4.1—1 DSB-AM調(diào)制原理結(jié)構(gòu)框圖
其中
c(t)=Accos(2πfct)
(2)
是載波,而m(t)是消息信號(hào)。若以單頻正弦信號(hào)調(diào)制為例,那么典型波形如圖4.1—2所示。
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
現(xiàn)取u(t)的傅立葉變換,可以得到DSB-AM信號(hào)的頻域表示為:
(3)
其中M(f)是m(t)的傅立葉變換。很明顯可以看出,這種調(diào)制方式將消息信號(hào)的頻譜進(jìn)行了搬移,并在幅度上乘以Ac/2,傳輸帶寬Br是消息信號(hào)帶寬的兩倍,也就是說(shuō):
Br=2W
(4)
圖3顯示了一個(gè)典型的消息信號(hào)的頻譜及其相對(duì)應(yīng)的DSB-AM已調(diào)信號(hào)的頻譜。
圖4.1—2 消息信號(hào)與DSB-AM已調(diào)信號(hào)的頻譜
已調(diào)信號(hào)的功率為
(5)
其中Pm是消息信號(hào)的功率。在DSB-AM通信系統(tǒng)中,信噪比SNR等于基帶的SNR,也就是:
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
(6)
其中PR是接收到的功率(在接收端已調(diào)信號(hào)的功率),N0是噪聲功率譜密度(假定為白噪聲),W是信號(hào)噪聲的帶寬。
4.2雙邊帶抑制載波幅度調(diào)制
4.2.1.DSB信號(hào)的表達(dá)式、頻譜及帶寬
在幅度調(diào)制的一般模型中,若假設(shè)濾波器為全通網(wǎng)絡(luò)(=1),調(diào)制信號(hào)
中無(wú)直流分量,則輸出的已調(diào)信號(hào)就是無(wú)載波分量的雙邊帶調(diào)制信號(hào),或稱抑制載波雙邊帶(DSB-SC)調(diào)制信號(hào),簡(jiǎn)稱雙邊帶(DSB)信號(hào)。
DSB調(diào)制器模型如圖4.2.1—1所示。可見(jiàn)DSB信號(hào)實(shí)質(zhì)上就是基帶信號(hào)與載波直接相乘,其時(shí)域和頻域表示式分別為
圖4.2.1—1DSB-SC調(diào)制模型
(7)
(8)
DSB信號(hào)的包絡(luò)不再與
成正比,故不能進(jìn)行包絡(luò)檢波,需采用相干解調(diào);除不再含有載頻分量離散譜外,DSB信號(hào)的頻譜與AM信號(hào)的完全相同,仍由上下對(duì)稱的兩個(gè)邊帶組成。故DSB信號(hào)是不帶載波的雙邊帶信號(hào),它的帶寬與AM信號(hào)相同,也為基帶信號(hào)帶寬的兩倍,即
4.2.2.DSB信號(hào)的解調(diào)
DSB信號(hào)只能采用相干解調(diào),其模型與AM信號(hào)相干解調(diào)時(shí)完全相同,此時(shí),乘法器輸出
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
經(jīng)低通濾波器濾除高次項(xiàng),得
(9)
即無(wú)失真地恢復(fù)出原始電信號(hào)。
抑制載波的雙邊帶幅度調(diào)制的好處是,節(jié)省了載波發(fā)射功率,調(diào)制效率高;調(diào)制電路簡(jiǎn)單,僅用一個(gè)乘法器就可實(shí)現(xiàn)。缺點(diǎn)是占用頻帶寬度比較寬,為基帶信號(hào)的2倍。
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
5.仿真
5.1雙邊帶頻帶幅度調(diào)制的系統(tǒng)仿真
圖5.1-1雙邊帶頻帶幅度調(diào)制的系統(tǒng)仿真框圖
圖5.1-2 DSB AM Modulator Passband(雙邊帶頻帶幅度調(diào)制器)的主要參數(shù)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
圖5.1-3 DBS AM Demodulator Passband(雙邊帶頻帶幅度解調(diào)器)的主要參數(shù)
圖5.1-4 DBS AM(雙邊帶幅度調(diào)制)頻譜儀(Spectrum Scope)的主要參數(shù)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
5.2雙邊帶抑制載波幅度調(diào)制系統(tǒng)仿真
圖5.2-1 雙邊帶抑制載波幅度調(diào)制的系統(tǒng)仿真框圖
圖5.2-2 DSB-SC AM 信號(hào)發(fā)生器(Signal Generator)的主要參數(shù)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
圖5.2-3 DSB-SC AM Modualtor Passband(雙邊帶頻帶抑制幅度調(diào)制器)的主要參數(shù)
圖5.2-4 DSB-SC AM的頻譜儀(Spectrum Scope)的主要參數(shù)
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
6.結(jié)果分析
6.1雙邊帶頻帶幅度調(diào)制的系統(tǒng)仿真結(jié)果
圖6.1-1雙邊帶頻帶幅度調(diào)制后的頻域圖
圖6.1-2雙邊帶頻帶幅度調(diào)制仿真系統(tǒng)中示波器的波形圖
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
6.2雙邊帶抑制載波幅度調(diào)制系統(tǒng)仿真結(jié)果
圖6.2-1 雙邊帶頻帶抑制幅度調(diào)制后調(diào)制信號(hào)的頻域圖
圖6.2-2 雙邊帶抑制幅度調(diào)制后調(diào)制信號(hào)的時(shí)域圖
沈陽(yáng)理工大學(xué)通信系統(tǒng)課程設(shè)計(jì)
7.參考文獻(xiàn)
【1】桑林,郝建軍,劉丹,【數(shù)字通信】,北京郵電大學(xué)出版社,2002 【2】苗云長(zhǎng)等主編,【現(xiàn)代通信原理及應(yīng)用】,電子工業(yè)出版社,2005 【3】吳偉鈴,龐沁華,【通信原理】,北京郵電大學(xué)出版社,2005 【4】張圣勤,【MATLAB7.0實(shí)用教程】桑林,郝建軍,劉丹,數(shù)字通信,北京郵電大學(xué)出版社,2002 【5】邵玉斌,【Matlab/Simulink通信原理建模與仿真實(shí)例分析】,清華大學(xué)出版社,2008 【6】沈偉慈?!就ㄐ烹娐贰?,西安電子科技大學(xué)出版社,2007
第五篇:微機(jī)硬件課設(shè)(紅綠燈)
微機(jī)原理實(shí)驗(yàn)課程設(shè)計(jì)
硬件部分
東華大學(xué)信息學(xué)院
2013.1
一. 基礎(chǔ)實(shí)驗(yàn)部分
實(shí)驗(yàn)1存儲(chǔ)器讀寫實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
1.掌握PC機(jī)外存擴(kuò)展的方法。2.熟悉6264芯片的接口方法。
3.掌握8086十六位數(shù)據(jù)存儲(chǔ)的方法。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊。
三、實(shí)驗(yàn)內(nèi)容
向02000~020FFH單元的偶地址送入AAH,奇地址送入55H。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到存儲(chǔ)器電路
五、實(shí)驗(yàn)步驟和要求
1、實(shí)驗(yàn)接線:本實(shí)驗(yàn)無(wú)需接線。
2、編寫調(diào)試程序
3、運(yùn)行實(shí)驗(yàn)程序,可采取單步、設(shè)置斷點(diǎn)方式,打開(kāi)內(nèi)存窗口可看到內(nèi)存區(qū)的變化。本實(shí)驗(yàn)的主要目的是學(xué)會(huì)用使用工具軟件,掌握用單步執(zhí)行和斷點(diǎn)方式運(yùn)行程序,觀察寄存器和內(nèi)存中的數(shù)據(jù)變化等程序調(diào)試的手段。
六、實(shí)驗(yàn)提示
七、實(shí)驗(yàn)范例程序框圖及源代碼(實(shí)驗(yàn)程序名:RAM.ASM)
八、思考題
1、單步執(zhí)行到“intram”標(biāo)號(hào)的語(yǔ)句時(shí),ds寄存器的數(shù)據(jù)是什么?采用斷點(diǎn)方式運(yùn)行時(shí)執(zhí)行到第一個(gè)斷點(diǎn)處,2000H~202FH內(nèi)存單元的數(shù)據(jù)是什么?執(zhí)行到第二個(gè)斷點(diǎn)處,2000H~200FH內(nèi)存單元的數(shù)據(jù)是什么?并根據(jù)觀察結(jié)果和對(duì)源程序的判讀簡(jiǎn)述源程序的運(yùn)行效果。
答:?jiǎn)尾綀?zhí)行到“intram”標(biāo)號(hào)的語(yǔ)句時(shí),ds寄存器的數(shù)據(jù)都為00。
斷點(diǎn)方式運(yùn)行時(shí)執(zhí)行到第一個(gè)斷點(diǎn)處時(shí),2000H~202FH內(nèi)存單元的數(shù)據(jù)都為00。
到第二個(gè)斷點(diǎn)處,2000H~200FH內(nèi)存單元偶地址都為AA,奇地址都為00。
2、修改程序,實(shí)現(xiàn)從2000H到200FH單元依次賦值00H~0FH的功能。答:只需改變intram 和 fil中相關(guān)的程序: 需改動(dòng)的原程序:
intram: mov [si],al
incsi loopintram mov si,1000h;設(shè)置斷點(diǎn)處 mov cx,100h mov ax,55aah fil:
mov [si],ax;RAM區(qū)循環(huán)置數(shù) incsi
改為:
intram: mov [si],al incsi loopintram mov si,1000h;設(shè)置斷點(diǎn)處
mov cx,100h mov ax,0100h fil:
mov [si],ax incsi addax,0202h incsi loopfil
;RAM區(qū)循環(huán)置數(shù)
實(shí)驗(yàn)2簡(jiǎn)單I/O口擴(kuò)展實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
1、熟悉74LS273,74LS244的應(yīng)用接口方法。
2、掌握用鎖存器、三態(tài)門擴(kuò)展簡(jiǎn)單并行輸入、輸出口的方法。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊。
三、實(shí)驗(yàn)內(nèi)容
邏輯電平開(kāi)關(guān)的狀態(tài)輸入74LS244,然后通過(guò)74LS273鎖存輸出,利用LED顯示電路作為輸出的狀態(tài)顯示。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到兩部分電路:開(kāi)關(guān)量輸入輸出電路,簡(jiǎn)單I/O口擴(kuò)展電路。
五、實(shí)驗(yàn)步驟
1、實(shí)驗(yàn)接線:(?表示相互連接)CS0 ?CS244; CS1?CS273;平推開(kāi)關(guān)的輸出K1~K8 ? IN0~I(xiàn)N7(對(duì)應(yīng)連接); O0~O7?LED1~LED8。
2、編輯程序,單步運(yùn)行,調(diào)試程序
3、調(diào)試通過(guò)后,全速運(yùn)行程序,觀看實(shí)驗(yàn)結(jié)果。
4、編寫實(shí)驗(yàn)報(bào)告。
六、實(shí)驗(yàn)提示
七、實(shí)驗(yàn)結(jié)果
程序全速運(yùn)行后,邏輯電平開(kāi)關(guān)的狀態(tài)改變應(yīng)能在LED上顯示出來(lái)。例如:K2置于L位置,則對(duì)應(yīng)的LED2應(yīng)該點(diǎn)亮。
八、實(shí)驗(yàn)范例程序框圖(實(shí)驗(yàn)程序名: T244273.ASM)
九、程序源代碼清單
十、思考題:
將74LS244的片選信號(hào)CS244改接CS2,將74LS273的片選信號(hào)CS273改接CS3,修改程序?qū)崿F(xiàn)與范例程序相同的功能。
答:只需改變程序中start相應(yīng)的輸入輸出口地址。需改動(dòng)的原程序:
start:
mov dx,04a0h
inal,dx mov dx,04b0h outdx,al 改為:
start:
mov dx,04c0h
inal,dx mov dx,04d0h outdx,al
實(shí)驗(yàn)3 8255并行口實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
掌握8255A的編程原理。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊。
三、實(shí)驗(yàn)內(nèi)容
8255A的A口作為輸入口,與邏輯電平開(kāi)關(guān)相連。8255A的B口作為輸出口,與發(fā)光二極管相連。編寫程序,使得邏輯電平開(kāi)關(guān)的變化在發(fā)光二極管上顯示出來(lái)。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到兩部分電路:開(kāi)關(guān)量輸入輸出電路和8255可編程并口電路。
五、實(shí)驗(yàn)步驟
1、實(shí)驗(yàn)接線
CS0?CS8255; PA0~PA7?平推開(kāi)關(guān)的輸出K1~K8; PB0~PB7?發(fā)光二極管的輸入LED1~LED8。
2、編程并全速或單步運(yùn)行。
3、全速運(yùn)行時(shí)撥動(dòng)開(kāi)關(guān),觀察發(fā)光二極管的變化。當(dāng)開(kāi)關(guān)某位置于L時(shí),對(duì)應(yīng)的發(fā)光二極管點(diǎn)亮,置于H時(shí)熄滅。
六、實(shí)驗(yàn)提示
七、實(shí)驗(yàn)結(jié)果
程序全速運(yùn)行后,邏輯電平開(kāi)關(guān)的狀態(tài)改變應(yīng)能在LED上顯示出來(lái)。例如: K2置于L位置,則對(duì)應(yīng)的LED2應(yīng)該點(diǎn)亮。
八、實(shí)驗(yàn)范例程序框圖及源代碼(實(shí)驗(yàn)程序名:t8255.asm)
九、思考題:
1、修改接線CS2?CS8255,并要求開(kāi)關(guān)置“H”(下)位置時(shí)對(duì)應(yīng)LED亮,修改程序?qū)崿F(xiàn)相應(yīng)功能。
答:改變相應(yīng)的輸入輸出口地址,并將讀入ax的值取反。
需改動(dòng)的原程序: start:
mov dx,04a6h
mov ax,90h
out dx,ax
start1:
mov dx,04a0h
in ax,dx
mov dx,04a2h
out dx,ax
jmp start1 改動(dòng)后: start:
mov dx,04c6h
mov ax,90h
out dx,ax
start1:
mov dx,04c0h
in ax,dx
mov dx,04c2h not
ax
out dx,ax
jmp start1
實(shí)驗(yàn)4 8253定時(shí)器/計(jì)數(shù)器接口實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
掌握8253定時(shí)器的編程原理,用示波器觀察不同模式下的輸出波形。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊、示波器。
三、實(shí)驗(yàn)內(nèi)容
了解8253計(jì)數(shù)器的不同工作方式,掌握其初始化控制字對(duì)定時(shí)/記數(shù)效果的影響。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到兩部分電路:脈沖產(chǎn)生電路、8253定時(shí)器/計(jì)數(shù)器電路
五、實(shí)驗(yàn)步驟
1、實(shí)驗(yàn)連線:
CS0?CS8253OUT0?8253CLK2 OUT2?LED1 OUT1?LED2 CLK3?8253CLK0,CLK3?8253CLK1
2、編程調(diào)試程序
3、全速運(yùn)行,觀察實(shí)驗(yàn)結(jié)果
六、實(shí)驗(yàn)提示
七、實(shí)驗(yàn)結(jié)果
程序全速運(yùn)行后,LED1按一定周期閃爍(周期理論值為0.2s),LED2在高頻脈沖信號(hào)(約15KHz)影響下,有微弱的光亮,但無(wú)明顯的周期變化現(xiàn)象。
八、實(shí)驗(yàn)范例程序框圖及源代碼(實(shí)驗(yàn)程序名:t8253.asm)
九、思考題:
1、為什么說(shuō)范例程序運(yùn)行時(shí)LED1閃爍周期的理論值是0.2秒?在范例程序設(shè)置LED2的最大閃爍周期是多少?請(qǐng)分析說(shuō)明。
答:因?yàn)門2采用OUT0的輸出為時(shí)鐘,且T2中設(shè)置初值為04h,則OUT2輸出方波周期為4*0.05s=0.2s 因?yàn)镺UT1?LED2,則LED2的周期即為計(jì)數(shù)器T1的周期,且T1的計(jì)數(shù)初值由程序知為32h=50d,所以最大周期為50*4/3*10^6=6.67x10^-5s。
2、修改片選信號(hào)接線使CS1和CS8253連接,并要求LED1的閃爍周期變?yōu)?秒(亮2秒,滅2秒),修改程序?qū)崿F(xiàn)功能。答:因?yàn)?/0.05=80d=50h,所以只需改變相應(yīng)的計(jì)數(shù)值和片選接口地址。
需改動(dòng)的原程序: mov ax,0b6h
out dx,ax mov dx,04a4h mov ax,04h out dx,ax mov ax,0 out dx,ax 改動(dòng)后:
mov ax,0b6h
out dx,ax mov dx,04b4h mov ax,50h out dx,ax mov ax,0 out dx,ax 其余列出的程序段都只要將片選接口地址中的a改為b即可。
實(shí)驗(yàn)5 8259中斷控制器實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
1、掌握8259A的工作原理。
2、掌握編寫中斷服務(wù)程序方法。
3、掌握初始化中斷向量的方法。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊。
三、實(shí)驗(yàn)內(nèi)容
了解中斷處理的原理,掌握利用中斷控制器進(jìn)行中斷申請(qǐng)和中斷操作的方法。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到三部分電路:電平開(kāi)關(guān)電路、簡(jiǎn)單I/O口擴(kuò)展電路和8259中斷控制器電路。
五、實(shí)驗(yàn)步驟
1、實(shí)驗(yàn)接線
CS0?CS8259
CS3 ?CS273 O0~O3?LED1~LED4
K1~K4?IR0~I(xiàn)R3 INT?INT(8086CPU板)INTA?INTA(8086CPU板)CS0?CS8253OUT0?8253CLK2 OUT2?LED1 OUT1?LED2 CLK3?8253CLK0,CLK3?8253CLK1
2、編譯調(diào)試程序
3、全速運(yùn)行程序,撥動(dòng)某一電平開(kāi)關(guān),觀察LED的亮滅情況。
六、實(shí)驗(yàn)提示
七、實(shí)驗(yàn)結(jié)果
全速運(yùn)行程序,由上往下?lián)軇?dòng)開(kāi)關(guān)時(shí),相應(yīng)位置的LED點(diǎn)亮,其余LED全滅。
八、實(shí)驗(yàn)范例程序框圖及源代碼(實(shí)驗(yàn)程序名:t8259.asm)
九、思考題:
1、說(shuō)明源代碼8259初始化所設(shè)置的所有中斷控制字的值和含義(按位說(shuō)明)。
答:ICW1為初始化字,13h即00010011b,對(duì)應(yīng)于邊沿觸發(fā),間距為8,單片8259A,需要ICW4。
ICW2為中斷類型碼字,80h即10000000b,對(duì)應(yīng)于IR0~IR7的中斷類型碼為80h~87h。
ICW3為中斷結(jié)束方式字,01h即00000001b,對(duì)應(yīng)于普通全嵌套方式,非緩沖方式,正常EOI,8086/8088模式。
OCW1為屏蔽控制字,00h即00000000b,對(duì)應(yīng)于8為全部復(fù)位屏蔽。
2、修改接線IR3?P+(實(shí)驗(yàn)箱右下角),并修改源程序,使按實(shí)驗(yàn)箱右下角“Pules”鍵時(shí)LED1~LED4全亮。
答:改變程序最后IR2的中斷服務(wù)程序的設(shè)定值,即由0fbh改為0f0h.二、綜合設(shè)計(jì)實(shí)驗(yàn)部分
一、設(shè)計(jì)要求
參考基礎(chǔ)實(shí)驗(yàn)的實(shí)驗(yàn)1~實(shí)驗(yàn)5所使用的硬件和范例程序,設(shè)計(jì)一個(gè)簡(jiǎn)單的紅綠燈控制系統(tǒng),用LED1~LED4表示兩組紅綠燈,每組紅燈、綠燈各1只。要求實(shí)現(xiàn)以下功能:
(1)紅綠燈的定時(shí)切換(每10秒切換一次)
(2)設(shè)置燈光測(cè)試開(kāi)關(guān)K1,當(dāng)K1打開(kāi)(高電平)時(shí),LED1~LED4全亮,關(guān)閉后恢復(fù)正常。
二、實(shí)驗(yàn)設(shè)備
微機(jī)實(shí)驗(yàn)箱、8086CPU模塊。
三、實(shí)驗(yàn)內(nèi)容
了解中斷處理的原理,掌握利用中斷控制器進(jìn)行中斷申請(qǐng)和中斷操作的方法。
四、實(shí)驗(yàn)原理介紹
本實(shí)驗(yàn)用到五部分電路:電平開(kāi)關(guān)電路、簡(jiǎn)單I/O口擴(kuò)展電路和8259中斷控制器電路,脈沖產(chǎn)生電路、8253定時(shí)器/計(jì)數(shù)器電路
五、實(shí)驗(yàn)步驟
1、實(shí)驗(yàn)接線
CS0?CS8259CS0?CS8253 CS0?CS273 O0?LED101?LED2 02?LED403?LED3 INT?INT(8086CPU板)INTA?INTA(8086CPU板)OUT0?8253CLK2 OUT2?IR0 OUT1?k1 IR1?k1CLK3?8253CLK0,CLK3?8253CLK1
2、編譯調(diào)試程序
3、全速運(yùn)行程序,觀察結(jié)果。
六、實(shí)驗(yàn)提示
(1)定時(shí)功能可利用8253實(shí)現(xiàn),利用定時(shí)器輸出作為中斷申請(qǐng),利用中斷處理切換LED的顯示;LED狀態(tài)可用內(nèi)存保存或用I/O口讀取。
(2)測(cè)試功能運(yùn)行可在主循環(huán)中通過(guò)I/O口讀取開(kāi)關(guān)狀態(tài)后判定,或利用中斷處理方式運(yùn)行。
七、實(shí)驗(yàn)結(jié)果
全速運(yùn)行程序,LED1和LED3為一組,LED12和LED4為一組,兩組燈每亮10秒切換一次,撥動(dòng)k1開(kāi)關(guān),觀察是否出現(xiàn)LED1~LED4全亮,關(guān)閉后恢復(fù)正常。
八、程序框圖及源代碼
ASSUME
CS:CODE CODE SEGMENT
PUBLIC
ORG
100H START:
MOV
CX,0
MOV
BX,0FAH START1:
CLI
MOV
DX,04A0H
MOV
AX,13H
OUT
DX,AX
;ICW1, ICW4 NEEDED
MOV
DX,04A2H
MOV
AX,80H
OUT
DX,AX
;ICW2 中斷類型80h
MOV
AX,01H
;01
OUT
DX,AX
;ICW4
MOV
AX,00H
OUT
DX,AX
;OCW1, 開(kāi)放所有中斷
NOP
;以上為8259初始化
MOV
AX,0
MOV
DS,AX
MOV
DI,200H
;初始化中斷向量表
MOV
AX,OFFSETINT0
MOV
DS:[DI],AX
ADD
DI,2
MOV
DS:[DI],100H
ADD
DI,2
MOV
AX,OFFSET INT1
MOV
DS:[DI],AX
ADD
DI,2
MOV
DS:[DI],100H
ADD
DI,2
MOV
AX,OFFSET INT2
MOV
DS:[DI],AX
ADD
DI,2
MOV
DS:[DI],100H
ADD
DI,2
MOV
AX,OFFSETINT3
MOV
DS:[DI],AX
ADD
DI,2
;上述程序?yàn)樾酒?259的初始化程序
MOV
DS:[DI],100H
;建議不熟練者不要修改。
MOV
DX,04A6H
;控制寄存器
MOV
AX,36H
;計(jì)數(shù)器0,方式3
OUT
DX,AX
MOV
DX,04A0H
MOV
AX,7CH
OUT
DX,AX
MOV
AX,92H
OUT
DX,AX
;計(jì)數(shù)值927Ch
MOV
DX,04A6H
MOV
AX,0B6H
;計(jì)數(shù)器2,方式3
OUT
DX,AX
MOV
DX,04A4H
MAIN:
WAITING:
DELAY:
INT0:
NOT
INT1:
MOV
INT2:
INT3:
NOP
MOV
CODE
MOV
AX,90H
OUT
DX,AX
MOV
AX,01H
;計(jì)數(shù)初值0190h
OUT
DX,AX
MOV
AX,0H
STI
;開(kāi)中斷。
CMP
AX,0H
JE
WAITING
;沒(méi)發(fā)生中斷,則等待
NOP
NOP
MOV
DX,04A0H
OUT
DX,AX
;對(duì)應(yīng)LED燈亮
MOV
CX,0
LOOP
DELAY
;數(shù)字濾波,按鍵去抖
JMP
START1
CLI
;關(guān)中斷。以下類推。
NOP
;此兩行為IR0的中斷服務(wù)程序 BX
;輸出取反
MOV
AX,BX
;用戶可修改。
IRET
;中斷返回,以下類推。
CLI
NOP
;此兩行為IR1的中斷服務(wù)程序,AX,0F0H
;用戶可修改。
IRET
CLI
NOP
;此兩行為IR2的中斷服務(wù)程序,MOV
AX,0F5H
;用戶可修改。
IRET
CLI
;此兩行為IR3的中斷服務(wù)程序,AX,0F7H
;用戶可修改。
IRET
ENDS
END
START
九.運(yùn)行結(jié)果調(diào)試問(wèn)題及解決方法
1.對(duì)于亮10秒鐘的時(shí)間設(shè)定問(wèn)題,一開(kāi)始是算好初值為190h,直接將其賦給AX而忽略了其高位低位的情況,導(dǎo)致驗(yàn)證結(jié)果時(shí)總是只有3秒左右,發(fā)現(xiàn)后改為先低位后高位復(fù)制即達(dá)到設(shè)定要求:
MOV
AX,90H OUT
DX,AX
MOV
AX,01H
;計(jì)數(shù)初值0190h
OUT
DX,AX
2.對(duì)于撥動(dòng)k1開(kāi)關(guān)后LED1~LED4全亮的情況,一開(kāi)始實(shí)驗(yàn)結(jié)果總是四個(gè)燈都亮但都只保持10秒的設(shè)定時(shí)間,之后又恢復(fù)到兩組燈每亮10秒切換一次的情況。當(dāng)將開(kāi)關(guān)量k1改為脈沖輸入的時(shí)候發(fā)現(xiàn)每一次脈沖信號(hào)也可以產(chǎn)生相同的實(shí)驗(yàn)結(jié)果,由此想到所設(shè)計(jì)的程序運(yùn)行周期的情況,一次中斷的產(chǎn)生與有效作用的時(shí)間只在這一總線周期內(nèi),因此可以在原有中斷的基礎(chǔ)上再人為的加上周期小于總線周期的脈沖有效信號(hào),使其在k1為高電平時(shí)期不斷地執(zhí)行中斷程序,因此可在k1有效時(shí)使LED1~LED4一直保持全亮,而k1低電平后又恢復(fù)原狀態(tài),具體操作為將脈沖輸出out1也接到k1上