📄 rs485.c
字号:
m=Rs485_DataAccr(tt&0x0f,m);
m=Rs485_DataAccr(((tt>>4)&0x0f),m);
for(i=1;i<6;i++)
{
{
if(bbptr==180) bbptr=0;
buf2=(*(head+bbptr))/4;
bbptr++;
}
Rs485_Dec(tt,buf2);
m=Rs485_DataAdd(m);
tt=buf2;
}
return m;
}
//***************************************************************
//函数名:uint8 TapPul(uint8 tnum,uint8 num)
//输入:uint8 num
//输出:uint8 num
//功能描述:脉搏播数据打包(demo数据)
//全局变量:
//***************************************************************
uint8 TapPul(uint8 tnum,uint8 num)
{
uint8 *head,pp[180];
uint8 i,m;
uint8 buf2,tt;
head=(uint8 *)(0xc000000+0x3f000+360);
for(i=0;i<90;i++)
pp[i]=*(head+i);
m=num;
if(ppptr==45) ppptr=0;
tt=pp[2*ppptr];
ppptr++;
m=Rs485_DataAccr(tt&0x0f,m);
m=Rs485_DataAccr(((tt>>4)&0x0f),m);
for(i=1;i<6;i++)
{
if(ppptr==45) ppptr=0;
{
buf2=pp[2*ppptr];
ppptr++;
}
Rs485_Dec(tt,buf2);
m=Rs485_DataAdd(m);
tt=buf2;
}
return m;
}
//*****************************************************************
//** 函数名:void Rs485_BagHalfFirst(void)
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:抱文头处理
//** 全局变量:uint8
//*****************************************************************
uint8 Rs485_BagHalfFirst(void)
{
uint8 k;
k=0;
k=ID_SIZE;
return (k&0xf0);
}
//*****************************************************************
//** 函数名:void Rs485_TapNull(void)
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:空数据抱文
//** 全局变量:Null
//*****************************************************************
void Rs485_TapNull(uint8 BagNull[3])
{
uint8 Rs485_Crc;
BagNull[0]=ID_SIZE;
BagNull[1]=1;
Rs485_Crc=1+ID_SIZE;
BagNull[2]=-Rs485_Crc;
}
//*****************************************************************
//** 函数名:void Rs485_TapConf(void)
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:配置抱文
//** 全局变量:Null 暂时没有使用
//*****************************************************************
void Rs485_TapConf(void)
{
uint8 m=0;
uint8 Rs485_Crc;
uint8 BagConf[13];
BagConf[0]=ID_SIZE+1;
BagConf[1]=CONF_SIZE+1;
BagConf[2]=1;
BagConf[3]=0xfe;
BagConf[4]=0x00;
BagConf[5]=0x00;
BagConf[6]=0x00;
BagConf[7]=0x00;
BagConf[8]=0x00;
BagConf[9]=0x00;
BagConf[10]=0x00;
Rs485_Crc=0;
for(m=0;m<11;m++)
{
Rs485_Crc+=BagConf[m];
}
BagConf[11]=0-Rs485_Crc;
BagConf[12]=0;
Rs485_BagAcc(BagConf);
}
//*****************************************************************
//** 函数名:void Rs485_TapHeart()
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:心电波行抱文
//** 全局变量:Null
//*****************************************************************
/*void Rs485_TapHeart(uint8 TapNum)
{
uint8 BagHeart[75];
uint8 *BagStart;
uint8 m,i,Rs485_Crc;
uint8 length=48;
BagHeart[0]=ID_SIZE+2;
BagHeart[2]=TapNum;
// m=TapHeart(TapNum);
Rs485_Crc=0;
for(i=0;i<m;i++)
{
Rs485_Crc+=BagHeart[i];
}
Rs485_Crc-=TapNum;
BagHeart[m]=0-Rs485_Crc;
Rs485_BagAcc(BagHeart);
}*/
//*****************************************************************
//** 函数名:void Rs485_TapOther()
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:其他波形抱文
//** 全局变量:Null
//*****************************************************************
/*void Rs485_TapOther(uint8 TapNum)
{
uint8 BagOther[48];
uint8 *BagStart;
//uint8 *BagEnd;
uint8 m,i,Rs485_Crc;
uint8 length=48;
m=Rs485_BagHalfFirst();
m|=3;
BagOther[0]=m;
BagOther[2]=TapNum;
Rs485_DataOpen(BagStart);
//BagOther[1]=Rs485_BagRar(BagStart,BagEnd,length)+1;
m=3;
while(*BagEnd)
{
BagOther[m]=*BagEnd;
m++;
BagEnd++;
}
Rs485_Crc=0;
for(i=0;i<m;i++)
{
Rs485_Crc+=BagOther[i];
}
Rs485_Crc-=TapNum;
BagOther[m]=0-Rs485_Crc;
BagOther[m+1]=0;
Rs485_BagAcc(BagOther);
}
*/
//*****************************************************************
//** 函数名:void Rs485_TapData()
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:打数据抱文
//** 全局变量:Null
//*****************************************************************
void Rs485_TapData(void)
{
uint8 m=0;
uint8 BagData[16];
uint8 Rs485_Crc;
BagData[0]=ID_SIZE+4;
BagData[1]=DATA_SIZE+1;
BagData[2]=0x80;
BagData[3]=80+10*sin(rand());
BagData[4]=25+5*sin(rand());
BagData[5]=20+10*sin(rand());
BagData[6]=95+5*sin(rand());
BagData[7]=BagData[3];
BagData[8]=38+2*sin(rand());
BagData[9]=38+2*sin(rand());
BagData[10]=120+10*sin(rand());
BagData[11]=80+10*sin(rand());
BagData[12]=BagData[10]-BagData[11];
BagData[13]=0xff;
Rs485_Crc=0;
for(m=0;m<14;m++)
{
Rs485_Crc+=BagData[m];
}
BagData[14]=0-Rs485_Crc;
BagData[15]=0;
Rs485_BagAcc(BagData);
}
//*****************************************************************
//** 函数名:void Rs485_TapSet()
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:打设置抱文
//** 全局变量:Null
//*****************************************************************
void Rs485_TapSet(void)
{
uint8 k;
uint8 BagSet[12];
uint8 Rs485_Crc;
BagSet[0]=ID_SIZE+5;
BagSet[1]=SET_SIZE+1;
for(k=2;k<10;k++)
{
BagSet[k]=50+20*sin(rand());
}
Rs485_Crc=0;
for(k=0;k<10;k++)
{
Rs485_Crc+=BagSet[k];
}
BagSet[10]=0-Rs485_Crc;
Rs485_BagAcc(BagSet);
}
//*****************************************************************
//** 函数名:void Rs485_TapAll()
//** 输 入:
//**
//** 输 出: Null
//** 功能描述:打合并波形抱文(demo数据)
//** 全局变量:Null
//*****************************************************************
void Rs485_TapAll(uint8 TapNum)
{
uint8 m,i,Rs485_Crc;
for(i=1;i<95;i++)
{TapAll[i]=0;}
stateh=statel=1;
TapAll[0]=ID_SIZE+9;
TapAll[2]=TapNum;
m=TapHeart(TapNum);
m=TapBrea(TapNum,m);
TapAll[1]=TapPul(TapNum,m);
Rs485_Crc=0;
for(i=0;i<TapAll[1]+1;i++)
{Rs485_Crc+=TapAll[i];}
TapAll[(TapAll[1]+1)]=-Rs485_Crc;
Rs485_BagAcc(TapAll);
}
//********************************************************************
//函数名:void Rs485_WaitComm(void)
//输入:NULL
//输出:NULL
//功能描述:对中央太通信命令进行处理
//全局变量:Rs485_CommData,Rs485_RxByte,Rs485_State
//********************************************************************
void Rs485_WaitComm(void)
{
uint8 b;
uint8 TapNull[3];
b=Rs485_RxByte;
if(0==(b&0xf0)||(b&0xf0)==ID_SIZE)
{
switch (b&0x0f)
{
case 0 :break;
case 2 :
if(Rs485_State==RS485_Offline) {Rs485_Reset();}
else {
Rs485_DataState();
Rs485_RecToSend();
Rs485_State=RS485_Wait;
Rs485_TxString=&b;
Rs485_TxNum=1;
while(!(rUTRSTAT1 & 0x4));
rINTMSK &= ~BIT_UTXD1;
}
Rs485_Last=Rs485_RxByte;
Rs485_RxByte=0x00;
break;
case 3 :
if(Rs485_State==RS485_Wait)
{
Rs485_DataState();
Rs485_RecToSend();
if(Rs485_Last==0x12&&Rs485_ReSendTime%2==1&&Rs485_ReSendTime<6)
{
Rs485_TxString=Rs485_ReData;
Rs485_TxNum=Rs485_ReData[1]+2;
while(!(rUTRSTAT1 & 0x4));
rINTMSK &= ~BIT_UTXD1;
Rs485_ReSendTime++;
}
else
{
if(Rs485_TxbufNum==Rs485_RxBufNum)
{
Rs485_TapNull(TapNull);
Rs485_TxString=TapNull;
Rs485_TxNum=TapNull[1]+2;
while(!(rUTRSTAT1 & 0x4));
rINTMSK &= ~BIT_UTXD1;
Rs485_ReData[0]=TapNull[0];
Rs485_ReData[1]=TapNull[1];
Rs485_ReData[2]=TapNull[2];
Rs485_ReSendTime=0;
}
else {Rs485_SendOneBag();}
}
Rs485_Last=Rs485_RxByte;
Rs485_RxByte=0x00;
}
else {Rs485_Reset();}
break;
case 4 :
if(Rs485_State==RS485_Wait)
{
Rs485_DataState();
Rs485_RecToSend();
Rs485_ReStart();
Rs485_Last=Rs485_RxByte;
Rs485_RxByte=0x00;
}
else {Rs485_Reset();}
Rs485_RxByte=0x00;
break;
case 5 :Rs485_Rtc();
break;
case 9 :
Rs485_Reset();break;
default :Rs485_Reset();break;
}
}
}
//********************************************************************************
//函数名:void Rs485_CommDataInt(void)
//输入:NULL
//输出:NULL
//功能描述:发送接收缓冲区清0
//全局变量:
//*******************************************************************************
void Rs485_CommDataInt(void)
{
uint8 i,j;
for(i=0;i<Rs485_Buffer_Size;i++)
{Rs485_RxPtr[i]=0;}
for(i=0;i<Rs485_TxBuf_Size;i++)
for(j=0;j<95;j++)
{Rs485_Txbuffer[i][j]=0;}
Rs485_RxByte=0x00;
}
//********************************************************************
//函数名:void Rs485_SendEnable(void)
//输入:NULL
//输出:NULL
//功能描述:使能RS485发送
//全局变量:
//********************************************************************
void Rs485_SendEnable(void)
{
rUMCON1|=1;
}
//********************************************************************
//函数名:void Rs485_SendDisable(void)
//输入:NULL
//输出:NULL
//功能描述:禁止Rs485发送
//全局变量:
//********************************************************************
void Rs485_SendDisable(void)
{
rUMCON1&=0xfe;
}
//********************************************************************
//函数名:void Rs485_RecToSend(void))
//输入:NULL
//输出:NULL
//功能描述:Rs485接受状态转为发送状态
//全局变量:
//********************************************************************
void Rs485_RecToSend(void)
{
while(!(rUTRSTAT1&0x2));
Rs485_SendEnable();
msc_wait(3000);
}
//********************************************************************
//函数名:void Rs485_SendToRec(void)
//输入:NULL
//输出:NULL
//功能描述:Rs485发送状态转为接收状态
//全局变量:
//********************************************************************
void Rs485_SendToRec(void)
{ uint8 m;
m=RdURXH1();
while(!(rUTRSTAT1&0x4));
Rs485_SendDisable();
msc_wait(1000);
}
//********************************************************************
//函数名:void Rs485_Pro(void)
//输入:NULL
//输出:NULL
//功能描述:Rs485通信的一个历程,在住函数中调用(包括打印机的历程)
//全局变量:
//********************************************************************
void Rs485_Pro(void)
{
if(setpara.mode) //发送实时数据的处理
{
if(((saveep>(14+Rs485_Ecgrp2))||(Rs485_Ecgrp2<(saveep+1186)&&Rs485_Ecgrp2>saveep))&&((savepp>(14+Rs485_Pulrp))||(Rs485_Pulrp<(savepp+1186)&&Rs485_Pulrp>savepp))&&((saverp>(7+Rs485_Brearp))||(Rs485_Brearp<(saverp+1193)&&Rs485_Brearp>saverp)))
{ Rs485_TapWave(realnum++);}
if(bagflag==1&&t1mcount==9) {Rs485_RealData();bagflag=0;}
}
else //发送demo的处理
{
if(bagflag==1)
{
if(t1mcount==9)
{Rs485_TapData();}
Rs485_TapAll(t100mscount);
bagflag=0;
}
}
}
//********************************************************************
//函数名:void getin(int8 *quan, uint8 f1,uint8 f2)
//输入:int8 *quan数据串, uint8 f1原频率,uint8 f2现频率
//输出:NULL
//功能描述:插补算法
//全局变量:
//********************************************************************
void getin(int8 *quan, uint8 f1,uint8 f2)
{
uint8 i=0,j=0;
int16 k=0;
if(f2>f1) f2+=10;
k=f1-f2;
if(f1!=f2)
{
for(i=0;i<(f1/10);i++)
{
k=k+f2;
while(k>=f1)
{
k=k-f1;
ppp[j]=*(quan+i)-(k*(*(quan+i)-*(quan+i-1)))/f2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -