VB串口通信问题
求教:我用单片机模拟一个字符串数据发送到串口,由VB上位机接受,这里是我的上位机串口设置:MSComm2.Settings="2400,n,8,1"MSComm2.Com...
求教:我用单片机模拟一个字符串数据发送到串口,由VB上位机接受,这里是我的上位机串口设置:
MSComm2.Settings = "2400,n,8,1"
MSComm2.CommPort = 3
MSComm2.InputMode = comInputModeBinary '采用二进制传输
MSComm2.InBufferCount = 0 '清空接受缓冲区
MSComm2.OutBufferCount = 0 '清空传输缓冲区
MSComm2.RThreshold = 0 '产生MSComm事件
MSComm2.InputLen = 0
MSComm2.InBufferSize = 1024
MSComm2.PortOpen = True
Private Sub Timer4_Timer()
Dim strTemp1 As String
Timer4.Enabled = False '关闭定时器
If MSComm2.InBufferCount > 0 Then 'InBufferCount=0为清除当前已收到的数据
ReceivedLen = MSComm2.InBufferCount 'InBufferCount接收缓冲区
inx = MSComm2.Input
For i = 0 To UBound(inx)
strTemp1 = strTemp1 & Chr$(inx(i))
Next i
End If
Timer4.Enabled = True '打开定时器
Select Case strTemp1
Case "3EF5C9B"
If numone.Caption = "" Then '判断汽车驶入记录还是驶出收费
Frame21.Caption = "ID:" & strTemp1
Dim T1 As Date
T1 = Now
numone.Caption = Format(T1, "yyyy-mm-dd HH:MM:SS")
onetime = numone.Caption '记录驶入时间
cl = cl + 1 'cl为当前车辆数
Form2.label0.Caption = cl
为什么不能VB上位机不能接收到这个字符串数据呢? 我用字符触发式的方法可以接受单一字符,但是我用定时器轮循法就接受不了字符串,我用串口助手是有接受到这个字符串的。 展开
MSComm2.Settings = "2400,n,8,1"
MSComm2.CommPort = 3
MSComm2.InputMode = comInputModeBinary '采用二进制传输
MSComm2.InBufferCount = 0 '清空接受缓冲区
MSComm2.OutBufferCount = 0 '清空传输缓冲区
MSComm2.RThreshold = 0 '产生MSComm事件
MSComm2.InputLen = 0
MSComm2.InBufferSize = 1024
MSComm2.PortOpen = True
Private Sub Timer4_Timer()
Dim strTemp1 As String
Timer4.Enabled = False '关闭定时器
If MSComm2.InBufferCount > 0 Then 'InBufferCount=0为清除当前已收到的数据
ReceivedLen = MSComm2.InBufferCount 'InBufferCount接收缓冲区
inx = MSComm2.Input
For i = 0 To UBound(inx)
strTemp1 = strTemp1 & Chr$(inx(i))
Next i
End If
Timer4.Enabled = True '打开定时器
Select Case strTemp1
Case "3EF5C9B"
If numone.Caption = "" Then '判断汽车驶入记录还是驶出收费
Frame21.Caption = "ID:" & strTemp1
Dim T1 As Date
T1 = Now
numone.Caption = Format(T1, "yyyy-mm-dd HH:MM:SS")
onetime = numone.Caption '记录驶入时间
cl = cl + 1 'cl为当前车辆数
Form2.label0.Caption = cl
为什么不能VB上位机不能接收到这个字符串数据呢? 我用字符触发式的方法可以接受单一字符,但是我用定时器轮循法就接受不了字符串,我用串口助手是有接受到这个字符串的。 展开
3个回答
展开全部
应该用接收数据那个事件来接收,如果数据到达,而没有接收则数据会丢失。所以不能用timer
更多追问追答
追问
我这个是用轮循法,定时器定时接受数据,一个一个组合成字符串,数据应该没有丢失吧?如果是接受数据那个时间,是指直接轮循法吗,我不知道要怎么修改,能帮我修改一下吗
追答
用on_common事件
Private rectext As String
Private Sub MSComm1_OnComm()
Dim Inbyte() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
Inbyte = MSComm1.Input
Label1.Caption = UBound(Inbyte)
For i = LBound(Inbyte) To UBound(Inbyte) 'i循环从数组Inbyte的下届到上届
rectext = rectext & Hex(Inbyte(i)) & Chr(32)
Next i
End Select
Text2.Text = rectext
End Sub
2013-03-29
展开全部
MSComm2.RThreshold = 0 '产生MSComm事件
改为 1 试试
改为 1 试试
追问
不行啊,我使用轮循法取值的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的单片机工作频率是多少?
更多追问追答
追问
12M晶振
追答
如果你用的51单片机,在单片机端通信设置为:
TMOD = 0x20;
TH1 = 243; // 0xf3; //0xe6;
TL1 = 243; // 0xf3;//2400波特率/ //0xe6;//1200波特率
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
//243就是0xf3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询