用VB6.0实现串口通信

Function ConvertHexChr(str As String) As Byte

Dim t As String

If Len(str) <= 2 Then ' 1位或2位

t = "&H" & str

If IsNumeric(t) Then

ConvertHexChr = CByte(t)

Else

ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1

End If

Else

ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1

End If

End Function

Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer

'二位16进制转化为 BYTE 数组

Dim j As String

Dim i As Long

Dim o As Long

j = Replace(strText, "", "") '去掉空格

i = Len(j)

If i And 1 = 1 Then '奇数

j = Left(j, i - 1) & "0" & Mid(j, i, 1) '少一位,最后一个数补一位

i = i + 1

End If

strHexToByteArray = i / 2

ReDim bytByte(strHexToByteArray)

For o = 1 To strHexToByteArray

bytByte(o) = ConvertHexChr(Mid(j, o * 2 - 1, 2))

Next o

End Function

字串转为 byte 数组后,再发送.

----------------------------------------------------------

'这个例子中,是读到指定的字符就结束,否则就循环

Private Sub Form_Load ()

' 保存输入子串的缓冲区

Dim Instring As String

' 使用 COM1。

MSComm1.CommPort = 1

' 9600 波特,无奇偶校验,8 位数据,一个停止位。

MSComm1.Settings = "9600,N,8,1"

' 当输入占用时,

' 告诉控件读入整个缓冲区。

MSComm1.InputLen = 0

' 打开端口。

MSComm1.PortOpen = True

' 将 attention 命令送到调制解调器。

MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保

' 调制解调器以"OK"响应。

' 等待数据返回到串行端口。

Do

DoEvents

Buffer$ = Buffer$ & MSComm1.Input

Loop Until InStr(Buffer$, "OK" & vbCRLF)

' 从串行端口读 "OK" 响应。

' 关闭串行端口。

MSComm1.PortOpen = False

End Sub

---------------------------------------------------------

'这个例子中,当 com 口有事件发生时去操作

OnComm 事件示例

下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。

Private Sub MSComm_OnComm ()

Select Case MSComm1.CommEvent

' Handle each event or error by placing

' code below each case statement

' 错误

Case comEventBreak ' 收到 Break。

Case comEventCDTO ' CD (RLSD) 超时。

Case comEventCTSTO ' CTS Timeout。

Case comEventDSRTO ' DSR Timeout。

Case comEventFrame ' Framing Error

Case comEventOverrun '数据丢失。

Case comEventRxOver'接收缓冲区溢出。

Case comEventRxParity' Parity 错误。

Case comEventTxFull '传输缓冲区已满。

Case comEventDCB '获取 DCB] 时意外错误

' 事件

Case comEvCD ' CD 线状态变化。

Case comEvCTS ' CTS 线状态变化。

Case comEvDSR ' DSR 线状态变化。

Case comEvRing ' Ring Indicator 变化。

Case comEvReceive ' 收到 RThreshold # of

chars.

Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '

'

Case comEvEof ' 输入数据流中发现 EOF 字符

'

End Select

End Sub