calcular CRC

18/04/2005 - 10:34 por dps | Informe spam
hola

pues eso, tengo una matriz de 16 bytes.
el byte número 16 (el último) tiene que ser el crc de los
anteriores

por lo que recuerdo, creo que debería recorrer los 15
bytes, y con cada uno:

crc=(crc+byte(i)) mod 256

pero el resultado que obtengo no es correcto
alguna idea?

saludos al foro
 

Leer las respuestas

#1 Pep
18/04/2005 - 11:21 | Informe spam
Hola Dps,
El Crc puede ser muy sencillo o muy complicado!, dependiendo de quien lo
esta esperando.
El el caso de algun dispositivo con protocolo o bus industrial.. vease
ModBus, DeviceNet...etc, existe la complicacion adicional de que este ultimo
no ayuda.
Veamos, dependiendo de que dispositivo esta esperando, existe una
difilcultar añadida es tener que entregar dos caracteres (bytes) ASCII que
conformar el CRC de 16bits.
Un ejemplo a lo bruto podria ser :

CrcTemporal = &hFFFF
For i = 1 to len(Var)
CrcTemporal = CrcTemporal Xor Asc(Mid(Variable, i, 1))
for j = 1 to 8
'para tratrarlo como bytes individuales
CaracterT = CrcTemporal and &h1
If CrcTemporal < 0 then CaracterH=1 else CaracterH=0
CrcTemporal = CrcTemporal and &h7FFF
CrcTemporal = CrcTemporal / 2
If CaracterH = 1 then CrcTemporal = CrcTemporal Or &h4000
If CaracterT = 1 then CrcTemporal = CrcTemporal Xor &hA001
next j
next i
...
...
luego debes componer los filtros para entregar los dos caracters de 8 bits
en sus rangos respectivos.

No se si esto puede ayudarte
Saludos,
Pep.


"dps" escribió:

hola

pues eso, tengo una matriz de 16 bytes.
el byte número 16 (el último) tiene que ser el crc de los
anteriores

por lo que recuerdo, creo que debería recorrer los 15
bytes, y con cada uno:

crc=(crc+byte(i)) mod 256

pero el resultado que obtengo no es correcto
alguna idea?

saludos al foro



Preguntas similares