Mikroelektronika MIKROE-442 데이터 시트

다운로드
페이지 726
mikroBasic PRO for dsPIC30/33 and PIC24
MikroElektronika
449
Message format and CRC calculations
Q: How is CRC checksum calculated on RS485 master side?
Copy Code To Clipboard 
_START_BYTE = 0x96; ‘ 10010110
_STOP_BYTE  = 0xA9; ‘ 10101001
PACKAGE:
-------- 
_START_BYTE 0x96
ADDRESS
DATALEN
[DATA1]            ‘ if exists
[DATA2]            ‘ if exists
[DATA3]            ‘ if exists
CRC
_STOP_BYTE  0xA9
DATALEN bits
------------
bit7 = 1  MASTER SENDS
       0  SLAVE  SENDS
bit6 = 1  ADDRESS WAS XORed with 1, IT WAS EQUAL TO _START_BYTE or _STOP_BYTE
       0  ADDRESS UNCHANGED
bit5 = 0  FIXED
bit4 = 1  DATA3 (if exists) WAS XORed with 1, IT WAS EQUAL TO _START_BYTE or _STOP_
BYTE
       0  DATA3 (if exists) UNCHANGED
bit3 = 1  DATA2 (if exists) WAS XORed with 1, IT WAS EQUAL TO _START_BYTE or _STOP_
BYTE
       0  DATA2 (if exists) UNCHANGED
bit2 = 1  DATA1 (if exists) WAS XORed with 1, IT WAS EQUAL TO _START_BYTE or _STOP_
BYTE
       0  DATA1 (if exists) UNCHANGED
bit1bit0 = 0 to 3 NUMBER OF DATA BYTES SEND
CRC generation :
----------------
crc_send = datalen  xor address
crc_send = crc_send xor data[0]    ‘ if exists
crc_send = crc_send xor data[1]    ‘ if exists
crc_send = crc_send xor data[2]    ‘ if exists
crc_send = crc_send not crc_send
if ((crc_send = START_BYTE) or (crc_send = STOP_BYTE)) then
   crc_send = crc_send + 1
end if
NOTE: DATALEN<4..0> can not take the START_BYTE<4..0> or STOP_BYTE<4..0> values.