ANEXO 4. CÁLCULO DEL CRC.
Ejemplo de cálculo en QBASIC
function crc16 (txt, lon) AS INTEGER
DIM flag AS LONG
DIM crc AS LONG
DIM car AS INTEGER
DIM bit AS INTEGER
CRC= &HFFFF&
FOR car =1 TO LON
crc = crc XOR ASC(MID$ ( txt, car, 1))
FOR bit = 0 TO 7
END IF
NEXT bit
NEXT car
crc16 = INT (crc AND &HFFFF&)
END FUNCTION
Ejemplo de cálculo en C:
Void Saci_CalculoCRC ( unsigned char *Mensaje, int NumeroDeElementos)
{
long flag, crcx;
int car,bit;
unsigned char v1,v2;
crcx= 0xffff;
for (car=0; car < NumeroDeElementos; car++)
{
crcx = crcx ^ Mensaje[car];
for (bit=0; bit <8; bit++)
{
}
}
crcx= crcx & 0xffff;
v1 = ( unsigned char) abs (crcx / 256 );
v2 = ( unsigned char ) crcx – (v1*256);
Mensaje [NumeroDeElementos] = v2;
Mensaje [NumeroDeElementos+1] = v1;
Par comprobar el mensaje, se calcula el CRC, incluyendo los bytes de CRC recibidos. Si el resultado es
cero, el mensaje es correcto.
flag = crc AND 1&
crc = crc\ 2&
IF flag = 1 THEN
crc= crc XOR &HA001&
flag= crcx & 1
crcx = crcx >>1 ;
if ( flag== 1 ) { crcx = crcx ^ 0xa001; }
TTIM_E.DOC
VER 1.3 2012-05
17 de 19