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 + -
显示快捷键?