关于用CCR1定时

2019-03-24 14:32发布

/*******************************************
函数名称:Init_TimerA
功    能:初始化定时器A
参    数:无
返回值  :无
调用模块:main
********************************************/
void Init_TimerA()
{
   //============比较功能===============
 TACTL |= TASSEL_1 + ID_0;   //时钟选择,时钟分频
 TACTL |= MC_1 + TACLR;  //计数模式选择,清TAR
 CCR1 = 16384;    //设定中断间隔
 CCTL1 |= CCIE;    //CCR0中断允许
 _EINT();     //中断允许 
}   /*******************************************
函数名称:Timer_A1
功    能:定时器A CCRx(x=1,2)中断服务程序  
参    数:无
返回值  :无
********************************************/
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void)
{
  
}   按理说应该0.5s进一次中断的,可怎么试都不行,求大虾??? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
whgwuhan
1楼-- · 2019-03-24 22:20
<

    好烦人呀!为了解决你这个问题,我搞了半个小时,才找到问题出在哪里!

   主要是CCR1这点儿的问题,应该用CCR0的,为什么呢?结论:

CCRx是捕获/比较寄存器
用做捕获时:捕获的同时TAR的值会传给CCRx,用来测算周期是很好的方法,一般捕获用法时无须设置参数。
用作比较时:CCR0一般用来设置输出电平的转换时机,就是TAR计数到CCR0时输出电平发生相应的变化(输出方式可以设置);也可以将CCR0设置为最大值,此时CCRx(x:1或2)用来设置输出电平转换的时机,即TAR计数到CCRx时输出电平转换,计数到CCR0时重新开始计数。
修改一下程序,再试试吧,应该没问题的!
Feeling_atHome
2楼-- · 2019-03-24 22:31
 精彩回答 2  元偷偷看……
chenwei6991628
3楼-- · 2019-03-24 23:22
寄存器太多,一时半会记不住
顺理成章
4楼-- · 2019-03-25 05:20
对,该是CCR0=16384
5xue
5楼-- · 2019-03-25 06:22
 精彩回答 2  元偷偷看……
终极菜鸟
6楼-- · 2019-03-25 10:57
ccr0的优先级最高,和其它的CCR1和CCR2处理不是一样的!

一周热门 更多>

相关问题

    相关文章