版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
word文檔可自由復(fù)制編輯微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合實驗課程設(shè)計報告word文檔可自由復(fù)制編輯目錄目錄·······································································1第一章 概要····························································31.1設(shè)計目的·························································31.2課程設(shè)計內(nèi)容及要求·············································31.3所需芯片及硬件簡介··············································41.3.18086CPU簡介················································41.3.274LS273功能簡介············································41.3.38255A特性簡介·············································51.3.4D/A0832功能簡介···········································61.3.5A/D0809功能簡介············································61.3.6唐都小鍵盤簡介·············································71.3.7數(shù)碼管顯示·················································7第二章 總體設(shè)計方案··················································82.1設(shè)計思想論述····················································82.2程序流程圖······················································92.3電路原理圖····················································10第三章 典型模塊分析················································113.1波形產(chǎn)生模塊·················································113.1.1三角波·················································123.1.2鋸齒波··················································153.1.3正弦波·················································163.1.4方波···················································193.2小鍵盤模塊···················································203.3調(diào)幅調(diào)頻模塊················································22第四章 系統(tǒng)調(diào)試過程及結(jié)果······································25第五章 收獲與體會················································27參考文獻(xiàn)··························································29附錄1匯編語言源程序代碼········································30附錄2proteus仿真圖··············································37第一章概要1.1課程設(shè)計目的《微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合實驗(實踐)》課程設(shè)計是自動化、智能專業(yè)本科生的必修課。通過本課程設(shè)計,讓學(xué)生對微機(jī)系統(tǒng)有一個較全面的理解,對典型數(shù)字接口電路的應(yīng)用技術(shù)有一個較深入地掌握,綜合了對應(yīng)用系統(tǒng)的硬件原理和軟件編程的分析、設(shè)計和調(diào)試,達(dá)到基本掌握簡單微型計算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計方法,提高項目開發(fā)能力的目的。要求同學(xué)獨(dú)立完成課題,寫出課程設(shè)計說明書,畫出電路原理圖,說明工作原理,畫出電路印制板圖,編寫設(shè)計程序及程序流程圖。希望同學(xué)們認(rèn)真閱讀課程設(shè)計任務(wù)書,認(rèn)真查閱資料,完成好上機(jī)調(diào)試,圓滿完成本次課程設(shè)計。1.2課程設(shè)計內(nèi)容及要求完成基于80x86CPU為核心控制器的具備基本I/O接口功能的硬件電路系統(tǒng)原理圖設(shè)計、PCB電路設(shè)計和軟件編程設(shè)計?;綢/O接口電路應(yīng)包括:鎖存器、緩沖器、地址譯碼器、8255接口、8253接口、A/D(D/A)轉(zhuǎn)換電路、串行接口電路等;軟件功能要求完成基本I/O接口電路控制和串口通信功能調(diào)試。設(shè)計題:信號發(fā)生器功能程序設(shè)計設(shè)計要求:(1)、硬件電路基于80x86微機(jī)的接口電路;(2)、分別用C語言或匯編語言或VC++編程完成硬件接口功能設(shè)計;(3)、程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對應(yīng)信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。(4)、具備本地及遠(yuǎn)程(串行方式)監(jiān)測功能。實現(xiàn)技術(shù)指標(biāo):
(1)、完全用小鍵盤控制各波形間的切換和頻率和幅值的調(diào)節(jié)以及退出。
(2)、實現(xiàn)正弦波、三角波、方波和鋸齒波信號的產(chǎn)生。
(3)、數(shù)碼管同步顯示當(dāng)前工作波形的頻率和幅值。
(4)、實現(xiàn)頻率的1到5倍可調(diào)。
(5)、實現(xiàn)幅值的1到5倍可調(diào)。1.3所需芯片及硬件簡介1.3.1
8086功能簡介
8086
CPU是由總線接口部件BIU和執(zhí)行部件EU這兩大部分構(gòu)成??偩€接口部件BIU是8086
CPU在存儲器和I/O設(shè)備之間的接口部件,負(fù)責(zé)對全部引腳的操作,即8086對存儲器和I/O設(shè)備的所有操作都是由BIU完成的。所有對外部總線的操作都必須有正確的地址和適當(dāng)?shù)目刂菩盘枺珺IU中的各部件主要是圍繞這個目標(biāo)設(shè)計的。它提供了16位雙向數(shù)據(jù)總線、20位地址總線和若干條控制總線。
其具體任務(wù)是:負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊列緩沖器暫存。CPU執(zhí)行指令時,總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存單元或I/O端口中。
執(zhí)行單元EU中包含1個16位的運(yùn)算器ALU、8個16位的寄存器、1個16位標(biāo)志寄存器FR、1個運(yùn)算暫存器和執(zhí)行單元的控制電路。這個單元進(jìn)行所有指令的解釋和執(zhí)行,同時管理上述有關(guān)的寄存器。EU對指令的執(zhí)行是從取指令操作碼開始的,它從總線接口單元的指令隊列緩沖器中每次取一個字節(jié)。如果指令隊列緩沖器中是空的,那么EU就要等待BIU通過外部總線從存儲器中取得指令并送到EU,通過譯碼電路分析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。1.3.274LS273功能簡介
地址鎖存器就是一個暫存器,它根據(jù)控制信號的狀態(tài),將總線上地址代碼暫存起來。8086/8088數(shù)據(jù)和地址總線采用分時復(fù)用操作方法,即用同一總線既傳輸數(shù)據(jù)又傳輸?shù)刂?。?dāng)微處理器與存儲器交換信號時,首先由CPU發(fā)出存儲器地址,同時發(fā)出允許鎖存信號ALE給鎖存器,當(dāng)鎖存器接到該信號后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。
地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。74LS273的引腳1D~8D為數(shù)據(jù)輸入端,1Q~8Q為數(shù)據(jù)輸出端,WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時,芯片被清除,輸出全為0。CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時,D0~D7的數(shù)據(jù)通過芯片,為0時將數(shù)據(jù)鎖存,D0~D7的數(shù)據(jù)不變。由于8086有20位物理地址,所以需要用3片74LS273級聯(lián)。1.3.38255A特性簡介(1)具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連。圖1.1唐都實驗箱D/A0832接線圖(2)8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0:基本的輸入輸出方式,即無須聯(lián)絡(luò)就可以直接進(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.4D/A0832功能簡介DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù)/模轉(zhuǎn)換器。DAC0832的引腳功能說明如下:D0-D7:數(shù)字信號輸入端CS:片選信號,低電平有效WR:寫信號1,低電平有效OUT:DAC電流輸出端1.3.5A/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.6唐都小鍵盤簡介唐都實驗箱中提供了4行×4列16個按鍵,列選擇信號X1-X4,行掃描信號Y1-Y4。圖1.3唐都實驗箱小鍵盤接線圖1.3.7
數(shù)碼管顯示
數(shù)碼管同步顯示當(dāng)前波形的幅值和頻率。硬件上由8086將數(shù)據(jù)輸出給8255,8255再將輸出送給數(shù)碼管的A~Dp,顯示相應(yīng)字符。軟件上定義一個緩沖區(qū)存放波形的幅值和頻率,顯示數(shù)碼管時,利用緩沖區(qū)的數(shù)值查找數(shù)碼管鍵值表再輸出對應(yīng)數(shù)值。循環(huán)輸出波形時也循環(huán)輸出緩沖區(qū)內(nèi)容對應(yīng)的值,就可以同步顯示波形的幅值和頻率。利用小鍵盤掃描得到的鍵值進(jìn)行判斷,對緩沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。第二章總體設(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)行波形的選擇,按鍵0~3分別對應(yīng)方波、三角波、鋸齒波和正弦波。每個波形周期輸出后,調(diào)用鍵盤查詢子程序,判斷有無按鍵按下,沒有則繼續(xù)輸出下一周期,否則轉(zhuǎn)到相應(yīng)的波行子程序上??呻S時進(jìn)行波形間的切換。具體方案見第三章3.2節(jié)。(3).無極調(diào)頻:改變波形子程序中的各個數(shù)據(jù)輸出延時時間,就可改變整個波形的頻率,延時越短頻率越高。而延時時間長短可由外部輸入決定,通過A/D0809將電位計(0~5V)的模擬量轉(zhuǎn)化成數(shù)字量(00~FF)作為延時時間長短。調(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輸入一個數(shù)字量(00~FF)。按鍵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方波子程序,出口參數(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ù)字量(00H~FFH)。(2)判斷幅頻標(biāo)志位FLAG_FUPIN,為0則把AD輸入的數(shù)字量存入頻率值空間FRE,否則存入幅值空間AMP。(3)輸出波形的一個周期。(4)調(diào)用子程序CCSCAN,判斷小鍵盤有無按鍵按下,無則繼續(xù)步驟(1),有則返回主程序。流程圖如圖3.1所示。子程序調(diào)用子程序調(diào)用啟動AD0809,讀入數(shù)據(jù)到ALFlag_fupin=0?保存到頻率,F(xiàn)reAL保存到幅值,AmpAL輸出一個周期波形小鍵盤有鍵按下?YNYN延時消抖小鍵盤有鍵按下?NY子程序返回圖3.1波形子程序流程圖3.1.1三角波三角波從最小值開始逐漸上升,到達(dá)最大值之后再逐漸減小到最小。因此先將最小值(00H)放到BL,輸出并延時,對BL加一,再輸出并延時,達(dá)到最大值后就對BL依次減一,輸出并延時,直到BL=00H,則為一個周期波形。因此三角波有兩個過程。(1)一個周期波形的代碼如下:SANJIAO:CALLAM;進(jìn)行幅度調(diào)制 MOVAL,00H ;對AL中的數(shù)據(jù)進(jìn)行初始化UP:MOVDX,MY8255_A;上升 ;信號發(fā)生器系統(tǒng)開始時輸出為0MOVDI,AXOUTDX,ALCALLDELAY;進(jìn)行頻率調(diào)制MOVAX,DIPUSHAXMOVDX,MY8255_B ;讀入8255B口信息,看是否有按鍵按下并進(jìn)行波形轉(zhuǎn)換INAL,DXNOTAL ;由于B口的信息按下為低電平,故對AL中的數(shù)取反CMPAL,02H;按下第二行鍵轉(zhuǎn)入正弦波JEZHENGXIANBOCMPAL,04H ;按下第三行鍵轉(zhuǎn)入鋸齒波JEJUCHIBOCMPAL,08H ;按下第四行鍵轉(zhuǎn)入方波JEFBPOPAXINCALCMPAL,BL;和最大值比較JBUP;小于最大值則執(zhí)行循環(huán)DON:MOVDI,AX;下降MOVDX,MY8255_AOUTDX,ALCALLDELAYMOVAX,DIPUSHAXMOVDX,MY8255_B ;判斷鍵值按下的情況INAL,DXNOTALCMPAL,02HJEZHENGXIANBOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBPOPAXDECALCMPAL,00H;和最小值比較JADON;高于最小值則執(zhí)行循環(huán)JMPSANJIAO;重新進(jìn)行三角波發(fā)生延時子程序代碼:DELAY:PUSHAXMOVDX,MY08081;調(diào)頻ADC08081的初始化OUTDX,ALMOVDX,MY08081;讀調(diào)頻ADC08081值INAL,DXMOVAH,0;AH,BH進(jìn)行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余數(shù),AL中存放商 MOVAH,0MOVBH,0AHDIVBH;對商除以10,即相當(dāng)于把十位的數(shù)字保存到AL中,個位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上邊AL中的商左移四位,將來在數(shù)碼管的十位上顯示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的數(shù)據(jù)加到AL的低四位中去 ;此時AL=XXXXXXXXMOVDX,MY82551_COUTDX,ALMOVBH,0HMOVAH,0PUSHCXMOVCX,001AHMULCXMOVCX,AXDELAY1: LOOPDELAY1 POPAXPOPCXRET局部流程圖如圖3.1所示:BL已到最大?BL已到最大?延時BL*增益→AL,輸出ALBL=00HBL加一NYBL已到最???延時BL*增益→AL,輸出ALBL減一NY圖3.1三角波一周期流程圖BL=00H延時BL*增益→AL,輸出ALBL*增益→AL,輸出ALBL=00H延時BL加一BL已到最大?NY圖3.3鋸齒波一周期流程圖運(yùn)行效果如圖3.2所示:圖3.2三角波圖形3.1.2鋸齒波鋸齒波與三角波類似,只是鋸齒波到達(dá)最大值之后,直接跳到最小值。因此鋸齒波只有對BL依次加一的過程。一個周期波形的代碼如下:JUCHIBO:CALLAM ;進(jìn)行幅度調(diào)制PUSHAXMOVAL,BL;將幅度的最大值保存在AL中DOWN:MOVDX,MY8255_A;輸出鋸齒波OUTDX,ALMOVDI,AX ;保存AX的值CALLDELAY ;進(jìn)行頻率調(diào)制MOVDX,MY8255_B;判斷鍵值按下的情況INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,02HJEZHENGXIANBOCMPAL,08HJEFBMOVAX,DI ;恢復(fù)AX的值DECALCMPAL,00HJADOWNPOPAXJMPJUCHIBO延時子程序與三角波類似,此處不再贅述。局部流程圖如圖3.3所示。運(yùn)行效果如圖3.4所示:圖3.4鋸齒波圖形3.1.3正弦波正弦波是利用正弦表(見附錄代碼段)輸出的,即將正弦表中的數(shù)值一一輸出并延時。一個周期波形的代碼:ZHENGXIANBO:CALLAM ;進(jìn)行幅度調(diào)制,將幅值讀入到BL中PUSHAXPUSHCXLEASI,SINMOVSI,00H;SI做正弦表里的指針D:MOVAL,[SI];讀入正弦表中的數(shù)值到AL中MOVDX,MY8255_AMOVDI,AXMULBL ;將正弦表中的數(shù)值乘以BL幅值以實現(xiàn)調(diào)幅MOVAL,AHOUTDX,ALINCSICALLDELAY ;進(jìn)行頻率調(diào)制MOVDX,MY8255_B;判斷鍵值按下的情況INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBMOVAX,DICMPSI,0FFHJNZDPOPCXPOPAXJMPZHENGXIANBO延時子程序與三角波類似,此處不再贅述。局部流程圖如圖3.5所示:延時延時讀表中的一個數(shù)據(jù)到AL取正弦表首地址AL*增益→AL,輸出AL表地址加一已到表末?NY圖3.5正弦波一周期流程圖運(yùn)行效果如圖3.6所示:圖3.6正弦波圖形3.1.4方波方波的產(chǎn)生先向DA0832輸出一個低電平(00H),并延時一段時間。再輸出一個高電平(此處直接用AMP的值作為高電平,AMP是外部AD輸入的幅值增益),延時一段相同時間,就是矩形波的一個周期。一個周期波形的代碼:FB: CALLAM ;進(jìn)行幅度調(diào)制PUSHAXMOVAL,0FFH;輸出方波的幅值MULBLMOVAL,AHMOVDX,MY8255_AOUTDX,ALMOVCX,40HCALLDELAY ;進(jìn)行頻率調(diào)制MOVAL,0H;改變方波的幅值MOVDX,MY8255_AOUTDX,ALCALLDELAY ;進(jìn)行頻率調(diào)制MOVDX,MY8255_B ;判斷鍵值按下的情況INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,04HJEJUCHIBOCMPAL,02HJEZHENGXIANBOPOPAXJMPFB延時子程序與三角波類似,此處不再贅述。運(yùn)行效果如圖3.7所示:圖3.7方波圖形3.2小鍵盤模塊小鍵盤用到兩個子程序(ccscan和scan)。ccscan子程序只是一個輔助程序,用于判斷當(dāng)前小鍵盤是否有鍵按下,有則全零標(biāo)志位ZF=0(運(yùn)算結(jié)果不為0),無鍵按下則ZF=1(運(yùn)算結(jié)果為0)。子程序代碼如下:CCSCANPROCNEAR;掃描是否有按鍵閉合子程序MOVAL,00HMOVDX,MY8255_A;將4列全選通,X1~X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;讀Y1~Y4NOTALANDAL,0FH;取出Y1~Y4的反值RETCCSCANENDPscan功能為當(dāng)確定小鍵盤有鍵按下則一列一列掃描鍵盤,判斷是哪一列哪一行的鍵被按下了,并把鍵值保存到數(shù)據(jù)段的key空間去。子程序代碼如下:SCANPROCNEARMOVCH,0FEHMOVCL,00H;設(shè)置當(dāng)前檢測的是第幾列COLUM:MOVAL,CH;選取一列,將X1~X4中一個置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;讀Y1~Y4,用于判斷哪一行按鍵閉合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ù)遞增MOVAL,CHTESTAL,08H;檢測是否掃描到第4列JZKERR;是則跳回到開始處ROLAL,1;沒檢測到第4列則準(zhǔn)備檢測下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;將第1列的值加上當(dāng)前列數(shù),確定按鍵值MOVKEY,AL;保存按鍵值到key空間KERR:RETSCANENDP3.3調(diào)幅調(diào)頻模塊系統(tǒng)只使用了一個電位計可以分別調(diào)節(jié)頻率和幅值。波形子程序中每個循環(huán)周期啟動一次A/D轉(zhuǎn)換,啟動信號由C7口輸出,將讀入的數(shù)據(jù)放到特定的存儲單元FRE(或AMP)中,供延時(或幅值輸出)時使用。本次實驗ADC0809芯片的輸出八位數(shù)據(jù)線連到了8255端口B,通過端口B讀入。模擬輸入量Vin通過電位計從0~5V無極可調(diào),對應(yīng)的數(shù)字輸出量N從00H~FFH變化。調(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)頻還是調(diào)幅。部分代碼如下:(1)調(diào)頻程序代碼如下:DELAY:PUSHAXMOVDX,MY08081;調(diào)頻ADC08081的初始化OUTDX,ALMOVDX,MY08081;讀調(diào)頻ADC08081值INAL,DXMOVAH,0;AH,BH進(jìn)行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余數(shù),AL中存放商 MOVAH,0MOVBH,0AHDIVBH ;對商除以10,即相當(dāng)于把十位的數(shù)字保存到AL中,個位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上邊AL中的商左移四位,將來在數(shù)碼管的十位上顯示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的數(shù)據(jù)加到AL的低四位中去 ;此時AL=XXXXXXXXMOVDX,MY82551_COUTDX,ALMOVBH,0HMOVAH,0PUSHCXMOVCX,001AHMULCXMOVCX,AXDELAY1: LOOPDELAY1 POPAXPOPCXRET(2)調(diào)幅程序代碼如下:AM:PUSHAXMOVDX,MY08082;讀0808值A(chǔ)L=10000010OUTDX,ALMOVDX,MY08082INAL,DX;此時AL中存儲08082讀入的幅值信息MOVBL,AL;把幅值信息保存在BL中MOVAH,0;AH,BH進(jìn)行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余數(shù),AL中存放商 MOVAH,0MOVBH,0AHDIVBH ;對商除以10,即相當(dāng)于把十位的數(shù)字保存到AL中,個位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上邊AL中的商左移四位,將來在數(shù)碼管的十位上顯示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的數(shù)據(jù)加到AL的低四位中去 ;此時AL=XXXXXXXXMOVDX,MY8255_COUTDX,ALMOVBH,0HPOPAXRET第四章系統(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)由簡至繁逐步完善。調(diào)試過程中遇到的問題有:1.硬件的連線。硬件連好后,將方波子程序載入8086,最開始示波器連輸出都沒有,DAC0832的片選端一直沒有被選中,我總是以為是地址的問題,可是怎么檢查程序也是沒有理由出錯的,最后發(fā)現(xiàn)DAC0832的WR端虛接了,軟件畫圖容易出現(xiàn)虛接的情況,所以連線的時候一定要小心。
2.小鍵盤控制,這也是整個程序中最核心的部分。這個子程序加在程序的最前面的,如果沒有掃描到鍵值,整個程序就會陷入死循環(huán),不會有任何輸出變化。要使鍵盤掃描得到鍵值,我參考了實驗指導(dǎo)書上的小鍵盤控制,先把小鍵盤掃描的程序單獨(dú)給出來,看能否顯示數(shù)字,結(jié)果并不能正常顯示,反復(fù)檢查調(diào)試以后,修改了鍵值的存儲方式以及延時,將其修改后,小鍵盤方面能正常掃描了。
3.其實最復(fù)雜的是將數(shù)碼管顯示和小鍵盤掃描整合在一起。數(shù)碼管顯示問題一直很復(fù)雜,總是不能正常的顯示,明明小鍵盤Y端有變化,表明有鍵按下,但是數(shù)碼管就是不能將要顯示的數(shù)平穩(wěn)地顯示,剛開始只顯示零,后來經(jīng)修改后,會偶爾顯示一下幅值或頻率但又立馬變了,并且顯示的數(shù)字也不正確,貌似會和之前顯示的數(shù)字有重雙影。查唐都的實驗說明得知,數(shù)碼管只提供了一個8位數(shù)據(jù)端口,一次只能讓一個數(shù)碼管顯示數(shù)據(jù),然后顯示過程特別地快,基本上看不到想要的結(jié)果,并且閃爍得特別厲害。經(jīng)過反復(fù)一直地查找修改,終于發(fā)現(xiàn),有兩個數(shù)碼管顯示的內(nèi)容重疊了,原來是要顯示的兩個存儲單元的地址弄混了,并且延時也有問題。但是數(shù)碼管的延時又涉及到波形每個輸出點的延時,所以將波形產(chǎn)生方面,我改用了采樣數(shù)字量表,使所有的波形產(chǎn)生都簡化了,同時也使延時更短,改為增加循環(huán)次數(shù),并且使數(shù)碼管顯示也加入循環(huán)里,這樣利用視覺暫留,就能看到同時顯示幅值和頻率。
4.在小鍵盤實現(xiàn)中還出現(xiàn)了一個很重要的問題,就是在執(zhí)行到對應(yīng)的波形時要怎么樣跳出然后執(zhí)行到另外一個波形里面去。原本我想多設(shè)置幾個按鍵,4個負(fù)責(zé)選擇波形,4個負(fù)責(zé)調(diào)幅調(diào)頻,還要加一個退出按鍵,每輸出一個周期就掃描一次,可是這樣按鍵太多了程序顯得臃腫,并且沒有波形的情況調(diào)節(jié)頻率也是沒有意義的,而且一個周期的時間,很有可能使你的按鍵落空,沒有掃描進(jìn)去。最后決定只用5個鍵。沒有波形時4個按鍵選擇波形,每次執(zhí)行完一個點后再重新鍵盤掃描,此時那4個鍵又代表調(diào)幅和調(diào)頻,而4鍵從始至終設(shè)置為退出鍵,只要任何時候掃描到此鍵就返回初始狀態(tài),重新進(jìn)入波形選擇,這樣就實現(xiàn)了波形的切換,又使按鍵有效率更高,而且按鍵數(shù)量也很少。
5.方波和三角波的波形產(chǎn)生的程序并不難。鋸齒波就是截取三角波的一半,而正弦波,我找到的正弦波采樣值序列表都很長,而且值都比較大,所以最后,我用計算器在0~2π內(nèi)取了40個點的正弦值。最后在調(diào)節(jié)幅值的時候,當(dāng)調(diào)到最大幅值時,有兩種波形失真了,尤其正弦波和三角波形被截頂了。但是我觀察到鋸齒波卻能正常顯示,原來鋸齒波的采樣數(shù)字量表的最大值比較小,經(jīng)放大最大倍數(shù)后也沒有超出范圍。這可能是因為放大后正弦波的最大值已經(jīng)超出了運(yùn)放輸出的最大電壓,所以導(dǎo)致截頂失真。所以我將數(shù)字量的值整體縮小了,最后總算達(dá)到滿意的效果。不足和改進(jìn):1.所產(chǎn)生的頻率范圍較窄。應(yīng)盡量減少延時拓寬頻率。2.幅值調(diào)節(jié)范圍不夠大。3.產(chǎn)生的波形不是理想狀態(tài)。特別是方波,上下跳變時,總會有斷點。波形有噪聲,不是理想的波形。4.由于波形每周期之后要讀端口,與下一個周期之間有一定延時誤差。第五章收獲與體會本次課程設(shè)計在面臨考試的巨大壓力和編程難度的雙重壓力下終于完成了。這讓我對于微機(jī)原理與接口技術(shù)這門課程又有了更深的了解,尤其是匯編語言的運(yùn)用。這是一次很好的實踐的機(jī)會,將我們之前幾個星期做的微機(jī)原理與接口技術(shù)實驗的軟件和硬件部分都結(jié)合起來,靈活的運(yùn)用,鍛煉我們學(xué)以致用,解決實際問題的能力。我在此次課程設(shè)計中受益匪淺,收獲良多。本次設(shè)計我是用仿真完成的,因為上學(xué)期在模電數(shù)電課程設(shè)計中也使用到了protues軟件,所以這次的設(shè)計,對于protues的使用我一點也不陌生。但是,這次的仿真比起以前模電數(shù)電仿真要復(fù)雜多了。因為這次我選擇的信號發(fā)生器重點就是匯編語言程序的編寫和調(diào)試,程序出現(xiàn)的錯誤比硬件出現(xiàn)的錯要難找的多,尤其是邏輯錯誤,有的時候看都看不出來。但是我還是比較喜歡匯編語言的,可能是對C已經(jīng)忘得差不多了的緣故吧,腦子里只有匯編。匯編是一門很原始的語言,但是也是一門很有用的語言,通過這么一個比較大的實驗,讓我對匯編的理解有了進(jìn)一步的加深。雖然中間過程有苦有煎熬,但是還是很值得回味的,因為我們就是在這樣一次又一次煎熬中才熬出了頭,才不斷成長為更加強(qiáng)大的人。
在這次設(shè)計中,一開始想的比較簡單和樂觀,因為在做微機(jī)原理編程實驗的時候,我們接觸的都是幾十行到一百來行的小程序,寫完一檢查就能比較輕松地查找到錯誤,但是這次的題目重點就在編程。一開始,我以為這些程序不會錯,電路也比較簡單。所以當(dāng)我很快的連好電路,再幾個子程序都加載進(jìn)去的時候,就完全不是我想象的那樣輸出。而且從整個電路分析,我也找不到問題到底出在哪里。我必須要一步一步地再回頭檢查錯誤。這樣有可能還檢查不出來,最后我只能從一個小模塊開始重新連電路,再將該模塊對應(yīng)的程序加載,有問題再改。就這樣,一步一步,只有解決了局部的問題,才能為解決整體的問題提供可能。
在小鍵盤和數(shù)碼管顯示的模塊,確實一度陷入瓶頸,不知道問題出在哪里,為什么就是不能顯示。我去了幾次實驗室,想和大家交流一下,但是選擇這個題目的人真的很少,最后找到幾個同學(xué),但是他們迫于考試壓力要么放棄了仿真,要么放棄了小鍵盤,當(dāng)時的情緒真是非常抑郁,難道就真的做不出來了嗎?怎么可能?就是不相信,感覺就差一點點,就要實現(xiàn)了,因為堅持,因為堅信,因為堅定,哪怕這個茬再難找也會原形畢露的。當(dāng)看到數(shù)碼管顯示正常,自己的心血終于有了結(jié)果,內(nèi)心的喜悅溢于言表。有句話說得對:失敗就是離成功最近的地方,邁過去了就是另一片天。
這次的課程設(shè)計,我要十分感謝同學(xué)們給予我的幫助,還有李志明老師的指導(dǎo),讓我在短短的幾個星期里學(xué)到了很多很實用的知識,通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才是真正的知識,才能提高自己的實際動手能力和獨(dú)立思考的能力。而且在做課程設(shè)計的過程中,不僅是考驗自己所學(xué)的《微機(jī)原理》知識,更是要鍛煉自己的分析問題的能力和解決實際問題的能力,而在此次課程設(shè)計過程中得到了充分的體現(xiàn)。雖然在設(shè)計的過程遇到了各種各樣的問題,但同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計,把以前所學(xué)過的知識重新溫習(xí),加以鞏固。
這回顧起此次課程設(shè)計,我收獲頗豐,不僅鞏固了《微機(jī)原理》的知識,而且鍛煉了動手設(shè)計,解決實際問題的能力,同時讓我堅定了一個信念,學(xué)習(xí)上,沒有攀登不了的山峰,即使山重水復(fù)疑無路,只要堅持下去,也會看到柳暗花明又一村。在今后的學(xué)習(xí)中,我也會將以這樣的精神面對所有的困難。
參考文獻(xiàn)[1]周荷琴,吳秀清.微型計算機(jī)原理與接口技術(shù).合肥:中國科學(xué)技術(shù)大學(xué)出版社,2008.6[2]唐都科教儀器開發(fā)有限公司.32位微機(jī)原理與接口技術(shù)實驗教程.[3]陳明義.數(shù)字電子技術(shù)基礎(chǔ).長沙.中南大學(xué)出版社,2008.9[4]《TD-PIT+實驗教程》
[5]《TD-PIT+用戶手冊》
附錄1匯編語言源程序代碼;****************根據(jù)查看端口資源修改下列符號值*******************IOY0EQU0C400H;片選IOY0對應(yīng)的端口始地址IOY1EQU0C440H;片選IOY1對應(yīng)的端口始地址IOY2EQU0C480H;片選IOY2對應(yīng)的端口始地址IOY3EQU0C4C0H;片選IOY3對應(yīng)的端口始地址;*****************************************************************MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址MY82551_AEQUIOY3+00H*4;82551的A口地址MY82551_BEQUIOY3+01H*4;82551的B口地址MY82551_CEQUIOY3+02H*4;82551的C口地址MY82551_MODEEQUIOY3+03H*4;82551的控制寄存器地址MY08081EQUIOY1+00H*4;調(diào)頻ADC0808的地址MY08082EQUIOY2+00H*4;調(diào)幅ADC0808的地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTSINDB80H,83H,86H,89H,8DH,90H,93H,96H;正弦函數(shù)表DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8HDB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9HDB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5HDB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDHDB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDHDB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6HDB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAHDB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAHDB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7HDB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1HDB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99HDB96H,93H,90H,8DH,89H,86H,83H,80HDB80H,7CH,79H,78H,72H,6FH,6CH,69HDB66H,63H,60H,5DH,5AH,57H,55H,51HDB4EH,4CH,48H,45H,43H,40H,3DH,3AHDB38H,35H,33H,30H,2EH,2BH,29H,27HDB25H,22H,20H,1EH,1CH,1AH,18H,16HDB15H,13H,11H,10H,0EH,0DH,0BH,0AHDB09H,08H,07H,06H,05H,04H,03H,02HDB02H,01H,00H,00H,00H,00H,00H,00HDB00H,00H,00H,00H,00H,00H,01H,02HDB02H,03H,04H,05H,06H,07H,08H,09HDB0AH,0BH,0DH,0EH,10H,11H,13H,15HDB16H,18H,1AH,1CH,1EH,20H,22H,25HDB27H,29H,2BH,2EH,30H,33H,35H,38HDB3AH,3DH,40H,43H,45H,48H,4CH,4EHDB51H,55H,57H,5AH,5DH,60H,63H,66HDB69H,6CH,6FH,72H,76H,79H,7CH,80HDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK1,DS:DATASTART:MOVAX,STACK1;設(shè)置段地址MOVSS,AXMOVAX,DATAMOVDS,AXMOVDX,MY8255_MODE;8255初始化MOVAL,82H;AL=10000010A口輸出,B口輸入,C口輸出,AB都工作在方式0OUTDX,ALMOVDX,MY82551_MODE;82551初始化MOVAL,82H;AL=10000010A口輸出,B口輸入,C口輸出,AB都工作在方式0OUTDX,AL;三角波發(fā)生模塊SANJIAO:CALLAM;進(jìn)行幅度調(diào)制 MOVAL,00H ;對AL中的數(shù)據(jù)進(jìn)行初始化UP:MOVDX,MY8255_A;上升 ;信號發(fā)生器系統(tǒng)開始時輸出為0MOVDI,AXOUTDX,ALCALLDELAY;進(jìn)行頻率調(diào)制MOVAX,DIPUSHAXMOVDX,MY8255_B ;讀入8255B口信息,看是否有按鍵按下并進(jìn)行波形轉(zhuǎn)換INAL,DXNOTAL;由于B口的信息按下為低電平,故對AL中數(shù)取反CMPAL,02H;按下第二行鍵轉(zhuǎn)入正弦波JEZHENGXIANBOCMPAL,04H ;按下第三行鍵轉(zhuǎn)入鋸齒波JEJUCHIBOCMPAL,08H ;按下第四行鍵轉(zhuǎn)入方波JEFBPOPAXINCALCMPAL,BL;和最大值比較JBUP;小于最大值則執(zhí)行循環(huán)DON:MOVDI,AX;下降MOVDX,MY8255_AOUTDX,ALCALLDELAYMOVAX,DIPUSHAXMOVDX,MY8255_B ;判斷鍵值按下的情況INAL,DXNOTALCMPAL,02HJEZHENGXIANBOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBPOPAXDECALCMPAL,00H;和最小值比較JADON;高于最小值則執(zhí)行循環(huán)JMPSANJIAO;重新進(jìn)行三角波發(fā)生;鋸齒波發(fā)生模塊JUCHIBO:CALLAM ;進(jìn)行幅度調(diào)制PUSHAXMOVAL,BL;將幅度的最大值保存在AL中DOWN:MOVDX,MY8255_A;輸出鋸齒波OUTDX,ALMOVDI,AX ;保存AX的值CALLDELAY ;進(jìn)行頻率調(diào)制MOVDX,MY8255_B;判斷鍵值按下的情況INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,02HJEZHENGXIANBOCMPAL,08HJEFB
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 民間借貸安全指南
- 《GBT 2374-2017 染料 染色測定的一般條件規(guī)定》專題研究報告
- 《GB-T 13161-2015輻射防護(hù)儀器 測量X、γ、中子和β輻射個人劑量當(dāng)量Hp(10)和Hp(0.07) 直讀式個人劑量當(dāng)量儀》專題研究報告
- 《GBT 31555-2015 鑄造用機(jī)械手》專題研究報告
- 《AQ 4132-2025煙花爆竹用煙火藥和生產(chǎn)機(jī)械設(shè)備安全論證導(dǎo)則》專題研究報告
- 融資租賃設(shè)備所有權(quán)回購擔(dān)保協(xié)議
- 中式茶點制作技師(初級)考試試卷及答案
- 2025年傳染病疫情信息管理培訓(xùn)題(含答案)
- 呱呱龍課件教學(xué)課件
- 員工隱私保護(hù)課件
- 直播間陪跑合同范本
- 如何樹立消防員榮譽(yù)觀
- 2026中國高校實驗室危險品智能管理平臺市場滲透分析報告
- 深圳市龍崗區(qū)2025年生物高一上期末調(diào)研模擬試題含解析
- (2025年)法院聘用書記員試題及答案
- 具身智能+醫(yī)療康復(fù)中多模態(tài)感知與自適應(yīng)訓(xùn)練系統(tǒng)研究報告
- 廣東省深圳市寶安區(qū)2026屆高一上生物期末聯(lián)考試題含解析
- ISO14644-5-2025潔凈室及相關(guān)受控環(huán)境-第5部分運(yùn)行中文版
- 2025年國家開放大學(xué)《法學(xué)導(dǎo)論》期末考試備考題庫及答案解析
- 物業(yè)公司動火安全管理制度
- 幕墻創(chuàng)優(yōu)工程匯報材料
評論
0/150
提交評論