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

📄 net.c

📁 本人用avr 单片机atmega128开发控制产品的源码。
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
	while((read_reg(0x00, C0_ISR) & 0x40) != 0x40 )
		WDR();
	//state_3100a=0x00;
	//delayus(100);
	//DISABLE_XM( );
}
//---------------------------------------------------------
// NAME:	W3100A_int()
// ENTRY:	void
// RETURN:	void
// FUNCTION:init the chip W3100A
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_int(void)
{
	unsigned char k=0;
	
	ini_indirect_mood(MODE1);					//set_indirect
	W3100A_write_reg(0x00,C0_CR,0x80);      //reset
	W3100A_write_reg(0x00,IMR,0x88);   //set C0 intterupt enable
	W3100A_write_reg(0x00,C0_SOPR,0x01);			//select scoket_TCP
	W3100A_write_reg(0x00,TMSR,0x55);				//set send buffer 1K
	k=read_reg(0x00,TMSR);
	W3100A_write_reg(0x00,RMSR,0x55); 				//set receive buffer
	W3100A_write_reg(0x00,C0_MSSR,0x80);			//set Mem_seg
	W3100A_write_reg(0x00,C0_MSSR+1,0x00);
	W3100A_write_reg(0x00,IRTR,0x01);				//retry_time
	W3100A_write_reg(0x00,IRTR+1,0x90);
	W3100A_write_reg(0x00,RCR,0xff);
	for(k=0;k<2;k++)
	{
		W3100A_write_reg(0x00,C0_DPR+k,C0DPR[k]);   //set destination_socket
		W3100A_write_reg(0x00,C0_SPR+k,C0SPR[k]);   //set source_socket
	}
	W3100A_write_reg(0x00,C0_CR,0x01);                  //ini_system
	have_get2[0]=0x00;
	have_get2[1]=0x00;
	have_get2[2]=0x40;
	have_get2[3]=0x01;
	//N=1;
	W3100A_M=1;
	//address=0x4001;
}
//---------------------------------------------------------
// NAME:	W3100A_GATE()
// ENTRY:	*P
// RETURN:	void
// FUNCTION:init the gateway
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_GATE(unsigned char *P)
{
	unsigned char tt;
	tt=0;
	//W3100A_write_reg(0x00,GAR+1,0x33);
	W3100A_write_reg(0x00,GAR+0,P[0]);
	W3100A_write_reg(0x00,GAR+1,P[1]);
	//tt=read_reg(0x00,GAR+0);
	//tt=read_reg(0x00,GAR+1);
	W3100A_write_reg(0x00,GAR+2,P[2]);
	//tt=read_reg(0x00,GAR+2);
	W3100A_write_reg(0x00,GAR+3,P[3]);
	//tt=read_reg(0x00,GAR+3);
}
//---------------------------------------------------------
// NAME:	W3100A_SUBNET()
// ENTRY:	*P
// RETURN:	void
// FUNCTION:init the subnet
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_SUBNET(unsigned char *P)
{
	unsigned char tt;
	tt=0;
	W3100A_write_reg(0x00,SMR+0,P[0]);
	//W3100A_write_reg(0x00,SMR+0,0x43);
	//tt=read_reg(0x00,SMR+0);
	W3100A_write_reg(0x00,SMR+1,P[1]);
	W3100A_write_reg(0x00,SMR+2,P[2]);
	W3100A_write_reg(0x00,SMR+3,P[3]);
}
//---------------------------------------------------------
// NAME:	W3100A_LOCAL_IP()
// ENTRY:	*P
// RETURN:	void
// FUNCTION:init the local ip
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_LOCAL_IP(unsigned char *P)
{
	W3100A_write_reg(0x00,SIPR+0,P[0]);
	W3100A_write_reg(0x00,SIPR+1,P[1]);
	W3100A_write_reg(0x00,SIPR+2,P[2]);
	W3100A_write_reg(0x00,SIPR+3,P[3]);
}
//---------------------------------------------------------
// NAME:	W3100A_DES_IP()
// ENTRY:	*P
// RETURN:	void
// FUNCTION:init the destnation ip
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_DES_IP(unsigned char *P)
{
	W3100A_write_reg(0x00,C0_DIR+0,P[0]);
	W3100A_write_reg(0x00,C0_DIR+1,P[1]);
	W3100A_write_reg(0x00,C0_DIR+2,P[2]);
	W3100A_write_reg(0x00,C0_DIR+3,P[3]);
}
//---------------------------------------------------------
// NAME:	W3100A_handware_IP()
// ENTRY:	*P
// RETURN:	void
// FUNCTION:init the handware IP
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_handware_IP(unsigned char *P)
{
	
	W3100A_write_reg(0x00,SHAR+0,P[0]);
	W3100A_write_reg(0x00,SHAR+1,P[1]);
	W3100A_write_reg(0x00,SHAR+2,P[2]);
	W3100A_write_reg(0x00,SHAR+3,P[3]);
	W3100A_write_reg(0x00,SHAR+4,P[4]);
	W3100A_write_reg(0x00,SHAR+5,P[5]);
}
//---------------------------------------------------------
// NAME:	w3100a_open()
// ENTRY:	void
// RETURN:	void
// FUNCTION:init the w3100a,set it in listen status
// MODIFY:	2004.2.3
//---------------------------------------------------------
void w3100a_open(void)
{
	unsigned char net[4],i,dat;
	W3100A_int();
	for(i=0;i<4;i++)
	{
		//memory_read_byte(ADDRESS_FOR_GATEWAY+i, &dat);
		net[i]=dat;
	}
	//W3100A_GATE(net);
	W3100A_GATE(net_gatway);
	for(i=0;i<4;i++)
	{
		//memory_read_byte(ADDRESS_FOR_SUBNET+i, &dat);
		net[i]=dat;
	}
	//W3100A_GATE(net);
	W3100A_SUBNET(net_sub);W3100A_GATE(net_gatway);
	for(i=0;i<4;i++)
	{
		//memory_read_byte(ADDRESS_FOR_LOCAL_IP+i, &dat);
		net[i]=dat;
	}
	//W3100A_LOCAL_IP(net);
	W3100A_LOCAL_IP(net_lip);
	for(i=0;i<4;i++)
	{
		//	memory_read_byte(ADDRESS_FOR_DES_IP+i, &dat);
		net[i]=dat;
	}
	W3100A_DES_IP(net_dip);
	//	W3100A_DES_IP(net);
	W3100A_handware_IP(w3100_shar);
	//W3100A_int();
	W3100A_socket_init();
}

//---------------------------------------------------------
// NAME:	W3100A_connect()
// ENTRY:	void
// RETURN:	void
// FUNCTION:check the net connected or not 
// MODIFY:	2004.2.3
//---------------------------------------------------------
unsigned int time_out=0;
void W3100A_connect(void)
{  		
	unsigned char connect_state=0;	
	connect_state=read_reg(0x00,C0_SSR);
	//send_connect_state(connect_state);
	if(connect_state==0x06)
		have_connect=1;
	else
		//else if((connect_state<6)&&(connect_state>0))
	{
		if(time_out<500)
			time_out+=1;
		else
			have_connect=0;
	}
	//else
	//have_connect=0;
}
//---------------------------------------------------------
// NAME:	W3100A_close()
// ENTRY:	void
// RETURN:	void
// FUNCTION:close the net connected 
// MODIFY:	2004.2.3
//---------------------------------------------------------
void W3100A_close(void)
{
	if(read_reg(0x00,C0_SSR)==0x06)
	{
		W3100A_write_reg(0x00,C0_CR,0x10);                        //close_command
		delayus(50000);
		if(read_reg(0x00,C0_SSR)==0x00)
			have_connect=0;
	}
}
//---------------------------------------------------------
// NAME:	net_receive_data_operation()
// ENTRY:	void
// RETURN:	void
// FUNCTION:读取接收数据并处理
// MODIFY:	2004.2.3
//---------------------------------------------------------
void net_receive_data_operation(void)
{
	receive_size=0;
	receive_size=W3100A_pre_receive();	//读取接收数据长度
	if(receive_size)							  			     //收到数据信息
	{
		W3100A_data_receive();					  //读取命令										  						
		//对接收的数据处理
	}
}
//---------------------------------------------------------
// NAME:	net_transmit_data_opertion()
// ENTRY:	void
// RETURN:	void
// FUNCTION:发送待发送数据
// MODIFY:	2004.2.3
//---------------------------------------------------------
void net_transmit_data_opertion(unsigned char len)
{
	//W3100A_connect();
	WDR();
	if(have_connect==1)
	{
		//W3100A_connect();			        		 
		TCP_IP_Write_Data(len,net_tx_buf);   		
	}
}
//---------------------------------------------------------
// NAME:	modify_net_config()
// ENTRY:	void
// RETURN:	void
// FUNCTION:重新初始化网络参数
// MODIFY:	2004.2.3
//---------------------------------------------------------
void modify_net_config(void)
{
	ENABLE_XM( );
	W3100A_GATE(net_gatway);
	W3100A_SUBNET(net_sub);
	W3100A_LOCAL_IP(net_lip);
	W3100A_DES_IP(net_dip);
	W3100A_handware_IP(w3100_shar);
	W3100A_socket_init();
	DISABLE_XM( );
}
//---------------------------------------------------------
// NAME:	net_send_cmd()
// ENTRY:	destination,len
// RETURN:	void
// FUNCTION:根据目标信息像以太网发送数据
// MODIFY:	2004.2.3
//---------------------------------------------------------
void net_send_cmd( unsigned char destination,unsigned char len )
{
	WDR();
	if(destination==1)
	{
		net_send_data[0] = 0x47;		   		// start code
		net_send_data[1] = 0xaa;
		net_send_data[2] = 2;	   				
		net_send_data[3] = 0;			   
		net_send_data[4] = 0xfe;		
		net_client_transmit(5);
	}
	else 
	{
	/*
	for(i=0;i<len;i++)
	{
	net_send_data[i] = com_rx_buf[com_Rxout+i];	  	   		
	}
		*/
		net_client_transmit(len+1);      //transmit the data  form  to the client  
	}
}
//---------------------------------------------------------
// NAME:	set_3033()
// ENTRY:	ch
// RETURN:	void
// FUNCTION:根据数据信息设置邋qam(3033)
// MODIFY:	2004.2.3
//---------------------------------------------------------
void set_3033(unsigned char ch)
{
	switch(ch) 
	{
	case 1:         //Q1
		broad_3033_init(qam1,1);
		break;
	case 2:   		//Q2
		broad_3033_init(qam1,2);
		break;
	case 3:       //Q3
		broad_3033_init(qam1,3);
		break;
	case 4:       //Q4
		broad_3033_init(qam1,4);
		break;
	case 5:   	//Q5	
		broad_3033_init(qam2,1);
		break;
	case 6:    //Q6  
		broad_3033_init(qam2,2);
		break;
	case 7:   //Q7		
		broad_3033_init(qam2,3);
		break;
	case 8:   //Q8    
		broad_3033_init(qam2,4);
		break;					
	default:
		break;					
	} 
}
//---------------------------------------------------------
// NAME:	net_set_qam()
// ENTRY:	void
// RETURN:	void
// FUNCTION:根据数据信息分析设置qam
// MODIFY:	2004.2.3
//---------------------------------------------------------
void net_set_qam(void)
{
	unsigned int  temp1;
	unsigned char k,temp;
	unsigned char i,checksum;
	unsigned char t1,t2;
	t1=0;t2=0;k=0;
	checksum=0;
	for(i=2;i<8;i++)
	{
		t1=net_Rxout+i;
		checksum =  checksum+ net_rx_buf[t1];
	}
	checksum=~checksum+1;
	t1=net_Rxout+8;
	if(  net_rx_buf[t1]==checksum  )
	{
		net_send_cmd(1,5);				  			
	}
	else 
		return;
	k=net_Rxout+4;		   
	switch(net_rx_buf[k])
	{
	case 3:
		t1=net_Rxout+6;t2=net_Rxout+7;
		temp1=net_rx_buf[t2]*256+net_rx_buf[t1];
		t1=net_Rxout+5;
		iSmbRatSaved[net_rx_buf[t1]-1]=temp1;
		center_frequency=ucMenuIFSubPosition[net_rx_buf[t1]-1];   //IF
		qammode=ucMenuQModSubPosition[net_rx_buf[t1]-1];		   		   //QMOD
		iSmbRat=temp1;				
		t1=net_Rxout+5;		   				   		 					  //Symblrate	 	   
		set_3033(net_rx_buf[t1]);
		break;
	case 1:
		temp=net_Rxout+6;	
		t1=net_Rxout+5;	
		ucMenuIFSubPosition[net_rx_buf[t1]-1]=net_rx_buf[temp];
		center_frequency=net_rx_buf[temp];
		qammode=ucMenuQModSubPosition[net_rx_buf[t1]-1];	
		iSmbRat=iSmbRatSaved[net_rx_buf[t1]-1];						   
		t1=net_Rxout+5;		   				   		 					  //if
		set_3033(net_rx_buf[t1]);
		break;
	case 2:
		temp=net_Rxout+6;	
		t1=net_Rxout+5;	
		ucMenuQModSubPosition[net_rx_buf[t1]-1]=net_rx_buf[temp];
		center_frequency=ucMenuIFSubPosition[net_rx_buf[t1]-1];
		qammode=net_rx_buf[temp];	
		iSmbRat=iSmbRatSaved[net_rx_buf[t1]-1];				
		t1=net_Rxout+5;		   				   		 					  //qmode   
		set_3033(net_rx_buf[t1]);
		break;
	default:
		break;
	}
	temp=ucMenuQModSubPosition[qam_ch_position];          //qam mode
	write_eeprom(0x0011+qam_ch_position,temp);
	temp=ucMenuIFSubPosition[qam_ch_position];                 //ifrequency
	write_eeprom(0x0021+qam_ch_position,temp);  
	temp=iSmbRatSaved[qam_ch_position]/100;                       //symble rate
	write_eeprom(0x0031+qam_ch_position,temp);			  	
	temp=iSmbRatSaved[qam_ch_position]%100;
	write_eeprom(0x0041+qam_ch_position,temp);
	net_Rxout += 9;
	net_Rxout &= DATA_LEN;
}
//---------------------------------------------------------
// NAME:	net_set_temperature()
// ENTRY:	void
// RETURN:	void
// FUNCTION:根据数据信息分析设置温度
// MODIFY:	2004.2.3
//---------------------------------------------------------
void net_set_temperature(void)
{
	unsigned char i,checksum;

⌨️ 快捷键说明

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