外部中断和定时器中断同时的问题
我在外部中断做的是红外遥控处理,P3^2口进入,下降沿触发,里面还有一个timer0,显示用12864,已经成功,可以显示123456789,我用定时器做的是一个小游戏俄罗斯方块一步步下移的定时,用矩阵键盘控制上下移动,
部分程序如下,高手解决下,谢谢
void time0() interrupt 5定是器中断
{ TF2=0;清除溢出标志
t++;
if(t==(50-5guan1)t100tquick)
{
t=0;
flagtime=1;
}
}void exter0() interrupt 0//外部中断0服务函数
{
EX0=0; //关闭外中断0,不再接收二次红外信号的中断,只解码当前红外信号
TH0=0; //定时器T0的高8位清0
TL0=0; //定时器T0的低8位清0
TR0=1; //开启定时器T0
while(IR==0); //如果是低电平就等待,给引导码低电平计时
TR0=0; //关闭定时器T0
LowTime=TH0*256+TL0; //保存低电平时间
TH0=0; //定时器T0的高8位清0
TL0=0; //定时器T0的低8位清0
TR0=1; //开启定时器T0
while(IR==1); //如果是高电平就等待,给引导码高电平计时
TR0=0; //关闭定时器T0
HighTime=TH0*256+TL0; //保存引导码的高电平长度
if((LowTime>3600)&&(LowTime<4700)&&(HighTime>3600)&&(HighTime<4700))
{
//如果是引导码,就开始解码,否则放弃,引导码的低电平计时
//次数=9000us/1.085=8294, 判断区间:8300-500=7800,8300+500=8800.
if(DeCode()==1) // 执行遥控解码功能
{
redex();
}
}
EX0=1; //开启外中断EX0
}
void time0() interrupt 5//定是器中断
{ TF2=0;//清除溢出标志
t++;
if(t==(50-5*guan1)||t>100||t>quick)
{
t=0;
flagtime=1;
}
主程序是
EA = 1; //开总中断
EX0 = 1; //使能外部中断
ET0=1; //开中断
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
TMOD=0x01;//定时器0工作方式2,TH0是重装值,TL0是初值
TR0=0;
PT2=1;
PT0=0;
我想让我的timer2一直运行,而不被外部中断0影响,我就设置了PT2=1;高优先级,但程序的timer2不能正常运行,timer2的工作方式为自动重装,迷惑中,或者别的方法。