⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendtext.c

📁 KEIL C编译 到位监控程序
💻 C
字号:
//报文处理
#include "AT89X51.h"
#include "main.h"
#include <intrins.h>
#include <absacc.h>
#define  uchar unsigned char
#define  uint unsigned int
//
extern bit timerHap;	//定时器到时
//输出数组
extern uchar ACK_BUF[LENMAX];                //Command in length=3 数据(命令) 接收 缓冲区
extern uchar DLE_BUF[DLELENMAX];               //state out length=3  数据(状态) 发送 缓冲区
extern uchar    IN_LENGTH;                   //接收字符个数统计变量
extern uchar CMDIN[LENMAX];                //Command in length=3 数据(命令) 接收 缓冲区
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;
}

//函数加入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);
}

//发送报文//ACK_BUF=响应报文
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);
		   } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -