main.c

来自「工厂环境污染控制数据采集器」· C语言 代码 · 共 2,994 行 · 第 1/5 页

C
2,994
字号
			{
				IOSET0=(uint32)0x01<<6;
			}
			break;
		case 2:
			if(output_status==0)
			{
				IOCLR0=(uint32)0x01<<7;
			}
			else
			{
				IOSET0=(uint32)0x01<<7;
			}
			break;
		case 3:
			if(output_status==0)
			{
				IOCLR0=(uint32)0x01<<8;
			}
			else
			{
				IOSET0=(uint32)0x01<<8;
			}		
			break;
		case 4:
			if(output_status==0)
			{
				IOCLR0=(uint32)0x01<<9;
			}
			else
			{
				IOSET0=(uint32)0x01<<9;
			}		
			break;
		default:break;
	}
}



#define STC51SS          18   //P1.18
#define H_STC51SS()      IOSET1=(uint32)0x01<<STC51SS
#define L_STC51SS()      IOCLR1=(uint32)0x01<<STC51SS

#define STC51MOSI        30   //P0.30
#define PIN_STC51MOSI()  (IOPIN0&((uint32)0x01<<STC51MOSI))

#define STC51MISO        9  //P2.9  //P0.29
#define H_STC51MISO()      FIO2SET=(uint32)0x01<<STC51MISO
#define L_STC51MISO()      FIO2CLR=(uint32)0x01<<STC51MISO

#define STC51SCK         30   //P1.30
#define H_STC51SCK()      IOSET1=(uint32)0x01<<STC51SCK
#define L_STC51SCK()      IOCLR1=(uint32)0x01<<STC51SCK

#define STC51STATUS      29 //P0.29   //P2.9
//#define PIN_STC51STATUS()  (FIO2PIN&((uint32)0x01<<STC51STATUS))
#define PIN_STC51STATUS()  (IOPIN0&((uint32)0x01<<STC51STATUS))



unsigned char transfer_data(unsigned int dat,unsigned int *dat2)
{
	unsigned int intvar1,intvar2;
	unsigned char i;
		
	L_STC51SS();
	delay(1500);

	intvar1=0;
	intvar2=dat;

	for(i=0;i<16;i++)
	{
	
		//////out a bit
		if((intvar2&0x8000)==0)
		{
			L_STC51MISO();
		}
		else
		{
			H_STC51MISO();
		}
		intvar2<<=1;
		H_STC51SCK();
		delay(50);

		//////in a bit
		intvar1<<=1;
		if(PIN_STC51MOSI()!=0)
		{
			intvar1|=0x0001;
		}
		else
		{
			intvar1&=0xfffe;
		}

		L_STC51SCK();
		delay(50);

	}

	*dat2=intvar1;
	
	H_STC51SS();

	return 1;
}



void UART4_SEND(unsigned char dat)
{
	unsigned int intvar1,intvar2;
	
	intvar1=0x5500;    //有数据需要发出
	intvar1|=dat;
	
	transfer_data(intvar1,&intvar2);
	
	if((intvar2&0xff00)==0x5500)
	{
	  UART4Buffer[UART4Count] = (intvar2&0x00ff);
	  UART4Count++;
	  if ( UART4Count == BUFSIZE )
	  {
		UART4Count = 0;		/* buffer overflow */
	  }
	}
	
}


/////读取串口4收回来的信息
void DUMMY_READ_UART4(void)
{

	unsigned int intvar1,intvar2;
	
	intvar1=0xaa00;   //没有数据要发出
	
	transfer_data(intvar1,&intvar2);
	
	if((intvar2&0xff00)==0x5500)
	{
	  UART4Buffer[UART4Count] = (intvar2&0x00ff);
	  UART4Count++;
	  if ( UART4Count == BUFSIZE )
	  {
		UART4Count = 0;		/* buffer overflow */
	  }
	}

}


unsigned char read_modbus_index1=0;
unsigned char read_modbus_buf[20];
void read_modbus1(void)
{
	unsigned int i;
	unsigned char tmp_buf1[10];

	if(UART4Count>0)
	{
		for(i=0;i<UART4Count;i++)
		{
			if(UART4Buffer[i]==0x01)
			{
				read_modbus_index1=0;
			}
					
			read_modbus_buf[read_modbus_index1]=UART4Buffer[i];
			read_modbus_index1++;
			if(read_modbus_index1>18)read_modbus_index1=0;
						
			if(read_modbus_index1>=9)
			{
				tmp_buf1[0]=read_modbus_buf[4];
				tmp_buf1[1]=read_modbus_buf[3];
				tmp_buf1[2]=read_modbus_buf[6];
				tmp_buf1[3]=read_modbus_buf[5];
				SUN_SHI_LIU_LIANG=convert_char_to_double(tmp_buf1);
			}

		
		
		}	
	
		UART4Count=0;
	
			//tmp_buf1[0]=UART0Buffer[0];
			//set_uart0_to_rx_status();
			//UARTSend(0,tmp_buf1,1);
			//set_uart0_to_tx_status();
	}

}



void init_io_port(void)
{

 	FIO2DIR|=((uint32)0x01<<BEEP_CTRL);
	
	IODIR0|=((uint32)0x01<<LED18)|((uint32)0x01<<LED23)|((uint32)0x01<<6)|((uint32)0x01<<7)|
			((uint32)0x01<<8)|((uint32)0x01<<9)|((uint32)0x01<<17);
	
 	IODIR1|=((uint32)0x01<<TLV2556_CLK)|((uint32)0x01<<TLV2556_DIN)|((uint32)0x01<<TLV2556_CS1)|((uint32)0x01<<TLV2556_CS2);

	IODIR1|=((uint32)0x01<<30)|((uint32)0x01<<18);    //for uart_stc51
	//IODIR0|=((uint32)0x01<<29);	
	FIO2DIR|=((uint32)0x01<<9);
 	
 	FIO4DIR|=((uint32)0x01<<28)|((uint32)0x01<<29); //uart1 uart2 tx or rx
 	FIO3DIR|=((uint32)0x01<<26)|((uint32)0x01<<27); //uart3 uart4 tx or rx

}


void feed_watchdog(void)
{

	if(feed_watchdog_flag1==0)
	{
		feed_watchdog_flag1=1;
		IOSET0=(uint32)0x01<<17;
	}
	else
	{
		feed_watchdog_flag1=0;
		IOCLR0=(uint32)0x01<<17;
	}	
}



//转换4字符串到32位浮点数
float convert_char_to_double(unsigned char buf[])
{
	float dvar1;
	unsigned char *pointer1;
	
	pointer1=(unsigned char *)&dvar1;
	
	*pointer1=buf[0];
	*(pointer1+1)=buf[1];
	*(pointer1+2)=buf[2];
	*(pointer1+3)=buf[3];

	return dvar1;
}

/*
* 浮点数转4字节
*/
unsigned char * convert_float_to_char(float val)
{
	float a;
	unsigned char i,*px;
	unsigned char x[4];
	void *pf;
	px = x; /*px指针指向数组x*/

	pf = &val; /*void 型指针指向浮点数首地址*/
	for(i = 0; i < 4; i++)
	{
	*(px+i)=*((unsigned char *)pf+i); /*强制void 型指针转成char型,因为*/
	} /*void型指针不能运算*/
	return px;
}

int hexstrtoint(unsigned char buf[])
{
	int dvar1;
	unsigned char *pointer1;
	
	pointer1=(unsigned char *)&dvar1;
	
	*pointer1=buf[0];
	*(pointer1+1)=buf[1];
	*(pointer1+2)=buf[2];
	*(pointer1+3)=buf[3];

	return dvar1;
}
unsigned char * inttohexstr(int val)
{
	int a;
	unsigned char i,*px;
	unsigned char x[4];
	void *pf;
	px = x; /*px指针指向数组x*/

	pf = &val; /*void 型指针指向浮点数首地址*/
	for(i = 0; i < 4; i++)
	{
	*(px+i)=*((unsigned char *)pf+i); /*强制void 型指针转成char型,因为*/
	} /*void型指针不能运算*/
	return px;
}

U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
   /* This function is called by the TCP module on TCP event */
   /* Check the 'Net_Config.h' for possible events.          */

   par = par;

   if (soc != socket_tcp) {
      return (1);
   }

   switch (evt) {
      case TCP_EVT_DATA:
         /* TCP data frame has arrived, data is located at *par1, */
         /* data length is par2. Allocate buffer to send reply.   */
		 //display_char88(10,10,number_88[par&0x0f]);	
         break;

      case TCP_EVT_CONREQ:
         /* Remote peer requested connect, accept it */
         return (1);

      case TCP_EVT_CONNECT:
         /* The TCP socket is connected */
         return (1);
   }
   return (0);
}



U16 udp_callback (U8 soc, U8 *rip, U16 rport, U8 *buf, U16 len) {
   rip  = rip;
   rport= rport;
   len  = len;

   if (soc != socket_udp) {
      /* Check if this is the socket we are connected to */
      return (0);
   }

   udp_show_recv_screen(buf, 4);	  

   if((buf[0]&0x01)==0)
   {
   		SET_OUTPUT_STATUS(1,0);
   }
   else
   {
   		SET_OUTPUT_STATUS(1,1);
   }
   

   if((buf[0]&0x01)==0)
   {
   		SET_OUTPUT_STATUS(2,0);
   }
   else
   {
   		SET_OUTPUT_STATUS(2,1);
   }
   
   if((buf[0]&0x04)==0)
   {
   		SET_OUTPUT_STATUS(3,0);
   }
   else
   {
   		SET_OUTPUT_STATUS(3,1);
   }
   
   if((buf[0]&0x08)==0)
   {
   		SET_OUTPUT_STATUS(4,0);
   }
   else
   {
   		SET_OUTPUT_STATUS(4,1);
   }      


   return (0);
}

char *triml( char * buf)
{
 int len,i;
 char tmp[50];
 len = strlen(buf);

 for(i = 0;i < len;i++)
 {
  if (buf[i] !=' ')
   break;
 }
 if (i < len) {
  strncpy(tmp,(buf+i),(len-i));
 }
 strncpy(buf,tmp,len);

 return buf;
}

void config1()
{
	long flen;
	int val;
	unsigned char buff[]="1234567";
	unsigned char tmp[40];
    char *str1 = "Borland International ", *str2 = "nation", *ptr; 
    
	flen= strlen(buff);
	strncpy(tmp, buff, flen);
	tmp[7] = 0x40;
	val = strcmp(tmp, buff);
   	flen = strlen(str1);
	strncpy(tmp, str1, flen);
     //ptr = strstr(str1, str2);
	flen = strlen(triml(tmp)); 
	val = 0;

} 

//向Resien探头发数据
void sendtorisen()
{
	//1.查找污染物对应的串口
	unsigned int i;    
	unsigned char data = 0x1;

	for (i = 0; i < g_site_conf_extend.devinfonum; i++)
	{
		if (strcmp(g_site_conf_extend.devinfo[i].support_p_id, "201") == 0)
			break;
	}

	switch (i) 
	{
		case 0:
			set_uart0_to_tx_status();
   			UARTSend(g_site_conf_extend.devinfo[i].portnum, &data, 1);
			set_uart0_to_rx_status();

			break;
		case 1:
			set_uart1_to_tx_status();
   			UARTSend(g_site_conf_extend.devinfo[i].portnum, &data, 1);
			set_uart1_to_rx_status();
			break;
		case 2:
			set_uart2_to_tx_status();
   			UARTSend(g_site_conf_extend.devinfo[i].portnum, &data, 1);
			set_uart2_to_rx_status();
			break;
		case 3:
			set_uart3_to_tx_status();
   			UARTSend(g_site_conf_extend.devinfo[i].portnum, &data, 1);
			set_uart3_to_rx_status();
			break;
		default:
			break;
	}

	g_site_conf_extend.com_port[i].timeout_ticks = 0;
	g_site_conf_extend.com_port[i].timeout_calflg = TRUE;//开始计数
}
/********************************
***读取探头返回内容
********************************/
void readrisendata()
{
	unsigned char data[20];
	unsigned int i;
	
	for (i = 0; i < g_site_conf_extend.devinfonum; i++)
	{
		if (strcmp(g_site_conf_extend.devinfo[i].support_p_id, "201") == 0)
		{
			break;	
		}
	}

	switch (i)
	{
		case 0:
			if (UART0Count > 0)
			{
				
				YunSuan_Data(UART0Buffer);
				
				UART0Count = 0;
			}
			else
			{
				//判断是否超时, 如果超时则瞬时流量是0
				if (g_site_conf_extend.com_port[0].timeout_ticks >= COMPORT_TIMEOUT * 100)
				{
					//超时
					setinstantflow(0);
				}
			}
			break;
		case 1:
			if (UART1Count > 0)
			{
				
				YunSuan_Data(UART1Buffer);
				
				UART1Count = 0;
			}
			else
			{
				//判断是否超时, 如果超时则瞬时流量是0
				if (g_site_conf_extend.com_port[1].timeout_ticks >= COMPORT_TIMEOUT * 100)
				{
					//超时
					setinstantflow(0);
				}
			}
			break;
		case 2:
			if (UART2Count > 0)
			{
				
				YunSuan_Data(UART2Buffer);
				
				UART2Count = 0;
			}
			else
			{
				//判断是否超时, 如果超时则瞬时流量是0
				if (g_site_conf_extend.com_port[2].timeout_ticks >= COMPORT_TIMEOUT * 100)
				{
					//超时
					setinstantflow(2);
				}
			}
			break;
		case 3:
			if (UART3Count > 0)
			{
				
				YunSuan_Data(UART3Buffer);
				
				UART3Count = 0;
			}
			else
			{
				//判断是否超时, 如果超时则瞬时流量是0
				if (g_site_conf_extend.com_port[3].timeout_ticks >= COMPORT_TIMEOUT * 100)
				{
					//超时
					setinstantflow(0);
				}
			}
			break;
		default:
			break;
	}
}


#define TITLE_X_OFFSET  0

unsigned char remip[4] = {192,168,0,1};
unsigned char *udp_sendbuf;
unsigned char *tcp_sendbuf;

int main(void) 
{
	unsigned int intvar1;
	unsigned char var1;
	unsigned int i;
	unsigned char buf1[20];
	unsigned char tmp_buf1[4096];
	BYTE  tst_uart_buf[20];
	unsigned char tst_flag1;


	//////////////////////system init
	TargetResetInit();
	PCONP|=0X03000000;     //open the uart2 and uart3
 	/////////////////////  init the GPIO port
	//USBPortSel=0x00000003;
	init_io_port();
	/////////////////////feed the watch_dog
	feed_watchdog();
	delay(100);
	feed_watchdog();	
	////////////////////////	
 	init_timer(TIME_INTERVAL);
	///////////////////// init the RTC
	init_RTC();
	//////////////////// init the UARTs
/*	UARTInit(0,9600);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?