求教VB串口通信(希望cbm666老师看下)
vb吧
全部回复
仅看楼主
level 1
liu_yi_xf 楼主
我在写一个VB串口调试板卡的程序,给板卡发送&H061111,用串口调试助手可以把板卡指示灯点亮,但是我自己写的程序就不行。
我是在文本框里面输入要发送的数据,用示波器观测波形,当在文本框写入1时,串口发送的似乎是8C,请问我怎样才能在文本框中输入要发的16进制数(比如FF),在串口线上接收到的数据是对应的二进制(1111 1111)。
2009年04月20日 05点04分 1
level 8
Val("&H" & Text1.Text)可以将输入字符串转换成十六进制数
2009年04月20日 05点04分 2
level 13
字符串转换成十六进制 使用 Hex 涵数即可
For i=1 to len(text1.text)
Hex(Asc(Mid(Text1.text,i,1)))
2009年04月20日 06点04分 3
level 13
2009年04月20日 06点04分 4
level 8
cbm666的代码是转换成字符串表示的十六进制格式,适用于文本方式,而我的代码是转换成十六进制数,适用于字节数组方式。
2009年04月20日 06点04分 5
level 1
liu_yi_xf 楼主
谢谢了!
我用调试助手看到的波形很短,但是自己写的程序出来的波形长很多(输入的数据是一样的),不知道怎么回事,我自己再看看吧。
2009年04月20日 07点04分 6
level 1
liu_yi_xf 楼主
这个是串口助手输入060101时串口线上传递的数据波形,
2009年04月20日 07点04分 7
level 1
liu_yi_xf 楼主
这个是我写的程序,输入060101时出来的波形,
2009年04月20日 07点04分 8
level 1
liu_yi_xf 楼主
我用的是二进制传输模式,
在文本框里输入的060101
data=Val("&H" & Trim(Text1.Text))
mscomm1.output = hex(data)
2009年04月20日 08点04分 9
level 8
你还是用的文本方式。可以将示波器的通信协议发上来看看。
2009年04月21日 00点04分 10
level 1
liu_yi_xf 楼主
今天总算是调好了,原因就是我不会用byte数组,而且一直有一个错误的概念就是把mscomm的inputmode格式设置成二进制,那么我发的数据也是二进制了。
output必须给byte数组才会以数据原始形态发出。因为系统不会对byte数组内容进行预处理。
翻书看了看,byte数组的主要用途就是为了与32位API函数之间相互传递二进制缓冲区。对于16位和32位的VB应用程序,如果32位版本中包含Unicode字符,系统会自动将双字节的Unicode序列转换为单字节的ANSI字符,但是,如果字符串包含二进制数据,其内容将无法识别。为了避免出现问题,应仅在字符串中传递字符型数据,而在byte数组中传递二进制数据。
又学到一点东西……
2009年04月21日 14点04分 11
1