Herunterladen Inhalt Inhalt Diese Seite drucken

Cálculo Crc - Balluff BTL6-P111-M-A1-S115 series Datenblatt Und Anleitung

Inhaltsverzeichnis

Werbung

Verfügbare Sprachen
  • DE

Verfügbare Sprachen

  • DEUTSCH, seite 1
BTL6-P111-M_ _ _ _-A1-S115
Transductor de desplazamiento AT Micropulse en carcasa perfilada redonda
7
Trabajo con el procedimiento DPI/IP (continuación)
7.3
Cálculo CRC
El CRC en el telegrama de consulta
se calcula en base a los signos CI y
LEN. En el telegrama de respuesta, el
cálculo CRC abarca los signos CR,
LEN y D0 ... Dn.
Implementación del cálculo CRC en el lenguaje de programación C:
typedef unsigned char byte;
typedef unsigned short word;
#define GENERATOR_POLINOM 0x01021
#define CRC_OK
0
#define CRC_BAD 1
#define BUFFSIZE
byte bRxBuffer[BUFFSIZE]; /* received message, 1
byte bMessageLength;
int
CRCCalculation(void)
(
word wCRC;
byte bNextByte;
int
i, j;
wCRC = 0;
for ( i = 0; i < bMessageLength - 2; i++ ) {/* do not calculate on CRC bytes */
bNextByte = bRxBuffer[i];
for ( j = 0; j < 8; J++ ) {
if ( ( bNextByte & 0x01) ^ ((wCRC & 0x800) >> 15) ) {
}
else {
}
bNextByte >>= 1;
}
}
if ( (byte) ((wCRC & 0xff00) >> 8) == bRxBuffer[i] &&
(byte) (wCRC & 0x00ff) == bRxBuffer[i+1] ) {
return CRC_OK;
}
else return CRCBAD;
}
Pseudo code del cálculo CRC:
CRC = 0;
repeat
CRCNext = NextBit EXOR CRC(15);
CRC(15:1) = CRC(14:0);
CRC(0) = 0;
if CRCNext then
endif
until (last data bit)
Observación: NextBit es el siguiente bit del flujo en serie. Los bits de Start,
Parity y Stop no se incluyen en el cálculo CRC; se tratan independientemente
por la función UART. La función UART envía / recibe primero el LSB (least
significant bit), por lo que CRC debe comenzar en el bit 0.
48
/* number of characters in received message
/* including CRC
wCRC <<= 1;
wCRC ^= GENERATOR_POLINOM;
wCRC <<= 1;
// initialize shift register
CRC(14:0) = CRC(14:0) EXOR 0x1021;
st
byte @ index 0
*/
// shift left by 1
*/
*/
español
7 7

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis