zackwu 发表于 2023-7-25 20:12:26

求助帖,串口接收数据的处理


https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1387#lastpost
@版主
你好看了,二楼的例程我去搜了一下,看到的结果是SCANF是扫描键盘的,我现在的问题是,通过串口发来的字符串,我如何总结在一个变量中如LONG类型变量中,然后用IF ELSE 去判断。
if ((RX2_Buffer != 0x2B)&&(RX2_Buffer != 0x4F)&&(RX2_Buffer != 0x4B))
{
      printf("AT+ENTM\r\n");
      delay_ms(200);                        //延时200MS
}
以上是我现在用的方式,有没有一种方式是
if (RX2_DATA1) == 600
{}
else if (RX2_DATA1) == 610
{}
,
,
,
,
如何把S2BUF这个CHAR的值合并起来呢?
百度上搜到的方法是移位,我试了一下好像不管用。
DATA = RX2_Buffer<<24 +RX2_Buffer<<16+RX2_Buffer<<8+RX2_Buffer,
PRINTF("%LD",DATA )
上面这种方法试了不管用,请问有没有好办法

32G12K128 发表于 2023-7-26 09:02:30

用范例测试看看:
求STC8系列4个串口同时通信的程序,Modbus 演示程序 - 串行口,DMA支持的4组串口 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=375&extra=page%3D1

熊仔 发表于 2023-7-26 13:12:02

本帖最后由 熊仔 于 2023-7-26 19:18 编辑

串口发送端你用字符发的还是HEX发?
如果是字符,直接用c语言的字符串处理函数。
这些都是C语言基本功。
比如发 1000\n结尾。
char buf;

把接收到的字节流全部存入数组buf。
判断到结尾符号\n 已经接收完了一行.然后把这一个数组放的字符串进行解码。string.h里面有函数。


还有一个最简单的方法,用sscanf函数。可以用来解码字符串。就是注意不要太长的字符串
页: [1]
查看完整版本: 求助帖,串口接收数据的处理