[原创]串口通讯时不能传输0x13的原因及解决方法

作者在 2008-01-17 15:36:55 发布以下内容

    前段时间用Delphi写一个串口通讯程序,写的差不多之后,在测试时,发现有时候会出现有些数据传着传着就没了,很是奇怪,最后经过反复测试,只要传送0x13这个数字,就会导致后面的数据全部不能正常传输.

    经过在网上查找,找到了以下解决办法:
    comm1.Outx_XonXoffFlow := false;

    后来看了一些资料,原来这个属性是设置软件流控制的.

    具体什么是软件流,我也没有很明确的认识,只能写一些个人的理解,可能有错漏的地方.

    现在的RS232接口,一般是9针的,而一般使用的时候,只用了其中的RXD,TXD,GND三针(不同的串口可能在的位置不同,一般是2,3,5针.5是GND,2和3一个是发,一个是收,只要串口线两边的收-发相接就好).剩下的6个针都没用到,其实这几个针是有用的,比如其中有个针脚就是用于判断串口是否准备就绪,可以接收或者发送数据.通过判断这个针的状态,就可以更好的控制串口了.还有其它的针也有其作用.这种控制属于硬件流控制

    不过由于现在只接了3个针,就少了6个硬件控制针了,那么如果在需要的时候,就没办法通过硬件的方法来解决,那只能用软件的方法了.

    所以就规定了几个特定的数字,作为控制的命令,只要打开软件流,而且传输这几个特定的数字,就可以向测试某个针脚一样来控制串口.而0x13就是这么一个特定的数字,表示XOFF,也就是不能接收数据,那么对方串口将暂停发送数据,还有一个0x11,表示XON,那就是可以接收数据了.

    如果需要软件流控制,那么就需要注意不要发送了这些特定的数字.

    Delphi的SCOMM控件是默认打开软件流的,所以如果不需要的话,需要关掉,就是上面的那句话就可以了,或者可以在控件的属性里面改,最好把属性中所有的可以选择的属性都设置成False.这样可能比较安全.

    参考:浅析PC机串口通讯流控制 龚建伟

原创 | 阅读 5403 次
文章评论,共2条
vfdff
2008-04-10 18:40
1
Delphi 和 MFC 有什么联系吗 ?
永夜的极光(作者)
2008-04-11 13:32
2
<div class="xspace-quote">原帖由vfdff于2008-04-10 18:40:35发表
Delphi 和 MFC 有什么联系吗 ?</div>
mfc没用过,不清楚
游客请输入验证码