Part Number:MSP430F5529
超声波模块不能用,好像会卡在中断#pragma vector=TIMER2_A1_VECTOR这个里面是咋回事
#include <msp430f5529.h> //蓝牙串口 void UART0_lanya() { P3SEL|= BIT3 + BIT4;//设置IO口为第二功能模式,启用UART功能 UCA0CTL1 = UCSWRST; UCA0CTL1 = UCSSEL_2; //SMCLK UCA0BR0 =78; // 16MHz 9600(see User's Guide) UCA0BR1 =0; // 16MHz 9600 UCA0MCTL=UCBRF_2+ UCOS16+UCBRS_0; UCA0CTL1 &=~ UCSWRST; P3DIR|= BIT3;//设置TXD0口方向为输出 UCA0IE |= UCRXIE; //打开中断 _EINT();//全局中断 } //蓝牙串口发送字符串 void sendstring(unsigned char *p) { while(*p!='\0') { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF=*p++; } } //电机PWM调速 void PWM_dianji_TimeA0_Init() { Dianji_Init(); //轮子电机io口初始化 P1DIR|=(BIT1+BIT2+BIT3+BIT4+BIT5); P1SEL|=(BIT1+BIT2+BIT3+BIT4+BIT5); P1DS|=(BIT1+BIT2+BIT3+BIT4+BIT5);//全力驱动 TA0CTL=MC_1+TASSEL_1+ID_0;//增模式+ACLK+1分频 TA0CCTL1=OUTMOD_7; TA0CCTL2=OUTMOD_7; TA0CCTL3=OUTMOD_7; TA0CCTL4=OUTMOD_7; TA0CCR0=1024;//周期 TA0CCR1=500;//P1.2左前轮 TA0CCR2=500;//P1.3右前轮 TA0CCR3=500;//P1.4左后轮 TA0CCR4=500;//P1.5右后轮 } //舵机PWN控制 void PWM_duoji_TimeA1_Init()//P2.0 { P2DIR|=BIT0;//输出口 P2SEL|=BIT0; P2DS|=BIT0;//全力驱动 TA1CTL=MC_1+TASSEL_1+ID_0+TACLR;//增模式+ACLK+1分频 TA1CCTL1=OUTMOD_7; TA1CCR0=1500;//周期30ms TA1CCR1=1; } void CHaoshengbo_Trig()//P2.5 { P2DIR|=BIT5; P2OUT|=BIT5;//发送高电平 delay_us(15); P2OUT&=~BIT5; delay_ms(30); } void CHaoshengbo_TimeA2_Init()//P2.4,TA2.1 { P2DIR&=~BIT4; P2SEL|=BIT4; TA2CTL = TASSEL__ACLK + ID__8 + MC_2 + TACLR + TAIE; TA2CCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0; } unsigned char data;//蓝牙 unsigned int start,end,t,distance;//超声波 void main() { WDTCTL = WDTPW + WDTHOLD;//看门狗关闭 _EINT() ;//开中断 initClock();//最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:48KHZ PWM_dianji_TimeA0_Init();//电机PWM调速 PWM_duoji_TimeA1_Init();//舵机PWN控制 UART0_lanya();//蓝牙串口 Xunji_Init(); //循迹 CHaoshengbo_TimeA2_Init();//超声波 while(1) { CHaoshengbo_Trig();//P2.5 if(t>0) { RUN_qian(); } else { Stop(); } } } #pragma vector=TIMER2_A1_VECTOR __interrupt void TIMER2_A1_ISR(void) { _DINT(); //关中断 switch(__even_in_range(TA0IV,14)) { case 0: break; //无中断 case 2: if(TA2CCTL1 & CM_1)//上升沿 { start=TA2CCR1; TA2CCTL1&=~CM_1; //清上升沿捕获 TA2CCTL1|=CM_2; //改为下降沿捕获 } else if(TA2CCTL1 & CM_2)//下降沿 { end=TA2CCR1; TA2CCTL1|=CM_1; //改为上升沿捕获 TA2CCTL1&=~CM_2; //清下降沿捕获 t=end-start; } else break;//CCR1中断 case 4: break;//CCR2中断 case 6: break;//CCR3中断 case 8: break;//CCR4中断 case 10: break;//CCR5中断 case 12: break;//CCR6中断 case 14: break;//定时器溢出 default: break; } TA2CCTL1&=~CCIFG; //清除中断响应标志 _EINT() ;//开中断 } #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR() { UCA0IFG &= ~UCRXIFG; if((UCA0IFG)&(UCRXIFG));//接收 data=UCA0RXBUF; if(data==runqian){ RUN_qian();} if(data==runhou){ RUN_hou();} if(data==runzuozhuan){ RUN_zuozhuan();} if(data==runyouzhuan){ RUN_youzhuan();} if(data==runzuoyi){ RUN_zuoyi();} if(data==runyouyi){ RUN_youyi();} if(data==stop){ Stop();} }
Yale Li:
您好,有试过单步调试吗?程序具体会卡在哪个语句?