80C51单片机中断优先级控制寄存器IP

#include <reg51.h>
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main()
{
unsigned char design[9]={0xFF,0xFE,
0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
unsigned char a;
for(;;)
{
for (a=0;a<9;a++)
{
Delay(500);
P1=design[a];
}
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
IP=0;
}
}
void int0_int(void) interrupt 0
{
for(;;)
{
P1=0x0f;
Delay(500);
P1=0xf0;
Delay(500);
}
}
void int1_int(void) interrupt 2
{
for(;;)
{
P1=0xff;
Delay(500);
P1=0;
Delay(500);
}
}

这个程序中IP是如何设定中断优先级的?
这个程序中为什么要用两个(EX0=1;EX1=1;)允许外部中断?外部中断触发控制位(IT0、IT1)也为什么要设连个?

小弟是菜鸟,请大虾帮帮小弟。

他这里有设中断优先级的,那句IP=0;就是在设置中断优先级,但其实没什么用,单片机在复位时,IP是被清零的,所有中断优先级是按照硬件优先级来执行的,所以这句有和没有是一样的。至于为什么要用两个(EX0=1;EX1=1;)允许外部中断,他两个外部中断源都用到了,所以都要开了。而IT0、IT1是设置外部中断触发方式的,所以也要设置了追问

EA=1;//开放总中断
EX0=1;//允许外部中断0中断
EX1=1;//允许外部中断1中断
IT0=1;//设置外部中断0为边沿中断方式
IT1=1;//设置外部中断1为边沿中断方式

小弟还有一事不理解,“1”应该是高电平的,我看前面的资料,一般是在低电平情况向是允许操作的。为什么这里都是在高电平情况下允许操作呢?

追答

编译器里规定是高电平有效,这个是默认的,没有为什么

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-22
IP寄存器结构如下: -- -- PT2 PS PT1 PX1 PT0 PX0
共8位:前面2位保留,后面分别是TF2(8052才有)、串行口、TF1、INT1、TF0、INT0
将对应位设为1如PX0=1,就标志该位为最高中断优先级。
EX0和EX1都是IE中断启用寄存器中的两位,分别是启用INT0和INT1的中断开关。EX0=1即启用INT0中断功能。
IT0和IT1是定时器/计数器控制寄存器TCON中的信号触发方式追问

EA=1;//开放总中断
EX0=1;//允许外部中断0中断
EX1=1;//允许外部中断1中断
IT0=1;//设置外部中断0为边沿中断方式
IT1=1;//设置外部中断1为边沿中断方式

小弟还有一事不理解,“1”应该是高电平的,我看前面的资料,一般是在低电平情况向是允许操作的。为什么这里都是在高电平情况下允许操作呢?

追答

就是高电平的时候时候允许工作啊,什么资料说低电平工作啊

相似回答