CR C 코 드는 송 신 측 에 의해 계산 되며 , 전송 된 정보 메시 지의 꼬 리에 배치 된다 .정보를 수신 하는 장 치는 정보를 수신 한 CR C 를 다시 계산 하고 , 계산 된 CR C 가 수신 한 CR C 와 일치 하는지 여 부를 비교 하며 , 양 자가 일치 하지 않으면 오류 가 발생 했 음을 나타 냅니다 .
체크 코 드의 계산 다 항 식은 (X 16 + X 15 + X 2 + 1) 입니다 .
CR C 16 코 드의 계산 방법은 다음과 같습니다 .
첫 번째 8 비트 바이 너 리 데이터 (통 신 정보 프레 임 의 첫 번째 바 이트) 를 16 비트 CR C 레 지 스터 의 하 위 8 비트 와 구별 하거나 , 결과를 CR C 레 지 스터 에 넣 는다 .
CR C 레 지 스터 의 내용을 1 비트 (낮 은 비트) 까지 오른 쪽으로 이동 하여 가장 높은 비트 에 0 을 채 우고 오른 쪽으로 이동 한 후 이동 된 비 트를 검사 한다 .
이동 비트 가 0 인 경우 : 단계 3 을 반복 합니다 (다시 오른쪽 이동).
시 프트 아 웃 비 트가 1 인 경우 CR C 레 지 스터 는 다 항 식 A 00 1 (10 10 00 00 00 00 000 1) 과 배 타 적 OR 를 수행 합니다 ; (Mod bus)
오른 쪽으로 8 번 이동 할 때까지 단계 3 및 4 를 반복 하여 전체 8 비트 데이터가 모두 처리 됩니다 .
단계 2 에서 단계 5 까지 의 단계를 반복 하여 통신 정보 프레 임 의 다음 바 이트 의 처 리를 수행 한다 ;
7. 이 통신 정보 프레 임 의 모든 바 이트 는 상기 단계 에 따라 계산 이 완료 된 후 , 얻은 16 비트 CR C 레 지 스터 의 높은 , 낮은 바 이트 를 교환 한다 ;
마지막으로 생성 되는 CR C 레 지 스터 의 내용은 CR C 코드 입니다 .
8.最后得到的CRCレジスタ内容即为:CRC码。
코드
un sig ned int Get CR C 16 (un sig ned char * p tr , un sig ned char len)
{
un sig ned int 인 덱 스 ;
un sig ned char cr ch = 0 x FF ; / / 높은 CR C 바 이트
un sig ned char cr cl = 0 x FF ; / / 낮은 CR C 바 이트
unsigned char code TabH
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1,
0 x 80, 0 x 41, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1,
0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1,
0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 81
0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1,
0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x 0
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 81
0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 81
0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 00 , 0 x C 1,
0 x 8 1, 0 x 40, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41,
0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40, 0 x 0 1, 0 x C 0, 0 x 80, 0 x 41, 0 x 0 1, 0 x C 0,
0 x 80, 0 x 41, 0 x 00 , 0 x C 1, 0 x 8 1, 0 x 40
} ;
unsigned char code TabL
0 x 00 , 0 x C 0, 0 x C 1, 0 x 0 1, 0 x C 3, 0 x 0 3, 0 x 0 2, 0 x C 2, 0 x C 6, 0 x 0 6,
0 x 0 7, 0 x C 7, 0 x 0 5, 0 x C 5, 0 x C 4, 0 x 0 4, 0 x CC , 0 x 0 C , 0 x 0 D , 0 x CD ,
0 x 0 F , 0 x CF , 0 x CE , 0 x 0 E , 0 x 0 A , 0 x CA , 0 x CB , 0 x 0 B , 0 x C 9, 0 x 0 9,
0 x 0 8, 0 x C 8, 0 x D 8, 0 x 18, 0 x 19, 0 x D 9, 0 x 1 B , 0 x DB , 0 x DA , 0 x 1 A ,
0 x 1 E , 0 x DE , 0 x DF , 0 x 1 F , 0 x DD , 0 x 1 D , 0 x 1 C , 0 x DC , 0 x 14, 0 x D 4,
0 x D 5, 0 x 15, 0 x D 7, 0 x 17, 0 x 16, 0 x D 6, 0 x D 2, 0 x 12, 0 x 13, 0 x D 3,
0 x 11, 0 x D 1, 0 x D 0, 0 x 10, 0 x F 0, 0 x 30, 0 x 31, 0 x F 1, 0 x 33, 0 x F 3,
0 x F 2, 0 x 32, 0 x 36, 0 x F 6, 0 x F 7, 0 x 37, 0 x F 5, 0 x 35, 0 x 34, 0 x F 4,
0 x 3 C , 0 x FC , 0 x F D , 0 x 3 D , 0 x FF , 0 x 3 F , 0 x 3 E , 0 x FE , 0 x FA , 0 x 3 A ,
0 x 3 B , 0 x FB , 0 x 39, 0 x F 9, 0 x F 8, 0 x 38, 0 x 28, 0 x E 8, 0 x E 9, 0 x 29,
0 x EB , 0 x 2 B , 0 x 2 A , 0 x EA , 0 x EE , 0 x 2 E , 0 x 2 F , 0 x EF , 0 x 2 D , 0 x ED ,
0 x EC , 0 x 2 C , 0 x E 4, 0 x 24, 0 x 25, 0 x E 5, 0 x 27, 0 x E 7, 0 x E 6, 0 x 26,
0 x 22, 0 x E 2, 0 x E 3, 0 x 23, 0 x E 1, 0 x 21, 0 x 20, 0 x E 0, 0 x A 0, 0 x 60,
0 x 6 1, 0 x A 1, 0 x 6 3, 0 x A 3, 0 x A 2, 0 x 6 2, 0 x 6 6, 0 x A 6, 0 x A 7, 0 x 67
0 x A 5, 0 x 6 5, 0 x 6 4, 0 x A 4, 0 x 6 C , 0 x AC , 0 x AD , 0 x 6 D , 0 x AF , 0 x 6 F ,
0 x 6 E , 0 x AE , 0 x AA , 0 x 6 A , 0 x 6 B , 0 x AB , 0 x 6 9, 0 x A 9, 0 x A 8, 0 x 68
0 x 7 8, 0 x B 8, 0 x B 9, 0 x 7 9, 0 x BB , 0 x 7 B , 0 x 7 A , 0 x BA , 0 x BE , 0 x 7 E ,
0 x 7 F , 0 x B F , 0 x 7 D , 0 x B D , 0 x BC , 0 x 7 C , 0 x B 4, 0 x 7 4, 0 x 7 5, 0 x B 5,
0 x 7 7, 0 x B 7, 0 x B 6, 0 x 7 6, 0 x 7 2, 0 x B 2, 0 x B 3, 0 x 7 3, 0 x B 1, 0 x 71
0 x 70, 0 x B 0, 0 x 50, 0 x 90, 0 x 9 1, 0 x 51, 0 x 9 3, 0 x 53, 0 x 52, 0 x 9 2,
0 x 9 6, 0 x 56, 0 x 5 7, 0 x 9 7, 0 x 55, 0 x 9 5, 0 x 9 4, 0 x 5 4, 0 x 9 C , 0 x 5 C
0 x 5 D , 0 x 9 D , 0 x 5 F , 0 x 9 F , 0 x 9 E , 0 x 5 E , 0 x 5 A , 0 x 9 A , 0 x 9 B , 0 x 5 B ,
0 x 99, 0 x 5 9, 0 x 5 8, 0 x 9 8, 0 x 8 8, 0 x 48, 0 x 49, 0 x 8 9, 0 x 4 B , 0 x 8 B ,
0 x 8 A , 0 x 4 A , 0 x 4 E , 0 x 8 E , 0 x 8 F , 0 x 4 F , 0 x 8 D , 0 x 4 D , 0 x 4 C , 0 x 8 C ,
0 x 44, 0 x 8 4, 0 x 8 5, 0 x 45, 0 x 8 7, 0 x 47, 0 x 46, 0 x 8 6, 0 x 8 2, 0 x 42
0 x 43, 0 x 8 3, 0 x 41, 0 x 8 1, 0 x 80, 0 x 40
} ;
while (len --) / / 지정 된 길이 의 CR C 계산
{
index = cr ch ^ * p tr ++ ;
crch = crcl ^ TabH
crcl = TabL
}
return ((cr ch 8)<< cr cl)|
}
이 함 수는 계산 된 CR C 값을 직접 반환 합니다 .

5BKqxwgD
555
555
1
1
1
1%2527%2522
QFhPp7Bt
555
1