| 本帖最后由 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;                                        //开串行口中断
 }
 我一直有点怀疑是中断程序中改变了某个参数,但查看了很多遍  仿真 实际下载运行都没查出来
 我认为中断服务程序的逻辑结构上有点问题,但具体的还没找出来
 |