📄 elteck_dc.c
字号:
#define DC_GLOBALS
#include <variable.H>
#ifdef ELTECK_DC
unsigned char HexToAscii(unsigned char mHex)
{
mHex &= 0x0F;
if ( mHex < 0x0A ) return(mHex + 0x30);
return ( (mHex & 0x0f) + 0x37);
}
void DcProcess(void)
{
unsigned char data tmp;
struct Serial_rcv xdata *Com;
unsigned char xdata mData[13];
unsigned char xdata *mptr;
unsigned char data i;
unsigned char data mBCC;
static unsigned char data mPos;
unsigned int data mAddr;
unsigned int code PollAddr[] = { 0, 0x08, 0x20, 0x28, 0x30, 0x38, 0x40,
0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0,
0xb8, 0xc0, 0xc8, 0xd0, 0xd8,
0x100, 0x110, 0x120, 0x130,
0x140, 0x180, 0x190, 0x1b0, 0x1c0, 0x1d0, 0x200 };
mPos = (mPos + 1) % sizeof(PollAddr);
mAddr = PollAddr[mPos];
mptr = mData;
*(mptr++) = 0x02; // STX
*(mptr++) = 0x31; // Id_H
*(mptr++) = 0x34; // Id_L: PRS system is defined as 14H
*(mptr++) = 0x31; // Stamp: is 31H
*(mptr++) = 0x32; // Message Type: for COMLI message type 2 is 32H
*(mptr++) = 0x34; // Address_H
*(mptr++) = HexToAscii( mAddr /256 );
*(mptr++) = HexToAscii( (mAddr&0xff) /16 );
*(mptr++) = HexToAscii( mAddr&0x0f ); // Address _L
*(mptr++) = 0x30; // Len_H
*(mptr++) = 0x32; // Len_L: Bytes to read fro address
*(mptr++) = 0x03; // ETX
mBCC = 0;
for (i = 1; i < 12; i++) mBCC ^= mData[i];
*(mptr) = mBCC;
if (Send_To_SndBuffer(ELTECK_DC, 13, mData) ) SendStart(ELTECK_DC);
Com = Rcv + ELTECK_DC;
while ( Com->Tail != Com->Head ) {
tmp=Com->mData[Com->Head++];
Com->Head=Com->Head % LEN_RCV;
if (tmp == 0x02) {
Com->Start = 1; // save first byte and byte-position;
Com->Buff[1] = 0x02;
Com->pos = 2;
continue;
}
if (tmp == 0x03) {
Com->Buff[Com->pos] = 0x03;
Com->Buff[0] = Com->pos;
memcpy(DcBuff,Com->Buff, Com->pos + 1);
Com->Start=0;
}
if ( Com->pos >100 ) Com->Start=0;
Com->Buff[Com->pos++]=tmp;
continue;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -