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

📄 通信.c

📁 温度采集显示与PID控制
💻 C
字号:
#include"w77e58.h"


#define uchar unsigned char
#define uint unsigned int

//通信函数
//*************************************//
 uchar tongxin_rxd();//接收下传命令
 void tongxin_txd(bit ewu);
 sbit sclk=P1^0;
void tongxin_txdr();
//**************************************//

extern void timer2(uint r,uchar tiner);//发射功率载入
extern void qdwer();//启动发射采集  
extern void qdtime2();//启动time2
extern void stoptime2();//停止time2

extern uchar data accd;
extern uchar data bccd;
extern uchar data caijisendud;//实际使用采集深度缓存
extern uchar xdata suju[175];//处理好数据
extern uchar xdata sujua[175];//处理好数据
extern bit er;
extern int sukh;
extern int suk;
extern uchar data plsxe;// 锁相环    0=无,0x01=有   
extern uchar data ram;//w24257  0=无,0x01=有 
extern uchar data fasepl;//发射频率缓存
extern uchar data fasegl;//发射功率缓存
extern uchar data fasekg;//发射开关00-01
extern uchar data fstde;//发射探头 0=无,0x01=有
extern uchar data caijisendu;//采集深度缓存
extern uchar data zaibao;//消除杂波
extern uchar data e2prom;//24c02 0=无,0x01=有
extern uchar data stc;//stc等级1-8级
extern uchar data zenyi;//增益1-9级
extern uchar data zenyia;//实际增益值
extern uint data haidisendu;//海底深度值
extern uchar data sanwdbz;//上传有无温度传感器0=无,0x01=有    
extern int data wd;//温度缓存
extern uchar data ganse;
extern int data plxz;
extern uchar data kod;
extern uint vnf;
 uchar code start[6]="$START";
 uchar code end[3]="END";
// extern uint data ram_error;
extern void clp_dog();

 uchar tongxin_rxd()//接收下传命令
 {
   bit rt;//接收正确标志
   uchar sup;
   union{
         uchar s[2];
         int f;
         }wdc;
   REN=1;
   timer2(12,160);//设置出错时间
   rt=0;
   while(!rt)
     {
       while(!RI);
          sup=SBUF;
          RI=0;
          
       if(sup=='A')
           rt=1;
       }
    
    qdtime2();
    clp_dog();
     while(!RI)
     {
      if(er)//超时处理
         return(0);
      }
     sup=SBUF;//命令
     RI=0;
     while(!RI)
       {
        if(er)
          return(0);
       }
     wdc.s[0]=SBUF; //参数
     RI=0;
      while(!RI)
       {
        if(er)
          return(0);
       }
     wdc.s[1]=SBUF; //参数
     RI=0;
     
     suk=wdc.f;
     stoptime2();//停止time2;
     return(sup);
}    


void tongxin_txd(bit ewu)//上传数据
 {
          union{
         uchar s[2];
         uint f;
          }wedc;
   
   uchar i;
   uchar u;
   REN=0;
   TI=0;
  clp_dog();
   for(i=0;i<=5;i++)//发送start 字符
     {
     SBUF=start[i];
     while(!TI);
     TI=0;
      }
   if(ewu)
   	{
    SBUF=0x01;
    while(!TI);
    TI=0;
   	}
   else{
    SBUF=0x00;
    while(!TI);
    TI=0;
   	}
   clp_dog();
//**********************//
//   CPU硬件检测数据
   u=(plsxe<<4)|(ram<<3)|(fstde<<2)|(e2prom<<1)|sanwdbz;
   SBUF=u&0x1f;//温度传感器ok/no//24c02 ok/no//发射探头ok/no//内存ok/no//锁相环ok/no
   while(!TI);
   TI=0;
 //   wedc.f=ram_error;
 //    SBUF=wedc.s[0];
//   while(!TI);
  // TI=0;
//   SBUF=wedc.s[1];
//  while(!TI);
//   TI=0;
   SBUF=accd;//扫描确定50k上下频率
     while(!TI);
   TI=0;
   SBUF=bccd;//扫描确定200k上下频率
     while(!TI);
   TI=0;

//************************//
//  设置参数回送
   SBUF=fasepl;//发射频率
   while(!TI);
   TI=0;
    SBUF=fasegl;//功率
   while(!TI);
   TI=0;
    SBUF=fasekg;//开关
   while(!TI);
   TI=0;
    SBUF=caijisendu;//深度
   while(!TI);
   TI=0;
    SBUF=zaibao;//杂波
   while(!TI);
   TI=0;
    SBUF=stc;//stc
   while(!TI);
   TI=0;
    SBUF=zenyi;//增益 
   while(!TI);
   TI=0;
    SBUF=ganse;//干涉
   while(!TI);
   TI=0;
   wedc.f=plxz;//频率修正
    SBUF=wedc.s[0];
   while(!TI);
   TI=0;
    SBUF=wedc.s[1];
   while(!TI);
   TI=0;
    SBUF=kod;//扩大
   while(!TI);
   TI=0;
   clp_dog();
//*************************//
// 实际使用值 //            
   SBUF=caijisendud;//采集深度
   while(!TI);
   TI=0;
   SBUF=zenyia;//使用增益值 
   while(!TI);
   TI=0;
   wedc.f=haidisendu;//海底深度
   SBUF=wedc.s[0];
   while(!TI);
   TI=0;
   SBUF=wedc.s[1];
   while(!TI);
   TI=0;
   wedc.f=wd;
   
   SBUF=wedc.s[1];//温度高字节
   while(!TI);
   TI=0;
   SBUF=wedc.s[0];//温度低字节
   while(!TI);
   TI=0;
   clp_dog();
   
//***************************//
    if(ewu)
      {
       wedc.f=vnf;
       SBUF=wedc.s[0];//开始距离高字节
       while(!TI);
       TI=0;
       SBUF=wedc.s[1];//开始距离低字节
       while(!TI);
       TI=0;
       for(i=0;i<=174;i++)//发送数据
          {
          SBUF=sujua[i];//海底扩大数据
          while(!TI);
          TI=0; 
          }
    	}
    else{
    	 wedc.f=sukh;
         SBUF=wedc.s[0];//开始距离高字节
         while(!TI);
         TI=0;
         SBUF=wedc.s[1];//开始距离低字节
         while(!TI);
         TI=0;
         for(i=0;i<=174;i++)//发送数据
           {
           SBUF=suju[i];
           while(!TI);
           TI=0; 
           }
    	}
 //*************************//   
    for(i=0;i<=2;i++)//发送end 字符
       {
     SBUF=end[i];
     while(!TI);
     TI=0;    
       }
    clp_dog();
   }


void tongxin_txdr()
{char i;
 REN=0;
   TI=0;
   for(i=0;i<=5;i++)//发送start 字符
     {
     SBUF=start[i];
     while(!TI);
     TI=0;
      }
   	
   clp_dog();


}







⌨️ 快捷键说明

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