中断服务程序执行后回不去了,不知道到哪里了?
今天是遇到鬼了,at89c51执行外部中断0的服务程序后不知道到哪里去了,没法测试。有大师帮忙解决吗?
main(){
init_serial();
while(1){
if(dyqq){
sendbyte(0x87); //向上位机发送0x87
dyqq=0; //bit 变量
}
p11=!p11;//p1^1脚
}
}
void comm() interrupt 4 using 3{
if(ti){ti=0;return;}
sendbyte(sbuf);
return;
}
void ext0() interrupt 0 using 2{
tr0 =0;
th0 =0;
tl0 =0;
count =0; //计数器
tr0 =1; //开启定时器0
return;
}
void timer0() interrupt 1 using 1{
count++;
if(count==0x05){
tr0 =0;
dyqq =1;
sendbyte(0x03);//向上位机发送0x03
}
}
init_serial(){
tmod =0x21;
th1 =0xfa; //22mhz晶振
tl1 =0xfa;
th0 =0;
tl0 =0;
scon =0xf0;
tr1 =1; //启动定时器
es =1; //串口中断允许
et0 =1; //定时器0中断允许
it0 =1; //下降沿触发。
ex0 =1; //外部中断0允许
ea =1; //中断允许
}
现象是:每按一下外部中断都有0x03返回到上位机,说明外部中断和定时器中断都能进入执行,但是用示波器测试p1^1脚,开始有波形,按多次外部中断后就没有波形了,说明程序没有返回到while循环里来。请高手指点。
发表时间:2004年2月9日16:34:09