外部中断和定时器中断互补干涉,你的51单片机外部中断1和外部中断0都被使用了,不会对你使用定时器中断产生影响的,设置很简单,程序代码附后,要想是定时器中断1的优先级低于外部中断,你可以将外部中断优先级设置为高优先级,而定时器中断设置为低优先级。这样就可以了。初始化程序为:
init()
{
TMOD=0x10;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
PX0=1;
PX1=1;
PT1=0;
TR1=1;
ET1=1;
TH1=xxxxx;
TL1=xxxxx;
EA=1;
}
#include<reg51h>
#define uchar unsigned char
uchar led=0xfe;
sbit kr=P3^2;
sbit kl=P3^3;
uchar key;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
void ext0() interrupt 0
{
key=1;
while(kr==0);
}
void ext1() interrupt 2
{
key=2;
while(kl==0);
}
main()
{
EX0=1;
EX1=1;
IT0=1;
IT1=1;
EA=1;
while(1)
{
if(key==1){P1=led;led=_cror_(led,1);}
else if(key==2){P1=led;led=_crol_(led,1);}
else P1=0xff;
delay(200);
}
}
电平触发就是说只有这个信号为低电平的时候,才会发出有效信号,而边沿触发(下降沿有效)的意思是只有在发生由高电平向低电平变化的时候,此时发出的才是有效信号。假如说,你的51单片机的p32和33分别外接两个可调节高低电平的开关A和B,32是边沿触发,33是电平触发。按下A键的那一刹那,就是还没有按到底,这个过程发出的是有效信号。按下B的时候,只有按到最底部,就是实实在在的低电平的时候,才会发出有效信号。
#include<reg51h>
#define uchar unsigned char
uchar keyval=0;
sbit key=P3^2;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchar i=0;
EX0=1;
IT0=1;
EA=1;
while(1)
{
switch(keyval)
{
case 0:
P1=0xff<<i;;
delay(200);
break;
case 1:
P1=0xff>>i;
delay(200);
break;
}
i++;
i%=8;
}
}
void ext0() interrupt 0
{
keyval++;
keyval%=2;
}
流水灯:
#include<reg51h>
#include<intrinsh>
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
P0=0xfe;
while(1)
{
P0=_crol_(P0,1);
delay(200);
}
}
按键控制两个灯
#include<reg51h>
sbit led1=P1^0;
sbit led2=P1^1;
void ext0() interrupt 0
{
led1=~led1;
}
void ext1() interrupt 2
{
led2=~led2;
}
main()
{
EX0=1;
EX1=1;
IT0=1;
IT1=1;
EA=1;
while(1);
}
以上就是关于51单片机外部中断1和0都被使用了,但是还需要使用一个定时器中断,请问该怎么设置呢全部的内容,包括:51单片机外部中断1和0都被使用了,但是还需要使用一个定时器中断,请问该怎么设置呢、求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢、当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)