本段程序主要用在msp430控制40k超声波测距的产生一定的pwm波形来控制触发超声波探头来发送和接收。
此部分只做超声波驱动程序。
#include<msp430f149.h>
unsigned int i;
void int_clk()
{
unsigned int iq0;
BCSCTL1 &=~XT2OFF; //打开时钟振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 |=SELM_2 + SELS; //MCLK,SMCLK时钟为XT2
}
void timera0(void) //定时器a设置
{
TACCTL0 |= CCIE;
TACCR0 = 200; //设置周期8m/200=40k
}
void timera1(void) //定时器b设置
{
P1SEL |= BIT2;
P1DIR |= BIT2;
TACCTL1 |= OUTMOD_7; //pwm输出模式7
TACCR1 = 100; //设置占空比为50%
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;
int_clk();
TACTL = TASSEL_2 + MC_1;
timera1();
timera0();
_EINT();
while(1);
}
#pragma vector = TIMERA0_VECTOR
__interrupt void timera0_isr(void)
{
i++;
if(i==10) //产生10个方波之后将占空比调整 为100%
{
TACCR1 = 215; //此处设置为215也是为了让其有点 延时保持最终输出高电平
CCTL0 &=~ CCIE;
}
} |