我的单片机板子上有MAX232芯片,DSP和MCU都是以能和PC串口正常工作的形式相连接,上电当我把RXD,TXD俩个直接相连时,MCU可以控制DSP,但是DSP的返回值不知道怎么回事没有接收正确,可能是接收函数有点不对,但是和pc通信的时候又可以。 还有我上面的这种接法有问题吗?时好时坏,有时候能控制,有时候又不行
在此贴出接收8个字节的接收程序请高手帮忙看下有什么错误把,谢谢 void SERIAL_RX_isr (void) interrupt 4 using 3 { unsigned char idata c,bcc,i; if(RI) { RI=0; c = SBUF; oldState= State; State= 0; if(rev_len==0) { switch (oldState) { case 0: TIME_OUT=50; if (c== 0xF5) //接收起始位 { RXBUF[0]=c; State= 1; } break; case 1:
TIME_OUT= 50; if (c == TXBUF[1]) { RXBUF[1]= c; bcc= c; State= 2; } else { rev_ok= 1; State= 15; } // 接收到的命令字不同,操作失败 break; case 2: TIME_OUT= 50; RXBUF[2]= c; bcc^= c; State= 3; break;
case 3: TIME_OUT= 50; RXBUF[3]= c; bcc^= c; State= 4; break; case 4:
TIME_OUT= 50; if (rev_bit5== 0) //返回值为操作成功与否的时候 { if (c==0) { RXBUF[4]= c; //操作成功返回0 bcc^= c; State= 5; break; } else { rev_ok= 1; //操作失败 State= 15; } } else { if (c==1||c==2||c==3) //返回值位用户权限 { RXBUF[4]= c; bcc^= c; State= 5; break; }
else { rev_ok= 1; //操作失败 返回状态为15 State= 15; } } break; case 5: TIME_OUT= 50; RXBUF[5]= c; bcc^= c; State= 6; break; case 6: TIME_OUT= 50; if (c==bcc) { RXBUF[6]= c; State=7; } else { rev_ok= 1; State=15; } break; case 7: TIME_OUT= 50; if(c==0xF5) { RXBUF[7]= c; rev_ok=0; //操作成功 } else { rev_ok= 1; } break; default: break; } }
|