Re: Výpočet CRC u Dallas teploměru DS18S20
Michal HW
michalgregor@centrum.cz
Úterý Leden 12 11:13:30 CET 2010
Výpočet CRC u Dallas teploměru DS18S20Je to popsané u Microchipu - hledejte AN730.
Posilam funkci na vypocet CRC, postup:
1) CRC = 0;
2) CRC = Pocitej_CRC(Jeden_Byte_Zpravy, CRC );
3) Bod 2 opakuj pro celou zpravu
4a) Kontrola - na konci CRC = 0
4b) Sestaveni zpravy - doplnit na konec zpravy CRC (dva byte)
Michal Gregor
#define CRC_Delitel_PC 0x8408
//***********************************************************
// Výpočet CRC pro počítač
//
// Připočte jeden byt k CRC
//
// Vstup:
// -datový byte
// -předcházející hodnota CRC
//
// Výstup: nová hodnota CRC
GLOBAL u16 G_Pre_Pocitej_CRC_Pc(u08 Pracovni_Byte,u16 Pracovni_CRC) {
u08 Pocet_Bitu=8;
for (Pocet_Bitu=8;Pocet_Bitu>0;--Pocet_Bitu) {
//-----------------------------------------------------------
// Posunout do leva Pracovni_CRC
// Pracovni_CRC.bit0 = Pracovni_Byte.bit7
// Posunout Pracovni_Byte do leva
Pracovni_CRC = Pracovni_CRC << 1;
if ((Pracovni_Byte bitand b10000000)==b10000000) {
Pracovni_CRC=Pracovni_CRC bitor b00000001;
}
Pracovni_Byte=Pracovni_Byte << 1;
//-----------------------------------------------------------
// Pokud je zaplneno Vstupni_CRC, tady bit15==1
// odecist Delitel_CRC_Pc pomoci instrukce xor.
if ((Pracovni_CRC bitand 0x8000) == 0x8000 ) {
Pracovni_CRC=Pracovni_CRC bitxor 0x8408;
}
}
return Pracovni_CRC;
}
//***********************************************************
----- Original Message -----
From: Kručinský Ladislav
To: HW-news
Sent: Tuesday, January 12, 2010 11:01 AM
Subject: Výpočet CRC u Dallas teploměru DS18S20
Zdravíčko kolegové.
Trápím se tady s výpočtem CRC v procesoru PIC - ačkoliv jsem si stáhl Aplikační listy jak od Dallasu tak i od Microchipu, nejsem nějak 100 pochopit algoritmus výpočtu pomocí posouvání registru. Nemám kapacitu abych to řešil tabulkou (je potřeba 256 registrů) a tak tady čmárám po čtverečkovaných papírech jedničky a nuly a nevychází mi to. Respektive - ze čtyř Dallas čipů jsem si vyčetl ROM se sériovým číslem, číslem rodiny a CRC. U dvou mi výpočet funguje, u dvou nikoliv.
Nechci prudit celou konferu ukázkami algoritmu, nedělali jste to někdo v PIC assembleru ideálně pro PIC16F676 a pod ? Nechci celý program, jenom bych rád věděl kde to vorám...
Zdravím
Ing. Ladislav Kručinský
------------------------------------------------------------------------------
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20100112/be6e50e8/attachment.htm>
More information about the Hw-list
mailing list