?? sendtext.c
字號:
//報文處理
#include "AT89X51.h"
#include "main.h"
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
//
extern bit timerHap; //定時器到時
//輸出數(shù)組
extern uchar ACK_BUF[LENMAX]; //Command in length=3 數(shù)據(jù)(命令) 接收 緩沖區(qū)
extern uchar DLE_BUF[DLELENMAX]; //state out length=3 數(shù)據(jù)(狀態(tài)) 發(fā)送 緩沖區(qū)
extern uchar IN_LENGTH; //接收字符個數(shù)統(tǒng)計變量
extern uchar CMDIN[LENMAX]; //Command in length=3 數(shù)據(jù)(命令) 接收 緩沖區(qū)
extern bit RECE_flag; //接收標志位(1=成功接收)
//校驗和
uchar checksum(uchar *ACK_BUF,uchar length)
{
uchar i;
uint sum=0;
for(i=0;i<length;i++)
{
sum=sum+ACK_BUF[i];
}
i=sum%256;
return i;
}
//函數(shù)加入DLE
uchar ADD_DLE_BUF(uchar *ACK_BUF,uchar length)
{
uchar i,j=1;
uchar ACKBUFF[LENMAX];
//
ACKBUFF[0]=length;
//
ACK_BUF[length]=checksum(ACK_BUF,length);
//
for(i=0;i<(length+1);i++)
{ACKBUFF[i+1]=ACK_BUF[i];}
//
for(i=0;i<(length+2);)//
{
if(ACKBUFF[i]==0x02 || ACKBUFF[i]==0x03 || ACKBUFF[i]==0x10)
{
DLE_BUF[j]=0x10;
j=j+1;
DLE_BUF[j]=ACKBUFF[i];
}
else
{ DLE_BUF[j]=ACKBUFF[i]; }
i++;j++;
}
DLE_BUF[0]=STX;
//j=j+1; 不用了
DLE_BUF[j]=ETX;
return (j+1);
}
//發(fā)送報文//ACK_BUF=響應(yīng)報文
void sendtext(uchar *ACK_BUF,uchar length)
{
uchar LastLen;
LastLen=ADD_DLE_BUF(ACK_BUF,length);
send_string_com(DLE_BUF,LastLen);
}
//接收報文處理
BOOL dealrecetext()
{
if(RECE_flag)//一次完整接收了
{
if(CMDIN[1]!=(IN_LENGTH-4))
{ACK_BUF[2]=CE_BADPARAM; return FALSE;}
if( CMDIN[IN_LENGTH-2] != checksum(CMDIN+2,(IN_LENGTH-4)))
{ACK_BUF[2]=CE_CHECKERROR; return FALSE;}
// if( CMDIN[2] < 0x20) //loop
// {ACK_BUF[2]=CE_BADREQUEST; return FALSE;}
return TRUE;
}
}
///////////////////////////////////
void execCommand()
{
if(dealrecetext())
{
switch(CMDIN[2])
{
case 0x80://
REPORT();
break;
case 0x21://
ReadeBox();
break;
case 0x22://
DETECT();
break;
case 0x23://
ONOFF24V();
break;
case 0x24://
CONTROL();
break;
default:
break;
}
}
else //異常情況
{
ACK_BUF[0]=CE_BADPARAM;
ACK_BUF[1]=0x00;
ACK_BUF[3]=0x01;
sendtext(ACK_BUF,4);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -