CRC generator pro DS18B20 na x51
Marek Pavlu
pavlu@HWserver.cz
Pondělí Únor 20 09:25:12 CET 2006
Zdravim,
Ja si na to v BC3.0 před nekolika lety udelal jako tridu v C++, ale prosim,
nepeskujte:), to jsem zacinal s C/C++ :).
Staci volat funkci(metodu) CRC8_DS::TestCRC a dat ji pointer na pocatek dat,
za funkcnost s jinym Dallasem nerucim, chce to upravit...
TestCRC, ale minimalne je tam videt, jak se pracuje s tim polynomem StepCRC
a jak se mu posilaji data bit po bitu...
V C se daji ty privatni promenne vyresit jako static promenne danych
funkci...
Pokud to chcete v asm, tak něco na toto tema bylo v knize "Periferie
mikrokontroleru" nebo tak nejak....
/*********************************************************************/
/********* Gener tor CRC ***********************/
/********* Algoritmus - DALLAS SemiCon ***********************/
/*********************************************************************/
#define true 1
#define false 0
//#include "dosys/gsbit.cpp"
//Poskytuje funkci
// GBit(data,bit)
// dataout = SBit(data, pozice, stav)
class CRC8_DS
{
private:
unsigned char CRC,X4,X5,Poly,Aku;
void StepCRC(unsigned char DataIn);
public:
CRC8_DS(void);
~CRC8_DS(void);
unsigned char TestCRC(const unsigned char* PtrChip);
};
CRC8_DS::CRC8_DS(void)
{
}
CRC8_DS::~CRC8_DS(void)
{
}
void CRC8_DS::StepCRC(unsigned char DataIn)
{
Aku= GBit(CRC,7);
Aku^=DataIn;
Poly=Aku;
Aku=GBit(CRC,4);
Aku^=Poly;
X5=Aku;
Aku=GBit(CRC,3);
Aku^=Poly;
X4=Aku;
unsigned char n=6;
while(1)
{
CRC=SBit(CRC,n+1,GBit(CRC,n));
if(n==0)
break;
else
n--;
}
CRC=SBit(CRC,5,X5);
CRC=SBit(CRC,4,X4);
CRC=SBit(CRC,0,Poly);
}
unsigned char CRC8_DS::TestCRC(const unsigned char* PtrChip)
{
CRC=0;
unsigned char m,n;
for(m=0;m<=6;m++)
for(n=0;n<=7;n++)
this->StepCRC(GBit(PtrChip[m],n));
for(m=0;m<4;m++)
{
n=GBit(CRC,7-m);
CRC=SBit(CRC,7-m,GBit(CRC,m));
CRC=SBit(CRC,m,n);
}
if(CRC==PtrChip[7])
return true;
else
return false;
}
S pozdravem,
Marek Pavlu
// -----Original Message-----
// From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
// Behalf Of Martin Zaruba
// Sent: Monday, February 20, 2006 7:37 AM
// To: HW-news
// Subject: CRC generator pro DS18B20 na x51
//
// Nemate nekdo v programu CRC generator pro DS18B20 na x51? Priznavam, ze
// mi
// princip generovani CRC neni uplne jasny.
//
// Martin Záruba
//
//
// _______________________________________________
// HW-list mailing list - sponsored by www.HW.cz
// Hw-list@list.hw.cz
// http://list.hw.cz/mailman/listinfo/hw-list
_____
avast! Antivirus <http://www.avast.com> : Odchozi zprava cista.
Virova databaze (VPS): 0607-2, 16.02.2006
Testovano: 20.2.2006 9:25:12
avast! - copyright (c) 2000-2003 ALWIL Software.
Další informace o konferenci Hw-list