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

📄 serial

📁 采集端程序
💻
字号:
#include <AT89X52.H>
#define UCHAR unsigned char
#define RLEN  4 
UCHAR data r_buf[RLEN];             //串行接收缓存区的大小(非循环)
UCHAR r_in,check;     //定义缓冲区的队列指针,校验指针
bit read_flag=0;      //定义接收区取数标志位
bit rbuf_flag=0;      //定义接收数据是否放入缓存区标志   
void serial(void) interrupt 4
{
 UCHAR ch;
    RI=0;
    ch=SBUF;
   if(~rbuf_flag&ch==0x55)
     { 
      rbuf_flag=1;
      r_in=0;
     }
   if(rbuf_flag)
      {
       r_buf[r_in]=ch;
       r_in=r_in++;
       if(r_in==RLEN)
         {
          rbuf_flag=0;
          read_flag=1;
          r_in=0;
         }
      } 
}
/******* 接收数据包有效函数*********/
 bit valid(void)
{ UCHAR check=0x55;
  UCHAR i;
  if(read_flag&&r_buf[2]==slave)
    {
     for(i=0;i<3;i++)
        {
         check|=r_buf[i];
        }
     if(check==r_buf[3])
       {return(1);
       }
  else return(0);
}
/*********数据打包发送程序*******/
viod packet(UCHAR c)
{UCHAR data *p,i,check;
 check=0x55 | c | slave;
 if(c==0xD8)
   {
    p=(&collectdata);
   }
 if(c==0x49)
 runDog();
 ctrl485=0;                    //置位485总线处于发送
 for(i=0;i<1000;i++);           //延时一会
 SBUF=0xAA;
     while(TI==0);
     TI=0;
 SBUF=c;
     while(TI==0);
     TI=0;
 SBUF=slave;
     while(TI==0);
     TI=0;
if(c==0xD8)
   {
    p=(&collectdata);
   for(i=0;i<9;i++)
      {SBUF=*p;
       check|=*p;
       while(T==0);
       T=0;
      }
if(c==0x49){}
 SBUF=check;
 while(T==0);
       T=0;
 for(i=0;i<1000;i++);      //延时一会
ctrl485=1;                 //置位485为接收状态
}
/********接受数据包处理函数*****/
viod Process(viod)
{ UCHAR data c;
  UCHAR xdata *p;
 if(valid())
   {
    swith(r_bluf[0])
         {case 01:{c=0xD8;
                   packet(c);
                  }
                  break;
          case 02:{c=r_bluf[2];      //c为开关位
                   runDog();        //喂狗
                   while(valid());   //等待接收命令为03的数据包
                   if(r_bluf[0]==0x03)
                     {p=0x1000;
                      /*对开关位的操作*/
                      packet(c);
                   }
		   break;
	  default: break;
          }
                        


 

⌨️ 快捷键说明

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