|
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