定時器TIMER0、TIMER1
RD8T37 系列單片機內部的 Timer0 和 Timer1 是兩個 16 位定時器/計數器,它們具有計數方式和定時方式兩種工作模式。特殊功能寄存器 TMOD 中有一個控制位 C/TX 來選擇 T0 和T1 是定時器還是計數器。它們本質上都是一個加法計數器,只是計數的來源不同。定時器的來源為系統時鐘或者其分頻時鐘,但計數器的來源為外部管腳的輸入脈沖。只有在 TRx=1 的時候,T0 和 T1 才會被打開計數。
計數器模式下,P0.2/T0 和 P0.3/T1 管腳上的每一個脈沖,T0 和T1的計數值分別增加 1。定時器模式下,可通過特殊功能寄存器 TMCON 來選擇T0和 T1 的計來源是 sys/12 或 fsys (fsys 為分頻后的系統時鐘)。
定時器/計數器 T0 有4 種工作模式,定時器/計數器 T1有 3 種工作模式(模式三不存在):
1.模式 0: 13 位定時器/計數器模式
2.模式 1: 16 位定時器/計數器模式
3.模式 2: 8 位自動重模式
- 模式 3: 兩個8 位定時器/計數器模式
在上述模式中,T0 和 T1 的模式 0、1、2 都相同,模式3 不同。
T0 和 T1相關特殊功能寄存器

定時器0 功能寄存器的宏定義:
/*TIMER*/
sfr TCON = 0X88; //定時器控制寄存器
sfr TMOD = 0X89; //定時器工作模式寄存器
sfr TL0 = 0X8A; //定時器0低8位
sfr TL1 = 0X8B; //定時器1低8位
sfr TH0 = 0X8C; //定時器0高8位
sfr TH1 = 0X8D; //定時器1高8位
定時器0初始化
void Timer0Iint(void)
{
TMOD |= 0x01; // 配置定時器0為 16位定時器, TH0、TL0全用
TH0 =(65536-1000)/256; //1000us定時,即1毫秒溢出產生中斷
TL0 =(65536-1000)%256; //1000us定時,即1毫秒溢出產生中斷
ET0 = 1; //開啟定時器0中斷
EA = 1; //開啟全局中斷
TR0 = 1; //定時器0開始計數;
}
定時器0中斷函數:
void Timer0() interrupt 1
{
//每次產生中斷后初始化定時器初值, 1ms秒產生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
//500毫秒執行次LED1反轉
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; // 配置定時器0為 16位定時器, TH0、TL0全用
TH0 =(65536-1000)/256; //1000us定時,即1毫秒溢出產生中斷
TL0 =(65536-1000)%256; //1000us定時,即1毫秒溢出產生中斷
ET0 = 1; //開啟定時器0中斷
EA = 1; //開啟全局中斷
TR0 = 1; //定時器0開始計數;
}
void main(void)
{
LED_Init();
Timer0Iint();
while(1);
}
void Timer0() interrupt 1
{
//每次產生中斷后初始化定時器初值, 1ms秒產生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
//500毫秒執行次LED1反轉
count ++;
if(count == 500)
{
LED1 = ~LED1;
count = 0;
}
}
下載到開發板后就實現P3.1閃燈了。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6078文章
45534瀏覽量
672268 -
計數器
+關注
關注
32文章
2319瀏覽量
98381 -
定時器
+關注
關注
23文章
3369瀏覽量
124184
發布評論請先 登錄
相關推薦
熱點推薦
單片機定時器中斷應用案例
定時器中斷,顧名思義就是在規定的時間內發送中斷請求,要實現定時器中斷,單片機需要能夠正確地計算時間,單片機是如何進行計時的呢?
發表于 10-31 14:49
?4123次閱讀
52單片機有幾個定時器?52單片機定時器1和52單片機定時器2程序對比
52單片機有幾個定時器?STC89C52RC其實是有三個定時器的單片機,STC89C52RC共有3個定時器,分別是T0、T1、T2。而51
發表于 11-10 14:30
?3.8w次閱讀
ATmega16單片機教程之ATmega16單片機定時器的分析與設計應用概述
本文檔的主要內容詳細介紹的是ATmega16單片機教程之ATmega16單片機定時器的分析與設計應用概述主要內容包括了:1、單片機定時器的基
發表于 12-07 08:00
?15次下載
基于51單片機的定時器
設計思路。這樣自己拿到任何型號的51單片機,只要有原理圖,都可以自主設計。博主剛接觸單片機,才疏學淺,可能會出現設計不足和錯誤,歡迎大家評論區交流。^ _ ^/********************************************************
發表于 11-04 21:06
?35次下載
51單片機——定時器的原理和使用
定時器的原理1.cpu時序的有關知識震蕩周期:為單片機提供定時信號的震蕩源的周期(由外部的晶振)狀態周期:2個震蕩周期,用s表示機械周期 6個狀態周期,12個震蕩周期 (12MHz的晶振1us)指令
發表于 11-10 18:50
?72次下載
單片機定時器驅動
評論