楼主,我觉得你应该抽点时间,看看串口通讯在芯片、线路上是怎么实现的。这个是基础,学明白了,如何解决问题,你会有重新认识。用来实现数据传送的,是芯片中的寄存器,你把数据送进去,通过线路送到接收方的寄存器。收发正常的场合,两边寄存器里的内容是一致的。当你把可显示、打印的ASCII和不可显示、打印的16禁止数据混合传输的时候,比如以下语句(假设printf做个输出转向,转向给串口输出,假设comout是输出16进制数据给串口):
printf("12345"); // 注:这五个字符,对应的6进制数据为:0x31,0x32,0x33,0x34,0x35
unsigned char dat[]={0xF1,0xC1,0x00,0x23};
comout(dat,0,3); // 像串口发送dat数组中从0号元素开始,到3号元素截止的数据,包含0号元素和3号元素
那么经过这些发送,接收方收到的数据,以16进制表达:0x31,0x32,0x33,0x34,0x35,0xF1,0xC1,0x00,0x23
当你使用APP接收这些数据,如果以文本形式表示出来的时候,因为前五个对应的是可显示打印的数据,所以显示“12345”,但后五个是没法显示的。
上面的发送,是可以用以下形式,一样实现:
unsigned char dat[]={0x31,0x32,0x33,0x34,0x35,0xF1,0xC1,0x00,0x23};
comout(dat, 0, 8); |