该代码在捕获模式下作为 TB0工作。
它不会进入中断服务例程。
我在 IAR 中使用断点进行了测试
#include
#define NUMBER_TIMER_CAPTURES 20.
volatile unsigned int timerBaptureValues[number_timer_capturs];
unsigned int Index = 0;
void Start_Signal ();
void read_response ();
void main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
P2SEL1 &=~BIT1;
P2SEL0 |= BIT1;
P2DIR |= BIT1;//将数据引脚设定为输出方向
P2OUT &=~BIT1;//将输出设置为低电平
_DELAY_CYCLES (18000);//低电平持续18ms
P2DIR &=~BIT1;
P2REN |= BIT1;
TB0CTL |= TBSSEL_2 | MC_2 | TBCLR;//使用 SMCLK 作为时钟源,清除 TB0R
TB0CCTL0 |= CM_2 | CCIS_0 | CAP | SCS | CCI | CCIE;//选择输入信号
//捕获上升沿,
//使用 CCI0A=SMCLK、
//同步捕捉,
//启用捕获模式,
//启用捕捉中断
TB0CTL |= TBSSEL_2 | MC_2 | TBCLR;//使用 SMCLK 作为时钟源,清除 TB0R
_bis_SR_register (GIE);
}
// Timer0_B3 CCR0,TB 中断处理程序
#pragma vector = TIMER0_B0_vector
_interrupt void TIMER0_B0_ISR (void)
{
TB0CCTL0 &=~CCIFG;
timerBaptureValues[Index++]= TB0CCR0;
if (索引>= 20)
{
索引= 0;
}
}