基本要求: 1頻率變換范圍1Hz-9999Hz 2 測量精度±1% 3 4位LED顯示 4 可測量方波、正弦波、三角波 5 高頻采用測頻法,低頻采用測周法測量
完整的課程設計下載(word格式的):
基于單片機的數字頻率計課設報告.doc
(1.15 MB, 下載次數: 52)
2016-5-10 19:40 上傳
點擊文件名下載附件
下面是論文的部分預覽:
課程設計說明書
課程設計名稱: 專業課程設計 課程設計題目: 數字頻率計 學 院 名 稱: 信息工程學院 專業: 電子信息工程 班級: 學號:姓名: 評分: 教師: 2016 年 6 月 29 日 摘要 數字頻率計是一種專門對被測信號頻率進行測量的電子測量儀器,在計算機、通訊設備、音頻視頻等科研生產領域應用廣泛。 本文詳細介紹數字頻率計的軟件設計,并概述了硬件設計,以中界頻率為界,低頻采用測周法,而高頻采用測頻法。其中,硬件電路由放大電路、整形電路、單片機定時計數電路、7279顯示電路四個部分組成。通過單片機STC89C51實現對特定周期窄脈沖的計數功能;通過芯片LM324實現對小信號的放大;通過芯片74LS14將輸入的非方波整形成方波;通過芯片hd7279A驅動數碼管可連續動態顯示4位數。軟件部分采用的是一種結構化語言C51進行編程。它層次清晰,便于按模塊化方式組織程序,易于調試和維護。主要功能模塊有主程序、測頻法程序、測周法程序、分離千、百、十、個位程序、7279顯示程序組成。 本數字頻率計可測量范圍在1Hz—9999Hz的正弦波、方波、三角波的信號,時基寬度為1us,10us,100us,1ms,本數字頻率計測量誤差大約在0.1%左右,精度為±0.04%,直接由軟件判斷測頻所用方法,解決了存在的換擋速度慢等缺點,并且節約了硬件上的成本。具有精度高、使用方便、測量迅速,以及便等優點,而且還具有成本低、性價比高、功耗低等特點。因此,該頻率計具有一定的實用價值。 關鍵詞:測頻法、測周法、STC89C51單片機、HD7279A 目錄 前言 第一章 硬件電路方案設計及設計要求 1.1 設計內容及要求 1.2 方案比較 1.3 方案論證 1.4方案選擇 第二章 系統組成和工作原理 2.1系統組成 2.2 系統工作原理 2.2.1頻率計測量方法簡介 2.2.2工作原理 第三章 硬件電路設計 3.1單片機最小系統電路 3.1.1 STC89C51功能簡介 3.1.2單片機STC89C51引腳圖 3.1.3復位電路 3.2 放大整形模塊 3.3 施密特整形 3.4 HD 7279A顯示模塊 第四章 軟件設計及程序流程圖 4.1 編程語言的選擇及程序的編譯調試 4.2 單片機計數原理 4.3主程序設計 4.3.1 設計思路 4.3.2程序流程圖 第五章 實驗調試、測量結果記錄和誤差分析 5.1實驗調試 5.2 測量結果記錄 5.3誤差分析 5.3.1產生誤差的原因 5.3.2減小誤差的方法 第六章 小結和體會 參考文獻 附錄一 元器件清單 附錄二 實驗電路圖 附錄三 實驗代碼 前言當今社會,隨著科技的進步,數字系統的設計有了很大的進步,如今運行速度快、在功能更加強大的基礎上更加便于使用攜帶成了發展的方向。60年代以來,在半導體器件和計算機技術發展的基礎上,結合電測技術創造出了完全新的數字式儀表。它在測試方法、原理、儀器結構和操作方法上完全與前面所講的模式式儀表不同,在質的方面也有很大的飛躍,70年代以來,把微型計算機的功能引入數字儀表,產生了新型智能化儀表,它具有程序控制、信息儲存數據處理和自動檢修功能,使數字儀表向高準確度、多功能、高可靠性和低價格方面大大邁進了一步。近代的數字頻率計就其功能而言,早已超出了早期只能測量頻率的范疇,而具有測量周期、頻率比、脈沖時間、累加計數等用途,并能輸出標準頻率、時標脈沖、閘門時間脈沖及編碼信號等,成為一機多能、測頻范圍寬、測量精度高、測量速度快、自動化程度高、直接數字顯示、操作簡便的常用電子儀器,它在教學、科研、生產、國防中得到廣泛使用。 頻率測量儀在數字電路、模擬電路中應用比較廣泛,它是直接用十進制數字來顯示被測信號頻率的一種測量裝置。它不僅可以測量正弦波,方波,三角波,尖脈沖信號和其他具有周期的信號的頻率,經過改裝,可以測量脈沖寬度,做成數字式脈寬測量儀:可以測量電容做成數字電容測量儀;在電路中增加傳感器,還可以做成數字脈搏儀,計價器等。因此數字頻率儀在測量物理量方面的廣泛應用。 由于時基電路,邏輯控制電路實際的硬件設計用到的器件較多,聯機比較復雜,而且會產生比較大的延遲。因此,本課程報告采用單片機為核心的控制電路,放大整形電路、和顯示電路的構成原理,判斷所測量頻率與中界頻率的大小關系,在高頻段測頻模式而低頻段采用測周期模式的測量方法,將使整個系統大大簡化,提高整體性能,并且進行了相應的硬軟件設計。其基本功能是測量正弦信號、三角波信號、方波信號及其他各種單位時間內變化的物理量,以十進制數字的方式顯示被測信號頻率。在進行模擬、數字電路的設計、安裝、調試過程中,由于其使用十進制數顯示,測量迅速,精確度高,顯示直觀,因此它在電子測量過程中必不可少。 第一章 硬件電路方案設計及設計要求1.1 設計內容及要求基本要求: 1頻率變換范圍1Hz-9999Hz 2 測量精度±1% 3 4位LED顯示 4 可測量方波、正弦波、三角波 5 高頻采用測頻法,低頻采用測周法測量 1.2 方案比較方案一:本方案主要以單片機為核心,利用單片機的計數定時功能來實現頻率的計數并且利用單片機的動態掃描把測出的數據送到數字顯示電路顯示。其實原理框圖如圖1所示 圖1.1 方案一原理圖
方案二:本方案主要以數字器件為核心,主要分為時基電路,邏輯控制電路,放大整形電路,閘門電路,計數電路,鎖存電路,譯碼顯示電路七大部分。其原理框圖如圖2.2所示
圖1.2方案二原理框圖 1.3 方案論證 方案一:本方案主要以單片機為核心,被測信號先進入信號放大電路進行放大,再被送到波形整形電路整形,把被測得正弦波或者三角波為方波。利用單片機的計數器和定時器的功能對被測信號進行計數。編寫相應的程序可以使單片機自動調節測量的量程,并把測出的頻率數據送到顯示電路顯示。 方案二:本方案使用大量的數字器件,被測量信號放大整形電路變成計數器所要求的脈沖信號,其頻率于被測信號的頻率相同。同時時基電路提供標準時間基準信號,其高電平持續時間1s,當1s信號來到時,閘門開通,被測脈沖信號通過閘門,計數器開始計數,直到1s信號結束閘門關閉,停止計數。若在閘門時間1s內計數器計得的脈沖個數為N,則被測信號頻率FX=NHZ。邏輯控制電路的作用有兩個:一是產生鎖存脈沖,是顯示器上的數字穩定;二是產生清零脈沖,使計數器每次測量從零開始計數。 1.4方案選擇比較以上兩種方案可以知道,方案一得核心是單片機,使用的元器件少,原理電路簡單,調試簡單只要改變程序的設定值則可以實現不同頻率范圍的測試能自動選擇測試的量程。與方案一相比較方案二則使用了大量的數字元器件,原理電路復雜,硬件調試麻煩。如要測量高頻的信號還需要加上分頻電路,成本相對高了點。基于上述,所以選擇了方案一。 第二章 系統組成和工作原理2.1系統組成本系統主要由放大模塊、施密特整形模塊、單片機模塊和HD7279驅動顯示模塊組成。通過軟件判斷高頻或低頻,單片機計數脈沖周期或個數來動態測量所求頻率,并通過7279數碼管顯示出來。得到系統的總體結構框圖如圖2.1所示
圖2.1 數字頻率計功能模塊 2.2 系統工作原理2.2.1頻率計測量方法簡介(1)測頻法,即在一定閘門時間內測量被測信號的脈沖個數。 用一標準閘門信號(閘門寬度為Tc)對被測信號的重復周期進行計數,計數結果為Nx時,其待測頻率為 時間Tc為標準閘門寬度(s),Nx為計數器計出的脈沖個數(重復周期數),測量的精度主要取決于計數Nx的誤差。其特點在于:測量方法簡單;待測信號頻率越高,精度越高;測量時間越長,誤差越小;但當待測信號頻率較低時,誤差較大。 (2)測周法 此法是在待測信號的一個周期Tx內,記錄標準頻率信號變化次數N0。這種方法測出的頻率是 此法的特點是低頻檢測時精度高,但高頻檢測時誤差很大。為了提高T法高頻測量時的精度可通過A分頻使待測信號的周期擴大A倍。 2.2.2工作原理本次設計的數字頻率計是以STC89C51 單片機為核心, 被測周期信號通過放大整形電路經過操作形成特定周期的窄脈沖,送到單片機的T0(P3.4)口外脈沖觸發計數。 以1KHz為中界頻率,1000Hz-9999Hz為高頻段采用測頻法,記下1s脈沖個數 c=256
TH0+TL0 (式2-3) 1Hz-999Hz為低頻段采用測周法,計算10個脈沖所用時間T T=溢出次數×溢出時間+計數值×1us f=
(式2-4) 最后,將被測信號頻率通過顯示電路讀取數值。
第三章 硬件電路設計本頻率計的數據測量系統主要元器件是單片機STC89C51,由外部晶振完成對待測信號頻率的定時和計數等功能,外部還要有放大電路、整形電路、顯示電路。 3.1單片機最小系統電路本次設計的數字頻率計是以宏晶公司STC89C51微處理器作為系統的控制核心,單片機控制電路主要由晶振電路、復位電路及串行通信電路構成。由其組成的單片機最小系統電路原理圖如圖3.1所示。
圖 3.1 單片機最小系統原理圖 3.1.1 STC89C51功能簡介(1)增強型1T 流水線/ 精簡指令集結構8051 CPU (2)工作電壓:3.4V-5.5V (5V 單片機)/ 2.0V-3.8V (3V 單片機 (3)工作頻率范圍:0 -35 MHz,相當于普通8051 的0~420MHz.實際工作頻率可達48MHz. (4)用戶應用程序空間12K / 10K / 8K / 6K / 4K / 2K 字節 (5)片上集成512 字節RAM (6)通用I/O 口(27/23個),復位后為:準雙向口/ 弱上拉(普通8051 傳統I/O 口) 可設置成四種模式:準雙向口/ 弱上拉,推挽/ 強上拉,僅為輸入/ 高阻,開漏 每個I/O 口驅動能力均可達到20mA,但整個芯片最大不得超過55mA (7)ISP(在系統可編程)/IAP(在應用可編程),無需專用編程器 可通過串口(P3.0/P3.1)直接下載用戶程序,數秒即可完成一片 (8)EEPROM 功能 (9)看門狗 (10)內部集成MAX810 專用復位電路(外部晶體20M 以下時,可省外部復位電路) (11)時鐘源:外部高精度晶體/ 時鐘,內部R/C 振蕩器。用戶在下載用戶程序時,可選擇是使用內部R/C 振蕩器還是外部晶體/ 時鐘。常溫下內部R/C 振蕩器頻率為:5.2MHz ~6.8MHz。精度要求不高時,可選擇使用內部時鐘,因為有溫漂,請選4MHz ~8MHz (12)有2個16 位定時器/ 計數器 (13)外部中斷2 路,下降沿中斷或低電平觸發中斷,Power Down 模式可由外部中斷低電平觸發中斷方式喚醒 (14)PWM( 4 路)/ P C A(可編程計數器陣列),也可用來再實現4個定時器或4個外部中斷(上升沿中斷/ 下降沿中斷均可支持) (15)STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路 (16)通用異步串行口(UART) (17)SPI 同步通信口,主模式/ 從模式 (18)工作溫度范圍:0 -75℃/ -40 -+85℃ 3.1.2單片機STC89C51引腳圖STC89C51有40個引腳,按引腳功能大致可分為4個種類:電源、時鐘、控制和I/O引腳。 ⒈ 電源: ⑴ VCC - 芯片電源,接+5V;
⑵ VSS - 接地端; ⒉ 時鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 ⒊ 控制線:控制線共有4根, ⑴ ALE/PROG:地址鎖存允許/片內EPROM編程脈沖
① ALE功能:用來鎖存P0口送出的低8位地址
② PROG功能:片內有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。 ⑵ PSEN:外ROM讀選通信號。 ⑶ RST/VPD:復位/備用電源。 ① RST(Reset)功能:復位信號輸入端。 ② VPD功能:在Vcc掉電情況下,接備用電源。 ⑷ EA/Vpp:內外ROM選擇/片內EPROM編程電源。 ① EA功能:內外ROM選擇端。 ② Vpp功能:片內有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。 ⒋ I/O線 80C51共有4個8位并行I/O端口:P0、P1、P2、P3口,共32個引腳。
P3口還具有第二功能,用于特殊信號輸入輸出和控制信號(屬控制總線)。 3.1.3復位電路1、手動按鈕復位 手動按鈕復位需要人為在復位輸入端RST上加入高電平(圖3.2)。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復位的電路如所示。由于人的動作再快也會使按鈕保持接通達數十毫秒,所以完全能夠滿足復位的時間要求。
圖3.2 手動復位電路 2、上電復位 上電復位電路如圖3.3所示,只要在RST復位輸入引腳上接一電容至Vcc端,下接一個電阻到地即可。對于CMOS型單片機,由于在RST端內部有一個下拉電阻,故可將外部電阻去掉,而將外接電容減至1µF。上電復位的工作過程是在加電時,復位電路通過電 容加給RST端一個短暫的高電平信號,此高電平信號隨著Vcc對電容的充電過程而逐漸回落,即RST端的高電平持續時間取決于電容的充電時間。為了保證系統能夠可靠地復位,RST端的高電平信號必須維持足夠長的時間。上電時,Vcc的上升時間約為10ms,而振蕩器的起振時間取決于振蕩頻率,如晶振頻率為10MHz,起振時間為1ms;晶振頻率為1MHz,起振時間則為10ms。在圖2的復位電路中,當Vcc掉電時,必然會使RST端電壓迅速下降到0V以下,但是,由于內部電路的限制作用,這個負電壓將不會對器件產生損害。另外,在復位期間,端口引腳處于隨機狀態,復位后,系統將端口置為全“l”態。如果系統在上電時得不到有效的復位,則程序計數器PC將得不到一個合適的初值,因此,CPU可能會從一個未被定義的位置開始執行程序
圖3.3 上電復位電路 3.2 放大整形模塊對于小電壓信號,數字頻率計需要把微弱信號放大,故本課設采用LM324放大器,優點是使用廣泛,價格便宜。 參數計算:放大器輸出電壓為
(式3-1) 放大倍數n=
=11 (式3-2) 圖3.4 放大整形模塊電路圖 3.3 施密特整形施密特整形器可以把邊沿變化緩慢的周期性信號變換為邊沿很陡的矩形脈沖信號。輸入的信號只要幅度大于vt+,即可在施密特觸發器的輸出端得到同等頻率的矩形脈沖信號。整形波形如圖3.5所示,放大整形仿真圖如圖3.6所示 圖3.5 施密特整形
圖3.6 放大整形電路仿真圖 3.4 HD 7279A顯示模塊
HD7279A(見圖3.7)是一片具有串行接口的,同時驅動8位共陰式數碼管的智能顯示驅動芯片,其中P1.0接單片機的
,P1.1接單片機的CLK,P1.2接單片機的DATA,P1.0接單片機的
. 圖3.8 HD7279A
HD7279A的控制指令分為二大類——純指令和帶有數據的指令。由于本次設計只利用了HD7279A構成鍵盤和數碼管顯示,用段數碼管顯示,在設計中用到的HD7279A 的控制指令有復位(A4H)和讀鍵盤(15H)指令和送數據指令。 1、復位指令(A4H):當HD7279A收到該指令后,將所有的顯示清除,所有設置的字符消隱、閃爍等屬性也被一起消除。執行該指令后,芯片所處的狀態與系統上電后所處的狀態一樣。 2、帶有數據的指令:本次設計采用了兩種譯碼方式,一種是下載數據且按方式0譯碼,即命令由二個字節組成,前半部分為指令,格式為(8XH),X為位地址,后一字節低四位為數據。另一種是下載數據但不譯碼方式,即命令由二個字節組成,前半部分為指令,格式為(9XH),X為位地址,后一字節顯示數據從高至低位分別為DP和A-G。分別對應7段LED數碼管的各段。 3、讀鍵盤指令(15H):該指令從HD7279A讀出當前的按鍵代碼。與復位指令不同,此命令的前一個字節15H為微控制器傳送到HD7279A的指令,而后一個字節d0—d7則為HD7279A返回的按鍵代碼,本次采用4X4鍵盤,則各鍵鍵盤代碼分別定義為04H—07H。此指令的前半段,HD7279A的DATA引腳處于高阻輸入狀態,以接受來自微處理器的指令;在指令的后半段,DATA引腳從輸入狀態轉為輸出狀態,輸出鍵盤代碼的值。其時序圖如圖3.7所示
讀鍵盤指令(8位,高位在前) HD7279輸出的鍵盤代碼(8位,高位在前) 圖3.7讀鍵盤指令時序圖 其中:T5=50us,T6=8us,T7=8us。
第四章 軟件設計及程序流程圖4.1 編程語言的選擇及程序的編譯調試1)編程語言的選擇 MCS-51編程語言常用的有兩種,一種是匯編語言,另一種是C語言。匯編語言的機器代碼生成效率很高,但是可讀性并不強,復雜一點的程序就更是難讀懂,而C 語言在大多數情況下其機器代碼生成效率和匯編語言相當,但可讀性和可移植性卻遠遠超過了匯編語言,而且C語言還可以嵌入匯編來解決高實效性的代碼編寫問題。 對于開發周期來說,C語言的開發周期通常小于匯編語言很多。C 語言是一種結構化語言[1]。它層次清晰,便于按模塊化方式組織程序,易于調試和維護,這種語言的表現能力和處理能力極強,它不僅具有豐富的運算符和數據類型,便于實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。C語言的模塊化開發方式使開發出來的程序模塊可不經修改,直接被其他項目所用,這樣可以最大程度的實現資源共享。由于C語言實現了對硬件的編程操作,因此C語言集高級語言和低級語言的功能為一體,具有高效性,可移植性強等特點。 綜合以上C 語言的優點,本次設計選擇由美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統Keil uVision2對單片機進行軟件編程。 2)源程序的編譯 由于單片機只能執行機器語言的程序(目標程序),因此將C51 源程序編輯好以擴展名.C 保存后,應將源程序編譯成目標程序。編譯過程中,能夠檢查程序的正確性,并能發現源程序中的語法錯誤和一般性的邏輯錯誤,但不能檢查結構上的錯誤。如果有錯誤,信息窗口會報告顯示,并指出錯誤位置及錯誤類型。程序錯誤被糾正后,要重新進行編譯調試,直到程序編譯無誤為止。只有當被編譯的程序沒有錯誤時,才能執行程序及對程序進行仿真調試。 3)程序的仿真調試 對源程序編譯形成目標程序,只是排除了語法錯誤和一般性的邏輯錯誤,只有將目標程序應用到硬件中,經過開發系統Keil uVision2的仿真調試后且滿足功能要求才能寫到程序存儲器中。仿真調試是對程序功能是否能實現所做的最后檢查。 4.2 單片機計數原理計算計數初值:設計數初值為X,本設計采用12 MHz的晶振。機器周期=12×(1/晶振頻率) 當計數器T0設定為計數方式1時,其計數脈沖是來源T0端口的外部事件。當T0端口上出現由“1”(高電平)到“0”(低電平)的負跳變脈沖時,計數器則加1計數。計算機是在每個機器周期的S5P2狀態時采樣T1端口,當前一個機器周期采樣為1且后一個機器周期采樣為0時,計數器加1計數。計算機需用兩個機器周期來識別1次計數,因而最大計數速率為振蕩頻率的1/24。在采用12 MHz晶振的情況下,單片機最大計數速度為0.5 MHz即500 kHz。 另外,此處對外部事件計數脈沖的占空比(即脈沖的持續寬度)無特殊要求,從T0口輸入脈沖信號,T0可實現對脈沖個數的計數 4.3主程序設計4.3.1 設計思路主程序是整個系統軟件的運行主體,各個子系統的軟件程序都必須經過它的調度,才能運行得當。根據設計的功能要求,主程序主要完成了對系統的初始化,初始化具體參數如下: 1、內存工作單元初始化: 標志位初始化:設置中界頻率為1000HZ,測頻法、測周法標志位均清零。讀數標志初始化測頻法中斷次數、測周法溢出次數清零,個、十、百、千位清零 2、顯示模塊初始化:7279復位 3、定時中斷0和定時中斷1初始化: EA=1;中斷使能,ET0=1;定時中斷0溢出中斷,ET1=1;定時中斷1溢出中斷 4、顯示初始化,系統啟動時顯示初始化為所有數碼管都顯示0000。 4.3.2程序流程圖1主程序流程圖 圖4.1 T0時鐘中斷流程圖
圖4.2 T1時鐘中斷流程圖
第五章 實驗調試、測量結果記錄和誤差分析5.1實驗調試在調試過程中所使用的測試儀器儀表和工具包括: 函數信號發生器一個;萬用表一個;穩壓電源一個;最小系統板一塊; Keil C51 單片機編譯軟件;示波器一臺。 在確定好電路、領好元器件后即開始對布局。分別按放大電路和整形電路進行焊接。函數發生器產生的三角波、正弦波通過放大整形電路后輸出到示波器,在示波器中可以看到頻率幾乎不變的完美的方波。后拔出示波器探頭,接上單片機頻率計及顯示。 第一次調試中,7279數碼管一直顯示71Hz不變化,無論如何改變頻率,其顯示值保持不變,懷疑是程序某處錯誤,陷入了死循環中。后來檢查程序發現調用測頻法和測周法的子程序中標志位最開始沒有清零,導致第一次讀值后頻率標志未清零,單片機判斷計數結束,使第二次讀值的子程序無法進行,也就無法顯示改變的頻率值。后來修改語句,頻率計能正常動態計數。 本次實驗在穩壓電源的正負極增加1uf電容到地濾除電源中高頻成分分量,起了穩定電路系統的作用。 5.2 測量結果記錄實驗測量結果如表1所示 表1 實驗測量結果
精度的計算 (式5-1) A ——檢測系統的精度
—測量范圍內允許的最大絕對誤差
—滿量程輸出 所以,經計算得出,A=4
9999=±0.04% 5.3誤差分析5.3.1產生誤差的原因產生的誤差主要包括量化誤差、觸發誤差、標準頻率誤差。 1.量化誤差:是在將模擬量變換為數字量的量化過程中產生的誤差,是數字化儀器所特有的誤差,是不可消除的誤差。它是由于頻率計閘門的開啟與計數脈沖的輸入在時間上的不確定性,即相位隨機性而產生的誤差。要減小量化誤差對測頻的影響,應設法增大計數值N,選擇較大倍數的倍頻器和分頻器。 2.觸發誤差:又稱為變換誤差,被測信號在整形過程中,由于整形電路本身觸發電平的抖動或者被測信號疊加有噪聲和各種干擾信號等原因,使得整形后的脈沖周期不等于被測信號的周期,由此而產生的誤差。 觸發誤差對測量周期的影響較大,對測量頻率的影響較小,所以測頻時一般不考慮觸發誤差的影響。減小誤差的方法,盡量提高被測信號的信噪比,采用多周期測量法。 3.標準頻率誤差:是指由于晶振信號不穩定等原因而產生的誤差。測頻時,晶振信號用來產生門控信號(即時基信號),標準頻率誤差稱為時基誤差。一般情況下,標準頻率誤差較小,不予考慮。 4.函數信號發生器產生的信號波頻率不穩定 5.由于實驗室單片機使用的時間比較長,受制造、測量、條件變化的影響,實際晶振頻率與標稱值的不符 6.外界噪聲等的干擾 5.3.2減小誤差的方法1、改進實驗方案,使用等精度測量可能更較精確測量結果 2、在相同條件下和短時期內,對同一被測量進行多次重復測量 3、換用較高精度的晶振,選用穩定性良好的函數信號發生器
第六章 小結和體會在設計過程中,得到了我的指導老師的悉心指導與幫助,首先在此表示衷心的感謝。 本應用系統設計的目的是通過在“單片機原理及應用”課堂上學習的知識,以及查閱資料,培養一種自學的能力。并且引導一種創新的思維,把學到的知識應用到日常生活當中。經過這次一個較完整的課程設計和制作過程,對于認識到自己在知識方面存在的不足,明確今后的學習方向是非常有益的,為將來的的就業提前打了下堅實的基礎。 在設計的過程中,我不斷的學習,思考和同學間相互討論,運用科學的分析問題的方法解決遇到的困難,掌握單片機系統一般的開發流程,學會對常見問題的處理方法,積累設計系統的經驗,充分發揮教學與實踐的結合。全能提高個人系統開發的綜合能力,開拓了思維,為今后能在相應工作崗位上的工作打下了堅實的基礎。 調試階段可以說是這次設計中最重要的部分,因為以前的只是理論而不是真正的實體。所以說它是最重要的。調試階段我們遇到的問題有:對編寫代碼不熟悉;因為硬件和軟件模塊是分開做而后又組裝到一起的,所以兼容性不是很好(也就是不能融合為一個整體,直接接在函數信號發生器上能行但是接硬件部分就會出現問題,沒有預期現象出現);針對以上幾個問題我們作出了以下的“對策”:軟件不熟悉,就借來參考書,一步一步的對著學,而且上網查資料和芯片使用說明,所以隨著接觸的增加軟件也就越來越熟悉。另外在電路方面需要進一步的設計和修改。 通過這次課設報告也發現了自己很多的不足之處,首先體現在動手能力不強,今后必須加強對這方面能力的培養,必須培養和鍛煉自己獨立思考的能力,將學過的理論應用到實踐中去,再好的理論不去用它我們就看不到現在科技的進步,科技推動人類社會的不斷向前發展。 參考文獻[1]張先庭主編.單片機原理、接口與C51應用程序設計.北京:國防工業出版社.2011 [2]李光飛,樓苗然主編.51系列單片機.北京:北京航空航天大學出版社,2003 [3]黃正瑾編著.CPLD系統設計技術入門與應用. 北京: 電子工業出版社, 2002 [4]謝自美編著.電子線路設計·實驗·測試.華中理工大學出版社,2002 [5]陳永甫編著.電子電路智能化設計.實例與應用.北京:電子工業出版,2002.8 [6]康華光主編.電子技術 基礎(第四版).北京:高等教育出版社,1999 附錄一 元器件清單 序號 | 數量 | 符號及參數 | 1 | 2 | 電容 | 1uF | RB.1/.2 | 2 | 1 | 單片機最小系統板 |
| STC89c51 | 3 | 1 | 運算放大器 |
| LM324 | 4 | 1 | 施密特整形器 |
| 74LS14N | 5 | 3 | 電阻R1 | 1KΩ | AXIAL-0.4 | 6 | 1 | 電阻R2 | 10KΩ | AXIAL-0.4 | 附錄二 實驗電路圖 附錄三 實驗代碼#include #include #define uchar unsigned char #define uint unsigned int #define jiezhi 1000//定義中界頻率為1000HZ uchar flag_0=0,flag_1=0,flag=0;//定義測頻法、測周法標志位并清零 uchar count_0=0,count_1=0,count=0;//定義測頻法中斷次數、測周法溢出次數并清零 uchar qian=0,bai=0,shi=0,ge=0;//個、十、百位定義并清零 #define HD7279_RESET 0xa4 //復位 sbit HD7279_CS=P1^0; // HD7279_CS--P1.0 sbit HD7279_CLK=P1^1; // HD7279_CLK-- P1.1 sbit HD7279_DATA=P1^2; // HD7279_DATA-- P1.2 sbit HD7279_KEY =P1^3; // HD7279_KEY-- P1.3 void initf() { TMOD=0x15;//定時器1方式1定時,定時器0方式1計數 TH1=(65536-50000)/256; TL1=(65536-50000)%256;//定義50ms中斷 TH0=0; TL0=0;//定時器高8位、低8位清零 EA=1; ET1=1; TR0=1;//打開定時 TR1=1;//開始計數 flag=1;//測頻法標志位為1 } void initt() { TR0=0; TR1=0; TMOD=0x15; //定時器1方式1定時,定時器0方式1計數 TH1=0; TL1=0; TH0=255; TL0=255; EA=1; ET1=1; ET0=1; TR0=1; flag=0;//測周法標志位為0 count_1=0; //溢出位清零 } void fenli(long int m) { uint temp; temp=m; qian=temp/1000;//頻率值除以1000取整作千位 temp=temp%1000; bai=temp/100;//第一次余數除以100取整 temp=temp%100; shi=temp/10;//第二次余數除以10取整 ge=temp%10;//第二次余數直接作個位 } /***************HD7279模塊程序************************************/ void HD7279_LongDelay(void) { unsigned char i; for (i=0;i<6;i++); } void HD7279_ShortDelay(void) {;} void HD7279_SendByte( unsigned char out_byte) { unsigned char i; HD7279_CS=0; HD7279_LongDelay(); for(i=0;i<8;i++) { if(out_byte&0x80) { HD7279_DATA=1; } else { HD7279_DATA=0; } HD7279_CLK=1; HD7279_ShortDelay(); HD7279_CLK=0; HD7279_ShortDelay(); out_byte=out_byte<<1; } HD7279_DATA=0; } void Write7279(unsigned char command, unsigned char dta) { HD7279_SendByte( command ); HD7279_SendByte( dta ); HD7279_ShortDelay(); HD7279_CS=1; } void display() { HD7279_SendByte(0xa4);//復位 Write7279(0x83,qian); Write7279(0x82,bai); Write7279(0x81,shi); Write7279(0x80,ge); } void main() { uchar a,b; long int c; while(1) { initf(); while(!flag_0); flag_0=0;//測頻法標志位清零 a=TH0; b=TL0; c=256*a+b;//先用測頻法測頻率 if(c>=jiezhi)//判斷是否大于中界頻率 { fenli(c);//大于中界頻率調用千、百、十位分離程序 display();//顯示 } else { initt(); while(!flag_1); flag_1=0; //測周法標志位清零 a=TH1; b=TL1; c=(65536*count_1+a*256+b)/100;//時間=溢出數*溢出時間+計數值 c=50000/c; fenli(c);//調用千、百、十位分離程序 display();//顯示 } } } void time0() interrupt 1//定時器中斷0 { TH0=255; TL0=251;//計5次 TR1=1; count++; if(count==2) //循環2次 { count=0; flag_1=1;//測頻法標志位置1 } } void time1() interrupt 3//定時器中斷1 { if(flag) { TH1=(65536-50000)/256; TL1=(65536-50000)%256;//50ms count_0++; if(count_0==20&&flag_0==0)//判斷中斷次數是否執行20次 { count_0=0; flag_0=1;//測周法標志位置1 } } else { TH1=0; TL1=0;//溢出后定時器清零 count_1++;//溢出次數加1 } } |