定时器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文章
45576浏览量
673512 -
计数器
+关注
关注
32文章
2321浏览量
98540 -
定时器
+关注
关注
23文章
3372浏览量
124491
发布评论请先 登录
相关推荐
热点推荐
单片机定时器中断应用案例
定时器中断,顾名思义就是在规定的时间内发送中断请求,要实现定时器中断,单片机需要能够正确地计算时间,单片机是如何进行计时的呢?
发表于 10-31 14:49
•4255次阅读
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次下载
单片机定时器驱动
评论