程序在这里
void main()
{
WDTCTL=WDTPW+WDHOLD;
P1SEL |=0x0E;
P1DIR |=0x0F;
CCTL0 = OUTMOD_4 +CCIE;
CCTL1 = OUTMOD_4 +CCIE;
CCTL2 = OUTMOD_4 +CCIE;
TACAL = TASSEL_1 +MC_2 + TAIE;
_BIS_SR(LPM3_bitS + GIE);
}
#pragma vector = TIMERA0_VECTOR
__inturrput void timea_0 ()
{ CCR0+=4;}
#pragma vector = TIMERA1_VECTOR
__inturrput void timea_1 ()
{
switch(TAIV)
{
case 2:CCR0+=16;
break;
case 4:CCR0+=100;
break;
}
我就是不知道这个中断怎么触发使输出那几个频率的
连续计数模式不是在计数到0FFFF为止,才自动清零。 之中 CCRX这些没有付值怎么触发中断
CCRX这些中断触发的顺序是怎么样的 这里有两个中断向量 这3个CCRX的中断又怎么判断
请高手指点 小弟感激不仅尽
MSP430的CCRx中断在连续计数模式下怎么产生中断的
答案:2 悬赏:10
解决时间 2021-02-07 01:52
- 提问者网友:你在我心中是最美
- 2021-02-06 03:02
最佳答案
- 二级知识专家网友:為→妳鎖鈊
- 2021-02-06 04:38
首先,如果你只是用连续计数模式,哪么CCTLx(比较捕获寄存器)根本可以不设置,
其次,CCR0的初值没有设置,中断只会在定时器溢出时才能发生。
然后,第二个中断,你是想用CCR1,CCR2吧,,也是因为你没设置初值,TAIV的值只会是10,也就是溢出中断产生才会进中断。case中的2,4是计数值到CCR1,2而使中断标志置位的。
。。。
最后,你每次中断后,只是把CCR0的值加4,没有做其它任何事,啥效果都没有。
CCRX中断触发是这样的:
首先是对它们付初值,在计数达到CCRX中的其中一个的数字时,产生中断,。然后根据TAIV的值作出你想做的事情。接着继续主函数,当达到第二个CCRX值时,才产生中断,重复以上动作。
例如:
CCR0=200;CCR1=500;CCR2=2000;
当计数到200时,中断产生,进入到值为TIMERA0_VECTOR的中断,执行中断中的程序。然后继续主函数,当计数到500时,进入TIMERA1_VECTOR中断,这时TAIV=2,执行case2后的程序。继续计数到2000时,进入TIMERA1_VECTOR中断,这时TAIV=4,执行case4后的程序
其次,CCR0的初值没有设置,中断只会在定时器溢出时才能发生。
然后,第二个中断,你是想用CCR1,CCR2吧,,也是因为你没设置初值,TAIV的值只会是10,也就是溢出中断产生才会进中断。case中的2,4是计数值到CCR1,2而使中断标志置位的。
。。。
最后,你每次中断后,只是把CCR0的值加4,没有做其它任何事,啥效果都没有。
CCRX中断触发是这样的:
首先是对它们付初值,在计数达到CCRX中的其中一个的数字时,产生中断,。然后根据TAIV的值作出你想做的事情。接着继续主函数,当达到第二个CCRX值时,才产生中断,重复以上动作。
例如:
CCR0=200;CCR1=500;CCR2=2000;
当计数到200时,中断产生,进入到值为TIMERA0_VECTOR的中断,执行中断中的程序。然后继续主函数,当计数到500时,进入TIMERA1_VECTOR中断,这时TAIV=2,执行case2后的程序。继续计数到2000时,进入TIMERA1_VECTOR中断,这时TAIV=4,执行case4后的程序
全部回答
- 1楼网友:花一样艳美的陌生人
- 2021-02-06 05:37
搜一下:MSP430的CCRx中断在连续计数模式下怎么产生中断的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯