CRC vysvětlením a kódovací

K

kit_714

Guest
Ahoj všem,

Já jsem v současné době studuje na principu CRC-8, protože jsem manipulaci s čidlem teploty od Maxim (DS18S20).

Může někdo laskavě vysvětlit zásady tohoto kontrolního systému?

Polynomu ze CRC je x ^ 8 x ^ 5 x ^ 4 1

a také jsem našel zdrojový kód o generování CRC-8 takto:BYTE by_ACRC8 (byIn BYTE, BYTE bycrc)
(
BYTE i;
for (i = 0, i <8, i )
(
if ((byIn & 1) ^ (bycrc & 0x 80) == 0)
(
bycrc <<= 1;
)
jiné
(
bycrc = bycrc ^ 0x 18;
bycrc <<= 1;
bycrc | = 1;
)
bycrc>> = 1;
)
návrat bycrc;
)

2 otázky pro kódování ...

1.bycrc = bycrc ^ 0x 18 ..... co, je provoz na tomto řádku kódování?
2.Mohl by někdo stručně vysvětlit kódování s CRC-8 fungování zásady?Díky pokročilé.

Kit

 
Docela dobré vysvětlení zde;

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

I použití těchto jazyků algoritmus pro montáž PIC mikrokontroléry;

Kód:

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

;

; Mike McLaren je jedna Dallas-drát 8-bit CRC kód pro DS18B20

;

; Jasné CRC variabilní spusťte každý byte z Poznámkový blok

; ROM číst nebo číst provozu prostřednictvím CRC_Calc podprogram.
A

; Závěrečné CRC hodnota'0 'označuje "dobrá data".

;

; Void CRC_Calc ()

; (Crc ^ = IOByte;

; For (i = 0; i <8; i )

; (If (crc & 0x01)

; Crc = (crc>> 1) ^ 0x8C;

; Jinde

; Crc = crc>> 1;

;)

;)

;

, Vstup: IOByte obsahuje data byte

; Výjezdu: CRC CRC obsahuje souhrnné údaje

;

CRC_Calc

movlw d'8 '; | B0

movwf BitCtr; nastavit bit čítač | B0

movf owByte, W; | B0

xorwf CRC, F; | B0

movlw h'8C '; W = x8 x5 x4 1 polynomický | B0

CRC_Next

clrc; | B0

rrf CRC, F; | B0

skpnc; | B0

xorwf CRC, F; přepínat b7, B3 a B2 bitů | B0

decfsz BitCtr, F, všechno udělal?
Ano, kapitáne, ostatní | B0

goto CRC_Next; proces příští IOByte bit | B0

návratu; | B0

;
 
Díky ...

Nicméně ... jedna otázka ...

Co je logické provozu následující kód?

crc ^ = IOByte;

Díky pokročilé v první ...

Kit

 
To znamená: crc = crc XOR IOByte.

"^" Je symbolem pro logické xor v jazyce C.

Pozdravy,
Franck.

 
Zde je ukázka kódu i použité pro výpočet CRC#
include <stdio.h>
#
include <conio.h>
unsigned int kontrolní (unsigned char *, int);
void main ()
(
unsigned int crc1 = 0;
int size1 = 6;
unsigned char dpacket [6] = (1,3,0,1,0,0 x0a);
clrscr ();
crc1 = kontrolní (dpacket, size1);
printf ( "crc =% X", crc1);
getch ();
)

unsigned int kontrolní (unsigned char * dpacket1, int velikost)
(
unsigned int i, j;
unsigned int crc = 0xFFFF;
unsigned int poly = 0xa001;
for (i = 0; i <velikost; i )
(
crc ^ dpacket1 = ;
u (j = 0; j <8; j )
(
if (crc & 0x01)
(
crc>> = 1;
crc ^ = poly;
)
jiné
crc>> = 1;
)
)
návrat crc;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top