qq_45379364 2024-12-21 21:46 采纳率: 91.9%
浏览 30
已结题

51单片机 外部中断1 不起作用

为啥P3.3给低电平,P2灯不亮,也就是中断不起作用?


void time()        

{
    

     
    EA=1;


    EX1=1;
    IT1=0;
    IE1=1;
}

#include <REGX52.H>
#include "Delay.h"
#include "time.h"
#include "keynuber.h"


int main()
{

 void time();

  
 while(1)
 {

  }

}


        
    
void time0_zhongduan(void) interrupt 2 
{  

                
    P2=0;
   



}    
    
  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码描述的是使用外部中断进行某些操作的情境,根据给出的代码,我注意到以下几个可能的问题:

    1. 中断函数命名问题: 你定义了一个名为 time0_zhongduan 的中断函数,但你在代码中设置的是外部中断1(EX1)。因此,中断函数应该命名为 EXT_INT1_ISR 或者其它合适的名字来表示它是外部中断 1 的中断服务程序(ISR)。你的代码似乎是一个混杂的情况,可能有其他关于时间计数器的代码与此冲突。所以你应该统一命名规则,避免混淆。

    修改建议:将 void time0_zhongduan(void) interrupt 2 更改为 void EXT_INT1_ISR(void) interrupt 2 或其他符合命名规范的名称。

    1. 端口使用问题: 在中断服务程序(ISR)中你设置了 P2 端口的值为 0,意味着连接到这个端口的 LED 灯应该会熄灭(假设你已经正确连接了 LED 并配置了对应的限流电阻)。如果你没有观察到 LED 灯的变化,需要检查硬件连接是否正确,并确保 LED 灯本身没有问题。此外,还要确保没有其他代码修改了 P2 端口的值。

    2. 中断触发条件: 你设置了 IT1=0; 来表示外部中断 1 是边沿触发模式(下降沿触发)。确保你正确连接了按键或其他触发设备来产生下降沿信号。如果是电平触发模式,需要确保外部设备提供的信号符合期望的触发条件。此外,还要确保没有误将其他信号连接到该中断输入引脚。

    3. 其他可能的错误: 你的 time() 函数似乎不完整且没有调用,这可能不是你想要的功能。另外,在 main() 函数中调用 void time(); 是一个函数声明而不是函数调用,这不会产生任何实际效果。你可能需要删除这一行或将其替换为实际的函数调用。

    综上所述,你需要检查硬件连接、代码逻辑以及中断配置是否正确。如果问题仍然存在,建议逐步调试代码以定位问题所在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 12月21日