<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CRC16%2Fde</id>
		<title>CRC16/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CRC16%2Fde"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CRC16/de&amp;action=history"/>
		<updated>2026-05-03T22:01:53Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=CRC16/de&amp;diff=2277&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CRC16/de&amp;diff=2277&amp;oldid=prev"/>
				<updated>2013-02-15T19:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:14, 15 February 2013&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=CRC16/de&amp;diff=2276&amp;oldid=prev</id>
		<title>Admin at 13:26, 8 February 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CRC16/de&amp;diff=2276&amp;oldid=prev"/>
				<updated>2013-02-08T13:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== (**COPIED FROM ENGLISH PAGE**) === &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Returns the CRC16 value of a variable or array.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Var =&amp;amp;nbsp;&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;CRC16&amp;lt;/span&amp;gt;( source , L)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;631&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 91px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Var&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 531px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The variable that is assigned with the CRC16 of variable source. Should be a word or integer variable.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 91px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Source&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 531px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The source variable or first element of the array to get the CRC16 value from.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 91px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
L&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 531px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The number of bytes to check. This can be a numeric constant , byte or word variable. The maximum size to check is 65535.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CRC16 is used in communication protocols to check if there are no transmission errors.&lt;br /&gt;
&lt;br /&gt;
The 1wire for example returns a CRC byte as the last byte from it’s ID.&lt;br /&gt;
&lt;br /&gt;
Use CRC8 for the 1wire routines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot of different CRC16 routines. There is no real standard since the polynomial will vary from manufacture to manufacture.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The equivalent code in VB is shown below. There are multiple ways to implement it in VB. This is one of them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;VB CRC16 Sample&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Private Sub Command1_Click()&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Dim ar(10) As Byte&lt;br /&gt;
&lt;br /&gt;
Dim b As Byte&lt;br /&gt;
&lt;br /&gt;
Dim J As Integer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ar(1) = 1&lt;br /&gt;
&lt;br /&gt;
ar(2) = 2&lt;br /&gt;
&lt;br /&gt;
ar(3) = 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b = Docrc8(ar(), 3) &amp;amp;nbsp;' call funciton&lt;br /&gt;
&lt;br /&gt;
Print b&lt;br /&gt;
&lt;br /&gt;
'calculate value which is 216&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J = CRC16(ar(), 3) &amp;amp;nbsp;' call function&lt;br /&gt;
&lt;br /&gt;
Print J&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Function Docrc8(ar() As Byte, bts As Byte) As Byte&lt;br /&gt;
&lt;br /&gt;
Dim J As Byte&lt;br /&gt;
&lt;br /&gt;
Dim k As Byte&lt;br /&gt;
&lt;br /&gt;
Dim crc8 As Byte&lt;br /&gt;
&lt;br /&gt;
crc8 = 0&lt;br /&gt;
&lt;br /&gt;
For m = 1 To bts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
x = ar(m)&lt;br /&gt;
&lt;br /&gt;
For k = 0 To 7&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;J = 1 And (x Xor crc8)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;crc8 = Fix(crc8 / 2) And &amp;amp;HFF&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;x = Fix(x / 2) And &amp;amp;HFF&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;If J &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp;crc8 = crc8 Xor &amp;amp;H8C&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;End If&lt;br /&gt;
&lt;br /&gt;
Next k&lt;br /&gt;
&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
Docrc8 = crc8&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'*****************************************************************&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Public Function CRC16(buf() As Byte, lbuf As Integer) As Integer&lt;br /&gt;
&lt;br /&gt;
Dim CRC1 As Long&lt;br /&gt;
&lt;br /&gt;
Dim b As Boolean&lt;br /&gt;
&lt;br /&gt;
CRC1 = 0 ' init CRC&lt;br /&gt;
&lt;br /&gt;
For i = 1 To lbuf ' for each byte&lt;br /&gt;
&lt;br /&gt;
CRC_MSB = CRC1 \ 256&lt;br /&gt;
&lt;br /&gt;
crc_LSB = CRC1 And 255&lt;br /&gt;
&lt;br /&gt;
CRC_MSB = CRC_MSB Xor buf(i)&lt;br /&gt;
&lt;br /&gt;
CRC1 = (CRC_MSB * 256) + crc_LSB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For J = 0 To 7 Step 1 ' for each bit&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; CRC1 = shl(CRC1, b)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; If b Then CRC1 = CRC1 Xor &amp;amp;H1021&lt;br /&gt;
&lt;br /&gt;
Next J&lt;br /&gt;
&lt;br /&gt;
Next i&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CRC16 = CRC1&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'Shift Left function&lt;br /&gt;
&lt;br /&gt;
Function shl(n As Long, ByRef b As Boolean) As Long&lt;br /&gt;
&lt;br /&gt;
Dim L As Long&lt;br /&gt;
&lt;br /&gt;
L = n&lt;br /&gt;
&lt;br /&gt;
L = L * 2&lt;br /&gt;
&lt;br /&gt;
If (L &amp;gt; &amp;amp;HFFFF&amp;amp;) Then&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; b = True&lt;br /&gt;
&lt;br /&gt;
Else&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; b = False&lt;br /&gt;
&lt;br /&gt;
End If&lt;br /&gt;
&lt;br /&gt;
shl = L And &amp;amp;HFFFF&amp;amp;&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[CHECKSUM]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CRC8]],&amp;amp;nbsp;[[CRC16UNI]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CRC32]]&amp;amp;nbsp;,&amp;amp;nbsp;[[TCPCHECKSUM]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;ASM&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
The following routine is called from mcs.lib&amp;amp;nbsp;: _CRC16&lt;br /&gt;
&lt;br /&gt;
The routine must be called with X pointing to the data. The soft stack –Y must contain the number of bytes to scan.&lt;br /&gt;
&lt;br /&gt;
On return, R16 and R17 contain the CRC16 value.&lt;br /&gt;
&lt;br /&gt;
The used registers are&amp;amp;nbsp;: R16-R19, R25.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;;#####&amp;lt;/nowiki&amp;gt; X = Crc16(ar(1) , 7)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ldi R24,$07 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; number of bytes&lt;br /&gt;
&lt;br /&gt;
St –y, R24&lt;br /&gt;
&lt;br /&gt;
Ldi R26,$64 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; address of ar(1)&lt;br /&gt;
&lt;br /&gt;
Ldi R27,$00 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; load constant in register&lt;br /&gt;
&lt;br /&gt;
Rcall _Crc16 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; call routine&lt;br /&gt;
&lt;br /&gt;
Ldi R26,$60 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; address of X&lt;br /&gt;
&lt;br /&gt;
St X+,R16 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; store crc16 LSB&lt;br /&gt;
&lt;br /&gt;
St X , R17 &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; store CRC16 MSB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;m48def.dat&amp;quot; ' specify the used micro&lt;br /&gt;
$crystal = 8000000 ' used crystal frequency&lt;br /&gt;
$baud = 19200 ' use baud rate&lt;br /&gt;
$hwstack = 32 ' default use 32 for the hardware stack&lt;br /&gt;
$swstack = 10 ' default use 10 for the SW stack&lt;br /&gt;
$framesize = 40 ' default use 40 for the frame space&lt;br /&gt;
 &lt;br /&gt;
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Dim Ar(10) As Byte&lt;br /&gt;
Dim J As Byte&lt;br /&gt;
Dim W As Word&lt;br /&gt;
Dim L As Long&lt;br /&gt;
 &lt;br /&gt;
Ar(1) = 1&lt;br /&gt;
Ar(2) = 2&lt;br /&gt;
Ar(3) = 3&lt;br /&gt;
 &lt;br /&gt;
J = Crc8(ar(1) , 3) 'calculate value which is 216&lt;br /&gt;
W = Crc16(ar(1) , 3) '24881&lt;br /&gt;
L = Crc32(ar(1) , 3) '494976085&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference/de]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>