单片机型号: SC92F7423
遇到的问题: 发现在低等级的中断服务程序中加入类似于死等的条件,高等级中断发生时不能打断低优先级的中断
下面是我的一段模拟串口的程序,发现程序总是卡在while(!Time2Flag);里,(因为我的点灯没有得到执行)
void Timer2() interrupt 5
{
TF2 = 0; //溢出清零
P22 = ~P22;
LEDPIN =1; //点亮LED
Time2Flag =1;
}
void EX2() interrupt 2
{
//有下降沿中断,说明收到了起始位,开始接收
DisableINT1_2();
EnableTim2();
//if(UART_RX == 1){
// EnableINT1_2();
//return;
//}
while(!Time2Flag); //等待一个bit时间,接收第一个数据位
Time2Flag =0;
UartRecvOneByte_0 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第二个数据位
Time2Flag =0;
UartRecvOneByte_1 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第三个数据位
Time2Flag =0;
UartRecvOneByte_2 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第四个数据位
Time2Flag =0;
UartRecvOneByte_3 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第五个数据位
Time2Flag =0;
UartRecvOneByte_4 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第六个数据位
Time2Flag =0;
UartRecvOneByte_5 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第七个数据位
Time2Flag =0;
UartRecvOneByte_6 =(bit)UART_RX;
while(!Time2Flag); //等待一个bit时间,接收第八个数据位
Time2Flag =0;
UartRecvOneByte_7 =(bit)UART_RX;
while(!Time2Flag){ //等待接收停止位
if(UART_RX==1){
Time2Flag =0;
break;
}
}
DisableTim2();
EnableINT1_2();
} |