将计数器最大值设为0.1秒
时间: 2024-03-22 08:42:58 浏览: 43
计数器(1秒)
好的,以下是修改后的代码:
```c
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
P1DIR |= BIT2; // 将 P1.2 引脚设为输出
P7DIR &= ~BIT0; // 将 P7.0 引脚设为输入
TA0CTL = TASSEL_2 + MC_0 + TACLR; // 选择 SMCLK 时钟源,停止计数器,清除计数器
TA0CCR0 = 3277; // 设置计数器最大值为 0.1 秒
TA0CCTL0 = CCIE; // 允许比较中断
__bis_SR_register(GIE); // 开启全局中断
while (1); // 程序运行中,一直循环等待按键按下
}
#pragma vector=TIMER0_A0_VECTOR // 定时器比较中断服务函数
__interrupt void Timer_A(void)
{
static unsigned char flag = 0; // 定义标志变量
if ((P7IN & BIT0) == 0) // 判断按键是否按下
{
if (flag == 0) // 如果标志位为 0,表示是第一次按下按键
{
P1OUT |= BIT2; // 将 P1.2 引脚输出高电平,点亮小灯
TA0CCR0 = 32768 * 3; // 设置计数器最大值为 0.3 秒
flag = 1; // 将标志位置为 1
}
else // 如果标志位为 1,表示是第二次按下按键
{
P1OUT &= ~BIT2; // 将 P1.2 引脚输出低电平,熄灭小灯
TA0CCR0 = 3277; // 设置计数器最大值为 0.1 秒
flag = 0; // 将标志位清零
}
}
}
```
修改后的程序将计数器最大值设置为 0.1 秒,即每 0.1 秒检测一次按键是否按下。当按下按键时,如果标志位为 0,表示是第一次按下按键,将 P1.2 引脚输出高电平,点亮小灯,并将计数器最大值设置为 0.3 秒,标志位置为 1。当按下按键时,如果标志位为 1,表示是第二次按下按键,将 P1.2 引脚输出低电平,熄灭小灯,并将计数器最大值设置为 0.1 秒,标志位清零。
阅读全文