自學單片機第五十五篇:定時器定時1秒程序

2020-12-26 小亮談電氣

先看下上一篇的步驟,按照步驟寫出代碼。

1,晶振是12M。

2,一個機器周期時間是1微秒。

3,定時最小分度為50毫秒。

4,所需的初始值是15536.

5,計算出對應初始值的十六位十六進位數是:0x3C B0

6,得出TH0=0x3C,TL0=0xB0。

7,工作模式是定時器,工作方式是16位定時。TMOD=0x01。

8,打開T0定時器開關,ET0=1;TR0=1;

9,打開中斷總開關,EA=1;

10,設置中斷響應函數。void T0_Routine() interrupt 1{}

打開軟體,開始寫程序。

(經過一段時間,程序寫完了)

首先是定義一個用於顯示中斷的LED燈,通過控制閃爍來讓我們看到定時器的工作。

然後是一個用來計算進入定時器多少次的變量,因為我們定時一次是50毫秒,而需要定時一秒的時間,就要定時20次才行,所以需要一個變量,來累積,查著是否到了20次,也就是1秒。

主函數就是設置中斷的參數。

然後是中斷函數,需要注意,每次進入中斷都需要對初始值進行重新賦值,不然進入中斷後的TH0和TL0是空的,都是0x00,會導致計數出現錯誤,進而定時不正確。

定時函數中需要寫入中斷完成需要響應的函數,不然就無法動作。

當然也可以進行其他設置。

寫完後通過仿真看下效果。

示波器中的波形就是小燈的輸出波形,一個是0.25秒,可以看出一個高電位佔了四格,也就是1秒,小燈是亮1秒滅1秒。很精確的。

看完這個案例,有沒有什麼想法呢?

第一個就是為什麼定義變量要定義到最開始,而不是定義到中斷中呢?

第二個是定時器的函數只能在定時器中書寫嗎?

第三個是定時器還有其他用途嗎?

首先看第一個問題,為什麼定義變量要定義到最開始,而不是定義到中斷中呢?

在主程序中,一般都是把用到的變量定義到主程序的內部,為什麼這回吧變量定義到了最開始呢?主程序也沒有用,只有中斷程序用到了,不用定義全局變量的。當我們把這個變量定義到中斷中,會發生什麼呢?

有興趣可以測試下,會發現,中斷沒有輸出,為什麼會發生這種情況?

可以這麼理解一下,當程序進入中斷後,會逐句運行,首先是運行變量的賦值i=0;然後是高低八位數據的重置,接著是i++,累積次數,然後是判斷i是否達到要求,因為此時等於1,所以沒有達到要求,就退出中斷了,主程序繼續運行。然後時間到,進入中斷,進入中斷後,就又是對變量i賦值i=0,這時問題就來了,我們如果每進入一次中斷,就賦值一次,那麼到什麼時候,也無法加到20,也就無法完成led=~led這句指令,對外就無法輸出。

那就沒有辦法了嗎?一個內部變量,定義到全局,會佔用系統資源,明顯的其他程序用不到,只有中斷才能用到。

是有辦法可以解決的,在編程中,有這樣一個方法,當我們定義完變量後,不希望再次讀取該變量時,變量被重複賦值的話,可以使用一個關鍵字,用來說明這個變量是靜態變量,僅定義一次,無需再次賦值,就是說,這個變量的賦值,只會在第一次進入程序時賦值一次,之後就不會再初始化了。

這個關鍵字是「static」,如果把賦值語句前加上static,就會收穫不一樣的效果。

當我們再次運行程序時,就會發現輸出正常了,因為儘管不斷的進入中斷,但對於static unsigned char i=0這條語句,只在第一次進入時讀取了一次,其他時間,進入中斷,都不再做出反應了。這樣以後的i就正常累積了。到了20,才會歸零。

這就是為什麼普通的定義變量只能放在最前邊了。

相關焦點

  • 自學單片機第五十四篇:打開定時器
    C/T位是切換定時器和計數器模式的,等於1就是計數器模式,此時由引腳P3.4/T0來輸入計數信號。等於0時就是定時器模式,此時P3.4/T0引腳不控制,由系統自己定時觸發。我們要工作在定時器,所以就等於0。M1、M0兩位是組合的,前文就介紹了,分為四種方式,分別是00/01/10/11。
  • 定時器工作原理
    起初,我們使用沙漏來對時間進行確定;在定時器出現的初始階段,它利用機械鐘帶動開關來達到控制煤氣閥門的目的,但需每周對其上一次發條;1918年後,使用電鐘進行計時,使得定時器無需再上發條;在現代生活中,定時器已得到相當廣泛的應用,使得人們可以更方便地對時間進行控制,甚至在定時炸彈、定時雷管等軍事方面都得到了應用。
  • 【DIY】使用了單片機的簡易廚房定時器製作
    在家經常做飯,有許多東西需要有個時間限制,如醃個肉吧,十幾分鐘;煲個簡單的湯吧,文火1小時等,這些都不需要精確的定時,只要大約知道時間就可,但一定需要提醒
  • 家庭電器檔案——定時器
    家庭電器檔案——定時器  人類最早的定時器是沙漏,用以倒計時,近代有了機械定時器,影視劇多有表現
  • 小試一款國產放大機定時器
    放大機定時器也不例外,國外的二手的、功能簡單的也要五六百元,功能多一點的千元左右,有的還有電壓限制,需要轉換器。無意中淘閒魚,看到了這款「古銅色暗房定時器",帶暗房燈放大機雙插口,寬電壓設計,帶腳踏。其中帶有線腳踏的價格是189元,無線腳踏再加100。吸引我的是這個腳踏開關。沒有腳踏時,如果曝光定時較短,要用手按下定時器後馬上做遮擋操作,略顯侷促,有了腳踏,就可以解放雙手了。
  • pwm呼吸燈原理及程序分享
    2.Timer0/1計數寄存器 TL0 TL1 TH0 TH1 當定時開啟後,TL0(TL1)自動跟隨機器周期加一。當TL0(TL1)滿了後,自動清零同時向TH0(TH1)進一位,不需要手動操作。 而當TL0(TL1)和TH0(TH1)都滿了以後,此時如果定時中斷和總中斷都已經打開,那麼就會發生溢出中斷,同時這兩個寄存器清零。 運用PWM完成呼吸燈硬體電路
  • CoProcessFunction實戰三部曲之三:定時器和側輸出
    本篇概覽本文是《CoProcessFunction實戰三部曲》的終篇,主要內容是在CoProcessFunction中使用定時器和側輸出,對上一篇的功能進行增強;回顧上一篇的功能:一號流收到aaa後保存在狀態中,直到二號流收到aaa,把兩個aaa的值相加後輸出到下遊;
  • 洛奇水火箭降落傘材料組裝教程 定時器技術
    洛奇水火箭降落傘定時器 機械定時原理組裝製作材料 剪開其中1個 準備1個開孔器
  • 定時開關和時間繼電器有什麼區別?
    定時開關控制器 1.概念不同。時間繼電器:本質是繼電器,通過線圈的吸合,來控制觸點的通斷變化。定時開關:本質是一個開關,只不過是加了定時功能,就是添加了幾組時間段,來控制開關的通斷。 藍牙定時開關:就是定時開關的基礎上增加藍牙連接功能,開關可以和手機進行連接,利用小程序控制電器的開、關,以及設置定時開關,不需要在接觸開關,相對老式按鍵式的定時開關,操作起來比較方便。 2.設定時間不同。
  • 相機功能:有了間隔定時器,沒有快門線也能拍攝星軌、拍攝延時了
    在一些高端的相機中會有這麼一個功能:間隔定時器。間隔定時器簡單來講就是間隔一段時間定時拍攝,可以根據自己需要設置拍攝張數,這對於我們拍攝星軌和延時攝影創作就能起到很好的作用,同時也節省了購買快門線的費用以及騰出攜帶快門線的空間。
  • 程序丨FixedUpdate真的準時嗎?聊聊遊戲引擎的定時器實現
    因此,我就寫這篇文章來聊聊Unity的FixedUpdate方法,或者說來聊聊遊戲引擎的定時器實現吧。我相信各位對FixedUpdate的直觀印象首先來自於它的名字。並且常常會和一般Update方法進行對比,以突顯它的,呃,特殊性。其次,有一些實驗精神的小夥伴也許會親自來測試一下這個方法的時間間隔。
  • 51單片機C語言程序(四)鍵盤 數碼管 跑表程序
    程序一數碼管前三位顯示一個跑表,從000到999之間以1%秒的速度運行,當按下一個獨立鍵盤時跑錶停止,鬆開手後跑表繼續運行(用定時器設計表)本文引用地址:http://www.eepw.com.cn/article/201611/321015.htm#include#include #define uint unsigned int
  • 半自動洗衣機定時器更換
    1,首先就是藍色的和黑色的,兩根線,一根,是電源線進來的一路線,另外一根就是把進來的電,導通把電,然後接到排水開關上面。它內部的導通關係,當我們不使用洗衣機,定時器的時候是關閉的,然後洗衣機不旋轉。如果沒有這個功能,定時器就算關閉,洗衣機也會不停的往一個方向旋轉。造成洗衣機一直在工作。那他這裡就相當一個總電源開關,在不使用的時候,開關它就是整個的,把進來的電源線電路給切斷了。
  • PLC編程中定時器指令介紹
    以S7-200為例,有三種不同類型:接通延時定時器(TON)保留性接通延時定時器(TONR)斷開延時定時器(TOF)>定時器的解析度:TON、TOF---1ms 定時器號碼T32,T96---10ms 定時器號碼T33-T36,T97-T100---100ms 定時器號碼T37-T63,T101-T255
  • 藍牙定時開關怎麼使用?怎麼定時?怎麼調時間?
    定時開關:工作原理就是一個以單片微處理器為核心,配合電子電路等,組成的一個開關控制裝置,能以天或者星期循環,而且可以多時段的控制開、關。時間設定可以從1秒鐘到168小時,每日可設置1或者多組,且有多路控制功能。一次設定長期有效。適用於各種工業電器,家用電器的自動控制。
  • 定時開關最多可設置多少組定時?
    定時開關:以單片微處理器為核心,配合電子電路等,組成的電源開關控制裝置,能以天或星期,循環多時段的控制電器的開閉。 藍牙定時開關在老式開關上增加藍牙功能(去掉按鍵),通過手機與開關進行藍牙連接,用小程序進行控制,手動開、關,一鍵校時,手動控制電器的開、關,以及設置自動定時開關,都是在小程序上進行的。
  • 小家電定時控制器電路圖
    由圖可知,該小家電定時控制器由電源電路、定時電路和繼電器控制電路組成。   定時電路由通用定時器專用集成電路XM109(IC2)及定時編程開關S1~S3、觸發開關S4、工作模式選擇開關S5、發光二極體LED1、LED2和蜂鳴器BL等外圍元件組成。
  • 為什麼高速數據通道需要重定時器?
    六零年代,隨著電信數字載波系統T1和E1的出現,數字重定時器開始受到關注。這些系統在屏蔽雙絞線上承載多條語音電路信道,每隔幾千英尺需安裝一個數字重定時器。當時這些設備比較先進,它們採用的技術與現在的高速重定時器類似,包括均衡、時鐘數據恢復(CDR)、線路編碼和成幀。
  • 定時鬧鈴LCD的設計,個人大學的電子作品,共享給大家學習
    摘要本次畢業設計介紹一種定時鬧鈴LCD的設計,包括系統的硬體和軟體設計。該系統是Intel公司生產的MCS-51 系列單片機中的AT89S52構成最小系統的中央處理器,由1602液晶顯示、DS1302時鐘晶片、按鍵、蜂鳴器、電源等電路模塊構成。