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

📄 main.c

📁 F020集成以太网接口核心模块以太网通讯与数据采集例程源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
				// Search the URL for field-name = "format" and copy field-value to <msg_buff>
				field_name_found = mn_http_find_value(BODYptr,(byte *)"format",msg_buff);         
				
				// Check if the requested format is HTML
				if(field_name_found && toupper(msg_buff[0]) == 'H')
				{
					
					// User has requested light sensor data in HTML format
					// Build the following page:
					// <html>
					// <head><meta http-equiv="refresh" content="2"></head>
					// <body bgcolor="#757575" text="#505050">
					// <b>50%</b>
					// </body>
					// </html>
					//
					// 
					EA = 0;
					high=g_Voltage/1000;
					low = g_Voltage-high*1000;
					sprintf(HTML_BUFFER, "<html><head></head><body bgcolor=black text=yellow><center><span style=\"font-family: sans-serif; font-size: 28pt; font-weight: bold;\">%u.%03d</span></center></body></html>",
					        high,low ); 
					EA = 1;      
					
					socket_ptr->send_ptr = (byte *)HTML_BUFFER;
					socket_ptr->send_len = strlen(HTML_BUFFER);   
					
				}
			}
		}
	}

}

//-----------------------------------------------------------------------------
// CGI程序 
// 控制LED状态
// 
//-----------------------------------------------------------------------------
void set_led(PSOCKET_INFO socket_ptr)
{
	static byte msg_buff1[52];
	
	int status1;
	

	// Search for the “type” field and store the
	// result in <msg_buff1>.
	status1 = mn_http_find_value (BODYptr,(byte*)"led", msg_buff1);

		
	// Check status1 and status2 to determine if
	// msg_buff1 and msg_buff2 are valid.
	if(status1)
	{
		if(strcmp(msg_buff1,"0")==0) 
		{
			P_LED2 = 1;

			strcpy(msg_ans,"LED ON");
		}
		else if(strcmp(msg_buff1,"1")==0)
		{
			P_LED2 = 0;

			strcpy(msg_ans,"LED OFF");
		}
		else 
		{
			strcpy(msg_ans,"Error");
		}		
	
	}

	// Write the HTML code to a buffer.
	sprintf( HTML_BUFFER,"<HTML>%s</HTML>",msg_ans);

	// Fill the socket with data to send.
	socket_ptr->send_ptr = HTML_BUFFER;
	socket_ptr->send_len = strlen(HTML_BUFFER);
	
	// Return from the CGI script

	return;
}


//-----------------------------------------------------------------------------// Initialization Routines//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// PORT_Init//-----------------------------------------------------------------------------//// Configure the Interrupts, Crossbar and GPIO ports
//
void PORT_Init()
{
    // P0.0  -  TX0 (UART0), Open-Drain, Digital
    // P0.1  -  RX0 (UART0), Open-Drain, Digital
    // P0.2  -  SCK  (SPI0), Open-Drain, Digital
    // P0.3  -  MISO (SPI0), Open-Drain, Digital
    // P0.4  -  MOSI (SPI0), Open-Drain, Digital
    // P0.5  -  NSS  (SPI0), Open-Drain, Digital
    // P0.6  -  SDA (SMBus), Open-Drain, Digital
    // P0.7  -  SCL (SMBus), Open-Drain, Digital

    // P1.0  -  Skipped,     Open-Drain, Analog
    // P1.1  -  Skipped,     Open-Drain, Analog
    // P1.2  -  Skipped,     Open-Drain, Analog
    // P1.3  -  Skipped,     Open-Drain, Analog
    // P1.4  -  Skipped,     Open-Drain, Analog
    // P1.5  -  Skipped,     Open-Drain, Analog
    // P1.6  -  Skipped,     Open-Drain, Analog
    // P1.7  -  Skipped,     Open-Drain, Analog

    // P2.0  -  TX1 (UART1), Open-Drain, Digital
    // P2.1  -  RX1 (UART1), Open-Drain, Digital
    // P2.2  -  INT0 (Tmr0), Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital
    // P2.4  -  Unassigned,  Open-Drain, Digital
    // P2.5  -  Unassigned,  Open-Drain, Digital
    // P2.6  -  Unassigned,  Open-Drain, Digital
    // P2.7  -  Unassigned,  Open-Drain, Digital

    // P3.0  -  Unassigned,  Open-Drain, Digital
    // P3.1  -  Unassigned,  Open-Drain, Digital
    // P3.2  -  Unassigned,  Open-Drain, Digital
    // P3.3  -  Unassigned,  Open-Drain, Digital
    // P3.4  -  Unassigned,  Open-Drain, Digital
    // P3.5  -  Unassigned,  Open-Drain, Digital
    // P3.6  -  Unassigned,  Push-Pull,  Digital
    // P3.7  -  Unassigned,  Push-Pull,  Digital

    P1MDIN    = 0x00;
    P2MDOUT   = 0x00;
	P3MDOUT   = 0x02;

    P74OUT    = 0xFF;


	P4 = 0xC0;                       // /WR, /RD, are high, RESET is low	P5 = 0xFF;    P6 = 0x3F;                       // P5, P6 contain the address lines    P7 = 0xFF;                       // P7 contains the data lines
	TCON &= ~0x01;                   // Make /INT0 level triggered

	// Enable UART0,SPI0,SMBUS0,UART1,P1 as Analog Pin,SO INT0 on P22
    XBR0      = 0x07;
    XBR1      = 0x04;
    XBR2      = 0x44;
}
//-----------------------------------------------------------------------------// EMIF_Init//-----------------------------------------------------------------------------//// Configure the External Memory Interface for both on and off-chip access.//void EMIF_Init (void){   EMI0CF = 0x2B;             // Split-mode, multiplexed on P6 - P7   EMI0TC = EMIF_TIMING;      // This constant may be modified                              // according to SYSCLK to meet the                              // timing requirements for the CP2200   EMI0CN = BASE_ADDRESS;     // Page of XRAM accessed by EMIF}//-----------------------------------------------------------------------------// SYSCLK_Init//-----------------------------------------------------------------------------//// This routine initializes the system clock.//void SYSCLK_Init (void){    int i = 0;
    OSCXCN = 0x67;
    for (i=0; i < 3000; i++);         // Wait at least 1ms
    while(!(OSCXCN & 0x80));         
    OSCICN = 0x08;
}//--------------------------------
// AD初始化
//-------------------------------
void ADC_Init()
{

	AMX0CF    = 0;         // 单端输入
    AMX0SL    = 0;
	ADC0CF    = 0xF8;

    ADC0CN    = 0xC0;
}

void Voltage_Reference_Init()
{
    REF0CN    = 0x07;
}

//------------------------------
// DA初始化
//------------------------------
void DAC_Init()
{
	DAC0CN = 0x80;      // 使能DAC0,输出数据右对齐
}


//-----------------------------------------------
// 定时器初始化
//-----------------------------------------------

void Timer_Init()
{
	
	//.......................................
	// 设置定时器的时钟信号
	// - T4M T2M T1M T0M  -  -  -
    // 0  1   0   1   0   0  0  0
	// 1:使用SYSCLK;0:使用SYSCLK/12
	// 定时器0,1,2,4均使用SYSCLK
	//.......................................
	CKCON = 0x70;
	
	
	//......................................
	// 定时0工作在16位定时器模式
	// 定时器1工作在8位重载模式
	//......................................

	TMOD = 0x21;						
					
	//....................................
	// T0作为系统节拍时钟
	// 定时计算方法= 65536-t*SYSCLK
	//.....................................
	//TH0 = TMR0H;		
	//TL0 = TMR0L;		
	
	PCON = 0;	
	//.......................................
	// T1作为串口0时钟
	// 串口0波特率=SYSCLK/32*(256-TMR1LOAD)
	// T1波特率=9600
	//.......................................
		
	TH1  = 0xB8;	
	TL1  = 0xB8;	
	
	TCON = 0x00;	
					
	
	//..................................................
	// T2 and T3 not used
	//..................................................
	RCAP2H = 0x00;	// Timer 2 Capture Register High Byte
	RCAP2L = 0x00;	// Timer 2 Capture Register Low Byte	
	TH2    = 0x00;	// Timer 2 High Byte	
	TL2    = 0x00;	// Timer 2 Low Byte	
    T2CON  = 0x00;	// Timer 2 Control Register
		
	TMR3RLL = 0x00;	// Timer 3 Reload Register Low Byte
	TMR3RLH = 0x00;	// Timer 3 Reload Register High Byte
	TMR3H   = 0x00;	// Timer 3 High Byte
	TMR3L   = 0x00;	// Timer 3 Low Byte
    TMR3CN  = 0x00;	// Timer 3 Control Register

    //.....................................................
	// T4 作为串口1波特率发生器
	// T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
	// T4波特率=9600
	//.....................................................
    RCAP4H = 0xFF;  // Timer 4 Capture Register High Byte
    RCAP4L = 0xB8;  // Timer 4 Capture Register Low Byte
    TH4    = 0xFF;  // Timer 4 High Byte
    TL4    = 0xB8;  // Timer 4 Low Byte
    T4CON  = 0x30;  // Timer 4 Control Register
    

}

//...........................................................
// 功能:UART0初始化
// 输入参数:无
// 输出参数:无
// 注意:1.应该首先使用交叉开关为UART0分配相应的引脚
//       2.初始化定时器1作为波特率发生器
//..........................................................
void UART0_Init()
{
	
    SCON0 = 0x50;          // 8位波特率异步通信模式

    REN0  = 1;             // 使能UART0接收
    TR1   = 1;             // 启动定时器1
}


//-----------------------------------------------------
// 函数功能:循环方式发送字符串
// 输出参数:pSendString,char*:欲发送的字符串的缓冲区
// 输出:无
//-----------------------------------------------------
void SendString(char *pSendString)
{
	
	// 循环发送,首先关闭中断
	
	ES0 =0;
	
	while(*pSendString!=0)
	{
		SBUF0 = *pSendString++;
		while(TI0==0);
		TI0=0;
	}
	


}

//-----------------------------
// 初始化变量
//----------------------------
void InitVariable()
{
   g_Voltage     = 0;
   g_Temperature = 0;	

   g_ADChannel   = AD_VOLTAGE;
}



//------------------------------
// 以循环的方式进行一次电压采集
// g_Voltage是实际电压的1000倍
//-----------------------------

unsigned long SampleVoltageAndOut()
{
	
	unsigned long  lt;
	unsigned int   nRet;
	unsigned char Save;

	Save = EIE2;

	EIE2&=~0x02;

	AMX0SL   = 0;  // 采集通道0
	AD0INT   = 0;

	AD0BUSY = 1;


	while(AD0INT==0);
	AD0INT = 0;

	EIE2 = Save;

	// DA输出
	DAC0L = ADC0L;
	DAC0H = ADC0H;


	nRet = ADC0H;
	nRet<<=8;
	nRet+=ADC0L;
	
	lt = nRet+1;
	lt =lt*AD_VREF;
	lt >>=12;


	g_Voltage = lt;

	return g_Voltage;


}

//------------------------------
// 测量温度
// Vtemp=0.00286*Temp+0.776
// g_Temperature/2.86=实际温度
//-----------------------------

long SampleTemperature()
{
	unsigned int   nRet;
	unsigned long  lt;
	unsigned char Save;

	Save = EIE2;

	EIE2&=~0x02;

	AMX0SL   = 8;  // 采集通道8
	AD0INT   = 0;

	AD0BUSY = 1;


	while(AD0INT==0);
	AD0INT = 0;
	
	EIE2 = Save;
	
	// 计算实际的温度
	nRet = ADC0H<<8;
	nRet+=ADC0L;
	
	lt =nRet+1;
	lt =lt*AD_VREF;
	lt >>=12;
	
	// 1000V
	g_Temperature=lt-776;

	return g_Temperature;

}	

//---------------------------------------------------------
// 软件延时函数
//---------------------------------------------------------



											        //						;时钟周期数
											        //  lcall				;4
void dly(unsigned char cnt){while(cnt){cnt--;}}		// delay:	mov a,r7	;1
											// 			jz quit		;2
											// 			dec r7		;1
											// 			sjmp delay	;2
											// quit:	ret			;1
											// 6n+5 sysclk @c8051f022(0.5425)
											// 延时(6n+5)*0.0904us @11.0592MHZ

//....................................................................................
// 延时ms毫秒
//....................................................................................
void Dlyms(unsigned int ms)						    // 延时cnt(ms)@11.0592MHZ
{
	while(ms)
	{
		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		dly(250);
		dly(210);

		ms--;
	}
}







⌨️ 快捷键说明

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