📄 mod_response.c
字号:
#include "f2407_c.h"
struct datatype
{
unsigned int data_add_h,data_add_l;
unsigned int data_buf[100];
unsigned int data_byte_num;
}res_data;
extern disable();
extern enable();
extern unsigned int mod_fun;
extern unsigned int lcddata[0x250];
extern unsigned int start_addr_h,start_addr_l,n_data_h,n_data_l;
unsigned int res_buf[20];
unsigned int i3=0,i6=0,i1=0,i5=0;
void reset_response(void)
{
unsigned int i;
for(i=0;i<20;i++)res_buf[i]=0;
mod_fun=0;
}
void uart_send(void)
{
static int i=0;
switch(mod_fun)
{
case 3:
{
if(i>=i3){i=0;reset_response();return;}
break;
}
case 6:
{
if(i>=i6){i=0;reset_response();return;}
break;
}
case 5:
{
if(i>=i5){i=0;reset_response();return;}
break;
}
case 1:
{
if(i>=i1){i=0;reset_response();return;}
break;
}
default:return;
}
*SCITXBUF=res_buf[i++];
*IFR=0x0010;
enable();
}
void mod_res(void)
{
unsigned int i,crc_temp,j;
delay(1000);
rs485_send_rd();
switch(mod_fun)
{
case 3: /*response to Read Holding Registers*/
{
res_buf[0]=0x01;
res_buf[1]=0x03;
res_buf[2]=res_data.data_byte_num;
for(i=0;i<res_data.data_byte_num;i++)
res_buf[3+i]=res_data.data_buf[i];
crc_temp=CRC16(res_buf,3+i);
res_buf[3+i]=crc_temp/0x0100;
res_buf[4+i]=crc_temp%0x0100;
i3=5+i;
/*
for(j=0;j<5+i;j++)
{
*SCITXBUF=res_buf[j];
while((*SCICTL2&0x0080)==0);
}
reset_response();
*/
break;
}
case 6:
{
res_buf[0]=0x01;
res_buf[1]=0x06;
res_buf[2]=res_data.data_add_h;
res_buf[3]=res_data.data_add_l;
res_buf[4]=res_data.data_buf[0];
res_buf[5]=res_data.data_buf[1];
crc_temp=CRC16(res_buf,6);
res_buf[6]=crc_temp/0x0100;
res_buf[7]=crc_temp%0x0100;
i6=8;
/*
for(j=0;j<8;j++)
{
*SCITXBUF=res_buf[j];
while((*SCICTL2&0x0080)==0);
}
reset_response();
*/
break;
}
case 1:
{
res_buf[0]=0x01;
res_buf[1]=0x01;
res_buf[2]=res_data.data_byte_num;
for(i=0;i<res_data.data_byte_num;i++)
res_buf[3+i]=res_data.data_buf[i];
crc_temp=CRC16(res_buf,3+i);
res_buf[3+i]=crc_temp/0x0100;
res_buf[4+i]=crc_temp%0x0100;
i1=5+i;
/*
for(j=0;j<5+i;j++)
{
*SCITXBUF=res_buf[j];
while((*SCICTL2&0x0080)==0);
}
reset_response();
*/
break;
}
case 5:
{
res_buf[0]=0x01;
res_buf[1]=0x05;
res_buf[2]=res_data.data_add_h;
res_buf[3]=res_data.data_add_l;
res_buf[4]=res_data.data_buf[0];
res_buf[5]=res_data.data_buf[1];
crc_temp=CRC16(res_buf,6);
res_buf[6]=crc_temp/0x0100;
res_buf[7]=crc_temp%0x0100;
i5=8;
/*
for(j=0;j<8;j++)
{
*SCITXBUF=res_buf[j];
while((*SCICTL2&0x0080)==0);
}
reset_response();
*/
break;
}
default:reset_response();
}
rs485_rec_rd();
}
/**********************************************************************/
/**********************************************************************/
/**********************************************************************/
extern void transaction(void)
{
unsigned int i,j,temp;
switch(mod_fun)
{
case 3:
{
res_data.data_byte_num=2*(n_data_h*0x0100+n_data_l);
for(i=0,j=0;j<(n_data_h*0x0100+n_data_l);i+=2,j++)
{
temp=*(start_addr_h*0x0100+start_addr_l+lcddata+j);
res_data.data_buf[i]=temp/0x0100;
res_data.data_buf[i+1]=temp%0x0100;
}
break;
}
case 6:
{
res_data.data_add_h=start_addr_h;
res_data.data_add_l=start_addr_l;
*(start_addr_h*0x0100+start_addr_l+lcddata)=n_data_h*0x0100+n_data_l;
res_data.data_buf[0]=n_data_h;
res_data.data_buf[1]=n_data_l;
}
break;
default:return;
}
mod_res();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -