本帖最后由 hzocce 于 2016-1-19 17:30 编辑
2单片机之间串口通信,接收有时候错误
1.我用电脑给A单片机发送命令,A单片机100%接收准确,100%准确解析执行命令,且用1ms的周期发,也未错误解析过。
2.用B单片机发送命令,用电脑接收,串口助手查看,100%准确,确实是让B单片机发送之命令。
3.用B单片机给A单片机发送命令,A单片机接收到之命令,基本准确,有时候对,有时候错误,差不多有1/3时候是错误的。
排除办法:
1. 单片机之间通信统一使用115200,电脑串口助手也采用115200,
2. B单片机跟A单片机之间的通信RX,TX已经使用屏蔽线,并且屏蔽线铜线罩已经接上VCC,现象仍然存在。
3. 并且在B单片机每条命令之间加了80个空指令(_nop_;)来延时,(因是1T单片机,刚开始以为是不是发的太快了,)现象仍然存在,一直未得到解决。
4. 两单片机都使用内部 11.0592mhz 晶振。
5. 后面只是用B单片机的发送接到A单片机的接收,断开了B未用接收和A单片机的发送线路。
(电脑跟单片机通信:1.用USB转TTL, 2.标准串口RS232转TTL )测试都没有问题。
单片机之前用TTL电平串口通信。直接pin对pin,有问题。
用PC看B的发送的准确,用PC发,查A的接收功能也正常。为什么A,B组合却有问题了? (同时又把B单片机的发送接到PC串口用串口工具查看,发送的命令没有问题)
要是说接收有问题的话,用PC发送给单片机,确都是成功的。/
求坛友指导,谢谢!~~~
贴上一下串口接收中断函数:
void UART1_int (void) interrupt 4
{
if(RI)
{
RI = 0;
RX1_Buffer[RX1_Cnt] = SBUF; //----------------------------读取数据到数组中
RX1_Cnt++;
if((RX1_Cnt>=8) && (RX1_Buffer[RX1_Cnt-1]== '\n') && (RX1_Buffer[RX1_Cnt-2]=='\r'))
{
RX1_End=1; //-----------------单条命令完成标志
String_Len=RX1_Cnt-3 ; //----获取字符长度
RX1_Cnt=0; //-----------------接收计数清零
}
//解释一下,因为任何一条命令都会大8个字符以上,结尾是\r\n做为结束符。减去一个多自加的,再加去2个结束符,所以减3.
|