CRC paskaidrojumu un kodēšana

K

kit_714

Guest
Hi all,

i am pašreiz pēta principu CRC-8, jo es esmu apstrādes temperatūras sensors no Maxim (DS18S20).

Var kāds laipni izskaidro princips šīs pārbaudes sistēma?

CRC polinomu, kas ir x ^ 8 x ^ 5 x ^ 4 1

un arī, es atklāju pirmkods par ražošanas CRC-8 šādi:BYTE by_ACRC8 (BYTE byIn, BYTE bycrc)
(
BYTE i;
(i = 0, i <8, i )
(
if ((byIn & 1) ^ (bycrc & 0x 80) == 0)
(
bycrc <<= 1;
)
vēl
(
bycrc = bycrc ^ 0x 18;
bycrc <<= 1;
bycrc | = 1;
)
bycrc>> = 1;
)
atgriezties bycrc;
)

2 jautājumi kodēšanas ...

1.bycrc = bycrc ^ 0x 18 ..... kāds, as darbību šajā līnijā kodēšanas?
2.Var kāds īsumā izskaidrot kodēšanas ar CRC-8 darbības principiem?Paldies uzlabotas.

Komplekts

 
Diezgan labs paskaidrojums šeit;

http://en.wikipedia.org/wiki/Cyclic_redundancy_check

Es izmantoju šādu montāžas valodu algoritms PIC microcontrollers;

Kods:

;************************************************* *****************

;

; Mike McLaren's Dallas vienu vadu 8-bitu CRC kods DS18B20

;

, Skaidri CRC mainīgo, tad palaist katru baitu no scratchpad

, Lasīt vai ROM izlasīt darbībai, izmantojot CRC_Calc subroutine.; Galīgā CRC vērtību "0" norāda "labs datus".

;

; Spēkā CRC_Calc ()

; (CRC ^ = IOByte;

, (I = 0; i <8; i )

; (If (CRC & 0x01)

; CRC = (CRC>> 1) ^ 0x8C;

; Cits

; CRC = CRC>> 1;

;)

;)

;

; Ieraksts: IOByte satur datus baits

; Izeja: CRC satur kumulatīvie CRC datu

;

CRC_Calc

movlw d'8 "; | B0

movwf BitCtr; setup bit counter | B0

movf owByte, W; | B0

xorwf CRC, F; | B0

movlw h'8C "; W = x8 X5 x4 1 polinomu | B0

CRC_Next

clrc; | B0

rrf CRC, F; | B0

skpnc; | B0

xorwf CRC, F; pārslēgtos B7, B3 un B2 biti | B0

decfsz BitCtr, F; visu darīt?
jā, izlaidiet, cits | B0

Goto CRC_Next; process nākamo IOByte bit | B0

atgriezties; | B0

;
 
Paldies ...

Tomēr ... vēl viens jautājums ...

Kas ir loģiska darbību šādu kodu?

CRC ^ = IOByte;

Pateicoties uzlabotas pirmajā ...

Komplekts

 
Tas nozīmē: CRC = CRC XOR IOByte.

"^" Ir simbols loģika XOR C valodā.

Sveicieni,
Franck.

 
Te ir paraugs kods, i, ko izmanto CRC aprēķināšanai# Ietvert <stdio.h>
# Ietvert <conio.h>
neparakstīts int kontrolsumma (neparakstīta CHAR *, int);
par spēkā neesošu galvenais ()
(
neparakstīts int crc1 = 0;
int size1 = 6;
neparakstīts char dpacket [6] = (1,3,0,1,0,0 x0a);
clrscr ();
crc1 = kontrolsumma (dpacket, size1);
printf ("CRC =% X", crc1);
getch ();
)

neparakstīts int kontrolsumma (neparakstīta CHAR * dpacket1, int lielums)
(
neparakstīts int i, j;
neparakstīts int CRC = 0xffff;
neparakstīts int poli = 0xa001;
(i = 0; i <lielumu; i )
(
CRC ^ = dpacket1 ;
par (j = 0, j <8; j )
(
ja (CRC & 0x01)
(
CRC>> = 1;
CRC ^ = poli;
)
vēl
CRC>> = 1;
)
)
atgriezties CRC;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top