Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

вот выдрал из программы (асм AVR):

Отправлено argus98 04 июля 2008 г. 10:06
В ответ на: Табличный алгоритм (+): отправлено argus98 04 июля 2008 г. 09:48


;==========================================================================
; CRC16_tbl.asm. Процедура вычисления контрольной суммы (циклический из-
; быточный код) CRC-16 табличным способом.
;--------------------------------------------------------------------------
; Вызов: (r)call CRC16
; Вход: X - начальный адрес строки данных
; R16 - (N) количество байт данных для вычисления CRC
; Выход: R5:R4 - вычисленная контрольная сумма (R4 - младший байт)
; R16 = 0
; Изменения: R16, X, Z, SREG
; Обьем: 14+512 = 526 слов (1052 байта)
; Время: 15N+7 циклов argus98@mail.ru
;--------------------------------------------------------------------------
.org ((PC+127)/128)*128 ; выравнивание на границу 256 байт

CRC16_tbl: ; таблица для полинома 8005h
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; м
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ; л
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ; а
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; д
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ; ш
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; и
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; й
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ;
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ; б
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; а
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ; й
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ; т
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ;
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ;
.db $01,$C0,$80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41 ;
.db $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40 ;

.db $00,$C0,$C1,$01,$C3,$03,$02,$C2,$C6,$06,$07,$C7,$05,$C5,$C4,$04 ; с
.db $CC,$0C,$0D,$CD,$0F,$CF,$CE,$0E,$0A,$CA,$CB,$0B,$C9,$09,$08,$C8 ; т
.db $D8,$18,$19,$D9,$1B,$DB,$DA,$1A,$1E,$DE,$DF,$1F,$DD,$1D,$1C,$DC ; а
.db $14,$D4,$D5,$15,$D7,$17,$16,$D6,$D2,$12,$13,$D3,$11,$D1,$D0,$10 ; р
.db $F0,$30,$31,$F1,$33,$F3,$F2,$32,$36,$F6,$F7,$37,$F5,$35,$34,$F4 ; ш
.db $3C,$FC,$FD,$3D,$FF,$3F,$3E,$FE,$FA,$3A,$3B,$FB,$39,$F9,$F8,$38 ; и
.db $28,$E8,$E9,$29,$EB,$2B,$2A,$EA,$EE,$2E,$2F,$EF,$2D,$ED,$EC,$2C ; й
.db $E4,$24,$25,$E5,$27,$E7,$E6,$26,$22,$E2,$E3,$23,$E1,$21,$20,$E0 ;
.db $A0,$60,$61,$A1,$63,$A3,$A2,$62,$66,$A6,$A7,$67,$A5,$65,$64,$A4 ; б
.db $6C,$AC,$AD,$6D,$AF,$6F,$6E,$AE,$AA,$6A,$6B,$AB,$69,$A9,$A8,$68 ; а
.db $78,$B8,$B9,$79,$BB,$7B,$7A,$BA,$BE,$7E,$7F,$BF,$7D,$BD,$BC,$7C ; й
.db $B4,$74,$75,$B5,$77,$B7,$B6,$76,$72,$B2,$B3,$73,$B1,$71,$70,$B0 ; т
.db $50,$90,$91,$51,$93,$53,$52,$92,$96,$56,$57,$97,$55,$95,$94,$54 ;
.db $9C,$5C,$5D,$9D,$5F,$9F,$9E,$5E,$5A,$9A,$9B,$5B,$99,$59,$58,$98 ;
.db $88,$48,$49,$89,$4B,$8B,$8A,$4A,$4E,$8E,$8F,$4F,$8D,$4D,$4C,$8C ;
.db $44,$84,$85,$45,$87,$47,$46,$86,$82,$42,$43,$83,$41,$81,$80,$40 ;

CRC16: ; процедура вычисления CRC-16
ldi ZH,high(2*CRC16_tbl); нач. адрес таблицы
clr R4 ;
dec R4 ; R5:R4 = FFFFh (начальное значение CRC)
mov R5,R4 ;
CRC16a: ; цикл вычисления CRC
ld ZL,X+ ; читаем очередной байт данных IN[n]
eor ZL,R4 ; adr = IN[n] XOR low(crc)
lpm R4,Z ; R4 = TBL(adr)
eor R4,R5 ; low(crc) = TBLL(adr) XOR high(crc)
inc ZH ; адрес на старший байт
lpm R5,Z ; high(crc) = TBLH(adr)
dec ZH ; восстанавливаем адрес
dec R16 ; -1 счетчика байт
brne CRC16a ; если не все байты, повтор цикла
ret ; возврат

;=== КОНЕЦ CRC16 ==========================================================


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
что получится, если сложить 4 и 4 ?

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru