【精編完整版】信號發(fā)生器功能程序設計-微機原理畢業(yè)論文報告_第1頁
【精編完整版】信號發(fā)生器功能程序設計-微機原理畢業(yè)論文報告_第2頁
【精編完整版】信號發(fā)生器功能程序設計-微機原理畢業(yè)論文報告_第3頁
【精編完整版】信號發(fā)生器功能程序設計-微機原理畢業(yè)論文報告_第4頁
【精編完整版】信號發(fā)生器功能程序設計-微機原理畢業(yè)論文報告_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微機應用系統(tǒng)設計與綜合實驗——微機原理課程設計報告課題名稱:信號發(fā)生器功能程序設計學院:姓 名:指導老師:日期:

目錄目錄 1第一章 概要 21.1設計目的 21.2課程設計內容及要求 21.3所需芯片及硬件簡介 21.3.18255A特性簡介 21.3.2D/A0832功能簡介 31.3.3 A/D0809功能簡介 31.3.4 唐都小鍵盤簡介 4第二章 總體設計方案 52.1設計思想論述 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調幅調頻模塊 14第四章 系統(tǒng)調試過程及結果 16第五章 收獲與體會 17參考文獻 18附錄1匯編語言源程序代碼 19附錄2C語言源程序代碼 33

概要1.1設計目的信號發(fā)生器的功能設計結合了軟硬件的知識,這樣的一個課程設計促使我們主動去找尋資料,自主學習更多的知識。尤其重要的是設計本身是一種實踐,將課本知識應用到設計中,驗證并且進一步熟悉它從而獲得新的領悟,這是只啃書本所不能達成的好處。信號發(fā)生器的設計尤其加深我們對信號發(fā)生的理解,對以8086cpu為中心的各芯片功能的了解以及對微機原理和匯編語言編程有了更深的體會。1.2課程設計內容及要求(1)、分別用C語言和匯編語言編程完成硬件接口功能設計;(2)、硬件電路基于80x86微機的接口電路;(3)、程序功能要求:小鍵盤給定、數(shù)碼管或屏幕顯示,并產(chǎn)生對應信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調。(按鍵數(shù)量盡量少)。1.3所需芯片及硬件簡介1.3.18255A特性簡介(1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強,使用靈活,通過它CPU可直接與外設相連(2)8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0:基本的輸入輸出方式,即無須聯(lián)絡就可以直接進行的I/O方式。其中A、B、C口的高四位或低四位可分別設置成輸入或輸出;方式1:選通I/O,此時接口和外圍設備需聯(lián)絡信號進行協(xié)調,只有A口和B口可以工作在方式1,此時C口的某些線被規(guī)定為A口或B口與外圍設備的聯(lián)絡信號,余下的線只有基本的I/O功能,即只工作在方式0;方式2:雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規(guī)定為A口和外圍設備的雙向聯(lián)絡線,C口剩下的三條線可作為B口方式1的聯(lián)絡線,也可以和B口一起方式0的I/O線。本次設計只用到了三個端口的方式0。1.3.2D/A0832功能簡介DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù)/模轉換器。DAC0832的引腳功能說明如下:D0-D7:數(shù)字信號輸入端CS:片選信號,低電平有效WR:寫信號1,低電平有效OUT:DAC電流輸出端圖1.1唐都實驗箱D/A0832接線圖A/D0809功能簡介ADC0809是采樣頻率為8位的、以逐次逼近原理進行?!獢?shù)轉換的器件。其內部有一個8通道多路開關,它可以根據(jù)地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。當?shù)刂稟BC=000時,IN0通道被選通。圖1.2唐都實驗箱A/D0809接線圖唐都小鍵盤簡介唐都實驗箱中提供了4行×4列16個按鍵,列選擇信號X1-X4,行掃描信號Y1-Y4。圖1.3唐都實驗箱小鍵盤接線圖

總體設計方案2.1設計思想論述(1).波形產(chǎn)生:通過匯編語言編寫各個波形子程序,其中方波和三角波參考了唐都的參考程序。鋸齒波由三角波修改而來,正弦波事先用MATLAB仿真存入各點數(shù)據(jù),產(chǎn)生波形時依次輸出各個數(shù)據(jù)即可。波形子程序中主要是各個波形一個周期的代碼,循環(huán)執(zhí)行,由此產(chǎn)生連續(xù)波形并通過D/A0832將數(shù)字量轉換成模擬量輸出,即可得各種波形。具體方案見第三章3.1節(jié)。(2).波形切換:用小鍵盤輸入進行波形的選擇,按鍵0~3分別對應方波、三角波、鋸齒波和正弦波。每個波形周期輸出后,調用鍵盤查詢子程序,判斷有無按鍵按下,沒有則繼續(xù)輸出下一周期,否則轉到相應的波行子程序上??呻S時進行波形間的切換。具體方案見第三章3.2節(jié)。(3).無極調頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率,延時越短頻率越高。而延時時間長短可由外部輸入決定,通過A/D0809將電位計(0~5V)的模擬量轉化成數(shù)字量(00~FF)作為延時時間長短。調節(jié)電位器即可調節(jié)延時,進而調節(jié)頻率。ADC0809芯片分辨率為8位,即可將延時分為256個等級,實現(xiàn)無極調頻。具體方案見第三章3.3、3.4節(jié)。(4).無極調幅:改變波形子程序中DA輸出值的大小即可改變幅值,可以在原數(shù)據(jù)基礎上乘以一個增益。而增益可由外部輸入,原理與調頻相似,通過A/D0809輸入一個數(shù)字量(00~FF)。按鍵4用于調頻/調幅的切換。當判斷當前為調幅狀態(tài)時就將這個數(shù)字量存入幅值增益變量中,如果判斷是調頻狀態(tài)則存入頻率延時變量中。從而實現(xiàn)只用一個電位器分別調節(jié)頻率和幅度的功能。具體方案見第三章3.3、3.4節(jié)。(5).開始結束:通過掃描小鍵盤,按下5鍵則退出。2.2程序流程圖2.3電路原理圖圖2.2硬件連接電路圖典型模塊分析3.1波形產(chǎn)生模塊四個波形子程序結構類似,當子程序被調用后,進行以下步驟:(1)通過8255的C7位輸出一個低電平來啟動AD0809,并從8255的B口讀入AD輸入的數(shù)字量(00H~FFH)。(2)判斷幅頻標志位FLAG_FUPIN,為0則把AD輸入的數(shù)字量存入頻率值空間FRE,否則存入幅值空間AMP。(3)輸出波形的一個周期。(4)調用子程序CCSCAN,判斷小鍵盤有無按鍵按下,無則繼續(xù)步驟(1),有則返回主程序。流程圖如圖3.1所示。圖3.1波形子程序流程圖3.1.1方波方波的產(chǎn)生先向DA0832輸出一個低電平(00H),并延時一段時間。再輸出一個高電平(此處直接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時一段相同時間,就是矩形波的一個周期。(1)一個周期波形的代碼:NEXT1_1:MOVDX,DA0832;寫00H,輸出低電平MOVAL,00HOUTDX,ALCALLDELAY1 ;延時MOVDX,DA0832;寫AMP,輸出高電平MOVAL,AMP;AMP=00H~FFH,默認值7FHOUTDX,ALCALLDELAY1 ;延時(2)延時子程序代碼:DELAY1PROCNEAR;軟件延時子程序PUSHCXPUSHAXMOVCH,FRE;讀取頻率值,F(xiàn)RE=00H~FFHANDCH,0F0HADDCH,0FH ;CH的值受FRE的控制,改變FRE則改變延時時間MOVCL,0FFH DD1:MOVAX,0FF00HDD2:DECAXJNZDD2LOOPDD1POPAXPOPCXRETDELAY1ENDP3.1.2三角波三角波從最小值開始逐漸上升,到達最大值之后再逐漸減小到最小。因此先將最小值(00H)放到BL,輸出并延時,對BL加一,再輸出并延時,達到最大值后就對BL依次減一,輸出并延時,直到BL=00H,則為一個周期波形。因此三角波有兩個過程。一個周期波形的代碼如下:NEXT1_2:MOVBL,00H;BL賦最小值00HUP1:MOVAL,AMP ;AL幅值增益AMP,AMP=00H~FFHANDAL,0F0H SHRAL,4;AL=00H~0FHMULBL ;ALBL*ALMOVDX,DA0832;啟動D/A轉換OUTDX,AL ;輸出ALCALLDELAY2INCBL ;BL加一CMPBL,25H ;判斷BL是否加到最大值了JNEUP1DOWN:MOVAL,AMP ;AL幅值增益AMP,AMP=00H~FFHANDAL,0F0HSHRAL,4;AL=00H~0FHMULBL ;ALBL*ALMOVDX,DA0832OUTDX,ALCALLDELAY2DECBL ;BL減一CMPBL,00H ;判斷BL是否減到最小值了JNEDOWN延時子程序與方波類似,此處不再贅述。局部流程圖如圖3.2所示。3.1.3鋸齒波鋸齒波與三角波類似,只是鋸齒波到達最大值之后,直接跳到最小值。因此鋸齒波只有對BL依次加一的過程。一個周期波形的代碼如下:NEXT1_3:MOVBL,00H;BL賦最小值00HUP2:MOVAL,AMP ;AL幅值增益AMP,AMP=00H~FFHANDAL,0F0H SHRAL,4;AL=00H~0FHMULBL ;ALBL*ALMOVDX,DA0832;啟動D/A轉換OUTDX,AL ;輸出ALCALLDELAY2INCBL ;BL加一CMPBL,25H ;判斷BL是否加到最大值了JNEUP2MOVBL,00H ;BL加到最大之后直接賦給最小值00HMOVAL,AMPANDAL,0F0HSHRAL,4MULBL ;ALBL*ALMOVDX,DA0832OUTDX,ALCALLDELAY2延時子程序與方波類似,此處不再贅述。局部流程圖如圖3.3所示。3.1.4正弦波正弦波是利用正弦表(見附錄代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時。一個周期波形的代碼:NEXT1_4:LEASI,SIN ;指向正弦表中的第一個數(shù)據(jù)MOVCX,255 UP:MOVBL,AMP ;BL幅值增益AMP,AMP=00H~FFHANDBL,0F0HSHRBL,4;AMP=00H~FFH,BL=00H~0FMOVAL,[SI] ;讀取正弦表中的一個數(shù)據(jù)SHR AL,2MULBL ;ALAL*BLMOVDX,DA0832;啟動D/A轉換OUTDX,AL ;輸出ALCALLDELAY3INCSI ;指向表中的下一個數(shù)據(jù)LOOPUP延時子程序與方波類似,此處不再贅述。局部流程圖如圖3.4所示。3.2小鍵盤模塊小鍵盤用到兩個子程序(ccscan和scan)。ccscan子程序只是一個輔助程序,用于判斷當前小鍵盤是否有鍵按下,有則全零標志位ZF=0(運算結果不為0),無鍵按下則ZF=1(運算結果為0)。子程序代碼如下:CCSCANPROCNEAR;掃描是否有按鍵閉合子程序MOVAL,00HMOVDX,MY8255_A;將4列全選通,X1~X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;讀Y1~Y4NOTALANDAL,0FH;取出Y1~Y4的反值RETCCSCANENDPscan功能為當確定小鍵盤有鍵按下則一列一列掃描鍵盤,判斷是哪一列哪一行的鍵被按下了,并把鍵值保存到數(shù)據(jù)段的key空間去。子程序代碼如下:SCANPROCNEARMOVCH,0FEHMOVCL,00H;設置當前檢測的是第幾列COLUM:MOVAL,CH;選取一列,將X1~X4中一個置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;讀Y1~Y4,用于判斷是哪一行按鍵閉合INAL,DXL1:TESTAL,01H;是否為第1行JNZL2;不是則繼續(xù)判斷MOVAL,00H;設置第1行第1列的對應的鍵值JMPKCODEL2:TESTAL,02H;是否為第2行JNZL3;不是則繼續(xù)判斷MOVAL,04H;設置第2行第1列的對應的鍵值JMPKCODEL3:TESTAL,04H;是否為第3行JNZL4;不是則繼續(xù)判斷MOVAL,08H;設置第3行第1列的對應的鍵值JMPKCODEL4:TESTAL,08H;是否為第4行JNZNEXT;不是則繼續(xù)判斷MOVAL,0CH;設置第4行第1列的對應的鍵值JMPKCODENEXT:INCCL;當前檢測的列數(shù)遞增MOVAL,CHTESTAL,08H;檢測是否掃描到第4列JZKERR;是則跳回到開始處ROLAL,1;沒檢測到第4列則準備檢測下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;將第1列的值加上當前列數(shù),確定按鍵值MOVKEY,AL;保存按鍵值到key空間KERR:RETSCANENDP3.3調幅調頻模塊系統(tǒng)只使用了一個電位計可以分別調節(jié)頻率和幅值。波形子程序中每個循環(huán)周期啟動一次A/D轉換,啟動信號由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲單元FRE(或AMP)中,供延時(或幅值輸出)時使用。本次實驗ADC0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過端口B讀入。模擬輸入量Vin通過電位計從0~5V無極可調,對應的數(shù)字輸出量N從00H~FFH變化。調頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率。延時時間由AD0809讀入的數(shù)據(jù)控制。調幅:在波形子程序中給DA輸出值乘以一個增益,改變增益的大小即可改變幅值。增益由AD0809讀入的數(shù)據(jù)控制。調頻/調幅切換:主程序設了一個幅頻標志位FLAG_FUPIN,當小鍵盤的4鍵按下時,使FLAG_FUPIN取反(默認標志位=0)。波形子程序中通過判斷幅頻標志位FLAG_FUPIN的狀態(tài),可以選擇是調頻還是調幅。部分代碼如下:(1)主程序中的切換部分GETKEY3:CALLSCAN;有鍵按下,調用鍵盤掃描子程序MOVAL,KEYCMPAL,08H;判斷是否為調幅/調頻鍵JNELOOP1;不是則返回判斷波形或退出NOTBYTEPTR[FLAG_FUPIN];是,則將幅頻標志位取反CMPFLAG_FUPIN,0JNETIAOFUMOVDX,OFFSETMES5;屏幕顯示切換到調頻狀態(tài)MOVAH,09HINT21HJMPJIXUTIAOFU:MOVDX,OFFSETMES6;屏幕顯示切換到調幅狀態(tài)MOVAH,09HINT21HJIXU:MOVBL,FLAG_BOXINGMOVKEY,BL;將波形對應的鍵值存回KEY中JMPLOOP1;返回判斷波形(2)波形子程序部分MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平OUTDX,AL ;啟動AD0809MOVDX,MY8255_B ;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判斷幅頻標志位,默認為0CMPBL,0JEPIN_1 ;為0則跳轉到PIN_1MOVAMP,AL;不為0則存為振幅值JMPNEXT1_1PIN_1:MOVFRE,AL ;為0則存為頻率值流程圖見圖2.1和圖3.1系統(tǒng)調試過程及結果此次設計波形發(fā)生器是我們在學習匯編以來接觸到的比較大的程序。無論用何種程序書寫,理清思路是關鍵。因此,從拿到題目開始,我們花了很多時間來對設計波形發(fā)生器的硬件和軟件進行了分析與思考,從中選出最好的解決方法。在系統(tǒng)調試的過程中,我們用到的一個很重要的分析過程就是先易后難,先局部后整體,先將各個波形的子程序寫出來,一一進行測試。無誤后再寫主程序將各個子程序整合起來。設計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調頻功能、無極調幅功能,整個系統(tǒng)由簡至繁逐步完善。最先遇到的比較大的困難是小鍵盤的輸入,前后試過兩個方案,最終以唐都提供的參考程序為基礎,進過修改得到了現(xiàn)在使用的鍵盤掃描子程序,效果很好。整個過程中最難的是實現(xiàn)無級調頻和無極調幅,開始時一直無法調頻,經(jīng)過對各個部位的仔細調試分析,是0809模數(shù)轉換的問題。0809需要一個啟動信號,且轉換需要一定時間。于是我們用C口每周期輸出一啟動信號進行轉換。最終達到理想效果。實現(xiàn)了調頻之后,對整個程序的結構稍加改進,引入了幅頻標志位,實現(xiàn)了小鍵盤控制調頻/調幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調頻和無極調幅的功能。不足和改進:1.所產(chǎn)生的頻率范圍較窄。應盡量減少延時拓寬頻率。2.幅值調節(jié)范圍不夠大。3.產(chǎn)生的波形不是理想狀態(tài)。特別是方波,上下跳變時,總會有斷點。波形有噪聲,不是理想的波形。4.由于波形每周期之后要讀端口,與下一個周期之間有一定延時誤差。收獲與體會本次課程設計的要求雖然不多,但整個設計過程是問題不斷,一波三折。整個課程設計完成之后,我在整體設計思路、硬件連結和匯編語言編程等方面得到了很大的收獲。設計的過程是由易到難的,我們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,逐步添加波形切換功能、小鍵盤輸入功能、無極調頻功能、無極調幅功能,整個系統(tǒng)由簡至繁逐步完善。而程序總體流程也是三易其稿,其中有借鑒了別人的一些設計思路。第一個方案實在缺乏設計的智慧,在得到正確的指標后就被拋棄了。第二個方案時,我們把控制波形轉換的功能寄希望于用中斷實現(xiàn),而調頻變化在延時子程序中進行,最后證實這樣子的程序流程圖將很復雜冗長,條理不清晰,而且用中斷實現(xiàn)時缺乏所需的硬件。最后一個方案即為當前選擇的方案,條理清晰,程序簡單,代碼也短,但是能很好實現(xiàn)所有功能。硬件連結的問題主要在使用第二個方案時出現(xiàn)的。第二個方案的中斷控制需要手動輸入一個中斷脈沖,然后結果總是有差,最后討論得出結論是我們很難保證這個手動輸入脈沖的合格,這個脈沖可能不夠標準。后面做最終方案時,波形發(fā)生顫抖,檢查發(fā)現(xiàn)是控制波形選擇的開關處不穩(wěn)定,也算是硬件連結的問題。而波形特別是矩形波輸出時,在中間總是一個斷痕,反復檢查軟件設計后也歸結為硬件內部延時所產(chǎn)生誤差。做軟件設計時遇到的關鍵點也是難點集中到了調頻電路的選擇。第二方案時,我們把調頻參數(shù)的讀取放置在延時程序,主程序不循環(huán),每一個波形都是無限循環(huán)的波形。后來得到高人指點,我們忽略了主程序循環(huán)所會帶來的延時對波形的影響,以主程序無限循環(huán),每輸出一個周期波形讀一次調頻參數(shù)的方式進行調頻。結果很完美。實現(xiàn)了調頻之后,對整個程序的結構稍加改進,引入了幅頻標志位,實現(xiàn)了小鍵盤控制調頻/調幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調頻和無極調幅的功能。

參考文獻[1]周荷琴,吳秀清.微型計算機原理與接口技術.合肥:中國科學技術大學出版社,2008.6[2]唐都科教儀器開發(fā)有限公司.32位微機原理與接口技術實驗教程.[3]陳明義.數(shù)字電子技術基礎.長沙.中南大學出版社,2008.9

附錄1匯編語言源程序代碼;****************根據(jù)查看端口資源修改下列符號值*******************IOY0EQU0E400H;片選IOY0對應的端口始地址IOY1EQU0E440H;片選IOY1對應的端口始地址;*****************************************************************DA0832EQUIOY0+00H*4;DA0832的端口地址MY8255_AEQUIOY1+00H*4;8255的A口地址MY8255_BEQUIOY1+01H*4;8255的B口地址MY8255_CEQUIOY1+02H*4;8255的C口地址MY8255_MODEEQUIOY1+03H*4;8255的控制寄存器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTSTR1DB'DA0832:PleasechooseWave',0AH,0DH,'$';定義顯示的字符串MES1DB'SHOWASQUARE',0AH,0DH,'$'MES2DB'SHOWASANJIAO',0AH,0DH,'$'MES3DB'SHOWAJUCHI',0AH,0DH,'$'MES4DB'SHOWASINE',0AH,0DH,'$'MES5DB'CHANGETHEFrequence',0AH,0DH,'$'MES6DB'CHANGETHEAmplitude',0AH,0DH,'$' KEYDB '?'FLAG_BOXINGDB'?'FLAG_FUPINDB0FREDB7FHAMPDB7FHSINDB100,102,105,107,110,112,115,117,120,122DB124,127,129,132,134,136,139,141,143,145DB147,150,152,154,156,158,160,162,164,166DB168,169,171,173,175,176,178,179,181,182DB184,185,186,187,189,190,191,192,193,194DB194,195,196,197,197,198,198,199,199,199DB200,200,200,200,200,200,200,200,199,199DB199,198,198,197,197,196,195,194,194,193DB192,191,190,189,187,186,185,184,182,181DB179,178,176,175,173,171,169,168,166,164DB162,160,158,156,154,152,150,147,145,143DB141,139,136,134,132,129,127,124,122,120DB117,115,112,110,107,105,102,100,98,95DB93,90,88,85,83,80,78,76,73,71DB68,66,64,61,59,57,55,53,50,48DB46,44,42,40,38,36,34,32,31,29DB27,25,24,22,21,19,18,16,15,14DB13,11,10,9,8,7,6,6,5,4DB3,3,2,2,1,1,1,0,0,0DB0,0,0,0,0,1,1,1,2,2DB3,3,4,5,6,6,7,8,9,10DB11,13,14,15,16,18,19,21,22,24DB25,27,29,31,32,34,36,38,40,42DB44,46,48,50,53,55,57,59,61,64DB66,68,71,73,76,78,80,83,85,88DB90,93,95,98,100DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETSTR1;顯示提示選擇界面MOVAH,9INT21HMOVDX,OFFSETMES5;showmessageMOVAH,09HINT21HMOVDX,MY8255_MODE;初始化8255工作方式OUTDX,AL ;B口、C口低4位輸入;無鍵按下則循環(huán)等待,有鍵按下則消抖KEYBEGIN:CALLCCSCAN;掃描按鍵JNZGETKEY1;有鍵按下則跳置GETKEY1JMPKEYBEGIN;無按鍵則繼續(xù)循環(huán)等待GETKEY1:CALLDELAY_SCAN;有鍵壓下,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZGETKEY2;有鍵按下則跳置GETKEY2JMPKEYBEGIN;否則跳回開始繼續(xù)循環(huán)GETKEY2:CALLSCANLOOP1:MOVAL,KEYCMPAL,0CHJEA0CMPAL,0DHJEA1CMPAL,0EHJEA2CMPAL,0FHJEA3CMPAL,9HJEQUITJMPKEYBEGINA0:MOVDX,OFFSETMES1;showmessageMOVAH,09HINT21HCALLSQUAREMOVFLAG_BOXING,0CHJMPGETKEY3A1:MOVDX,OFFSETMES2;showmessageMOVAH,09HINT21HCALLSANJIAOMOVFLAG_BOXING,0DHJMPGETKEY3A2:MOVDX,OFFSETMES3;showmessageMOVAH,09HINT21HCALLJUCHIMOVFLAG_BOXING,0EHJMPGETKEY3A3:MOVDX,OFFSETMES4;showmessageMOVAH,09HINT21HCALLSINEMOVFLAG_BOXING,0FHJMPGETKEY3GETKEY3:CALLSCAN;有鍵按下,調用鍵盤掃描子程序MOVAL,KEY ;判斷是否為調幅/調頻鍵CMPAL,08H;不是則返回判斷波形或退出JNELOOP1NOTBYTEPTR[FLAG_FUPIN];是,則改變幅頻標志位CMPFLAG_FUPIN,0JNETIAOFUMOVDX,OFFSETMES5;showmessageMOVAH,09HINT21HJMPJIXUTIAOFU:MOVDX,OFFSETMES6;showmessageMOVAH,09HINT21HJIXU:MOVBL,FLAG_BOXINGMOVKEY,BL;將波形對應的鍵值存回KEY中JMPLOOP1;返回判斷波形QUIT:MOVAX,4C00H;返回到DOSINT21HSCANPROCNEARMOVCH,0FEHMOVCL,00H;設置當前檢測的是第幾列COLUM:MOVAL,CH;選取一列,將X1~X4中一個置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;讀Y1~Y4,用于判斷是哪一行按鍵閉合INAL,DXL1:TESTAL,01H;是否為第1行JNZL2;不是則繼續(xù)判斷MOVAL,00H;設置第1行第1列的對應的鍵值JMPKCODEL2:TESTAL,02H;是否為第2行JNZL3;不是則繼續(xù)判斷MOVAL,04H;設置第2行第1列的對應的鍵值JMPKCODEL3:TESTAL,04H;是否為第3行JNZL4;不是則繼續(xù)判斷MOVAL,08H;設置第3行第1列的對應的鍵值JMPKCODEL4:TESTAL,08H;是否為第4行JNZNEXT;不是則繼續(xù)判斷MOVAL,0CH;設置第4行第1列的對應的鍵值JMPKCODENEXT:INCCL;當前檢測的列數(shù)遞增MOVAL,CHTESTAL,08H;檢測是否掃描到第4列JZKERR;是則跳回到開始處ROLAL,1;沒檢測到第4列則準備檢測下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;將第1列的值加上當前列數(shù),確定按鍵值MOVKEY,AL;保存按鍵值KERR:RETSCANENDPCCSCANPROCNEAR;掃描是否有按鍵閉合子程序MOVAL,00HMOVDX,MY8255_A;將4列全選通,X1~X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;讀Y1~Y4NOTALANDAL,0FH;取出Y1~Y4的反值RETCCSCANENDPSQUAREPROCNEAR;方波產(chǎn)生子程序SQUARE1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平OUTDX,AL ;啟動AD0809MOVDX,MY8255_B ;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判斷幅頻標志位,默認為0?CMPBL,0JEPIN_1;為0則存為頻率值MOVAMP,AL;不為0則存為振幅值JMPNEXT1_1PIN_1:MOVFRE,ALNEXT1_1:MOVDX,DA0832;寫00H,輸出低電平MOVAL,00HOUTDX,ALCALLDELAY1MOVDX,DA0832;寫AMP,輸出高電平MOVAL,AMP;AMP=00H~FFH,默認值7FHOUTDX,ALCALLDELAY1;無鍵按下則繼續(xù),有鍵按下則消抖KEYBEGIN_1:CALLCCSCAN;掃描按鍵JNZGETKEY1_1;有鍵按下則跳置GETKEY_1JMPGETKEY2_1;無按鍵則繼續(xù)向下執(zhí)行GETKEY1_1:CALLDELAY_SCAN;有鍵壓下,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI1;有鍵按下則跳置GETKEY2GETKEY2_1:JMPSQUARE1;否則跳回開始繼續(xù)循環(huán)FANHUI1:RETSQUAREENDPSANJIAOPROCNEAR;三角波產(chǎn)生子程序SANJIAO1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平OUTDX,AL ;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判斷幅頻標志位,默認為0?CMPBL,0JEPIN_2;為0則存為頻率值MOVAMP,AL;不為0則存為振幅值JMPNEXT1_2PIN_2:MOVFRE,ALNEXT1_2:MOVBL,00H;D/A轉換起始值UP1:MOVAL,AMPANDAL,0F0H;AMP=00H~FFH,AL=00H~07HSHRAL,4;即BL變?yōu)?到7倍。默認值AMP=7FHMULBLMOVDX,DA0832;啟動D/A轉換OUTDX,ALCALLDELAY2INCBLCMPBL,25HJNEUP1DOWN:MOVAL,AMPANDAL,0F0H;AMP=00H~FFH,AL=00H~07HSHRAL,4;即BL變?yōu)?到7倍。默認值AMP=7FHMULBLMOVDX,DA0832OUTDX,ALCALLDELAY2DECBLCMPBL,00HJNEDOWN;無鍵按下則繼續(xù),有鍵按下則消抖KEYBEGIN_2:CALLCCSCAN;掃描按鍵JNZGETKEY1_2;有鍵按下則跳置GETKEY_1JMPGETKEY2_2;無按鍵則繼續(xù)向下執(zhí)行GETKEY1_2:CALLDELAY_SCAN;有鍵壓下,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI2;有鍵按下則跳置GETKEY2GETKEY2_2:JMPSANJIAO1;否則跳回開始繼續(xù)循環(huán)FANHUI2:RETSANJIAOENDPJUCHIPROCNEAR;鋸齒波產(chǎn)生子程序JUCHI1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平OUTDX,AL ;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判斷幅頻標志位,默認為0?CMPBL,0JEPIN_3;為0則存為頻率值MOVAMP,AL;不為0則存為振幅值JMPNEXT1_3PIN_3:MOVFRE,ALNEXT1_3:MOVBL,00H;D/A轉換起始值UP2:MOVAL,AMPANDAL,0F0H ;AMP=00H~FFH,AL=00H~07HSHRAL,4;即BL變?yōu)?到7倍。默認值AMP=7FHMULBLMOVDX,DA0832;啟動D/A轉換OUTDX,ALCALLDELAY2INCBLCMPBL,25HJNEUP2MOVBL,00HMOVAL,AMPANDAL,0F0H ;AMP=00H~FFH,AL=00H~07HSHRAL,4;即BL變?yōu)?到7倍。默認值AMP=7FHMULBLMOVDX,DA0832OUTDX,ALCALLDELAY2;無鍵按下則繼續(xù),有鍵按下則消抖KEYBEGIN_3:CALLCCSCAN;掃描按鍵JNZGETKEY1_3;有鍵按下則跳置GETKEY_1JMPGETKEY2_3;無按鍵則繼續(xù)向下執(zhí)行GETKEY1_3:CALLDELAY_SCAN;有鍵壓下,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI3;有鍵按下則跳置GETKEY2GETKEY2_3:JMPJUCHI1;否則跳回開始繼續(xù)循環(huán)FANHUI3:RETJUCHIENDPSINEPROCNEAR;正弦波產(chǎn)生子程序SINE1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平OUTDX,AL ;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判斷幅頻標志位,默認為0?CMPBL,0JEPIN_4;為0則存為頻率值MOVAMP,AL;不為0則存為振幅值JMPNEXT1_4PIN_4:MOVFRE,ALNEXT1_4:LEASI,SINMOVCX,255 UP:MOVBL,AMPANDBL,0F0H ;AMP=00H~FFH,BL=00H~07HSHRBL,4;即AL變?yōu)?到7倍。默認值AMP=7FHMOVAL,[SI]SHR AL,2MULBLMOVDX,DA0832;啟動D/A轉換OUTDX,ALCALLDELAY3INCSILOOPUP;無鍵按下則繼續(xù),有鍵按下則消抖KEYBEGIN_4:CALLCCSCAN;掃描按鍵JNZGETKEY1_4;有鍵按下則跳置GETKEY_1JMPGETKEY2_4;無按鍵則繼續(xù)向下執(zhí)行GETKEY1_4:CALLDELAY_SCAN;有鍵壓下,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI4;有鍵按下則跳置GETKEY2GETKEY2_4:JMPSINE1;否則跳回開始繼續(xù)循環(huán)FANHUI4:RETSINEENDPDELAY_0809PROCNEAR;軟件延時子程序PUSHCXPUSHAXMOVCX,4000HD1:MOVAX,0600HD2:DECAXJNZD2LOOPD1POPAXPOPCXRETDELAY_0809ENDPDELAY1PROCNEAR;軟件延時子程序PUSHCXPUSHAXMOVCH,FRE;讀取頻率值ANDCH,0F0HADDCH,0FHMOVCL,0FFHDD1:MOVAX,0FF00HDD2:DECAXJNZDD2LOOPDD1POPAXPOPCXRETDELAY1ENDPDELAY2PROCNEAR;軟件延時子程序PUSHCXPUSHAXMOVCH,FRE;讀取頻率值SHRCH,4MOVCL,0FFHDY1:MOVAX,8000HDY2:DECAXJNZDY2LOOPDY1POPAXPOPCXRETDELAY2ENDPDELAY3PROCNEAR;軟件延時子程序PUSHCXPUSHAXMOVCH,FRE;讀取頻率值SHRCH,4MOVCL,0FFHD11:MOVAX,4000HD12:DECAXJNZD12LOOPD11POPAXPOPCXRETDELAY3ENDPDELAY_SCANPROCNEAR;軟件延時子程序PUSHCXMOVCX,0F00HD1_SCAN:MOVAX,500HD2_SCAN:DECAXJNZD2_SCANLOOPD1_SCANPOPCXRETDELAY_SCANENDPCODEENDSENDSTART

附錄2C語言源程序代碼#include<stdio.;intn;intsin[256]={100,102,105,107,110,112,115,117,120,122,124,127,129,132,134,136,139,141,143,145,147,150,152,154,156,158,160,162,164,166,168,169,171,173,175,176,178,179,181,182,184,185,186,187,189,190,191,192,193,194,194,195,196,197,197,198,198,199,199,199,200,200,200,200,200,200,200,200,199,199,199,198,198,197,197,196,195,194,194,193,192,191,190,189,187,186,185,184,182,181,179,178,176,175,173,171,169,168,166,164,162,160,158,156,154,152,150,147,145,143,141,139,136,134,132,129,127,124,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論