新手程序求教 = =

2019-07-28 19:18发布

定时器A输出单元实验:ACLK=TACLK+LFXTI=32768Hz,利用TimerA输出周期为 512/32768=15.625ms,占空比分别为75%和25%的PWM矩形波

#include<msp430x14x.h>
void main(void)
{
     WDTCTL = WDTPW + WDTHOLD;
     TACTL = TASSEL1 + TACLR;
     CCTL0=0X00;
     CCTL1=0X00;
     CCR0=512-1;
     CCTL1=OUTMOD_7;
     CCR1=384;
     CCTL2=OUTMOD_7;
     CCR2=128;
     P1DIR |= 0X04;
     P1SEL |=0X04;
     P2DIR |=0X01;
     P2SEL |=0X01;
     TACTL |= MC0;
           for(; ;)
          {
              _BIS_SR(LPM_bits);
             _NOP();
           }
}
初学者看的晕乎乎的,别的还能将就明白,设置PWM周期的语句CCR0=512-1,为什么要减一啊?高手能不能帮忙给讲解下= =,实在弄不懂·····

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
myqq12
1楼-- · 2019-07-29 00:47
图中的中断产生是CCR0记到0的时候产生的
chijiemole
2楼-- · 2019-07-29 00:51
myqq12 发表于 2015-1-22 11:14
图中的中断产生是CCR0记到0的时候产生的

问题可能有些白痴多见谅= =,我想了还是有些疑问···输出模式里会产生中断么?
这个程序里也没有开中断的语句,我自己理解的就是当TAR中的计数值等于CCR0时,EQU0就置1了,从而导致PWM波高电平,所以从0记到512是513个时钟周期,随意要减一····但看过程序后投这个时序图我就混乱了···有三个问题:
1、为什么EQUx在n-1的时候就置位了?
2,、为什么EQU0不在变化为CCR0的地方置位反而跑到变化为0 的时候?
3,最后那个延迟是怎么回事······
5CD85A5E8ED82AC0E223CE2EB5F76B19.png


51xlf
3楼-- · 2019-07-29 04:01
从0开始计数。

一周热门 更多>