現在我要利用mscomm 傳送一個byte的資料
1個byte中有8個bits(12345678),
我想做到中分別代表是3個項目的signal-->>>>>>>>(123)是代表項目A(456)代表項目B,(78)代表項目C我可以做到這樣的嗎?請各位幫幫忙急用

解决方案 »

  1.   

    Dim signal As Byte
    signal = 81
    a = signal And 224
    b = signal And 56
    c = signal And 3
      

  2.   

    Sub GetSignal(ByVal Siginal As Byte, ByRef A As Byte, ByRef B As Byte, ByRef C As Byte)
        A = (Siginal And &HE0) \ &H20
        B = (Siginal And &H1C) \ 4
        C = (Siginal And &H3)
    End SubSub SetSignal(ByRef Siginal As Byte, ByVal A As Byte, ByVal B As Byte, ByVal C As Byte)
        Siginal = ((A And 7) * &H20) Or _
                  ((B And 7) * 4) Or _
                  (C And 3)
    End Sub
      

  3.   

    LZ:你的想法是行的通的。1字节BYTE其值在0-255间,写成2进制的字符串形式为00000000-11111111
    事实上每BIT可代表1个项目的signal状态,开或关。
    你可进行BIT运算,来判断某BIT是0或1从而发送控制信号。
    具体的进制转换可参阅下列链接:
    http://topic.csdn.net/u/20080108/14/67783c1e-1a7e-4613-904c-dda5e08a380b.html
      

  4.   

    LZ:你在Text1文本框中输入8字符0或1,按Command1,串口就根据8项目的0或1组合发送BYTE数据:
    Option Explicit
        Dim sBin As String
        Dim sHex As StringPublic Function HexToBin(ByVal sHex As String) As String
        Const s1 = "0000101001101111000", s2 = "0125A4936DB7FEC8"
        Dim i As Integer
        sHex = UCase(sHex)
        For i = 1 To Len(sHex)
            sBin = sBin & Mid(s1, InStr(1, s2, Mid(sHex, i, 1)), 4)
        Next i
        HexToBin = sBin
    End FunctionPublic Function BinToHex(ByVal sBin As String) As String
        Const s1 = "0000101001101111000", s2 = "0125A4936DB7FEC8"
        Dim i As Integer
        sBin = String(3 - (Len(sBin) - 1) Mod 4, "0") & sBin
        For i = 1 To Len(sBin) Step 4
            sHex = sHex & Mid(s2, InStr(1, s1, Mid(sBin, i, 4)), 1)
        Next i
        BinToHex = sHex
    End FunctionPrivate Sub Command1_Click() '2进制转16进制
        sBin = ""
        sHex = ""
        sBin = Text1
        BinToHex (sBin)
        Text2 = sHex
        If Len(sHex) Mod 2 = 0 And Len(sHex) > 0 Then
            Command2_Click
        End If
    End SubPrivate Sub Command2_Click()
        Dim sj(0) As Byte
        sj(0) = Val("&H" & sHex)
        MSComm1.Output = sj
    End SubPrivate Sub Form_Load()
        MSComm1.PortOpen = True
        Text1 = ""
        Text2 = ""
    End Sub
      

  5.   

    实际上1个BYTE字节可代表8个设备的开或关状态
    2个BYTE字节可代表16个设备的开或关状态
    这种方法在实时控制的串口通信中应用较多,我做过输出32个设备控制,输入24个故障报警,在中间就使用前面给出的代码做状态组合或分解。