司败的man 2024-05-30 20:13 采纳率: 66.7%
浏览 14
已结题

51单片机外部中断问题

我用的是普中开发版,在使用外部中断的时候发现一些问题,为什么两个外部中断都写上,只有外部中断 0 可以使用,但是两个中断分别在两个代码没有问题

#include <reg52.h>
    
typedef unsigned int u16;
    
sbit K3 = P3^2;
sbit K4 = P3^3;

sbit LED = P2^0;

void delay_10us(u16 ten_us)
{
    while(ten_us--);    
}


void exti0_init(void)
{
    
    IT0 = 1;
    EX0 = 1;
    EA = 1;
}

void exti1_init(void)
{
    
    IT1 = 1;
    EX1 = 1;
    EA = 1;
}

void main()
{
    exti1_init();
    exti0_init();
    while(1)
    {
        
    }
}


void exti0(void) interrupt 0
{
    delay_10us(1000);
    if(K3 == 0)
        {
            LED =! LED;
        }
}

void exti1(void) interrupt 1
{
    delay_10us(1000);
    if(K4 == 0)
        {
            LED =! LED;
        }
}

这段代码我想实现k3和k4都可以控制灯的亮和灭,但是只有k3好使,有没有人帮忙指正

  • 写回答

3条回答 默认 最新

  • 蓝天居士 《人工智能从入门到进阶实战》作者 2024-05-30 21:53
    关注

    记住一条铁律:中断中一定不能有延时!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 已采纳回答 9月23日
  • 创建了问题 5月30日