вообще в доке на TM все есть (IButton сейчас называются), а так, на пример:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено НBHeli 27 декабря 2002 г. 19:54
В ответ на: Touch memory отправлено vosap 27 декабря 2002 г. 19:20

list p=PIC16F84
include p16f84.inc

ba equ 0f
_TMP1 equ ba+0
_TMP2 equ ba+1
_TMP3 equ ba+2
_CRC8 equ ba+3

buff equ ba+10

org 0h
goto _main

_main

movlw buff
movwf FSR
movlw 01
movwf 0
movlw 7
call _CRC_8
nop
nop
nop
_001:
goto _001

;
;***************************** _CRC_8 ********************
; вычисляет CRC8 для W байт из FSR и возвращает ее в W
; после выполнения FSR=FSR(до выполн.)+W
_CRC_8
movwf _TMP1
clrf _CRC8
_CRC8_01
movlw 8
movwf _TMP2
movf 0,0
movwf _TMP3
_CRC8_02
rrf _TMP3,1 ;-
btfss STATUS,C ; если входной бит = 1
goto _CRC8_03 ;
movlw 1 ; то xor-им младший бит CRC с 1
xorwf _CRC8,1 ;-
_CRC8_03
bcf STATUS,C
rrf _CRC8,1 ;- смотрим, что в младшем бите
clrw ; если бит = 0 (ID xor CRC<0>) , то W=0
btfsc STATUS,C ; если бит = 1 , то W=0FF
movlw b'10001100' ;-
xorwf _CRC8,1 ; хорим CRC с вычисленным значением
decfsz _TMP2,f
goto _CRC8_02
incf FSR,1
decfsz _TMP1,f
goto _CRC8_01
movf _CRC8,0
return
end
=============
и на BC3.0 для DOS-а :-))
#include

typedef unsigned char byte;
typedef unsigned int word;

byte crc8(byte *buf,word l,byte crc);

//byte cc[]={0x01,0xf1,0xb6,0x8a,0x01,0x00,0x00,0xc2};
byte cc[]={0x01,0x12,0x34,0x56,0x78,0x90,0x00,0x47};
//01 06 34 11 07 00 00 d9
void main(void){
byte crc;
int i;
crc=crc8(cc,7,0);
printf("CRC8 %02X\n",(word)crc);
}

byte crc8(byte *buf,word len,byte crc){
word i,j,k;
byte ret=crc,m,l;
for(i=0;i m=1;
for(j=0;j<8;j++){
l=((buf[i]&m)? 0x8c:0)^((ret&0x1)? 0x8c:0);
ret>>=1;
ret^=l;
m<<=1;
}
}
return ret;
}

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

Ответы



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

E-mail: info@telesys.ru