Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено Nikolaj (88.204.75.39) 04 мая 2010, г. 14:01
В ответ на: У кого есть таблица для CRC16-Modbus с полиномом 0xA001 ? Везде натыкаюсь только на 0x1021 отправлено MegaJohn 04 мая 2010, г. 13:45



//==============================================//
// Функция подсчета СRC16 по алгоритму //
//----------------------------------------------//
//аргументы: указатель на буфер, //
// размер буфера, //
// стартовое значение СRC16 //
//возвращает:подсчитанное значение СRC16 //
//----------------------------------------------//
//ВНИМАНИЕ! Стартовому значению CRC16 необходимо//
// присвоить значение 0xFFFF, //
// размер массива для подсчета CRC16 //
// не более 65535 байт //
//==============================================//
#ifndef _POLINOME_CRC16_
#define _POLINOME_CRC16_ 0xA001
#endif

xWord f_CRC16Calc(xByte *buf, xWord sizeBuf, xWord crc){
xWord i, j;

for(i = 0; i < sizeBuf; i++){
crc = crc ^ buf[i];
for(j = 0; j < 8; j++){
if((crc & 0x0001) != 0x0000)crc = (crc >> 1) ^ _POLINOME_CRC16_;
else crc >>= 1;
}
}
return (crc);
}


#ifndef _POLINOME_CRC16_
#define _POLINOME_CRC16_ 0xA001
#endif

// ========================================================================================
// TNN
#ifndef _POLINOME_CRC16_
#define _POLINOME_CRC16_ 0xA001
#endif

unsigned short f_CRC16Calc(unsigned char *buf, unsigned short sizeBuf, unsigned short crc){
unsigned short i, j;

for(i = 0; i < sizeBuf; i++){
crc = crc ^ buf[i];
for(j = 0; j < 8; j++){
if((crc & 0x0001) != 0x0000)crc = (crc >> 1) ^ _POLINOME_CRC16_;
else crc >>= 1;
}
}
return (crc);}

// ========================================================================================
// Полином тот же, что и в X-modem'е.
unsigned char crc16h, crc16l;

void UpdateCRC16(unsigned char c){

c ^= crc16h;
c ^= (c >> 4);
crc16h = crc16l ^ (c << 4) ^ (c >> 3);
crc16l = c ^ (c << 5);
}
Прищепка: http://telesys.ru/wwwboards/mcontrol/konfa_uploaded/2708_1006265.rar


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
вычтите два из трёх, получится:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru