菜鳥帶你秒殺單片機之51單片機篇—定時器

來源:互聯網
上載者:User

定時器對於每個MCU來說都是非常重要的功能,實現精確的定時器,測頻率,產生PWM都是靠的定時器,定時器的位元決定了定時器的精度,目前就我們所遇到有8位的定時器,16位的定時器,32位的定時器。功能一個比一個強。位元越高PWM的精度就越高,變化就越細膩,便於控制。51的定時就AT89X51來說有兩個定時器T0和T1,52單片機又增加了一個T2。每個定時器都有4中工作模式,第一種:13位的定時器,第二種是16位的定時器,第三種:8位的自動重載。第四種就是T0分離的兩個8位定時器。而T1停止工作。

要想熟練的運用這些東西不是靠的死記硬背,東西是死的人是活的。學習這類東西其實調試和看標頭檔,研究標頭檔和調試的視窗,你就可以迅速的掌握一款單片機。在看資料手冊,你就會很容易的理解他們。

這張圖已經把很多東西說明清楚了,定時器的振蕩頻率是晶振的12分頻,意思就是說我們平時有的12MHz的晶振時,定時的每個計數都是1us.而且可以看出16位的定時器實際是由兩個8位的定時組成的。最後溢出置位TF1.至於那個外部中斷就是測方波的脈寬的了。

#include<reg52.h>void t0_init(void){TMOD |= 0x01;     //定時的工作模式和定時或者計數TH0 = -50000>>8;TL0 = -50000%255; //將一個數分配到兩個8位寄存器中ET0 = 1;          //開啟定時器0的局部中斷使能}void main(void){   t0_init();   EA = 1;   //使能全域中斷   TR0= 1;  //定時器開始計數   for(;;)   //等待定時器溢出中斷。這個是定時器中斷的方法,是硬體的,我們可以用查詢的方式,就是軟體來做的。判斷TF0的情況,   {   PCON = 0x01;  //停止CPU的活動,節能。降低功耗。   }}void t0_overflow_isr(void) interrupt 1 //中斷服務程式{ TH0 = -50000>>8; TL0 = -50000&255;//51的定時器功能弱,不能自己重裝,必須軟體手動重裝,。然每次都是從0開始計數到0xffff P1 ^= 0x01;//每次取反P1.0口。}

值得注意的是51的定時器就是一個一直向上加的定時器,直到溢出,而其它的單片機定時就有很多的模式,設定一個值進行比較,或者溢出了不管一直在計數等到第二次又觸發,或者是減的,等等,千萬不要以為單片機就只有一個定時器溢出。多想想,不定期更新中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.