定時(shí)器TIMER0、TIMER1
RD8T37 系列單片機(jī)內(nèi)部的 Timer0 和 Timer1 是兩個(gè) 16 位定時(shí)器/計(jì)數(shù)器,它們具有計(jì)數(shù)方式和定時(shí)方式兩種工作模式。特殊功能寄存器 TMOD 中有一個(gè)控制位 C/TX 來(lái)選擇 T0 和T1 是定時(shí)器還是計(jì)數(shù)器。它們本質(zhì)上都是一個(gè)加法計(jì)數(shù)器,只是計(jì)數(shù)的來(lái)源不同。定時(shí)器的來(lái)源為系統(tǒng)時(shí)鐘或者其分頻時(shí)鐘,但計(jì)數(shù)器的來(lái)源為外部管腳的輸入脈沖。只有在 TRx=1 的時(shí)候,T0 和 T1 才會(huì)被打開(kāi)計(jì)數(shù)。
計(jì)數(shù)器模式下,P0.2/T0 和 P0.3/T1 管腳上的每一個(gè)脈沖,T0 和T1的計(jì)數(shù)值分別增加 1。定時(shí)器模式下,可通過(guò)特殊功能寄存器 TMCON 來(lái)選擇T0和 T1 的計(jì)來(lái)源是 sys/12 或 fsys (fsys 為分頻后的系統(tǒng)時(shí)鐘)。
定時(shí)器/計(jì)數(shù)器 T0 有4 種工作模式,定時(shí)器/計(jì)數(shù)器 T1有 3 種工作模式(模式三不存在):
1.模式 0: 13 位定時(shí)器/計(jì)數(shù)器模式
2.模式 1: 16 位定時(shí)器/計(jì)數(shù)器模式
3.模式 2: 8 位自動(dòng)重模式
- 模式 3: 兩個(gè)8 位定時(shí)器/計(jì)數(shù)器模式
在上述模式中,T0 和 T1 的模式 0、1、2 都相同,模式3 不同。
T0 和 T1相關(guān)特殊功能寄存器
定時(shí)器0 功能寄存器的宏定義:
/*TIMER*/
sfr TCON = 0X88; //定時(shí)器控制寄存器
sfr TMOD = 0X89; //定時(shí)器工作模式寄存器
sfr TL0 = 0X8A; //定時(shí)器0低8位
sfr TL1 = 0X8B; //定時(shí)器1低8位
sfr TH0 = 0X8C; //定時(shí)器0高8位
sfr TH1 = 0X8D; //定時(shí)器1高8位
定時(shí)器0初始化
void Timer0Iint(void)
{
TMOD |= 0x01; // 配置定時(shí)器0為 16位定時(shí)器, TH0、TL0全用
TH0 =(65536-1000)/256; //1000us定時(shí),即1毫秒溢出產(chǎn)生中斷
TL0 =(65536-1000)%256; //1000us定時(shí),即1毫秒溢出產(chǎn)生中斷
ET0 = 1; //開(kāi)啟定時(shí)器0中斷
EA = 1; //開(kāi)啟全局中斷
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)數(shù);
}
定時(shí)器0中斷函數(shù):
void Timer0() interrupt 1
{
//每次產(chǎn)生中斷后初始化定時(shí)器初值, 1ms秒產(chǎn)生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
//500毫秒執(zhí)行次LED1反轉(zhuǎn)
count ++;
if(count == 500)
{
LED1 = ~LED1;
count = 0;
}
}
main.c代碼如下:
#include "RD8T37x_C.H"
sbit LED1 = P3^1;
sbit LED2 = P3^2;
static uint32_t count = 0;
void LED_Init(void)
{
P3CON |= 0x06; //P31輸出
}
void Timer0Iint(void)
{
TMOD |= 0x01; // 配置定時(shí)器0為 16位定時(shí)器, TH0、TL0全用
TH0 =(65536-1000)/256; //1000us定時(shí),即1毫秒溢出產(chǎn)生中斷
TL0 =(65536-1000)%256; //1000us定時(shí),即1毫秒溢出產(chǎn)生中斷
ET0 = 1; //開(kāi)啟定時(shí)器0中斷
EA = 1; //開(kāi)啟全局中斷
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)數(shù);
}
void main(void)
{
LED_Init();
Timer0Iint();
while(1);
}
void Timer0() interrupt 1
{
//每次產(chǎn)生中斷后初始化定時(shí)器初值, 1ms秒產(chǎn)生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
//500毫秒執(zhí)行次LED1反轉(zhuǎn)
count ++;
if(count == 500)
{
LED1 = ~LED1;
count = 0;
}
}
下載到開(kāi)發(fā)板后就實(shí)現(xiàn)P3.1閃燈了。
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631997 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2253瀏覽量
94287 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3232瀏覽量
114331
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論