VS2010 串口通信
各位大位,小弟最近刚开始着手弄VS2010做上位机,苦于在网上也没能找到相关例程来学习,现在只能在此求助于各位高手了。
我现在把我上位机串口通信的要求叙述如下,希望高手帮忙。
1、上下位机进行串口通信,数据类型为16进制数据;
2、当上位机接收到下位机数据时,便进行串口中断接收函数,同时读取通信缓冲区内的字节个数,并将缓冲内的数据读出并保存至指定的数据中。
现在将我的代码贴上来,和大家一起分享下,希望能指点我的错误。
因为现在我在家学车,不在实验室。所以我所做的上位机程序,希望大家能帮我测试或者检查一下,感激不尽了。
'定义RS232串口收发数组
Dim txbuf(7) As Byte
Dim rxbuf(7) As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'==========================================================================
'=========================================================================
'串口1初始化配置-------------------------------------------------------------
RS232.Close()
RS232.PortName = "COM1"
RS232.BaudRate = 9600 '波特率
RS232.DataBits = 8 '数据位长度
RS232.Parity = IO.Ports.Parity.None '无校验
RS232.StopBits = IO.Ports.StopBits.One '1个停止位
RS232.Open()
txbuf(0) = &H1
txbuf(1) = &H2
txbuf(2) = &H3
txbuf(3) = &H4
txbuf(4) = &H5
txbuf(5) = &H6
txbuf(6) = &HBA
txbuf(7) = &HDE
CRC16(txbuf)
‘Timer1.Enabled = True
End Sub
这部分是我的串口接收代码,我接收的是16进制数据
'RS232通信---串口中断接收数据
Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
RS232.Read(rxbuf, 0, 8)
RS232.DiscardInBuffer() '丢弃串口接收缓冲区中的数据
If (CRC16(rxbuf) = 0) Then
End If
End Sub
CRC校验代码
'CRC校验函数
Function CRC16(ByVal data_in() As Byte) As Integer
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
Dim CL As Byte, CH As Byte '多项式码&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim i As Integer
Dim Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = 0 To UBound(data_in)
CRC16Lo = CRC16Lo Xor data_in(i) '每一个数据与CRC寄存器进行异或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1
End If '否则自动补0
If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next i
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi 'CRC高位
ReturnData(1) = CRC16Lo 'CRC低位
CRC16 = ReturnData(0) * 256 Or ReturnData(1)
End Function
以上就是我的串口发收代码,接收下位机发送上来的数据,利用串口中断方式接收16进制数据,另加接收CRC校验。请高手们不吝赐教。
VS2005 VS2010 串口 --------------------编程问答-------------------- http://download.csdn.net/detail/veron_04/4037248 --------------------编程问答-------------------- VB.NET2008的串口工程 --------------------编程问答-------------------- 恩恩,谢谢。对了,你们有没有用VB上位机驱动打印机打印需要打印 数据? --------------------编程问答--------------------
没有。 --------------------编程问答-------------------- 除
补充:VB , 控件