STC单片机两个定时器一起用,怎么低优先级的中断不能执行呢
有知道的朋友吗?程序如下:
#include<STC89C5xRC.H>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P0^0;
sbit k2=P0^1;
void delayms(uint z)
{
uint y;
for(;z>0;z--)
for(y=100;y>0;y--);
}
void to0int() interrupt 1
{
k1=1;
delayms(300);
k1=0;
delayms(300);
TR0=0;
}
void to1int() interrupt 5
{
EA=0;
k2=1;
delayms(300);
k2=0;
delayms(300);
EA=1;
}
void main()
{
TMOD=0x02; //定时器0模式选择
TL0=TH0=0; //定时器0赋值
TL2=TH2=0xff;
TR0=1; //定时器0开始
TR2=1;
ET0=1; //定时器0溢出中断允许位
ET2=1;
EA=1; //开总中断
while(1)
{
}
}
总是执行中断1,中断5根本没有机会得多执行,实际应用的时候,单片机开启多个定时中断,应该可以的,对吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
恩,知道这个关系,低优先级会被不停的中断,但,我在低优先级中关掉EA,也不行啊
#define uint unsigned int
#define uchar unsigned char
sbit k1=P0^0;
sbit k2=P0^1;
uint m,n;
void delayms(uint z)
{
uint y;
for(;z>0;z--)
for(y=100;y>0;y--);
}
void to0int() interrupt 1
{
m++;
if(m>60000)
{
m=0;
}
}
void to1int() interrupt 3
{
n++;
if(n>60000)
{
n=0;
}
}
void main()
{
TMOD=0x22; //定时器0模式选择
TL0=TH0=0; //定时器0赋值
TL1=TH1=0xff;
TR0=1; //定时器0开始
TR1=1;
ET0=1; //定时器0溢出中断允许位
ET1=1;
EA=1; //开总中断
while(1)
{
if(m=50)
{
EA=0;
k1=0;
delayms(500);
k1=1;
delayms(500);
EA=1;
}
if(n=60000)
{
EA=0;
k2=1;
delayms(500);
k2=0;
delayms(500);
EA=1;
}
}
不在中断程序中延时,这样子可以
一周热门 更多>