*//记录第二次捕获到上升沿 可以进行显示 *//记录周期 *//关闭定时器中断使能 *//定时器清零 msp430 iar代码
时间: 2023-06-30 12:22:08 浏览: 67
好的,以下是 MSP430 在 IAR 环境下记录上升沿并计算周期的示例代码:
```c
#include <msp430.h>
unsigned int first_capture = 0;
unsigned int second_capture = 0;
unsigned int period = 0;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器
P1DIR &= ~BIT0; // P1.0 作为输入
P1SEL |= BIT0; // P1.0 配置为 TA0.0 输入
TACCTL0 = CM_3 | CCIS_0 | SCS | CAP | CCIE; // TA0.0 配置为输入捕获模式
TACTL = TASSEL_2 | ID_0 | MC_2 | TAIE; // 配置 SMCLK 时钟源,不分频,连续计数模式,开启中断
__bis_SR_register(LPM0_bits + GIE); // 进入低功耗模式并开启全局中断
while(1);
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
if(TAIV & TAIV_TACCR0) // TA0.0 中断
{
if(first_capture == 0) // 第一次捕获
{
first_capture = TACCR0; // 记录第一次捕获的时间
}
else // 第二次捕获
{
second_capture = TACCR0; // 记录第二次捕获的时间
period = second_capture - first_capture; // 计算周期
first_capture = 0; // 重置第一次捕获的时间
second_capture = 0; // 重置第二次捕获的时间
TACCTL0 &= ~CCIE; // 关闭 TA0.0 中断使能
TACCR0 = 0; // 清零计数值
}
}
}
```
以上代码实现了在 P1.0 引脚捕获上升沿,并根据捕获到的两个上升沿时间计算出周期。当捕获到第一个上升沿时,会记录下时间值;当捕获到第二个上升沿时,会计算出周期,并关闭中断使能,清零计数值。在主函数中,开启了 TA0.0 中断,并进入低功耗模式等待中断触发。
希望以上代码可以帮助您解决问题。如果您有其他问题或需要更详细的解答,请随时告诉我。