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

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

3天内不再提示

CC2530 定时器配置步骤

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-07-06 14:43 次阅读

第一章 CC2530时钟

(1)时钟源

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

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

注意:外部石英晶振比较稳定,在无线收发中采用外部石英晶振

(2)时钟源的切换

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

img

img

img

第二章 定时/技术器的基本原理

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

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

第三章 CC2530的定时/计数器

CC2530共有5个定时/计数器,其中定时器1是一个16位的定时器,为CC2530中功能最全的一个定时/计数器,在 应用中应优先选用。

定时器1的工作模式有三种:

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

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

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

第四章 CC2530的定时/计数器中断系统

定时器有3种情况能产生中断请求:

<1> 计数器达到最终计数值(溢出或回到零)。

<2> 输入捕获事件。

<3> 输出比较事件。

使用模模式要特别注意,需要开启通道0的输出比较模式,否则计数器的 值达到T1CC0后,是不会产生溢出中断的。

第五章 应用定时器1实现1秒定时

【1】设置定时器1的最大计数值

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

在系统中,系统时钟为16MHz,分频系数为128,要定时0.1秒,最大计数值为:

img

【2】定时器初始化函数设计

<1> 将定时器1的最大计数值写入T1CC0。

<2> 通过T1CCTL0寄存器开启定时器1通道0的输出比较模式。

<3> 设置定时器1的相关中断控制位。

<4> 设置分频系数和工作模式并启动定时器。

【3】定时器中断服务函数设计

<1> 清除T1STAT的中断标志位。

<2> 累加全局变量count。

<3> count被10整除即1秒的定时到了。

<4> 10秒定时到将count清零。

示例代码:

#include < ioCC2530.h >//定义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)          
     {  
                 
     }
 }
 ​

第六章 相关寄存器

img

img

img

img

img

img

第七章 示例代码

(1)无中断配置定时器

#include < ioCC2530.h >//定义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;
 }
 ​
 /*===============定时器1初始化函数==================*/
 void Init_Timer1()
 {
    //初始化计数器1
     T1CTL = 0x05;   
     T1STAT= 0x21;            //通道0,中断有效,8分频;自动重装模式(0x0000- >0xffff)     
 }
 ​
 ​
 unsigned int counter=0;             //统计溢出次数
 unsigned int LEDFlag;               //标志是否要闪烁/*主函数*/
 void main(void)
 {
     LED_Init();//初始化LED灯控制IO口
     Init_Timer1();
     while(1)          
     {  
         if(IRCON > 0)
         {
             IRCON = 0;                //清溢出标志     
             counter++;
             if(counter==15)            //中断计数,约0.25s
             {
                 counter =0;
                 LEDFlag = !LEDFlag;
             }
         }
         if(LEDFlag)
         {
              LED1 = !LED1;
              LED2 = !LED2;     // 每 1s LED灯闪烁一下 
              LEDFlag = !LEDFlag;   // 闪烁标志变量置0
         }                       
     }
 }
 ​

(2)开中断配置定时器

#include < ioCC2530.h >//定义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)          
     {  
                 
     }
 }
 ​
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 晶振
    +关注

    关注

    34

    文章

    2859

    浏览量

    68007
  • 信号
    +关注

    关注

    11

    文章

    2790

    浏览量

    76731
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114725
  • CC2530
    +关注

    关注

    19

    文章

    221

    浏览量

    58004
  • 时钟源
    +关注

    关注

    0

    文章

    93

    浏览量

    15956
收藏 人收藏

    评论

    相关推荐

    CC2530 GPIO口输入配置配置步骤

    介绍CC2530 GPIO口输入配置配置
    的头像 发表于 07-06 14:40 2609次阅读
    <b class='flag-5'>CC2530</b> GPIO口输入<b class='flag-5'>配置</b><b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    CC2530 外部中断配置步骤

    介绍CC2530 外部中断配置步骤
    的头像 发表于 07-06 14:41 3071次阅读
    <b class='flag-5'>CC2530</b> 外部中断<b class='flag-5'>配置</b><b class='flag-5'>步骤</b>

    CC2530的时钟配置概述

    二、CC2530的时钟配置概述CC2530同样也有两个时钟,一个是高频时钟信号给CPU使用,另一个低频时钟信号给看门狗,睡眠定时器等使用;相对应的高速时钟
    发表于 01-19 07:01

    CC2530有哪些定时器

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

    如何使用cc2530定时器来产生pwm波?

    如何使用cc2530定时器来产生pwm波?
    发表于 01-25 06:55

    CC2530单片机定时器的原理是什么?怎么使用?

    CC2530单片机定时器的原理是什么?怎么使用?如何通过CC2530实现了0.5S的定时控制LED灯1Hz闪烁?
    发表于 01-25 06:22

    CC2530 定时器T1的使用

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

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

    CC2530 定时器应用任务分析知识储备相关寄存知识T1CTL-定时器1的控制和状态T1CCTL0-定时器1通道0捕获/比较控制T1
    发表于 11-29 18:51 7次下载
    <b class='flag-5'>CC2530</b> <b class='flag-5'>定时器</b>应用

    CC2530定时器3

    LED1的亮灭周期为2s。文章目录CC2530定时器3完成对LED1周期为2s控制前言一、定时器3和定时器1哪些不同?二、使用步骤1.
    发表于 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波周期,比较寄存
    发表于 11-29 20:21 6次下载
    <b class='flag-5'>cc2530</b>学习笔记一

    cc2530 睡眠定时器唤醒功耗模式PM2

    功能描述cc2530 睡眠定时器唤醒功耗模式PM2//(睡眠定时器方式唤醒)#include <ioCC2530.h>typedef unsigned char
    发表于 11-29 20:36 9次下载
    <b class='flag-5'>cc2530</b> 睡眠<b class='flag-5'>定时器</b>唤醒功耗模式PM2

    CC2530授课笔记】⑦ 定时器的原理及应用

    摘要本篇文章基于CC2530单片机,介绍了定时器的原理及使用,通过定时器1实现了0.5S的定时,控制LED灯1Hz闪烁。完整的源代码#include <ioCC
    发表于 11-30 09:21 12次下载
    【<b class='flag-5'>CC2530</b>授课笔记】⑦ <b class='flag-5'>定时器</b>的原理及应用

    CC2530查询方式使用定时器

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