Assembler PIC алгоритм CRC-8

Поклонники продукции Microchip Technology Inc тусуются тут.
valerik88
Родился
Сообщения: 9
Зарегистрирован: Вс сен 15, 2013 07:33:45

Assembler PIC алгоритм CRC-8

Сообщение 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?
Реклама
Реклама
valerik88
Родился
Сообщения: 9
Зарегистрирован: Вс сен 15, 2013 07:33:45

Re: Assembler PIC алгоритм CRC-8

Сообщение 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

Я что-то не так понял?
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2359
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Assembler PIC алгоритм CRC-8

Сообщение Dmitry Dubrovenko »

А вот кто мне ответит на такой вопрос:
Если в посылке, в каждом байте, значащие только 7 битов, а 1 бит служебный, то какой алгоритм надо выбирать для подсчёта CRC?
И каково максимальное количество байт в посылке?
ICQ нет, и, в ближайшее время, не будет.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Assembler PIC алгоритм CRC-8

Сообщение dosikus »

valerik88 писал(а):
Я что-то не так понял?
Именно, там не вычисление crc а подготовка алгоритма .
Вычисление crc ниже см dallas example ...
Реклама
valerik88
Родился
Сообщения: 9
Зарегистрирован: Вс сен 15, 2013 07:33:45

Re: Assembler PIC алгоритм CRC-8

Сообщение 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 - Предупреждение. При повторном нарушении - бан на усмотрение модератора.
Последний раз редактировалось AlekseyEnergo Вт сен 17, 2013 07:45:41, всего редактировалось 1 раз.
Причина: .
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Assembler PIC алгоритм CRC-8

Сообщение dosikus »

valerik88 писал(а): В чём касяк?
У Вас в голове .
valerik88 писал(а): Т.е. crc числа 2, будет bc, а онлайн калькулятор показывает 62 http://ghsi.de/CRC/index.php?Polynom=10 ... &Message=2
Калькулятор ЧЕГО ?
Вам нужно для 1Wire ? Ну так и используйте калькулятор для него. http://arv.radioliga.com/component/opti ... wn/id,136/
Что вы привязались к этому калькулятору ? Почитайте хоть Вики что ли , на предмет того что crc может и вычисляться по разному и разный результат будет...
http://ru.wikipedia.org/wiki/Циклически ... чный%20код
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Assembler PIC алгоритм CRC-8

Сообщение 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.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Assembler PIC алгоритм CRC-8

Сообщение 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
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Assembler PIC алгоритм CRC-8

Сообщение uldemir »

Я не обещал, что это оптимальный алгоритм. Это почти дословный перевод программы из первого сообщения. Вроде как TS это спрашивал...
valerik88 писал(а):У меня не получилось переделать этот код под PIC
Что спросили - то получили. А конкретно у меня, такая проблема, как посчитать CRC - не стоит.
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2359
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Assembler PIC алгоритм CRC-8

Сообщение Dmitry Dubrovenko »

uldemir писал(а):у меня, такая проблема, как посчитать CRC - не стоит.
Так и как мой вопрос?
ICQ нет, и, в ближайшее время, не будет.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Assembler PIC алгоритм CRC-8

Сообщение HHIMERA »

Dmitry Dubrovenko писал(а):и как мой вопрос?
Дурацкий... ни о чём...
Не понимаете сути CRC - нефиг его лепить куда попало... как и количество байт "сферического коня в вакууме"...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2359
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Assembler PIC алгоритм CRC-8

Сообщение Dmitry Dubrovenko »

HHIMERA писал(а):Не понимаете сути CRC
Ничего не меняется в этом мире. :facepalm:
Стас! Сколько тебя помню, ты всегда всё знаешь и понимаешь, но ответить, опять же всегда, не можешь. :)))
ICQ нет, и, в ближайшее время, не будет.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Assembler PIC алгоритм CRC-8

Сообщение HHIMERA »

Убрал.
Нарушение Правил форума п. 2.4

aen
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Assembler PIC алгоритм CRC-8

Сообщение dosikus »

Dmitry Dubrovenko писал(а): Стас! Сколько тебя помню, ты всегда всё знаешь и понимаешь, но ответить, опять же всегда, не можешь. :)))
Дима, вопрос действительно дурацкий .
Тебе всего то погуглить малость.
Хотя бы что такое контрольная сумма и на она нужна .
Для осознания прочитай описание хекс файла .
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Assembler PIC алгоритм CRC-8

Сообщение HHIMERA »

Убрал.
Нарушение Правил форума п. 2.4

aen
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2359
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Assembler PIC алгоритм CRC-8

Сообщение Dmitry Dubrovenko »

dosikus писал(а):Тебе всего то погуглить малость
Лёшь, а ты думаешь никто Гуглем пользоваться не умеет?
В том-то и дело, что материалов куча, но какие-то противоречивые.
HHIMERA писал(а):я заставляю думать
Хоть одного назови.
ICQ нет, и, в ближайшее время, не будет.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Assembler PIC алгоритм CRC-8

Сообщение dosikus »

Dmitry Dubrovenko писал(а):Лёшь, а ты думаешь никто Гуглем пользоваться не умеет?
Не думаю , а знаю
http://ru.wikipedia.org/wiki/Циклически ... чный%20код
http://www.nf-team.org/drmad/zf/zf5/zf5_021.htm
Dmitry Dubrovenko писал(а): В том-то и дело, что материалов куча, но какие-то противоречивые.
Важно не только находить , но и выделять из кучи найденного необходимое.
А эту способность у вас напрочь выбил корабельников....
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Assembler PIC алгоритм CRC-8

Сообщение HHIMERA »

Dmitry Dubrovenko писал(а):В том-то и дело, что материалов куча, но какие-то противоречивые.
Значит сферический конь в вакууме ещё не сформировался... и измерить его не представляется возможным... :)))
Хоть одного назови.
Да хоть тебя... но станешь ли ты думать или нет - вопрос риторический...
Если в посылке, в каждом байте, значащие только 7 битов, а 1 бит служебный, то какой алгоритм надо выбирать для подсчёта CRC?
Не зная задачи подбирать тебе алгоритм??? Да пожалуйста... CRC1 или CRC0... :)))
И каково максимальное количество байт в посылке?
Смотря какая посылка... нужно знать объём посылки и плотность байта как вещества... у почтальона спроси... :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2359
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Assembler PIC алгоритм CRC-8

Сообщение Dmitry Dubrovenko »

dosikus писал(а):Не думаю
Не сомневаюсь. :)
dosikus писал(а):выбил корабельников....
Я тебе уже много раз пытался объяснить, что не все люди принадлежат к паствам.
Корабельников, хотя бы многим объяснил что такое микроконтроллеры. А что сделал ЭйнЦвейДрей? Научил вас Инет засирать.
Если б я не знал, какую хрень вы иногда несёте, я бы, наверное поверил, что вы действительно очень грамотные специалисты.

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

Короче, с ЭйнЦвейДреевской паствой всё ясно. Ветер дует, Солнце всходит, и дальнейшие посты можно не читать.
А если кто действительно разбирается в вопросе, ответьте, плиз.
ICQ нет, и, в ближайшее время, не будет.
Ответить

Вернуться в «PIC»