⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscomm.htm

📁 Visual Basic是一个Windows系统下流行的应用程序开发平台。其方便的界面设计使程序员能节省大量时间
💻 HTM
📖 第 1 页 / 共 2 页
字号:
            OpenThePort(cPort as String,cBaud as String,cParity as String,cData 
            as String,tStops as String)As Boolean<BR>Dim lResult as Long<BR>Dim 
            lHandle as Long<BR>Dim DCB_COMM as DCB<BR>Dim cDCBConfig as 
            String<BR>lHandle = CreateFile(cPort,GENERIC_READ Or 
            GENERIC_WRITE,0&amp;,0&amp;,OPEN_EXISTING,0&amp;,0&amp;)<BR>If 
            lHandle = -1 Then &rsquo;打开串口失败<BR>OpenThePort = False<BR>MsgBox 
            &ldquo;串口可能正被其他应用程序占用!&rdquo;<BR>lResult = CloseHandle(lHandle) 
            &rsquo;先关闭串口后再打开<BR>If lResult = 0 Then<BR>OpenThePort<BR>Exit 
            Function<BR>End If<BR>End If<BR>cDCBConfig.band = 2400 
            &rsquo;设置DCB<BR>cDCBConfig.parity = None<BR>cDCBConfig.data = 
            8<BR>cDCBConfig.stop = 1<BR>lResult = 
            BuildCommDCB(cDCBConfig,DCB_COMM) &rsquo;按用户设定配置一个DCB结构<BR>If 
            lResult = 0 Then<BR>OpenThePort = False<BR>MsgBox 
            &ldquo;无法建立DCB设备控制块&rdquo;<BR>Exit Function<BR>End If<BR>lResult = 
            SetCommState(lHandle,DCB_Comm) &rsquo;实际设置一个串口的DCB<BR>If lResult = 0 
            Then<BR>OpenThePort = False<BR>MsgBox 
            &ldquo;无法建立DCB设备控制块&rdquo;<BR>Exit Function<BR>End If<BR>OpenThePort 
            = True<BR>End Function<BR><BR>Private Sub SendHand ( ) 
            &rsquo;发送握手信号的子过程<BR>Dim Nchars As Long<BR>Static Readbuff As String 
            * 1<BR>Static Writebuff As String * 1<BR>Dim lpDCB As DCB<BR>Dim 
            lRet As Long<BR>Dim lHandle As Long<BR>Dim lpOverlapped As 
            OVERLAPPED<BR>Dim RNum As Integer<BR><BR>MsgBox 
            &ldquo;请把电卡读卡器插在串口2上!&rdquo;,48,&ldquo;提示窗口&rdquo;<BR>lHandle = 
            OpenThePort(COMM1,2400,None,8,1)<BR>lRet = PurgeComm( lHandle,1 ) 
            &rsquo;清输出缓冲区<BR>lRet = PurgeComm( lHandle,0 ) &rsquo;清输入缓冲区<BR>lRet 
            = GetCommState ( lHandle,lpDCB ) 
            &rsquo;获得通讯口的状态<BR>Shand:<BR>Writebuff$ = Chr$(&amp;H8F)<BR>lRet = 
            WriteFile ( lHandle,Writebuff$,1,Nchars,lpOverlapped ) 
            &rsquo;送握手信号入串口缓冲区<BR>If lRet &lt;= 0 Then<BR>MsgBox 
            &ldquo;发送操作出错,电卡握手信号未发送成功&rdquo;, 16<BR>GoTo Shand 
            &rsquo;不成功则重发<BR>Else<BR>GoTo Qtest<BR>End If<BR>GoTo 
            Shand<BR>Qtest:<BR>Readbuff$ =&ldquo; &rdquo; &rsquo;清除缓冲区为空<BR>Do 
            While lHandle &rsquo;循环查询串口<BR>RNum = 0 
            &rsquo;设置读串口次数的指针为0<BR>ReadAgain:<BR>lRet = ReadFile( 
            lHandle,Readbuff$,1,Nchars,lpOverlapped )<BR>If lRet &lt; 0 
            Then<BR>MsgBox &ldquo;读取应答信号时出错&rdquo;, 16<BR>End If<BR>If lRet = 0 
            Then<BR>If RNum &gt; 1000 Then &rsquo;只读1000次串口,以免陷入死循环<BR>MsgBox 
            &quot;电卡没有插接好或电卡没有接在串口上!&quot;<BR>GoTo CloseP<BR>End If<BR>RNum = 
            RNum + 1<BR>GoTo ReadAgain<BR>End If<BR>If Hex$(Asc(Readbuff)) 
            &lt;&gt; Hex$(&amp;HFF) Then<BR>GoTo Shand 
            &rsquo;回送码不正确则返回继续发送握手信号<BR>Else<BR>Label1.Caption = 
            &ldquo;握手信号是:&rdquo;+Hex$(Asc(Readbuff$))<BR>Msgbox 
            &ldquo;握手信号正确,已正确联机&rdquo;<BR>GoTo CloseP<BR>End 
            If<BR>Loop<BR>CloseP: lRet = CloseHandle( lHandle )<BR>If lRet = 0 
            Then<BR>MsgBox &ldquo;串行通讯口关闭成功&rdquo;,48,&ldquo;提示窗口&rdquo;<BR>End 
            If<BR>End Sub<BR><BR>这里,要注意的是:当PC机与单片机系统通信时,单片机数据存储区( RAM 
            )内的数据是十六进制,在信号线上传输的是十六进制数的ASCII码的二进制形式;而Windows系统下使用的是ANSI码,ANSI码仅在前126个与ASCII码相同。即在Win95下接收到的是十六进制数的ASCII码的字符串,可先转换为ANSI码后再在Win95下还原为十六进制数。<BR><BR>具体如下:Code$ 
            = Hex$( Asc ( Readbuff$ ) 
            )<BR><BR>另外,由于32位API函数参数的数据类型的变化,所有整形参数都被换为长整型(Long)以支持32位的处理,这一点在设置返回值尤其如此。<BR><BR>同时,这些API函数、类型及常量在调用之前,必须先声明再使用。<BR><BR>五、结束语<BR><BR>由上可见,调用API接口的VB串口查询法具有实现简便、难度低、代码精简的突出优点。很适合一般VB程序员在编写通信程序时使用。<BR><BR>参考文献<BR>1 
            美 Darwin Boyle等 《 Visual Basic 4 Developer's Guide 》<BR>北京:机械工业出版社 
            1997.1<BR>2 美 Stefano Maruzzi 《The Microsoft Windows 95 Developer's 
            Guide》<BR>北京:机械工业出版社 1997.1<BR></TD></TR>
    <TR>
        <TD></TD></TR>
    <TR>
        <TD align=middle>| <A href="file:///H:/备份/OLD/98-y5-yyz.htm" 
            target=right>返回目录</A> 
|</TD></TR></TBODY></TABLE></CENTER></DIV></FONT></DIV></BODY></HTML>
</x-html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -