工具与软件:
我将使用 FR2311来驱动超声波传感器、传感器的输出将加载到端口2.1中。 可以使用示波器捕获输入脉冲。 正在 CCS 中调试。
但我无法进入中断、并且我已经多次检查了配置。 下面是代码:
#include
unsigned int capture_up = 0;
unsigned int capture_down = 0;
char capture_number = 0;
char state = 0x00;
unsigned long distance_in_CM = 0;
void Ultrasonic_trig (){
P2OUT |= BIT0;
__delay_cycles (8);// Delay (延迟)以生成脉冲
P2OUT 且=~BIT0;
}
int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
P2OUT 且=~BIT0;// P2.0无启动输出
P2DIR |= BIT0;// P2.0输出
P2SEL0 |= BIT1;// P2.1选项选择、
PM5CTL0 &=~μ H LOCKLPM5;
TB1CTL = TBSSEL__SMCLK | ID_0 | MC_2 | TBCLR | TBIE;
TB1CCTL1 = CM_1 | CCIS_1 | SCS | CAP | CCIE;
___ bis_SR_register (GIE);
while (1){
ultrig();
__delay_cycles (80000);//延迟
}
}
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector = Timer1_B1_vector
__interrupt void Timer1_B1_ISR (void)
#elif defined (_GNUC__)
void __attribute__(((interrupt (Timer1_B1_vector))) Timer1_B1_ISR (void)
#else
错误编译器不受支持!
#endif
{
开关(__EVEN_IN_RANGE (TB1IV、TB1IV_TBIFG))
{
情形0:break;//无中断
案例2:
状态= TB1CCTL1 >> 14;
TB1CCTL1并且=~CCIFG;//清除标志
if (TB1CCTL1 & CM_1){//开始在上升沿捕捉高电压
CAPTURE_UP = TB1CCR1;
TB1CCTL1 &=~CM_1;
TB1CCTL1 |= CM_2;
如果(TB1CCTL1 & CM_2){、则另选
CAPTURE_DOWN = TB1CCR1;
Distance_in_CM =(CAPTURE_DOWN - CAPTURE_UP)* 0.34/2;
TB1CCTL1 &=~CM_2;
TB1CCTL1 |= CM_1;
其他
break;//未使用 CCR1
案例4:断路;//未使用 CCR2
案例6:break;//保留
案例8:break;//保留
案例10:中断;//保留
案例12:中断;//保留
案例14:
TB1CTL &=~μ H TBIFG;
if (capture_down < capture_up){
CAPTURE_NUMBER ++;
}
break;//溢出
默认值:中断;
}
}