📄 通信.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 + -