TITKOSITAS - uC
Nya'ri Viktor
office at flexelec.hu
Fri Oct 22 09:58:22 CEST 2004
Palasik Sandor wrote:
>>Én másképp csináltam; nekem mindig egyforma hosszú a ciklus :-)
>
> Rendben, akkor nyilván félreértettem valamit és nem is CRC-t csinálsz.
Így gondolod?
PIC-re nálam így néz ki, CCS C-ben, és mindig ugyanolyan hosszu:
"crc" globális változó, ez a seed, és ebben keletkezik utána a crc adat
is; jelen esetben egy byte, de nyilván töb is lehet
"new_byte" az az adat, amirböl kell generálni a crc értéket; byte-okra
tördelve, byte-onként kön be az adat
void rotate_crc(int new_byte)
{
int crc_temp;
int i;
for (i=8; i; i--)
{
crc_temp=crc; //crc_temp 0. bit = crc 0. bit
crc_temp^=new_byte; //crc_temp 0. bit XOR= new_byte 0. bit
#asm
rrf new_byte,F //rotate bejovo_adat
#endasm
if (bit_test(crc_temp,0)) //ha a visszacsatolando bit = 1
{
crc^=0x55; //a megforgatando bitek pl. 01010101
}
else //ha a visszacsatolando bit = 0
{
crc^=0xAA; //a megforgatando bitek pl. 10101010
}
#asm
bcf status,0 //carry = crc_temp.0
btfsc crc_temp,0
bsf status,0
rrf crc,F //rotate crc
#endasm
}
}
More information about the Elektro
mailing list