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