CRC giải thích và mã hóa

K

kit_714

Guest
Hi all,

i am hiện đang nghiên cứu các nguyên tắc của CRC-8 kể từ i am xử lý các cảm biến nhiệt độ từ Maxim (DS18S20).

Bất cứ ai có thể vui lòng giải thích các nguyên tắc của hệ thống này kiểm tra?

Các đa thức của CRC là x ^ 8 x ^ 5 x ^ 4 1

và cũng có thể, tôi thấy một mã nguồn về tạo CRC-8 như sau:BYTE by_ACRC8 (BYTE byIn, BYTE bycrc)
(
BYTE i;
for (i = 0, i <8, i )
(
if ((byIn & 1) ^ (bycrc & 0x 80) == 0)
(
bycrc <<= 1;
)
khác
(
bycrc = bycrc ^ 0x 18;
bycrc <<= 1;
bycrc | = 1;
)
bycrc>> = 1;
)
bycrc trở lại;
)

2 câu hỏi để mã hóa các ...

1.bycrc = bycrc ^ 0x 18 ..... những gì; s hoạt động cho dòng này của mã hóa?
2.Bất cứ ai có thể giải thích ngắn gọn các mã hóa với CRC-8 nguyên tắc hoạt động?Thanks in cao cấp.

Kit

 
Khá tốt giải thích ở đây;

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

Tôi sử dụng thuật toán lắp ráp ngôn ngữ sau cho vi điều khiển PIC;

Mã số:

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

;

; Mike McLaren của Dallas một dây 8-bit CRC mã cho DS18B20

;

; Rõ ràng biến ước sau đó chạy mỗi byte từ các scratchpad

; Đọc hoặc đọc ROM hoạt động thông qua các chương trình con CRC_Calc.
A

; Giá trị ước cuối cùng của '0 'cho thấy "dữ liệu tốt".

;

; Void CRC_Calc ()

; (Crc ^ = IOByte;

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

; (If (crc & 0x01)

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

; Khác

; Crc = crc>> 1;

;)

;)

;

; Mục: IOByte chứa dữ liệu byte

; Xuất cảnh: CRC chứa dữ liệu tích lũy CRC

;

CRC_Calc

movlw d'8 '; | B0

movwf BitCtr; thiết lập bit truy cập | B0

movf owByte, W; | B0

xorwf CRC, F; | B0

movlw h'8C '; W = 8x x5 x4 1 đa thức | B0

CRC_Next

clrc; | B0

rrf CRC, F; | B0

skpnc; | B0

xorwf CRC, F; chuyển b7, b3, và b2 bit | B0

decfsz BitCtr, F; tất cả được thực hiện?
có, bỏ qua, khác | B0

goto CRC_Next; quá trình tiếp theo IOByte bit | B0

return; | B0

;
 
Thanks ...

Tuy nhiên ... thêm một câu hỏi ...

Các hoạt động hợp lý của các mã sau đây là gì?

crc ^ = IOByte;

Thanks in cao cấp đầu tiên ...

Kit

 
Điều đó có nghĩa: crc = crc XOR IOByte.

"^" Là biểu tượng cho xor logic trong C ngôn ngữ.

Kính trọng,
Franck.

 
Đây là mẫu mã được sử dụng cho tôi ước tính# include <stdio.h>
# include <conio.h>
int checksum (unsigned char *, int);
void main ()
(
int crc1 = 0;
int size1 = 6;
unsigned char dpacket [6] = (1,3,0,1,0,0 x0a);
clrscr ();
crc1 = checksum (dpacket, size1);
printf ( "crc =% X", crc1);
getch ();
)

int checksum (unsigned char * dpacket1, int size)
(
int i, j;
int crc = 0xffff;
int nhiều = 0xa001;
kích thước i = 0; i <(; i )
(
crc ^ = dpacket1 ;
for (i = 0; j <8; i )
(
if (crc & 0x01)
(
crc>> = 1;
crc ^ = nhiều;
)
khác
crc>> = 1;
)
)
return crc;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top