Вот чего накомпилилось для CCITT-8
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Codavr 28 декабря 2004 г. 14:16
В ответ на: Ребята надо организовать сеть МК (AVR), по UART пакетами по 10 байт. Как на ASM проще CRC организовать? Помогите примером. Не изобретать же колесо. отправлено Ursul 28 декабря 2004 г. 12:54

main:
SBIW R29 : R28,1
//BYTE crc = 0xFF;
LDI R16,255
ST Y,R16
//for(i=0; i<10; i++) crc8_calc(PORTC, &crc);
LDI R24,0
RJMP ??main_0
??main_1:
MOVW R19 : R18,R29 : R28
IN R16,0x15
RCALL crc8_calc
INC R24
??main_0:
CPI R24,10
BRCS ??main_1
//PORTD=crc;
LD R16,Y
OUT 0x12,R16
ADIW R29 : R28,1
RET

// void crc8_calc(BYTE data_byte, BYTE* crc8)
// Calculate CRC-8 value; uses The CCITT-8 polynomial,
// expressed as X^8 + X^5 + X^4 + 1
// initial crc = (BYTE) 0xFF

// *crc8 ^= data_byte
crc8_calc:
MOVW R31 : R30,R19 : R18
LD R17,Z
EOR R17,R16
ST Z,R17
// for( b=0; b<8; ++b ){
LDI R16,0
RJMP ??crc8_calc_0
// if( (*crc8 & (BYTE) 0x080)!=(BYTE)0x00)
// *crc8 = (*crc8 << 1) ^ (BYTE) 0x031;
// else
// *crc8 = (*crc8 << 1);
??crc8_calc_1:
MOVW R31 : R30,R19 : R18
LD R17,Z
LSL R17
MOVW R31 : R30,R19 : R18
ST Z,R17
??crc8_calc_2:
INC R16
??crc8_calc_0:
CPI R16,8
BRCC ??crc8_calc_3
MOVW R31 : R30,R19 : R18
LD R17,Z
SBRS R17,7
RJMP ??crc8_calc_1
MOVW R31 : R30,R19 : R18
LD R20,Z
LSL R20
LDI R17,49
EOR R17,R20
MOVW R31 : R30,R19 : R18
ST Z,R17
RJMP ??crc8_calc_2
??crc8_calc_3:
RET

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru