关于pc和单片机的串口通信

zhaoboqian   2010-3-29 18:39 楼主
本人做了一个温控节点,把温度数据通过串口实时的传给pc,我也可以在pc上发命令给单片机,现在问题是:如果我不发命令给单片机,则系统正常,pc可以正常接收单片机发来的温度数据,但当我发命令给单片机时,系统就卡死了。我怀疑是当我通过pc发命令时,pc正好在接收数据(因为温度数据是实时发送的,不停的),所以发生冲突,导致系统卡死,不知道我的怀疑对还是错??不知道有没有什么解决方法,既可以把温度数据实时的传给pc,pc也可以随时发命令给单片机,求高人解答!!

回复评论 (6)

你的单片机的串口在处理与PC的通讯,是采用的中断 还是轮询 方式啊?


感觉很可能是单片机采用了中断,但单片机的UART接受中断函数处理不当,
从而当PC端发送数据时,单片机进入接受中断 就死掉?


你看看你对单片机串口的 初始化是否正确? 如果采用中断,好好看看中断初始化,以及中断处理函数。
点赞  2010-3-29 18:59
估計是你程序的問題,接收數據過快導致程序卡死是很容易的,像溫度這樣的變化不是很快的數據,1秒采集一次就已經是很快的了

這種串口通信的問題可以參考Modbus協議來做
看懂后你可以自己定一個一問一答的協議也可以
点赞  2010-3-29 19:05
使用串口调试器先调试一下通信,看看返回
点赞  2010-3-29 22:20
  232 通讯, 加个max232 进行ttl 与电脑的串口电平转化,有mscomm 控件可以调用。 卡死是软件问题。
点赞  2010-3-30 12:02
卡死一般不太会是PC端的问题。
查查你单片机的程序,要是中断接收的话,很有可能就在中断里卡死了。
我怀疑是在等待标志位那里,或者是数据处理那里挂掉了。
你看一下吧。
点赞  2010-3-30 16:08
问题已经解决了,主要有两个问题,一是数据发的频率太高了,容易照成冲突;二、发送数据之前没有检查有没有正在接收。把上面两个问题解决后就行了,谢谢大家的建议哦。。。。
点赞  2010-3-31 13:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复