<?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=CRC16UNI</id>
		<title>CRC16UNI - 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=CRC16UNI"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CRC16UNI&amp;action=history"/>
		<updated>2026-06-17T00:01:02Z</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=CRC16UNI&amp;diff=562&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;= &lt;span class=&quot;f_Header&quot;&gt;Action&lt;/span&gt; =  Returns the CRC16 value of a variable or array.  &lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;  &lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CRC16UNI&amp;diff=562&amp;oldid=prev"/>
				<updated>2013-02-08T13:28:23Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =  Returns the CRC16 value of a variable or array.  &amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;  &amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= &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;CRC16UNI&amp;lt;/span&amp;gt;( source ,length , initial, polynomial,refin,refout)&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;
length&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.&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;
initial&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 initial value of the CRC. This is usual 0 or &amp;amp;HFFFF.&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;
polynomial&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 polynomial value to use.&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;
refin&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;
Reflect the data input bits. Use 0 to disable this option. Use a non-zero value to enable this option.&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;
refout&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;
Reflect the data output. &amp;amp;nbsp;Use 0 to disable this option. Use a non-zero value to enable this option.&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;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
At&amp;amp;nbsp;[http://www.ross.net/crc/download/crc_v3.txt http://www.ross.net/crc/download/crc_v3.txt]&amp;amp;nbsp;you can find a great document about CRC calculation from Ross N. Williams. At the end you will find an example that is good for dealing with most CRC variations. The BASCOM CRC16UNI function is a conversion of this example.&lt;br /&gt;
&lt;br /&gt;
There is a difference however&amp;amp;nbsp;: The CRC16UNI function does not XOR the output bytes. This because most CRC functions XOR with 0.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The example will show some of the most used combinations.&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;[[CRC16]]&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 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;
'------------------------------------------------------------------------------&lt;br /&gt;
'name : crc8-16-32.bas&lt;br /&gt;
'copyright : (c) 1995-2008, MCS Electronics&lt;br /&gt;
'purpose : demonstrates CRC&lt;br /&gt;
'micro : Mega48&lt;br /&gt;
'suited for demo : yes&lt;br /&gt;
'commercial addon needed : no&lt;br /&gt;
'------------------------------------------------------------------------------&lt;br /&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;
 &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;
Dim S As String * 16&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
S = &amp;quot;123456789&amp;quot;&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;
 &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;
 &lt;br /&gt;
' data , length, intial value , Poly, reflect input, reflect output&lt;br /&gt;
 &lt;br /&gt;
Print Hex(crc16uni(s , 9 , 0 , &amp;amp;H1021 , 0 , 0)) 'CRC-CCITT (0x0000) 31C3&lt;br /&gt;
Print Hex(crc16uni(s , 9 , &amp;amp;HFFFF , &amp;amp;H1021 , 0 , 0)) 'CRC-CCITT (0xFFFF) 29B1&lt;br /&gt;
Print Hex(crc16uni(s , 9 , &amp;amp;H1D0F , &amp;amp;H1021 , 0 , 0)) 'CRC-CCITT (0x1D0F) E5CC&lt;br /&gt;
Print Hex(crc16uni(s , 9 , 0 , &amp;amp;H8005 , 1 , 1)) 'crc16 BB3D&lt;br /&gt;
Print Hex(crc16uni(s , 9 , &amp;amp;HFFFF , &amp;amp;H8005 , 1 , 1)) 'crc16-modbus 4B37&lt;br /&gt;
 &lt;br /&gt;
 &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]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>