单片机定时器驱动

描述

定时器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 位自动重模式

  1. 模式 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闪灯了。

*附件:闪灯.zip

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分