我在用labview做的串口与单片机进行通信的的时候,发现发送的数据加回车符单片机是接收不到数据的,而使用回车+换行符单片机就可以接收到数据,为此使用串口调试助手做了一个简单的调试。
首先解释一下他们的定义:
- 回车符:\r 0x0D 使光标移到行首
- 换行符:\n 0x0A 使光标下移一格
但是当我们直接在vi中打印的时候却出现了和它定义不同的现象,三个都直接换行了
可能你会说是不是我前面板显示控件开启了自动换行,这个我是真的是关掉了自动换行
那这是为什么呢,按道理回车不是换行呀,他的作用不是光标移动到行首嘛?
我到网上查了好多博客,上边说系统对回车、换行的处理不同,在Windows系统中,对于单独的回车直接把他们当成回车和换行处理,所以就出现了只打印回车符也会出现换行的现象。其它系统有些不一样的,下边是我在网上找的
- Unix系统里,每行结尾只有“<换行>”,即“\n”;
- Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
- Mac系统里,每行结尾是“<回车>”,即“\r”。
所以这个问题就解决了,就是windows系统默认回车符当作回车符+换行符在作怪。
但是当使用串口调试助手时候有出现问题了,我仅发送回车符或者换行符就不出现换行的现象了
看下边的发送情况,
当我们连续发送三次字符串“123”+回车符,显示出的是他们连接在一起了
当我们连续发送三次字符串“123”+换行符,显示出的是他们依旧连接在一起了
当我们连续发送三次字符串“123”+回车符+换行符,显示出的是他们换行了
列一个比较清晰的表
- 多次字符串+回车符 --------------》 连接在一起,无换行
- 多次字符串+换行符 --------------》 连接在一起,无换行
- 多次字符串+回车符+换行符--------------》换行
这与我们打印的时候不一样呀!刚才打印的时候明明都换行了,而现在回车符和换行符单独发送不出现换行现象,那这是为啥呢?
打印的时候-----------》系统把你的回车符当成回车符+换行符一起处理,所以出现换行现象
发送的时候-----------》系统只把回车符(或者换行符)单独发出去了,而不是发送的回车符+换行符
在调试助手中,他是需要识别到回车符+换行符才会出现换行的现象,现在你只单独发了回车符(或者换行符),两者不匹配,所以肯定出现不了换行的现象。