Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 12:51 17.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема MP-50 Datecs - въпрос за CRCнови  
АвторDP-5O (Нерегистриран)
Публикувано22.01.07 15:00



Из протокола на MP-50:

ALGORITHM FOR CRC CHECK ON RECEIVING

Three working bytes are used S1, S0 and RC

S1 - Most significant byte from the CRC ( it is received immediately after END)
S0 - Least significant byte from the CRC ( transmitted after S1)
RC - the current received byte in the block ( beginning from the first byte after BEG and ending 2 bytes after END).

The CRC is obtained as follows:
1. S1 and S0 are zeroed
2. RC is loaded with the current received byte
3. Points 3.1 and 3.2 are executed 8 times:
3.1. S1, S0 and RC are shifted 8 times to the left
3.2. if the MSB of S1 is 1 then MSB of S1 and LSB of S0 are inverted.
Points 2 and 3 are executed for all bytes, included in the calculation of the CRC - from the first byte after BEG up to and including 2 bytes after END.
S1 and S0 must be 0.

Тъй като в началото S1 и S0 са нули колкото и да ги шифтвам на ляво, условие 3.2 никага няма да бъде изпълнено и двата байта на CRC винаги ще са нули.
Аз ли нещо не мога да схвана или има грешка в протокола.
Някой да има информация как се смята CRC при приемане на инфо от касата и при предаване на инфо от PC.



Тема Re: S1, S0 and RC are shifted [re: DP-5O]  
АвторЙopдaн (Нерегистриран)
Публикувано22.01.07 16:08



Както гледам се шифтват 3 байта и явно се прехвърля 1 бит между тях.
От друга страна 8 пъти го има и в 3. и в 3.1., второто ми изглежда излишно.



Тема Re: MP-50 Datecs - въпрос за CRCнови [re: DP-5O]  
АвторDP-5O (Нерегистриран)
Публикувано24.01.07 17:56



function ShiftLeftWithCarry(a: integer; b: byte): integer;
asm
rcl dl, 1
rcl ax, 1
// btc ax, 15
// jc @L1
// xor ax, $81
//@L1:
// NOP
end;

function CalculateCRConReceive(RC: byte; S01: integer): Integer;
var i: byte;
begin
for i:= 1 to 8 do begin
S01:= ShiftLeftWithCarry(S01, RC);
if S01 >= 128 then S01:= S01 xor $81;
RC:= RC shl 1;
end;
Result:= S01;
end;

Пробвах какви ле не варианти, но чек сумата все не ми излиза.
Някой да се е занимавал с касови апарати на датекс и да знае как се изчислява CRC?



Тема Re: MP-50 Datecs - въпрос за CRCнови [re: DP-5O]  
АвторDP-5O (Нерегистриран)
Публикувано25.01.07 23:16



Разгадах го как става, ако някой му е интересно:

function CalculateCRC(S01: integer; RC: byte): Integer;
asm
mov cl, 8
@LOOP:
rcl dl, 1
rcl ax, 1
jnc @L1
xor ax, $8001
@L1:
dec cl
jnz @LOOP
end;




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.