| 发表于:2007-03-16 09:00:4829楼 得分:100 |
中途改变 settings 之前,关闭 mscomm 控件,然后再打开。这样会比较慢,如果要求速度,可以用 api 来做。 '----------------------------------------------------- '发送区 '----------------------------------------------------- public function senddata(byref bytdata() as byte) as long on error goto errhandler mscomm1.output = bytdata '发送数据 do doevents loop until mscomm1.outbuffercount = 0 '等待,直到数据发送完毕 senddata = 0 exit function errhandler: senddata = err.number end function '----------------------------------------------------- '接收区 '----------------------------------------------------- private sub mscomm1_oncomm() on error resume next dim bytreceived() as byte dim strbuff as variant dim i as integer select case mscomm1.commevent case 2 mscomm1.inputlen = 0 strbuff = mscomm1.input '必须用 variant 变量接收二进制值 '否则中文系统将其改为“?”= chr(&h3f) bytreceived() = strbuff for i = 0 to ubound(bytreceived) text1.text = text1.text & " " right( "0 " & hex(bytreceived(i),2) next end select end sub '--------------------------------------- '发送数据 '--------------------------------------- private sub cmdconnect_click() dim bytdata1(0) as byte dim bytdata(21) as byte dim i as integer mscomm1.commport = 1 'com端口 mscomm1.settings = "19200,m,8,2 " mscomm1.inputmode = cominputmodebinary '采用二进制传输 mscomm1.inbuffercount = 0 '清空接受缓冲区 mscomm1.outbuffercount = 0 '清空传输缓冲区 mscomm1.sthreshold = 1 '如果传输缓冲区完全空时产生mscomm事件 mscomm1.rthreshold = 1 '不产生mscomm事件 bytdata1(0) = 8 bytdata(20) = 8 bytdata(21) = 128 for i = 1 to 19 bytdata(i) = 0 next mscomm1.settings = "19200,m,8,2 " '改变奇偶校验 mscomm1.portopen = true '打开端口 call senddata(bytdata1) '发送 mscomm1.portopen = false '关闭端口 mscomm1.settings = "19200,s,8,2 " '改变奇偶校验 mscomm1.portopen = true '打开端口 call senddata(bytdata) '发送 mscomm1.portopen = false '关闭端口 mscomm1.settings = "19200,m,8,2 " '改变奇偶校验 mscomm1.portopen = true '打开端口 end sub | | |
|