请问,在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:
回复 秋之初:
那你看我发的程序有问题吗