单片机与串口通信一个程序的疑问,求解答。

单片机与串口通信一个程序的疑问,求解答。,第1张

tmp = SBUF;// 暂存接收到的数据

send_char(tmp);// 回传接收到的数据

这两句表示将接收到的数据通过串口发送出去。变量tmp(可取其他任意符合C语言规则的变量名)用于保存接收到的数据,51中串口接收到的数据是放在寄存器SBUF中的,tmp = SBUF完成一次读SBUF命令,表示接收到的数据赋值给了tmp变量。

当数据发送出去后,TI不会马上置1,因为数据传送完需要一定时间,发送完的时间与波特率有关。在这段时间内,TI是为0的,单片机执行速度很快,因此在数据发送期间,CPU早就执行到while(!TI);这条指令去了,因此CPU会一直停在while(!TI);直到TI为1。while(!TI);就是用来判断是否发送完数据的。

你第一个子数组长度应该是30,不是29

第一个子数组求和有16位就够了,不要转成DBL,会导致保留过多位。保留16位,其余溢出

求和后不可以数字转字符串,那样的话就是阿拉伯数字的字符串(每一位肯定在0~9之间)但是实际的校验和却可能什么字符都有。要用字节数组到字符串转换

下图供你参考

1、SBUF 是两个寄存器,名字虽然一样,发送的只能写,接受的只能读。

2、SBUF收到数据会产生接收中断,接收中断产生后无法再接收其他数据,知道读取SBUF后将接收中断清零,因此

recdat=SBUF;

while(RI==0);

应该交换次序。

3、未产生接收中断时,SBUF值并不固定,串口数据串行传入也是一位一位的改变的,可能读取到非法值。

以上就是关于单片机与串口通信一个程序的疑问,求解答。全部的内容,包括:单片机与串口通信一个程序的疑问,求解答。、labview串口通信的时候验证和如何做、串口通信 关于sbuf的问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10104152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存