单片机接收不到串口调试助手发来的数据,我用的是USB接口,

下面是串行接收中断函数

void serial() interrupt 4
{
if(RI)
{
uchar i,j;
uchar ch;
RI = 0;
ch = SBUF;
if(i < 1)
{
j =0;
Receive_Buf[j] = ch;
i = 1;
}
else
{
j++;
i++;
Receive_Buf[j] = ch;
if(i > 16)
{
i = 0;
j = 0;
R_flag = 1;
}
}

}
}
毕设要用,拜托各位大神。。。。

【1】你所做的收到与否判断。如果不是在线仿真,查看Receive_Buf[],而是根据回复情况,结论可能是错的。
【2】没有看到你的应答程序。
【3】如果串口设置了最高优先,PS=1;其余IP位为0情况。仿真仍然时有时无,还应检查电平接口标准。通常USB转串口(TTL电平),可能TTL侧是3V。因此上拉个电阻在单片机RXD管脚到5V电源,再试试看。TXD则不需要。追问

谢谢大哥,我试一下。感觉你的第三条比较有道理。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-11
void serial() interrupt 4
{
static uchar i;
uchar ch;
if(RI)
{
RI = 0;
Receive_Buf[i] = SBUF;
i++;
if(i > 16)
{
i = 0;
R_flag = 1;
}
}
}追问

试过了,还是有时候能接收到,有时候接收不到。

追答

1、你可以将串口优先级设最最高试试

2、这个中断要是R_flag=1,需要接收17个数据,你发送的数据个数是否如此。

追问

接收到的时候显示和回送的数据都是正确的,现在的问题是有时候接收到,有时候接收不到,我试一试将串口优先级设为最高。

本回答被网友采纳
第2个回答  2013-05-11
兄弟, 你也应该明白是什么问题吧, "单片机接收不到串口调试助手发来的数据,我用的是USB接口" C是过程语言, 转化到单片机内是机器语言(汇编) , USB 接口与串口是两个不同的硬件, 它们的通讯设置是不相同的
你编写的这段代码前面应该还有"通讯参数设置" 这个模块, 以你焊接的硬件来编写这个模块. 若软硬件不搭配, 肯定是通讯不了的追问

相同的一段报文,相同的设置,有时候能接收到,有时候接收不到,。要说哪里设置错误了,可是有时候能接收到,并且显示和回送的报文都是正确的,真不知道怎么回事。

第3个回答  2013-05-11
是不是超出了可识别的设备呀追问

不是,相同的一段报文,相同的设置,有时候能接收到,有时候接收不到,。要说哪里设置错误了,可是有时候能接收到,并且显示和回送的报文都是正确的,真不知道怎么回事。

追答

我也出现过,是不是主程序太长了?上次我的就是主程序太长

追问

应该不是这方面的问题。

相似回答