大虾!!求救:怎么调用系统的COM1口(串口)通讯??
系统本身自代了两个串口(com1,com2)请问我怎么才
能像超级终端一样,调用它并进行通讯??
在线等待!谢谢各位大虾!!
问题点数:100、回复次数:11Top
1 楼zhangning163(心平气和)回复于 2003-05-04 11:39:05 得分 10
在MS DOS下用命令MOD COM1 96,8,0,1 设置;
在VB 中可用MSCOMM控件或API引用;
Top
2 楼flyahead0()回复于 2003-05-04 11:47:43 得分 10
mscomm控件,每个口独立使用一个mscomm控件。察看MSDN相关内容。Top
3 楼cpf_cn(令狐飞)回复于 2003-05-04 11:54:11 得分 10
upTop
4 楼szqlovesly(szq)回复于 2003-05-04 12:09:37 得分 10
mscomm控件就可以了Top
5 楼appltliu(applet)回复于 2003-05-06 15:47:39 得分 0
那位大虾!能给我一个实例吗?/做一个简单的串口收发数据的功能!!Top
6 楼yefanqiu(叶帆)回复于 2003-05-06 16:17:43 得分 50
'***********************************************************************************8
'方法
Public Sub OpenPort(PortNo As Integer)
On Error GoTo ErrExit
MSComm1.CommPort = PortNo '采用COM端口
MSComm1.Settings = mbps + "," + mCheckOut + ",8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件
MSComm1.RThreshold = 0 '不产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True '打开端口
Exit Sub
ErrExit:
MsgBox Err.Description
End Sub
Public Sub ClosePort()
On Error GoTo ErrExit
MSComm1.PortOpen = False '打开端口
Exit Sub
ErrExit:
MsgBox Err.Description
End Sub
'读数据
Public Function GetData(lngAddr As Long, bytData() As Byte, Optional bytNum As Byte = 1) As Boolean
On Error GoTo ErrExit
Dim MyArray(0 To 10) As Byte
Dim MyArrays() As Byte
Dim strBCD As String
Dim sngTime As Single
Dim MyData As Variant
Dim mTime As Single
Dim i As Integer
mTime = (mWaitTime + 10 * bytNum) / 1000#
strBCD = Trim(Format(lngAddr, "000000"))
MyArray(0) = &HAC
MyArray(1) = &H55 '读
MyArray(2) = &H55
MyArray(3) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(6) = MyArray(5)
MyArray(7) = Val(Mid(strBCD, 5, 1)) * 16 + Val(Mid(strBCD, 6, 1))
MyArray(8) = MyArray(7)
MyArray(9) = bytNum '要读数据的个数
MyArray(10) = bytNum
MSComm1.Output = MyArray
MSComm1.InBufferCount = 0 '清空接收缓冲区
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '
sngTime = Timer
Do
DoEvents
If Abs(Timer - sngTime) > mTime Then GetData = False: Exit Function '等待100ms
Loop Until MSComm1.InBufferCount = 1 + bytNum * 2
MyData = MSComm1.Input
MyArrays = MyData
If MyArrays(0) = &HAC Then
GetData = True
For i = 1 To bytNum
bytData(i - 1) = MyArrays(2 * i)
If MyArrays(2 * i - 1) <> MyArrays(2 * i) Then GetData = False
Next i
Else
GetData = False
End If
Exit Function
ErrExit:
MsgBox Err.Description
End Function
'写数据
Public Function SetData(lngAddr As Long, bytData As Byte) As Boolean
On Error GoTo ErrExit
Dim MyArray(0 To 10) As Byte
Dim MyArrays() As Byte
Dim strBCD As String
Dim sngTime As Single
Dim MyData As Variant
Dim mTime As Single
mTime = mWaitTime / 1000#
strBCD = Trim(Format(lngAddr, "000000"))
MyArray(0) = &HAC
MyArray(1) = &HAA '写
MyArray(2) = &HAA
MyArray(3) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
MyArray(4) = MyArray(3)
MyArray(5) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
MyArray(6) = MyArray(5)
MyArray(7) = Val(Mid(strBCD, 5, 1)) * 16 + Val(Mid(strBCD, 6, 1))
MyArray(8) = MyArray(7)
MyArray(9) = bytData
MyArray(10) = bytData
MSComm1.Output = MyArray
MSComm1.InBufferCount = 0 '清空接收缓冲区
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '
sngTime = Timer
Do
DoEvents
If Abs(Timer - sngTime) > mTime Then SetData = False: Exit Function '等待100ms
Loop Until MSComm1.InBufferCount = 3
MyData = MSComm1.Input
MyArrays = MyData
If MyArrays(0) = &HAC Then
If MyArrays(1) = MyArrays(2) And MyArrays(1) = bytData Then
SetData = True
Exit Function
End If
End If
SetData = False
Exit Function
ErrExit:
MsgBox Err.Description
End Function
Top
7 楼planetike(胜哥哥)回复于 2003-05-06 16:30:28 得分 0
使用comm控件,它里面有一个参数指定comm1,还是comm2Top
8 楼appltliu(applet)回复于 2003-05-06 21:37:09 得分 0
yefanqiu(叶帆)同志:
大恩不言谢!!以后但有用到小弟的地方尽管说!!thank you very much!!Top
9 楼HanZhu1(寒竹)回复于 2003-05-06 22:39:40 得分 10
在vb下mscomm还是比较方便的Top
10 楼HanZhu1(寒竹)回复于 2003-05-21 08:47:42 得分 0
强烈推举mscomm控件
Top




