版權(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)</p><p> ——微機(jī)原理課程設(shè)計(jì)報(bào)告</p><p> 課題名稱: 信號(hào)發(fā)生器功能程序設(shè)計(jì)</p><p> 學(xué) 院: 信息科學(xué)與工程學(xué)院</p><p><b> 目錄</b></p><p><b>
2、 目錄1</b></p><p><b> 第一章概要2</b></p><p> 1.1 設(shè)計(jì)目的2</p><p> 1.2 課程設(shè)計(jì)內(nèi)容及要求2</p><p> 1.3 所需芯片及硬件簡(jiǎn)介2</p><p> 1.3.1 8255A 特性簡(jiǎn)介2<
3、/p><p> 1.3.2 D /A0832功能簡(jiǎn)介3</p><p> 1.3.3A /D0809功能簡(jiǎn)介3</p><p> 1.3.4唐都小鍵盤簡(jiǎn)介4</p><p> 第二章總體設(shè)計(jì)方案5</p><p> 2.1 設(shè)計(jì)思想論述5</p><p> 2.2 程序
4、流程圖6</p><p> 2.3 電路原理圖7</p><p> 第三章典型模塊分析8</p><p> 3.1 波形產(chǎn)生模塊8</p><p> 3.1.1 方波9</p><p> 3.1.2 三角波9</p><p> 3.1.3 鋸齒波10</p
5、><p> 3.1.4 正弦波12</p><p> 3.2 小鍵盤模塊13</p><p> 3.3 調(diào)幅調(diào)頻模塊14</p><p> 第四章系統(tǒng)調(diào)試過(guò)程及結(jié)果16</p><p> 第五章收獲與體會(huì)17</p><p><b> 參考文獻(xiàn)18</b
6、></p><p> 附錄1 匯編語(yǔ)言源程序代碼19</p><p> 附錄2 C語(yǔ)言源程序代碼33</p><p><b> 概要</b></p><p><b> 1.1 設(shè)計(jì)目的 </b></p><p> 信號(hào)發(fā)生器的功能設(shè)計(jì)結(jié)合了軟硬件的知識(shí)
7、,這樣的一個(gè)課程設(shè)計(jì)促使我們主動(dòng)去找尋資料,自主學(xué)習(xí)更多的知識(shí)。尤其重要的是設(shè)計(jì)本身是一種實(shí)踐,將課本知識(shí)應(yīng)用到設(shè)計(jì)中,驗(yàn)證并且進(jìn)一步熟悉它從而獲得新的領(lǐng)悟,這是只啃書本所不能達(dá)成的好處。信號(hào)發(fā)生器的設(shè)計(jì)尤其加深我們對(duì)信號(hào)發(fā)生的理解,對(duì)以8086cpu為中心的各芯片功能的了解以及對(duì)微機(jī)原理和匯編語(yǔ)言編程有了更深的體會(huì)。</p><p> 1.2 課程設(shè)計(jì)內(nèi)容及要求</p><p> ?。?/p>
8、1)、分別用C語(yǔ)言和匯編語(yǔ)言編程完成硬件接口功能設(shè)計(jì);</p><p> ?。?)、硬件電路基于80x86微機(jī)的接口電路;</p><p> ?。?)、程序功能要求:小鍵盤給定、數(shù)碼管或屏幕顯示,并產(chǎn)生對(duì)應(yīng)信號(hào)波形(D/A)輸出(信號(hào)波形包括正弦波、三角波、方波、鋸齒波)、輸出信號(hào)波形幅度、頻率可調(diào)。(按鍵數(shù)量盡量少)。</p><p> 1.3 所需芯片及硬件簡(jiǎn)
9、介</p><p> 1.3.1 8255A 特性簡(jiǎn)介</p><p> (1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過(guò)它CPU可直接與外設(shè)相連</p><p> ?。?)8255A在使用前要寫入一個(gè)方式控制字,選擇A、B、C三個(gè)端口各自的工作
10、方式,共有三種。方式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ī)
11、定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。</p><p> 本次設(shè)計(jì)只用到了三個(gè)端口的方式0。</p><p> 1.3.2 D /A0832功能簡(jiǎn)介</p><p> DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。</p><p> D
12、AC0832的引腳功能說(shuō)明如下:</p><p> D0-D7 :數(shù)字信號(hào)輸入端</p><p> CS:片選信號(hào),低電平有效</p><p> WR:寫信號(hào)1,低電平有效</p><p> OUT:DAC電流輸出端</p><p> 圖1.1 唐都實(shí)驗(yàn)箱D /A0832接線圖</p><
13、;p> A /D0809功能簡(jiǎn)介</p><p> ADC0809是采樣頻率為8位的、以逐次逼近原理進(jìn)行?!獢?shù)轉(zhuǎn)換的器件。其內(nèi)部有一個(gè)8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號(hào),只選通8路模擬輸入信號(hào)中的一個(gè)進(jìn)行A/D轉(zhuǎn)換。當(dāng)?shù)刂稟BC=000時(shí),IN0通道被選通。</p><p> 圖1.2 唐都實(shí)驗(yàn)箱A /D0809接線圖</p><p>&
14、lt;b> 唐都小鍵盤簡(jiǎn)介</b></p><p> 唐都實(shí)驗(yàn)箱中提供了4行×4列16個(gè)按鍵,列選擇信號(hào)X1-X4,行掃描信號(hào)Y1-Y4。</p><p> 圖1.3 唐都實(shí)驗(yàn)箱小鍵盤接線圖</p><p><b> 總體設(shè)計(jì)方案</b></p><p> 2.1 設(shè)計(jì)思想論述&l
15、t;/p><p> (1).波形產(chǎn)生:通過(guò)匯編語(yǔ)言編寫各個(gè)波形子程序,其中方波和三角波參考了唐都的參考程序。鋸齒波由三角波修改而來(lái),正弦波事先用MATLAB仿真存入各點(diǎn)數(shù)據(jù),產(chǎn)生波形時(shí)依次輸出各個(gè)數(shù)據(jù)即可。波形子程序中主要是各個(gè)波形一個(gè)周期的代碼,循環(huán)執(zhí)行,由此產(chǎn)生連續(xù)波形并通過(guò)D /A0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案見第三章3.1節(jié)。</p><p> ?。?).
16、波形切換:用小鍵盤輸入進(jìn)行波形的選擇,按鍵0~3分別對(duì)應(yīng)方波、三角波、鋸齒波和正弦波。每個(gè)波形周期輸出后,調(diào)用鍵盤查詢子程序,判斷有無(wú)按鍵按下,沒(méi)有則繼續(xù)輸出下一周期,否則轉(zhuǎn)到相應(yīng)的波行子程序上。可隨時(shí)進(jìn)行波形間的切換。具體方案見第三章3.2節(jié)。</p><p> ?。?).無(wú)極調(diào)頻:改變波形子程序中的各個(gè)數(shù)據(jù)輸出延時(shí)時(shí)間,就可改變整個(gè)波形的頻率,延時(shí)越短頻率越高。而延時(shí)時(shí)間長(zhǎng)短可由外部輸入決定,通過(guò)A/D080
17、9將電位計(jì)(0~5V)的模擬量轉(zhuǎn)化成數(shù)字量(00~FF)作為延時(shí)時(shí)間長(zhǎng)短。調(diào)節(jié)電位器即可調(diào)節(jié)延時(shí),進(jìn)而調(diào)節(jié)頻率。ADC0809芯片分辨率為8位,即可將延時(shí)分為256個(gè)等級(jí),實(shí)現(xiàn)無(wú)極調(diào)頻。具體方案見第三章3.3、3.4節(jié)。</p><p> (4).無(wú)極調(diào)幅:改變波形子程序中DA輸出值的大小即可改變幅值,可以在原數(shù)據(jù)基礎(chǔ)上乘以一個(gè)增益。而增益可由外部輸入,原理與調(diào)頻相似,通過(guò)A/D0809輸入一個(gè)數(shù)字量(00~F
18、F)。按鍵4用于調(diào)頻/調(diào)幅的切換。當(dāng)判斷當(dāng)前為調(diào)幅狀態(tài)時(shí)就將這個(gè)數(shù)字量存入幅值增益變量中,如果判斷是調(diào)頻狀態(tài)則存入頻率延時(shí)變量中。從而實(shí)現(xiàn)只用一個(gè)電位器分別調(diào)節(jié)頻率和幅度的功能。具體方案見第三章3.3、3.4節(jié)。</p><p> ?。?).開始結(jié)束:通過(guò)掃描小鍵盤,按下5鍵則退出。</p><p><b> 2.2 程序流程圖</b></p><
19、;p><b> 2.3 電路原理圖</b></p><p> 圖2.2 硬件連接電路圖</p><p><b> 典型模塊分析</b></p><p> 3.1 波形產(chǎn)生模塊</p><p> 四個(gè)波形子程序結(jié)構(gòu)類似,當(dāng)子程序被調(diào)用后,進(jìn)行以下步驟:</p><
20、p> ?。?)通過(guò)8255的C7位輸出一個(gè)低電平來(lái)啟動(dòng)AD0809,并從8255的B口讀入AD輸入的數(shù)字量(00H~FFH)。</p><p> ?。?)判斷幅頻標(biāo)志位FLAG_FUPIN,為0則把AD輸入的數(shù)字量存入頻率值空間FRE,否則存入幅值空間AMP。</p><p> ?。?)輸出波形的一個(gè)周期。</p><p> (4)調(diào)用子程序CCSCAN,判
21、斷小鍵盤有無(wú)按鍵按下,無(wú)則繼續(xù)步驟(1),有則返回主程序。</p><p> 流程圖如圖3.1所示。</p><p> 圖3.1 波形子程序流程圖</p><p><b> 3.1.1 方波</b></p><p> 方波的產(chǎn)生先向DA0832輸出一個(gè)低電平(00H),并延時(shí)一段時(shí)間。再輸出一個(gè)高電平(此處直
22、接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時(shí)一段相同時(shí)間,就是矩形波的一個(gè)周期。</p><p> (1)一個(gè)周期波形的代碼:</p><p> NEXT1_1: MOV DX,DA0832 ;寫00H,輸出低電平</p><p> MOV AL,00H</p><p> OUT
23、 DX,AL</p><p> CALL DALLY1;延時(shí)</p><p> MOV DX,DA0832 ;寫 AMP,輸出高電平</p><p> MOV AL,AMP ;AMP=00H~FFH,默認(rèn)值 7FH</p><p> OUT DX,AL</p&g
24、t;<p> CALL DALLY1;延時(shí)</p><p> (2)延時(shí)子程序代碼:</p><p> DALLY1 PROC NEAR ;軟件延時(shí)子程序</p><p> PUSH CX</p><p> PUSH AX</p><p&g
25、t; MOV CH,FRE ;讀取頻率值,F(xiàn)RE=00H~FFH</p><p> AND CH,0F0H</p><p> ADD CH,0FH ;CH的值受FRE的控制,改變FRE則改變延時(shí)時(shí)間</p><p> MOV CL,0FFH</p><p> DD1:
26、 MOV AX,0FF00H</p><p> DD2: DEC AX</p><p> JNZ DD2</p><p> LOOP DD1</p><p> POP AX</p><p> POP CX</p><p
27、><b> RET</b></p><p> DALLY1 ENDP</p><p> 3.1.2 三角波</p><p> 三角波從最小值開始逐漸上升,到達(dá)最大值之后再逐漸減小到最小。因此先將最小值(00H)放到BL,輸出并延時(shí),對(duì)BL加一,再輸出并延時(shí),達(dá)到最大值后就對(duì)BL依次減一,輸出并延時(shí),直到BL=00H,則為一個(gè)周
28、期波形。因此三角波有兩個(gè)過(guò)程。</p><p> 一個(gè)周期波形的代碼如下: </p><p> NEXT1_2: MOV BL,00H ;BL賦最小值00H</p><p> UP1: MOV AL,AMP ;AL幅值增益AMP, AMP=00H~FFH </p><p> AND
29、 AL,0F0H </p><p> SHR AL,4 ; AL=00H~0FH</p><p> MUL BL ; ALBL*AL</p><p> MOV DX,DA0832 ;啟動(dòng)D/A轉(zhuǎn)換</p><p> OUT DX,AL ;輸出AL
30、</p><p> CALL DALLY2</p><p> INC BL ;BL加一</p><p> CMP BL,25H ;判斷BL是否加到最大值了</p><p> JNE UP1</p><p> DOWN: MOV AL,A
31、MP ;AL幅值增益AMP ,AMP=00H~FFH </p><p> AND AL,0F0H</p><p> SHR AL,4 ; AL=00H~0FH</p><p> MUL BL; ALBL*AL</p><p> MOV DX,DA0832</p
32、><p> OUT DX,AL</p><p> CALL DALLY2 </p><p> DEC BL ;BL減一</p><p> CMP BL,00H;判斷BL是否減到最小值了</p><p> JNE DOWN</p&
33、gt;<p> 延時(shí)子程序與方波類似,此處不再贅述。</p><p> 局部流程圖如圖3.2所示。</p><p> 3.1.3 鋸齒波</p><p> 鋸齒波與三角波類似,只是鋸齒波到達(dá)最大值之后,直接跳到最小值。因此鋸齒波只有對(duì)BL依次加一的過(guò)程。</p><p> 一個(gè)周期波形的代碼如下:</p>
34、<p> NEXT1_3: MOV BL,00H ;BL賦最小值00H</p><p> UP2: MOV AL,AMP ;AL幅值增益AMP, AMP=00H~FFH</p><p> AND AL,0F0H </p><p> SHR AL,4 ; A
35、L=00H~0FH</p><p> MUL BL; ALBL*AL</p><p> MOV DX,DA0832 ;啟動(dòng)D/A轉(zhuǎn)換</p><p> OUT DX,AL;輸出AL</p><p> CALL DALLY2</p><p> INC
36、 BL;BL加一</p><p> CMP BL,25H;判斷BL是否加到最大值了</p><p> JNE UP2</p><p> MOV BL,00H;BL加到最大之后直接賦給最小值00H</p><p> MOV AL,AMP</p><
37、p> AND AL,0F0H</p><p> SHR AL,4 </p><p> MUL BL; ALBL*AL</p><p> MOV DX,DA0832</p><p> OUT DX,AL</p><p>
38、CALL DALLY2</p><p> 延時(shí)子程序與方波類似,此處不再贅述。</p><p> 局部流程圖如圖3.3所示。</p><p> 3.1.4 正弦波</p><p> 正弦波是利用正弦表(見附錄 代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時(shí)。</p><p> 一個(gè)周期波形的代碼
39、: </p><p> NEXT1_4: LEA SI,SIN ;指向正弦表中的第一個(gè)數(shù)據(jù)</p><p> MOV CX,255</p><p> UP: MOV BL,AMP ;BL幅值增益AMP, AMP=00H~FFH</p><p> AND BL,0F0H&l
40、t;/p><p> SHR BL,4 ;AMP=00H~FFH ,BL=00H~0F</p><p> MOV AL,[SI] ;讀取正弦表中的一個(gè)數(shù)據(jù)</p><p> SHR AL,2</p><p> MUL BL ; AL AL* BL</p>&
41、lt;p> MOV DX,DA0832 ;啟動(dòng)D/A轉(zhuǎn)換</p><p> OUT DX,AL ;輸出AL</p><p> CALL DALLY3</p><p> INC SI ;指向表中的下一個(gè)數(shù)據(jù)</p><p> LOOP UP</p
42、><p> 延時(shí)子程序與方波類似,此處不再贅述。</p><p> 局部流程圖如圖3.4所示。</p><p><b> 3.2 小鍵盤模塊</b></p><p> 小鍵盤用到兩個(gè)子程序(ccscan和scan)。</p><p> ccscan子程序只是一個(gè)輔助程序,用于判斷當(dāng)前小鍵盤是
43、否有鍵按下,有則全零標(biāo)志位ZF=0(運(yùn)算結(jié)果不為0),無(wú)鍵按下則ZF=1(運(yùn)算結(jié)果為0)。子程序代碼如下:</p><p> CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序</p><p> MOV AL,00H</p><p> MOV DX,MY8255_A ;將4列全選通,X1~X4置0&l
44、t;/p><p> OUT DX,AL</p><p> MOV DX,MY8255_C</p><p> IN AL,DX ;讀Y1~Y4</p><p> NOT AL</p><p> AND AL,0FH ;取出Y1~Y4
45、的反值</p><p><b> RET</b></p><p> CCSCAN ENDP</p><p> scan功能為當(dāng)確定小鍵盤有鍵按下則一列一列掃描鍵盤,判斷是哪一列哪一行的鍵被按下了,并把鍵值保存到數(shù)據(jù)段的key空間去。子程序代碼如下:</p><p> SCAN PROC NEAR&l
46、t;/p><p> MOV CH,0FEH</p><p> MOV CL,00H ;設(shè)置當(dāng)前檢測(cè)的是第幾列</p><p> COLUM: MOV AL,CH ;選取一列,將X1~X4中一個(gè)置0</p><p> MOV DX,MY8255_A</p>
47、<p> OUT DX,AL</p><p> MOV DX,MY8255_C ;讀Y1~Y4,用于判斷是哪一行按鍵閉合</p><p> IN AL,DX</p><p> L1: TEST AL,01H ;是否為第1行</p><p> JNZ
48、L2 ;不是則繼續(xù)判斷</p><p> MOV AL,00H ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L2: TEST AL,02H ;是否為第2行</p><p> JNZ L3
49、;不是則繼續(xù)判斷</p><p> MOV AL,04H ;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L3: TEST AL,04H ;是否為第3行</p><p> JNZ L4 ;不是則繼續(xù)判斷<
50、/p><p> MOV AL,08H ;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L4: TEST AL,08H ;是否為第4行</p><p> JNZ NEXT ;不是則繼續(xù)判斷</p><
51、p> MOV AL,0CH ;設(shè)置第4行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> NEXT: INC CL ;當(dāng)前檢測(cè)的列數(shù)遞增</p><p> MOV AL,CH</p><p> TEST AL,08
52、H ;檢測(cè)是否掃描到第4列</p><p> JZ KERR ;是則跳回到開始處</p><p> ROL AL,1 ;沒(méi)檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列</p><p> MOV CH,AL</p><p> JMP COLUM</p>
53、<p> KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值</p><p> MOV KEY,AL ;保存按鍵值到key空間</p><p> KERR: RET</p><p> SCAN ENDP</p><p> 3.3 調(diào)幅調(diào)頻模塊<
54、;/p><p> 系統(tǒng)只使用了一個(gè)電位計(jì)可以分別調(diào)節(jié)頻率和幅值。波形子程序中每個(gè)循環(huán)周期啟動(dòng)一次A/D轉(zhuǎn)換,啟動(dòng)信號(hào)由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲(chǔ)單元FRE(或AMP)中,供延時(shí)(或幅值輸出)時(shí)使用。</p><p> 本次實(shí)驗(yàn)ADC 0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過(guò)端口B讀入。模擬輸入量Vin通過(guò)電位計(jì)從0~5V無(wú)極可調(diào),對(duì)應(yīng)的數(shù)字輸出量N從00H~FFH
55、變化。</p><p> 調(diào)頻:改變波形子程序中的各個(gè)數(shù)據(jù)輸出延時(shí)時(shí)間,就可改變整個(gè)波形的頻率。延時(shí)時(shí)間由AD0809讀入的數(shù)據(jù)控制。</p><p> 調(diào)幅:在波形子程序中給DA輸出值乘以一個(gè)增益,改變?cè)鲆娴拇笮〖纯筛淖兎?。增益由AD0809讀入的數(shù)據(jù)控制。</p><p> 調(diào)頻/調(diào)幅切換:主程序設(shè)了一個(gè)幅頻標(biāo)志位FLAG_FUPIN,當(dāng)小鍵盤的4鍵按下
56、時(shí),使FLAG_FUPIN取反(默認(rèn)標(biāo)志位=0)。波形子程序中通過(guò)判斷幅頻標(biāo)志位FLAG_FUPIN的狀態(tài),可以選擇是調(diào)頻還是調(diào)幅。</p><p><b> 部分代碼如下:</b></p><p> ?。?)主程序中的切換部分</p><p> GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序
57、</p><p> MOV AL,KEY</p><p> CMP AL,08H ;判斷是否為調(diào)幅 /調(diào)頻鍵</p><p> JNE LOOP1 ;不是則返回判斷波形或退出</p><p> NOT BYTE PTR[FLAG_FUPIN] ;是,則將幅頻標(biāo)
58、志位取反</p><p> CMP FLAG_FUPIN,0</p><p> JNE TIAOFU</p><p> MOV DX,OFFSET MES5 ;屏幕顯示切換到調(diào)頻狀態(tài)</p><p> MOV AH,09H</p><p> I
59、NT 21H</p><p> JMP JIXU </p><p> TIAOFU: MOV DX,OFFSET MES6 ; 屏幕顯示切換到調(diào)幅狀態(tài)</p><p> MOV AH,09H</p><p> INT 21H &l
60、t;/p><p> JIXU: MOV BL,FLAG_BOXING</p><p> MOV KEY,BL ;將波形對(duì)應(yīng)的鍵值存回 KEY中</p><p> JMP LOOP1 ;返回判斷波形</p><p> ?。?)波形子程序部分</p><p&
61、gt; MOV DX,MY8255_MODE ; 通過(guò)8255的C7口發(fā)出一個(gè)低電平</p><p> MOV AL,00001110B </p><p> OUT DX,AL;啟動(dòng)AD0809</p><p> MOV DX,MY8255_B ;讀8255B口數(shù)據(jù)<
62、;/p><p> IN AL,DX</p><p> MOV BL,FLAG_FUPIN ;判斷幅頻標(biāo)志位,默認(rèn)為0</p><p> CMP BL,0</p><p> JE PIN_1 ; 為0則跳轉(zhuǎn)到PIN_1</p>
63、;<p> MOV AMP,AL ; 不為0則存為振幅值</p><p> JMP NEXT1_1</p><p> PIN_1: MOV FRE,AL; 為0則存為頻率值</p><p> 流程圖見圖2.1和圖3.1</p><p&g
64、t;<b> 系統(tǒng)調(diào)試過(guò)程及結(jié)果</b></p><p> 此次設(shè)計(jì)波形發(fā)生器是我們?cè)趯W(xué)習(xí)匯編以來(lái)接觸到的比較大的程序。無(wú)論用何種程序書寫,理清思路是關(guān)鍵。因此,從拿到題目開始,我們花了很多時(shí)間來(lái)對(duì)設(shè)計(jì)波形發(fā)生器的硬件和軟件進(jìn)行了分析與思考,從中選出最好的解決方法。</p><p> 在系統(tǒng)調(diào)試的過(guò)程中,我們用到的一個(gè)很重要的分析過(guò)程就是先易后難,先局部后整體,
65、先將各個(gè)波形的子程序?qū)懗鰜?lái),一一進(jìn)行測(cè)試。無(wú)誤后再寫主程序?qū)⒏鱾€(gè)子程序整合起來(lái)。</p><p> 設(shè)計(jì)的過(guò)程是由易到難的,我們從實(shí)現(xiàn)最簡(jiǎn)單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無(wú)極調(diào)頻功能、無(wú)極調(diào)幅功能,整個(gè)系統(tǒng)由簡(jiǎn)至繁逐步完善。</p><p> 最先遇到的比較大的困難是小鍵盤的輸入,前后試過(guò)兩個(gè)方案,最終以唐都提供的參考程序?yàn)榛A(chǔ),進(jìn)過(guò)修改得到了現(xiàn)在使用的鍵盤
66、掃描子程序,效果很好。</p><p> 整個(gè)過(guò)程中最難的是實(shí)現(xiàn)無(wú)級(jí)調(diào)頻和無(wú)極調(diào)幅,開始時(shí)一直無(wú)法調(diào)頻,經(jīng)過(guò)對(duì)各個(gè)部位的仔細(xì)調(diào)試分析,是0809模數(shù)轉(zhuǎn)換的問(wèn)題。0809需要一個(gè)啟動(dòng)信號(hào),且轉(zhuǎn)換需要一定時(shí)間。于是我們用C口每周期輸出一啟動(dòng)信號(hào)進(jìn)行轉(zhuǎn)換。最終達(dá)到理想效果。</p><p> 實(shí)現(xiàn)了調(diào)頻之后,對(duì)整個(gè)程序的結(jié)構(gòu)稍加改進(jìn),引入了幅頻標(biāo)志位,實(shí)現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只
67、用一個(gè)電位計(jì)和一個(gè)小鍵盤按鍵實(shí)現(xiàn)了無(wú)極調(diào)頻和無(wú)極調(diào)幅的功能。</p><p><b> 不足和改進(jìn):</b></p><p> 1.所產(chǎn)生的頻率范圍較窄。應(yīng)盡量減少延時(shí)拓寬頻率。</p><p> 2.幅值調(diào)節(jié)范圍不夠大。</p><p> 3.產(chǎn)生的波形不是理想狀態(tài)。特別是方波,上下跳變時(shí),總會(huì)有斷點(diǎn)。波形有噪
68、聲,不是理想的波形。</p><p> 4.由于波形每周期之后要讀端口,與下一個(gè)周期之間有一定延時(shí)誤差。</p><p><b> 收獲與體會(huì)</b></p><p> 本次課程設(shè)計(jì)的要求雖然不多,但整個(gè)設(shè)計(jì)過(guò)程是問(wèn)題不斷,一波三折。整個(gè)課程設(shè)計(jì)完成之后,我在整體設(shè)計(jì)思路、硬件連結(jié)和匯編語(yǔ)言編程等方面得到了很大的收獲。</p>
69、<p> 設(shè)計(jì)的過(guò)程是由易到難的,我們從實(shí)現(xiàn)最簡(jiǎn)單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無(wú)極調(diào)頻功能、無(wú)極調(diào)幅功能,整個(gè)系統(tǒng)由簡(jiǎn)至繁逐步完善。而程序總體流程也是三易其稿,其中有借鑒了別人的一些設(shè)計(jì)思路。</p><p> 第一個(gè)方案實(shí)在缺乏設(shè)計(jì)的智慧,在得到正確的指標(biāo)后就被拋棄了。第二個(gè)方案時(shí),我們把控制波形轉(zhuǎn)換的功能寄希望于用中斷實(shí)現(xiàn),而調(diào)頻變化在延時(shí)子程序中進(jìn)行,最后證實(shí)
70、這樣子的程序流程圖將很復(fù)雜冗長(zhǎng),條理不清晰,而且用中斷實(shí)現(xiàn)時(shí)缺乏所需的硬件。最后一個(gè)方案即為當(dāng)前選擇的方案,條理清晰,程序簡(jiǎn)單,代碼也短,但是能很好實(shí)現(xiàn)所有功能。</p><p> 硬件連結(jié)的問(wèn)題主要在使用第二個(gè)方案時(shí)出現(xiàn)的。第二個(gè)方案的中斷控制需要手動(dòng)輸入一個(gè)中斷脈沖,然后結(jié)果總是有差,最后討論得出結(jié)論是我們很難保證這個(gè)手動(dòng)輸入脈沖的合格,這個(gè)脈沖可能不夠標(biāo)準(zhǔn)。后面做最終方案時(shí),波形發(fā)生顫抖,檢查發(fā)現(xiàn)是控制波
71、形選擇的開關(guān)處不穩(wěn)定,也算是硬件連結(jié)的問(wèn)題。而波形特別是矩形波輸出時(shí),在中間總是一個(gè)斷痕,反復(fù)檢查軟件設(shè)計(jì)后也歸結(jié)為硬件內(nèi)部延時(shí)所產(chǎn)生誤差。</p><p> 做軟件設(shè)計(jì)時(shí)遇到的關(guān)鍵點(diǎn)也是難點(diǎn)集中到了調(diào)頻電路的選擇。第二方案時(shí),我們把調(diào)頻參數(shù)的讀取放置在延時(shí)程序,主程序不循環(huán),每一個(gè)波形都是無(wú)限循環(huán)的波形。后來(lái)得到高人指點(diǎn),我們忽略了主程序循環(huán)所會(huì)帶來(lái)的延時(shí)對(duì)波形的影響,以主程序無(wú)限循環(huán),每輸出一個(gè)周期波形讀一
72、次調(diào)頻參數(shù)的方式進(jìn)行調(diào)頻。結(jié)果很完美。</p><p> 實(shí)現(xiàn)了調(diào)頻之后,對(duì)整個(gè)程序的結(jié)構(gòu)稍加改進(jìn),引入了幅頻標(biāo)志位,實(shí)現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只用一個(gè)電位計(jì)和一個(gè)小鍵盤按鍵實(shí)現(xiàn)了無(wú)極調(diào)頻和無(wú)極調(diào)幅的功能。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]周荷琴,吳秀清.微型計(jì)算機(jī)原理與接口技術(shù).合肥:中國(guó)
73、科學(xué)技術(shù)大學(xué)出版社,2008.6</p><p> [2]唐都科教儀器開發(fā)有限公司. 32位微機(jī)原理與接口技術(shù)實(shí)驗(yàn)教程.</p><p> [3]陳明義.數(shù)字電子技術(shù)基礎(chǔ).長(zhǎng)沙.中南大學(xué)出版社,2008.9</p><p> 附錄1 匯編語(yǔ)言源程序代碼 </p><p> ;****************根據(jù)查看端口資源修改下列
74、符號(hào)值*******************</p><p> IOY0 EQU 0E400H ;片選IOY0對(duì)應(yīng)的端口始地址</p><p> IOY1 EQU 0E440H ;片選IOY1對(duì)應(yīng)的端口始地址</p><p> ;******************************************
75、***********************</p><p> DA0832 EQU IOY0+00H*4 ;DA0832的端口地址</p><p> MY8255_A EQU IOY1+00H*4 ;8255的A口地址</p><p> MY8255_B EQU IOY1+01H*4 ;8255的B口地址&l
76、t;/p><p> MY8255_C EQU IOY1+02H*4 ;8255的C口地址</p><p> MY8255_MODE EQU IOY1+03H*4 ;8255的控制寄存器地址</p><p> STACK1 SEGMENT STACK</p><p> DW 256 DUP
77、(?)</p><p> STACK1 ENDS</p><p> DATA SEGMENT</p><p> STR1 DB 'DA0832: Please choose Wave',0AH,0DH,'$' ;定義顯示的字符串 </p><p> MES1 DB
78、 'SHOW A SQUARE',0AH,0DH,'$'</p><p> MES2 DB 'SHOW A SANJIAO',0AH,0DH,'$'</p><p> MES3 DB 'SHOW A JUCHI',0AH,0DH,'$'</
79、p><p> MES4 DB 'SHOW A SINE',0AH,0DH,'$'</p><p> MES5 DB 'CHANGE THE Frequence',0AH,0DH,'$' </p><p> MES6 DB 'CHANGE THE
80、 Amplitude',0AH,0DH,'$' </p><p> KEY DB'?'</p><p> FLAG_BOXING DB '?'</p><p> FLAG_FUPIN DB 0</p><p> FRE DB
81、 7FH</p><p> AMP DB 7FH</p><p> SIN DB 100, 102, 105, 107, 110, 112, 115, 117, 120, 122</p><p> DB 124, 127, 129, 132, 134, 136, 139, 141, 143, 145<
82、/p><p> DB 147, 150, 152, 154, 156, 158, 160, 162, 164, 166</p><p> DB 168, 169, 171, 173, 175, 176, 178, 179, 181, 182</p><p> DB 184, 185, 186, 187, 189, 190,
83、 191, 192, 193, 194</p><p> DB 194, 195, 196, 197, 197, 198, 198, 199, 199, 199</p><p> DB 200, 200, 200, 200, 200, 200, 200, 200, 199, 199</p><p> DB 199, 1
84、98, 198, 197, 197, 196, 195, 194, 194, 193</p><p> DB 192, 191, 190, 189, 187, 186, 185, 184, 182, 181</p><p> DB 179, 178, 176, 175, 173, 171, 169, 168, 166, 164</p><
85、p> DB 162, 160, 158, 156, 154, 152, 150, 147, 145, 143</p><p> DB 141, 139, 136, 134, 132, 129, 127, 124, 122, 120</p><p> DB 117, 115, 112, 110, 107, 105, 102, 100,
86、98, 95</p><p> DB 93, 90, 88, 85, 83, 80, 78, 76, 73, 71</p><p> DB 68, 66, 64, 61, 59, 57, 55, 53, 50, 48</p><p> DB 46, 44, 42, 40,
87、38, 36, 34, 32, 31, 29</p><p> DB 27, 25, 24, 22, 21, 19, 18, 16, 15, 14</p><p> DB 13, 11, 10, 9, 8, 7, 6, 6, 5, 4</p><p> DB
88、3, 3, 2, 2, 1, 1, 1, 0, 0, 0</p><p> DB 0, 0, 0, 0, 0, 1, 1, 1, 2, 2</p><p> DB 3, 3, 4, 5, 6, 6, 7, 8, 9, 10</p><
89、p> DB 11, 13, 14, 15, 16, 18, 19, 21, 22, 24</p><p> DB 25, 27, 29, 31, 32, 34, 36, 38, 40, 42</p><p> DB 44, 46, 48, 50, 53, 55, 57, 59, 61,
90、 64</p><p> DB 66, 68, 71, 73, 76, 78, 80, 83, 85, 88</p><p> DB 90, 93, 95, 98, 100</p><p> DATA ENDS</p><p> CODE SEGMENT</p>
91、<p> ASSUME CS:CODE,DS:DATA</p><p> START: MOV AX,DATA</p><p> MOV DS,AX</p><p> MOV DX,OFFSET STR1 ;顯示提示選擇界面</p><p> MOV
92、 AH,9</p><p> INT 21H</p><p> MOV DX,OFFSET MES5 ;show message</p><p> MOV AH,09H</p><p> INT 21H</p><p> MOV D
93、X,MY8255_MODE ;初始化8255工作方式</p><p> MOV AL,10000011B ;方式0,A口、C口高四位輸出,</p><p> OUT DX,AL ; B口、C口低4位輸入</p><p> ;無(wú)鍵按下則循環(huán)等待,有鍵按下則消抖</p>&
94、lt;p> KEYBEGIN: CALL CCSCAN ;掃描按鍵</p><p> JNZ GETKEY1 ;有鍵按下則跳置GETKEY1</p><p> JMP KEYBEGIN ;無(wú)按鍵則繼續(xù)循環(huán)等待</p><p> GETKEY1: CALL DALLY_SCAN
95、 ;有鍵壓下,延時(shí)消抖</p><p> CALL DALLY_SCAN</p><p> CALL CCSCAN ;再次掃描按鍵</p><p> JNZ GETKEY2 ;有鍵按下則跳置GETKEY2</p><p> JMP KEYBEGIN ;否則跳回開始繼續(xù)
96、循環(huán)</p><p> GETKEY2: CALL SCAN </p><p> LOOP1: MOV AL,KEY</p><p> CMP AL,0CH</p><p> JE A0</p><p> CMP AL,0DH</p
97、><p> JE A1</p><p> CMP AL,0EH</p><p> JE A2</p><p> CMP AL,0FH</p><p> JE A3</p><p> CMP AL,9H&l
98、t;/p><p> JE QUIT </p><p> JMP KEYBEGIN</p><p> A0: MOV DX,OFFSET MES1 ;show message</p><p> MOV AH,09H</p><p> INT
99、 21H</p><p> CALL SQUARE</p><p> MOV FLAG_BOXING,0CH</p><p> JMP GETKEY3</p><p> A1: MOV DX,OFFSET MES2 ;show message</p&
100、gt;<p> MOV AH,09H</p><p> INT 21H</p><p> CALL SANJIAO</p><p> MOV FLAG_BOXING,0DH</p><p> JMP GETKEY3</p><p>
101、 A2: MOV DX,OFFSET MES3 ;show message</p><p> MOV AH,09H</p><p> INT 21H</p><p> CALL JUCHI</p><p> MOV FLAG_BOXING,0EH</
102、p><p> JMP GETKEY3</p><p> A3: MOV DX,OFFSET MES4 ;show message</p><p> MOV AH,09H</p><p> INT 21H</p><p> CALL
103、SINE</p><p> MOV FLAG_BOXING,0FH</p><p> JMP GETKEY3</p><p> GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序</p><p> MOV AL,KEY;判斷是否為調(diào)幅 /調(diào)頻鍵<
104、;/p><p> CMP AL,08H ;不是則返回判斷波形或退出</p><p> JNE LOOP1 </p><p> NOT BYTE PTR[FLAG_FUPIN] ;是,則改變幅頻標(biāo)志位</p><p> CMP FLAG_FUPIN,0</
105、p><p> JNE TIAOFU</p><p> MOV DX,OFFSET MES5 ;show message</p><p> MOV AH,09H</p><p> INT 21H</p><p> JMP JIXU
106、 </p><p> TIAOFU: </p><p> MOV DX,OFFSET MES6 ;show message</p><p> MOV AH,09H</p><p> INT 21H </p><p> JIXU:
107、 MOV BL,FLAG_BOXING</p><p> MOV KEY,BL ;將波形對(duì)應(yīng)的鍵值存回 KEY中 </p><p> JMP LOOP1 ;返回判斷波形</p><p> QUIT: MOV AX,4C00H ;返回到DOS</p><
108、p> INT 21H</p><p> SCAN PROC NEAR</p><p> MOV CH,0FEH</p><p> MOV CL,00H ;設(shè)置當(dāng)前檢測(cè)的是第幾列</p><p> COLUM: MOV AL,CH ;選取一列,
109、將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> IN AL,DX</p><p>
110、L1: TEST AL,01H ;是否為第1行</p><p> JNZ L2 ;不是則繼續(xù)判斷</p><p> MOV AL,00H ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L2: TEST
111、 AL,02H ;是否為第2行</p><p> JNZ L3 ;不是則繼續(xù)判斷</p><p> MOV AL,04H ;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L3: TEST AL,04H
112、 ;是否為第3行</p><p> JNZ L4 ;不是則繼續(xù)判斷</p><p> MOV AL,08H ;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> L4: TEST AL,08H ;是否為第4行</
113、p><p> JNZ NEXT ;不是則繼續(xù)判斷</p><p> MOV AL,0CH ;設(shè)置第4行第1列的對(duì)應(yīng)的鍵值</p><p> JMP KCODE</p><p> NEXT: INC CL ;當(dāng)前檢測(cè)的列數(shù)遞增</p>&
114、lt;p> MOV AL,CH</p><p> TEST AL,08H ;檢測(cè)是否掃描到第4列</p><p> JZ KERR ;是則跳回到開始處</p><p> ROL AL,1 ;沒(méi)檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列</p><p> M
115、OV CH,AL</p><p> JMP COLUM</p><p> KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值</p><p> MOV KEY,AL ;保存按鍵值</p><p> KERR: RET</p>&
116、lt;p> SCAN ENDP</p><p> CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序</p><p> MOV AL,00H</p><p> MOV DX,MY8255_A ;將4列全選通,X1~X4置0</p><p> OUT DX
117、,AL</p><p> MOV DX,MY8255_C</p><p> IN AL,DX ;讀Y1~Y4</p><p> NOT AL</p><p> AND AL,0FH ;取出Y1~Y4的反值</p><p><b>
118、; RET</b></p><p> CCSCAN ENDP</p><p> SQUARE PROC NEAR ;方波產(chǎn)生子程序</p><p><b> SQUARE1:</b></p><p> MOV DX,MY8255_MODE ; 通過(guò)
119、8255的C7口發(fā)出一個(gè)低電平</p><p> MOV AL,00001110B </p><p> OUT DX,AL;啟動(dòng)AD0809</p><p> MOV DX,MY8255_B ;讀8255B口數(shù)據(jù)</p><p> IN AL,DX&l
120、t;/p><p> MOV BL,FLAG_FUPIN ;判斷幅頻標(biāo)志位,默認(rèn)為0?</p><p> CMP BL,0</p><p> JE PIN_1 ; 為0則存為頻率值</p><p> MOV AMP,AL ;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理課程設(shè)計(jì)----信號(hào)發(fā)生器的設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)--簡(jiǎn)易信號(hào)發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)波形發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)-函數(shù)發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)---函數(shù)發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)-- 波形發(fā)生器
- 多功能信號(hào)發(fā)生器課程設(shè)計(jì)
- 多功能信號(hào)發(fā)生器-課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)----函數(shù)信號(hào)發(fā)生器
- 多功能信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--信號(hào)發(fā)生器設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)報(bào)告--函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)---函數(shù)發(fā)生器的設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--代碼轉(zhuǎn)換程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--加密解密程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)----進(jìn)制轉(zhuǎn)換程序設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)報(bào)告-波形發(fā)生器
- 微機(jī)原理-課程設(shè)計(jì)電風(fēng)扇程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論