TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f235 产生10个300khz 的方波

请问,在msp430f235 ,用12m的主时钟产生300khz的方波,并且是可以在输出10个方波之后保持输出高电平。保持精确性用定时器怎么去处理。

秋之初:

你好!

1、方波输出: 可以用f235的timer模块产生300khz的占空比为50%的PWM输出,并且每次比较器CCR触发的中断服务程序中进行计数,计数满10次后输出高电平;

2、输出高电平: 两种方法

                         a、到达10个计数值后,占空比改为100%

                         b、输出PWM的IO切换到GPIO,用GPIO置位,输出高电平

zhengxin yan:

回复 秋之初:

我是这样试过的,可是问题又产生啦,就是中断服务程序执行完之后,跳出不知道跳到哪里去啦?

zhengxin yan:

回复 秋之初:

还有一个问题,我怎么让他跳出中断程序?

秋之初:

回复 zhengxin yan:

中断服务程序执行完成,即返回到中断打断的程序的地方。

你是用什么触发中断?能否把代码贴出来。

zhengxin yan:

回复 秋之初:

#include<msp430f149.h>

unsigned int i;

void init_clk()

{

 unsigned int iq0;

 BCSCTL1 &=~ XT2OFF;

 do{

   IFG1 &=~ OFIFG;

   for(iq0=0xff;iq0>0;iq0–);

 }

 while((IFG1 & OFIFG)!= 0);

 BCSCTL2 |= SELM_2 + SELS;  

}

void timer_a0(void)

{

  P1SEL |= BIT1 + BIT5;

  P1DIR |= BIT1 + BIT5;

  TACCTL0 = CCIE+ OUTMOD_4;

  TACCR0 = 20;

  _EINT();

}

void main()

{

 WDTCTL = WDTPW + WDTHOLD;

 i=0;

 init_clk();

 P5SEL |= BIT4;

 P5DIR |= BIT4;

 P6DIR |= BIT1 + BIT2;

 P6OUT |= BIT1 + BIT2;

 TACTL = TASSEL_2 + MC_2;

 timer_a0();

 while(1)

 {

 }

}

#pragma vector = TIMERA0_VECTOR

__interrupt void timera0_isr(void)

{

 CCR0 += 20;

 i++;

 P1OUT ^= BIT1;

 if(i==10)

 {

   i=0;

   P1SEL &=~ BIT1;

   P1OUT |= BIT1;

   CCTL0 &=~ CCIE;

 }

}

zhengxin yan:

回复 zhengxin yan:

程序有点问题

zhengxin yan:

回复 zhengxin yan:

中断服务程序没有p1.1翻转那一行。

zhengxin yan:

回复 秋之初:

那你看我发的程序有问题吗

赞(0)
未经允许不得转载:TI中文支持网 » msp430f235 产生10个300khz 的方波
分享到: 更多 (0)