薇子的全部小说:vb通过串口读单片机数据有误问题,急!!!1
还有一问题,不知道为,复制到文本,注释就成乱码了,请高手指教,谢谢
我得QQ49588070,如那位高手帮忙解决了,另开一问,追加送200分,决不食言!
Private Sub Form_Load()
Check1.Value = 1
End Sub
Private Sub Form_Unload(Cancel As Integer)
comm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
Dim Buffer() As Byte '¶¨ÒåÒ»¸ö½ÓÊÕ
Dim i As Long
Dim stem2, sTem1 As String
Dim a As Variant
a = MSComm1.Input
Buffer = a
stem2 = ""
sTem1 = ""
For i = 0 To UBound(Buffer()) '×î¸ß룬Ҳ¾
ReDim stem(UBound(Buffer)) As String
stem2 = stem2 & Right("00" & Hex(Buffer(i)), 2) '»º´æÀï
sTem1 = sTem1 & Chr(Buffer(i)) 'ÿ¸ö
Next i
If Check1.Value = 0 Then
Text1.Text = Text1.Text & sTem1
Else
Text1.Text = Text1.Text & stem2
End If
End Sub
这里为串口初始化,晕,程序发不全
Private Sub Command1_Click() '´ò¿ª¹Ø±Õ´®¿Ú
On Error GoTo CommErr '³ö´íµÄ»°×ªÏò´íÎóÃèÊö
If Command1.Caption = "´ò¿ª´®¿Ú" Then
MSComm1.CommPort = Mid(Combo1.Text, 3, 1)
MSComm1.Settings = "9600,E,8,1"
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
Command1.Caption = "¹Ø±Õ´®¿Ú" '°´
Combo1.Enabled = False '
Else
MsgBox "²»ÄÜ´ò¿ªvbOKOnly, "´íÎó"
End If
Else 'Õâ¸öÊǵ
触发comm的时候,应该加上下面的语句,防止同一时序内被再次触发:
MSComm1.RThreshold = 0 '关闭OnComm事件接收
试试看,有问题再研究。rthrehold改成28是不对的。
给你参考一下前段时间我写的程序,具体的要求在http://wolfccb.spaces.live.com,我现在上不去,你看看吧
Dim av As Variant
Dim datacount As Long
Private Sub cmdClear_Click()
grdData.Clear
End Sub
Private Sub cmdStop_Click()
'关闭端口
If MSComm.PortOpen = True Then
MSComm.InBufferCount = 0 '清空缓冲区
MSComm.PortOpen = False
End If
cmdReceive.Enabled = True
lblStatus.Caption = "停止接收,空闲"
End Sub
Private Sub cmdReceive_Click()
'串口设置
With MSComm
.CommPort = 1
.Settings = "19200,N,8,1" '***** 9600 - 19200
.RThreshold = 1 '接收1字节触发oncomm事件
.InputMode = comInputModeBinary
.InputLen = 1 '输入长度为1
.InBufferCount = 0 '清除接收缓冲区
End With
'打开端口
If MSComm.PortOpen = False Then
MSComm.PortOpen = True
If Err Then
MsgBox (Err.Description)
Exit Sub
End If
End If
lblStatus.Caption = "打开端口,等待接收"
datacount = 0
cmdReceive.Enabled = False
End Sub
Private Sub cmdSave_Click()
Dim outfn As String
Dim i As Long
MsgBox ("接收了" + CStr(datacount) + "组数据")
lblStatus.Caption = "接收完成,请选择输出文件"
cmdReceive.Enabled = True
'选择输出文件
CommonDialog1.FileName = CStr(Date) + ".txt"
CommonDialog1.Filter = "Text Files|*.txt"
CommonDialog1.Flags = CommonDialog1.Flags Or cdlOFNOverwritePrompt
CommonDialog1.CancelError = True
On Error GoTo errhandler
CommonDialog1.ShowSave
outfn = CommonDialog1.FileName
Open outfn For Output As #1
For i = 0 To datacount
Print #1, grdData.TextArray(i)
Next i
Close #1
'txtData.SaveFile outfn
lblStatus.Caption = "输出完成,空闲"
errhandler:
Exit Sub
End Sub
Private Sub Form_Load()
lblStatus.Caption = "空闲"
grdData.ColWidth(0) = 6150
End Sub
Private Sub Form_Unload(Cancel As Integer)
'关闭端口
If MSComm.PortOpen = True Then
MSComm.InBufferCount = 0 '清空缓冲区
MSComm.PortOpen = False
End If
End Sub
Private Sub MSComm_OnComm()
Dim T1, T2 As Long
Select Case MSComm.CommEvent
Case comEvReceive '收到Rthreshold个字节产生的接收事件
MSComm.RThreshold = 0 '关闭OnComm事件接收
lblStatus.Caption = "接收"
av = MSComm.Input '读取一个接收字节
dataframe(1) = av(0) '转换为字节
If dataframe(1) = &HA Then '接收到T1
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4 '循环等待接收缓冲区>=2个字节 '***** 2 - 4
av = MSComm.Input
dataframe(2) = av(0)
av = MSComm.Input
dataframe(3) = av(0) '接收T1
av = MSComm.Input '*****
dataframe(4) = av(0) '*****
av = MSComm.Input '*****
dataframe(5) = av(0) '*****
T1 = dataframe(2) + CLng(dataframe(3)) * 256 + CLng(dataframe(4)) * 65536 + CLng(dataframe(5)) * 16777216 '计算T1 '*****
End If
Do
DoEvents
Loop Until MSComm.InBufferCount >= 1 '循环等待接收缓冲区>=1个字节
av = MSComm.Input '读取一个接收字节
dataframe(6) = av(0) '转换为字节 '***** 4 - 6
'接收到T2
If dataframe(6) = &HA0 Then
'MSComm.RThreshold = 0 '关闭OnComm事件接收
'循环等待接收缓冲区>=2个字节
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4 '***** 2 - 4
av = MSComm.Input
dataframe(7) = av(0)
av = MSComm.Input
dataframe(8) = av(0) '接收T2
av = MSComm.Input '*****
dataframe(9) = av(0) '*****
av = MSComm.Input '*****
dataframe(10) = av(0) '*****
T1 = dataframe(7) + CLng(dataframe(8)) * 256 + CLng(dataframe(9)) * 65536 + CLng(dataframe(10)) * 16777216 '计算T1 '***** 9600
'显示T1 T2 enter
grdData.AddItem (CStr(T1) + " " + CStr(T2))
datacount = datacount + 1 '数据组数+1
End If
MSComm.RThreshold = 1 '打开OnComm事件接收
Case Else
End Select
End Sub
以上。
找的老狼
建议将如下修改成:
MSComm1.RThreshold = 28
另请参阅如下网址:
http://zhidao.baidu.com/question/10521789.html