MyException - 我的异常网
当前位置:我的异常网» 单片机 » PC机给51单片机发字符串的有关问题

PC机给51单片机发字符串的有关问题

www.myexceptions.net  网友分享于:2013-03-31  浏览:35次
PC机给51单片机发字符串的问题
今天试了下PC通过串口发数据给51 (字符串,即多个字节)
有些问题, 以下是我的一些猜想

1.因为51的串口接收中断是在收到一帧后将RI置位请求中断,所以发送多字节至51时,51要产生多次中断才能接收完.

2.在PC中,我所知道的是操作系统会为每个串口开一个缓冲区,收到的数据都先存至这里. 而系统提供给我们的API, windows下的ReadFile ,Linux下的read. 应该都是从这个缓冲区里读数据.所以PC里不用及时地读串口数据,数据也不会丢失(根据以往经验的猜想).

3.相对PC,51的缓冲区似乎就只有一个SBUF.只有一个字节. 因此不及时读数据似乎会丢失.(因为我们51采集温度等数据大概需要一秒.这一秒应是需要严格的时序的,所以这一秒内必须关中断?) 按照这个我用
EA=0;
DelayM(1000); //1秒
EA=1;
模拟了这个情况.
发现我发的多个字节就只收到了第一字节.( 我猜想51对这个的处理maybe是:收完第一个字节,硬件置位RI,
由中断系统结构那个框图,因EA=0.通路断开,不能引发中断. 而后续的字节也许是因为R1为置位状态,表示当前帧末被处理.
而被51忽略了. 然后当1秒延时过后,EA=1.通路通了,马上引发中断.但此时数据已没了.

4.PC上似乎没有写缓冲区(好像也不需要),当上层调用Write发数据时是直接发的,并且不保证所发数据是否被接收方收到.

所以我想问问串口底层的一些问题, 不知我上面理解的对不对? 重点为红字吧.不对的话可纠正我.有补充的也希望能回帖一下..


另外,大家对PC给51发字符串有什么好方法么.. (在51还有其它东西也要处理的时候?)



------解决方案--------------------
关注。。。。。
------解决方案--------------------
PC通过串口发送数据也是靠中断发送的,只不过最底层的函数被封装了,提供给用户的就是使用方便的API函数了。
你也可以仿照这样,给51做一个软件的串口缓冲区FIFO,只收数据但不处理,然后在主函数里面处理这些收到的数据
------解决方案--------------------
1.因为51的串口接收中断是在收到一帧后将RI置位请求中断,所以发送多字节至51时,51要产生多次中断才能接收完.
就是这样的
2.在PC中,我所知道的是操作系统会为每个串口开一个缓冲区,收到的数据都先存至这里. 而系统提供给我们的API, windows下的ReadFile ,Linux下的read. 应该都是从这个缓冲区里读数据.所以PC里不用及时地读串口数据,数据也不会丢失(根据以往经验的猜想).
MCU没有缓冲区,只能自己软件来做

3.相对PC,51的缓冲区似乎就只有一个SBUF.只有一个字节. 因此不及时读数据似乎会丢失.(因为我们51采集温度等数据大概需要一秒.这一秒应是需要严格的时序的,所以这一秒内必须关中断?) 按照这个我用
EA=0;
DelayM(1000); //1秒
EA=1;
模拟了这个情况.
发现我发的多个字节就只收到了第一字节.( 我猜想51对这个的处理maybe是:收完第一个字节,硬件置位RI,
由中断系统结构那个框图,因EA=0. 通路断开,不能引发中断. 而后续的字节也许是因为R1为置位状态,表示当前帧末被处理.
而被51忽略了. 然后当1秒延时过后,EA=1.通路通了,马上引发中断.但此时数据已没了.

MCU编程不能长时间关中断,更改一下你的编程思路。


------解决方案--------------------
(因为我们51采集温度等数据大概需要一秒.这一秒应是需要严格的时序的,所以这一秒内必须关中断?)

不能关中断,考虑其它办法吧。你的时序的最小单元时间是多少?10ms?1ms?
用时间片的概念,把通讯的时间安排到时序中。
------解决方案--------------------
串口中应该有个数据准备发送线的
如果顺序是PC发送指令->51接收指令->51返回数据
可以把数据准备发送这个线接到51外部中断(应该可以直接用MAX232)
然后51一有中断就在终中断里用查询方式接收

温度采集数据要单独放个BUF里用定时器按时采集,不要到收到PC指令时你数据还没准备好

你温度采集是用其他模块?
普通中断不会导致一般的通信(I2C,SPI...)出问题除非你中断里任务太多了
------解决方案--------------------
调试有步骤的
首先排除硬件的问题,变一个简单的小程序,再找一个上位机的调试软件运行一下。
然后单调试通信程序,然后。。。。
------解决方案--------------------
中断时有优先级的,你那个温度采集如果采用定时器定时中断进行采集比较靠谱,这是你的串行口中断不会影响你的温度采集中断服务程序,因为定时器中断的优先级要高一些。这样就可以保证你的温度采集系统不出差错了。然后等到你的定时器中断结束后,还可以继续响应那个串口中断。。。。。

文章评论

我的丈夫是个程序员
我的丈夫是个程序员
10个调试和排错的小建议
10个调试和排错的小建议
程序员都该阅读的书
程序员都该阅读的书
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
老程序员的下场
老程序员的下场
程序员应该关注的一些事儿
程序员应该关注的一些事儿
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
代码女神横空出世
代码女神横空出世
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Java程序员必看电影
Java程序员必看电影
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
 程序员的样子
程序员的样子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员和编码员之间的区别
程序员和编码员之间的区别
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
编程语言是女人
编程语言是女人
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
如何成为一名黑客
如何成为一名黑客
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
旅行,写作,编程
旅行,写作,编程
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
总结2014中国互联网十大段子
总结2014中国互联网十大段子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
那些争议最大的编程观点
那些争议最大的编程观点
程序员的鄙视链
程序员的鄙视链
我是如何打败拖延症的
我是如何打败拖延症的
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
每天工作4小时的程序员
每天工作4小时的程序员
一个程序员的时间管理
一个程序员的时间管理
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有