有帮看看吗,那个while里的可以正常运行,但是那个中断没有用,按键按下去没有反应

有帮看看吗,那个while里的可以正常运行,但是那个中断没有用,按键按下去没有反应
1

img

img

img

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7650466
  • 以下回答来自chatgpt:

    问题分析:

    按键按下去没有响应,可能涉及到硬件和软件两个方面,需要从中断源、中断处理函数、按键检测等多个方面进行排查。

    解决方案:

    1. 检查中断源:可以先检查中断向量表是否正确配置到了所需的中断服务程序,可以用调试器查看程序是否已经到达了中断服务程序的入口。
    2. 检查中断处理函数:在中断服务程序中,需要按照中断响应的硬件过程进行编写,如保存相关的寄存器,设置正确的CPSR位等。需要检查是否按照要求进行编写,是否漏掉了必要的操作。
    3. 检查按键检测:在程序中使用中断检测按键的话,可以先检查按键的硬件连接是否正确,是否存在抖动等问题,可采用软件解决消抖。如果使用的是轮询方式检测按键,需要检查是否存在死循环等问题,可以在主循环中加上延时等操作,从而不影响按键检测。
    4. 检查程序流程:可能存在while循环导致程序无法响应中断的问题,可以加入延时或者条件等待的方式,从而让程序在等待中断时不会进入死循环。
    5. 检查硬件设置:需要检查硬件是否正确连接,是否使用正确的中断线路等。

    代码示例:

    下面给出一个简单的按键检测例程,采用中断方式检测按键,实现了按键的消抖操作:

    #include <reg52.h>
    
    sbit KEY = P1^0;    // 定义按键所在的IO口
    
    void delay_ms(unsigned int t)    // 毫秒级延时函数
    {
        unsigned int i, j;
        for (i = 0; i < t; i++)
            for (j = 0; j < 1000; j++);
    }
    
    void key_init()    // 按键初始化
    {
        EA = 1;    // 开启总中断
        EX0 = 1;   // 开启外部中断0
        IT0 = 1;   // 设置外部中断0为下降沿触发
    }
    
    void key_isr() interrupt 0    // 外部中断0中断服务程序
    {
        delay_ms(50);    // 消抖延时
        if (KEY == 0)    // 判断按键是否按下
        {
            // 执行按键按下后的操作
        }
    }
    
    void main()
    {
        key_init();  // 初始化按键
        while (1)
        {
            // 执行主循环
        }
    }
    

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