⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_response.c

📁 dsp320lf2407上的相关程序文件
💻 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 + -