📄 sum.c
字号:
#include "comm.h"
//***********************************************************************
//功能:ASCII码转换函数
//参数:
a -- 需要转换的数据
//返回值:无
//************************************************************************
unsigned int ASCII(a)
{
unsigned int m,z;
m=a;
if(m<10)
z=m+0x30;
else
z=m+0x41-0xa;
return z;
}
//***********************************************************************
//功能 :接收发送处理程序
//作者 :LIHJ
//创建日期 :04-7-2
//版本 :V1.0
//修改日期 :
//************************************************************************
unsigned int SendData(unsigned int addr,unsigned int num,unsigned char *readdata)
{
unsigned char send[] = { 02,0x30,0x30,0x30,0x30,0x30,0x30,0x30,03,0x30,0x30};
unsigned char Rxdbuf[20];
unsigned char Txdbuf[11];
unsigned int sum[3];
unsigned int uSum,i,j,uTmp1;
int Reclength,number;
addr = addr/10 + 0x80;
uTmp1 = addr & 0x0f;
send[5] = ASCII(uTmp1);
uTmp1 = (addr>>4)& 0x0f;
send[4] = ASCII(uTmp1);
uTmp1 = (addr>>8)& 0x0f;
send[3] = ASCII(uTmp1);
uTmp1 = (addr>>12)& 0x0f;
send[2] = ASCII(uTmp1);
if(num%8==0)
{
number = num/8;
}
else
{
number= num/8 + 1;
}
uTmp1 = number & 0x0f;
send[7] = ASCII(uTmp1);
uTmp1 = (number>>4)& 0x0f;
send[6] = ASCII(uTmp1);
uSum=0;
for(i=1;i<9;i++)
{
uSum+=send[i];
}
uTmp1=uSum&0x0f;
send[10] = ASCII(uTmp1);
uTmp1=(uSum>>4)&0x0f;
send[9] = ASCII(uTmp1);
for(i=0;i<11;i++)
{
Txdbuf[i]=send[i];
}
SendProcess(Txbuffer,11); //调用发送过程函数,发送长度为11个字节
}
//***********************************************************************
//功能 :接收数据处理程序
//作者 :LIHJ
//创建日期 :04-7-2
//版本 :V1.0
//修改日期 :
//************************************************************************
void ReceDataProcess()
{
sum[0] = 0;
sum[1] = 0;
sum[2] = 0;
for(i=1;i<8;i++)
{
sum[0]+=Rxdbuf[i];
}
uTmp1 = sum[0] & 0x000f;
sum[1] = ASCII(uTmp1);
uTmp1 = (sum[0]>>4) & 0x000f;
sum[2] = ASCII(uTmp1);
if((sum[1]==Rxdbuf[8])&&(sum[2]==Rxdbuf[9]))
{
RxCount+=1; /*收对计数加一*/
for(j=num/4;j>0;j=j-2)
{
data[2]=0;
if(Rxdbuf[j]>0x40)
data[0] = Rxdbuf[j]-0x41+0xa;
else
data[0] = Rxdbuf[j]-0x30;
if(Rxdbuf[j-1]>0x40)
data[1] = Rxdbuf[j-1]-0x41+0xa;
else
data[1] = Rxdbuf[j-1]-0x30;
data[2]= data[1];
data[2]=data[2]<<4;
data[2]=data[2]|data[0];
for( i=0 ; i< 8 ; i++ )
{
if((data[2]&(1<<i))==0)
readdata[i+8*(num/4-j)] = 0;
else
readdata[i+8*(num/4-j)] = 1;
}
}
}
else
{
ComPlcCount1+=1; /*接收错误计数加一*/
retval=2; //和校验错误
}
//retval=data[2];
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -