51单片机中的定时器
生活随笔
收集整理的這篇文章主要介紹了
51单片机中的定时器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 51單片機中的定時器介紹
- 1.1 定時器的初步認識
- 1.2 定時器的寄存器
- 1.3 使用定時器的方法
- 1.4 定時時間的計算
- 2 定時器模式1
- 2.1 定時器模式1原理分析
- 2.2 使用查詢的方式使用定時器
1 51單片機中的定時器介紹
1.1 定時器的初步認識
時鐘周期:
- 時鐘周期 T 是時序中最小的時間單位,具體計算的方法就是 1/時鐘源頻率,如果晶振是 11.0592M,那么對于我們這個單片機系統來說,時鐘周期=1/11059200 秒。
機器周期:
- 我們的單片機完成一個操作的最短時間。機器周期主要針對匯編語言而言,在匯編語言下程序的每一條語句執行所使用的時間都是機器周期的整數倍,而且語句占用的時間是可以計算出來的,而 C 語言一條語句的時間是不確定的,受到諸多因素的影響。 51單片機系列,在其標準架構下一個機器周期是 12 個時鐘周期,也就是 12/11059200 秒。現在有不少增強型的 51 單片機,其速度都比較快,有的 1 個機器周期等于 4 個時鐘周期,有的 1個機器周期就等于 1 個時鐘周期,也就是說大體上其速度可以達到標準 51 架構的 3 倍或 12倍。
定時器:
- 打開定時器后,定時器"存儲寄存器"的值經過一個機器周期自動加1,也就是說,機器周期是定時器的計數周期。
1.2 定時器的寄存器
定時值存儲寄存器:
- 存儲定時器的計數值的。
定時器控制寄存器TCON:
定時器模式寄存器TMOD:
1.3 使用定時器的方法
第一步:設置特殊功能寄存器 TMOD,配置好工作模式。
第二步:設置計數寄存器 TH0 和 TL0 的初值。
第三步:設置 TCON,通過 TR0 置 1 來讓定時器開始計數。
第四步:判斷 TCON 寄存器的 TF0 位,監測定時器溢出情況。
1.4 定時時間的計算
我們的晶振是 11.0592M,時鐘周期就是 1/11059200,機器周期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器周期得到 0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。 16 位定時器的溢出值是 65536(因 65535 再加 1 才是溢出),于是我們就可以這樣操作,先給 TH0 和 TL0一個初始值,讓它們經過 18432 個機器周期后剛好達到 65536,也就是溢出,溢出后可以通過檢測 TF0 的值得知,就剛好是 0.02 秒。那么初值 y = 65536 - 18432 = 47104,轉成 16 進制就是0xB800,也就是 TH0 = 0xB8, TL0 = 0x00。
2 定時器模式1
2.1 定時器模式1原理分析
模式示意圖如下:
2.2 使用查詢的方式使用定時器
下面程序的主要功能是讓小燈以0.5Hz的頻率閃爍。
#include <reg52.h>sbit LED = P0 ^ 0; sbit ADDR0 = P1 ^ 0; sbit ADDR1 = P1 ^ 1; sbit ADDR2 = P1 ^ 2; sbit ADDR3 = P1 ^ 3; sbit ENLED = P1 ^ 4;void main() {unsigned char cnt = 0; //定義一個計數變量,記錄 T0 溢出次數ENLED = 0; //使能 U3,選擇獨立 LEDADDR3 = 1;ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;TMOD = 0x01; //設置 T0 為模式 1TH0 = 0xB8; //為 T0 賦初值 0xB800TL0 = 0x00;TR0 = 1; //啟動 T0while (1){if (TF0 == 1) //判斷 T0 是否溢出{TF0 = 0; //T0 溢出后,清零中斷標志TH0 = 0xB8; //并重新賦初值TL0 = 0x00;cnt++; //計數值自加 1if (cnt >= 50) //判斷 T0 溢出是否達到 50 次{cnt = 0; //達到 50 次后計數值清零LED = ~LED; //LED 取反: 0-->1、 1-->0}}} }參考資料:
總結
以上是生活随笔為你收集整理的51单片机中的定时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七彩虹怎么u盘装系统 七彩虹U盘装系统教
- 下一篇: Qt中的QWidget