單片機應用技術(C語言 第二版)課件:簡易頻率計_第1頁
單片機應用技術(C語言 第二版)課件:簡易頻率計_第2頁
單片機應用技術(C語言 第二版)課件:簡易頻率計_第3頁
單片機應用技術(C語言 第二版)課件:簡易頻率計_第4頁
單片機應用技術(C語言 第二版)課件:簡易頻率計_第5頁
已閱讀5頁,還剩51頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

任務一

輸出1000Hz的方波任務二

每秒閃爍一次的LED任務三

簡易頻率計在實踐中,往往需要利用單片機實現間隔一較短時間重復執行某一事件的功能。使用單片機可輸出不同頻率的方波,既可以作為其他電路的信號源,也可作為報警器、簡易音樂等的信號提供電路,直接驅動發聲器件發出對應的聲音。本任務的內容是使用AT89S51單片機的定時/計數器模塊,利用定時中斷實現從P1.0輸出1000Hz方波的功能。任務提出任務一

輸出1000Hz的方波根據任務目標,要實現從P1.0輸出1000Hz的方波,實際上就是要求從P1.0連續輸出周期為1ms的方波,或者說按標準時間間隔改變P1.0引腳的高低電平。由于單片機的定時/計數器屬于單片機內部功能模塊,所以整個系統的硬件僅需要單片機的最小系統即可。任務分析要完成標準時間間隔,可以采用空循環指令的方式實現延時,其缺點是單片機在定時期間內不能進行其他操作,使單片機的工作效率極低;也可以采用執行其他任務來兼顧延時,但執行其他任務的耗時與期望定時的時間不盡相同,因此不能實現精確定時。為了解決精確定時與執行其他任務之間的矛盾,常采用單片機定時/計數器定時中斷的方式來實現精確定時。采用定時中斷時,定時的任務是由單片機的定時/計數器硬件單獨完成的,而單片機就可以正常地執行其他程序任務,只有當定時時間到了,才中斷正在執行的程序,轉去執行中斷服務程序,中斷服務程序執行完成后,自動回到斷點,繼續執行被中斷的程序。一、定時/計數器簡介在8051系列單片機中有兩個可編程的定時/計數器,分別叫做T0和T1。在8052系列單片機除了上述兩個定時/計數器外,還有一個定時/計數器2(T2),它的功能更強一些。它們既可以編程作為定時器使用,也可以編程作為計數器使用。T1和T2還可以作為串行接口的波特率發生器。相關知識定時/計數器實質上就是一個加1計數器,定時器實際上也是以計數方式工作的,只是它對固定頻率的脈沖進行計數,由于脈沖周期固定,由計數值可以計算出定時時間,由此實現定時功能。當定時/計數器工作于定時器方式時,它對具有固定時間間隔的內部機器周期進行計數,每個機器周期使定時器的值增加1。而每個機器周期等于系統石英晶體振蕩器的12個振蕩周期,故計數頻率為系統振蕩器工作頻率的1/12,當采用12MHz的晶振時,計數頻率為1MHz,計數周期為1μs。定時/計數器的寄存器是一個16位的寄存器,由兩個8位寄存器組成。對應定時器T0的寄存器是由TL0和TH0組成的,對應定時器T1的寄存器是由TL1和TH1組成的。定時/計數器的初始值通過計數寄存器進行設置,定時或計數的脈沖個數也可以從計數寄存器讀出。T0和T1由模式控制寄存器TMOD來設置工作方式,由控制寄存器TCON來控制T0、T1的啟動、停止和設置溢出標志。當計數溢出(計數器計數到所有位全為“1”時,下一個計數脈沖到達時,使計數各位全部回到零)時,使定時器控制寄存器TCON的TF0或TF1位置1,向CPU發出中斷請求,在定時/計數器中斷允許的情況下,將引起定時中斷。當發生溢出時,如果定時/計數器工作于定時模式,則表示定時時間已到,如果工作于計數模式,則表示外部脈沖個數已超過定時/計數器設置的工作方式允許的最大計數值。二、定時/計數器的模式控制寄存器TMOD模式控制寄存器TMOD是對定時器0和定時器1的計數方式和計數器控制方式進行設置的寄存器,低4位用于T0,高4位用于T1。TMOD位于內部特殊寄存器區的89H單元,TMOD不能位尋址,即只能對其整體賦值或讀取。CPU復位時TMOD所有位清0。TMOD寄存器的八位控制功能如下所示:定時/計數器有4種工作方式,由M1、M0位進行設置。工作方式的設置見表。定時/計數器工作方式1.方式0定時/計數器工作方式0的結構圖2.方式1定時/計數器工作方式1的結構圖3.方式2定時/計數器工作方式2的結構圖4.方式3定時/計數器工作方式3的結構圖四、定時/計數器中斷的實現過程在外部中斷模塊中已介紹過中斷控制寄存器TCON,TCON的低4位用于外部中斷控制,而TCON的高4位則用于定時/計數器的啟動和中斷申請,TCON位于內部特殊寄存器區的88H單元,高4位功能如下所示:為了說明定時/計數器中斷時各寄存器的設置和工作過程,圖給出了定時/計數器T0中斷設置和工作示意圖。定時/計數器中斷設置和工作示意圖五、定時/計數器的初始化設置定時/計數器的初始化是非常重要的,以定時器0為例,初始化編程格式如下所示:TMOD=方式字;

//選擇定時器的工作方式,高4位為T1的設置TH0=高8位初始值;//裝入T0時間常數TL0=低8位初始值;//對于T1則為TH1和TL1ET0=1;

//開T0中斷,對于T1則為ET1=1EA=1;

//全局中斷允許,如果有其他中斷,可共用本條指令TR0=1;

//啟動T0定時器,對于T1則時TR0=1六、定時/計數器的中斷服務程序編寫在定時/計數器的初始化操作設置好后,程序運行過程中當定時/計數器達到定時時間或計數次數時,CPU會執行定時/計數器的中斷服務程序。因此在編寫中斷服務程序時,應該完成此時相應的操作處理,根據不同的任務,具體的操作處理也不相同,但通常情況下需要重設定時/計數器的初值(工作方式2除外),以完成下一輪定時或計數的任務。一、硬件設計根據任務分析,實現任務的硬件電路僅需要單片機最小系統。在本任務中選擇AT89S51單片機芯片為系統控制芯片,其最小系統較為簡單,包括復位電路和時鐘電路,其參數選擇原則見相關說明,這里選擇系統晶振頻率為11.0592MHz。具體的硬件電路略。任務實施在實踐中,可以通過示波器、頻率計等儀器儀表測量單片機從P1.0引腳輸出的脈沖。也可以將這個脈沖送到揚聲器上,通過聲音感受單片機的輸出頻率。當然,因為單片機輸出口的驅動能力有限,無法直接驅動揚聲器,所以需要將單片機引腳輸出的脈沖信號通過功率放大電路放大后再送給揚聲器。具體的功率放大電路有多種選擇,這里不作介紹。二、軟件設計從P1.0輸出1000Hz的方波,實際上就是要求從P1.0輸出周期為1ms的方波。為了簡化程序,將輸出方波的占空比設定為50%,則高電平和低電平的時間各為1ms的一半,即各為500μs。即在單片機中實現500μs的定時,每次定時時間到了的時候,將P1.0的電平改變就可以了。一個引腳電平的改變,使用取反指令就可以完成,具體的指令如“P10=~P10;”。完成500μs的定時,可以采用指令延時的方式,用循環指令很容易實現,具體實現方式如圖示的程序流程圖所示。但這種方案中,單片機在定時期間不能做其他操作,利用率極低,為了解決這個矛盾,可以采用定時中斷的方式來實現。使用單片機內部的定時/計數器定時500μs,需要對定時/計數器進行初始化。啟動定時器之后,由硬件對固定頻率的脈沖進行計數,達到500μs后,出現計數溢出,產生中斷,進行中斷服務程序。具體的中斷服務程序流程圖如圖所示。采用指令延遲的程序流程圖中斷服務程序的流程圖三、Proteus仿真1.因本任務中的電路僅有單片機最小系統,故在ProteusISIS軟件中放置一片AT89C51即完成了電路的繪制。2.在Keil軟件開發環境下,創建項目,編輯源程序,將編譯生成的HEX文件裝載到Proteus虛擬仿真硬件電路的AT89C51芯片中。3.運行仿真,仔細觀察運行結果。輸出1000Hz方波的仿真效果圖MCS-51單片機的定時器最長能夠計數65536個脈沖,在12MHz的工作頻率下,定時方式最長的定時時間約為65ms。在實際應用中,常需要長時間較精確的定時,可以利用定時中斷實現。本任務的內容是用定時方式使LED每秒閃爍一次。任務提出任務二

每秒閃爍一次的LED與相似,要使LED每秒閃爍一次,按LED的點亮時間和熄滅時間相同進行處理,則只需要進行0.5s的定時,即每過0.5s,將LED的狀態取反就可以實現目標了。與本課題中的任務一相比較,本任務只不過是頻率變得更低了,需要實現定時的周期更長了。任務分析在單片機中,由于定時/計數器最多只能計數65536次,所以在晶振頻率較高時,不能夠一次產生較長的定時時間。如晶振為12MHz時,機器周期為1μs,最大定時時間為65536μs。本例中所采用的晶振為11.0592MHz,當然也不夠定時0.5s。為了完成0.5s的定時,一般來說,有兩種方案可以實現。第一種方案是在硬件定時的基礎上,增加一個存儲單元,每次中斷時使用該存儲單元進行計數,當達到某個計數值時再執行對應的程序,這樣就延長了定時的時間長度。第二種方案也是采用一個定時器進行硬件定時,在每次中斷時輸出一個脈沖,然后采用硬件計數的方式延長定時時間。在本任務中,僅僅實現了0.5s的定時,如果要改為其他時間的定時,則需要修改其中的定時器初始值和軟件計數單元的計數值。這里介紹的定時和計數方法,也完全可以應用到前面的幾個課題中,實現對應的課題任務。在C51中,變量在定義之后,其存在時間及其作用范圍與該變量的定義語句所在的位置和定義變量語句中的存儲種類有關。相關知識一、變量的作用范圍從作用范圍來看,變量有全局變量和局部變量之分。全局變量是指在程序開始處或各個功能函數的外面定義的變量,在程序開始處定義的全局變量對于整個程序都有效,可供程序中所有函數共同使用;而在各功能函數外面定義的全局變量只對從定義處開始往后的各個函數有效,只有從定義處往后的那些功能函數才可以使用該變量,定義處之前的函數則不能使用它。局部變量是指在函數內部或以花括號{}圍起來的功能塊內部所定義的變量,局部變量只在定義它的函數或功能塊以內有效,在該函數或功能塊以外則不能使用它。局部變量可以與全局變量同名,但在這種情況下局部變量的優先級較高,而同名的全局變量在該功能塊內被暫時屏蔽。二、變量的生存期變量的生存期即該變量存在的時間。從變量的存在時間來看又可分為靜態存儲變量和動態存儲變量。靜態存儲變量是指該變量在程序運行期間其存儲空間固定不變;動態存儲變量是指該變量的存儲空間不確定,在程序運行期間根據需要動態地為該變量分配存儲空間。在定義變量時,可以指定變量的存儲種類。在C51中,變量的存儲種類有4種:自動(auto)、外部(extern)、靜態(static)和寄存器(register)。1.自動變量用關鍵字auto作存儲類型說明的局部變量(包括形參)稱為自動變量。自動變量的默認范圍在定義它的函數體或復合語句內部,只有在定義它的函數被調用,或是定義它的復合語句被執行時,編譯器才為其分配內存空間,開始其生存期。當函數被再次調用或符合語句被再次執行時,自動變量所對應的內存空間的值將不確定,有可能不是上次運行時的值,因而必須被重新賦值。2.外部變量按照默認規則,凡是在所有函數之前,在函數外部定義的變量都是外部變量,定義時可以不寫extern說明符。但是,在一個函數體內說明一個已在該函數體外或其他程序模塊文件中定義過的外部變量時,則必須使用extern說明符。一個外部變量被定義后,它就被分配了固定的內存空間。外部變量的生存期為程序的整個執行時間,即在程序執行期間外部變量可以被隨意使用,當一條復合語句執行完畢或是某一函數返回時,外部變量的存儲空間并不被釋放,其值也仍然保留。外部變量屬于全局變量。C51允許將大型程序分解為若干個獨立的程序模塊文件,各個模塊可分別進行編譯,然后再將它們鏈接在一起。在這種情況下,如果某個變量需要在所有程序模塊文件中使用,只要在一個程序模塊文件中將該變量定義成全局變量,而在其他程序模塊文件中用extern說明該變量是已經被定義過的外部變量就可以了。3.靜態變量靜態變量不像自動變量那樣只有當函數調用它時才存在,退出函數時它就消失。靜態變量所分配的內存空間是獨占的,始終都是存在的。靜態變量只能在定義它的函數內部進行訪問,退出函數時,變量的值仍然保持但是不能進行訪問。使用靜態變量需要占用較多的內存空間,而且降低了程序的可讀性。4.寄存器變量編譯器給使用register定義的變量分配單片機的通用寄存器空間,有較快的運行速度。寄存器變量可以被認為是自動變量的一種,它的有效作用范圍也與自動變量相同。由于單片機中的寄存器是有限的,不能所有變量都定義成寄存器變量。CX51編譯器能夠識別程序中使用頻率最高的變量,在可能的情況下,即使程序中并未將該變量定義為寄存器變量,編譯器也會自動將其作為寄存器變量處理。一般來說,全局變量為靜態存儲變量,局部變量為動態存儲變量。一、硬件設計實現控制LED每秒閃爍一次的功能時,由于定時器在單片機內部,因此不需要外部的具體硬件電路,有驅動LED的電路即可,本任務選擇的硬件與的任務一一致,即本任務采用的硬件電路如圖所示。任務實施單一指示燈(發光二極管)控制電路圖二、軟件設計1.采用硬件定時+軟件計數的示例程序在本示例程序中,采用硬件定時+軟件計數的方式完成定時0.5s。2.采用硬件定時+硬件計數的示例程序本示例程序中,采用硬件定時+硬件計數的方式完成定時0.5s。三、Proteus仿真1.打開ProteusISIS軟件,繪制Proteus仿真電路。仔細檢查,保證電路連接無誤。2.在Keil軟件開發環境下,創建項目,編輯源程序,將編譯生成的HEX文件裝載到Proteus虛擬仿真硬件電路中的AT89C51芯片中。3.運行ProteusISIS軟件,仔細觀察運行結果,如果有不完全符合設計要求的情況,調整源程序并重復步驟1、2,直至完全符合本項目提出的各項設計要求。在對各種非電學物理量進行測量時,常通過傳感器將其轉換為電學量,為了便于信號的傳輸,往往將這些電學量調制為頻率信號,通過測量這些頻率可以間接測量相關的非電學物理量。本任務是利用MCS-51單片機的T0、T1定時/計數功能,完成對低于200kHz的脈沖信號的頻率測量,測量的結果通過數碼管顯示出來。任務提出任務三

簡易頻率計頻率計的功能,是測出1s內的輸入信號的周期個數,再用數字的方式顯示出來,也就是需要完成定時1s、對輸入的脈沖計數和數字顯示的硬件電路和相應程序的設計。任務分析MCS-51單片機有兩個定時器,可分別用做定時和對單片機外部的脈沖計數,這兩個定時器是單片機內部功能電路,不需要外部的硬件電路。需要說明的是,在實用的頻率測量電路中,往往需要對輸入的被測量信號進行放大、整形等各種處理,同時還有高阻輸入等要求。本任務作為單片機功能演示,直接向單片機引腳輸入被測量的信號。要顯示高達200kHz的頻率,即顯示的數據達到6位數,選擇數碼管動態顯示電路具有較好的性價比。一、定時器的計數方式當定時/計數器工作在計數狀態下,是對來自P3.4或P3.5引腳的輸入脈沖信號進行計數。單片機內工作在計數狀態下的定時器,最大計數的頻率值為fosc/24。例如,單片機的工作頻率fosc=12MHz,則定時器對外部脈沖的最大計數頻率為12MHz/24=500kHz。對于頻率大于此值的脈沖,需要在計數前面加上分頻器,分頻后再進行計數。相關知識二、定時器T2簡介8052是8051單片機的增強版本。在8052中,除了RAM擴展到256B、ROM擴展到8KB外,還增加了定時器T2。定時器T2由特殊功能寄存器T2CON設置其工作于定時、計數、波特率發生及可編程時鐘等不同方式,由T2MOD設置其啟動(停止)和向上/向下計數的工作模式。定時器T2工作于可編程時鐘方式時,將從P1.0引腳輸出占空比為50%方波,其工作框圖如圖所示。定時器T2設置為可編程時鐘輸出方式的電路框圖一、硬件設計根據任務分析,頻率計由單片機內部的兩個定時器分別完成定時和對外部脈沖計數的工作,以及控制6位數碼的顯示電路。任務實施為了系統的功能測試,選擇AT89S52單片機為系統控制芯片,使用其中的定時器T2(標準51芯片沒有T2)輸出脈沖作為系統的測試信號,由于T2可工作在硬件自動重裝的可編程時鐘輸出方式,即設置好其工作方式后,只需要將重裝的初始值加在RCAP2H和RCAP2L中并啟動其工作就可完成脈沖輸出的全部設置。T2工作所涉及的所有電路都在單片機AT89S52內部,不需要增加額外的硬件電路。因定時和計數都不需要外部的硬件電路,即整個頻率計的硬件電路由單片機最小系統和6位數碼的動態顯示電路構成。其最

溫馨提示

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

評論

0/150

提交評論