本帖最后由 chenjianmal 于 2013-11-26 14:20 编辑
airwill 发表于 2013-11-25 19:26 
中断服务程序的问题的可能性大, 看楼主先怎么排除是中断服务程序的问题?
我的中断服务程序采用的是调用某一个模块函数
//串口中断入口
void Uart_Gets(void)interrupt 4
{
RI=0;
ES=0; //关串行口中断
if(SBUF != P1)
ES=1; //非本机地址,继续监听
else
Serial_Pro();
}
/************************************************************
**函数名称:uchar Serial_Pro(void)
**参数说明:void
**函数功能:串口中断处理函数
**函数返回:void
************************************************************/
void Serial_Pro(void)
{
uchar temp;
SM2=0; //取消监听状态
Serial_Send_Data(P1); //发回从机地址
temp = Serial_Rec_Data();
switch(temp)
{
case 0xff: //接收到复位命令
break;
case 0x01: //接收到01H命令
if(rrdy == 1)
{
Serial_Send_Data(0x01); //接收准备好发送状态字
while(Serial_Rec_Str());
}
else
{
Serial_Send_Data(0x00);
//temp = Serial_Rec_Data();
}
break;
case 0x02: //接收到02H命令
if(trdy == 1)
{
Serial_Send_Data(0x02); //发送准备好发送状态字
while(Serial_Send_Str());
}
else
{
Serial_Send_Data(0x00);
//temp = Serial_Rec_Data();
}
break;
default: //接收到非法命令
Serial_Send_Data(0x80);
break;
}
SM2 = 1;
ES = 1; //开串行口中断
}
我一直有点怀疑是中断程序中改变了某个参数,但查看了很多遍 仿真 实际下载运行都没查出来
我认为中断服务程序的逻辑结构上有点问题,但具体的还没找出来 |