版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《單片機原理及應用》課程設計報告</p><p> 題 目:數(shù)字音頻測試儀</p><p><b> 目錄</b></p><p> 一、課程設計要求··············
2、·····························1</p><p> 軟硬件設計要求··
3、83;····································&
4、#183;····1</p><p><b> 二、設計思路</b></p><p> 2.1.程序設計基本思路·················
5、3;····················1</p><p> 2.2.使用HIS輸入并測量信號周期·········
6、183;·····················1</p><p> 2.3.測量結果處理和顯示部分········
7、83;··························1</p><p> 三、硬件和軟件設計····
8、3;···································2</p&
9、gt;<p> 1.硬件部分·································
10、·······················2</p><p> 1.1硬件部分········
11、83;····································&
12、#183;·······2</p><p> 1.2程序流程圖·······················
13、83;···························3</p><p> 2.軟件部分(程序清單)···&
14、#183;····································
15、;·····4</p><p> 2.1程序運行結果··························
16、·····················9</p><p> 2.2誤差分析··········
17、83;····································&
18、#183;···9</p><p> 2.3調(diào)試過程···························
19、3;··············10</p><p> 2.4驗收結果·················
20、··································10</p>&l
21、t;p> 四.總結與設計心得·································
22、3;·········10</p><p> 五.參考資料······················&
23、#183;·······················11</p><p><b> 一、課程設計要求</b></p><p> 題目
24、:數(shù)字音頻頻率測試儀:能測試頻率范圍20~20000Hz的信號,誤差小于0.1%,實時在LED顯示測試結果(保留五位有效數(shù)據(jù))。</p><p><b> 具體設計要求</b></p><p> 1.完成規(guī)定的設計內(nèi)容,包括相應的硬件電路原理圖和設計的軟件。</p><p> 2.在規(guī)定時間驗收并回答指導教師的提問。驗收時,先在仿真機的L
25、ED上顯示自己學號的后8位,再進行相應內(nèi)容驗收。</p><p> 設計目的:能夠獲得一個精確的聲頻信號頻率測量軟件。</p><p><b> 二、設計思路</b></p><p><b> 程序設計基本思路</b></p><p> 根據(jù)設計的要求,首先進行學號后八位的顯示,然后進行頻率
26、測量。在學號顯示程序段中設計讀鍵子程序,判斷是否有鍵按下,一旦掃描出有按鍵被按下,則程序立即跳轉到頻率測量程序段。在程序測量過程中,由于要保留5位有效數(shù)字,因此對于小頻率便涉及到小數(shù)點及小數(shù)點后有效位的計算和顯示,在設計中為了使程序有較為強的邏輯性,我首先對頻率測量范圍(20Hz—20000Hz)進行了分段處理,即分為20 Hz—99Hz,100Hz—999Hz,1000Hz—9999Hz,10000Hz—20000Hz,對于四個頻率段
27、,每次測量結果都用六位數(shù)碼管進行顯示(包括5位有效數(shù)字和1位小數(shù)點)。對于不同的測量范圍,都進行不同的運算處理(當然處理的原理是相似的,只是存儲的路徑不同)。</p><p> 2.使用HIS高速輸入測量信號周期</p><p> 本設計中的主要是應用高速輸入HIS進行周期(頻率)測量,設置HIS.1端口每發(fā)生一次正跳變觸發(fā)一個事件,同時HIS時間寄存器記下該正跳變事件的觸發(fā)時間,根據(jù)
28、兩次觸發(fā)事件之間的觸發(fā)時間的差值計算出被測周期信號一個周期內(nèi)所經(jīng)歷的狀態(tài)周期個數(shù)(當然此處要考慮定時器的溢出,即若兩次的測量結果的差值小于零,說明兩次測量之間發(fā)生了定時器溢出,需重新進行測量)。再根據(jù)單片機的主頻(已給定)計算出一個狀態(tài)周期的時間,進而計算出被測周期信號的周期,進一步轉化為頻率。</p><p> 3.測量結果處理和顯示部分</p><p> 接下來是對所得頻率的處理和
29、顯示,根據(jù)設計要求,無論是高頻率段還是低頻率段,最終的顯示結果均要保持5為有效數(shù)字。因此對于低頻段的測量,便涉及到了小數(shù)點后有效數(shù)字的計算。那么該如何對小數(shù)點后數(shù)字進行有效處理呢?我們都知道,整數(shù)部分相除,所得余數(shù)部分與被除數(shù)相除即為整個除法運算的小數(shù)部分,由于本設計中并不需要完全地顯示測量結果,而是僅需要顯示小數(shù)點后1位到3位數(shù)字,這樣我們便可以采用簡單的算法。即讓整數(shù)部分相除所得余數(shù)部分乘以10再除以被除數(shù),所得商即為第一位小數(shù);讓
30、第二次相除所得余數(shù)再乘以10再除以被除數(shù),所得商即為第二位小數(shù)······以此類推便可得到測量結果的小數(shù)部分。最后將所得六位數(shù)值(包括一位小數(shù)點)放到固定的存儲單元,在顯示部分測量結果的每位數(shù)值都作為偏移量疊加到表格首地址上,讀取表格相應存儲單元,并輸出到接口芯片的相應端口進行段選,顯示相應位的測量結果,用循環(huán)控制數(shù)碼管的位選,便可顯示完整的測量結果(包括5位有效數(shù)字和一位小數(shù)
31、點)。</p><p> 本次設計程序中也有使用短時的延時子程序,設計簡單,方便調(diào)用。</p><p><b> 三、硬件和軟件設計</b></p><p><b> 硬件部分</b></p><p> 根據(jù)軟件設計要求,將硬件實現(xiàn)部分分為學號顯示、鍵盤掃描并跳轉、HIS測量、對測量結果進行
32、處理并顯示測量結果。</p><p> 1.1硬件電路設計:本設計中硬件電路主要由MCS-51單片機、接口芯片和仿真機(包括數(shù)碼管)構成,本實驗中根據(jù)測量要求只需要在HIS.1端口與地之間加上被測量信號即可實現(xiàn)設計要求。具體硬件電路及連線如下圖所示:</p><p><b> 1.2程序流程圖:</b></p><p> 2、 軟件部分(
33、程序清單)</p><p> ;--------------------------------------------------------------</p><p> C8255 EQU 0C006H ;8255命令口地址</p><p> P8255A EQU 0C000H
34、 ;8255 PA口地址</p><p> P8255B EQU 0C002H ;8255 PB口地址</p><p> P8255C EQU 0C004H ;8255 PC口地址</p><p&
35、gt; ;---------------------------------------------------------------</p><p> AX EQU 1CH </p><p> AL EQU 1CH </p><p> AH EQU
36、 1DH</p><p> BX EQU 1EH</p><p> BLEQU1EH</p><p> BHEQU1FH</p><p> CXEQU20H</p><p> CLEQU20H</p><p> CHEQU21H</p&g
37、t;<p> DX EQU 22H</p><p> DL EQU 22H</p><p> DHEQU23H</p><p> EXEQU24H</p><p> FXEQU26H</p><p> GLEQU28H</p><p&g
38、t; EL EQU 30H</p><p> ;---------------------------------------------------------------</p><p> ORG 2080H</p><p> LD SP,#00C0H</p><p> LCALL DELAY &l
39、t;/p><p> LDB AL,#82H ;PB口輸入,PA,PC口輸出</p><p> STB AL,C8255[0] </p><p> SH_NO: LDB AL,#00H</p><p> LDB BL,#0E0H</p><p>
40、 SH1: SCALL DISP</p><p> SCALL DELAY</p><p> INCB AL </p><p> LDB GL,#08H ;鍵盤掃描第一行</p><p> STB GL,P8255C[0]</p><p>&l
41、t;b> SKIP</b></p><p><b> SKIP</b></p><p> LDB EL,P8255B[0] ;讀鍵值</p><p> XORB EL,#0FFH</p><p> JNE START</p><
42、p> CMPB AL,#08H</p><p> JNE SH1</p><p> SCALL DELAY</p><p> SJMP SH_NO</p><p> DISP: STB BL,P8255C[0] ;位選</p><p> LD
43、CX,#NO</p><p> EXTB AX</p><p> ADD CX,AX</p><p> LDB DL,[CX]</p><p> STB DL,P8255A[0] ;段選</p><p> SUBB BL,#20H&l
44、t;/p><p><b> RET</b></p><p> ;---------------------------------------------------------------</p><p> NO: DB 3FH,3FH,07H,06H,5BH,4FH,5BH,6DH ;學號00712325</p>
45、;<p> ;---------------------------------------------------------------</p><p><b> START:</b></p><p> LDB IOC0,#04H ;允許HSI.1輸入</p><p>
46、 LDB HSI_MODE,#04H ;每次正跳變觸發(fā)一個事件</p><p> ;--------------------------------------------------------------</p><p><b> TEST: </b></p><p> JBC
47、IOS1,7,TEST</p><p> LDBX,HSI_TIME</p><p><b> TEST1: </b></p><p> JBC IOS1,7,TEST1</p><p> LDCX,HSI_TIME</p><p> SUBEX,CX,BX</p&
48、gt;<p> JNCTEST ;定時器有溢出</p><p> LD 30H,EX ;8T=1.44678us, f=11.059MHZ</p><p><b> EXT 30H</b></p><p> MULU 30H,#0FFFF
49、H ;65535/45282 (原始0FFFF/BOF1)</p><p> DIVU 30H,#0B0E2H</p><p> LD EX,30H</p><p> LD30H,#4240H ;1000 000=0F4240H</p><p> LD32H,#000FH&l
50、t;/p><p> DIVU 30H,EX ;除法運算后,字30H中存儲頻率值整</p><p> 數(shù)部分,要保留5位有效數(shù)字</p><p> CMP 30H,#270FH </p><p> JNC LOOP1</p><p> DIVUB 30H,#64H
51、 ;分別得到萬千百位, 和十個位</p><p> LDBZE 36H,30H</p><p> DIVUB 36H,#0AH </p><p> LDB42H,37H ;百位42H</p><p> LDBZE38H,36H <
52、;/p><p> DIVUB38H,#0AH </p><p> LD40H,38H ;萬位40H ,千位41H</p><p> LDBZE36H,31H </p><p> DIVUB36H,#0AH </p
53、><p> LDB43H,36H</p><p> LDB44H,37H ;十位和個位值分別存43H和44H</p><p> LDB45H,#10H ;顯示小數(shù)點,存于45H</p><p> SJMP SH_FREQ</p>&
54、lt;p> LOOP1: CMP 30H,#03E7H </p><p> JNC LOOP2</p><p> DIVUB30H,#64H ;分別得到千百位,和十個位</p><p> LDBZE36H,30H</p><p> DIVUB36H,#0AH </p>
55、<p> LD40H,36H ;千位40H,百位41H</p><p> LDBZE36H,31H </p><p> DIVUB36H,#0AH </p><p> LD42H,36H ;十位和個位值分別存42H和43H</p><p&g
56、t; LDB44H,#10H ;顯示小數(shù)點,存于44H</p><p> MULUB32H,#0AH ;乘以10除以除數(shù),得到第一位小數(shù)</p><p> LD 34H,32H</p><p> EXT 34H</p><p> DIVU34H,EX</
57、p><p> LDB 45H,34H ;小數(shù)點后第一位存于45H , 小數(shù)點</p><p><b> 后需一位</b></p><p> SJMP SH_FREQ</p><p> LOOP2: CMP 30H,#63H </p><p> JNC
58、 LOOP3</p><p> DIVUB30H,#64H ;分別得到百位,和十個位</p><p> LDBZE36H,30H</p><p> DIVUB36H,#0AH </p><p> LDB40H,37H ;百位40H</p>&l
59、t;p> LDBZE36H,31H </p><p> DIVUB36H,#0AH</p><p> LDB41H,36H </p><p> LDB42H,37H ;十位和個位值分別存41H和42H</p><p> LDB43H,#10H ;顯示小數(shù)點
60、,存于43H</p><p> MULUB 32H,#0AH ;乘以10,除以除數(shù), 得到第一位小數(shù)</p><p> LD 34H,32H</p><p> EXT 34H</p><p> DIVU 34H,EX</p><p> LDB44H,34H
61、 ;小數(shù)點后第一位存于44H</p><p> MULUB36H,#0AH ;乘以10,除以除數(shù),得到第二位小數(shù)</p><p> LD 38H,36H</p><p><b> EXT 38H</b></p><p> DIVU 38H,EX</p><p&
62、gt; LDB45H,38H ;小數(shù)點后第二位存于45H , 小數(shù)點后需二位</p><p> SJMP SH_FREQ</p><p><b> LOOP3:</b></p><p> DIVUB30H,#64H ;分別十個位</p><p> LDBZE36H,31
63、H </p><p> DIVUB36H,#0AH </p><p> LD40H,36H ;十位和個位值分別 存40H和41H</p><p> LDB42H,#10H ;顯示小數(shù)點,存于42H</p><p> MULUB32H,#0AH
64、 ;乘以10,除以除數(shù),得到第一位小數(shù)</p><p> LD 34H,32H</p><p> EXT 34H</p><p> DIVU 34H,EX</p><p> LDB43H,34H ;小數(shù)點后第一位 存于43H</p><p> MULUB3
65、6H,#0AH ;乘以10,除以除數(shù),得到第二位小數(shù)</p><p> LD 48H,36H</p><p> EXT 48H</p><p> DIVU 48H,EX</p><p> LDB44H,48H ;小數(shù)點后第二位存于44H</p>
66、<p> MULUB4AH,#0AH ;乘以10,除以除數(shù),得到第三位小數(shù)</p><p> LD 4CH,4AH</p><p> EXT 4CH</p><p> DIVU 4CH,EX</p><p> LDB 45H,4CH ;小數(shù)點后第三位
67、存于45H , 小數(shù)點后需三位 </p><p> ;--------------------------------------------------------------</p><p><b> SH_FREQ:</b></p><p> LDBAL,#00H</p><p> LDBB
68、L,#0A0H</p><p> LD 50H,#40H</p><p><b> SH2: </b></p><p> SCALLDISP1 ;可以增加延時</p><p> LCALL DELAY </p>
69、<p><b> INCBAL</b></p><p> CMPBAL,#06H</p><p><b> JNESH2</b></p><p> LJMPSH_FREQ</p><p><b> DISP1:</b></p>&
70、lt;p> STBBL,P8255C[0] ;位選</p><p> LDCX,#DATAO</p><p> CLRB 1BH</p><p> LDB 1AH,[50H]</p><p> ADDCX,1AH</p><p> LDBDL,[CX]
71、 ;段選</p><p> STBDL,P8255A[0]</p><p><b> INCB 50H</b></p><p> SUBB BL,#20H</p><p><b> RET</b></p><p> ;--
72、------------------------------------------------------------</p><p> DELAY: LD DX,#00FFH ;延時子程序</p><p> DELAY1: DEC DX</p><p> JNE DELAY1</p><p>
73、 RET </p><p> ;--------------------------------------------------------------</p><p> DATAO: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7</p><p> DB 7FH,6F
74、H,77H,7CH,39H,5EH,79H,71H,80H ;8,9,A,B,C,D,E,F,.</p><p> ;--------------------------------------------------------------- </p><p><b> END</b></p><p><b> 程序運行結果:
75、</b></p><p> 測量結果顯示,該軟件設計能夠有效的對低頻信號進行測量,且測量誤差較小,滿足設計要求(即誤差小于0.1%);而在進行大頻率測量時,存在著較為明顯測量誤差,誤差范圍在1%左右,結果不十分理想。</p><p><b> 誤差分析:</b></p><p> 經(jīng)過分析不難發(fā)現(xiàn),誤差來源主要有以下三個方面。
76、</p><p> 1.首先是算法的問題。由于程序在進行除法運算時,不能能夠直接得到小數(shù)位,要想得到小數(shù)位,則必須對做商后的余數(shù)進行再次運算,由此帶來的運算誤差和相關存儲位數(shù)據(jù)的丟失時均會給測量結果帶來運算誤差。</p><p> 2.其次是單片機的主頻誤差。由于主程序的編寫,特別是頻率處理部分的運算的準確度和主頻的精確度緊密相關。若單片機實際主頻率與給定頻率存在較大的實際偏差,就會給
77、運算部分帶來較為嚴重的誤差,最終的顯示結果誤差便不可消除。</p><p> 3.另外一個較大的誤差因素是,信號發(fā)生器本身顯示頻率的準確度。若信號發(fā)生器產(chǎn)生的信號本身的頻率測量存在誤差,那么單片機的測量結果與其進行對比,便顯得沒有可比性了,誤差也變得難以度量。</p><p><b> 調(diào)試過程:</b></p><p> 本次課程設計我
78、選擇的題目和之前的單片機課程實驗有一定的相似之處,難點主要在于五位有效數(shù)字的獲得和測量精度的保證。因此在調(diào)試過程中并沒有遇到較大的困難,特別是在進行小頻率測量時,測量精度很高,達到了設計要求。而在進行高頻率測量時,卻出現(xiàn)了較大的誤差,在調(diào)試過程中,這個問題困擾了我較長的時間,一直在通過調(diào)節(jié)算法進行修改和矯正,但最后結果卻只能是差強人意。我仔細檢查了自己的程序算法,發(fā)現(xiàn)問題并不在于算法,誤差的來源可能來自其他方面,具體分析見上述誤差分析部
79、分。</p><p><b> 驗收結果:</b></p><p> 老師的驗收結果是“低頻誤差較大,且不能進行連續(xù)頻率測量”。</p><p> 這樣的結果著實讓我郁悶,本來低頻測量是很準確的,結果老師過來測量時測量20Hz的方波信號,測量結果卻顯示19.618,誤差確實較大;而進行20000Hz的高頻測量時卻十分準確,這樣的驗收結果,
80、當時確實有點讓我難以接受。但老師卻說以驗收結果為準!</p><p> 不過頻率的連續(xù)測量確實是我之前沒有想到的,在進行測量時,對不同的頻率進行測量,總要對程序重新加載和運行,確實比較不方便。這也是本次設計的不足之處。</p><p><b> 四、總結與設計心得</b></p><p> 本課程設計總的來說還是較為辛苦的,特別是5位有效
81、數(shù)字保留和0.1%的測量精度要求,一開始著實難住了我,為此自己查了很多的資料,花了很多的時間去編寫程序,然后去調(diào)試。嘗試了很多方法去實現(xiàn),調(diào)試失敗了修改程序,再調(diào)試再修改······就這樣反反復復了很多次,最后才終于找到了合適的解決方法。但即便這樣卻還是在進行高頻測量時出現(xiàn)了較大的誤差,面對出現(xiàn)的高頻誤差,自己不斷調(diào)整算法,但最終的結果卻只能差強人意。</p>&
82、lt;p> 最讓人感到意外的是,老師的驗收結果卻與我平時的調(diào)試結果剛好相悖,低頻不準確高頻卻相當準確。這樣的結果很讓我一時難以接受。不過后來想通了,這恰好說明了實驗中的誤差的隨機性和誤差出現(xiàn)的偶然性,正是因為不同單片機之間的固有差異和主頻誤差,使我的測量變的具有一定的隨機性誤差。我不敢完全確定自己的算法不存在問題,但是單片機和信號發(fā)生器的固有誤差是實際存在的,我們在分析實驗結果時,必須勇敢地去面對這個問題,只有這樣我們才能獲得正
83、確的分析結果。</p><p> 當然我的設計中也存在不足之處,例如不能對信號頻率進行連續(xù)測量。在進行測量時,對不同頻率的信號,總要對程序重新加載和運行,這顯得十分的笨拙和不方便。當然這個問題可以通過一個簡單的自動重復掃描程序來完成,但這確實是我在進行設計之前沒有想到的。雖然實現(xiàn)了設計要求,但卻并沒有做到最優(yōu),這是本次設計的一大缺憾!</p><p> 總的來說通過本次課程設計自己是有
84、很大收獲的,進一步鞏固和熟悉了單片機課程知識和匯編編程就不言自明了。最重要的是通過本次課程設計增強了自己解決和處理問題的能力:當你獨自面對一個陌生的問題時,該如何思考進而找到解決問題的最佳途徑、即便你找到了解決問題的方法能否進一步思考進而做到最優(yōu)、對于獲得的最終結果該如何去考慮各種不利因素的影響,這些都是自己在解決問題時所必須思考的。而這些思想的獲得均得益于本次課程設計,可以說通過本次課程設計,我受益匪淺。</p><
85、;p><b> 五、參考資料</b></p><p> ?。?)MCS-96系列單片機原理及應用技術 汪建 華中科技大學出版社 2004</p><p> (2)MCS51/96系列單片機原理及應用(修訂版) 孫涵芳 徐愛卿 北京航空航天大學出版社 1996</p><p> ?。?)微型計算機原理與應用(第二版)(MCS-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 反應測試儀-單片機原理及應用課程設計
- 單片機課程設計---單片機控制的溫度測試儀的設計
- 基于avr單片機的數(shù)字音頻記錄器
- 課程設計--基于單片機的小電阻測試儀
- 課程設計--基于單片機的小電阻測試儀
- 單片機課程設計---單片機原理及應用
- 單片機課程設計-- 單片機原理及應用
- 數(shù)字音頻
- 單片機課程設計--- 數(shù)字音樂盒
- 單片機課程設計---數(shù)字音樂盒
- 單片機原理及應用課程設計
- 單片機課程設計--基于單片機的數(shù)字音樂盒
- 單片機課程設計-基于單片機的數(shù)字音樂盒設計
- 單片機原理及應用課程設計
- 單片機課程設計-數(shù)字音樂盒設計
- 數(shù)字音頻技術
- 數(shù)字音頻技術
- 單片機課程設計--數(shù)字音樂盒的設計
- 單片機課程設計《數(shù)字音樂盒的設計》
- 簡易數(shù)字電壓表-單片機原理及應用課程設計
評論
0/150
提交評論