CRC
Masz problem? Zapytaj na forum elektroda.pl z bramk± pl.misc.elektronika!
From: "Maniek" <ks_at_nospam_pg.gda.pl>
Subject: CRC
Date: Thu, 04 Feb 1999 10:45:33 GMT
Czy ktos zrobil kiedys procedurki liczenia crc - sumy kontrolnej dla 51`ki
w asemblerze? Oferuje w zamian inne procedurki np: RS485 pamiec szeregowa
EEPROM itp.
Maniek
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: CRC
Date: Thu, 04 Feb 1999 10:52:32 GMT
Thu, 04 Feb 1999 10:45:33 GMT, "Maniek" <ks_at_nospam_pg.gda.pl> napisał(-a):
Czy ktos zrobil kiedys procedurki liczenia crc - sumy kontrolnej dla 51`ki
w asemblerze? Oferuje w zamian inne procedurki np: RS485 pamiec szeregowa
Tak. Dallas opublikował tak± procedurkę do liczenia CRC dla swoich
"pastylek".
--
Jarek Andrzejewski
--
Serwis RUBIKON - http://rubikon.pl - 020 92 47
From: kulikk_at_nospam_zeus.polsl.gliwice.pl (Klaudiusz Kulik)
Subject: Re: CRC - listing
Date: 4 Feb 1999 22:15:14 GMT
Maniek pisze:
Czy ktos zrobil kiedys procedurki liczenia crc - sumy kontrolnej dla 51`ki
w asemblerze? Oferuje w zamian inne procedurki np: RS485 pamiec szeregowa
EEPROM itp.
Wysylam na liste - moze komus sie przyda. Jest to implementacja
algorytmu CRC16 w szybszej wersji (korzystajacej z tablic), a bedaca
przerobka funkcji oryginalnie napisanej w C.
BTW. Szybciej sie chyba tego nie da napisac. Moze ktos sprobuje? ;)
--- BEGIN ---
DSEG AT 0020h
CRCHi: ds 01h ; CRC starszy bajt
CRCLo: ds 01h ; CRC mlodszy bajt
index: ds 01h ; wskaznik danych
CSEG
USING 0
; obliczanie crc16
; wejscie: r0 = adres bufora
; r1 = dlugosc bufora
; wyjscie: CRCHi i CRCLo
crc16:
mov CRCHi,#0FFh
mov CRCLo,#0FFh
crc16_1:
; najpierw obliczenie index
mov a,_at_nospam_r0
xrl a,CRCHi
mov index,a ; index = CRCHi ^ bufor[r0]
inc r0 ; nastepny znak z bufora
mov dptr,#CRCHiTable
movc a,_at_nospam_a+dptr ; acc = CRCHiTable[index]
xrl a,CRCLo
mov CRCHi,a ; CRCHi = CRCLo ^
; CRCHiTable[index]
mov dptr,#CRCLoTable
mov a,index
movc a,_at_nospam_a+dptr
mov CRCLo,a ; CRCLo = CRCLoTable[index]
djnz r1,crc16_1 ; czy juz caly bufor?
ret
; Tablice kodow do algorytmu CRC16
CRCHiTable:
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h
db 000h, 0C1h, 081h, 040h, 000h, 0C1h, 081h, 040h, 001h, 0C0h
db 080h, 041h, 001h, 0C0h, 080h, 041h, 000h, 0C1h, 081h, 040h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 000h, 0C1h
db 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h, 080h, 041h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 000h, 0C1h
db 081h, 040h, 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 000h, 0C1h, 081h, 040h
db 001h, 0C0h, 080h, 041h, 001h, 0C0h, 080h, 041h, 000h, 0C1h
db 081h, 040h, 001h, 0C0h, 080h, 041h, 000h, 0C1h, 081h, 040h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 000h, 0C1h, 081h, 040h
db 001h, 0C0h, 080h, 041h, 000h, 0C1h, 081h, 040h, 001h, 0C0h
db 080h, 041h, 001h, 0C0h, 080h, 041h, 000h, 0C1h, 081h, 040h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h
db 000h, 0C1h, 081h, 040h, 000h, 0C1h, 081h, 040h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h
db 001h, 0C0h, 080h, 041h, 000h, 0C1h, 081h, 040h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h, 000h, 0C1h, 081h, 040h
db 001h, 0C0h, 080h, 041h, 001h, 0C0h, 080h, 041h, 000h, 0C1h
db 081h, 040h, 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h
db 000h, 0C1h, 081h, 040h, 001h, 0C0h, 080h, 041h, 001h, 0C0h
db 080h, 041h, 000h, 0C1h, 081h, 040h
CRCLoTable:
db 000h, 0C0h, 0C1h, 001h, 0C3h, 003h, 002h, 0C2h, 0C6h, 006h
db 007h, 0C7h, 005h, 0C5h, 0C4h, 004h, 0CCh, 00Ch, 00Dh, 0CDh
db 00Fh, 0CFh, 0CEh, 00Eh, 00Ah, 0CAh, 0CBh, 00Bh, 0C9h, 009h
db 008h, 0C8h, 0D8h, 018h, 019h, 0D9h, 01Bh, 0DBh, 0DAh, 01Ah
db 01Eh, 0DEh, 0DFh, 01Fh, 0DDh, 01Dh, 01Ch, 0DCh, 014h, 0D4h
db 0D5h, 015h, 0D7h, 017h, 016h, 0D6h, 0D2h, 012h, 013h, 0D3h
db 011h, 0D1h, 0D0h, 010h, 0F0h, 030h, 031h, 0F1h, 033h, 0F3h
db 0F2h, 032h, 036h, 0F6h, 0F7h, 037h, 0F5h, 035h, 034h, 0F4h
db 03Ch, 0FCh, 0FDh, 03Dh, 0FFh, 03Fh, 03Eh, 0FEh, 0FAh, 03Ah
db 03Bh, 0FBh, 039h, 0F9h, 0F8h, 038h, 028h, 0E8h, 0E9h, 029h
db 0EBh, 02Bh, 02Ah, 0EAh, 0EEh, 02Eh, 02Fh, 0EFh, 02Dh, 0EDh
db 0ECh, 02Ch, 0E4h, 024h, 025h, 0E5h, 027h, 0E7h, 0E6h, 026h
db 022h, 0E2h, 0E3h, 023h, 0E1h, 021h, 020h, 0E0h, 0A0h, 060h
db 061h, 0A1h, 063h, 0A3h, 0A2h, 062h, 066h, 0A6h, 0A7h, 067h
db 0A5h, 065h, 064h, 0A4h, 06Ch, 0ACh, 0ADh, 06Dh, 0AFh, 06Fh
db 06Eh, 0AEh, 0AAh, 06Ah, 06Bh, 0ABh, 069h, 0A9h, 0A8h, 068h
db 078h, 0B8h, 0B9h, 079h, 0BBh, 07Bh, 07Ah, 0BAh, 0BEh, 07Eh
db 07Fh, 0BFh, 07Dh, 0BDh, 0BCh, 07Ch, 0B4h, 074h, 075h, 0B5h
db 077h, 0B7h, 0B6h, 076h, 072h, 0B2h, 0B3h, 073h, 0B1h, 071h
db 070h, 0B0h, 050h, 090h, 091h, 051h, 093h, 053h, 052h, 092h
db 096h, 056h, 057h, 097h, 055h, 095h, 094h, 054h, 09Ch, 05Ch
db 05Dh, 09Dh, 05Fh, 09Fh, 09Eh, 05Eh, 05Ah, 09Ah, 09Bh, 05Bh
db 099h, 059h, 058h, 098h, 088h, 048h, 049h, 089h, 04Bh, 08Bh
db 08Ah, 04Ah, 04Eh, 08Eh, 08Fh, 04Fh, 08Dh, 04Dh, 04Ch, 08Ch
db 044h, 084h, 085h, 045h, 087h, 047h, 046h, 086h, 082h, 042h
db 043h, 083h, 041h, 081h, 080h, 040h
--- END ---
Maniek
--
K.
From: "Maniek" <ks_at_nospam_pg.gda.pl>
Subject: Dzieki potworne
Date: Fri, 05 Feb 1999 14:34:04 GMT
WDZIECZNOSC MOJA GRANIC NIE ZNA !
#Maniek
From: "Maniek" <ks_at_nospam_pg.gda.pl>
Subject: KLOPOTY
Date: Sat, 06 Feb 1999 09:09:21 GMT
No to pieknie: mam 3 rozne procedury. Jedna z nich zapodal Pan Klaudiusz
Kulik, druga zrobilem w oparciu o ten sam algorytm a trzecia napisalem w
oparciu o algorytm funkcyjny - patrz ksiazka "interfejsy szeregowe".
KAZDY LICZY INACZEJ ! ! !
Proponuje wspaniala zabawe - niech kazdy kto ma z tym cos wspolnego obliczy
CRC z 6 bajtow danych z ktorych kazdy jest np. rowny zero.
A oto moje typy; 0DDD5h lub 001Bh lub 001Bh - zadziwiajace dwa wyniki a
rozne metody, jednak dla innych liczb wej. jest inaczej.
Wynik jest dwubajtowy.
Kto sie ze mna pobawi ?
#Maniek
From: kulikk_at_nospam_zeus.polsl.gliwice.pl (Klaudiusz Kulik)
Subject: Re: KLOPOTY
Date: Sun, 07 Feb 1999 17:39:49 GMT
Maniek pisze:
A oto moje typy; 0DDD5h lub 001Bh lub 001Bh - zadziwiajace dwa wyniki a
rozne metody, jednak dla innych liczb wej. jest inaczej.
Cos pochrzaniles. U mnie wychodzi 001Bh. Dla szesciu bajtow
0FFh: 0194h; dla szesciu bajtow 7Fh: 57C2h. Wyniki zgadzaja sie dla
kodu w asm., jak i dla oryginalnego kodu w C.
#Maniek
--
K.