串口异步通讯时,如何在接收数据时得到校验位的值(第九位数据)。 (100分)

  • 主题发起人 主题发起人 v5383z
  • 开始时间 开始时间
V

v5383z

Unregistered / Unconfirmed
GUEST, unregistred user!
我所用的串口异步通讯协议的数据位为:
一个起始位,八个数据位,一个校验位,
一个停止位;在用spcomm发数据时:可
用属性Parity的设置来控制一个校验位
的值0或1,但不知如何在接收数据时得
到校验位的值。

 
校验位错底层发出异常,串口并不直接传出校验位到系统接口
 
单片机工作在方式3下时,为九位数据,而计算机处理这个第九位时用的是奇偶校验位,
现在问题是:将scomm的ParityCheck 设为True,Parity设为Mark(为1)或Space(为0)做第
九位发送时,单片机可以正确接收九位数据啦,但pc接收时却如何检测这个第九位校验位
呢?
经试验,用其它控件发送都没有问题!
 
你的单片机用第九位做什么,它用于奇偶校验,只要设定是否校验,是奇还是偶就可以了???
 
RS485 or RS232
 
由于485总线上集连多种设备,所以采用第九位做为设备识别位。
 
难道没有人用第九位传过数据吗?
 
请问如何只写数据而不读数据(避免读数据所花时间)
 
UP,关注这个贴子。
 
UP,关注这个贴子。
 
你的意思是PC在读取(单片机或终端的)数据时,当第9位为1时就有效,为0就无效?
我的几次实验结果,感觉(不一定对哈)是在win98下不能区分,在win2000下则可以(
设置为1时,发送为0的数据,PC收不到)。况我没有做详细测试。
还有,看你的意思,好象PC有作从机的可能?
如果是PC作为主机,则好象要好办得多。
 
我以前也碰见过和你一样的问题,不过我把单片机送给我的第九位忽略了,这只是为了
多机通讯,不过可以在编程是找别的方法代替的,试试看吧
 
问题解决啦!
用spcomm的onReceiveError的事件即可搞定:如当Parity设为Mark(为1)时,如果接收
到第九位为0时,将触发onReceiveError事件,为1时则不会触发。
用VaComm控件更好,98下没有发现问题。
谢谢各位的支持!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部