CRC8

From MCS Wiki AVR
Jump to: navigation, search

Contents

Action

Returns the CRC8 value of a variable or array.

 

 

Syntax

Var = CRC8( source , L)

 

 

Remarks

Var

The variable that is assigned with the CRC8 of variable source.

Source

The source variable or first element of the array to get the CRC8 of.

L

The number of bytes to check.

 

CRC8 is used in communication protocols to check if there are no transmission errors.

The 1wire for example returns a CRC byte as the last byte from it’s ID.

 

The code below shows a VB function of CRC8

 

Function Docrc8(s As String) As Byte

Dim j As Byte

Dim k As Byte

Dim crc8 As Byte

crc8 = 0

For m = 1 To Len(s)

x = Asc(Mid(s, m, 1))

For k = 0 To 7

 j = 1 And (x Xor crc8)

 crc8 = Fix(crc8 / 2) And &HFF

 x = Fix(x / 2) And &HFF

 If j <> 0 Then

 crc8 = crc8 Xor &H8C

 End If

Next k

Next

Docrc8 = crc8

End Function

 

noticeWhen you want to use a different polynome, you can override the default by defining a constant named CRC8_POLY

Const CRC8_POLY = &HAA 'use a different value 

 

See also

CHECKSUM , CRC16CRC16UNI , CRC32 , TCPCHECKSUM

 

 

 

ASM

The following routine is called from mcs.lib : _CRC8

The routine must be called with Z pointing to the data and R24 must contain the number of bytes to check.

On return, R16 contains the CRC8 value.

The used registers are : R16-R19, R25.

 

 

          1. X = Crc8(ar(1) , 7)

Ldi R24,$07     ; number of bytes

Ldi R30,$64     ; address of ar(1)

Ldi R31,$00     ; load constant in register

Rcall _Crc8     ; call routine

Ldi R26,$60     ; address of X

St X,R16     ; store crc8

 

 

Example


$regfile = "m48def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
 
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 
 
Dim Ar(10) As Byte
Dim J As Byte
 
Ar(1) = 1
Ar(2) = 2
Ar(3) = 3
 
J = Crc8(ar(1) , 3) 'calculate value which is 216
Print J
End

Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language