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