📄 adsbin.c
字号:
BNZ M04ADC
GOTO Error_Data
M04ADC:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04AF6
GOTO Error_Data
M04AF6:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04B10
GOTO Error_Data
M04B10:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04B2A
GOTO Error_Data
M04B2A:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04B44
GOTO Error_Data
M04B44:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04B5E
GOTO Error_Data
M04B5E:
NOP
RRCF PORTC, W, A
RLCF AAA10, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA10, W, 1
ANDLW 0x01
BNZ M04B78
GOTO Error_Data
M04B78:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04B92
GOTO Error_Data
M04B92:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04BAC
GOTO Error_Data
M04BAC:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04BC6
GOTO Error_Data
M04BC6:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04BE0
GOTO Error_Data
M04BE0:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04BFA
GOTO Error_Data
M04BFA:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04C14
GOTO Error_Data
M04C14:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04C2E
GOTO Error_Data
M04C2E:
NOP
RRCF PORTC, W, A
RLCF AAA11, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA11, W, 1
ANDLW 0x01
BNZ M04C48
GOTO Error_Data
M04C48:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04C62
GOTO Error_Data
M04C62:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04C7C
GOTO Error_Data
M04C7C:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04C96
GOTO Error_Data
M04C96:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04CB0
GOTO Error_Data
M04CB0:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04CCA
GOTO Error_Data
M04CCA:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04CE4
GOTO Error_Data
M04CE4:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04CFE
GOTO Error_Data
M04CFE:
NOP
RRCF PORTC, W, A
RLCF AAA12, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA12, W, 1
ANDLW 0x01
BNZ M04D18
GOTO Error_Data
M04D18:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04D32
GOTO Error_Data
M04D32:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04D4C
GOTO Error_Data
M04D4C:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04D66
GOTO Error_Data
M04D66:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04D80
GOTO Error_Data
M04D80:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04D9A
GOTO Error_Data
M04D9A:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04DB4
GOTO Error_Data
M04DB4:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04DCE
GOTO Error_Data
M04DCE:
NOP
RRCF PORTC, W, A
RLCF AAA13, F, 1
NOP
NOP
NOP
NOP
MOVF PORTC, W, A
XORWF AAA13, W, 1
ANDLW 0x01
BNZ M04DE8
GOTO Error_Data
//alles fehlerfrei empfangen
M04DE8:
NOP
M04DEA:
BCF PORTC, 1, A
BSF PORTC, 2, A // komplettes Frame empfangen
BSF INTCON, GIEH, A
MOVLW 0 // false , korrekter Empfang
RETURN 0
_endasm
} // adsb_in
/***DF***************************************************************/
//ermittelt Formatnummer der Daten in adsb[]
byte adsb_DF(void)
{
byte DF;
DF = adsb[0];
DF = DF >> 3;
return DF;
}
/***CRC**************************************************************/
/****
DF0 (56 bit) 00000=0L Short Air to Air ACAS CRC32 xor ACID
DF4 (56 bit) 00100=2L Surveillance (roll call) Altitude CRC32 xor ACID
DF5 (56 bit) 00101=2H Surveillance (roll call) IDENT Reply CRC32 xor ACID
DF11 (56 bit) 01011=5H Mode S Only All-Call Reply (Acq. Squitter if II=0) CRC32 xor IRID or 000000
DF16 (112 bit) 10000=8L Long Air to Air ACAS
DF17 (112 bit) 10001=8H ADS-B Extended Squitter CRC88 xor 000000
DF18 (112 bit) 10001=9LH TIS-B CRC88 xor 000000
DF19 (112 bit) 10011=9H ADS-M Military Extended Squitter CRC88 xor 000000
DF20 (112 bit) 10100=AL Comm B Altitude Reply CRC88 xor ACID
DF21 (112 bit) 10101=AH Comm. B IDENT Reply CRC88 xor ACID
DF22 10110=BL Military use only
DF24 11000=CL Comm. D Extended Length Message (ELM)
******/
/***
DF11: DF(5) - CA(3) - AA(24) - PI(24)
DF17: DF(5) - CA(3) - AA(24) - ME(56) - PI(24) extended squitter S.72 3-52
Airborn position squitter 0.4 ... 0.6 sec
Surface position squitter 0.4 ... 0.6 sec oder 4.8 ... 5.2 sec
Identification squitter 4.8 ... 5.2 aber wenn surface-low dann 9.8 ... 10.2 sec
Airborne velocity squitter 0.4 ... 0.6 sec
***/
/**
Beispieldaten:
*8D484395990052B2E80B027D687F; DF17 1000 1101
*8D3C65039990FB9E286404A0043E;
*8D4BAA499945161668800268C26E;
*8D3C662B903D006914A84A707D6A;
*A028023C2010C231595820AA9001; DF20 1010 0000
**/
//ermittelt CRC der Daten in adsb[]
void adsb_CRC(void)
{
if (adsb_DF() < 16) adsb_CRC_56; // CRC32
else adsb_CRC_112; // CRC88
}
// input 11 Byte = 88 Bit Daten
// output 3 Byte = 24 Bit Daten
void adsb_CRC_112(void)
{
DWORD poly; //32 bit
char i;
DWORD data, data1, data2;
//poly = 0xFFFA0480;
poly.byte3 = 0xFF;
poly.byte2 = 0xFA;
poly.byte1 = 0x04;
poly.byte0 = 0x80;
data.byte3 = adsb[0];
data.byte2 = adsb[1];
data.byte1 = adsb[2];
data.byte0 = adsb[3];
data1.byte3 = adsb[4];
data1.byte2 = adsb[5];
data1.byte1 = adsb[6];
data1.byte0 = adsb[7];
data2.byte3 = adsb[8];
data2.byte2 = adsb[9];
data2.byte1 = adsb[10];
data2.byte0 = 0;
for (i=1; i<89; i++)
{
if (data.byte3 & 0x80) data._dword ^= poly._dword; // xor
data._dword <<= 1;
if (data1.byte3 & 0x80) data._dword |= 1; // or
data1._dword <<= 1;
if (data2.byte3 & 0x80) data1._dword |= 1; // or
data2._dword <<= 1;
}
CRC.byte2 = data.byte3;
CRC.byte1 = data.byte2;
CRC.byte0 = data.byte1;
/****
function parity112bit(st:string):string;
const poly:cardinal=FFFA0480;
var i,data,data1,data2:cardinal;
begin
result:=000000;
if length(st)<>11 then exit;
data :=(ord(st[1])shl 24) OR (ord (st[ 2])shl 16) OR (ord (st[ 3])shl 8) or (ord(st[4]));
data1:=(ord(st[5])shl 24) OR (ord (st[ 6])shl 16) OR (ord (st[ 7])shl 8) or (ord(st[8]));
data2:=(ord(st[9])shl 24) OR (ord (st[10])shl 16) OR (ord (st[11])shl 8);
for i:=1 to 88 do
begin
if (data and 80000000) <> 0 then data:=data xor poly;
data:=data shl 1;
if (data1 and 80000000) <>0 then data:=data or 1;
data1:=data1 shl 1;
if (data2 and 80000000) <>0 then data1:=data1 or 1;
data2:=data2 shl 1;
end;
result:=copy(inttohex(data,8),1,6);
end;
*****/
}
// input 4 Byte = 32 Bit Daten
// output 3 Byte = 24 Bit Daten
void adsb_CRC_56(void)
{
DWORD poly; //32 bit
char i;
DWORD data;
//poly = 0xFFFA0480;
poly.byte3 = 0xFF;
poly.byte2 = 0xFA;
poly.byte1 = 0x04;
poly.byte0 = 0x80;
data.byte3 = adsb[0];
data.byte2 = adsb[1];
data.byte1 = adsb[2];
data.byte0 = adsb[3];
for (i=1; i<33; i++)
{
if (data.byte3 & 0x80) data._dword ^= poly._dword; // xor
data._dword <<= 1;
}
CRC.byte2 = data.byte3;
CRC.byte1 = data.byte2;
CRC.byte0 = data.byte1;
/***********
function parity56bit(st:string):string;
const poly:cardinal=FFFA0480;
var i,data,data1:cardinal;
begin
result:=000000;
if length(st)<>4 then exit;
data:=(ord(st[1])shl 24) OR (ord (st[2])shl 16) OR (ord (st[3])shl 8) or (ord(st[4]));
for i:=1 to 32 do
begin
if (data and 80000000) <> 0 then data:=data xor poly;
data:=data shl 1;
end;
result:=copy(inttohex(data,8),1,6);
end;
*****/
}
// schreibt in den usb-Sendepuffer einen Strin entsprechend adsb[]
void adsb_StringOut(void)
{
send_RAW = true;
dataPacket._byte[0] = '*';
dataPacket._byte[1] = hex2asc_H(adsb[0]);
dataPacket._byte[2] = hex2asc_L(adsb[0]);
dataPacket._byte[3] = hex2asc_H(adsb[1]);
dataPacket._byte[4] = hex2asc_L(adsb[1]);
dataPacket._byte[5] = hex2asc_H(adsb[2]);
dataPacket._byte[6] = hex2asc_L(adsb[2]);
dataPacket._byte[7] = hex2asc_H(adsb[3]);
dataPacket._byte[8] = hex2asc_L(adsb[3]);
dataPacket._byte[9] = hex2asc_H(adsb[4]);
dataPacket._byte[10] = hex2asc_L(adsb[4]);
dataPacket._byte[11] = hex2asc_H(adsb[5]);
dataPacket._byte[12] = hex2asc_L(adsb[5]);
dataPacket._byte[13] = hex2asc_H(adsb[6]);
dataPacket._byte[14] = hex2asc_L(adsb[6]);
if (adsb_DF() < 16)
{
dataPacket._byte[15] = ';';
dataPacket._byte[16] = 0x0A;
dataPacket._byte[17] = 0x0D;
counter=18;
}
else
{
dataPacket._byte[15] = hex2asc_H(adsb[7]);
dataPacket._byte[16] = hex2asc_L(adsb[7]);
dataPacket._byte[17] = hex2asc_H(adsb[8]);
dataPacket._byte[18] = hex2asc_L(adsb[8]);
dataPacket._byte[19] = hex2asc_H(adsb[9]);
dataPacket._byte[20] = hex2asc_L(adsb[9]);
dataPacket._byte[21] = hex2asc_H(adsb[10]);
dataPacket._byte[22] = hex2asc_L(adsb[10]);
dataPacket._byte[23] = hex2asc_H(adsb[11]);
dataPacket._byte[24] = hex2asc_L(adsb[11]);
dataPacket._byte[25] = hex2asc_H(adsb[12]);
dataPacket._byte[26] = hex2asc_L(adsb[12]);
dataPacket._byte[27] = hex2asc_H(adsb[13]);
dataPacket._byte[28] = hex2asc_L(adsb[13]);
dataPacket._byte[29] = ';';
dataPacket._byte[30] = 0x0A;
dataPacket._byte[31] = 0x0D;
counter=32;
}
}
byte hex2asc_H(byte B)
{
return hex2asc_L(B>>4);
}
byte hex2asc_L(byte B)
{
B &= 0x0F;
if (B<10) return B+'0';
else return B-10+'A';
}
/** EOF adsbin.c ***************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -