CC2530之Timer应用

实验内容

在本次实验中,通过定时器功能精确控制LED灯的闪烁频率。

硬件电路

你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

CC2530的定时器介绍

什么是定时/计数器?

定时/计数器是一种能够对时钟信号或外部输入信号进行计数,当计数值达到设定要求时便向CPU提出处理请求,从而实现定时或计数功能的外设。在单片机中,一般使用Timer表示定时计数器。

定时器的作用?

定时/计数器的基本功能是实现定时和计数,且在整个工作过程中不需要CPU进行过多参与,它的出现将CPU从相关任务中解放出来,提高了CPU的使用效率。
在这里插入图片描述

定时/计数器基本工作原理

CC2530中共包含了5个定时/计数器:

在这里插入图片描述
无论使用定时/计数器的哪种功能,其最基本的工作原理是进行计数。定时/计数器的核心是一个计数器,可以进行加1(或减1)计数,每出现一个计数信号,计数器就自动加1(或自动减1),当计数值从最大值变成0(或从0变成最大值)溢出时定时/计数器便向CPU提出中断请求。

CC2530在上电后,默认使用内部频率为16MHZ的RC振荡器;也可以使用外界的晶体振荡器,一般为32MHZ的晶振。

工作模式

CC2530的定时器1、定时器3和定时器4虽然计数器的位数不同,但是都有自由运行模式、模模式和正计数/倒计数三个工作模式。本次实验以T3为例。

自由运行模式

在这里插入图片描述

模模式

在这里插入图片描述

正计数/倒计数模式

在这里插入图片描述
当计数器达到最终计数值时,寄存器仅当设置了中断屏蔽位时,才会发生中断请求。这个定时器用于周期必须是对称输出脉冲.

IRCON寄存器可有硬件自动清零,不需要手动清楚标志位。

寄存器

定时器3控制寄存器【T3CTL】

在这里插入图片描述

中断使能寄存器【IEN1】

在这里插入图片描述

中断使能寄存器【IEN2】

在这里插入图片描述

定时器使用方法

定时器3采用中断方式,初始化需要做的事情:
1)使能定时器3中断
2)使能溢出中断(默认使能)
3)设置分频、运行模式
4)最后启动定时器3
5)开启总中断 EA = 1;

关键代码

/********************Timer3 initialization function***********************/
void Init_Timer3()
{     
  T3CTL |= 0x08 ;            //开溢出中断     
  T3IE = 1;                  //开T3中断
  T3CTL|=0XE0;               //128分频,128/16000000*N=0.5S, N=65200
  T3CTL &= ~0X03;            //自动重装 00->0xff  65200/256=254(次)
  T3CTL |=0X10;              //启动
  EA = 1;                    //开总中断 
}
/*****************************Timer3 interrupt function**************/
#pragma vector = T3_VECTOR //定时器T3
 __interrupt void T3_ISR(void) 
{ 
    IRCON = 0x00;       //清中断标志, 也可由硬件自动完成 
    if(++count>254)      //254次中断后LED取反,闪烁一轮(约为0.5 秒时间) 
    {
      count = 0;                   // 计数清零 
      P0_0 = ~P0_0;               //LED1-link 状态反转
      P2_0 = ~P2_0;               //LED2-data 状态反转
    }
}

/*************************主函数*****************/
void main()
{
  Init_Led();
  Init_Timer3();
  while(1)
  {
    Delay(1000);
  }
}

系统在不配置工作频率时默认为2分频,即16M=32M/2。1/(16M/128)*N = 0.5s(每隔0.5秒一次开,一次关,这样看起来就像以1S周期性闪烁),得到 N = 65200,即而每次溢出递增次数为256(0x00~0xFF),所有总共需要溢出的次数 = 65200/256 = 2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值