CC2530用定时器3完成对LED1周期为2s控制

首先大家需要了解的是CC2530有4个定时器,分别是,定时器1~4和睡眠定时器,我们常用的是定定时器1,可是今天看到课后的习题需要用定时器3,来完成LED1的亮灭周期为2s。

文章目录

    • CC2530用定时器3完成对LED1周期为2s控制
  • 前言
  • 一、定时器3和定时器1哪些不同?
  • 二、使用步骤
    • 1.配置LED1
    • 2.配置定时器3
    • 3.完成中断函数
  • 三、完整代码
  • 总结

前言

如果我们需要利用定时器3,那无非就是配置定时器3的寄存器,完成对中断函数的操作。相对于定时器1,定时器3有哪些不同?


一、定时器3和定时器1哪些不同?

定时器1是一个 “16位 ”的定时器,具有5个独立的捕获/比较通道。而,定时器3是一个 “8位” 的定时器,它只有2个独立的捕获/比较通道。位数不同,意味着最大值不同,16位的最大值是0xFFFF即65535。而8位的最大值是0xFF即255。

二、使用步骤

1.配置LED1

代码如下(示例):

void LED_Init(void){P0SEL &=~0x03;   //普通IOP1DIR|=0x03;    //输出LED0=0;//熄灭LED0LED1=0;//熄灭LED1
}

2.配置定时器3

代码如下(示例):

void Timer1_Init(void){EA = 1;              //总使能IEN1  |= 0x08;       //定时器3中断使能T3CTL |= 0x08;      //使能中断溢出  T3CTL |= 0xE0;      //128分频T3CTL &= ~0x03;     //自由运行模式T3CTL |= 0x10;       //启动定时器}

3.完成中断函数

代码如下(示例):

#pragma vector = T3_VECTOR
__interrupt void T3_INT(void){if(count++>245)//0.5{flag++;count=0;}}

三、完整代码

#include "ioCC2530.h"
#define LED0 (P1_0)
#define LED1  (P1_1)int count=0;
int flag=0;/**************延时函数*********/
void delay(unsigned int time)
{unsigned int i;unsigned char j;for(i=0;i<time ;i++)for(j=0;j<240;j++){asm("NOP");asm("NOP");asm( "NOP" );}
}
/**********初始化LED************/
void LED_Init(void){P0SEL &=~0x03;   //普通IOP1DIR|=0x03;    //输出LED0=0;//熄灭LEDLED1=0;
}/*********初始化Timer3*********/
void Timer3_Init(void){EA = 1;              //总使能IEN1  |= 0x08;       //或T3IE = 1;T3CTL |= 0x08;      //使能中断溢出  T3CTL |= 0xE0;      //128分频T3CTL &= ~0x03;     //自由运行模式T3CTL |= 0x10;       //启动定时器}void main(void)
{LED_Init();Timer3_Init();while(1){if(flag==2){   //flag=2,说明已经熄灭了1s,这时LED1亮LED1=1;        }else if(flag==4){  //flag=4,说明已经点亮1s,这时熄灭LED1=0;flag=0;     //flag清零}}}/******中断函数*****/
#pragma vector = T3_VECTOR
__interrupt void T3_INT(void){if(count++>245) //当count大于245,意味着0.5s过去了{flag++;count=0;}}

总结

第一,对于定时器3的配置,数据手册里有详细的寄存器说明。第二中断函数中,245是通过这样演变而来的

  • 0.5s/(1/16M)*128=62500
  • 62500/255约=245

因为8位的最大值是255,所以除以62500需要245,也就是count大于245时,相当于完成了0.5s的计时

一共就分为3步:

  1. 配置LED
  2. 配置定时器3
  3. 中断函数

多思考,多练习,总会明白的。

CC2530定时器3相关推荐

  1. CC2530定时器1使能

    CC2530定时器1 CC2530有5个定时器(定时器1,定时器2,定时器3,定时器4,睡眠定时器),定时器1是一个16位定时器,有3种模式分别是自由运行模式.模模式.正计数/倒计数模式. 1)自由运 ...

  2. CC2530 定时器应用

    CC2530 定时器应用 任务分析 知识储备 相关寄存器知识 T1CTL-定时器1的控制和状态 T1CCTL0-定时器1通道0捕获/比较控制 T1CC0H和T1CC0L-定时器1通道0捕获/比较值的高 ...

  3. 8、ZigBee 开发教程之基础篇—CC2530 定时器T3的使用

    文章目录 1.实验目的 2.实验设备 3.实验相关电路图 4.实验相关寄存器 5.源码分析 1.实验目的 1)通过实验掌握 CC2530 芯片 GPIO 的配置方法 2)掌握 Led 驱动电路及开关 ...

  4. CC2530定时器T1产生PWM

    最近搞PWM波输出,参考了一下网上的代码自己总结出CC2530 PWM的配置过程:(此处以T1为例) 配置PWM模式需参考CC2530用户手册中"表7-1 外部设备I/O引脚映射" ...

  5. cc2530 定时器控制LED灯以不同的频率闪烁

    1.cc2530有两个LED灯: 定时器有4种工作方式; 可通过定时器 T1 以及 定时器 T3同时来分别控制LED灯的闪烁,我们让定时器1处于8分频的自由模式下,T1 为16位的计数器,计数器每8/ ...

  6. cc2530定时器和捕获比较_STM32学习日志——输入捕获实验(20.06.26)

    今天学习的是通用定时器的第三个功能--输入捕获,它的作用是检测到TIMx_CHx的边沿跳变(上升沿或下降沿),即可将当前定时器的存放在捕获/比较寄存器中. 输入捕获滤波器可以通过TIMx_CCMR1的 ...

  7. cc2530定时器和捕获比较_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weixi ...

  8. cc2530定时器和捕获比较_STM32定时器PWM和输入捕获事件

    这几天在调试STM32407的定时器扩展功能,顺便研究了下利用定时器完成PWM波比较输出以及输入捕获事件, 捕获输入波形的高电平时间,具体代码如下,供参考学习,如有问题,请留言随时沟通!main函数部 ...

  9. CC2530定时器时钟周期 频率 分频 计时器计时时长理解

    1MHZ=1000KMZ=1000000HZ   时钟周期 产生一个时钟信号所需时间 晶振震荡一次所需时间 产生两个时钟信号的间隔时间   时钟频率xHZ 一秒产生x个时钟信号   时钟频率xMHZ ...

最新文章

  1. 转 java学习笔记(必看经典)
  2. arm linux嵌入式网络控制系统,基于ARM uCLinux的网络控制系统设计与实现
  3. 逐渐增高_钩机加长臂的销量持续增高成为热点话题!
  4. Java并发编程之阻塞队列
  5. 数据分析的流程是啥样?
  6. Vue computed 带参数
  7. 麒麟信安:“一云多芯”信创云桌面解决方案引领者
  8. 20个令程序员泪流满面的瞬间
  9. Oracle安装图文详解!
  10. 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
  11. cat /proc/cpuinfo命令详解
  12. GPU图形加速型云服务器是什么?
  13. python操作crontab定时任务
  14. D-S envidence theory(DS 证据理论)的基本概念和推理过程
  15. BIGWORLD问题集
  16. 华腾java_北大青鸟华腾学校 一个java痴迷者的独白
  17. 干货!深度描述聚类——加州大学戴维斯分校计算机系博士生张洪境
  18. html5模拟真实摇骰子,Axure教程:模拟真实摇骰子交互
  19. 毫秒数转换为时间计时天数
  20. 一招教你使用微信隐藏表情!

热门文章

  1. 结城浩的《图解设计模式》设计模式之Adapter模式的理解
  2. 「山东城商行联盟」数据库准实时数据采集系统上线,DataPipeline助力城市商业银行加快数字化转型
  3. postman调用rpc服务器接口_RPC 原理
  4. (转)使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页
  5. 程序员该如何学习新知识
  6. C# 流水号、顺序号(范围001-ZZZ,31进制,0-9,B-Z,26个字母去除A/E/I/O/U)
  7. toad怎么打开oracle,toad for oracle如何使用?
  8. matlab计算Weibull分布的均值与方差
  9. java架构学习——5. 线程池原理剖析锁的深度化
  10. pytorch-unsqueeze用法