单片机两个外部中断同时工作而不互相干扰

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:11:21
我要同时使用89S52的INT0和INT1,用来接收外部中断信号,并分别用数码管显示中断次数,如何实现同时工作而不互相干扰,软件上如何实现,主函数如何写?

下面的程序,主函数该怎么改?

#include <reg52.h>

code unsigned char table1[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9

char code table2[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //0-F

unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位

void delay(unsigned int cnt)
{
while(--cnt);
}

void main(void)
{

EA =1; //全局中断开
EX0=1; //外部中断0开
EX1=1; //外部中断1开
IT0=1; //边沿触发

while(1)

{
if(P3^2!=P3^2)
{
EX0=0;
P2=8;
P0=0X3F;
EX0=1;
}

if(P3^3==P3^3)
{
EX1=0;
P0=Dis_Shiwei;//显示十位
P2=0;

如果不设置的话,中断0的优先级比中断1的优先级高。

或者你也可以设置一下。

总之,它俩有优先级的关系,所有,你所得说的干扰就是谁把谁打断的关系!!!

进入中断服务程序时,先禁止中断使能,执行完本次中断,再恢复。