信號發(fā)生器功能程序設(shè)計_微機(jī)原理課程設(shè)計報告.doc
《信號發(fā)生器功能程序設(shè)計_微機(jī)原理課程設(shè)計報告.doc》由會員分享,可在線閱讀,更多相關(guān)《信號發(fā)生器功能程序設(shè)計_微機(jī)原理課程設(shè)計報告.doc(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合實驗 微機(jī)原理課程設(shè)計報告課題名稱: 信號發(fā)生器功能程序設(shè)計學(xué) 院: 姓 名: 指導(dǎo)老師: 日 期: 目錄目錄1第一章概要21.1 設(shè)計目的21.2 課程設(shè)計內(nèi)容及要求21.3 所需芯片及硬件簡介21.3.1 8255A 特性簡介21.3.2 D /A0832功能簡介31.3.3A /D0809功能簡介31.3.4唐都小鍵盤簡介4第二章總體設(shè)計方案52.1 設(shè)計思想論述52.2 程序流程圖62.3 電路原理圖7第三章典型模塊分析83.1 波形產(chǎn)生模塊83.1.1 方波93.1.2 三角波93.1.3 鋸齒波103.1.4 正弦波123.2 小鍵盤模塊133.3 調(diào)幅調(diào)頻模
2、塊14第四章系統(tǒng)調(diào)試過程及結(jié)果16第五章收獲與體會17參考文獻(xiàn)18附錄1 匯編語言源程序代碼19附錄2 C語言源程序代碼33第一章 概要1.1 設(shè)計目的 信號發(fā)生器的功能設(shè)計結(jié)合了軟硬件的知識,這樣的一個課程設(shè)計促使我們主動去找尋資料,自主學(xué)習(xí)更多的知識。尤其重要的是設(shè)計本身是一種實踐,將課本知識應(yīng)用到設(shè)計中,驗證并且進(jìn)一步熟悉它從而獲得新的領(lǐng)悟,這是只啃書本所不能達(dá)成的好處。信號發(fā)生器的設(shè)計尤其加深我們對信號發(fā)生的理解,對以8086cpu為中心的各芯片功能的了解以及對微機(jī)原理和匯編語言編程有了更深的體會。1.2 課程設(shè)計內(nèi)容及要求(1)、分別用C語言和匯編語言編程完成硬件接口功能設(shè)計;(2)
3、、硬件電路基于80 x86微機(jī)的接口電路;(3)、程序功能要求:小鍵盤給定、數(shù)碼管或屏幕顯示,并產(chǎn)生對應(yīng)信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調(diào)。(按鍵數(shù)量盡量少)。1.3 所需芯片及硬件簡介1.3.1 8255A 特性簡介(1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連(2)8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無須聯(lián)絡(luò)
4、就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出;方式1 :選通I/O,此時接口和外圍設(shè)備需聯(lián)絡(luò)信號進(jìn)行協(xié)調(diào),只有A口和B口可以工作在方式1,此時C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號,余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。本次設(shè)計只用到了三個端口的方式0。1.3.2 D /A0832功能簡介DAC0832是采用CMOS工藝制成的
5、單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。DAC0832的引腳功能說明如下:D0D7 :數(shù)字信號輸入端CS:片選信號,低電平有效WR:寫信號1,低電平有效OUT:DAC電流輸出端圖1.1 唐都實驗箱D /A0832接線圖1.3.3 A /D0809功能簡介ADC0809是采樣頻率為8位的、以逐次逼近原理進(jìn)行模數(shù)轉(zhuǎn)換的器件。其內(nèi)部有一個8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進(jìn)行A/D轉(zhuǎn)換。當(dāng)?shù)刂稟BC=000時,IN0通道被選通。圖1.2 唐都實驗箱A /D0809接線圖1.3.4 唐都小鍵盤簡介唐都實驗箱中提供了4行4列16個按鍵,列選擇信號X1-X4,行掃
6、描信號Y1-Y4。圖1.3 唐都實驗箱小鍵盤接線圖第二章 總體設(shè)計方案2.1 設(shè)計思想論述(1)波形產(chǎn)生:通過匯編語言編寫各個波形子程序,其中方波和三角波參考了唐都的參考程序。鋸齒波由三角波修改而來,正弦波事先用MATLAB仿真存入各點數(shù)據(jù),產(chǎn)生波形時依次輸出各個數(shù)據(jù)即可。波形子程序中主要是各個波形一個周期的代碼,循環(huán)執(zhí)行,由此產(chǎn)生連續(xù)波形并通過D /A0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案見第三章3.1節(jié)。(2)波形切換:用小鍵盤輸入進(jìn)行波形的選擇,按鍵03分別對應(yīng)方波、三角波、鋸齒波和正弦波。每個波形周期輸出后,調(diào)用鍵盤查詢子程序,判斷有無按鍵按下,沒有則繼續(xù)輸出下一周
7、期,否則轉(zhuǎn)到相應(yīng)的波行子程序上??呻S時進(jìn)行波形間的切換。具體方案見第三章3.2節(jié)。(3)無極調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率,延時越短頻率越高。而延時時間長短可由外部輸入決定,通過A/D0809將電位計(05V)的模擬量轉(zhuǎn)化成數(shù)字量(00FF)作為延時時間長短。調(diào)節(jié)電位器即可調(diào)節(jié)延時,進(jìn)而調(diào)節(jié)頻率。ADC0809芯片分辨率為8位,即可將延時分為256個等級,實現(xiàn)無極調(diào)頻。具體方案見第三章3.3、3.4節(jié)。(4)無極調(diào)幅:改變波形子程序中DA輸出值的大小即可改變幅值,可以在原數(shù)據(jù)基礎(chǔ)上乘以一個增益。而增益可由外部輸入,原理與調(diào)頻相似,通過A/D0809輸入一個
8、數(shù)字量(00FF)。按鍵4用于調(diào)頻/調(diào)幅的切換。當(dāng)判斷當(dāng)前為調(diào)幅狀態(tài)時就將這個數(shù)字量存入幅值增益變量中,如果判斷是調(diào)頻狀態(tài)則存入頻率延時變量中。從而實現(xiàn)只用一個電位器分別調(diào)節(jié)頻率和幅度的功能。具體方案見第三章3.3、3.4節(jié)。(5)開始結(jié)束:通過掃描小鍵盤,按下5鍵則退出。2.2 程序流程圖開始NYNY結(jié)束初始化8255調(diào)用ccscan子程序并判斷,無鍵按下則循環(huán)等待,有鍵按下則消抖鍵盤掃描子程序,鍵值keyKey=5?Key=0?Key=1?Key=2?Key=3?YYYYNNN方波子程序,出口參數(shù):波形標(biāo)志位=0三角波子程序,出口參數(shù):波形標(biāo)志位=1鋸齒波子程序,出口參數(shù):波形標(biāo)志位=2正
9、弦波子程序,出口參數(shù):波形標(biāo)志位=3Key=4?鍵盤掃描子程序,鍵值keyNFLAG_FUPIN取反Key=波形標(biāo)志位顯示調(diào)頻/調(diào)幅狀態(tài)顯示波形信息顯示波形信息顯示波形信息顯示波形信息圖2.1 主程序流程圖2.3 電路原理圖圖2.2 硬件連接電路圖第三章 典型模塊分析3.1 波形產(chǎn)生模塊四個波形子程序結(jié)構(gòu)類似,當(dāng)子程序被調(diào)用后,進(jìn)行以下步驟:(1)通過8255的C7位輸出一個低電平來啟動AD0809,并從8255的B口讀入AD輸入的數(shù)字量(00HFFH)。(2)判斷幅頻標(biāo)志位FLAG_FUPIN,為0則把AD輸入的數(shù)字量存入頻率值空間FRE,否則存入幅值空間AMP。(3)輸出波形的一個周期。(
10、4)調(diào)用子程序CCSCAN,判斷小鍵盤有無按鍵按下,無則繼續(xù)步驟(1),有則返回主程序。流程圖如圖3.1所示。子程序調(diào)用啟動AD0809,讀入數(shù)據(jù)到ALFlag_fupin=0?保存到頻率,F(xiàn)reAL保存到幅值,AmpAL輸出一個周期波形小鍵盤有鍵按下?YNYN延時消抖小鍵盤有鍵按下?NY子程序返回圖3.1 波形子程序流程圖3.1.1 方波 方波的產(chǎn)生先向DA0832輸出一個低電平(00H),并延時一段時間。再輸出一個高電平(此處直接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時一段相同時間,就是矩形波的一個周期。 (1)一個周期波形的代碼: NEXT1_1: MOV DX,D
11、A0832 ;寫00H,輸出低電平 MOV AL,00H OUT DX,AL CALL DELAY1;延時 MOV DX,DA0832 ;寫 AMP,輸出高電平 MOV AL,AMP ;AMP=00HFFH,默認(rèn)值 7FH OUT DX,AL CALL DELAY1;延時(2)延時子程序代碼: DELAY1 PROC NEAR ;軟件延時子程序 PUSH CX PUSH AX MOV CH,FRE ;讀取頻率值,F(xiàn)RE=00HFFH AND CH,0F0H ADD CH,0FH ;CH的值受FRE的控制,改變FRE則改變延時時間 MOV CL,0FFH DD1: MOV AX,0FF00H D
12、D2: DEC AX JNZ DD2 LOOP DD1 POP AX POP CX RET DELAY1 ENDP3.1.2 三角波三角波從最小值開始逐漸上升,到達(dá)最大值之后再逐漸減小到最小。因此先將最小值(00H)放到BL,輸出并延時,對BL加一,再輸出并延時,達(dá)到最大值后就對BL依次減一,輸出并延時,直到BL=00H,則為一個周期波形。因此三角波有兩個過程。一個周期波形的代碼如下: NEXT1_2: MOV BL,00H ;BL賦最小值00H UP1: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL
13、 BL ; ALBL*AL MOV DX,DA0832 ;啟動D/A轉(zhuǎn)換 OUT DX,AL ;輸出AL CALL DELAY2 INC BL ;BL加一 CMP BL,25H ;判斷BL是否加到最大值了 JNE UP1 DOWN: MOV AL,AMP ;AL幅值增益AMP ,AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL BL; ALBL*ALMOV DX,DA0832 OUT DX,AL CALL DELAY2 DEC BL ;BL減一 CMP BL,00H;判斷BL是否減到最小值了 JNE DOWN延時子程序與方波類似,此處不再贅述。局部流
14、程圖如圖3.2所示。3.1.3 鋸齒波 鋸齒波與三角波類似,只是鋸齒波到達(dá)最大值之后,直接跳到最小值。因此鋸齒波只有對BL依次加一的過程。一個周期波形的代碼如下:NEXT1_3: MOV BL,00H ;BL賦最小值00H UP2: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FH MUL BL; ALBL*AL MOV DX,DA0832 ;啟動D/A轉(zhuǎn)換 OUT DX,AL;輸出AL CALL DELAY2 INC BL;BL加一 CMP BL,25H;判斷BL是否加到最大值了 JNE UP2 MOV BL
15、,00H;BL加到最大之后直接賦給最小值00H MOV AL,AMP AND AL,0F0H SHR AL,4 MUL BL; ALBL*AL MOV DX,DA0832 OUT DX,AL CALL DELAY2延時子程序與方波類似,此處不再贅述。局部流程圖如圖3.3所示。BL已到最大?延時BL*增益AL,輸出ALBL=00HBL加一NYBL已到最???延時BL*增益AL,輸出ALBL減一NY圖3.2 三角波一周期流程圖BL=00H延時BL*增益AL,輸出ALBL*增益AL,輸出ALBL=00H延時BL加一BL已到最大?NY圖3.3 鋸齒波一周期流程圖3.1.4 正弦波正弦波是利用正弦表(見附
16、錄 代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時。一個周期波形的代碼: NEXT1_4: LEA SI,SIN ;指向正弦表中的第一個數(shù)據(jù) MOV CX,255 UP: MOV BL,AMP ;BL幅值增益AMP, AMP=00HFFH AND BL,0F0H SHR BL,4 ;AMP=00HFFH ,BL=00H0F MOV AL,SI ;讀取正弦表中的一個數(shù)據(jù) SHR AL,2 MUL BL ; AL AL* BL MOV DX,DA0832 ;啟動D/A轉(zhuǎn)換 OUT DX,AL ;輸出AL CALL DELAY3 INC SI ;指向表中的下一個數(shù)據(jù) LOOP UP延時子程序與方波
17、類似,此處不再贅述。局部流程圖如圖3.4所示。延時讀表中的一個數(shù)據(jù)到AL取正弦表首地址AL*增益AL,輸出AL表地址加一已到表末?NY圖3.4 正弦波一周期流程圖3.2 小鍵盤模塊小鍵盤用到兩個子程序(ccscan和scan)。(1) ccscan子程序只是一個輔助程序,用于判斷當(dāng)前小鍵盤是否有鍵按下,有則全零標(biāo)志位ZF=0(運算結(jié)果不為0),無鍵按下則ZF=1(運算結(jié)果為0)。子程序代碼如下: CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X4置0 OUT DX,AL MOV DX,MY8255_C I
18、N AL,DX ;讀Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RET CCSCAN ENDP(2) scan功能為當(dāng)確定小鍵盤有鍵按下則一列一列掃描鍵盤,判斷是哪一列哪一行的鍵被按下了,并把鍵值保存到數(shù)據(jù)段的key空間去。子程序代碼如下: SCAN PROC NEAR MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L1: TEST AL
19、,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對應(yīng)的鍵值 JMP KCODE N
20、EXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準(zhǔn)備檢測下一列 MOV CH,AL JMP COLUM KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 MOV KEY,AL ;保存按鍵值到key空間 KERR: RET SCAN ENDP3.3 調(diào)幅調(diào)頻模塊系統(tǒng)只使用了一個電位計可以分別調(diào)節(jié)頻率和幅值。波形子程序中每個循環(huán)周期啟動一次A/D轉(zhuǎn)換,啟動信號由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲單元FRE(或AMP)中,供延時(或幅值
21、輸出)時使用。本次實驗ADC 0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過端口B讀入。模擬輸入量Vin通過電位計從05V無極可調(diào),對應(yīng)的數(shù)字輸出量N從00HFFH變化。調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率。延時時間由AD0809讀入的數(shù)據(jù)控制。調(diào)幅:在波形子程序中給DA輸出值乘以一個增益,改變增益的大小即可改變幅值。增益由AD0809讀入的數(shù)據(jù)控制。調(diào)頻/調(diào)幅切換:主程序設(shè)了一個幅頻標(biāo)志位FLAG_FUPIN,當(dāng)小鍵盤的4鍵按下時,使FLAG_FUPIN取反(默認(rèn)標(biāo)志位=0)。波形子程序中通過判斷幅頻標(biāo)志位FLAG_FUPIN的狀態(tài),可以選擇是調(diào)頻還是
22、調(diào)幅。部分代碼如下:(1)主程序中的切換部分 GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序 MOV AL,KEY CMP AL,08H ;判斷是否為調(diào)幅 /調(diào)頻鍵 JNE LOOP1 ;不是則返回判斷波形或退出 NOT BYTE PTRFLAG_FUPIN ;是,則將幅頻標(biāo)志位取反 CMP FLAG_FUPIN,0 JNE TIAOFU MOV DX,OFFSET MES5 ;屏幕顯示切換到調(diào)頻狀態(tài) MOV AH,09H INT 21H JMP JIXU TIAOFU: MOV DX,OFFSET MES6 ; 屏幕顯示切換到調(diào)幅狀態(tài) MOV AH,09H INT 21
23、H JIXU: MOV BL,FLAG_BOXING MOV KEY,BL ;將波形對應(yīng)的鍵值存回 KEY中 JMP LOOP1 ;返回判斷波形(2)波形子程序部分 MOV DX,MY8255_MODE ; 通過8255的C7口發(fā)出一個低電平 MOV AL,00001110B OUT DX,AL;啟動AD0809 MOV DX,MY8255_B ;讀8255B口數(shù)據(jù) IN AL,DX MOV BL,FLAG_FUPIN ;判斷幅頻標(biāo)志位,默認(rèn)為0 CMP BL,0 JE PIN_1 ; 為0則跳轉(zhuǎn)到PIN_1 MOV AMP,AL ; 不為0則存為振幅值 JMP NEXT1_1 PIN_1:
24、MOV FRE,AL; 為0則存為頻率值流程圖見圖2.1和圖3.1第四章 系統(tǒng)調(diào)試過程及結(jié)果此次設(shè)計波形發(fā)生器是我們在學(xué)習(xí)匯編以來接觸到的比較大的程序。無論用何種程序書寫,理清思路是關(guān)鍵。因此,從拿到題目開始,我們花了很多時間來對設(shè)計波形發(fā)生器的硬件和軟件進(jìn)行了分析與思考,從中選出最好的解決方法。在系統(tǒng)調(diào)試的過程中,我們用到的一個很重要的分析過程就是先易后難,先局部后整體,先將各個波形的子程序?qū)懗鰜?,一一進(jìn)行測試。無誤后再寫主程序?qū)⒏鱾€子程序整合起來。設(shè)計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁逐
25、步完善。最先遇到的比較大的困難是小鍵盤的輸入,前后試過兩個方案,最終以唐都提供的參考程序為基礎(chǔ),進(jìn)過修改得到了現(xiàn)在使用的鍵盤掃描子程序,效果很好。整個過程中最難的是實現(xiàn)無級調(diào)頻和無極調(diào)幅,開始時一直無法調(diào)頻,經(jīng)過對各個部位的仔細(xì)調(diào)試分析,是0809模數(shù)轉(zhuǎn)換的問題。0809需要一個啟動信號,且轉(zhuǎn)換需要一定時間。于是我們用C口每周期輸出一啟動信號進(jìn)行轉(zhuǎn)換。最終達(dá)到理想效果。實現(xiàn)了調(diào)頻之后,對整個程序的結(jié)構(gòu)稍加改進(jìn),引入了幅頻標(biāo)志位,實現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。不足和改進(jìn):1所產(chǎn)生的頻率范圍較窄。應(yīng)盡量減少延時拓寬頻率。2幅值調(diào)
26、節(jié)范圍不夠大。3產(chǎn)生的波形不是理想狀態(tài)。特別是方波,上下跳變時,總會有斷點。波形有噪聲,不是理想的波形。4由于波形每周期之后要讀端口,與下一個周期之間有一定延時誤差。第五章 收獲與體會本次課程設(shè)計的要求雖然不多,但整個設(shè)計過程是問題不斷,一波三折。整個課程設(shè)計完成之后,我在整體設(shè)計思路、硬件連結(jié)和匯編語言編程等方面得到了很大的收獲。設(shè)計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁逐步完善。而程序總體流程也是三易其稿,其中有借鑒了別人的一些設(shè)計思路。第一個方案實在缺乏設(shè)計的智慧,在得到正確的指標(biāo)后就被拋
27、棄了。第二個方案時,我們把控制波形轉(zhuǎn)換的功能寄希望于用中斷實現(xiàn),而調(diào)頻變化在延時子程序中進(jìn)行,最后證實這樣子的程序流程圖將很復(fù)雜冗長,條理不清晰,而且用中斷實現(xiàn)時缺乏所需的硬件。最后一個方案即為當(dāng)前選擇的方案,條理清晰,程序簡單,代碼也短,但是能很好實現(xiàn)所有功能。硬件連結(jié)的問題主要在使用第二個方案時出現(xiàn)的。第二個方案的中斷控制需要手動輸入一個中斷脈沖,然后結(jié)果總是有差,最后討論得出結(jié)論是我們很難保證這個手動輸入脈沖的合格,這個脈沖可能不夠標(biāo)準(zhǔn)。后面做最終方案時,波形發(fā)生顫抖,檢查發(fā)現(xiàn)是控制波形選擇的開關(guān)處不穩(wěn)定,也算是硬件連結(jié)的問題。而波形特別是矩形波輸出時,在中間總是一個斷痕,反復(fù)檢查軟件設(shè)
28、計后也歸結(jié)為硬件內(nèi)部延時所產(chǎn)生誤差。做軟件設(shè)計時遇到的關(guān)鍵點也是難點集中到了調(diào)頻電路的選擇。第二方案時,我們把調(diào)頻參數(shù)的讀取放置在延時程序,主程序不循環(huán),每一個波形都是無限循環(huán)的波形。后來得到高人指點,我們忽略了主程序循環(huán)所會帶來的延時對波形的影響,以主程序無限循環(huán),每輸出一個周期波形讀一次調(diào)頻參數(shù)的方式進(jìn)行調(diào)頻。結(jié)果很完美。實現(xiàn)了調(diào)頻之后,對整個程序的結(jié)構(gòu)稍加改進(jìn),引入了幅頻標(biāo)志位,實現(xiàn)了小鍵盤控制調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。參考文獻(xiàn)1周荷琴,吳秀清.微型計算機(jī)原理與接口技術(shù).合肥:中國科學(xué)技術(shù)大學(xué)出版社,2008.62唐都科教儀器開發(fā)
29、有限公司. 32位微機(jī)原理與接口技術(shù)實驗教程.3陳明義.數(shù)字電子技術(shù)基礎(chǔ).長沙.中南大學(xué)出版社,2008.9附錄1 匯編語言源程序代碼 ;*根據(jù)查看端口資源修改下列符號值* IOY0 EQU 0E400H ;片選IOY0對應(yīng)的端口始地址 IOY1 EQU 0E440H ;片選IOY1對應(yīng)的端口始地址;* DA0832 EQU IOY0+00H*4 ;DA0832的端口地址 MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_
30、MODE EQU IOY1+03H*4 ;8255的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT STR1 DB DA0832: Please choose Wave,0AH,0DH,$ ;定義顯示的字符串 MES1 DB SHOW A SQUARE,0AH,0DH,$ MES2 DB SHOW A SANJIAO,0AH,0DH,$ MES3 DB SHOW A JUCHI,0AH,0DH,$ MES4 DB SHOW A SINE,0AH,0DH,$ MES5 DB CHANGE THE Freque
31、nce,0AH,0DH,$ MES6 DB CHANGE THE Amplitude,0AH,0DH,$ KEY DB? FLAG_BOXING DB ? FLAG_FUPIN DB 0 FRE DB 7FH AMP DB 7FH SIN DB 100, 102, 105, 107, 110, 112, 115, 117, 120, 122 DB 124, 127, 129, 132, 134, 136, 139, 141, 143, 145 DB 147, 150, 152, 154, 156, 158, 160, 162, 164, 166 DB 168, 169, 171, 173, 1
32、75, 176, 178, 179, 181, 182 DB 184, 185, 186, 187, 189, 190, 191, 192, 193, 194 DB 194, 195, 196, 197, 197, 198, 198, 199, 199, 199 DB 200, 200, 200, 200, 200, 200, 200, 200, 199, 199 DB 199, 198, 198, 197, 197, 196, 195, 194, 194, 193 DB 192, 191, 190, 189, 187, 186, 185, 184, 182, 181 DB 179, 178,
33、 176, 175, 173, 171, 169, 168, 166, 164 DB 162, 160, 158, 156, 154, 152, 150, 147, 145, 143 DB 141, 139, 136, 134, 132, 129, 127, 124, 122, 120 DB 117, 115, 112, 110, 107, 105, 102, 100, 98, 95 DB 93, 90, 88, 85, 83, 80, 78, 76, 73, 71 DB 68, 66, 64, 61, 59, 57, 55, 53, 50, 48 DB 46, 44, 42, 40, 38,
34、 36, 34, 32, 31, 29 DB 27, 25, 24, 22, 21, 19, 18, 16, 15, 14 DB 13, 11, 10, 9, 8, 7, 6, 6, 5, 4 DB 3, 3, 2, 2, 1, 1, 1, 0, 0, 0 DB 0, 0, 0, 0, 0, 1, 1, 1, 2, 2 DB 3, 3, 4, 5, 6, 6, 7, 8, 9, 10 DB 11, 13, 14, 15, 16, 18, 19, 21, 22, 24 DB 25, 27, 29, 31, 32, 34, 36, 38, 40, 42 DB 44, 46, 48, 50, 53,
35、 55, 57, 59, 61, 64 DB 66, 68, 71, 73, 76, 78, 80, 83, 85, 88 DB 90, 93, 95, 98, 100 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR1 ;顯示提示選擇界面 MOV AH,9 INT 21H MOV DX,OFFSET MES5 ;show message MOV AH,09H INT 21H MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,100
36、00011B ;方式0,A口、C口高四位輸出, OUT DX,AL ; B口、C口低4位輸入;無鍵按下則循環(huán)等待,有鍵按下則消抖KEYBEGIN: CALL CCSCAN ;掃描按鍵 JNZ GETKEY1 ;有鍵按下則跳置GETKEY1 JMP KEYBEGIN ;無按鍵則繼續(xù)循環(huán)等待 GETKEY1: CALL DELAY_SCAN ;有鍵壓下,延時消抖 CALL DELAY_SCAN CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP KEYBEGIN ;否則跳回開始繼續(xù)循環(huán) GETKEY2: CALL SCAN LOOP1: MOV
37、AL,KEY CMP AL,0CH JE A0 CMP AL,0DH JE A1 CMP AL,0EH JE A2 CMP AL,0FH JE A3 CMP AL,9H JE QUIT JMP KEYBEGIN A0: MOV DX,OFFSET MES1 ;show message MOV AH,09H INT 21H CALL SQUARE MOV FLAG_BOXING,0CH JMP GETKEY3 A1: MOV DX,OFFSET MES2 ;show message MOV AH,09H INT 21H CALL SANJIAO MOV FLAG_BOXING,0DH JMP G
38、ETKEY3 A2: MOV DX,OFFSET MES3 ;show message MOV AH,09H INT 21H CALL JUCHI MOV FLAG_BOXING,0EH JMP GETKEY3 A3: MOV DX,OFFSET MES4 ;show message MOV AH,09H INT 21H CALL SINE MOV FLAG_BOXING,0FH JMP GETKEY3 GETKEY3: CALL SCAN ;有鍵按下,調(diào)用鍵盤掃描子程序 MOV AL,KEY;判斷是否為調(diào)幅 /調(diào)頻鍵 CMP AL,08H ;不是則返回判斷波形或退出 JNE LOOP1 NO
39、T BYTE PTRFLAG_FUPIN ;是,則改變幅頻標(biāo)志位 CMP FLAG_FUPIN,0 JNE TIAOFU MOV DX,OFFSET MES5 ;show message MOV AH,09H INT 21H JMP JIXU TIAOFU: MOV DX,OFFSET MES6 ;show message MOV AH,09H INT 21H JIXU: MOV BL,FLAG_BOXING MOV KEY,BL ;將波形對應(yīng)的鍵值存回 KEY中 JMP LOOP1 ;返回判斷波形 QUIT: MOV AX,4C00H ;返回到DOS INT 21H SCAN PROC NE
40、AR MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L1: TEST AL,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP KCODE L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對應(yīng)的鍵值 JMP KCODE NEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準(zhǔn)備檢測下一列 MOV
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 空前嚴(yán)重的資本主義世界經(jīng)濟(jì)危機(jī)講義
- 丹田降脂丸推廣策劃OTC0427教學(xué)課件
- 專業(yè)代理公司組織架構(gòu)及崗位職責(zé)
- 宮頸癌術(shù)后輔助放射治療通用PPT課件
- 家庭常用醫(yī)療器械的使用課件
- 給圖形做標(biāo)記
- 高三政治人教版一輪復(fù)習(xí)課件:課時11經(jīng)濟(jì)全球化與對外開放共44張
- 五年級下冊英語Recycle1人教版課件
- 五年級上冊科學(xué)《母雞生蛋了》粵教版課件
- 二年級上冊道德與法治大家排好隊課件
- 復(fù)習(xí)課件工業(yè)革命
- 第六章組織文化
- 勤助上崗培訓(xùn)課件
- 南川中學(xué) 剪紙課件 第2課
- 華師大版九年級上冊課件:2312平行線分線段成比例