Вот еще раз код с выводом промежуточных данных на терминал:
//buf - пакет данных (массив байт), data_byte - длина пакета
uint8 crc8(uint8*buf, uint8 data_byte)
{
uint8 crc=0x00;
uint8 data_bit=0x80;
uint8 i;
for(i=0;i<data_byte;i++)
printf("Buffer[%x] %x
",i,buf[i]);
while(data_byte>0)
{
if(((crc&0x01)!=0)!=((buf[data_byte]&data_bit)!=0))
{
crc>>=1;
printf("CRC>>=1---%x
",CRC);
crc^=0xCD;
printf("CRC^00xcd---%x
",CRC);
}
else crc>>=1;
data_bit>>=1;
printf("data_bit>>=1---%x
",data_bit);
if(!data_bit)
{
data_bit=0x80;
data_byte--;
printf("data_byte---%x
",data_byte);
}
}
return(crc);
}
вот что будет если массив состоит из одного элемента buf[0]=1:

да, можно и на дискретных элементах, но по-мойму кодом гораздо проще.
Только я Дельфи первый раз вижу и не дал ума как.
Спасибо



Поиск
Друзья
Администрация