0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机定时器驱动

华仔的编程随笔 来源:华仔的编程随笔 作者:华仔的编程随笔 2023-04-23 09:16 次阅读

定时器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相关特殊功能寄存器

image.png

定时器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

审核编辑:汤梓红

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

    关注

    6001

    文章

    43973

    浏览量

    620832
  • 计数器
    +关注

    关注

    32

    文章

    2121

    浏览量

    92976
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112036
收藏 人收藏

    评论

    相关推荐

    单片机定时器的用法

    本章以CW32通用定时器为例介绍单片机定时器的用法。
    的头像 发表于 01-04 10:37 566次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>的用法

    51单片机定时器

    我想用4个定时器,可是我只会51单片机,51单片机只有两个定时器!怎么办!
    发表于 08-03 10:43

    单片机定时器软件

    单片机定时器软件
    发表于 08-03 17:10

    单片机定时器设计报告

    单片机定时器设计报告
    发表于 12-02 16:35

    单片机定时器

    请问stc单片机定时器怎么设置?是写程序然后烧录进去么?喔我想让单片机检测光敏电阻变化然后发出对应音阶 说要弄定时器 才能发出相应频率的声音 但是
    发表于 10-30 12:50

    单片机定时器的工作原理是什么

    单片机定时器的工作原理是什么,在刚开始学习单片机的时候,那时候由于简单的51单片机资源比较少所以一直就觉得单片机
    发表于 07-14 07:14

    单片机的系统定时器

    1.单片机的系统定时器也称为滴答定时器,能够实现精准定时。2.stm32f1XX和stm32f4XX的系统定时器是一样的。3.首先需要设
    发表于 08-19 06:46

    单片机定时器中断讨论

    单片机定时器中断这里先讨论51和52都有的定时器T1,T01.51单片机由两组定时器/计数2
    发表于 12-08 08:29

    单片机定时器中断

    1、单片机定时器中断后计数是否还会计数解决:单片机定时器中断后计数还是会计数的,如果重新赋值
    发表于 01-27 08:22

    单片机定时器中断的相关资料分享

    3.5 单片机定时器中断我们先来了解单片机定时器系统51单片机内部有2各16位可编程的定时器
    发表于 02-28 08:16

    基于51单片机定时器2的操作与实现

    基于51单片机定时器2的操作与实现,51单片机定时器2的使用!
    发表于 02-22 17:53 12次下载

    STM32单片机定时器介绍

    这节课给大家介绍一下 STM32 单片机定时器,STM32 单片机的定 时器的功能是非常强大的,在官方《STM32 参考手册》中对定时器的介绍就占了 100 多页,占了 1/5 的篇
    发表于 11-11 17:17 22次下载

    52单片机有几个定时器?52单片机定时器1和52单片机定时器2程序对比

    52单片机有几个定时器?STC89C52RC其实是有三个定时器单片机,STC89C52RC共有3个定时器,分别是T0、T1、T2。而51
    发表于 11-10 14:30 3.4w次阅读

    单片机定时器模式的使用_单片机定时器代码_单片机定时器程序

    定时器和计数器是单片机内部的同一个模块,这篇文章我们主要讲解定时器。顾名思义,定时器就是用来进行定时的。
    发表于 12-08 09:37 1.6w次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>模式的使用_<b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>代码_<b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>程序

    基于单片机定时器的设计方法

    单片机实现一个定时器只要对单片机里的特殊寄存器进行设置就可以实现了,下面我与朋友们说说这个0到9.9秒定时器的设计方法。
    的头像 发表于 11-02 16:58 9879次阅读
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>定时器</b>的设计方法