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

请问PC机通过串口与单片机通信有关问题

2012-01-26 
请教PC机通过串口与单片机通信问题我最近在做一个PC机(通过VB)与单片机(红外温度传感器)通信的程序。单片机

请教PC机通过串口与单片机通信问题
我最近在做一个PC机(通过VB)与单片机(红外温度传感器)通信的程序。单片机汇编语言部分保证正确,因为我用公司里现成的delphi写的程序读过数据且正确。但是我用VB写的程序却读不到数据,请大大们帮我看看,万分感谢!   程序如下:

(控制字5A是请求单片机发温度数据,用Text2暂时保存接收到的6个字节的温度数据)

Dim   Text1   As   String
Dim   Text2   As   String
Dim   BytReceived()   As   Byte
Dim   Lbljieshou   As   String
Dim   lenInput   As   String
Dim   strData   As   String
Dim   strDataInteger   As   String
Option   Explicit

Private   Sub   Form_Load()
        MSComm1.CommPort   =   1                                             'COM1串口
        MSComm1.Settings   =   "1200,n,8,1 "                       '串口设置
        MSComm1.InputMode   =   comInputModeBinary         '采用二进制传输
        MSComm1.InBufferCount   =   0                                   '清空接受缓冲区
        MSComm1.OutBufferCount   =   0                                 '清空传输缓冲区
        MSComm1.InBufferSize   =   512                                 '接收缓冲区大小
        MSComm1.OutBufferSize   =   512                               '发送缓冲区大小
        MSComm1.RThreshold   =   1                                         '产生MSComm事件
        MSComm1.PortOpen   =   True                                       '开串口
        Timer1.Interval   =   200                                           '200ms   Timer1使strData清空
End   Sub


Private   Sub   CmdReceiveTemp_Click()                         '接收温度
        Dim   CmdByte   As   String
        Dim   ReceiveTemp   As   String
        Dim   n   As   Integer
        '发控制字5A
        CmdByte   =   "5A "
        'CmdByte   =   Val(CmdByte)
        CmdByte   =   h_to_b(CmdByte)                                   '十六进制转二进制
        MSComm1.Output   =   CmdByte                                     '5A   =   0101   1010
        '接收6个字节数据


        For   n   =   1   To   1000
        Next   n
        '收到数据触发OnComm事件
        ReceiveTemp   =   Text1
        ReceiveTemp   =   b_to_d(ReceiveTemp)
        TxtReceiveTemp.Text   =   ReceiveTemp                   '输出十进制温度数值
        TxtRD.Text   =   Text2                                                 'RD显示
End   Sub

Private   Sub   CmdSendPara_Click()                               '发送参数
        Dim   CmdByte   As   String
        Dim   sj()   As   Byte
        Dim   sj_Txt   As   String
        Dim   i   As   Integer
        '发控制字A5
        CmdByte   =   "A5 "
        'CmdByte   =   Val(CmdByte)
        CmdByte   =   h_to_b(CmdByte)                                   '十六进制转二进制
        MSComm1.Output   =   CmdByte
        sj_Txt   =   TxtSendPara.Text                                   '取得要发送的数据
        ReDim   sj(Len(sj_Txt)   /   2   -   1)                           'i从0开始
        For   i   =   0   To   Len(sj_Txt)   -   1   Step   2
              sj(i   /   2)   =   Val( "&H "   &   Mid(sj_Txt,   i   +   1,   2))         'Val:字符型转数据型
        Next
              MSComm1.Output   =   sj
End   Sub

Private   Sub   CmdReceivePara_Click()                         '接收参数
        Dim   CmdByte   As   String
        '发控制字AA
        CmdByte   =   "AA "                                                         '发控制字AA
        'CmdByte   =   Val(CmdByte)
        CmdByte   =   h_to_b(CmdByte)                                   '十六进制转二进制
        MSComm1.Output   =   CmdByte
        '然后接收串口送来的4个字节数据(OnComm事件)
        TxtReceivePara.Text   =   Text1
End   Sub


Private   Sub   MSComm1_OnComm()


On   Error   Resume   Next
        Dim   strBuff   As   String
        Dim   intInputLen   As   Integer
        Text1   =   " "
        Select   Case   MSComm1.CommEvent
                Case   comEvReceive
                        MSComm1.InputLen   =   0
                        intInputLen   =   MSComm1.InBufferCount
                        ReDim   BytReceived(intInputLen)
                        BytReceived()   =   MSComm1.Input
                        Call   Receive
                        '数据处理代码
        End   Select
End   Sub

Public   Sub   Receive()
        Dim   i   As   Integer
        For   i   =   0   To   UBound(BytReceived)
                strData   =   strData   &   hex(BytReceived(i))
        Next
        'strDataInteger   =   hex(BytReceived(1))
        'Text1   =   strDataInteger                               '温度值整数部分,十六进制
        'Text1   =   HexToDec(Text1)
        Text2   =   strData                                                     'RD显示的
        'Text1   =   strData
        'Text1   =   b_to_d(Text1)                                       '二进制转十进制
End   Sub

Private   Sub   Timer1_Timer()
        strData   =   " "
        strDataInteger   =   " "
End   Sub


再次感谢。

[解决办法]
串口是字符设备,经串口传送的是ASCII字符的二进制数据流:
Private Sub CmdReceiveTemp_Click() '接收温度
Dim CmdByte As Byte
CmdByte = &H5A
MSComm1.Output = Chr(CmdByte)
End Sub

热点排行