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的问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)