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

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

3天内不再提示

CC2530(zigbee)入门开发: 定时器使用实例

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-28 13:31 次阅读

第一章 定时器技术与CC2530时钟源介绍

1. 定时器技术

定时器在单片机里也是属于基本必备功能,非常常用;程序设计里,很多地方都需要使用到时间的概念,比如:使用定时器做一些轮询检测、精准的延时函数、串口断帧检测、定时器发送、提供心跳包等等。

定时器在CPU内部的实现原理:

定时器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。

定时器的最基本工作原理是进行计数。不管是定时器还是计数器,本质上都是计数器,可以进行加1(减1)计数,每出现一个计数信号,计数器就会自动加1(自动减1),当计数值从0变成最大值(或从最大值变成0)溢出时,定时就会向CPU提出中断请求。

CC2530一共带了5个定时器,其中定时器1是一个16位的定时器,属于CC2530中功能最全的一个定时,在应用开发中可以优先使用。

根据文档的介绍定时器1的工作模式有三种:

第一个模式是自由运行模式:计数器从0x0000开始,在每个活动 时钟边沿增加1,当计数器达到0xFFFF时溢出,计数器重新载入0x0000并开始新一轮的递增计数。该模式的计数周期是固定值0xFFFF,当达到最终计数 值0xFFFF时,标志位T1IF和OVFIF被设置。

第2个模式是模模式:计数器从0x0000开始,在每个活动时钟边 沿增加1,当计数器达到T1CC0寄存器保存的值时 溢出,计数器又将从0x0000开始新一轮的递增计数, 模模式的计数周期可由用户自行设定。

第3个模式是正计数/倒计数模式:计数器反复从0x0000开始,正计数到TICC0保存的最终计数值,然后再倒计数回0x0000,当达到最终计数值时,标志位T1IF和OVFIF被设置。
复制代码

2. 时钟源

CC2530一共有两个可选的时钟源,分别是内部和外部。

1、内部RC震荡器(32KHz、16MHz)

2、外部石英晶振(32.768KHz、32MHz)

一般在无线收发中采用外部石英晶振,因为外部石英晶振比较稳定,不受CPU内部温度影响。

3. 时钟源的切换

用于判断时钟源是否切换成功

image.pngimage.pngimage.png

4. 定时器中断

定时器有3种情况能产生中断请求(几乎所有单片机都是这样的事件分类):

1. 计数器到达设定的计数值

2. 产生输入捕获事件

3. 产生输出比较事件

第二章 相关寄存器

image.pngimage.pngimage.pngimage.pngimage.png

第三章: 示例代码

定时器1共有5对T1CCxH和T1CCxL寄存器,分别对应通道0到通道4。在使用定时器1的定时功能时,使用T1CC0H和T1CC0L两个寄存器存放最大计数值的高8位和低8位。

下面编写定时器1的使用示例代码,开启了定时器中断。分别定时1秒和10秒,在中断服务函数里进行判断,完成LED灯控制。

#include 

//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3

/*
函数功能:LED灯IO口初始化
硬件连接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
    P1DIR |=0x3<<2;  //配置P1_2、P1_3为输出模式
    LED1 = 1;
    LED2 = 1;
}

/*延时200毫秒*/
void delay200ms(void)   //误差 -0.125us
{
    unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=181;b>0;b--)
            for(a=14;a>0;a--);
}


/*===============定时器1初始化函数==================*/
void Init_Timer1()
{
  T1CC0L = 0xd4;        //设置最大计数值的低8位
  T1CC0H = 0x30;        //设置最大计数值的高8位
  T1CCTL0 |= 0x04;      //开启通道0的输出比较模式
  T1IE = 1;             //使能定时器1中断
  T1OVFIM = 1;          //使能定时器1溢出中断
  EA = 1;               //使能总中断
  T1CTL = 0x0e;         //分频系数是128,模模式
}


unsigned char count = 0;  
/*================定时器1服务函数====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
  T1STAT &= ~0x01;      //清除定时器1通道0中断标志
  count++;
  if(count%10 == 0)     //定时1秒到
  {
    LED1 = !LED1;
  }
  if(count == 100)      //定时10秒到
  {
    LED2 = !LED2;
    count = 0;
  }
}

/*主函数*/
void main(void)
{
    LED_Init();//初始化LED灯控制IO口
    Init_Timer1();
    while(1)          
    {  
                
    }
}

审核编辑:汤梓红

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

    关注

    6029

    文章

    44480

    浏览量

    631602
  • 定时器
    +关注

    关注

    23

    文章

    3228

    浏览量

    114254
  • CC2530
    +关注

    关注

    19

    文章

    221

    浏览量

    57703
  • 时钟源
    +关注

    关注

    0

    文章

    92

    浏览量

    15915
收藏 人收藏

    评论

    相关推荐

    CC2530有哪些定时器

    CC2530有哪些定时器
    发表于 01-25 06:10

    【技术精选】嵌入式STM32原创征文活动精选文章

    CC2530(zigbee)入门开发: 看门狗C2530(zigbee)入门开发: 低功耗模式
    发表于 07-27 18:26

    基于CC2530芯片_zigbee基础实验

    zigbee基础实验,基于CC2530芯片
    发表于 12-11 10:48 48次下载

    CC2530 定时器T1的使用

    CC2530定时器T1的使用,多看看原理图。
    发表于 04-26 10:41 0次下载

    基于CC2530ZigBee协调器节点设计

    本文给出了基于TI新一代芯片CC2530ZigBee协调器节点设计方法,该方法选用TICC2591作为射频前端芯片。
    发表于 01-05 15:25 4.9w次阅读
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>协调器节点设计

    如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境

    本文档的主要内容详细介绍的是如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境。
    发表于 05-10 18:14 25次下载
    如何使用<b class='flag-5'>ZigBee</b> TI ZStack <b class='flag-5'>CC2530</b> 2.5搭建<b class='flag-5'>开发</b>环境

    基于zigbee CC2530和环境光传感器实现照度计的设计

    本项目是一个基于zigbee CC2530的照度计,传感器使用的是TI的环境光传感器OPT3001。成果如上图所示,关于OPT3001传感器硬件电路设计,可参考《基于ZigBee
    的头像 发表于 02-03 07:03 7785次阅读
    基于<b class='flag-5'>zigbee</b> <b class='flag-5'>CC2530</b>和环境光传感器实现照度计的设计

    cc2530 睡眠定时器串口显示

    功能描述cc2530 睡眠定时器串口显示//第12次次课 (睡眠定时器方式唤醒)//体会1:切换系统主时钟16MHz和32MHz//体会2:当串口波特率比较高时候(19200),乱码多,降低后
    发表于 11-25 10:21 22次下载
    <b class='flag-5'>cc2530</b> 睡眠<b class='flag-5'>定时器</b>串口显示

    CC2530定时器3

    CC2530定时器3完成对LED1周期为2s控制首先大家需要了解的是CC2530有4个定时器,分别是,定时器1~4和睡眠
    发表于 11-29 18:51 9次下载
    <b class='flag-5'>CC2530</b><b class='flag-5'>定时器</b>3

    CC2530定时器1使能

    CC2530定时器1CC2530有5个定时器定时器1,定时器2,
    发表于 11-29 20:06 6次下载
    <b class='flag-5'>CC2530</b><b class='flag-5'>定时器</b>1使能

    cc2530学习笔记一

    cc2530学习笔记一使用cc2530定时器一的模模式来产生pwm波。计数寄存器T1CC0的值确定pwm波周期,比较寄存器T1CCn(T1CCnH和T1CCnL)确定占空比。(关于
    发表于 11-29 20:21 6次下载
    <b class='flag-5'>cc2530</b>学习笔记一

    基于CC2530ZigBee通信网的应用设计.pdf

    基于CC2530ZigBee通信网的应用设计.pdf
    发表于 12-15 18:17 23次下载

    CC2530查询方式使用定时器

      实验目的   1)、通过实验掌握 CC2530 芯片 GPIO 的配置方法   2)、掌握 Led 驱动电路及开关 Led 的原理   3)、掌握定时器 T1 的配置与使用
    发表于 04-11 15:35 3次下载

    CC2530(zigbee)入门开发: 安装IAR开发环境

    CC2530本身是一个51单片机内核,开发过51的搞起来非常容易,也就是多了一个无线射频部分;如果不使用无线射频功能,那么就和一个正常的51单片机一样。要进行CC2530的软件开发,需
    的头像 发表于 05-28 13:38 1.1w次阅读
    <b class='flag-5'>CC2530</b>(<b class='flag-5'>zigbee</b>)<b class='flag-5'>入门开发</b>: 安装IAR<b class='flag-5'>开发</b>环境

    基于CC2530ZigBee通信网络的应用设计

    电子发烧友网站提供《基于CC2530ZigBee通信网络的应用设计.pdf》资料免费下载
    发表于 10-26 09:34 3次下载
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>通信网络的应用设计