![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/d9f4e1cb-a44e-4448-872a-ba484fa3a0f5/d9f4e1cb-a44e-4448-872a-ba484fa3a0f5pic.jpg)
![信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/d9f4e1cb-a44e-4448-872a-ba484fa3a0f5/d9f4e1cb-a44e-4448-872a-ba484fa3a0f51.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)課程設(shè)計(jì)</p><p> ——信號(hào)發(fā)生器功能程序設(shè)計(jì)</p><p> 第一章 設(shè)計(jì)課題概述 </p><p> 1.1 課程設(shè)計(jì)目的</p><p> 本學(xué)期開(kāi)設(shè)的《微型計(jì)算機(jī)原理與接口技術(shù)》理論課程是一門(mén)專業(yè)基礎(chǔ)課程,它的主要內(nèi)容包括微型計(jì)算機(jī)體系結(jié)構(gòu)、8086 微處理器和指令
2、系統(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)題的能力。</p><p> 《微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)(實(shí)踐)》課程設(shè)計(jì),讓學(xué)生對(duì)微機(jī)系統(tǒng)有一個(gè)較全面的理解,掌握常規(guī)的芯片使用方法、掌握簡(jiǎn)單的微型計(jì)
3、算機(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)書(shū)來(lái)選擇課題,并且獨(dú)立完成課題,寫(xiě)出課程設(shè)計(jì)說(shuō)明書(shū),畫(huà)出電路原理圖,說(shuō)明工作原理,畫(huà)出電路板圖,編寫(xiě)程序以及程序流程圖。</p><p> 針對(duì)《信號(hào)發(fā)生器功能程序設(shè)計(jì)》這一
4、課題,主要涉及到硬件的連接(主要用到芯片有:8086CPU,DAC0832,8255,74LS273,74LS138,運(yùn)放等)以及數(shù)碼管,鍵盤(pán)矩陣硬件,示波器等連接原理圖,程序的編寫(xiě)(主要涉及到顯示波形,數(shù)碼管顯示以及通過(guò)小鍵盤(pán)來(lái)對(duì)波形進(jìn)行選擇控制)以及各個(gè)子程序或程序段的程序流程等, </p><p> 通過(guò)課程設(shè)計(jì)不僅可以鍛煉學(xué)生在微機(jī)應(yīng)用方面的實(shí)際工作能力,將所學(xué)轉(zhuǎn)化為所用,更是一個(gè)鍛煉解決實(shí)際問(wèn)題能力的
5、很好機(jī)會(huì)。</p><p> 1.2 課程設(shè)計(jì)要求</p><p> ?。?)、分別用C語(yǔ)言和匯編語(yǔ)言編程完成硬件接口功能設(shè)計(jì);</p><p> ?。?)、硬件電路基于80x86微機(jī)的接口電路;</p><p> ?。?)、程序功能要求:小鍵盤(pán)給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對(duì)應(yīng)信號(hào)波形(D/A)輸出(信號(hào)波形包括正弦波、三角波、方波、鋸
6、齒波)、輸出信號(hào)波形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。</p><p><b> 實(shí)現(xiàn)技術(shù)指標(biāo)</b></p><p> (1)、完全用小鍵盤(pán)控制各波形間的切換和頻率和幅值的調(diào)節(jié)以及退出。</p><p> (2)、實(shí)現(xiàn)正弦波、三角波、方波和鋸齒波信號(hào)的產(chǎn)生。</p><p> ?。?)、數(shù)碼管同步顯示當(dāng)
7、前工作波形的頻率和幅值。</p><p> ?。?)、實(shí)現(xiàn)頻率的1到5倍可調(diào)。</p><p> ?。?)、實(shí)現(xiàn)幅值的1到5倍可調(diào)。</p><p><b> 使用說(shuō)明</b></p><p> ?。?)、小鍵盤(pán)第一列對(duì)應(yīng)0-3,第二列對(duì)應(yīng)4—7。</p><p> ?。?)、開(kāi)始選擇0—3分別
8、對(duì)應(yīng)方波,三角波,鋸齒波,正弦波。同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率。</p><p> ?。?)、有波形產(chǎn)生以后,再調(diào)節(jié)幅值和頻率。0對(duì)應(yīng)增大頻率,1對(duì)應(yīng)減小頻率,2對(duì)應(yīng)減小幅值,3對(duì)應(yīng)增大幅值。</p><p> (4)、頻率和幅值可以實(shí)現(xiàn)1到5倍可調(diào),同時(shí)數(shù)碼管會(huì)顯示當(dāng)前波形的幅值和頻率的倍數(shù)(1~5)。</p><p> (5)、任何時(shí)候4都對(duì)應(yīng)退出,
9、回到最開(kāi)始的選擇波形狀態(tài),數(shù)碼管歸零。</p><p> 第二章 設(shè)計(jì)思想和實(shí)施方案</p><p><b> 2.1功能分析</b></p><p><b> 2.1.1波形產(chǎn)生</b></p><p> 由于要由數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)來(lái)產(chǎn)生波形,因此要由D/A轉(zhuǎn)換芯片DAC0832來(lái)完成
10、此項(xiàng)任務(wù)。通過(guò)匯編語(yǔ)言編寫(xiě)各個(gè)波形子程序,由于要顯示波形,所以每輸出一個(gè)值,都要進(jìn)行一定時(shí)間的延時(shí),掃描沒(méi)有按鍵按下后再輸出下一個(gè)值,直到形成一個(gè)周期的代碼。利用循環(huán),就可產(chǎn)生連續(xù)波形代碼,再通過(guò)8255輸出給DAC0832,將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案在后面有分析。</p><p><b> 2.1.2波形切換</b></p><p> 波
11、形的選擇和調(diào)節(jié)由小鍵盤(pán)控制。第一列從上到下編碼為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ù)。由于小鍵盤(pán)掃描在程序總是存在的,因此可隨時(shí)進(jìn)行波形間的切換。</p>
12、;<p> 2.1.3 數(shù)碼管顯示</p><p> 數(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)的值,就可以同步顯示波形的幅值和頻率。利用小鍵盤(pán)掃描得到的鍵值進(jìn)行判斷,對(duì)緩
13、沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。</p><p> 2.1.4小鍵盤(pán)控制</p><p> 使用實(shí)驗(yàn)箱上4×4鍵盤(pán),可以實(shí)現(xiàn)切換波形,調(diào)頻、調(diào)幅和退出波形的控制功能。Protues內(nèi)的鍵盤(pán)矩陣掃描時(shí)輪流選通一行,然后從端口處讀取列數(shù)據(jù),如果有按鍵則讀取的數(shù)據(jù)肯定有一位為0,經(jīng)過(guò)取反后,盡有一位為1,然后再根據(jù)選取的列和讀取的行值,確定按的是哪一
14、個(gè)鍵,然后將鍵值編碼保存在一個(gè)名為keyass的存儲(chǔ)單元里。當(dāng)有鍵按下時(shí),從keyass內(nèi)取出鍵值進(jìn)行判斷,就能轉(zhuǎn)入相應(yīng)的子程序進(jìn)行控制,并且鍵盤(pán)掃描、獲取鍵值等子程序也能夠很好的嵌入在其他程序中,方便調(diào)用。</p><p><b> 2.1.5有極調(diào)頻</b></p><p> 改變波形子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,即延時(shí),就可改變整個(gè)波形的頻率。延時(shí)越短頻率越高
15、。定義三個(gè)緩沖區(qū)來(lái)存放延時(shí),其中一個(gè)存放初始值3,一個(gè)存放當(dāng)前波形的延時(shí),還有一個(gè)作為中間暫存用。產(chǎn)生波形以后,取出延時(shí)初值存入中間暫存緩沖區(qū),再掃描鍵盤(pán):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í)。</p><p><b> 2.1.6有極調(diào)幅</b></p><p>
16、; 和有級(jí)調(diào)頻類似,有極調(diào)幅也是定義三個(gè)緩沖區(qū),功能和有極調(diào)頻類似。幅值緩沖區(qū)存放的是輸出點(diǎn)的值的放大倍數(shù),調(diào)節(jié)放大倍數(shù)也就使幅值改變了。產(chǎn)生波形以后,取出倍數(shù)初值存入中間暫存緩沖區(qū),再掃描鍵盤(pán):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ù)。</p><p><b> 2.1.6開(kāi)始結(jié)束</b
17、></p><p> 用小鍵盤(pán)第二列第一個(gè)也就是4來(lái)結(jié)束波形,無(wú)論在什么時(shí)候只在小鍵盤(pán)掃描到了4鍵,它就會(huì)無(wú)條件跳出程序,返回起始狀態(tài),等待選擇波形,同時(shí)數(shù)碼管顯示零。</p><p> 2.2所用芯片功能簡(jiǎn)介</p><p> 2.2.1 8086功能簡(jiǎn)介</p><p> 8086 CPU是由總線接口部件BIU和執(zhí)行部件EU
18、這兩大部分構(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位地址總線和若干條控制總線。 </p><p> 其具體任務(wù)是:負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊(duì)列緩
19、沖器暫存。CPU執(zhí)行指令時(shí),總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存單元或I/O端口中。</p><p> 執(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)始的
20、,它從總線接口單元的指令隊(duì)列緩沖器中每次取一個(gè)字節(jié)。如果指令隊(duì)列緩沖器中是空的,那么EU就要等待BIU通過(guò)外部總線從存儲(chǔ)器中取得指令并送到EU,通過(guò)譯碼電路分析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。</p><p><b> 管腳圖如下:</b></p><p> 2.2.2 8255A功能簡(jiǎn)介</p><p> 8255A
21、具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過(guò)它CPU可直接與外設(shè)相連。</p><p> 8255A在使用前要寫(xiě)入一個(gè)方式控制字,選擇A、B、C三個(gè)端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無(wú)須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸
22、出;方式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線。</p><
23、;p><b> 管腳圖如下:</b></p><p> 2.2.3 DAC0832功能簡(jiǎn)介</p><p> DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開(kāi)關(guān)、運(yùn)算放大器和參考電壓VREF四大部分組成。電路有極好的溫度跟隨性,使用了COMS電流開(kāi)關(guān)和控制邏輯而獲得低功耗、低輸出的泄漏電流誤差。
24、集成電路內(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è)可能值。</p><p> D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號(hào),可通過(guò)一
25、個(gè)高輸入阻抗的線性運(yùn)算放大器實(shí)現(xiàn)。運(yùn)放的反饋電阻可通過(guò)RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。</p><p> DAC0832的管腳圖如下:</p><p> 2.2.4 74LS273功能簡(jiǎn)介</p><p> 地址鎖存器就是一個(gè)暫存器,它根據(jù)控制信號(hào)的狀態(tài),將總線上地址代碼暫存起來(lái)。8
26、086/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ù)。</p><p> 地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時(shí)才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的AL
27、E端輸出的鎖存控制信號(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)。</p
28、><p> 74LS273的管腳圖如右:</p><p><b> 2.3 實(shí)施方案</b></p><p> 2.3.1系統(tǒng)總體設(shè)計(jì)方案</p><p> 該設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分。</p><p> 1.硬件上要求以8086CPU為核心進(jìn)行電路設(shè)計(jì)。完全用小鍵盤(pán)對(duì)波形進(jìn)行控制。
29、小鍵盤(pán)作為產(chǎn)生波形、波形切換、調(diào)節(jié)頻率,調(diào)節(jié)幅值、退出波形的控制端口。8255A芯片完成對(duì)小鍵盤(pán)掃描,獲取鍵值編碼以及輸出到數(shù)碼管。通過(guò)DAC0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,再由轉(zhuǎn)換電路將電流輸出轉(zhuǎn)換為電壓輸出產(chǎn)生各種波形,通過(guò)虛擬示波器顯示出波形。由于8255A的A,B,C端口都已使用,所以采用鍵盤(pán)控制進(jìn)行幅值和頻率的有極調(diào)節(jié)。</p><p> 2.軟件方面要設(shè)計(jì)方波,三角波,鋸齒波,正弦波何時(shí)產(chǎn)生,如何
30、產(chǎn)生,何時(shí)退出,并且還要設(shè)計(jì)如何通過(guò)對(duì)按鍵的判斷,對(duì)頻率和幅值進(jìn)行調(diào)節(jié)。</p><p> 方波比較簡(jiǎn)單,先掃描鍵盤(pán),無(wú)鍵按下時(shí)輸出零,保持一個(gè)延時(shí),再掃描鍵盤(pán),無(wú)鍵按下時(shí)輸出20H的倍數(shù),該倍數(shù)就是我定義的幅值,再延時(shí),循環(huán)該周期就可得到方波。如果有鍵按下就會(huì)轉(zhuǎn)入相應(yīng)子程序。</p><p> 三角波分為兩段,因它的上升斜坡和下降斜坡都是線性關(guān)系,所以只要由數(shù)字量的增減來(lái)控制就可以了
31、。產(chǎn)生上升斜坡時(shí)讓輸出值從零開(kāi)始逐漸遞增,其上升的最大值是30乘以放大倍數(shù),相反,產(chǎn)生下降斜坡時(shí),讓輸出值從最大值逐漸遞減到零。為簡(jiǎn)單起見(jiàn) ,這里采用的是查表法,在數(shù)據(jù)段定義了三角波函數(shù)表,規(guī)律如上。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。 </p><p> 鋸齒波截取三角波的上升斜坡部分,到達(dá)最大值后就跳回最低值0,方法與三角波相同,也采用查表法。先定義了鋸齒波的函數(shù)表,輸出時(shí)只要按著函數(shù)表一
32、個(gè)一個(gè)往下輸出,當(dāng)顯示到最大值即一個(gè)周期內(nèi)的最后一個(gè)值再將指針指向表的首地址就開(kāi)始了新的周期。其幅值由放大倍數(shù)控制,頻率是由輸出點(diǎn)之間的延時(shí)來(lái)控制。</p><p> 正弦波也是用的查表法。該方法的優(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)
33、為40點(diǎn)/周期。正弦數(shù)字量表中的值為參考值,對(duì)于不同幅值的正弦波可以通過(guò)把表中的每個(gè)值乘以相同的倍數(shù)得到,其頻率由改變輸出點(diǎn)之間的延時(shí)來(lái)實(shí)現(xiàn)。 </p><p> 頻率和幅值的調(diào)節(jié)由每個(gè)點(diǎn)的延時(shí)和幅值的放大倍數(shù)決定。在各個(gè)波形輸出之前,先讀取頻率和幅值的初值,若要增加(減?。╊l率,則使延時(shí)減(加)1;若要增大(減?。┓?,則使原幅值基礎(chǔ)值得放大倍數(shù)加(減)1。然后再將改變后的幅值頻率送給原波形進(jìn)行輸出,同時(shí),幅
34、值和頻率的值作為偏移量查找數(shù)碼管顯示表,然后送給對(duì)應(yīng)的數(shù)碼管顯示。</p><p> 2.3.2系統(tǒng)設(shè)計(jì)方框圖</p><p> 第三章 典型程序模塊及編程技巧分析</p><p><b> 3.1鍵盤(pán)掃描模塊</b></p><p><b> 小鍵盤(pán)工作原理:</b></p>
35、<p> ?。?)初始化8255的工作方式:A,B口作為輸出,C口低四位作為輸入。矩陣的X1~X4接到輸出端口PA0-PA3上,用程序控制4條行線的輸出。4條列線Y1~Y4連接到輸入端口C的PC0-PC3。用讀指令讀取C口狀態(tài)時(shí),可讀取鍵盤(pán)的列號(hào)。</p><p> ?。?)在無(wú)鍵按下的時(shí)候,由于接到+5V上的上拉電阻的作用,列線被置成高電平。壓下某一個(gè)鍵所在的行線和列線接通。這時(shí),如果向被壓下的鍵所
36、在的行線上輸出一個(gè)低電平信號(hào),則對(duì)應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從C口讀取列線信號(hào)時(shí),便能檢測(cè)到該列線上的低電平。</p><p> ?。?)掃描鍵盤(pán)時(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)中低電平的位置,便
37、能確定哪個(gè)鍵被按下了。檢測(cè)到按鍵后,對(duì)壓下的鍵進(jìn)行編碼,將該鍵的行列信號(hào)轉(zhuǎn)化成16進(jìn)制碼,將鍵值存入緩沖區(qū),以便以后利用進(jìn)行判斷比較。接著繼續(xù)掃描按鍵,等待按鍵釋放。</p><p> 具體的實(shí)現(xiàn)如下: </p><p> CCSCAN掃描按鍵是否有鍵按下:</p><p> CCSCAN PROC NEAR ;掃描是否有按鍵閉合子
38、程序</p><p> MOV AL,00H</p><p> MOV DX,MY8255_A ;將4列全選通,X1~X4置0</p><p> OUT DX,AL</p><p> MOV DX,MY8255_C</p><p> IN AL,D
39、X ;讀Y1~Y4</p><p> NOT AL</p><p> AND AL,0FH ;取出Y1~Y4的反值</p><p><b> RET</b></p><p> CCSCAN ENDP</p><p> 如果有按鍵,就獲取按鍵
40、碼的功能,4×4鍵盤(pán)的編碼, 從上到下,從左到右,依次編碼為0~F, 如果有按鍵, 則轉(zhuǎn)入到按鍵處理子程序模塊執(zhí)行, 如果沒(méi)有,則返回主程序循環(huán)。</p><p> 具體的實(shí)現(xiàn)代碼如下:</p><p> GETKEY1 PROC NEAR ;獲取鍵值子程序</p><p> CALL DIS ;顯示刷新&
41、lt;/p><p> CALL DALLY ;延時(shí)</p><p> CALL DALLY ;延時(shí)</p><p> CALL CLEAR ;清屏</p><p> CALL CCSCAN ;再次掃描按鍵</p><p>
42、 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2</p><p> JMP BEGIN1 ;否則跳回開(kāi)始繼續(xù)循環(huán)</p><p> GETKEY2: MOV CH,0FEH</p><p> MOV CL,00H ;設(shè)置當(dāng)前檢測(cè)的是第幾列</p><p&
43、gt; COLUM: MOV AL,CH ;選取一列,將X1~X4中一個(gè)置0</p><p> MOV DX,MY8255_A</p><p> OUT DX,AL</p><p> MOV DX,MY8255_C ;讀Y1~Y4,用于判斷哪一行按鍵閉合</p><p>
44、 IN AL,DX</p><p> L1: TEST AL,01H ;是否為第1行</p><p> JNZ L2 ;不是則繼續(xù)判斷</p><p> MOV AL,00H ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值</p><p> JMP K
45、CODE</p><p> L2: TEST AL,02H ;是否為第2行</p><p> JNZ L3 ;不是則繼續(xù)判斷</p><p> MOV AL,04H ;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p&g
46、t;<p> L3: TEST AL,04H ;是否為第3行</p><p> JNZ L4 ;不是則繼續(xù)判斷</p><p> MOV AL,08H ;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p>
47、; L4: TEST AL,08H ;是否為第4行</p><p> JNZ NEXT ;不是則繼續(xù)判斷</p><p> MOV AL,0CH ;設(shè)置第4行第1列的對(duì)應(yīng)的鍵值</p><p> KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按
48、鍵值</p><p> CALL PUTBUF ;保存按鍵值</p><p> PUSH AX</p><p> KON: CALL DIS ;顯示刷新</p><p> CALL CLEAR ;清屏</p><p> CALL
49、 CCSCAN ;掃描按鍵,判斷按鍵是否彈起</p><p> JNZ KON ;未彈起則繼續(xù)循環(huán)等待彈起</p><p> POP AX</p><p> NEXT: INC CL ;當(dāng)前檢測(cè)的列數(shù)遞增</p><p> MOV A
50、L,CH</p><p> TEST AL,08H ;檢測(cè)是否掃描到第4列</p><p> JZ KERR ;是則跳回到開(kāi)始處</p><p> ROL AL,1 ;沒(méi)檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列</p><p> MOV CH,AL</p&
51、gt;<p> JMP COLUM</p><p> KERR: RET</p><p> GETKEY1 ENDP</p><p> PUTBUF PROC NEAR ;保存鍵值子程序</p><p> MOV DI,OFFSET KEY</p>&
52、lt;p> MOV [DI],AL</p><p> CMP DI,2FFFH</p><p> JNZ GOBACK</p><p> MOV DI,3004H</p><p> GOBACK: RET</p><p> PUTBUF ENDP&l
53、t;/p><p> 3.2數(shù)碼管顯示模塊</p><p> 4個(gè)數(shù)碼管的X端為選通端,將小鍵盤(pán)的X1~X4對(duì)應(yīng)接到數(shù)碼管,這樣掃描小鍵盤(pán)的時(shí)候,也就選中了數(shù)碼管,當(dāng)調(diào)用getkey1獲取鍵值子程序的時(shí)候,數(shù)碼管輪流選中,也就可以控制哪個(gè)數(shù)碼管顯示什么內(nèi)容。通過(guò)對(duì)8255寫(xiě)入數(shù)據(jù),由B口輸出給數(shù)碼管的A~Dp,當(dāng)沒(méi)有波形輸入時(shí),數(shù)碼管顯示0數(shù)碼管;定義兩個(gè)緩沖區(qū)存放幅值和頻率,有波形輸出時(shí),
54、同步顯示該波形的幅值和頻率。</p><p> 先在數(shù)據(jù)段定義一個(gè)緩沖區(qū)存放數(shù)碼管顯示0~F的段位值表:</p><p> DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H</p><p> DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H</p><p>
55、因?yàn)橐恢憋@示數(shù)碼管,所以將顯示部分作為子程序,方便經(jīng)常調(diào)用。</p><p> DIS PROC NEAR ;顯示鍵值子程序</p><p> PUSH AX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示</p><p> MOV SI,3000H ;緩沖區(qū)3000H內(nèi)存放了當(dāng)前波形的幅值,3
56、001H存放了頻率。 </p><p> MOV DL,0F7H</p><p> MOV AL,DL</p><p> AGAIN: PUSH DX</p><p> MOV DX,MY8255_A</p><p> OUT DX,AL
57、 ;設(shè)置X1~X4,選通一個(gè)數(shù)碼管</p><p> MOV AL,[SI] ;取出緩沖區(qū)中存放鍵值</p><p> MOV BX,OFFSET DTABLE</p><p> AND AX,00FFH</p><p> ADD BX,AX</p><p&g
58、t; MOV AL,[BX] ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值</p><p> MOV DX,MY8255_B</p><p> OUT DX,AL ;寫(xiě)入數(shù)碼管A~Dp</p><p> CALL DALLY</p><p> INC S
59、I ;取下一個(gè)鍵值</p><p> POP DX</p><p> MOV AL,DL</p><p> TEST AL,01H ;判斷是否顯示完?</p><p> JZ OUT1 ;顯示完,返回</p><p>
60、ROR AL,1</p><p> MOV DL,AL</p><p> JMP AGAIN ;未顯示完,跳回繼續(xù)</p><p> OUT1: POP AX</p><p><b> RET</b></p><p><b
61、> DIS ENDP</b></p><p> 3.3有級(jí)調(diào)頻調(diào)幅判斷及控制模塊</p><p> 改變波形產(chǎn)生子程序中的各個(gè)數(shù)據(jù)輸出時(shí)間,及延時(shí),就可改變整個(gè)波形的頻率。改變波形產(chǎn)生子程序中的每次輸出數(shù)值的放大倍數(shù),就可以改變整個(gè)波形的幅值。而實(shí)現(xiàn)有級(jí)變化的初值是在數(shù)據(jù)段預(yù)先定義的數(shù)據(jù)表。</p><p> 在選擇波形以后,才能調(diào)節(jié)頻率
62、和幅值,頻率和幅值的調(diào)節(jié)由小鍵盤(pán)控制。在3000H和3001H的緩沖區(qū)內(nèi)存放了幅值和頻率的初值3,在每個(gè)波形輸出之前先掃描鍵盤(pán),鍵值存在KEY里,對(duì)KEY值進(jìn)行判斷后,取出緩沖區(qū)的初值做相應(yīng)改變:0選擇增大頻率,1選擇減小頻率,2選擇減小幅值,3選擇增大幅值,4退出波形,返回開(kāi)始狀態(tài)。</p><p> 具體的實(shí)現(xiàn)代碼如下:</p><p> AMPLFENC PROC N
63、EAR ;調(diào)節(jié)幅值頻率子程序</p><p> CALL DIS ;刷新</p><p> CALL CCSCAN ;再次掃描按鍵</p><p> JNZ TRI1 ;有鍵按下則跳置tri1</p><p> JMP TRI5
64、 ;沒(méi)按鍵按下就跳出該子程序</p><p> TRI1: CALL DIS ;刷新</p><p> CALL GETKEY1</p><p> MOV SI,OFFSET KEY</p><p> MOV AL,[SI]</p><p>
65、CMP AL,4 ;第五個(gè)鍵就退出</p><p> JZ TRI10</p><p> JZ TRI5</p><p> CMP AL,0 ;第一個(gè)鍵減少周期</p><p> JNZ TRI2</p><p> M
66、OV DI,3001H ;取延時(shí)初值</p><p> MOV BL,[DI]</p><p> CMP BL,01H</p><p> JE TRI5</p><p> DEC BL</p><p> MOV [DI],
67、BL</p><p> JMP TRI5</p><p> TRI2: CMP AL,1 ;第二個(gè)鍵增加周期</p><p> JNZ TRI3</p><p> MOV DI,3001H ;取延時(shí)初值</p><p> MOV
68、 BL,[DI]</p><p> CMP BL,05H</p><p> JE TRI5</p><p> INC BL</p><p> MOV [DI],BL</p><p> JMP TRI5</p><p>
69、 TRI3: CMP AL,2 ;第三個(gè)鍵減少幅度</p><p> JNZ TRI4</p><p> MOV DI,3000H</p><p> MOV BL,[DI] ;取幅值初值</p><p> CMP BL,01H</p>
70、;<p> JE TRI5</p><p> DEC BL</p><p> MOV [DI],BL</p><p> JMP TRI5</p><p> TRI4: CMP AL,3 ;第四個(gè)鍵增加幅度</p><p&g
71、t; JNZ TRI5</p><p> MOV DI,3000H</p><p> MOV BL,[DI] ;取幅值初值</p><p> CMP BL,05H</p><p> JE TRI5</p><p> INC
72、 BL</p><p> MOV [DI],BL</p><p> JMP TRI5</p><p> TRI10: JMP FAR PTR BEGIN0</p><p> TRI5: RET</p><p> AMPLFENC ENDP</p>&l
73、t;p> 3.4 波形切換及基本控制模塊</p><p> 這個(gè)模塊是本次設(shè)計(jì)的主程序,它控制了波形的輸出和切換。它是根據(jù)對(duì)小鍵盤(pán)的操作來(lái)實(shí)現(xiàn)的,不同按鍵對(duì)應(yīng)的編碼轉(zhuǎn)入不同模塊(0:方波,1:三角波,2:鋸齒波,3:正弦波,4:退出波形)。先掃描鍵盤(pán)是否有鍵按下,若無(wú)循環(huán)等待,若有則將鍵值保存再比較,然后實(shí)現(xiàn)相應(yīng)操作。為使程序可循環(huán)使用,不至于顯示一次波形就退出,在執(zhí)行完子程序返回時(shí),不退出系統(tǒng),而是返
74、回到開(kāi)始等待輸入狀態(tài),這樣就能切換波形。</p><p> 具體的實(shí)現(xiàn)代碼如下:</p><p> BEGIN0: MOV SI,3000H ; 把數(shù)碼管清0</p><p> MOV AL,00H ; 先初始化鍵值為0</p><p> MOV [SI],AL</p>
75、<p> MOV AL,00H</p><p> MOV [SI+1],AL</p><p> MOV AL,00H</p><p> MOV [SI+2],AL</p><p> MOV AL,00H</p><p> MOV
76、 [SI+3],AL</p><p> MOV SI,OFFSET KEY</p><p> MOV AL,00H</p><p> MOV [SI],AL</p><p> BEGIN1: CALL DIS ;顯示刷新</p><p>
77、CALL CCSCAN ;再次掃描按鍵</p><p> JNZ LBEGIN0 ;有鍵按下則跳置LBEGIN0</p><p> JMP BEGIN1 ;不是按下第一或二鍵就繼續(xù)等待輸入</p><p> LBEGIN0: CALL GETKEY1 ;第二個(gè)菜單等待輸入</p&g
78、t;<p> CALL DIS</p><p> MOV SI,OFFSET KEY</p><p> MOV AL,[SI]</p><p> CMP AL,4 ;第5個(gè)鍵退出</p><p> JZ BEGIN0</p><
79、;p> CMP AL,0 ;第1個(gè)鍵到squ(方波)函數(shù)</p><p> JZ LBEGIN1</p><p> CMP AL,1 ;第2個(gè)鍵到tri(三角波)函數(shù)</p><p> JZ LBEGIN2</p><p> CMP A
80、L,2 ;第3個(gè)鍵到rec(鋸齒)函數(shù)</p><p> JZ LBEGIN3</p><p> CMP AL,3 ;第4個(gè)鍵到sin(正弦)函數(shù)</p><p> JZ LBEGIN4</p><p> JMP BEGIN1 ; 其他鍵則跳到繼
81、續(xù)等待輸入</p><p> LBEGIN1: CALL SQUREW ;SQUARE</p><p> JMP BEGIN0</p><p> LBEGIN2: CALL TRIW ;TRIANGLE</p><p> JMP BEGIN0</p>
82、<p> LBEGIN3: CALL RCTW ; RECANGLE</p><p> JMP BEGIN0</p><p> LBEGIN4: CALL SINW ;SIN</p><p> JMP BEGIN0 ;執(zhí)行完輸出波形之后 回到開(kāi)始狀態(tài)</p>
83、;<p> JMP BEGIN0</p><p><b> 3.5波形產(chǎn)生模塊</b></p><p><b> 3.5.1方波</b></p><p> 方波的產(chǎn)生只要使DAC0832輸出一個(gè)較大值(此處用20H),并延時(shí)一段時(shí)間,再輸出一個(gè)較小值(此處用00F),延時(shí)一段相同時(shí)間,就是
84、方波的一個(gè)周期。但因?yàn)閷?shí)現(xiàn)過(guò)程中結(jié)合了數(shù)碼管的顯示以及頻率幅值的調(diào)節(jié)所以并不那么簡(jiǎn)單。先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤(pán),無(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)該周期就得到
85、連續(xù)方波。</p><p> 具體的實(shí)現(xiàn)代碼如下:</p><p> SQUREW PROC NEAR ;方波發(fā)生子程序</p><p> MOV DI,OFFSET FENC ;初始化顯示管的值為3</p><p> MOV AL,[DI]</p><p
86、> MOV SI,3000H</p><p> MOV [SI],AL</p><p> MOV DI,OFFSET AMPL</p><p> MOV AL,[DI]</p><p> MOV SI,3001H</p><p> MOV
87、 [SI],AL</p><p> SQUR1: CALL AMPLFENC ;調(diào)節(jié)幅值頻率子程序,有鍵按下是調(diào)節(jié)幅值頻率</p><p> MOV SI,OFFSET KEY ;按下第五個(gè)鍵就退出</p><p> MOV AL,4</p><p> CMP
88、 [SI],AL</p><p> JZ SQUA</p><p> CALL DIS ;刷新數(shù)碼管</p><p> MOV SI,3000H</p><p> MOV BL,[SI]</p><p> MOV DI,OFFSET
89、 TIAOFU</p><p> MOV [DI],BL</p><p> MOV SI,3001H</p><p> MOV AL,[SI]</p><p> MOV SI,OFFSET TIAOPIN</p><p> MOV [SI],AL&l
90、t;/p><p> TRILOOP1: MOV DX,DA0832 ;輸出低電平 輸出方波形</p><p> MOV AL,00H</p><p> OUT DX,AL</p><p> CALL DIS ;刷新</p><p> PUS
91、H CX</p><p> PUSH AX</p><p> MOV CL,TIAOPIN</p><p> MOV CH,00H</p><p> D11: MOV AX,00FFH</p><p> D21: DEC AX</p
92、><p> PUSH AX</p><p> PUSH CX</p><p> CALL DIS</p><p> CALL CCSCAN ;再次掃描按鍵</p><p> JNZ SQUR1 ;有鍵按下則跳置squr1,</p>
93、;<p> POP CX</p><p> POP AX</p><p> JNZ D21</p><p> LOOP D11</p><p> POP AX</p><p> POP CX</p><p
94、> CALL CCSCAN ;再次掃描按鍵</p><p> JNZ SQUR1 ;有鍵按下則跳置squr1,改變幅值頻率</p><p> MOV BL,TIAOFU</p><p> MOV AL,20H</p><p> MUL BL</p>
95、<p> MOV DX,DA0832 ;輸出高電平</p><p> OUT DX,AL</p><p> CALL DIS ;刷新</p><p> PUSH CX</p><p> PUSH AX</p><p> MO
96、V CL,TIAOPIN</p><p> MOV CH,00H</p><p> D12: MOV AX,00FFH</p><p> D22: DEC AX</p><p> PUSH AX</p><p> PUSH CX</
97、p><p> CALL DIS</p><p> CALL CCSCAN ;再次掃描按鍵</p><p> JNZ SQUR1 ;有鍵按下則跳置tri1</p><p> POP CX</p><p> POP AX</p>
98、<p> JNZ D22</p><p> LOOP D12</p><p> POP AX</p><p> POP CX</p><p> JZ TRILOOP1 ;沒(méi)按鍵時(shí)繼續(xù)輸出波形</p><p> SQUA: RE
99、T</p><p> SQUREW ENDP</p><p><b> 3.5.2三角波</b></p><p> 三角波理論上有兩段,上升和下降,上升時(shí)從最低值開(kāi)始自增,直到最大值,然后再自減至最低。本設(shè)計(jì)中,因?yàn)閷?duì)波形精度要求不是很高,所以采用按列表輸出的方式,即先在數(shù)據(jù)段定義了一段三角波一個(gè)周期內(nèi)的采樣值的數(shù)字量表,采樣頻率為60
100、點(diǎn)/周期。數(shù)字量表中的值為參考值,輸出三角波時(shí)通過(guò)把表中的每個(gè)值乘以相同的倍數(shù),該倍數(shù)為我們?cè)O(shè)定的幅值。波形輸出方式都相同,這里簡(jiǎn)要說(shuō)明:先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤(pán),執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),將第一個(gè)數(shù)字量乘以TIAOFU輸出,延遲時(shí)間乘以TIAOPIN,再掃描,輸出第二個(gè)值,直到指針指完該數(shù)字量表再循環(huán)該周期就得到連續(xù)三角波。</p>
101、;<p> 具體的實(shí)現(xiàn)代碼如下:</p><p> TRITAB DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ;三角函數(shù)表</p><p> DB 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30</p><p> DB 30,29,28,27,26,2
102、5,24,23,22,21,20,19,18,17,16</p><p> DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1</p><p> TRIW PROC NEAR ;三角波形子程序</p><p> MOV DI,OFFSET FENC</p><p>
103、MOV AL,[DI]</p><p> MOV SI,3000H</p><p> MOV [SI],AL</p><p> MOV DI,OFFSET AMPL</p><p> MOV AL,[DI]</p><p> MOV SI
104、,3001H</p><p> MOV [SI],AL</p><p> TRA1: CALL AMPLFENC</p><p> MOV SI,OFFSET KEY</p><p> MOV AL,4</p><p> CMP [SI],AL<
105、;/p><p> JZ TRIA</p><p> CALL DIS</p><p> MOV SI,3000H</p><p> MOV BL,[SI]</p><p> MOV DI,OFFSET TIAOFU</p><p>
106、; MOV [DI],BL</p><p> MOV SI,3001H</p><p> MOV AL,[SI]</p><p> MOV SI,OFFSET TIAOPIN</p><p> MOV [SI],AL</p><p> TRLOOP
107、1: MOV SI,OFFSET TRITAB</p><p> TRLOOP2: MOV AL,[SI]</p><p> MOV BL,TIAOFU</p><p> MUL BL</p><p> MOV DX,DA0832 ;啟動(dòng)D/A轉(zhuǎn)換</p>
108、<p> OUT DX,AL</p><p> PUSH AX</p><p> PUSH SI</p><p> PUSH CX</p><p> MOV CL,TIAOPIN</p><p> MOV CH,00H</
109、p><p> DALLYTRI1: CALL DIS</p><p> CALL CCSCAN</p><p> JNZ TRA1</p><p> LOOP DALLYTRI1</p><p> POP CX</p><p> P
110、OP SI</p><p> POP AX</p><p> INC SI</p><p> CMP SI,OFFSET RCTTAB</p><p> JNZ TRLOOP2</p><p> JMP TRLOOP1</p>
111、<p> TRIA: RET</p><p> TRIW ENDP</p><p><b> 3.5.3鋸齒波</b></p><p> 鋸齒波就是截取了三角波的上升部分,由最小值自增到達(dá)最大值后下一個(gè)值就返回最小值。本設(shè)計(jì)中鋸齒波的產(chǎn)生方式也是對(duì)鋸齒波采樣,采樣周期為32點(diǎn)/周期,然后以采樣表為基礎(chǔ)輸出。鋸齒波的輸出
112、方式與三角波相同,這里不再重復(fù)。</p><p> 具體的實(shí)現(xiàn)代碼如下:</p><p> 先在數(shù)據(jù)段定義一張鋸齒波采樣后的數(shù)字量表:</p><p> RCTTAB DB 1,2,3,4,5,6,7,8 ;鋸齒函數(shù)表</p><p> DB 9,10,11,12,13,14,15,16&
113、lt;/p><p> DB 17,18,19,20,21,22,23,24</p><p> DB 25,26,27,28,29,30,31,32</p><p> RCTW PROC NEAR ; 鋸齒波形子程序</p><p> MOV DI,OFFSET FENC&l
114、t;/p><p> MOV AL,[DI]</p><p> MOV SI,3000H</p><p> MOV [SI],AL</p><p> MOV DI,OFFSET AMPL</p><p> MOV AL,[DI]</p>&l
115、t;p> MOV SI,3001H</p><p> MOV [SI],AL</p><p> RCT1: CALL AMPLFENC</p><p> MOV SI,OFFSET KEY</p><p> MOV AL,4</p><p>
116、 CMP [SI],AL</p><p> JZ RCTA</p><p> CALL DIS</p><p> MOV SI,3000H</p><p> MOV BL,[SI]</p><p> MOV DI,OFFSET TIAOF
117、U</p><p> MOV [DI],BL</p><p> MOV SI,3001H</p><p> MOV AL,[SI]</p><p> MOV SI,OFFSET TIAOPIN</p><p> MOV [SI],AL</p&g
118、t;<p> RCLOOP1: MOV SI,OFFSET RCTTAB</p><p> RCLOOP2: MOV AL,[SI]</p><p> MOV BL,TIAOFU</p><p> MUL BL</p><p> MOV DX,DA0832
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 信號(hào)發(fā)生器課程設(shè)計(jì)----函數(shù)信號(hào)發(fā)生器
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)---函數(shù)信號(hào)發(fā)生器設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--信號(hào)發(fā)生器設(shè)計(jì)
- 模擬電子---信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 多功能信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 信號(hào)發(fā)生器課程設(shè)計(jì)---函數(shù)發(fā)生器的設(shè)計(jì)
- 模擬電子---信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 正交信號(hào)發(fā)生器課程設(shè)計(jì)
- 簡(jiǎn)易信號(hào)發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)-簡(jiǎn)易信號(hào)發(fā)生器
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 555信號(hào)發(fā)生器課程設(shè)計(jì)
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 簡(jiǎn)易信號(hào)發(fā)生器 課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論