串口与BCD码
690cj 2002-11-11 11:42:27 在程序中用mscomm32.ocx,接收ASC码很正常,现在设备改为通过串口向外发送BCD码,
数据格式如下:一次五帧,每帧11位,1位起始位(0),8位数据位(D0--D7),2位停止
位(1)。第一帧是起始位(0FFH)、第二帧表示状态、第三、四、五帧是数据值的BCD码,
怎么也接收都不能显示数据,(通过win98自带的拨号终端可看到有乱码发送到串口,
说明设备工作正常),程序如下(主要内容,也是参照网上找到VB的打关源码修改的),
请高手找找问题出在哪了?
1、在开始接收按钮click事件中:
ole_1.object.Settings="2400,n,7,1"
ole_1.object.PortOpen=true
ole_1.object.InBufferSize=40
ole_1.object.InputMode =1 //接收二进制数据
ole_1.object.Rthreshold=1
ole_1.object.InputLen = 1
ole_1.object.inbuffercount=0
2、在mscomm32.ocx的oncomm事件中
any lany_put[]
int b1,b2,ww
string ls_put,ab[]
blob av
long ll_wz
if ole_1.object.CommEvent=2 then
av=ole_1.object.Input
ab[1] = char(av)
If ab[1] = "0FFH" Then
// st_1.text="已找到数据位"
// '判断是否为数据开始标志
ole_1.object.RThreshold = 0
// '关闭OnComm事件接收
DO UNTIL ole_1.object.InBufferCount >= 5
yield()
LOOP
end if
av = ole_1.object.Input
ab[2] = char(av)
av = ole_1.object.Input
ab[3] = char(av)
av = ole_1.object.Input
ab[4] = char(av)
av = ole_1.object.Input
ab[5] = char(av)
// '转换保存到字节数据类型数组
b1 = dec(ab[3]) - 6 * (dec(ab[3])/16)
// '高位字节压缩BCD码转换为实数
b2 = dec(ab[4]) - 6 * (dec(ab[4])/16)
// '低位字节压缩BCD码转换为实数
WW = b1 + b2 / 100
sle_1.text=string(b1)
ole_1.object.RThreshold = 1
// '打开MSComm1事件接收
end if