[求助] 中断

麻滴滴   2012-7-9 11:09 楼主
代码如下:
#include "msp430f149.h"

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P3DIR |=0x06;
  CCTL0=CCIE;                 //CCR0中断允许
  CCR0=20000;
  TACTL=TASSEL_2+TACLR+MC_2+TAIE;       //时钟源SMCLK,计数器清零,连续计数,溢出中断允许
  
  _BIS_SR(LPM0_bits+GIE);
}
//Timer_A0中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
  P3OUT^=0x02;
  CCR0+=20000;
}
//Timer_A3中断服务程序
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_1(void)        //读取TAIV,复位中断标志
{
  switch(TAIV)
  {
  case 2: break;
  case 4: break;
  case 10: P3OUT ^=0x04;              
      break;
  }
}
这段程序写完,我有了个疑问,希望大家帮忙解决。
就是TAR达到0FFFFh时,main函数是重头再执行还是什么,我这里想的是若是不重新执行的话CCR0的值就是不会回到20000,也就应该没了方波的效果吧。

[ 本帖最后由 麻滴滴 于 2012-7-9 11:37 编辑 ]

回复评论 (6)

是不是这个程序输出来根本就不是方波,只能是在同一个计数周期内是方波,求解答!
点赞  2012-7-11 10:56
同问啊
点赞  2012-7-18 23:52
看UserGuide中介绍TimerA的ContinousMode的图:
tmp.png
每个t0间隔之间,CCR0都增加了一定的值,例如你代码中的CCR0+=20000。
Timer值等于CCR0时才会发生TimerA0中断。所以这个逻辑(你代码中的)是可以一直稳定运行的。

例如
原先CCR0=55536,执行CCR0+=20000后CCR0=10000。
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-7-19 00:06
上一个Timer模块电路原理图的部分,我们使用的是比较模式(Cap=0),只有当TAR == CCR0是才会置TACCTL0的CCIFG标志位。

tmp.png
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-7-19 00:29

回复 5楼 elulis 的帖子

哦哦,懂了,,,整个这个里面是循环一样的,到达65535后又从0开始
原先CCR0=55536,执行CCR0+=20000后CCR0=10000。这例子很好!
谢谢了!
点赞  2012-7-19 09:35
每天早上叫醒我的不是闹钟 ,而是梦想
点赞  2012-7-19 10:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复