概述
任务目标
用内部32MHz晶振作为时钟源,定时器1作为一个16位计数器来计时,我们将定时器1配置成8分频,自由运行模式。用轮询的方式实现D1/D2灯约0.5S闪一次,
一、分析题目
1)计算自由运行模式下最大计数时间
0xFFFF/(32MHZ/8)=0.016s
这与要的0.5秒差距很大 所以需要一个计数n来记录溢出的次数
n=0.25/0.016=15.625
2)轮询方式 即不进入写中断函数,通过在主函数中循环检查定时器1的标志位来实现LED闪烁
二、流程图
IRCON中断标志寄存器
三、程序实现
#include <ioCC2530.h>
#define LED1 P1_1
#define LED2 P0_1
char number=0; //记录溢出次数变量
void InitTime1_free(){//定时器1自由运行模式8分频32MHZ初始化
T1IE=1;
EA=1;
T1CTL|=0x01;
T1CTL|=0x04;
}
void InitIO(void){//LED初始化
P1DIR |=0x03;
LED1=0;
LED2=0;
}
void main(){
int LEDBink=0;
if(IRCON & 0x02){
IRCON &= ~ 0x02;//手动复位
number=number+1;
if(number>=15){
number = 0;
LEDBink=~LEDBink; //LED标志位翻转
}
}
if (LEDBink){
LED1=~LED1;
LED2=~LED2;
LEDBink=~LEDBink;
}
}
程序设计部分仅供参考!
最后
以上就是温柔橘子为你收集整理的CC2530定时器1控制LED任务目标的全部内容,希望文章能够帮你解决CC2530定时器1控制LED任务目标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复