微机与单片机通讯问题(100分)

A

ayu310

Unregistered / Unconfirmed
GUEST, unregistred user!
我开发了一个微机与单片机通讯的程序,可有时从串口发到单片机的数据,单片机要过
好长时间才能收到(是正确的) ,各位开发过这样系统的朋友能否解释一下。我用的控
件是spcomm
 
用仿真器仿真一下,看看你的单片机程序是否有问题。
因为用spcomm从串口发送数据应该是没有问题的。
那么问题可能就应该出现在单片机的程序上面。
如果程序没有问题,检查你的电路,看看是不是有什么问题。

我认为问题应该出在单片机的方面。
 
把你的接收数据的那段程序贴出来看看先
 
只要你是发出去了接收端立即收到,根本不存在‘好长时间’的可能性,
你可以在接收端用微机测试一下,看是上边还是下边的问题
 
各位朋友真是热心,上面的现象不是总是存在,只是偶尔才出现
我的系统是一种医疗仪器, 我用控制它开始和停止,我发送开始
它可以收到(单片机可以收到并开始治疗),但发送停止后单片机
不听指挥,停不下来。问题是只是偶尔存在,考虑是发送数据
和接收数据有冲突,各位不知有何高见。
另单片机的(51)串口是全双工的在写程序时有什么要点吗?
谢谢大家。
 
要点是两边的各项参数要一致
 
从现象分析是单片机在‘治疗’工作中没有及时响应上位机的通信指令,
这种情况应该是单片机通信程序没有用中断方式做。
 
同意iie的观点,我以前也是用串口控制仪器的,如果不能立即响应的话,那可就出大麻烦
了,现在可肯定是你的单片机程序有问题,
 
通过示波器观察,在停止失去作用时,的确没有信号从串口输出。
并且这种故障是在反复按开始,停止多次后才出现,也就是说一开始并不出现,只有等
多次通过串口发数据后才出现,好象是串口不再发数据了。这时重新启动程序,又能发
能收发数据了。针对这样的问题,不知各位对spcomm的设置有何看法。
 
问题解决了!
问题在spcomm的设置。其Outx_XonXoffFlow:=false;
Inx_XonXoffFlow:=false;
问题就解决了。
下面是我翻译的两个属性,清大家指正。如有全部翻译的也请贴出来,大家共同学习。
outx_XonXoffFlow : Boolean

指定在发送期间XON/XOFF控制流是否有效。
如果其值为TRUE,那么当收到XOffChar时,就停止发送数据,而当收到
XonChar时又开始发送数据。
此值可以在串口已打开时重新附值。

| 收到Xoff | 收到Xon
---------+---------------------+--------------------------------
True | 停止发送 忽略Xoff | 重新发送 忽略Xon
---------+---------------------+--------------------------------
False | 读入Xoff | 读入Xon
Specifies whether XON/XOFF flow control is used during transmission.
If this member is TRUE, transmission stops when the XoffChar character
is received and starts again when the XonChar character is received.
You can change this value when the comm is open.

Action | Xoff received | Xon received
--------+--------------------+---------------------------
TRUE | stop transmission | resume transmission
| discard Xoff char | discard Xon char
--------+--------------------+------------------------------
FALSE | read in Xoff char | read in Xon char

Inx_XonXoffFlow : Boolean
指定在接收期间XON/XOFF控制流是否有效。
如果其值为TRUE,那么当输入缓冲区达到Xofflim所指定的值时,就发送XOffChar,而当
输入缓冲区被清空后又发送XonChar。
此值可以在串口已打开时重新附值。

| 收到Xoff | 收到Xon
---------+---------------------+--------------------------------
True | 停止发送 忽略Xoff | 重新发送 忽略Xon
---------+---------------------+--------------------------------
False | 读入Xoff | 读入Xon
Specifies whether XON/XOFF flow control is used during reception.
If this member is TRUE, the XoffChar character is sent when the
input buffer comes within XoffLim bytes of being full, and the
XonChar character is sent when the input buffer comes within XonLim
bytes of being empty.
You can change this value when the comm is open.

| input buffer comes within
+-----------------------------+------------------------------
Action | XoffLim bytes of being full | XonLim bytes of being empty
--------+-----------------------------+------------------------------
TRUE | Xoff char send | Xon char send
--------+-----------------------------+------------------------------
FALSE | do nothing | do nothing
 
可以肯定是 51MCU 的问题,而且是串行口服务程序的问题,你没有很好地在你的MCU里实现
无冲突的多线程是关键
 
的确,spcomm的控制参数很多,设置不好的话就可能工作不正常!
 
如何????
 
多人接受答案了。
 
顶部