Для контроля правильности передаваемых по сети MicroLan данных применяется избыточный циклический код. Используемый код можно представить в виде следующей структурной схемы:
С использованием этой структурной схемы в подключенных к сети устройствах ведется аппаратное кодирование – декодирование информации. Данная структурная схема соответствует сдвиговому регистру. При этом используется следующее свойство циклического кода: если в регистре содержится контрольная сумма, то при подаче на регистр самой этой суммы, получим ноль. Таким образом достаточно легко реализуется процедура проверки полученных данных на правильность – принимаемые данные вместе с контрольной кодируются по приведенной схеме и если в результате в регистре находится ноль, то данные приняты правильно.
Программный подсчет контрольной суммы может быть произведен с помощью предлагаемой фирмой Dallas Semiconductor процедуры:
DO_CRC:MOV B,#8 ;счетчик
CRC_LOOP:XRL A, CRC ;очередной бит на вход
RRC A ;если поданный бит = 1
;установится флаг переноса
MOV A,CRC ;копируем значение
;контрольной суммы
JNC ZERO ;если на входе – нулевой бит,
;то следующую команду
;выполнять не надо
XRL A,#18H ;если подан единичный бит
;то выполняем операцию
;исключающее ИЛИ с учетом
;того, что 18Н = 00011000В
ZERO:RRC A ;выполняем сдвиг
MOV CRC, A ;сохраняем новое значение
;контрольной суммы
POPACC ;получаем значение
RRA ;следующего бита
PUSHACC ;
DJNZB, CRC_LOOP ;уменьшаем счетчик и
;проверяем на ноль
Предлагаемая процедура может быть усовершенствована следующим образом:
DO_CRC:MOV B,#8 ;счетчик
CRC_LOOP:XRL A, CRC ;очередной бит на вход
RRC A ;если поданный бит = 1
;установится флаг переноса
JNC NEXT ;если на входе – нулевой бит,
;то следующую команду
;выполнять не надо
XRL A,#8C H ;если подан единичный бит
;то выполняем операцию
;исключающее ИЛИ с учетом того,
;что 8C Н = 1 0001100В. Эта операция
;выполняется с уже сдвинутым
;регистром
NEXT :MOV CRC, A ;сохраняем новое значение
;контрольной суммы
POPACC ;получаем значение
RRA ;следующего бита
PUSHACC ;
DJNZB, CRC_LOOP ;уменьшаем счетчик и
;проверяем на ноль
Эта процедура является более быстродействующей по сравнению с первой, и может быть полезна в случае использования в качестве ведущего сети микроконтроллера с низкой тактовой частотой. Например, при использовании ВЕ48, выигрыш составляет около 0,5мкс на символ, при чтении 64-битового ПЗУ получаем экономию времени 32 мкс.