<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Výpočet CRC u Dallas teploměru DS18S20</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2900.5848" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Je to popsané u Microchipu - hledejte
AN730.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Posilam funkci na vypocet CRC, postup:</FONT></DIV>
<DIV><FONT face=Arial size=2>1) CRC = 0;</FONT></DIV>
<DIV><FONT face=Arial size=2>2) CRC = Pocitej_CRC(Jeden_Byte_Zpravy, CRC
);</FONT></DIV>
<DIV><FONT face=Arial size=2>3) Bod 2 opakuj pro celou zpravu</FONT></DIV>
<DIV><FONT face=Arial size=2>4a) Kontrola - na konci CRC = 0</FONT></DIV>
<DIV><FONT face=Arial size=2>4b) Sestaveni zpravy - doplnit na konec zpravy CRC
(dva byte)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Michal Gregor</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>#define CRC_Delitel_PC 0x8408</FONT></DIV>
<DIV> </DIV></FONT></DIV>
<DIV><FONT face=Arial
size=2>//***********************************************************<BR>//
Výpočet CRC pro počítač<BR>//<BR>// Připočte jeden byt k CRC<BR>//<BR>// Vstup:
<BR>// -datový byte<BR>// -předcházející hodnota
CRC<BR>//<BR>// Výstup: nová hodnota CRC</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>GLOBAL u16 G_Pre_Pocitej_CRC_Pc(u08
Pracovni_Byte,u16 Pracovni_CRC) {</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> u08 Pocet_Bitu=8;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> for
(Pocet_Bitu=8;Pocet_Bitu>0;--Pocet_Bitu) {</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial
size=2> //-----------------------------------------------------------<BR> //
Posunout do leva Pracovni_CRC<BR> // Pracovni_CRC.bit0 =
Pracovni_Byte.bit7<BR> // Posunout Pracovni_Byte do leva</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> Pracovni_CRC = Pracovni_CRC <<
1;<BR> if ((Pracovni_Byte bitand b10000000)==b10000000)
{<BR> Pracovni_CRC=Pracovni_CRC bitor
b00000001;<BR> }<BR> Pracovni_Byte=Pracovni_Byte <<
1;<BR> //-----------------------------------------------------------<BR> //
Pokud je zaplneno Vstupni_CRC, tady bit15==1<BR> // odecist
Delitel_CRC_Pc pomoci instrukce xor.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> if ((Pracovni_CRC bitand 0x8000) ==
0x8000 ) {<BR> Pracovni_CRC=Pracovni_CRC bitxor
0x8408;<BR> }<BR> }<BR> return
Pracovni_CRC;<BR>}<BR>//***********************************************************<BR></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=ladislav.krucinsky@linde-mh.cz
href="mailto:ladislav.krucinsky@linde-mh.cz">Kručinský Ladislav</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=hw-list@list.hw.cz
href="mailto:hw-list@list.hw.cz">HW-news</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, January 12, 2010 11:01
AM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Výpočet CRC u Dallas teploměru
DS18S20</DIV>
<DIV><BR></DIV><!-- Converted from text/rtf format -->
<P><FONT face="Arial CE" size=2>Zdravíčko kolegové.</FONT> <BR><FONT
face="Arial CE" size=2>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.</FONT></P>
<P><FONT face="Arial CE" size=2>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...</FONT></P>
<P><FONT face=LindeDaxOffice size=2>Zdravím</FONT> </P>
<P><FONT face=LindeDaxOffice size=2>Ing. Ladislav Kručinský</FONT> </P><BR>
<P>
<HR>
<P></P>_______________________________________________<BR>HW-list mailing
list - sponsored by
www.HW.cz<BR>Hw-list@list.hw.cz<BR>http://list.hw.cz/mailman/listinfo/hw-list<BR></BLOCKQUOTE></BODY></HTML>