版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、微機應(yīng)用系統(tǒng)設(shè)計與綜合實驗信號發(fā)生器功能程序設(shè)計微機原理課程設(shè)計報告課落款稱:學(xué)院:姓名:指導(dǎo)教師:日期:目錄目錄錯誤!未定義書簽第一章概要錯誤!未定義書簽設(shè)計目的錯誤!未定義書簽課程設(shè)計內(nèi)容及要求錯誤!未定義書簽所需芯片及硬件簡介錯誤!未定義書簽8255A特性簡介錯誤!未定義書簽D/A0832功能簡介錯誤!未定義書簽A/D0809功能簡介錯誤!未定義書簽唐都小鍵盤簡介錯誤!未定義書簽第二章整體設(shè)計方案錯誤!未定義書簽設(shè)計思想論述錯誤!未定義書簽程序流程圖錯誤!未定義書簽電路原理圖錯誤!未定義書簽第三章典型模塊分析錯誤!未定義書簽波形產(chǎn)生模塊錯誤!未定義書簽方波錯誤!未定義書簽三角波錯誤!未定
2、義書簽鋸齒波錯誤!未定義書簽正弦波錯誤!未定義書簽小鍵盤模塊錯誤!未定義書簽調(diào)幅調(diào)頻模塊錯誤!未定義書簽第四章系統(tǒng)調(diào)試進(jìn)程及結(jié)果錯誤!未定義書簽第五章收成與體會錯誤!未定義書簽參考文獻(xiàn)錯誤!未定義書簽附錄1匯編語言源程序代碼錯誤!未定義書簽附錄2C語言源程序代碼錯誤!未定義書簽第一章概要設(shè)計目的信號發(fā)生器的功能設(shè)計結(jié)合了軟硬件的知識,如此的一個課程設(shè)計促使咱們主動去找尋資料,自主學(xué)習(xí)更多的知識。尤其重要的是設(shè)計本身是一種實踐,將講義知識應(yīng)用到設(shè)計中,驗證而且進(jìn)一步熟悉它從而取得新的領(lǐng)會,這是只啃書本所不能達(dá)到的益處。信號發(fā)生器的設(shè)計尤其加深咱們對信號發(fā)生的明白得,對以8086cpu為中心的各芯
3、片功能的了解和對微機原理和匯編語言編程有了更深的體會。課程設(shè)計內(nèi)容及要求(1)、別離用C語百和匯編語百編程完成硬件接口功能設(shè)計;(2)、硬件電路基于80x86微機的接口電路;(3)、程序功能要求:小鍵盤給定、數(shù)碼管或屏幕顯示,并產(chǎn)生對應(yīng)信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調(diào)。(按鍵數(shù)量盡可能少)。所需芯片及硬件簡介8255A特性簡介(1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片利用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強,利用靈活,通過它CPU可直接與外設(shè)相連(2)8255A在利用
4、前要寫入一個方式操縱字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0:大體的輸入輸出方式,即不必聯(lián)絡(luò)就能夠夠直接進(jìn)行的I/O方式。其中A、B、C口的高四位或低四位可別離設(shè)置成輸入或輸出;方式1:選通I/O,現(xiàn)在接口和外圍設(shè)備需聯(lián)絡(luò)信號進(jìn)行和諧,只有A口和B能夠工作在方式1,現(xiàn)在C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號,余下的線只有大體的I/O功能,即只工作在方式0;方式2:雙向I/O方式,只有A口能夠工作在這種方式,該I/O線即可輸入又可輸出,現(xiàn)在C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也能夠和B口一路方式0的I/O線。本次
5、設(shè)計只用到了三個端口的方式00D/A0832功能簡介DAC0832是采納CMOS工藝制成的單片電流輸出型8位數(shù)/模轉(zhuǎn)換器DAC0832的引腳功能說明如下:D0-D7:數(shù)字信號輸入端CS:片選信號,低電平有效WR:寫信號1,低電平有效OUT:DAC電流輸出端x【o"CC可砧XD4xnmxmxdiXI)口了&543210小sddddddddw匚DAColt單元圖唐都實驗箱D/A0832接線圖1.3.3 A/D0809功能簡介ADC0809是采樣頻率為8位的、以逐次逼近原理進(jìn)行模一數(shù)轉(zhuǎn)換的器件。其內(nèi)部有一個8通道多路開關(guān),它能夠依照地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的
6、一個進(jìn)行A/D轉(zhuǎn)換。本地址ABC=000時,IN0通道被選通。V'"5356XD3VOR1口¥口CLKTr554i21o'RD5LDDDDDDDD*RccDC元AD單圖唐都實驗箱A/D0809接線圖1.3.4 唐都小鍵盤簡介唐都實驗箱中提供了4行X4列16個按鍵,列選擇信號X1-X4,行掃描信號Y1-Y4884X4.4.U圖唐都實驗箱小鍵盤接線圖第二章整體設(shè)計方案設(shè)計思想論述(1) .波形產(chǎn)生:通過匯編語言編寫各個波形子程序,其中方波和三角波參考了唐都的參考程序。鋸齒波由三角波修改而來,正弦波事前用MATLAB仿真存入各點數(shù)據(jù),產(chǎn)生波形時依次輸出各個數(shù)據(jù)即可
7、。波形子程序中主若是各個波形一個周期的代碼,循環(huán)執(zhí)行,由此產(chǎn)生持續(xù)波形并通過D/A0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各類波形。具體方案見第三章節(jié)。(2) .波形切換:用小鍵盤輸入進(jìn)行波形的選擇,按鍵03別離對應(yīng)方波、三角波、鋸齒波和正弦波。每一個波形周期輸出后,挪用鍵盤查詢子程序,判定有無按鍵按下,沒有那么繼續(xù)輸出下一周期,不然轉(zhuǎn)到相應(yīng)的波行子程序上??呻S時進(jìn)行波形間的切換。具體方案見第三章節(jié)。(3) .無極調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延不時刻,就可改變整個波形的頻率,延時越短頻率越高。而延不時刻長短可由外部輸入決定,通過A/D0809將電位計(05V)的模擬量轉(zhuǎn)化成數(shù)字量(00
8、FF)作為延不時刻長短。調(diào)劑電位器即可調(diào)劑延時,進(jìn)而調(diào)劑頻率。ADC0809芯片分辨率為8位,即可將延時分為256個品級,實現(xiàn)無極調(diào)頻。具體方案見第三章、節(jié)。(4) .無極調(diào)幅:改變波形子程序中DA輸出值的大小即可改變幅值,能夠在原數(shù)據(jù)基礎(chǔ)上乘以一個增益。而增益可由外部輸入,原理與調(diào)頻相似,通過A/D0809輸入一個數(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é)。(5) .開始終止:通過掃描小鍵盤,按下5鍵那么退出。程序流程圖開
9、始初始化8255調(diào)用ccscan子程序并判斷,無鍵按下則循環(huán)等待,有鍵按下則消抖鍵盤掃描子程序,鍵值keyYKey=5?NYKey=0?N顯示波形信息一Key=1?NKey=2?NKey=3?N鍵盤掃描子程序,鍵值key顯示波形信息顯示波形信息顯示波形信息方波子程序,出口參數(shù):波形標(biāo)志位=0三角波子程序,出口參數(shù):波形標(biāo)志位=1鋸齒波子程序,出口參數(shù):波形標(biāo)志位=2正弦波子程序,出口參數(shù):波形標(biāo)志位=3NFLAG_FUPIN取反Key=波形標(biāo)志位顯示調(diào)頻/調(diào)幅狀態(tài)圖主程序流程圖電路原理圖信號侵生器設(shè)計硬件連接電路國圖硬件連接電路圖第三章典型模塊分析波形產(chǎn)生模塊四個波形子程序結(jié)構(gòu)類似,當(dāng)子程序被
10、挪用后,進(jìn)行以下步驟:(1)通過8255的C7位輸出一個低電平來啟動AD0809,并從8255的B口讀入AD輸入的數(shù)字量(00HFFH)。(2)判定幅頻標(biāo)志位FLAG_FUPIN,為0那么把AD輸入的數(shù)字量存入頻率值空問FRE,不然存入幅值空間AMP。(3)輸出波形的一個周期。(4)挪用子程序CCSCAN,判定小鍵盤有無按鍵按下,無那么繼續(xù)步驟(1),有那么返回主程序。流程圖如下圖。圖波形子程序流程圖方波方波的產(chǎn)生先向DA0832輸出一個低電平(00H),并延時一段時刻。再輸出一個高電平(此處直接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時一段相同時刻,確實是矩形波的一個周期
11、。(1)一個周期波形的代碼:NEXT1_1:MOVDX,DA0832MOVAL,00HOUTDX,ALCALLDELAY1MOVDX,DA0832MOVAL,AMPOUTDX,ALCALLDELAY1(2)延時子程序代碼:DELAY1PROCNEARPUSHCXPUSHAXMOVCH,FREANDCH,0F0H刻ADDCH,0FHMOVCL,0FFHDD1:MOVAX,0FF00HDD2:DECAXJNZDD2LOOPDD1POPAXPOPCXRETDELAY1ENDP;寫00H,輸出低電平;延時;寫AMP,輸出高電平;AMP=00HFFH,默許值7FH;延時;軟件延時子程序;讀取頻率值,F(xiàn)R
12、E=00HFFH;CH的值受FRE的操縱,改變FRE那么改變延不時三角波三角波從最小值開始慢慢上升,抵達(dá)最大值以后再慢慢減小到最小。因此先將最小值(00H)放到BL,輸出并延時,對BL加一,再輸出并延時,達(dá)到最大值后就對BL依次減一,輸出并延時,直到BL=00H,那么為一個周期波形。因此三角波有兩個進(jìn)程。一個周期波形的代碼如下:NEXT1_2:MOVBL,00H;BL賦最小值00HUP1:MOVAL,AMP;AL幅值增益AMP,AMP=00HFFHANDAL,0F0HSHRAL,4;AL=00H-0FHMULBL;ALBL*ALMOVDX,DA0832;啟動D/A轉(zhuǎn)換OUTDX,AL;輸出AL
13、CALLDELAY2INCBL;BL加一CMPBL,25H;判定BL是不是加到最大值了JNEUP1DOWN:MOVAL,AMP;AL幅值增益AMP,AMP=00HFFHANDAL,0F0HSHRAL,4;AL=00H-0FHMULBL;ALBL*ALMOVDX,DA0832OUTDX,ALCALLDELAY2DECBL;BL減一CMPBL,00H;判定BL是不是減到最小值了JNEDOWN延時子程序與方波類似,此處再也不贅述局部流程圖如下圖。鋸齒波鋸齒波與三角波類似,只是鋸齒波抵達(dá)最大值以后,直接跳到最小值。因此鋸齒波只有對BL依次加一的進(jìn)程。一個周期波形的代碼如下:NEXT1_3:MOVBL,
14、00HUP2:MOVAL,AMPANDAL,0F0HSHRAL,4MULBLMOVDX,DA0832OUTDX,ALCALLDELAY2;BL賦最小值00H;AL幅值增益AMP,AMP=00HFFH;AL=00H0FH;ALBL*AL;啟動D/A轉(zhuǎn)換輸出ALINCCMPJNEMOVMOVANDSHRMULMOVOUTCALL延時子程序與方波類似,局部流程圖如下圖。BL;BL加一BL,25H;判定BL是不是加到最大值了UP2BL,00H;BL加到最大以后直接賦給最小值00HAL,AMPAL,0F0HAL,4BL;ALBL*ALDX,DA0832DX,ALDELAY2此處再也不贅述。圖三角波一周期
15、流程圖圖鋸齒波一周期流程圖正弦波正弦波是利用正弦表(見附錄代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時。一個周期波形的代碼:NEXT1_4:LEAMOVSI,SINCX,255;指向正弦表中的第L個數(shù)據(jù)UP:MOVBL,AMP;BL幅值增益AMP,AMP=00HFFHANDBL,0F0HSHRBL,4;AMP=00HFFH,BL=00H0FMOVAL,SI;讀取正弦表中的一個數(shù)據(jù)SHRAL,2MULBL;ALAL*BLMOVDX,DA0832;啟動D/A轉(zhuǎn)換OUTDX,AL;輸出ALCALLDELAY3INCSI;指向表中的下一個數(shù)據(jù)LOOPUP延時子程序與方波類似,此處再也/、贅述0局部
16、流程圖如下圖圖正弦波一周期流程圖小鍵盤模塊小鍵盤用到兩個子程序(ccscan和scan)。(1)ccscan子程序只是一個輔助程序,用于判定當(dāng)前小鍵盤是不是有鍵按下,有那么全零標(biāo)志位ZF=0(運算結(jié)果不為0),無鍵按下那么ZF=1(運算結(jié)果為0)。子程序代碼如下:MOVMOVCCSCANPROCNEAR;掃描是不是有按鍵閉合子程序AL,00HDX,MY8255_A;將4列全選通,X1X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;讀Y1丫4NOTALANDAL,0FH;掏出Y1Y4的反值RETCCSCANENDP(2)scan功能為當(dāng)確信小鍵盤有鍵按下那么一列一列掃描鍵盤,
17、判定是哪一列哪一行的鍵被按下了,并把鍵值保留到數(shù)據(jù)段的key空間去。子程序代碼如下:SCANPROCNEARMOVCH,0FEHMOVCL,00H;設(shè)置當(dāng)前檢測的是第幾列COLUM:MOVAL,CH;選取一列,將X1X4中一個置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;讀Y1Y4,用于判定是哪一行按鍵閉合INAL,DXL1:TESTAL,01H;是不是為第1行JNZL2;不是那么繼續(xù)判定MOVAL,00H;設(shè)置第1行第1列的對應(yīng)的鍵值JMPKCODEL2:TESTAL,02H;是不是為第2行JNZL3;不是那么繼續(xù)判定MOVAL,04H;設(shè)置第2行第1列的對應(yīng)
18、的鍵值JMPKCODEL3:TESTAL,04H;是不是為第3行JNZL4;不是那么繼續(xù)判定MOVAL,08H;設(shè)置第3行第1列的對應(yīng)的鍵值JMPKCODEL4:TESTAL,08H;是不是為第4行JNZNEXT;不是那么繼續(xù)判定MOVAL,0CH;設(shè)置第4行第1列的對應(yīng)的鍵值JMPKCODENEXT:INCCL;當(dāng)前檢測的列數(shù)遞增MOVAL,CHTESTAL,08H;檢測是不是掃描到第4列JZKERR;是那么跳回到開始處ROLAL,1;沒檢測到第4列那么預(yù)備檢測下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;將第1列的值加被騙前列數(shù),確信按鍵值MOVKEY,AL;保留按鍵
19、值到key空間KERR:RETSCANENDP調(diào)幅調(diào)頻模塊系統(tǒng)只利用了一個電位計能夠別離調(diào)劑頻率和幅值。波形子程序中每一個循環(huán)周期啟動一次A/D轉(zhuǎn)換,啟動信號由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲單元FRE(或AMP)中,供延時(或幅值輸出)時利用。本次實驗ADC0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過端口B讀入。模擬輸入量Vin通過電位計從05V無極可調(diào),對應(yīng)的數(shù)字輸出量N從00HFFH轉(zhuǎn)變。調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延不時刻,就可改變整個波形的頻率。延不時刻由AD0809讀入的數(shù)據(jù)操縱。調(diào)幅:在波形子程序中給DA輸出值乘以一個增益,改變增益的大小即可改變幅值。增益
20、由AD0809讀入的數(shù)據(jù)操縱。調(diào)頻/調(diào)幅切換:主程序設(shè)了一個幅頻標(biāo)志位FLAG_FUPIN,當(dāng)小鍵盤的4鍵按下時,使FLAG_FUPIN取反(默許標(biāo)志位=0)。波形子程序中通過判定幅頻標(biāo)志位FLAG_FUPIN的狀態(tài),能夠選擇是調(diào)頻仍是調(diào)幅。部份代碼如下:(1)主程序中的切換部份TIAOFU:CALLSCAN;有鍵按挪用鍵盤掃描子程序MOVAL,KEYCMPAL,08H;判定是不是為調(diào)幅/調(diào)頻鍵JNELOOP1;不是那么返回判定波形或退出NOTBYTEPTRFLAG_FUPIN;是,那么將幅頻標(biāo)志位取反CMPFLAG_FUPIN,0JNETIAOFUMOVDX,OFFSETMES5;屏幕顯示切
21、換到調(diào)頻狀態(tài)MOVAH,09HINT21HJMPJIXUMOVDX,OFFSETMES6;屏幕顯示切換到調(diào)幅狀態(tài)MOVAH,09HINT21HGETKEY3:JIXU:MOVBL,FLAG_BOXINGMOVKEY,BL;將波形對應(yīng)的鍵值存回KEY中JMPLOOP1;返回判定波形(2)波形子程序部份MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平MOVAL,00001110BOUTDX,AL;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判定幅頻標(biāo)志位,默以為0CMPBL,0JEPIN_1;為0則跳轉(zhuǎn)到PI
22、N_1MOVAMP,AL;不為0那么存為振幅值JMPNEXT1_1PIN_1:MOVFRE,AL;為0那么存為頻率值流程圖見圖和圖第四章系統(tǒng)調(diào)試進(jìn)程及結(jié)果這次設(shè)計波形發(fā)生器是咱們在學(xué)習(xí)匯編以來接觸到的比較大的程序0不管用何種程序書寫,理清思路是關(guān)鍵。因此,從拿到題目開始,咱們花了很多時刻來對設(shè)計波形發(fā)生器的硬件和軟件進(jìn)行了分析與試探,從當(dāng)選出最好的解決方式。在系統(tǒng)調(diào)試的進(jìn)程中,咱們用到的一個很重要的分析進(jìn)程確實是先易后難,先局部后整體,先將各個波形的子程序?qū)懗鰜恚灰贿M(jìn)行測試。無誤后再寫主程序?qū)⒏鱾€子程序整合起來。設(shè)計的進(jìn)程是由易到難的,咱們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,慢慢添加波形切換功能
23、、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁慢慢完善。最先碰到的比較大的困難是小鍵盤的輸入,前后試過兩個方案,最終以唐都提供的參考程序為基礎(chǔ),進(jìn)過修改取得了此刻利用的鍵盤掃描子程序,成效專門好。整個進(jìn)程中最難的是實現(xiàn)無級調(diào)頻和無極調(diào)幅,開始時一直無法調(diào)頻,通過對各個部位的認(rèn)真調(diào)試分析,是0809模數(shù)轉(zhuǎn)換的問題。0809需要一個啟動信號,且轉(zhuǎn)換需要一按時刻。于是咱們用C每周期輸出一啟動信號進(jìn)行轉(zhuǎn)換。最終達(dá)到理想成效。實現(xiàn)了調(diào)頻以后,對整個程序的結(jié)構(gòu)略加改良,引入了幅頻標(biāo)志位,實現(xiàn)了小鍵盤操縱調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。不足
24、和改良:1 .所產(chǎn)生的頻率范圍較窄。應(yīng)盡可能減少延時拓寬頻率。2 .幅值調(diào)劑范圍不夠大。3 .產(chǎn)生的波形不是理想狀態(tài)。專門是方波,上下跳變時,總會有斷點。波形有噪聲,不是理想的波形。4 .由于波形每周期以后要讀端口,與下一個周期之間有必然延時誤差。第五章收成與體會本次課程設(shè)計的要求盡管不多,但整個設(shè)計進(jìn)程是問題不斷,一波三折。整個課程設(shè)計完成以后,我在整體設(shè)計思路、硬件連結(jié)和匯編語言編程等方面取得了專門大的收成。設(shè)計的進(jìn)程是由易到難的,咱們從實現(xiàn)最簡單的波形產(chǎn)生功能開始,慢慢添加波形切換功能、小鍵盤輸入功能、無極調(diào)頻功能、無極調(diào)幅功能,整個系統(tǒng)由簡至繁慢慢完善。而程序整體流程也是三易其稿,其中
25、有借鑒了他人的一些設(shè)計思路。第一個方案實在缺乏設(shè)計的聰慧,在取得正確的指標(biāo)后就被拋棄了。第二個方案時,咱們把操縱波形轉(zhuǎn)換的功能寄希望于用中斷實現(xiàn),而調(diào)頻轉(zhuǎn)變在延時子程序中進(jìn)行,最后證明如此子的程序流程圖將很復(fù)雜冗長,層次不清楚,而且用中斷實現(xiàn)時缺乏所需的硬件。最后一個方案即為當(dāng)前選擇的方案,層次清楚,程序簡單,代碼也短,可是能專門好實現(xiàn)所有功能。硬件連結(jié)的問題要緊在利用第二個方案時顯現(xiàn)的。第二個方案的中斷操縱需要手動輸入一個中斷脈沖,然后結(jié)果老是有差,最后討論得出結(jié)論是咱們很難保證那個手動輸入脈沖的合格,那個脈沖可能不夠標(biāo)準(zhǔn)。后面做最終方案時,波形發(fā)生哆嗦,檢查發(fā)覺是操縱波形選擇的開關(guān)處不穩(wěn)固
26、,也算是硬件連結(jié)的問題。而波形專門是矩形波輸出時,在中間老是一個斷痕,反復(fù)檢查軟件設(shè)計后也歸結(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)略加改良,引入了幅頻標(biāo)志位,實現(xiàn)了小鍵盤操縱調(diào)頻/調(diào)幅的切換,從而只用一個電位計和一個小鍵盤按鍵實現(xiàn)了無極調(diào)頻和無極調(diào)幅的功能。參考文獻(xiàn)1周荷琴,吳秀濤彳散型運算
27、機原理與接口技術(shù).合肥:中國科學(xué)技術(shù)大學(xué)出版社,2唐都科教儀器開發(fā).32位微機原理與接口技術(shù)實驗教程.3陳明義.數(shù)字電子技術(shù)基礎(chǔ).長沙.中南大學(xué)出版社,附錄1匯編語言源程序代碼;*依照查看端口資源彳改以下符號值*IOY0EQU0E400H;片選IOY0對應(yīng)的端口始地址IOY1EQU0E440H;片選IOY1對應(yīng)的端口始地址.*DA0832EQUIOY0+00H*4;DA0832的端口地址MY8255_AEQUIOY1+00H*4;8255的A口地址MY8255_BEQUIOY1+01H*4;8255的B口地址MY8255_CEQUIOY1+02H*4;8255的C口地址MY8255_MODEE
28、QUIOY1+03H*4;8255的操縱寄放器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTSTR1DB'DA0832:PleasechooseWave',0AH,0DH,'$'概念顯示的字符串MES1DB'SHOWASQUARE',0AH,0DH,'$'MES2DB'SHOWASANJIAO',0AH,0DH陽MES3DB'SHOWAJUCHI',0AH,0DH,'$'MES4DB'SHOWASINE',0A
29、H,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
30、,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,
31、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
32、,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;
33、showmessageMOVAH,09HINT21HMOVDX,MY8255_MODE;初始化8255工作方式MOVAL,B;方式0,A口、C口高四位輸出,OUTDX,AL;B口、C口低4位輸入;無鍵按r那么循環(huán)等待,有鍵按卜那么消抖KEYBEGIN:CALLCCSCAN;掃描按鍵JNZGETKEY1;有鍵按卜那么跳置GETKEY1JMPKEYBEGIN;無按鍵那么繼續(xù)循環(huán)等待GETKEY1:CALLDELAY_SCAN;有鍵壓卜,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZGETKEY2;有鍵按卜那么跳置GETKEY2JMPKEYBEGIN;不然跳回開始繼續(xù)循
34、環(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;sh
35、owmessageMOVAH,09HINT21HCALLJUCHIMOVFLAG_BOXING,0EHJMPGETKEY3A3:MOVDX,OFFSETMES4;showmessageMOVAH,09HINT21HCALLSINEMOVFLAG_BOXING,0FHJMPGETKEY3GETKEY3:CALLSCAN;有鍵按下,挪用鍵盤掃描子程序MOVAL,KEY;判定是不是為調(diào)幅/調(diào)頻鍵CMPAL,08H;不是那么返回判定波形或退出JNELOOP1NOTBYTEPTRFLAG_FUPIN;是,那么改變幅頻標(biāo)志位CMPFLAG_FUPIN,0JNETIAOFUMOVDX,OFFSETMES5;
36、showmessageMOVAH,09HINT21HTIAOFU:JMPJIXUMOVDX,OFFSETMES6;showmessageMOVAH,09HINT21HJIXU:MOVBL,FLAG_BOXINGMOVKEY,BL;將波形對應(yīng)的鍵值存回KEY中JMPLOOP1;返回判定波形QUIT:MOVAX,4c00H;返回到DOSINT21HSCANPROCNEARMOVCH,0FEHMOVCL,00H;設(shè)置當(dāng)前檢測的是第幾列COLUM:MOVAL,CH;選取一列,將X1X4中一個置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;讀Y1Y4,用于判定是哪一行按鍵閉
37、合INAL,DXL1:TESTAL,01H;是不是為第1行JNZL2;不是那么繼續(xù)判定MOVAL,00H;設(shè)置第1行第1列的對應(yīng)的鍵值JMPKCODEL2:TESTAL,02H;是不是為第2行JNZL3;不是那么繼續(xù)判定MOVAL,04H;設(shè)置第2行第1列的對應(yīng)的鍵值JMPKCODEL3:TESTAL,04H;是不是為第3行JNZL4;不是那么繼續(xù)判定MOVAL,08H;設(shè)置第3行第1列的對應(yīng)的鍵值JMPKCODEL4:TESTAL,08H;是不是為第4行JNZNEXT;不是那么繼續(xù)判定MOVAL,0CH;設(shè)置第4行第1列的對應(yīng)的鍵值JMPKCODENEXT:INCCL;當(dāng)前檢測的列數(shù)遞增MO
38、VAL,CHTESTAL,08H;檢測是不是掃描到第4列JZKERR;是那么跳回到開始處ROLAL,1;沒檢測到第4列那么預(yù)備檢測下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;將第1列的值加被騙前列數(shù),確信按鍵值MOVKEY,AL;保留按鍵值KERR:RETSCANENDPCCSCANPROCNEAR;掃描是不是有按鍵閉合子程序MOVAL,00HMOVDX,MY8255_A;將4列全選通,X1X4置0OUTDX,ALMOVDX,MY8255CINAL,DX;讀Y1Y4NOTALANDAL,0FH;掏出Y1Y4的反值RETCCSCANENDPSQUAREPROCNEAR;方
39、波產(chǎn)生子程序SQUARE1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平MOVAL,00001110BOUTDX,AL;啟動AD0809MOVDX,MY8255_B;讀82558口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判定幅頻標(biāo)志位,默以為0?CMPBL,0JEPIN_1;為0那么存為頻率值MOVAMP,AL;不為0那么存為振幅值JMPNEXT1_1PIN_1:MOVFRE,ALNEXT1_1:MOVDX,DA0832;寫00H,輸出彳氐電平MOVAL,00HOUTDX,ALCALLDELAY1MOVDX,DA0832;寫AMP,輸出高電平MOVAL,A
40、MP;AMP=00HFFH,默許值7FHOUTDX,ALCALLDELAY1;無鍵按下那么繼續(xù),有鍵按下那么消抖KEYBEGIN_1:CALLCCSCAN;掃描按鍵JNZGETKEY1_1;有鍵按T那么跳置GETKEY_1JMPGETKEY2_1;無按鍵那么繼續(xù)向卜執(zhí)行GETKEY1_1:CALLDELAY_SCAN;后鍵壓卜,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI1;有鍵按T那么跳置GETKEY2GETKEY2_1:JMPSQUARE1;不然跳回開始繼續(xù)循環(huán)FANHUI1:RETSQUAREENDPSANJIAOPROCNEAR;二角波產(chǎn)生子
41、程序SANJIAO1:MOVDX,MY8255_MODE;通過8255的C7發(fā)出一個低電平MOVAL,00001110BOUTDX,AL;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判定幅頻標(biāo)志位,默以為0?CMPBL,0JEPIN_2;為0那么存為頻率值MOVAMP,AL;不為0那么存為振幅值JMPNEXT1_2PIN_2:MOVFRE,ALNEXT1_2:MOVBL,00H;D/A轉(zhuǎn)換起始值UP1:MOVAL,AMPANDAL,0F0H;AMP=00HFFH,AL=00H07HSHRAL,4;即BL變成0至IJ7倍。默許值
42、AMP=7FHMULBLMOVDX,DA0832;啟動D/A轉(zhuǎn)換OUTDX,ALCALLDELAY2INCBLCMPBL,25HJNEUP1DOWN:MOVAL,AMPANDAL,0F0H;AMP=00HFFH,AL=00H07HSHRAL,4;即BL變成0到7倍。默許值A(chǔ)MP=7FHMULBLMOVDX,DA0832OUTDX,ALCALLDELAY2DECBLCMPBL,00HJNEDOWN;無鍵按下那么繼續(xù),有鍵按下那么消抖KEYBEGIN_2:CALLCCSCAN;掃描按鍵JNZGETKEY1_2;有鍵K那么跳置GETKEY_1JMPGETKEY2_2;無按鍵那么繼續(xù)向卜執(zhí)行GETKE
43、Y1_2:CALLDELAY_SCAN;后鍵壓卜,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI2;有鍵按T那么跳置GETKEY2GETKEY2_2:JMPSANJIAO1;不然跳回開始繼續(xù)循環(huán)FANHUI2:RETSANJIAOENDPJUCHIPROCNEAR;鋸齒波產(chǎn)生子程序JUCHI1:MOVDX,MY8255_MODE;通過8255的C7口發(fā)出一個低電平MOVAL,00001110BOUTDX,AL;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判定幅頻標(biāo)志位,默以為0?CMP
44、BL,0JEPIN_3;為0那么存為頻率值MOVAMP,AL;不為0那么存為振幅值JMPNEXT1_3PIN_3:MOVFRE,ALNEXT1_3:MOVBL,00H;D/A轉(zhuǎn)換起始值UP2:MOVAL,AMPANDAL,0F0H;AMP=00HFFH,AL=00H07HSHRAL,4;即BL變成0到7倍。默許值MULBLMOVDX,DA0832;啟動D/A轉(zhuǎn)換OUTDX,ALCALLDELAY2INCBLCMPBL,25HJNEUP2MOVBL,00HMOVAL,AMPANDAL,0F0H;AMP=00HFFH,AL=00H07HSHRAL,4;即BL變成0到7倍。默許值MULBLMOVDX
45、,DA0832OUTDX,ALCALLDELAY2;無鍵按下那么繼續(xù),有鍵按下那么消抖KEYBEGIN_3:CALLCCSCAN;掃描按鍵JNZGETKEY1_3;有鍵K那么跳置GETKEY_1JMPGETKEY2_3;無按鍵那么繼續(xù)向卜執(zhí)行GETKEY1_3:CALLDELAY_SCAN;后鍵壓卜,延時消抖CALLDELAY_SCANCALLCCSCAN;再次掃描按鍵JNZFANHUI3;有鍵按T那么跳置GETKEY2GETKEY2_3:JMPJUCHI1;不然跳回開始繼續(xù)循環(huán)AMP=7FHAMP=7FHFANHUI3:RETJUCHIENDPSINEPROCNEAR;正弦波產(chǎn)生子程序SIN
46、E1:MOVDX,MY8255_MODE;通過8255的C7發(fā)出一MOVAL,00001110BOUTDX,AL;啟動AD0809MOVDX,MY8255_B;讀8255B口數(shù)據(jù)INAL,DXMOVBL,FLAG_FUPIN;判定幅頻標(biāo)志位,默以為CMPBL,0JEPIN_4;為0那么存為頻率值MOVAMP,AL;不為0那么存為振幅值JMPNEXT1_4PIN_4:MOVFRE,ALNEXT1_4:LEASI,SINMOVCX,255UP:MOVBL,AMPANDBL,0F0H;AMP=00HFFH,BL=00H07HSHRBL,4;即AL變成0到7倍。默許值A(chǔ)MP=7FHMOVAL,SISHRAL,2MULBLMOVDX,DA0832;啟動D/A轉(zhuǎn)換OUTDX,ALCALLDELAY3INCSILOOPUP無鍵按下那么繼續(xù),有鍵按下那么消抖KEYBEGIN_4:CALLCCSCAN;掃描按鍵JNZGETKEY1_4;有鍵按T那么跳置GETKEY_1個低電平0?JMPGETKEY2_4;無按鍵那么繼續(xù)向卜執(zhí)行GETKEY1_4:CALLDELAY_SCAN;有鍵壓卜,延時消
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人門面房屋租賃合同標(biāo)準(zhǔn)樣本(2篇)
- 2025年鄉(xiāng)村農(nóng)副產(chǎn)品采購合同協(xié)議模板(2篇)
- 2025年交易會攤位制作協(xié)議樣本(2篇)
- 2025年個人挖掘機買賣合同(2篇)
- 2025年個人機械租賃合同協(xié)議(4篇)
- 2025年事業(yè)單位臨時工合同樣本(2篇)
- 寫字樓裝修解除合同協(xié)議書
- 2025年度安全設(shè)施完善租賃住宅合同示例
- 旗艦店品牌形象裝修合同
- 寵物店裝修承攬協(xié)議
- 設(shè)備日常維護(hù)及保養(yǎng)培訓(xùn)
- 設(shè)計院個人年終總結(jié)
- 鋼結(jié)構(gòu)實習(xí)報告
- 2024年建房四鄰協(xié)議范本
- FTTR-H 全光組網(wǎng)解決方案裝維理論考試復(fù)習(xí)試題
- 2024年安全生產(chǎn)月主題2024年學(xué)校安全生產(chǎn)月活動方案
- 2024年廣東佛山市中醫(yī)院三水醫(yī)院招聘61人歷年高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 測繪保密協(xié)議書保密協(xié)議(2024版)
- 中級半導(dǎo)體分立器件和集成電路裝調(diào)工技能鑒定考試題庫(含答案)
- HG20202-2014 脫脂工程施工及驗收規(guī)范
- 固定資產(chǎn)培訓(xùn)課件共-51張
評論
0/150
提交評論