请教PC机通过串口与单片机通信问题
我最近在做一个PC机(通过VB)与单片机(红外温度传感器)通信的程序。单片机汇编语言部分保证正确,因为我用公司里现成的delphi写的程序读过数据且正确。但是我用VB写的程序却读不到数据,请大大们帮我看看,万分感谢! 程序如下:
(控制字5A是请求单片机发温度数据,用Text2暂时保存接收到的6个字节的温度数据)
Dim Text1 As String
Dim Text2 As String
Dim BytReceived() As Byte
Dim Lbljieshou As String
Dim lenInput As String
Dim strData As String
Dim strDataInteger As String
Option Explicit
Private Sub Form_Load()
MSComm1.CommPort = 1 'COM1串口
MSComm1.Settings = "1200,n,8,1" '串口设置
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.InBufferSize = 512 '接收缓冲区大小
MSComm1.OutBufferSize = 512 '发送缓冲区大小
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True '开串口
Timer1.Interval = 200 '200ms Timer1使strData清空
End Sub
Private Sub CmdReceiveTemp_Click() '接收温度
Dim CmdByte As String
Dim ReceiveTemp As String
Dim n As Integer
'发控制字5A
CmdByte = "5A"
'CmdByte = Val(CmdByte)
CmdByte = h_to_b(CmdByte) '十六进制转二进制
MSComm1.Output = CmdByte '5A = 0101 1010
'接收6个字节数据
For n = 1 To 1000
Next n
'收到数据触发OnComm事件
ReceiveTemp = Text1
ReceiveTemp = b_to_d(ReceiveTemp)
TxtReceiveTemp.Text = ReceiveTemp '输出十进制温度数值
TxtRD.Text = Text2 'RD显示
End Sub
Private Sub CmdSendPara_Click() '发送参数
Dim CmdByte As String
Dim sj() As Byte
Dim sj_Txt As String
Dim i As Integer
'发控制字A5
CmdByte = "A5"
'CmdByte = Val(CmdByte)
CmdByte = h_to_b(CmdByte) '十六进制转二进制
MSComm1.Output = CmdByte
sj_Txt = TxtSendPara.Text '取得要发送的数据
ReDim sj(Len(sj_Txt) / 2 - 1) 'i从0开始
For i = 0 To Len(sj_Txt) - 1 Step 2
sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2)) 'Val:字符型转数据型
Next
MSComm1.Output = sj
End Sub
Private Sub CmdReceivePara_Click() '接收参数
Dim CmdByte As String
'发控制字AA
CmdByte = "AA" '发控制字AA
'CmdByte = Val(CmdByte)
CmdByte = h_to_b(CmdByte) '十六进制转二进制
MSComm1.Output = CmdByte
'然后接收串口送来的4个字节数据(OnComm事件)
TxtReceivePara.Text = Text1
End Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim strBuff As String
Dim intInputLen As Integer
Text1 = ""
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
intInputLen = MSComm1.InBufferCount
ReDim BytReceived(intInputLen)
BytReceived() = MSComm1.Input
Call Receive
'数据处理代码
End Select
End Sub
Public Sub Receive()
Dim i As Integer
For i = 0 To UBound(BytReceived)
strData = strData & hex(BytReceived(i))
Next
'strDataInteger = hex(BytReceived(1))
'Text1 = strDataInteger '温度值整数部分,十六进制
'Text1 = HexToDec(Text1)
Text2 = strData 'RD显示的
'Text1 = strData
'Text1 = b_to_d(Text1) '二进制转十进制
End Sub
Private Sub Timer1_Timer()
strData = ""
strDataInteger = ""
End Sub
再次感谢。