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

📄 form1.frm

📁 CRC16效验码计算,很方便计使用,在MODBUS通讯中比较有用
💻 FRM
字号:
VERSION 5.00
Begin VB.Form FRMCRC 
   Caption         =   "CRC-16(效验)"
   ClientHeight    =   4185
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   7380
   LinkTopic       =   "Form1"
   ScaleHeight     =   4185
   ScaleWidth      =   7380
   StartUpPosition =   3  'Windows Default
   Begin VB.TextBox Text4 
      Height          =   495
      Left            =   4440
      TabIndex        =   9
      Text            =   "Text4"
      Top             =   3120
      Width           =   1215
   End
   Begin VB.TextBox Text3 
      Alignment       =   2  'Center
      Height          =   495
      Left            =   3720
      TabIndex        =   6
      Text            =   "????"
      Top             =   960
      Width           =   2055
   End
   Begin VB.TextBox Text2 
      Alignment       =   2  'Center
      Height          =   495
      Left            =   600
      TabIndex        =   5
      Text            =   "11021"
      Top             =   2160
      Width           =   2175
   End
   Begin VB.TextBox Text1 
      Alignment       =   2  'Center
      Height          =   495
      Left            =   600
      TabIndex        =   4
      Text            =   "D5"
      Top             =   960
      Width           =   2175
   End
   Begin VB.CommandButton Command1 
      Caption         =   "计算"
      BeginProperty Font 
         Name            =   "华文中宋"
         Size            =   12
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   3960
      TabIndex        =   0
      Top             =   2160
      Width           =   1455
   End
   Begin VB.Label Label3 
      Caption         =   "Label3"
      Height          =   255
      Left            =   1080
      TabIndex        =   8
      Top             =   3000
      Width           =   735
   End
   Begin VB.Label Label2 
      AutoSize        =   -1  'True
      Caption         =   "Label2"
      Height          =   195
      Left            =   3120
      TabIndex        =   7
      Top             =   2880
      Width           =   480
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      Caption         =   "CRC"
      BeginProperty Font 
         Name            =   "华文中宋"
         Size            =   14.25
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H8000000D&
      Height          =   315
      Index           =   2
      Left            =   4320
      TabIndex        =   3
      Top             =   480
      Width           =   675
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      Caption         =   "衍生多项式"
      BeginProperty Font 
         Name            =   "华文中宋"
         Size            =   14.25
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H8000000D&
      Height          =   315
      Index           =   1
      Left            =   840
      TabIndex        =   2
      Top             =   1680
      Width           =   1500
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      Caption         =   "原值"
      BeginProperty Font 
         Name            =   "华文中宋"
         Size            =   14.25
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H8000000D&
      Height          =   315
      Index           =   0
      Left            =   1200
      TabIndex        =   1
      Top             =   480
      Width           =   600
   End
End
Attribute VB_Name = "FRMCRC"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'计算CRC码的步骤为:
'   1、预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;
''   2、把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
'   3、把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
'   4、如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
'   5、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
'   6、重复步骤2到步骤5,进行下一个8位数据的处理;
'7   ?最后得到的CRC寄存器即为CRC码?

Private Sub Command1_Click()
Dim BCRC%, GP&, BDF&

Label3.Caption = Hex(65535 Xor 1)
BCRC = 16
GP = Val("&H" & CStr(Text2.Text) & "&")
DBF = Val("&H" & CStr(Text1.Text) & "&")
Label2.Caption = GP & "/" & DBF
Text3.Text = Hex(CalCRC(BCRC, GP, BDF))

End Sub

Function CalCRC(BCRC As Integer, GP As Long, BDF As Long) As Long
 Dim C1&, C2&
 Dim A1%, PreC1&
 Dim Leftvalue%, A1Shift%
 If BDF = 0 Then
   CalCRC = 0
   Exit Function
 End If
 A1 = (Len(Hex(BDF)) - 1) * 4                      '求出第一次的参考偏移位置
 C1 = BDF * 2 ^ BCRC                               '将被求值先乘上位值
 Leftvalue = Val("&H" & Mid(Hex(BDF), 1, 1))       '取出最左边的值
 If Leftvalue >= 1 Then A1Shift = 1                '只有一位
  If Leftvalue >= 2 Then A1Shift = 2               '只有2位
   If Leftvalue >= 4 Then A1Shift = 3              '只有3位
    If Leftvalue >= 8 Then A1Shift = 4             '只有4位
 A1 = A1 + (A1Shift - 1)                            '第一次偏移值
 C2 = GP * 2 ^ A1                                   '第一次运算值
 Do
  PreC1 = C1                                       '记录先前值
  C1 = C1 Xor C2                                   '二进制除法之余值
  Do
  A1 = A1 - 1
  If C1 > PreC1 Then                               '如果余数大于衍生多项值,则予以降序
    C1 = PreC1 Xor (GP * 2 ^ A1)
   Else
    Exit Do
  End If
 Loop
 C2 = GP * 2 ^ A1                                  '下一次运算值
 Loop Until C1 <= GP                               '直到余数小于衍生多项式
 CalCRC = C1
End Function

⌨️ 快捷键说明

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