Страница 1 из 2
Assembler PIC алгоритм CRC-8
Добавлено: Вс сен 15, 2013 07:38:13
valerik88
Здравстуйте товарищи!
Необходимо сделать вычисление контрольной суммы CRC-8 на МК PIC на языке Ассемблер
У меня есть
описание алгоритма
Формула полинома: x^8+x^5+x^4+1
Пример вычисления для MCS-51: (взято отсюда
http://radiokot.ru/articles/13/)
Код: Выделить всё
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?
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вс сен 15, 2013 08:13:43
dosikus
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вс сен 15, 2013 08:59:05
valerik88
dosikus писал(а):http://www.dattalo.com/technical/software/pic/crc_8.asm
Замечательная ссылка!
Но у меня что-то не сходится.. В коде написано так
Код: Выделить всё
start:
clrf crc
movlw 1
call crc_8 ; crc = 0x5e
Т.е. crc числа 1 должно получиться 0х5e ?
Но онлайн калькуляторы показывают число 31
http://ghsi.de/CRC/index.php?Polynom=10 ... &Message=1
Я что-то не так понял?
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вс сен 15, 2013 23:53:22
Dmitry Dubrovenko
А вот кто мне ответит на такой вопрос:
Если в посылке, в каждом байте, значащие только 7 битов, а 1 бит служебный, то какой алгоритм надо выбирать для подсчёта CRC?
И каково максимальное количество байт в посылке?
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 08:18:12
dosikus
valerik88 писал(а):
Я что-то не так понял?
Именно, там не вычисление crc а подготовка алгоритма .
Вычисление crc ниже см
dallas example ...
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 18:36:11
valerik88
dosikus писал(а):valerik88 писал(а):
Я что-то не так понял?
Именно, там не вычисление crc а подготовка алгоритма .
Вычисление crc ниже см
dallas example ...
Сомневаюсь.. Помоему после Start уже примеры использования пошли и написан получаемый функцией результат.
Но даже, если и так.. там написано
dallas example:
clrf crc
movlw 0x02
call crc_8 ; crc = 0xbc
Т.е. crc числа 2, будет bc, а онлайн калькулятор показывает 62
http://ghsi.de/CRC/index.php?Polynom=10 ... &Message=2
В чём касяк?
2.7 Запрещается полное цитирование предыдущего сообщения. Допускается цитирование только части сообщения, необходимой для смысловой связи с предыдущим сообщением.
Предусматриваются следующие виды наказаний за нарушение пунктов данных Правил: за нарушение: п 2.7 - Предупреждение. При повторном нарушении - бан на усмотрение модератора.
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 19:37:21
dosikus
valerik88 писал(а):
В чём касяк?
У Вас в голове .
Калькулятор ЧЕГО ?
Вам нужно для 1Wire ? Ну так и используйте калькулятор для него.
http://arv.radioliga.com/component/opti ... wn/id,136/
Что вы привязались к этому калькулятору ? Почитайте хоть Вики что ли , на предмет того что crc может и вычисляться по разному и разный результат будет...
http://ru.wikipedia.org/wiki/Циклически ... чный%20код
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 19:54:25
uldemir
Вот, почти дословный перевод в пиковский ассемблер приведенного исходника. Но так как у пиков нет доступа к стеку, поэтому необходимо три байта ОЗУ (по выходу из подпрограммы можно их использовать для других целей).
Код: Выделить всё
;
; Вычисление CRC по AN27
; Нужны 3 временных байта в ОЗУ: TempBuf, temp_crc, bitcntr
; и сама переменная crc, которую перед использованием надо инициализировать.
;
DO_CRC:
movwf TempBuf ; save bits to be shifted
movlw 8 ; set shift=8bits
movwf bitcntr
CRC_LOOP:
movf TempBuf, w
xorwf crc, w ; calculate CRC
movwf temp_crc
rrf temp_crc ; move it to the carry
movlw 0x18
btfsc status, c ; skip if data=0
xorwf crc ; update the CRC value
rrf crc ; position the new CRC
bcf status, c
rrf TempBuf ; get the remaining bits
btfsc status, c ; position the next bit
bsf TempBuf, 7 ; save the remaining bits
decfsz bitcntr ; repeat for eight bits
goto CRC_LOOP
return
;
p.s. Забыл написать, аргумент передаётся подпрограмме в аккумуляторе, а результат накапливается в переменной crc.
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 20:49:02
dosikus
uldemir, вы смотрели ссылки что я привел ?
http://www.dattalo.com/technical/software/pic/crc_8.asm
Там используется только W и один регистр . Без временных костылей.
Да и я ошибся - сей фрагмент это просто демонстрация работы алгоритма .
Код: Выделить всё
start:
clrf crc
movlw 1
call crc_8 ; crc = 0x5e
clrf crc
movlw 2
call crc_8 ; crc = 0xbc
clrf crc
movlw 4
call crc_8 ; crc = 0x61
clrf crc
movlw 8
call crc_8 ; crc = 0xc2
clrf crc
movlw 0x10
call crc_8 ; crc = 0x9d
clrf crc
movlw 0x20
call crc_8 ; crc = 0x23
clrf crc
movlw 0x40
call crc_8 ; crc = 0x46
clrf crc
movlw 0x80
call crc_8 ; crc = 0x8c
В итоге весь код вместе с примером :
Код: Выделить всё
cblock 0x20
crc
endc
org 0
goto start
;=========
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
movlw 0x1c
call crc_8 ; crc = 0xaf
movlw 0xb8
call crc_8 ; crc = 0x1e
movlw 0x01
call crc_8 ; crc = 0xdc
movlw 0x00
call crc_8 ; crc = 0xf4
movlw 0x00
call crc_8 ; crc = 0x15
movlw 0x00
call crc_8 ; crc = 0xa2
movlw 0xa2
call crc_8 ; crc = 0x00
goto start
end
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 21:06:05
uldemir
Я не обещал, что это оптимальный алгоритм. Это почти дословный перевод программы из первого сообщения. Вроде как TS это спрашивал...
valerik88 писал(а):У меня не получилось переделать этот код под PIC
Что спросили - то получили. А конкретно у меня, такая проблема, как посчитать CRC - не стоит.
Re: Assembler PIC алгоритм CRC-8
Добавлено: Пн сен 16, 2013 23:58:42
Dmitry Dubrovenko
uldemir писал(а):у меня, такая проблема, как посчитать CRC - не стоит.
Так и как мой вопрос?
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 08:26:29
HHIMERA
Dmitry Dubrovenko писал(а):и как мой вопрос?
Дурацкий... ни о чём...
Не понимаете сути CRC - нефиг его лепить куда попало... как и количество байт "сферического коня в вакууме"...
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 09:02:37
Dmitry Dubrovenko
HHIMERA писал(а):Не понимаете сути CRC
Ничего не меняется в этом мире.

Стас! Сколько тебя помню, ты всегда всё знаешь и понимаешь, но ответить, опять же всегда, не можешь.

Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 09:12:09
HHIMERA
Убрал.
Нарушение Правил форума п. 2.4
aen
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 09:20:32
dosikus
Dmitry Dubrovenko писал(а):
Стас! Сколько тебя помню, ты всегда всё знаешь и понимаешь, но ответить, опять же всегда, не можешь.

Дима, вопрос действительно дурацкий .
Тебе всего то погуглить малость.
Хотя бы что такое контрольная сумма и на она нужна .
Для осознания прочитай описание хекс файла .
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 09:24:41
HHIMERA
Убрал.
Нарушение Правил форума п. 2.4
aen
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 10:06:38
Dmitry Dubrovenko
dosikus писал(а):Тебе всего то погуглить малость
Лёшь, а ты думаешь никто Гуглем пользоваться не умеет?
В том-то и дело, что материалов куча, но какие-то противоречивые.
HHIMERA писал(а):я заставляю думать
Хоть одного назови.
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 10:18:27
dosikus
Dmitry Dubrovenko писал(а):Лёшь, а ты думаешь никто Гуглем пользоваться не умеет?
Не думаю , а знаю
http://ru.wikipedia.org/wiki/Циклически ... чный%20код
http://www.nf-team.org/drmad/zf/zf5/zf5_021.htm
Dmitry Dubrovenko писал(а):
В том-то и дело, что материалов куча, но какие-то противоречивые.
Важно не только находить , но и выделять из кучи найденного необходимое.
А эту способность у вас напрочь выбил корабельников....
Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 10:27:48
HHIMERA
Dmitry Dubrovenko писал(а):В том-то и дело, что материалов куча, но какие-то противоречивые.
Значит сферический конь в вакууме ещё не сформировался... и измерить его не представляется возможным...
Хоть одного назови.
Да хоть тебя... но станешь ли ты думать или нет - вопрос риторический...
Если в посылке, в каждом байте, значащие только 7 битов, а 1 бит служебный, то какой алгоритм надо выбирать для подсчёта CRC?
Не зная задачи подбирать тебе алгоритм??? Да пожалуйста... CRC1 или CRC0...
И каково максимальное количество байт в посылке?
Смотря какая посылка... нужно знать объём посылки и плотность байта как вещества... у почтальона спроси...

Re: Assembler PIC алгоритм CRC-8
Добавлено: Вт сен 17, 2013 11:50:23
Dmitry Dubrovenko
dosikus писал(а):Не думаю
Не сомневаюсь.
dosikus писал(а):выбил корабельников....
Я тебе уже много раз пытался объяснить, что не все люди принадлежат к паствам.
Корабельников, хотя бы многим объяснил что такое микроконтроллеры. А что сделал ЭйнЦвейДрей? Научил вас Инет засирать.
Если б я не знал, какую хрень вы иногда несёте, я бы, наверное поверил, что вы действительно очень грамотные специалисты.
HHIMERA писал(а):Да хоть тебя
Гы!

Жил, жил до Стаса, не думая, и вдруг пришёл Спаситель!
Аллилуйя!
HHIMERA писал(а):Не зная задачи
Интересно, а может быть другая задача, при передаче пакетов, кроме передачи пакетов?
А, ну да. Пакеты же почтальоны носят.
Короче, с ЭйнЦвейДреевской паствой всё ясно. Ветер дует, Солнце всходит, и дальнейшие посты можно не читать.
А если кто действительно разбирается в вопросе, ответьте, плиз.