Код: Выделить всё
<!DOCTYPE html>
<html>
<head>
<title>КС</title>
<h2>Расчёт КС:</h2>
</head>
<body>
<script>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////Buf:
var Buf = [
//30 00 00 69 A5 69 00 00 //8
//00 00 00 4C 04 00 00 4C //16
//04 00 00 4B 06 00 00 00 //24
//01 FF FF 7F FE 00 00 00 //32
//01 FF FF 7F FE 00 00 00 //40
//02 FF FF 7F FE //45
//КС-0E D7
0x30,0x00,0x00,0x69,0xA5,0x69,0x00,0x00,0x00,0x00,0x00,0x4C,0x04,0x00,0x00,0x4C,//16
0x04,0x00,0x00,0x4B,0x06,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7F,0xFE,0x00,0x00,0x00,//32
0x01,0xFF,0xFF,0x7F,0xFE,0x00,0x00,0x00,0x02,0xFF,0xFF,0x7F,0xFE,0,0,0,//48
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//64
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//80
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//96
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//112
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //128
/*
0x00,0x00,0x00,0xC0,0,0,0,0,0,0,0,0,0,0,0,0,//16
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//32
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//48
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//64
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//80
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//96
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//112
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //128
*/
];
var KS_len = 45; // KS_len
var xTX = 0; // счёт xTX
var String;
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
var Cnt = 0; var Sum = 0; var Tmp1 = 0; var Tmp2 = 0;
function KS(){
// Сброс
Cnt = 0; Sum = 0; Tmp1 = 0; Tmp2 = 0;
// Цикл расчёта
while (Cnt < KS_len)
{
// Tmp1
Tmp1 += Buf[Cnt]; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 = Tmp1 & 0xFFFF;
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; };
Sum = Sum & 0xFFFF;
// Следующий байт
Cnt++;
};
// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; };
Tmp2 = Tmp2 & 0xFFFF;
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 = Tmp1 & 0xFFFF;
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
// Результат
Buf[KS_len+1] = ((Sum>>8) & 0xFF);
Buf[KS_len] = ((Sum) & 0xFF);
};
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////наверное, можно немного упростить:
/*
public static ushort DoCheckSum(byte[] Buf, ushort Size)
{
ushort Cnt = 0, Tmp1 = 0, Tmp2 = 0;
if (Size == 0) { return 0; }
while (Cnt < Size)
{
// Tmp1
Tmp1 += Buf[Cnt++];
if (Tmp1 > 0x00FE) {
Tmp1 += 0xFF01;
}
// Sum
Tmp2 += Tmp1;
if (Tmp2 > 0x00FE) {
Tmp2 += 0xFF01;
}
}
// Финализация
Tmp2 += Tmp1;
if (Tmp2 > 0x00FE) {
Tmp2 += 0xFF01;
}
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2;
if (Tmp1 > 0x00FE) {
Tmp1 += 0xFF01;
}
Tmp1 ^= 0x00FF;
return (ushort)((Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00));
}
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////HEX(int)> LCD(String):
var bi = 0;
function LCD_HEX(bi) {
///////////////////
bi &= 0xFF;
var z = 0;
var HEX = "";
///////////////////
z=0; while (bi>15) {z++; bi=bi-16;};
if (z==0) {HEX = "0";} if (z==1) {HEX = "1";} if (z==2) {HEX = "2";} if (z==3) {HEX = "3";}
if (z==4) {HEX = "4";} if (z==5) {HEX = "5";} if (z==6) {HEX = "6";} if (z==7) {HEX = "7";}
if (z==8) {HEX = "8";} if (z==9) {HEX = "9";} if (z==10) {HEX = "A";} if (z==11) {HEX = "B";}
if (z==12) {HEX = "C";} if (z==13) {HEX = "D";} if (z==14) {HEX = "E";} if (z==15) {HEX = "F";}
///////////////////
z=0; while (bi>0) {z++; bi=bi-1;};
if (z==0) {HEX += "0";} if (z==1) {HEX += "1";} if (z==2) {HEX += "2";} if (z==3) {HEX += "3";}
if (z==4) {HEX += "4";} if (z==5) {HEX += "5";} if (z==6) {HEX += "6";} if (z==7) {HEX += "7";}
if (z==8) {HEX += "8";} if (z==9) {HEX += "9";} if (z==10) {HEX += "A";} if (z==11) {HEX += "B";}
if (z==12) {HEX += "C";} if (z==13) {HEX += "D";} if (z==14) {HEX += "E";} if (z==15) {HEX += "F";}
///////////////////
HEX += " ";
return HEX; //String
}
////////////////////////////////////////////////////////////////////////////////
</script>
<!-----------------------------label------------------------------------------->
<div id='label'
style='position: absolute; left: 10px; top: 150px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>len:</div>
<script>var label = document.getElementById('label');</script>
<!-----------------------------label_1----------------------------------------->
<div id='label_1'
style='position: absolute; left: 10px; top: 250px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>КС:</div>
<script>var label_1 = document.getElementById('label_1');</script>
<!-----------------------------Button------------------------------------------>
<input id='button' type='button' value='нажми меня ))' onClick='Button();'
style='position: absolute; left: 10px; top: 380px; width: 500px; height: 80px;
font-size: 50px; border: 4px solid maroon; background: #00FF00;'>
<script>
function Button() {
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
KS();
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////LCD:
label.innerHTML = "len: " + KS_len;
///////////////////
String = "КС: ";
for (xTX=0; xTX<KS_len+2; xTX++) {
String += LCD_HEX(Buf[xTX]);
};
label_1.innerHTML = String;
Buf[0]++;
if (Buf[0] > 255){Buf[0] = 0;};
};
////////////////////////////////////////////////////////////////////////////////
</script>
</body>
</html>