单片机小精灵t2_51单片机定时器T2初始化设置
http://blog.csdn.net/wodejiaoao/article/details/5461921
2010
單片機T2定時器實現1秒精確定時程序
/********************************************************************************************
* 文 件 名:test.c
* 功??? 能:使用T2定時器實現1秒精確定時并閃燈
* 1.CPU型號:AT89S52
* 2.晶振:12.000MHz
*********************************************************************************************/
#include "reg52.h"?????????????????????????????? // 包含頭文件
#define uint unsigned int
#define uchar unsigned char
sbit P1_7 = P1 ^ 7;????????????????????????????? // 定義位變量
/********************************************************************************************
* 函數名稱:Timer2_Server()
* 功??? 能:定時器2溢出中斷。
* 入口參數:無
* 出口參數:無
* 注??? 意:在本函數中設置了一個靜態變量Timer2_Server_Count,靜態變量的值在進入函數時是不會被
*?????????? 初始化的,而是保持上次的值。它用來計數T2定時器的溢出次數(進入本函數的次數),每
*?????????? 溢出16次,就控制一次LED11反轉顯示。這時的時間正好是1秒,而且是精確的1秒!只與晶振
*?????????? 的精度有關。
*********************************************************************************************/
void Timer2_Server(void) interrupt 5
{
static uint Timer2_Server_Count;
// 定義靜態變量,用來計數T2定時器的溢出次數(進入本函數的次數)
TF2=0;
// T2定時器發生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的?
Timer2_Server_Count++;
if(Timer2_Server_Count==16)??????????????????? // T2定時器的預裝載值為0x0BDC,溢出16次就是1秒鐘。
{
Timer2_Server_Count=0;
P1_7=~P1_7;??????????????????????????????? // LED11反轉顯示。
}
}
/********************************************************************************************
* 函數名稱:main()
* 功??? 能:使用T2定時器實現1秒精確定時并使LED11閃燈,即LED11亮1秒,滅1秒,亮1秒,滅1秒......
* 注??? 意:
*?????????? 1、要精確定時,必須使用定時器的自動裝載方式。本實驗使用T2定時器,讓它工作在16bit自動
*?????????? 裝載方式,這時,有另一個位置專門裝著16位預裝載值,當T2溢出時,預裝載值立即被裝入,
*?????????? 這就保證了精確定時。
*?????????? 2、T2定時器是一個16位定時器,最長的溢出時間也就幾十毫秒,要定時1秒,就需要用一個變量
*?????????? 來保存溢出的次數,積累到了一定的次數后,才執行一次操作。這樣就可以累加到1秒或者更
*?????????? 長的時間才做一次操作。
*?????????? 3、當T2定時器發生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的。
*?????????? 4、T2定時器預裝載值的計算:
*????????????? 設晶振為12MHz,每秒鐘可以執行1000000(12000000/12)個機器周期。而T2每次溢出時最多
*?????????? 經過了65536個機器周期。我們應該盡量讓T2定時器的溢出中斷的次數最少,這樣對主程序的干擾
*?????????? 也就最小。
*?????????? 選擇每秒中斷14次,每次溢出1000000/14=71428.57個機器周期,不為整數且超出65536個機器周期,有效。
*?????????? 選擇每秒中斷16次,每次溢出1000000/16=62500個機器周期,小于65536個機器周期,有效。
*?????????? 選擇每秒中斷20次,每次溢出1000000/20=50000個機器周期,小于65536個機器周期,有效。
*?????????? .
*?????????? .
*?????????? .
*?????????? 通過上面的計算,我們可以發現,我們可以選擇的方式有很多,但是最佳的是每秒中斷16次,每次
*?????????? 溢出62500個機器周期,那么賦給T2定時器的初值應為65536-62500=3036,轉換成十六進制值為
*?????????? 0x0BDC。
*********************************************************************************************/
void main (void)
{
P1_7=1;??????????????????????????????????????? // LED11滅
/* T2定時器賦預裝載值,溢出16次就是1秒。 */
RCAP2H=0x0B;
RCAP2L=0xDC;
ET2=1;???????????????????????????????????????? // 允許T2定時器中斷
EA=1;????????????????????????????????????????? // 打開總中斷
TR2=1;???????????????????????????????????????? // 啟動T2定時器
while(1);????????????????????????????????????? // 死循環,等待T2定時器的溢出中斷
}
總結
以上是生活随笔為你收集整理的单片机小精灵t2_51单片机定时器T2初始化设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp获取ftp服务器目录并显示_用 P
- 下一篇: vim 分屏 最大化_Vim的分屏功能命