问题:外部中断异常后不能进入中断程序
描述:以前用12C56做的系统,基本调试完毕,考虑硬件等其他问题换成15F204EA,外部中断是作为一个时钟检测用的,所以速度有些高,但这不是主要问题,因为在12C56正常的基础上将速度放低了好几倍还是会出现异常。主程序有监视,没有死机,程序没有跑飞。外部中断随即次数后就产生异常,然后再也无法进入中断程序。中断程序里面尝试在中断开始执行时关中断,退出时请外部中断标志位和打开中断,现象依然存在。
下面是测试程序(急等大家帮助,先跪谢!)
void Timer0() interrupt 1 using 1
{
TH0=0xdc;
TL0=0x00; //dc00:10ms
if(KeyCmd.Delay>0) KeyCmd.Delay--;
// if(SPICmd.TimeOut<200) SPICmd.TimeOut++;
// else
// {
// SPICmd.Step=0;
// }
m_100ms++;
if (m_100ms>9)
{
if(FlashTim>0) FlashTim--;
m_100ms=0;
m_1s++;
}
if (m_1s>9)
{
LED=!LED;
m_1s=0;
if(Min<59) Min++;
else
{
Min=0;
if(Hour<11) Hour++;
else Hour=0;
}
}
}
void SclkInt() interrupt 0 using 2
{
SpiBitNum++;
if(SpiBitNum>7)
{
SpiBitNum=0;
}
IE0=0;
}
void InitSFR()
{
EA=0;
IE=0;
IP=0x01;
TCON=0x00;
TMOD=0x11;
ET0=1; //定时器0初始化
TH0=0xdc;
TL0=0x00; //预装定时0定时值
TR0=1;
IT0=1;
EX0=1; //外部中断SCLK下降沿中断
P3M1=0x00;
P3M0=0xf0;
P2M1=0x00;
P2M0=0xff;
EA=1;
}
void OutDig()
{
P16=Dig0;
P17=Dig1;
P00=Dig2;
P01=Dig3;
P34=Dig4;
P35=Dig5;
P36=Dig6;
P37=Dig7;
}
void main()
{
uchar KeepTmp;
uchar AccTmp;
ScanNum=0;
DispCmd.Item.DarkTim=7;
DispCmd.Item.LightTim=15;
SPICmd.Step=0;
InitSFR();
while (1)
{
AccTmp=Min;
DispCmd.Item.DispBuf[4]=DispTab[AccTmp%10];
AccTmp/=10;
DispCmd.Item.DispBuf[5]=DispTab[AccTmp%10];
AccTmp=SpiBitNum;
DispCmd.Item.DispBuf[6]=DispTab[AccTmp%10];
AccTmp/=10;
DispCmd.Item.DispBuf[7]=DispTab[AccTmp%10];
DispCmd.Item.DispBuf[0]=DispTab[16];
DispCmd.Item.DispBuf[1]=DispTab[16];
DispCmd.Item.DispBuf[2]=DispTab[16];
DispCmd.Item.DispBuf[3]=DispTab[16];
DigCode=0xff; //消隐
OutDig();
P2=DispCmd.Item.DispBuf[ScanNum];
DigCode=DigTab[ScanNum]; //输出位码
OutDig();
ScanNum++; //扫描字移位
if(ScanNum>7) ScanNum=0;
}
} |