永发信息网

怎么通过UART串口接收多个字符?

答案:2  悬赏:50  手机版
解决时间 2021-03-31 11:22
怎么通过UART串口接收多个字符?
最佳答案
每接收一个字符,单片机就会UART中断,在中断过程中,你把读取的那个SBUF字符,全部赋值给RxdData数组,比如你读取到的字符是0x01,那RxdData[0]-RxdData[3]均为0x01。由于你发送的是2835,当接收到2时,RxdData[0]-RxdData[3]均为2,当接收到8时RxdData[0]-RxdData[3]均为8,这也就是为什么他们都只显示四个数字的最后一位。
解决思路:
由于你发送的是四个数字,定义一个计数的全局变量count,以及缓冲数组RxdData_Buffer[],每接收一个字符,会进入中断,则RxdData_Buffer[count]=SBUF;同时count自加1;当四个字符全接收完时,count的值为4,则此时在main函数中将count清0,同时将RxdData_Buffer[]的全部值赋给RxdData[]。main函数中再通过调用RxdData[],实现数码管的显示。
好了,大致思路是这样,请采纳,点赞,给分。。。。。。追问还没有看懂,那你这样和下面有什么区别呢?还有为什么要在主函数里将count清0.







刚刚用你说的方法试了,真的可以!!但是我还是不明白为什么这样可以,我不用 将RxdData_Buffer[]的全部值赋给RxdData[] 也可以显示,这样好吗? 
追答区别大呢,你的函数功能是,接收一个字符后,就对RxdData[]数组里的全部变量进行赋值,而且全部赋同一个值,这显然不是你要的,你期望的是:第一个字符接收后,就存在RxdData[0],第二个字符接收后,就存在RxdData[1],以此类推。全部接收完后,再调用RxdData[]数组,使数码管显示。
也可以在中断函数中清零count,不过你得想清楚逻辑,否则容易出错,清零count的原因:一、你定义的数组RxdData[]应该只有4个元素吧,当count=4时,RxdData[count]无意义;二、count的清零为下次接收4个字符数据做准备。
建议使用RxdData_Buffer[],它起一个缓冲作用,它保证了接收数据的完整性,这样的程序会更可靠。如果你不使用RxdData_Buffer[],而直接使用RxdData[],会存在一些问题,比如:当你输入2835时,数码管显示2835,没错,很正常,可是,当你再输入9124时呢?发送字符是有时间的,虽然时间很短,可能你才发送了91过去,而24还没来得及发送,这时,用RxdData[]中的数据应该是9135,所以数码管显示的是9135,而不是你的9124.
我只能这样解释了,你花点时间想想我说的话吧,多自己想,收获会更多,更有体会。加油。
全部回答
会不会是数码管显示程序有问题,以前我刚刚学单片机的时候控制4位数码管动态显示1234,结果都是4,,,,,
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
形容“一篇文章字字句句都跟自己想的一样,写
王者荣耀如何单排上王者?
全员加速中王俊凯头上戴的什么
1.4米直径园钢化玻璃桌怎么改1米直径的园钢化
求一首日文歌开头好像是i‘ll be thinking lo
福建省泉州市丰泽人民法院受理吴铮铮民间借贷
我有一个朋友他让我去邮政办一张卡用身份证正
视点是什么意思举例
风湿性关节炎用什么泡脚好
冬天早上房间玻窗外层出现水珠是怎么形成的
求助G300S驱动问题
TNT为什么要更新成TNT2.0,TNT2.0你算什么东
农村老家自建房,打算盖一层,长16米宽12米,
XP系统可以安装CAD2016版本吗
这个橡胶件学名叫什么?
推荐资讯
电脑或系统里的445端口是什么?
除了云裳羽衣你们还喜欢哪个游戏
问道里面怎么把4级坐骑变成5级坐骑?
歌词高潮是my love my love是什么歌.是中文的
帮我找个应用汇好么?
奔驰V级(进口)和宝马2系多功能旅行车哪个好
可调电阻三个脚怎么焊接如题
梦见扒桦树皮
广元直达深圳的火车有吗
缴费和充值有什么区别
修健双蛋白活性菌粉多少钱一带
什么是六模全网通?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?