Поставки продукции Megawin по официальным каналам - микроконтроллеры, мосты USB-UART
Новичок
 
Регистрация: 01.09.2013
Сообщений: 16
Репутация: 11
1 8
0 0
 
15.09.2013 08:40 #1
Здравстуйте товарищи!

Необходимо сделать вычисление контрольной суммы CRC-8 на МК PIC на языке Ассемблер
У меня есть описание алгоритма
Формула полинома: x^8+x^5+x^4+1
Пример вычисления для MCS-51:

Код:
DO_CRC:
PUSH	ACC    ; сохраняем аккумулятор
PUSH	B    ; сохраняем регистр В
PUSH	ACC    ; сохраняем байт данных
MOV	B, #8    ; кол-во битов (счетчик циклов)
CRC_LOOP: 
XRL	A, CRC    ; XOR с предыдущим значением контрольной суммы
RRC	A    ; сдвиг вправо через флаг переноса
MOV	A, CRC    ; берем последнее значение CRC
JNC	ZERO    ; переход, если не было переноса
XRL	A, #18H    ; обновляем значение CRC путем XOR с константой
ZERO: 
RRC	A    ; снова сдвигаем CRC
MOV	CRC, A    ; сохраняем новое значение CRC
POP	ACC    ; восстанавливаем байт данных
RR	A    ; циклически сдвигаем вправо
PUSH	ACC    ; снова сохраняем значение
DJNZ	B, CRC_LOOP    ; повторяем цикл 8 раз (для каждого бита)
POP	ACC    ; очищаем стек
POP	B    ; восстанавливаем прежние значения регистров из стека
POP	ACC 
RET    ; завершение процедуры
У меня не получилось переделать этот код под PIC.. конкретней, я не знаю чем заменить команды PUSH и POP

Может есть кто шарит в этом деле, и поможет с кодом под PIC?
Оценка
Для устройств, работающих от автономного источника питания и требующих длительного функционирования без замены батареи, особенно важно использование компонентов с минимальным энергопотреблением. В ассортименте КОМПЭЛ представлен малопотребляющий семисегментный LCD-дисплей L-KLS9-TN-3714-80-6P от компании KLS – рекомендованная замена TIC33. Устройство потребляет всего 25 мкА, оснащено встроенным драйвером и поддерживает последовательный интерфейс. Благодаря технологии COG дисплей компактен (37,8 x 14,8 мм), а статический режим обеспечивает отличную читаемость. Идеален для счётчиков воды и газа, а также других автономных измерительных приборов.
Знаток
 
Регистрация: 06.01.2010
Адрес: Львов
Сообщений: 268
Репутация: 144
129 190
3 2
 
17.09.2013 12:03 #2
Во-первых, какой конкретно PIC будете использовать? Ибо есть некоторые отличия в системах команд контроллеров разных подсемейств. Во-вторых, посмотрите внимательно код - команды PUSH и POP используются здесь для двух целей:
1) сохранение значения регистров;
2) локальное сохранение исходного байта данных.
Все эти сохранения нужно сделать во временные переменные, вот и всё. Кроме того, не обязательно сохранять все данные (например, нафига сохранять регистр В?) - тут всё зависит от реализации основного тела программы. В любом случае, решение Вашей задачи таково: сохранять данные не в стеке, а в переменных. И будет Вам счастье.
Оценка
Компания MEAN WELL выпустила новинки – высокоэффективные источники питания на DIN-рейку серий XDR/XTR, разработанные для современных задач промышленной автоматизации. Узкий корпус и КПД до 96% делают их идеальным решением для проектов с ограниченным пространством и высокими требованиями к энергоэффективности, а встроенные системы полной защиты обеспечивают надежную работу в любых условиях. Посмотреть характеристики, узнать наличие, цену, а также приобрести ИП серий XDR/XTR можно по ссылке
Новичок
 
Регистрация: 01.09.2013
Сообщений: 16
Репутация: 11
1 8
0 0
 
17.09.2013 18:33 #3
Мне уже помогли на другом форуме, вот решение проблемы

Код:
;===============================================================
crc_8:
   xorwf   crc,f
   clrw

   btfsc   crc,0
   xorlw   0x5e

   btfsc   crc,1
   xorlw   0xbc

   btfsc   crc,2
   xorlw   0x61

   btfsc   crc,3
   xorlw   0xc2

   btfsc   crc,4
   xorlw   0x9d

   btfsc   crc,5
   xorlw   0x23

   btfsc   crc,6
   xorlw   0x46

   btfsc   crc,7
   xorlw   0x8c

   movwf   crc

   return

;===============================================================
start:



  ; dallas example:

   clrf   crc
   movlw   0x02
   call   crc_8   ; crc = 0xbc
А вот калькулятор для тестов
Оценка
6-осевой инерциальный измерительный блок QMI8658A от компании QST объединяет в себе 3-осевой гироскоп, 3-осевой акселерометр и встроенный температурный датчик. Среди ключевых особенностей этого модуля – гибкие режимы энергосбережения, поддержка аппаратного сопроцессора для анализа движения, функции самотестирования и калибровки, а также возможность точной компенсации температурных погрешностей. Благодаря встроенному функционалу QMI8658A отлично подходят для применений, в которых требуется отслеживание движения, а схожесть параметров позволяет использовать их как хорошую альтернативу продукции европейских брендов.
Новичок
 
Регистрация: 14.05.2008
Сообщений: 10
Репутация: 14
4 0
0 0
 
21.09.2013 22:13 #4
посмотри тут http://invent-systems.narod.ru/CRC.htm
Оценка
Banned
 
Регистрация: 21.04.2012
Адрес: южнее Дуная
Сообщений: 4,311
Репутация: 419
500 351
141 0
 
26.09.2013 12:48 #5

....sos...sos...

....sos...sos...
Вложения
Тип файла: txt CRC.txt (1.3 Кб, 0 просмотров)
Оценка
Banned
 
Регистрация: 21.04.2012
Адрес: южнее Дуная
Сообщений: 4,311
Репутация: 419
500 351
141 0
 
01.11.2013 13:51 #6
.....прошло один месяц и одна неделя......а в ответ тишина....
Оценка
Banned
 
Регистрация: 21.04.2012
Адрес: южнее Дуная
Сообщений: 4,311
Репутация: 419
500 351
141 0
 
06.12.2013 13:39 #7
.....прошло два месяца и две недели......а в ответ тишина....

.....прошло три месяца и три недели......а в ответ тишина....

.....прошло четире месяца и четире недели......а в ответ тишина....
Последний раз редактировалось hrpankov; 10.03.2014 в 16:55.
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Часовой пояс GMT +3, время: 03:58.
Обратная связь РадиоЛоцман Вверх