解决方案 »

  1.   


    '=================================
    '名称   CRC16
    '参数   Data    Byte()  数据内容
    '       Offset  Integer 数组起始位置,默认值 0(从数组第一个元素开始)
    '       Length  Integer 计算长度,默认值 0(计算整个数组)
    '返回   Byte() 2字节,低在前,高在后
    '说明   计算CRC16值
    '日期   2007-03-09
    '       2007-03-15  修改Length判断
    '=================================
    Public Function GetCRC16(Data() As Byte, Optional ByVal Offset As Integer = 0, Optional ByVal Length As Integer = 0) As Byte()
      Dim CRC16Lo As Byte, CRC16Hi As Byte      'CRC寄存器
      Dim CL As Byte, CH As Byte                '多项式码&HA001
      Dim SaveHi As Byte, SaveLo As Byte
      Dim I As Integer
      Dim Flag As Integer
      Dim ReturnData(1) As Byte
      CRC16Lo = &HFF
      CRC16Hi = &HFF
      CL = &H1
      CH = &HA0
      Length = IIf(Length < 1, UBound(Data) - Offset, Length - 1)   'Update 2007-03-15
      For I = Offset To Offset + Length
        CRC16Lo = CRC16Lo Xor Data(I) '每一个数据与CRC寄存器进行异或
        For Flag = 0 To 7
          SaveHi = CRC16Hi
          SaveLo = CRC16Lo
          CRC16Hi = CRC16Hi \ 2            '高位右移一位
          CRC16Lo = CRC16Lo \ 2            '低位右移一位
          If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
            CRC16Lo = CRC16Lo Or &H80      '则低位字节右移后前面补1
          End If                           '否则自动补0
          If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
            CRC16Hi = CRC16Hi Xor CH
            CRC16Lo = CRC16Lo Xor CL
          End If
        Next
      Next
      ReturnData(0) = CRC16Lo              'CRC低位
      ReturnData(1) = CRC16Hi              'CRC高位
      GetCRC16 = ReturnData
    End Function
      

  2.   

    用定时器处理,加个Timer定时器Private Sub Timer1_Timer()
        Static A As Integer
        Select Case A
            Case 0
               ‘第一条指令
            Case 1
               ‘第二条指令
            Case 2
               ‘第三条指令
        End Select
        A=(A+1)Mod 3
    End Sub