日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机小精灵t2_51单片机定时器T2初始化设置

發(fā)布時間:2024/4/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机小精灵t2_51单片机定时器T2初始化设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/wodejiaoao/article/details/5461921

2010

單片機T2定時器實現(xiàn)1秒精確定時程序

/********************************************************************************************

* 文 件 名:test.c

* 功??? 能:使用T2定時器實現(xiàn)1秒精確定時并閃燈

* 1.CPU型號:AT89S52

* 2.晶振:12.000MHz

*********************************************************************************************/

#include "reg52.h"?????????????????????????????? // 包含頭文件

#define uint unsigned int

#define uchar unsigned char

sbit P1_7 = P1 ^ 7;????????????????????????????? // 定義位變量

/********************************************************************************************

* 函數(shù)名稱:Timer2_Server()

* 功??? 能:定時器2溢出中斷。

* 入口參數(shù):無

* 出口參數(shù):無

* 注??? 意:在本函數(shù)中設(shè)置了一個靜態(tài)變量Timer2_Server_Count,靜態(tài)變量的值在進入函數(shù)時是不會被

*?????????? 初始化的,而是保持上次的值。它用來計數(shù)T2定時器的溢出次數(shù)(進入本函數(shù)的次數(shù)),每

*?????????? 溢出16次,就控制一次LED11反轉(zhuǎn)顯示。這時的時間正好是1秒,而且是精確的1秒!只與晶振

*?????????? 的精度有關(guān)。

*********************************************************************************************/

void Timer2_Server(void) interrupt 5

{

static uint Timer2_Server_Count;

// 定義靜態(tài)變量,用來計數(shù)T2定時器的溢出次數(shù)(進入本函數(shù)的次數(shù))

TF2=0;

// T2定時器發(fā)生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的?

Timer2_Server_Count++;

if(Timer2_Server_Count==16)??????????????????? // T2定時器的預裝載值為0x0BDC,溢出16次就是1秒鐘。

{

Timer2_Server_Count=0;

P1_7=~P1_7;??????????????????????????????? // LED11反轉(zhuǎn)顯示。

}

}

/********************************************************************************************

* 函數(shù)名稱:main()

* 功??? 能:使用T2定時器實現(xiàn)1秒精確定時并使LED11閃燈,即LED11亮1秒,滅1秒,亮1秒,滅1秒......

* 注??? 意:

*?????????? 1、要精確定時,必須使用定時器的自動裝載方式。本實驗使用T2定時器,讓它工作在16bit自動

*?????????? 裝載方式,這時,有另一個位置專門裝著16位預裝載值,當T2溢出時,預裝載值立即被裝入,

*?????????? 這就保證了精確定時。

*?????????? 2、T2定時器是一個16位定時器,最長的溢出時間也就幾十毫秒,要定時1秒,就需要用一個變量

*?????????? 來保存溢出的次數(shù),積累到了一定的次數(shù)后,才執(zhí)行一次操作。這樣就可以累加到1秒或者更

*?????????? 長的時間才做一次操作。

*?????????? 3、當T2定時器發(fā)生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的。

*?????????? 4、T2定時器預裝載值的計算:

*????????????? 設(shè)晶振為12MHz,每秒鐘可以執(zhí)行1000000(12000000/12)個機器周期。而T2每次溢出時最多

*?????????? 經(jīng)過了65536個機器周期。我們應(yīng)該盡量讓T2定時器的溢出中斷的次數(shù)最少,這樣對主程序的干擾

*?????????? 也就最小。

*?????????? 選擇每秒中斷14次,每次溢出1000000/14=71428.57個機器周期,不為整數(shù)且超出65536個機器周期,有效。

*?????????? 選擇每秒中斷16次,每次溢出1000000/16=62500個機器周期,小于65536個機器周期,有效。

*?????????? 選擇每秒中斷20次,每次溢出1000000/20=50000個機器周期,小于65536個機器周期,有效。

*?????????? .

*?????????? .

*?????????? .

*?????????? 通過上面的計算,我們可以發(fā)現(xiàn),我們可以選擇的方式有很多,但是最佳的是每秒中斷16次,每次

*?????????? 溢出62500個機器周期,那么賦給T2定時器的初值應(yīng)為65536-62500=3036,轉(zhuǎn)換成十六進制值為

*?????????? 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);????????????????????????????????????? // 死循環(huán),等待T2定時器的溢出中斷

}

總結(jié)

以上是生活随笔為你收集整理的单片机小精灵t2_51单片机定时器T2初始化设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。