[应用方案] 单片机实现两个以上外部中断

[复制链接]
5153|64
 楼主| averyleigh 发表于 2024-8-25 06:08 | 显示全部楼层 |阅读模式

拓展中断设计思路:外部中断由P3.2或者P3.3引脚输入,通过IT0位来决定是低电平有效还是下降有效,一旦输入信号有效,即向CPU发出申请中断,并建立中断标志位。所以只要能让K1、K2、K3的按键变为低电平的时候能够触发触发P3.2或者P3.3引脚,中断就会发出请求。

     硬件实现电路如下图所示:这里按键K1、K2、K3三个按键状态通过一个逻辑与门接到P3.2引脚,这样只要有其中一个按键按下与门都会输出低电平,即P3.2引脚被接地,中断信号有效,则中断成功。

按键软件处理:当K1、K2、K3的按键变为低电平的时候能够触发触发P3.2或者P3.3引脚,中断就会发出请求。但是具体是那个按键按下的这个就需要中断服务函数中,根据P1.5、P1.6、P1.7的高低电平状态来判断。当P1.5的为低电平时,表示按键K1按下;当P1.6的为低电平时,表示按键K2按下;当P1.7的为低电平时,表示按键K3按下。具体处理代码如下:

//-----------------------------------------------------------------
// INT0中断函数处理
//-----------------------------------------------------------------
void INT0_ISR() interrupt 0
{
   if(K1==0)
     {
        delay_ms(10);
          if(K1==0) if(LED_1==1)
         { F_IN1=1;F_IN2=1;LED_1=0;}else
         { F_IN1=1;F_IN2=0;LED_1=1;}
     }
     if(K2==0)
     {
        delay_ms(10);
          if(K2==0) if(LED_2==1)
         { F_IN3=1;F_IN4=1;LED_2=0;}else
         { F_IN3=1;F_IN4=0;LED_2=1;}
     }
     if(K3==0)
     {
        delay_ms(10);
          if(K3==0) if(LED_3==1)
         { RELAY=1;LED_3=0;}else
         { RELAY=0;LED_3=1;}
     }

}


sdlls 发表于 2024-9-3 16:01 | 显示全部楼层
51单片机本身只有两个外部中断源(INT0和INT1)。要扩展更多的外部中断,需要使用其他方法,例如使用中断扩展芯片(如8259A)或者通过软件编程的方式来模拟中断。
timfordlare 发表于 2024-9-3 17:26 | 显示全部楼层
通过二极管将多个外部中断源并联到同一个中断引脚上,通过软件判断是哪个外部中断源触发的中断。但这种方法在中断服务程序中需要软件查询,可能会影响中断响应的实时性。
beacherblack 发表于 2024-9-3 18:12 | 显示全部楼层
51 单片机通常有两个外部中断引脚(INT0 和 INT1),若要扩展两个以上外部中断,需要考虑使用其他具有中断功能的外设或通过逻辑组合的方式来实现。例如,可以使用定时器 / 计数器的溢出中断、串行通信的接收和发送中断等作为额外的中断源。
linfelix 发表于 2024-9-3 18:50 | 显示全部楼层
需要额外的软件开销来实现中断检测逻辑。
maudlu 发表于 2024-9-3 21:11 | 显示全部楼层
外部中断信号可能会受到噪声干扰,需要采取适当的滤波措施。
earlmax 发表于 2024-9-5 09:59 | 显示全部楼层
通过设置定时器产生定时中断,然后在中断服务程序中检查外设的状态变化来模拟外部中断。
timfordlare 发表于 2024-9-5 10:45 | 显示全部楼层
51 单片机的中断系统具有优先级机制。当多个中断同时发生时,优先级高的中断会先被响应。在扩展外部中断时,需要考虑中断的优先级设置,以确保关键任务能够及时得到处理。可以通过设置中断优先级寄存器(IP)来调整各个中断的优先级。
mnynt121 发表于 2024-9-5 14:28 | 显示全部楼层
根据系统的需求,合理设置各个中断的优先级,以确保中断嵌套的正确性和稳定性。高优先级中断应该只在必要时才打断低优先级中断的执行,以减少系统的响应时间和复杂度。
elsaflower 发表于 2024-9-5 15:33 | 显示全部楼层
中断响应时间会影响系统的实时性能,因此在设计中断系统时需要考虑中断响应时间的要求。
lzbf 发表于 2024-9-6 14:56 | 显示全部楼层
确定中断触发方式是电平触发还是边沿触发,并设置相应的寄存器。
wwppd 发表于 2024-9-6 15:56 | 显示全部楼层
在扩展外部中断时,需要确保所使用的引脚不会与其他功能冲突。仔细规划引脚的使用,避免出现引脚复用导致的功能异常。
maudlu 发表于 2024-9-6 16:35 | 显示全部楼层
如果系统需要支持中断嵌套,即高优先级中断可以打断低优先级中断的执行,需要在软件设计中进行相应的处理。确保中断嵌套的逻辑正确,避免出现死锁或不确定的行为。
usysm 发表于 2024-9-6 18:56 | 显示全部楼层
51单片机的中断系统资源有限,只有两个外部中断向量。要扩展更多外部中断,通常需要通过软件轮询或者使用定时器来模拟中断。
backlugin 发表于 2024-9-6 21:54 | 显示全部楼层
如果单片机支持中断优先级(部分51单片机可能不支持),需要根据实际需求设置中断优先级,以确保重要中断能够得到及时处理。
albertaabbot 发表于 2024-9-6 22:35 | 显示全部楼层
当多个中断源同时请求服务时,要注意资源竞争问题,合理安排中断服务程序,避免冲突。
bartonalfred 发表于 2024-9-7 12:15 | 显示全部楼层
在中断服务程序中,需要清除相应的中断标志位,以避免中断服务程序被重复调用。
febgxu 发表于 2024-9-7 15:38 | 显示全部楼层
利用定时器中断周期性地检查外部中断源的状态。这种方法可以减少CPU的负担,但中断响应可能会有延迟。
backlugin 发表于 2024-9-7 16:54 | 显示全部楼层
设计电路时要注意中断信号的触发方式(上升沿、下降沿或电平触发)。
tifmill 发表于 2024-9-7 18:14 | 显示全部楼层
外部中断通常需要连接到外部设备或传感器的输出信号。确保连接正确,信号稳定,并且避免引入噪声和干扰。可以使用上拉电阻或下拉电阻来确保输入信号在空闲状态下处于稳定的电平。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

1529

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部