void Init0() interrupt 0 using 1
{
TR1 =0;
if(flag) //表示SYNC脉冲因故没有恢复出来。
{ //在此恢复一个SYNC脉冲
SYNC=0;
_nop_();
_nop_();
SYNC=1;
}
TH1 =0xb1;
TL1 =0x0F4;//定时略小于20MS
flag =1;
TR1 =1;
}
void Time1() interrupt 3 using 2
{
TR1=0;
flag=0;
SYNC=0;
_nop_();
_nop_();
SYNC=1;
}
void main()
{
TCON =0x01; /* TCON */
TMOD =0X11;
TH1 =0x0;
TL1 =0x0;
ET2 =0;
EX1 =0;
ET0 =0;
ES =0;
TR1 =0;
PT1 =1; //timer1的优先级
PX0 =1; //中断0的优先级
flag=0;
EA =1;
EX0 =1;
ET1 =1;
SYNC =1;
while(1)
{
}
}
问题:
当定时时间远小于20ms或者大于20ms时,结果正确
当定时时间略小于20ms时(如上参数),SYNC脉冲的恢复不对,有丢失现象,即可能每两个周期
才有一个。兄弟百思不得其解,最后将中断地优先级修改为PX0=0,PT1=1.则运行的结果正确。请
指点迷津。先行谢过!