STC定时器2中断问题


void Timer2_Init(void)        //5微秒@12.000MHz
{
    AUXR &= 0xFB;            //定时器时钟12T模式
    T2L = 0xFB;                //设置定时初始值
    T2H = 0xFF;                //设置定时初始值
    AUXR |= 0x10;            //定时器2开始计时
    IE2|=0x04;                               //使能定时器2中断
}

这个定时器不是传统51定时器。没有EA总中断TR0计数等直接位控制。那我要按键控制这个定时器2中断的关和开怎么配置了。
if(k1==0)
Delay(10);
if((k1==0)
IE2=0x04;
else
IE2=0x00;


#include <intrins.h>
sbit k1 = P1^0; 
void Delay(unsigned char n)
{
    while (n--)
    {
        _nop_();
        _nop_();
    }
}
void Timer2_Init(void)  ////5微秒@12.000MHz
{
    AUXR &= ~0x02; // 定时器2时钟12T模式
    T2L = 0xFB;   // 设置定时初始值
    T2H = 0xFF;   // 设置定时初始值
    AUXR |= 0x10; // 定时器2开始计时
    IE2 |= 0x04;  // 使能定时器2中断
}
void main(void)
{
    Timer2_Init();
    while (1)
    {
        if (k1 == 0)
        {
            Delay(10);
            if (k1 == 0)
                IE2 = 0x04;
        }
        else
        {
            IE2 = 0x00;
        }
    }
}

看看这个对你有没有帮助

【以下回答由 GPT 生成】

问题描述:

需要在特定条件下配置STM32的定时器2中断的开关状态。具体条件如下:

  • 如果按键k1按下,则延迟10毫秒后,使能定时器2中断。
  • 如果按键k1没有按下,则禁用定时器2中断。

解决方案:

  1. 配置定时器2的时钟和定时初始值:
// 配置定时器2的时钟为12T模式
AUXR &= 0xFB;

// 设置定时初始值
T2L = 0xFB;
T2H = 0xFF;

// 开始定时器2的计时
AUXR |= 0x10;
  1. 通过按键k1来控制定时器2中断的开关状态:
// 检测按键k1的状态
if (k1 == 0) {
    // 延迟10毫秒
    Delay(10);

    // 使能定时器2中断
    IE2 |= 0x04;
} else {
    // 禁用定时器2中断
    IE2 &= ~0x04;
}

请注意,以上代码为伪代码,具体的实现可能会根据您使用的STM32型号和开发环境而有所变化。请根据实际情况进行相应调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^