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

📄 化境编程界.htm

📁 CRC16的源程序
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0048)http://www.5xsoft.com/data/200107/0716174401.htm -->
<HTML><HEAD><TITLE>化境编程界</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
	FONT-SIZE: 9pt; COLOR: #222222
}
.tx1 {
	BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 80px; BORDER-BOTTOM: 1px solid
}
.bt {
	BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 40px; CURSOR: hand; BORDER-BOTTOM: 1px solid; HEIGHT: 18px; BACKGROUND-COLOR: #f3eae9
}
</STYLE>

<STYLE type=text/css>.td1 {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; LINE-HEIGHT: 18px; BORDER-BOTTOM: #cccccc 1px solid
}
.td2 {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: 0px; BORDER-LEFT: 0px; COLOR: #333333; LINE-HEIGHT: 18px; BORDER-BOTTOM: 0px
}
.td3 {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: 0px; BORDER-LEFT: #cccccc 1px solid; COLOR: #333333; LINE-HEIGHT: 16px; BORDER-BOTTOM: 0px
}
</STYLE>

<STYLE type=text/css>A {
	COLOR: #000000; TEXT-DECORATION: none
}
A:hover {
	COLOR: #ff3300; TEXT-DECORATION: underline
}
</STYLE>

<SCRIPT language=javascript src="化境编程界.files/new.js"></SCRIPT>

<SCRIPT language=javascript>
function proc_search()
{
var obj;
if(!window.search.value)
{
alert('请输入要搜索的内容');
return;
}
location.href='http://www.5xsoft.com/search.asp?type=0&search='+window.search.value;
}
</SCRIPT>

<STYLE type=text/css>A.a1 {
	COLOR: #ffffff; TEXT-DECORATION: none
}
A.a1:hover {
	COLOR: #ff9900; TEXT-DECORATION: underline
}
</STYLE>

<STYLE type=text/css>.td4 {
	BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; LINE-HEIGHT: 16px; BORDER-BOTTOM: medium none
}
</STYLE>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY bottomMargin=0 bgColor=#b3befd leftMargin=0 topMargin=0 rightMargin=0>
<TABLE height=16 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
  <TBODY>
  <TR>
    <TD align=left width=415 height=16>&nbsp;</TD>
    <TD align=left width=46 bgColor=#000000><IMG height=16 
      src="化境编程界.files/angle.gif" width=40></TD>
    <TD align=middle width=308 bgColor=#000000><FONT color=#ffffff><A class=a1 
      href="http://www.5xsoft.com/menu/index2.htm">化境作品</A> | <A class=a1 
      href="http://www.5xsoft.com/about.htm">关于作者</A> | <A class=a1 
      href="http://www.5xsoft.com/menu/index0.htm">技术文章</A> | <A class=a1 
      href="http://bbs.5xsoft.com/">留言板</A></FONT></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
  <TBODY>
  <TR align=middle>
    <TD vAlign=bottom width=110 bgColor=#b3befd height=60><IMG height=60 
      src="化境编程界.files/5xsoft.gif" width=110></TD>
    <TD width=468>&nbsp;</TD>
    <TD vAlign=bottom width=191 bgColor=#b3befd>&nbsp;</TD></TR>
  <TR align=left>
    <TD colSpan=3 height=5></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff 
border=0>
  <TBODY>
  <TR>
    <TD></TD></TR></TBODY></TABLE>
<TABLE height=332 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
  <TBODY>
  <TR>
    <TD vAlign=top width=170 bgColor=#eeeeee>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR vAlign=top bgColor=#b3befd>
          <TD colSpan=2 height=65><BR>&nbsp;站内文章搜索:<BR>&nbsp; <INPUT class=tx1 
            id=search name=search> <INPUT class=bt style="WIDTH: 40px" onclick=proc_search(); type=button value=搜索 name=button> 
          </TD></TR>
        <TR>
          <TD width="9%">&nbsp;</TD>
          <TD width="91%">&nbsp;</TD></TR>
        <TR>
          <TD bgColor=#eeeeee height=257>&nbsp;</TD>
          <TD class=td4 vAlign=top><STRONG>相关内容: </STRONG><BR>- <A 
            title=Combo的自动查询技术 
            href="http://www.5xsoft.com/data/200302/2709554101.htm">Combo的自动查询技术</A><BR>- 
            <A title=在VB5中生成统计图形 
            href="http://www.5xsoft.com/data/200302/2709513601.htm">在VB5中生成统计图形</A><BR>- 
            <A title="VB.net 编码规范(也适用于C#)" 
            href="http://www.5xsoft.com/data/200202/0416024301.htm">VB.net 
            编码规范(也适用于C#)</A><BR>- <A title=VB中不规则图形热点的实现 
            href="http://www.5xsoft.com/data/200201/3108142801.htm">VB中不规则图形热点的实现</A><BR>- 
            <A title=VB随机图像的魅力 
            href="http://www.5xsoft.com/data/200201/3108134001.htm">VB随机图像的魅力</A><BR></TD></TR></TBODY></TABLE></TD>
    <TD class=td3 vAlign=top align=left width=608 bgColor=#ffffff>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width="5%" rowSpan=5>&nbsp;</TD>
          <TD width="95%" height=19>&nbsp;</TD>
          <TD width=0% rowSpan=5>&nbsp;</TD></TR>
        <TR>
          <TD class=td1 vAlign=center align=left height=33><A 
            href="http://www.5xsoft.com/">化境编程界</A> -&gt; <A 
            href="http://www.5xsoft.com/menu/index0.htm">技术文章 </A>-&gt; <A 
            href="http://www.5xsoft.com/menu/index0_3_1.htm">VB/VB.Net 
</A></TD></TR>
        <TR>
          <TD class=td1 vAlign=center align=middle height=33><FONT 
            size=+1><B><BR>VB下如何编写CRC校验程序(1) </B></FONT><BR><BR>[ 作者: 栾金奎 &nbsp; 
            添加时间: 2001-7-7 16:19:08 ]<BR></TD></TR>
        <TR>
          <TD class=td1 vAlign=top align=left 
            height=151><BR>  随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一。<BR><BR>一、 
            循环冗余码校验原理<BR><BR>  循环冗余码校验英文名称为Cyclical Redundancy 
            Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error 
            Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。<BR>根据应用环境与习惯的不同,CRC又可分为以下几种标准:<BR>  ①CRC-12码;<BR>  ②CRC-16码;<BR>  ③CRC-CCITT码;<BR>  ④CRC-32码。<BR>  CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。<BR>下面以最常用的CRC-16为例来说明其生成过程。<BR>  CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。<BR>  下面为CRC的计算过程:<BR>  1.设置CRC寄存器,并给其赋值FFFF(hex)。<BR>  2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。<BR>  3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。<BR>  4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。<BR>  5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。<BR>  6.重复第2至第5步直到所有数据全部处理完成。<BR>  7.最终CRC寄存器的内容即为CRC值。<BR><BR>二、 
            循环冗余码校验程序的编写<BR><BR>  明白了CRC校验码的产生过程,编写起程序来就非常容易了。由于Visual 
            Basic的广泛普及以及其在数据通讯中的重要地位,下面就以VB语言来编写CRC的生成程序,其它语言只需稍做修改即可。<BR>  编写CRC校验程序有两种办法:一种为计算法,一种为查表法。下面对两种方法分别讨论。<BR><BR>  1.计算法<BR>  计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。为了便于理解,这里假定了三位数据,而多项式码为A001(hex)。<BR>  在窗体上放置一命令按钮Command1,并添加如下代码:<BR><BR>  Private 
            Sub Command1_Click()<BR>   Dim CRC() As Byte<BR>   Dim d() As Byte 
            '待传输数据<BR>   ReDim d(2) As Byte<BR>   d(0) = 123<BR>   d(1) = 
            112<BR>   d(2) = 135<BR>   CRC = CRC16(d) 
            '调用CRC16计算函数<BR>   'CRC(0)为高位<BR>   'CRC(1)为低位<BR>  End 
            Sub<BR>  注意:在数据传输时CRC的低位可能在前,而高位在后。<BR><BR>  Function CRC16(data() 
            As Byte) As String<BR>   Dim CRC16Lo As Byte, CRC16Hi As 
            Byte   'CRC寄存器<BR>   Dim CL As Byte, CH As 
            Byte        '多项式码&amp;HA001<BR>   Dim SaveHi As Byte, SaveLo As 
            Byte<BR>   Dim i As Integer<BR>   Dim Flag As Integer<BR>   CRC16Lo 
            = &amp;HFF<BR>   CRC16Hi = &amp;HFF<BR>   CL = &amp;H1<BR>   CH = 
            &amp;HA0<BR>   For i = 0 To UBound(data)<BR>    CRC16Lo = CRC16Lo 
            Xor data(i) '每一个数据与CRC寄存器进行异或<BR>    For Flag = 0 To 
            7<BR>     SaveHi = CRC16Hi<BR>     SaveLo = CRC16Lo<BR>     CRC16Hi 
            = CRC16Hi \ 2      '高位右移一位<BR>     CRC16Lo = CRC16Lo \ 
            2      '低位右移一位<BR>     If ((SaveHi And &amp;H1) = &amp;H1) Then 
            '如果高位字节最后一位为1<BR>      CRC16Lo = CRC16Lo Or 
            &amp;H80   '则低位字节右移后前面补1<BR>     End If              
            '否则自动补0<BR>     If ((SaveLo And &amp;H1) = &amp;H1) Then 
            '如果LSB为1,则与多项式码进行异或<BR>      CRC16Hi = CRC16Hi Xor 
            CH<BR>      CRC16Lo = CRC16Lo Xor CL<BR>     End If<BR>    Next 
            Flag<BR>   Next i<BR>   Dim ReturnData(1) As 
            Byte<BR>   ReturnData(0) = CRC16Hi       'CRC高位<BR>   ReturnData(1) 
            = CRC16Lo       'CRC低位<BR>   CRC16 = ReturnData<BR>  End 
            Function<BR><BR>  2.查表法<BR>  查表法的优缺点与计算法的正好相反。为了便于比较,这里所有的假定与计算法的完全相同,都而在窗体上放置一个Command1的按钮,其代码部分与上面的也完全一致。下面只介绍CRC函数的编写源代码。<BR><BR>  Private 
            Function CRC16(data() As Byte) As String<BR>   Dim CRC16Hi As 
            Byte<BR>   Dim CRC16Lo As Byte<BR>   CRC16Hi = 
            &amp;HFF<BR>   CRC16Lo = &amp;HFF<BR>   Dim i As Integer<BR>   Dim 
            iIndex As Long<BR>   For i = 0 To UBound(data)<BR>    iIndex = 
            CRC16Lo Xor data(i)<BR>    CRC16Lo = CRC16Hi Xor 
            GetCRCLo(iIndex)    '低位处理<BR>    CRC16Hi = 
            GetCRCHi(iIndex)          '高位处理<BR>   Next i<BR>   Dim ReturnData(1) 
            As Byte<BR>   ReturnData(0) = CRC16Hi    'CRC高位<BR>   ReturnData(1) 
            = CRC16Lo    'CRC低位<BR>   CRC16 = ReturnData<BR>  End 
            Function<BR><BR>  'CRC低位字节值表<BR>  Function GetCRCLo(Ind As Long) As 
            Byte<BR>   GetCRCLo = Choose(Ind + 1, &amp;H0, &amp;HC1, &amp;H81, 
            &amp;H40, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, &amp;H1, &amp;HC0, 
            &amp;H80, &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, 
            &amp;HC0, &amp;H80, &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, 
            &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, &amp;HC0, &amp;H80, 
            &amp;H41, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, &amp;H0, &amp;HC1, 
            &amp;H81, &amp;H40, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, 
            &amp;HC0, &amp;H80, &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, 
            &amp;H1, &amp;HC0, &amp;H80, &amp;H41, &amp;H1, &amp;HC0, &amp;H80, 
            &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, &amp;HC0, 
            &amp;H80, &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H0, 
            &amp;HC1, &amp;H81, &amp;H40, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, 
            &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, &amp;HC0, &amp;H80, 
            &amp;H41, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, &amp;H0, &amp;HC1, 
            &amp;H81, &amp;H40, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, 
            &amp;HC0, &amp;H80, &amp;H41, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, 
            &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H1, &amp;HC0, &amp;H80, 
            &amp;H41, &amp;H0, &amp;HC1, &amp;H81, &amp;H40, &amp;H0, &amp;HC1, 
            &amp;H81, &amp;H40, &amp;H1, &amp;HC0, &amp;H80, &amp;H41, &amp;H1, 
            &amp;HC0, _ <BR><BR></TD></TR>
        <TR>
          <TD class=td4 vAlign=center align=middle 
            height=48><!--prevpage-->&nbsp; &nbsp; <A 
            href="http://www.5xsoft.com/data/200107/0716174401_1.htm">下一页 <FONT 
            face=Webdings>8</FONT></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE height=58 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle width=784 height=58><BR>&copy; Copyright 化境编程界 稻香老农 2000.4 - 
      2002.12 | OICQ:593737 | Email: 5xsoft@21cn.com <IMG 
      src="化境编程界.files/top.htm" border=0></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

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