久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17920|回復: 7
打印 上一主題 下一主題
收起左側

51單片機定時器設置入門 (STC89C52RC)

[復制鏈接]
跳轉到指定樓層
樓主
ID:101489 發(fā)表于 2016-1-3 00:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 hushao 于 2016-1-3 00:54 編輯

51單片機定時器設置入門 (STC89C52RC)

STC單片機定時器的使用可以說非常簡單,只要掌握原理,有一點的C語言基礎就行了。要點有以下幾個:

1. 一定要知道英文縮寫的原形,這樣寄存器的名字就不用記了。
理解是最好的記憶方法。好的教材一定會給出所有英文縮寫的原形。
2. 盡量用形像的方法記憶
比如TCON和TMOD兩個寄存器各位上的功能,教程一般有個圖表,你就在學習中不斷回憶那個圖表的形像

TMOD:定時器/計數(shù)器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)
                       
定時器/計數(shù)器模式控制寄存器TMOD是一個逐位定義的8位寄存器,但只能使用字節(jié)尋址,其字節(jié)地址為89H。
其格式為:

其中低四位定義定時器/計數(shù)器C/T0,高四位定義定時器/計數(shù)器C/T1,各位的說明:

GATE——門控制。
GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。
當INT0引腳為高電平時TR0置位,啟動定時器T0;
當INT1引腳為高電平時TR1置位,啟動定時器T1。
GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。

C/T——功能選擇位
C/T=0時為定時功能,C/T=1時為計數(shù)功能。
置位時選擇計數(shù)功能,清零時選擇定時功能。

M0、M1——方式選擇功能
由于有2位,因此有4種工作方式:
M1M0 工作方式 計數(shù)器模式 TMOD(設置定時器模式)
0 0 方式0 13位計數(shù)器 TMOD=0x00
0 1 方式1 16位計數(shù)器 TMOD=0x01
1 0 方式2 自動重裝8位計數(shù)器 TMOD=0x02
1 1 方式3 T0分為2個8位獨立計數(shù)器,T1為無中斷重裝8位計數(shù)器 TMOD=0x03
單片機定時器0設置為工作方式1為TMOD=0x01                  

這里我們一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要記住圖表,并知道每個英文縮寫的原型就可以了。
在程序中用到TMOD時,先立即回憶圖表,并根據(jù)縮寫的單詞原形理出每位的意義,如果意義不是很清楚,就查下手冊,幾次下來,TMOD的圖表就已經在腦子里了。

8位 GATE位,本身是門的意思。
7位 C/T    Counter/Timer
6位 M1         Mode 1
5位 M0         Mode 0

TCON: 定時器/計數(shù)器控制寄存器(TIMER/COUNTER CONTROL REGISTER)

TMOD分成2段,TCON控制更加精細,分成四段,在本文中只要用到高四段。

TF0(TF1)——計數(shù)溢出標志位,當計數(shù)器計數(shù)溢出時,該位置1。
TR0(TR1)——定時器運行控制位
當TR0(TR1)=0  停止定時器/計數(shù)器工作
當TR0(TR1)=1  啟動定時器/計數(shù)器工作
IE0(IE1)——外中斷請求標志位

當CPU采樣到P3.2(P3.3)出現(xiàn)有效中斷請求時,此位由硬件置1。在中斷響應完成后轉向中斷服務時,再由硬件自動清0。

IT0(IT1)——外中斷請求信號方式控制位
當IT0(IT1)=1 脈沖方式(后沿負跳有效)
當IT0(IT1)=0 電平方式(低電平有效)此位由軟件置1或清0。
TF0(TF1)——計數(shù)溢出標志位

當計數(shù)器產生計數(shù)溢出時,此位由硬件置1。當轉向中斷服務時,再有硬件自動清0。計數(shù)溢出的標志位的使用有兩種情況:采用中斷方式時,作中斷請求標志位來使用;采用查詢方式時,作查詢狀態(tài)位來使用。

注意記憶方法,理解單詞原形,就絕對不會把TF和TR搞混。TF的F也就是溢出Over Flow的F。國外有個著名的IT知識問答社區(qū),網址就stackoverflow點com
TR的R就是運行Run。默認是0不運行,當然要置1才運行。


STC單片機STC89C52RC定時器延時時間的計算

延時時間要根據(jù)晶振頻率計算,不同板子可能有所不同。

時鐘周期:
1/時鐘源,在我現(xiàn)在這塊板子上,晶振頻率是11.0592M,也就是時鐘周期是 1/11059200秒

機器周期:
一般51單片機是12個時鐘周期,我的板子也就是 12/11059200秒

單次定時最長時間:
如果是16位的計數(shù)器,16位最大值是65535,共可計數(shù)65536次;镜某(shù)一定要記住,還要記住8位最大值是255,共可計數(shù)256次,還要記住8位上每位代表的數(shù)值。
12 * 65536/11059200 = 0.0711 s,也就是,71 ms內的定時可以單次定時就完成。如果定時時間超過71 ms,就要循環(huán)了。

一次定時需要幾次機器周期:
計算公式:定時秒數(shù)/機器周期
比 如我要定時1秒, 1/(12/11059200)= 921600次,16位計數(shù)器最大可計數(shù)65536次,921600次早就益出了。我們可以每次定時10 ms,循環(huán)100次就可以定時1秒了,1 s縮小100百倍就是10 ms, 也就是每次需要計數(shù)9216次。

確實計數(shù)器初始值:
定時10 ms時,如果計數(shù)器從0開始計數(shù),我們就不知道什么時候到了9216次。所以應該計數(shù)了9216次,16位計數(shù)器最多計數(shù)95536次,然后就溢出,一溢出TCON的TF位就會置1,我們只要經常檢測TF位就可以知道什么時候完成10ms的定時了。
計算公式:計數(shù)器初始值=最大計數(shù)次數(shù) - 需要計數(shù)次數(shù)
如果定時10 ms,計數(shù)器的初始值就是 65536 - 9216

計算計數(shù)器的高位和低位:
16位的計數(shù)器,也就是兩個8位組成,8位的最大計數(shù)次數(shù)是256。所以:
計數(shù)器高位 = 初始值/256
計數(shù)器低位 = 初始值%256


STC89C52RC單片機定時器示例代碼:

#include <reg52.h>

//如果你的單片機沒用74hc138擴展IO口,下面代碼可略
sbit enableG1 = P1^3;
sbit enableG2 = P1^4;
sbit selectC  = P1^2;
sbit selectB  = P1^1;
sbit selectA  = P1^0;
void hc138()
{
         enableG1 = 1;
         enableG2 = 0;
         selectC  = 1;
         selectB  = 1;
         selectA  = 0;
}


typedef unsigned char uint8;
typedef unsigned int uint16;


/**
    1ms需要的機器周期 = 0.001/(12/11059200) = 921.6   
    要讓led燈以7.83hz閃動, 周期是 1000 / 7.83 = 127.713 ms, 也就是每64 ms改變亮滅狀態(tài)
**/
void main(void)
{   
    uint16 counter;

    hc138();

    TMOD = 0X01;
    TH0  = (65536 - 922) / 256;
    TL0  = (65536 - 922) % 256;
    TR0  =1;

    while(1)
    {
         if(TF0 == 1)
        {
            TF0 = 0;
            TH0  = (65536 - 922) / 256;
            TL0  = (65536 - 922) % 256;
            counter++;
        }

        if(counter == 64)
        {
             counter = 0;
            P0 = ~P0;
        }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:152374 發(fā)表于 2016-12-9 23:27 | 只看該作者
我來學習學習,鞏固鞏固知識。
回復

使用道具 舉報

板凳
ID:126826 發(fā)表于 2017-11-22 22:01 | 只看該作者
你好,我是初學者,我對這句話很疑惑,為什么一開始要判斷TF0==1,難道TF0的初始值就是1嗎?
謝謝!
  if(TF0 == 1)
回復

使用道具 舉報

地板
ID:201936 發(fā)表于 2017-11-23 08:39 | 只看該作者
謝謝樓主,這個對我有用
回復

使用道具 舉報

5#
ID:262591 發(fā)表于 2017-12-17 12:42 | 只看該作者
wzg1103 發(fā)表于 2017-11-22 22:01
你好,我是初學者,我對這句話很疑惑,為什么一開始要判斷TF0==1,難道TF0的初始值就是1嗎?
謝謝!
  if( ...

if(TF0 == 1)就是溢出一次,然后再歸零循環(huán)。循環(huán)64次就是64ms,1000次就是1s
回復

使用道具 舉報

6#
ID:262477 發(fā)表于 2017-12-17 15:08 | 只看該作者
不錯,受教了,感覺中斷和串口是最難的。
回復

使用道具 舉報

7#
ID:272625 發(fā)表于 2018-1-8 22:30 | 只看該作者
很好,謝樓主小白學習了
回復

使用道具 舉報

8#
ID:262591 發(fā)表于 2018-1-9 10:15 來自觸屏版 | 只看該作者
原來51計時精度是可選的,燒錄的時候選擇6T就是6分頻,最小計時單位就是0.5us。如果追求高精度計時可以選6T,然后按照時間寄存器1個單位=6/f推算起始位置,這樣就能夠做出來高精度的pwm了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩电影一区 | 欧美国产精品一区二区三区 | 亚洲高清一区二区三区 | 日韩国产专区 | 欧美激情视频一区二区三区在线播放 | 91精品国产高清一区二区三区 | 91精品国产美女在线观看 | 神马久久久久久久久久 | 成人精品久久久 | 国产日产久久高清欧美一区 | 日韩久久久久久 | 欧美视频在线免费 | 国产不卡在线播放 | 九色国产 | 国产在线麻豆精品入口 | 日韩av中文| 欧美xxxx色视频在线观看免费 | 欧美久久精品一级黑人c片 91免费在线视频 | av男人的天堂av| 免费在线观看一区二区三区 | 亚洲一区二区在线视频 | 影音av | 亚洲午夜av久久乱码 | 中文字幕在线人 | 国产精彩视频 | 一区二区av | 碰碰视频 | 久久久久久综合 | 一区二区三区av | 日本激情视频在线播放 | 男女视频在线观看网站 | 亚洲精品久久久久国产 | 在线播放中文字幕 | 黑人粗黑大躁护士 | 真人女人一级毛片免费播放 | 国产一区二区在线观看视频 | 国产午夜影院 | 精品久久久久久久久亚洲 | 精产国产伦理一二三区 | 国产成人艳妇aa视频在线 | 亚洲一区二区电影在线观看 |