Bu hex Kodunun
Kod: Tümünü seç
1A
Kod: Tümünü seç
4FA3
Kod: Tümünü seç
1A
Kod: Tümünü seç
4FA3
Kod: Tümünü seç
function CRC16_ozel( strDeger:String ):Cardinal;
const
bMask : array[0..31] of DWord =
($00000001, $00000002, $00000004, $00000008,
$00000010, $00000020, $00000040, $00000080,
$00000100, $00000200, $00000400, $00000800,
$00001000, $00002000, $00004000, $00008000,
$00010000, $00020000, $00040000, $00080000,
$00100000, $00200000, $00400000, $00800000,
$01000000, $02000000, $04000000, $08000000,
$10000000, $20000000, $40000000, $80000000);
function CrcReflect(dwDeger: DWord; BitSay:Word ): DWord;
var
i : Integer;
begin
Result := dwDeger;
for i := 0 to (BitSay-1) do
begin
if (dwDeger and 1) <> 0
then Result := Result or bMask[(BitSay-1) - i]
else Result := Result and not bMask[(BitSay-1) - i];
dwDeger := dwDeger shr 1;
end;
end;
var
i,j: Integer;
Data : DWord;
begin
Result := $FFFF;
for i := 1 to Length(strDeger) do
begin
Data := CrcReflect( Ord(strDeger[i] ), 8 );
Result := Result xor ( Data shl 8 );
for j := 0 to 7 do
begin
if (Result and $8000 ) <> 0
then Result:=(Result shl 1) xor $1021
else Result:= Result shl 1;
Result := Result and $FFFF;
end;
end;
Result:= CrcReflect( Result, 16 ) xor $FFFF;
end;
Kod: Tümünü seç
Var
strVeri : String;
Sonuc : Cardinal;
begin
//Önceki sorundaki de doğru çıkıyor...
//strVeri := Chr($1A)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11);
strVeri := Chr($1A);
Sonuc := CRC16_ozel( strVeri );
ShowMessageFmt( '%x', [ Sonuc ] );
end;
hocam sonuc cardinalını yani (Sonuc) strverinin sonuna koymak istersem 4 karakteri 2\2 ayırıp tersten yazıp nasıl koyabilirim.yani strveridenin hesaplamasını comporttan gonderırken sona koymam gerekli yani normalde söyle oluyormrmarman yazdı:Aşağıdaki şekilde kullan. Afiyet olsun.Kullanımı :Kod: Tümünü seç
function CRC16_ozel( strDeger:String ):Cardinal; const bMask : array[0..31] of DWord = ($00000001, $00000002, $00000004, $00000008, $00000010, $00000020, $00000040, $00000080, $00000100, $00000200, $00000400, $00000800, $00001000, $00002000, $00004000, $00008000, $00010000, $00020000, $00040000, $00080000, $00100000, $00200000, $00400000, $00800000, $01000000, $02000000, $04000000, $08000000, $10000000, $20000000, $40000000, $80000000); function CrcReflect(dwDeger: DWord; BitSay:Word ): DWord; var i : Integer; begin Result := dwDeger; for i := 0 to (BitSay-1) do begin if (dwDeger and 1) <> 0 then Result := Result or bMask[(BitSay-1) - i] else Result := Result and not bMask[(BitSay-1) - i]; dwDeger := dwDeger shr 1; end; end; var i,j: Integer; Data : DWord; begin Result := $FFFF; for i := 1 to Length(strDeger) do begin Data := CrcReflect( Ord(strDeger[i] ), 8 ); Result := Result xor ( Data shl 8 ); for j := 0 to 7 do begin if (Result and $8000 ) <> 0 then Result:=(Result shl 1) xor $1021 else Result:= Result shl 1; Result := Result and $FFFF; end; end; Result:= CrcReflect( Result, 16 ) xor $FFFF; end;
Kod: Tümünü seç
Var strVeri : String; Sonuc : Cardinal; begin //Önceki sorundaki de doğru çıkıyor... //strVeri := Chr($1A)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11)+Chr($11); strVeri := Chr($1A); Sonuc := CRC16_ozel( strVeri ); ShowMessageFmt( '%x', [ Sonuc ] ); end;
Kod: Tümünü seç
ComPort1.Open;
ComPort1.ShowSetupDialog;
comport1.WriteStr(strVeri);
Kod: Tümünü seç
4FA1
Kod: Tümünü seç
$A1 $4F
mesajı aldım hocam araştırmıştım daha çok araştırıyorummrmarman yazdı:Format fonksiyonunu bir çalış çözüm uzakta değil hocam.
Kod: Tümünü seç
Function Tersle( Deger: Cardinal ): string;
Var
strVeri, strTersVeri : String;
begin
strVeri := Format('%x', [ Deger ] );
if Length( strVeri ) Mod 2 = 1
then strVeri := '0' + strVeri; // çift haneye tamamlıyoruz.
strTersVeri := '';
while strVeri <> '' do
begin
strTersVeri := Copy(strVeri, 1, 2 ) + strTersVeri;
system.Delete( strVeri, 1, 2 );
end;
Result := strTersVeri;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn6Click(Sender: TObject);
Var
strVeri : String;
Sonuc : Cardinal;
begin
strVeri := Chr($1A);
Sonuc := CRC16_ozel( strVeri );
ShowMessageFmt( '%x - %s', [sonuc, Tersle( Sonuc ) ] );
end;
Kod: Tümünü seç
strVeri :=Chr($27)+Chr($26)+Chr($02)+Chr($08)+ Chr( StrToInt( '$' + sEdit45.Text[1]+'A'))+ Chr(StrToInt( '$' +yaziyicevir(k) ))+ Chr(StrToInt( '$' +yaziyicevir(a) ))+ Chr(StrToInt( '$' +yaziyicevir(b) ))+ Chr(StrToInt( '$' +yaziyicevir(c) ))+ Chr(StrToInt( '$' +yaziyicevir(d) ))+ Chr(StrToInt( '$' +yaziyicevir(g) ))+ Chr(StrToInt( '$' +yaziyicevir(h) ))+Tersle( Sonuc )+Chr($7E);
Kod: Tümünü seç
#27#26#02#08#3A#65#64#89#47#65#89#45#33#39#36#33#7E
Kod: Tümünü seç
6339
Kod: Tümünü seç
k:=copy(sedit45.Text,2,2);
a:=copy(sedit45.Text,4,2);
b:=copy(sedit45.Text,6,2);
c:=copy(sedit45.Text,8,2);
d:=copy(sedit45.Text,10,2);
g:=copy(sedit45.Text,12,2);
h:=copy(sedit45.Text,14,2);
Kod: Tümünü seç
356469874569854
Kod: Tümünü seç
unction yaziyicevir(S : String): String;
Var
i,j:Integer;S1:string;
Begin
s1:='';
j:=Length(S);
For i := j DownTo 1 Do s1 := s1 + Copy(S,i,1) ;
For i := 1 To j Do
case ord(s1[i]) of
40 : s1[i]:=chr(41);
41 : s1[i]:=chr(40);
107 : s1[i]:=chr(107);
109 : s1[i]:=chr(109);
137 : s1[i]:=chr(137);
139 : s1[i]:=chr(139);
end;
yaziyicevir:=s1;
end;