为什么这段陈程序CCR1计数中断不能一直进行啊!

2019-03-24 11:45发布

以下的程序,用CCR0计数可以让LED闪烁,为什么换了CCR1计数中断不能一直进行,让LED显示闪烁啊 !#include "msp430x14x.h"void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  P4DIR|=0x02;
  TACTL=TASSEL_1+MC_1;
  CCTL1=CCIE;
  CCR1=1500;
  _EINT();
  _BIS_SR(CPUOFF);
 
} #pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
  P4OUT^=0x02;
  CCR1=1500;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
3g465
2019-03-25 09:17
版主不在,那我先试着回答一下好了。
1.CCR1,CCR2的值在三种模式下都要小于CCR0
2.CCR1和CCR2的值不会在中断后清除的。
3.LZ的例子是否来自TI的某个例程?我估计TI是为了展示下连续模式下的PWM输出,实际上用增模式会比较方便。而且TA有7种不同的输出模式,配置成不同的模式输出的结果也会不同。
我这里举一个具体的例子
计数器设置为 连续模式 ,CCR1输出模式设置为 OUTMODE4,即 翻转。
连续模式计数值至0XFFFF,如果CCR1值为16的话,那么当TAR计数值16,就会进入中断,输出翻转,直至计数溢出后计数值复位至0重新开始计数~这样往复。
如果在中断中加入CCR1 += 16;语句,这样CCR1的值会在每次中断后加16,相当于每计数16输出翻转一次,这样就形成了一个50%占空比的PWM波。
这个就是LZ说的偏移量吧,这个值取决于你要设的频率的。

4.无论是CCR1值还是计数值在溢出后都会从0开始计数的

一周热门 更多>

相关问题

    相关文章