CC2530定时器3
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步:
- 配置LED
- 配置定时器3
- 中断函数
多思考,多练习,总会明白的。
CC2530定时器3相关推荐
- CC2530定时器1使能
CC2530定时器1 CC2530有5个定时器(定时器1,定时器2,定时器3,定时器4,睡眠定时器),定时器1是一个16位定时器,有3种模式分别是自由运行模式.模模式.正计数/倒计数模式. 1)自由运 ...
- CC2530 定时器应用
CC2530 定时器应用 任务分析 知识储备 相关寄存器知识 T1CTL-定时器1的控制和状态 T1CCTL0-定时器1通道0捕获/比较控制 T1CC0H和T1CC0L-定时器1通道0捕获/比较值的高 ...
- 8、ZigBee 开发教程之基础篇—CC2530 定时器T3的使用
文章目录 1.实验目的 2.实验设备 3.实验相关电路图 4.实验相关寄存器 5.源码分析 1.实验目的 1)通过实验掌握 CC2530 芯片 GPIO 的配置方法 2)掌握 Led 驱动电路及开关 ...
- CC2530定时器T1产生PWM
最近搞PWM波输出,参考了一下网上的代码自己总结出CC2530 PWM的配置过程:(此处以T1为例) 配置PWM模式需参考CC2530用户手册中"表7-1 外部设备I/O引脚映射" ...
- cc2530 定时器控制LED灯以不同的频率闪烁
1.cc2530有两个LED灯: 定时器有4种工作方式; 可通过定时器 T1 以及 定时器 T3同时来分别控制LED灯的闪烁,我们让定时器1处于8分频的自由模式下,T1 为16位的计数器,计数器每8/ ...
- cc2530定时器和捕获比较_STM32学习日志——输入捕获实验(20.06.26)
今天学习的是通用定时器的第三个功能--输入捕获,它的作用是检测到TIMx_CHx的边沿跳变(上升沿或下降沿),即可将当前定时器的存放在捕获/比较寄存器中. 输入捕获滤波器可以通过TIMx_CCMR1的 ...
- cc2530定时器和捕获比较_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...
1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weixi ...
- cc2530定时器和捕获比较_STM32定时器PWM和输入捕获事件
这几天在调试STM32407的定时器扩展功能,顺便研究了下利用定时器完成PWM波比较输出以及输入捕获事件, 捕获输入波形的高电平时间,具体代码如下,供参考学习,如有问题,请留言随时沟通!main函数部 ...
- CC2530定时器时钟周期 频率 分频 计时器计时时长理解
1MHZ=1000KMZ=1000000HZ 时钟周期 产生一个时钟信号所需时间 晶振震荡一次所需时间 产生两个时钟信号的间隔时间 时钟频率xHZ 一秒产生x个时钟信号 时钟频率xMHZ ...
最新文章
- 转 java学习笔记(必看经典)
- arm linux嵌入式网络控制系统,基于ARM uCLinux的网络控制系统设计与实现
- 逐渐增高_钩机加长臂的销量持续增高成为热点话题!
- Java并发编程之阻塞队列
- 数据分析的流程是啥样?
- Vue computed 带参数
- 麒麟信安:“一云多芯”信创云桌面解决方案引领者
- 20个令程序员泪流满面的瞬间
- Oracle安装图文详解!
- 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
- cat /proc/cpuinfo命令详解
- GPU图形加速型云服务器是什么?
- python操作crontab定时任务
- D-S envidence theory(DS 证据理论)的基本概念和推理过程
- BIGWORLD问题集
- 华腾java_北大青鸟华腾学校 一个java痴迷者的独白
- 干货!深度描述聚类——加州大学戴维斯分校计算机系博士生张洪境
- html5模拟真实摇骰子,Axure教程:模拟真实摇骰子交互
- 毫秒数转换为时间计时天数
- 一招教你使用微信隐藏表情!
热门文章
- 结城浩的《图解设计模式》设计模式之Adapter模式的理解
- 「山东城商行联盟」数据库准实时数据采集系统上线,DataPipeline助力城市商业银行加快数字化转型
- postman调用rpc服务器接口_RPC 原理
- (转)使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页
- 程序员该如何学习新知识
- C# 流水号、顺序号(范围001-ZZZ,31进制,0-9,B-Z,26个字母去除A/E/I/O/U)
- toad怎么打开oracle,toad for oracle如何使用?
- matlab计算Weibull分布的均值与方差
- java架构学习——5. 线程池原理剖析锁的深度化
- pytorch-unsqueeze用法