首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

向求救,串口调用Writefile 是否只能发送字符的ASIIC,怎么能够发送超出ASIIC定义的16进制,

2012-03-11 
向各位大哥求救,串口调用Writefile 是否只能发送字符的ASIIC,如何能够发送超出ASIIC定义的16进制,急!!各位

向各位大哥求救,串口调用Writefile 是否只能发送字符的ASIIC,如何能够发送超出ASIIC定义的16进制,急!!
各位大哥,小弟最近用API函数调试串口,想做一个按输入的16进制字符串输出也是16进制的工具,使用Writefile写串口,但发现只能输入ASIIC范围内的字符串,试验时发现在“00”-“7F”没有问题,但超出7F就输出不正常,发现是受到ASIIC转换的限制,想问Writefile 是否能够向串口写入输出非ASIIC的字符,应该如何调整,附上部分代码请教,谢谢!
Public Declare Function WriteFile Lib "kernel32" _
  (ByVal hFile As Long, ByRef lpBuffer As Any, _
  ByVal nNumberOfBytesToWrite As Long, _
  ByRef lpNumberOfBytesWritten As Long, _
  ByRef lpOverlapped As Any) As Long 'OVERLAPPED) As Long

Private Sub cmdSend_Click()
  Dim sSend As String
  Dim lenBuf As Long '存放将要写入串口的数据长度
  Dim NumberWritten As Long '用来记录写入的字节长度
  Dim sSendchr As String
  Dim sSendchrTEMP As Long
  NumberWritten = 0
  sSend = Trim$(txtInput.Text) '输入的16进制字符串数
  lenBuf = Len(sSend) - 1
  sSendchrTEMP = CInt("&H" & sSend) '字符串转换为16进制数
  sSendchr = Chr(sSendchrTEMP) '取得ASIIC值
  PurgeComm nSendHand, PURGE_RXABORT Or PURGE_RXCLEAR '清空缓冲区
  If WriteFile(nSendHand, ByVal sSendchr, lenBuf, NumberWritten, ByVal 0&) <= 0 Then
  MsgBox "向串口写数据发生错误!"
  End If
  Exit Sub
err:
  MsgBox err.Description
End Sub


[解决办法]
nSendHand 如何打开的,应该有参数指定数据位数,你现在的数据位数是 7,将它改成 8。
[解决办法]
用 ChrW()
[解决办法]
不用字符串的方式,改用字节数组的方式发送就没这问题。也就是WriteFile中的Byval sSendChr这个参数改成字节数组或整形数组。

热点排行