rsln 0 19 февраля, 2010 Опубликовано 19 февраля, 2010 · Жалоба Здравствуйте! Начал работу со считывателем PR-01(по работе один один с DS1990A). Есть карточка. Считываю данные, номер совпадает с номером на карточке. Считаю CRC - не совпадает. Вот функция: unsigned char Crc8(unsigned char *pcBlock, unsigned char len) { unsigned char crc=0xFF; unsigned char i; while (len--) {crc^=*pcBlock++; for(i=0;i<8;i++) crc=crc&0x80?(crc<<1)^0x31:crc<<1; } return crc; } Вот что я считал с карточки: [code] mas[0]=0x01; mas[1]=0xdf; mas[2]=0xd8; mas[3]=0x58; mas[4]=0x00; mas[5]=0x00; mas[6]=0x00; mas[7]=0x79;//CRC Использую функцию так: CRC8=Crc8(mas[0],7); В результате CRC8=0х95 Что я делаю не так, подтолкните Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 133 19 февраля, 2010 Опубликовано 19 февраля, 2010 · Жалоба Что я делаю не так, подтолкнитеНачальное значение должно быть 0, а не 0xFF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rsln 0 19 февраля, 2010 Опубликовано 19 февраля, 2010 · Жалоба Начальное значение должно быть 0, а не 0xFF. Спасибо! Сейчас проверю Заменил на 0х00, получил 0хF5. Подсчитайте, пожалуйста по точно рабочему алгоритму. Может не правильно считано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
UniSoft 15 19 февраля, 2010 Опубликовано 19 февраля, 2010 (изменено) · Жалоба Заменил на 0х00, получил 0хF5. Подсчитайте, пожалуйста по точно рабочему алгоритму. Может не правильно считано Считано правильно, А процедура подсчета у меня так реализована... (хотя фактически это тоже самое, только сдвиг в другую сторону, и соответственно полином перевернут) unsigned char Crc8(unsigned char *pcBlock, unsigned char len) { unsigned char crc=0; unsigned char i; while (len--) { crc^=*pcBlock++; for(i=0;i<8;i++) crc=crc&1?(crc>>1)^0x8C:crc>>1; } return crc; } и еще, может вызов неверный, CRC8=Crc8(mas[0],7); разве не так нужно? CRC8=Crc8(&mas[0],7); или так: CRC8=Crc8(mas,7); вкладываю мою программку калькулятор, сам писал для PC, правда на ассемблере... если конечно кому-то нужно crc8sn.rar Изменено 19 февраля, 2010 пользователем UniSoft Нарушение п.3.4 Правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rsln 0 21 февраля, 2010 Опубликовано 21 февраля, 2010 · Жалоба Вот спасибо! Получилось с Вашей функцией подсчета. И вызов функции у меня был не правильным, что-то я заработался Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться