[an error occurred while processing this directive]
|
// USAGE:
// R0: c
// R1:R2: gcrc
#define nc R16
#define grcrh R1
#define grcrl R2
clear_crc: LDI R16,0
MOV grcrh,R16
MOV grcrl,R16
RETupdate_crc:
//--------------------------------------------
// u16_t gcrc;
// updcrc(u8_t c) {
// int i;
// gcrc ^= (u16_t)(c << 8);
//
// for (i = 0; i <8; i++) {
// if (gcrc & 0x8000) {
// gcrc = (gcrc << 1) ^ 0x1021;
// } else {
// gcrc <<= 1;
// }
// }
// }
//--------------------------------------------
PUSH R16
PUSH R17
EOR grcrh,nc
LDI R16,8
_gcc: BCLR SREG_C
ROL grcrl
ROL grcrh
BRCC _ncb
//
LDI R17,$21
EOR grcrl,R17
LDI R17,$10
EOR grcrh,R17
//
_ncb: DEC R16
BRNE _gcc
POP R17
POP R16
RET
E-mail: info@telesys.ru