📄 rs485.c
字号:
/*********************************************************************************************************
** 函数名称: Back_Goods
** 功能描述: 确定设定的礼品参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Back_Goods( unsigned int data_address )
{
unsigned char i, timers = 3; //buff[Goods*2+3],
unsigned int address;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI==0); //等待发送完毕
TI=0;
REN=1; //返回到接收状态
CS485=1;
RI = 0;
while( RI == 0 );
RI = 0;
if(SBUF == 0xaa)
{
address = data_address; //数据的起始地址
buff[0] = 0x00;
buff[1] = Goods*2 ;
watch_dogs(); //喂狗
for(i=0; i< Goods*2; i++) //读出数据
buff[i+2] = byte_read( address++ );
buff[ Goods*2 + 2 ] = 0x00;
for(i=0; i<Goods*2; i++)
buff[ Goods*2+2 ] += buff[i+2]; //累加和
watch_dogs(); //喂狗
LOOP4:
REN = 0;
CS485 = 0; //发送状态
for(i=0; i< Goods*2+3; i++)
{
SBUF = buff[i];
while(TI==0);
TI=0;
watch_dogs(); //喂狗
}
REN = 1; //返回到接收状态
CS485 = 1;
watch_dogs(); //喂狗
while(RI == 0);
RI = 0;
watch_dogs(); //喂狗
if( SBUF != 0xaa)
{
timers --;
if(timers )
goto LOOP4;
else
{
REN=1; //返回到接收状态
CS485=1;
}
}
}
}
/*********************************************************************************************************
** 函数名称: Back_machine
** 功能描述: 确定设定的机器参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Back_machine( unsigned int data_address )
{
unsigned char i, timers = 3;//buff[24],
unsigned int address ;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI==0); //等待发送完毕
TI=0;
REN=1; //返回到接收状态
CS485=1;
RI = 0;
while( RI == 0 );
RI = 0;
if(SBUF == 0xaa)
{
address = data_address; //数据的起始地址
buff[0] = 0x00;
buff[1] = 21 ;
watch_dogs(); //喂狗
for(i=0; i< 21; i++) //读出数据
buff[i+2] = byte_read( address++ );
buff[ 23 ] = 0x00;
for(i=0; i< 21; i++)
buff[ 23 ] += buff[i+2]; //累加和
watch_dogs(); //喂狗
LOOP5:
REN = 0;
CS485 = 0; //发送状态
for(i=0; i<24; i++)
{
SBUF = buff[i];
while(TI==0);
TI=0;
watch_dogs(); //喂狗
}
REN = 1; //返回到接收状态
CS485 = 1;
watch_dogs(); //喂狗
while(RI == 0);
RI = 0;
watch_dogs(); //喂狗
if( SBUF != 0xaa)
{
timers --;
if(timers )
goto LOOP5;
else
{
REN=1; //返回到接收状态
CS485=1;
}
}
}
}
/*********************************************************************************************************
** 函数名称: Back_all_num
** 功能描述: 回收礼品机的所有参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Back_all_num( unsigned int data_address )
{
unsigned char i, timers = 3; //buff[30],
unsigned int address ;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI==0); //等待发送完毕
TI=0;
REN=1; //返回到接收状态
CS485=1;
RI = 0;
while( RI == 0 );
RI = 0;
if( SBUF == 0xaa ) //接收准备好信号
{
address = data_address; //数据的起始地址
buff[0] = 0x00;
buff[1] = 27 ;
watch_dogs(); //喂狗
for(i=0; i< 27; i++) //读出数据
{
buff[i+2] = byte_read( address++ );
watch_dogs();
}
buff[ 29 ] = 0x00;
for(i=0; i< 27; i++)
buff[ 29 ] += buff[i+2]; //累加和
watch_dogs(); //喂狗
LOOP6:
REN = 0;
CS485 = 0; //发送状态
for(i=0; i<30; i++)
{
SBUF = buff[i];
while(TI==0);
TI=0;
watch_dogs(); //喂狗
}
REN = 1; //返回到接收状态
CS485 = 1;
watch_dogs(); //喂狗
while(RI == 0);
RI = 0;
watch_dogs(); //喂狗
if( SBUF != 0xaa)
{
timers --;
if(timers )
goto LOOP6;
else
{
REN=1; //返回到接收状态
CS485=1;
}
}
}
}
/*********************************************************************************************************
** 函数名称: Back_all_num
** 功能描述: 回收礼品机的礼品参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Back_all_Goods( unsigned int data_address )
{
unsigned char i, timers = 3;//buff[ 51 ],
unsigned int address ;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI==0); //等待发送完毕
TI=0;
REN=1; //返回到接收状态
CS485=1;
RI = 0;
while( RI == 0 );
RI = 0;
if( SBUF == 0xaa ) //接收准备好信号
{
address = data_address; //数据的起始地址
buff[0] = 0x00;
buff[1] = 48 ;
watch_dogs(); //喂狗
for(i=0; i< 48; i++) //读出数据
{
buff[i+2] = byte_read( address++ );
watch_dogs();
}
buff[ 50 ] = 0x00;
for(i=0; i< 48; i++)
buff[ 50 ] += buff[i+2]; //累加和
watch_dogs(); //喂狗
LOOP7:
REN = 0;
CS485 = 0; //发送状态
for(i=0; i<51; i++)
{
SBUF = buff[i];
while(TI==0);
TI=0;
watch_dogs(); //喂狗
}
REN = 1; //返回到接收状态
CS485 = 1;
watch_dogs(); //喂狗
while(RI == 0);
RI = 0;
watch_dogs(); //喂狗
if( SBUF != 0xaa)
{
timers --;
if(timers )
goto LOOP7;
else
{
REN=1; //返回到接收状态
CS485=1;
}
}
}
}
/*********************************************************************************************************
** 函数名称: Set_all_num
** 功能描述: 设定礼品机的所有参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Set_all_num( unsigned int data_address )
{
unsigned char i,timers = 3;//buff[40],
unsigned int Data_Long = 0;
unsigned int address ;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI == 0); //等待发送完毕
TI = 0;
watch_dogs(); //喂狗
LOOP7:
CS485 = 1; //接收状态
REN = 1;
RI = 0;
//----------------------得到要接收数据的个数
watch_dogs(); //喂狗
while(RI == 0);
buff[ 0 ] = SBUF ;
RI = 0;
watch_dogs(); //喂狗
while(RI == 0);
buff[ 1 ] = SBUF ;
RI = 0;
watch_dogs(); //喂狗
Data_Long = buff[0]*256 +buff[1];
for(i=0; i<=Data_Long; i++)
{
while(RI==0);
buff[i+2] = SBUF;
RI=0;
watch_dogs(); //喂狗
}
//------------------------数据验证
buff[Data_Long+3] = 0x00;
for(i=0; i< Data_Long; i++)
buff[Data_Long+3] += buff[i+2];
watch_dogs(); //喂狗
if(buff[Data_Long+3] == buff[ Data_Long+2 ])
{
REN = 0; //数据接收正确
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI == 0); //等待发送完毕
TI = 0;
//-------------------保存数据
watch_dogs(); //喂狗
address = data_address;
for(i=0; i<Data_Long; i++)
{
byte_write(address,buff[i+2]);
address++;
}
watch_dogs(); //喂狗
byte_write(0x00,0xaa); //数据写入,写标志位
REN = 1; //回到接收状态
CS485 = 1;
}
else
{
REN = 0; //发送数据重发信号
CS485 = 0;
watch_dogs(); //喂狗
SBUF = 0xFB; //发送应答信号,数据重发
while(TI == 0); //等待发送完毕
TI = 0;
timers -- ;
if( timers )
goto LOOP7;
REN = 1; //回到接收状态
CS485 = 1;
}
}
/*********************************************************************************************************
** 函数名称: Read_all_num
** 功能描述: 确定设定的所有参数
** 输 入 : 无
** 输 出 : 无
**********************************************************************************************************/
void Read_all_num( unsigned int data_address )
{
unsigned char i, timers = 3; //buff[36],
unsigned int address ;
REN = 0;
CS485 = 0;
SBUF = 0xaa; //发送应答信号
while(TI==0); //等待发送完毕
TI=0;
REN=1; //返回到接收状态
CS485=1;
RI = 0;
while( RI == 0 );
RI = 0;
if( SBUF == 0xaa ) //接收准备好信号
{
address = data_address; //数据的起始地址
buff[0] = 0x00;
buff[1] = 33 ;
watch_dogs(); //喂狗
for(i=0; i< 33; i++) //读出数据
{
buff[i+2] = byte_read( address++ );
watch_dogs();
}
buff[ 35 ] = 0x00;
for(i=0; i< 33; i++)
buff[ 35 ] += buff[i+2]; //累加和
watch_dogs(); //喂狗
LOOP8:
REN = 0;
CS485 = 0; //发送状态
for(i=0; i<36; i++)
{
SBUF = buff[i];
while(TI==0);
TI=0;
watch_dogs(); //喂狗
}
REN = 1; //返回到接收状态
CS485 = 1;
watch_dogs(); //喂狗
while(RI == 0);
RI = 0;
watch_dogs(); //喂狗
if( SBUF != 0xaa)
{
timers --;
if( timers )
goto LOOP8;
else
{
REN=1; //返回到接收状态
CS485=1;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -