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

📄 init.c

📁 利用51单片机对RTL8109进行控制
💻 C
字号:
#ifndef _init_c
#define _init_c
#endif
#include "net.h"
#include "struct.h"
#include "fundef.h"
#include "variable.h"

void delay_ms(unsigned char ms_number)
{
        unsigned int  i;
        unsigned char j;
        for(j=0;j<ms_number;j++)
        for(i=0;i<229;i++);
}
/*
void delay_100ms(unsigned char number)
{
        unsigned char i;
        for (i=0;i<number;i++)
        {
                delay_ms(100);
        }
}
*/
void timer0_init()
{
	timer0_mode_16bit;
 	th0=0;tl0=0;
 	timer0_run;
}

/*  串行口初始化   */
void serial_init()
{/*串口初始化    */
	unsigned char address,temp;

	sl_baud=0;
	P1=1;
	address=P1;
	sl_baud=1;

	temp=address&0x08;
	if(temp==0x08)
	{
		b_debug=1;
	}
	else
	{
		b_debug=0;
	}

	address=address&0x07;
	switch(address)
	{
		case 0 : serial_baud_1200;
		break;
		case 1 : serial_baud_57600;
		break;
		case 2 : serial_baud_2400;
		break;
		case 3 : serial_baud_4800;
		break;
		case 4 : serial_baud_9600;
		break;
		case 5 : serial_baud_19200;
		break;
		case 6 : serial_baud_38400;
		break;
		case 7 : serial_baud_115200;
		break;
		default : break;
	}
	serial_uart_8; /*工作方式为8位数据   */
	serial_receive_enable;/*允许接收*/
	ti=1;

}
void interrupt_init(void)
{
	timer2_interrupt_disable;
	timer0_interrupt_enable;
	timer1_interrupt_disable;
	int0_interrupt_disable;
//	timer0_priority_high;
	int1_interrupt_disable;
	serial_priority_high;
	serial_interrupt_enable;
	int0_mode_hightolow;
	int0_priority_low;
}


/*
	用拨码开关设定IP地址
	用在中断初始化前,不用屏蔽中断。
*/
void set_my_ip_address()
{
	unsigned char address;
	sl_ipaddress=0;
	P1=1;
	address=P1;
	sl_ipaddress=1;
	my_ip_address.bytes[0]=0xC0;
	my_ip_address.bytes[1]=0xA8;
	my_ip_address.bytes[2]=0x00;
	my_ip_address.bytes[3]=address;
}

void set_my_ethernet_addr()
{
	my_ethernet_address.bytes[0]=0x12;
	my_ethernet_address.bytes[1]=0x34;
	my_ethernet_address.bytes[2]=my_ip_address.bytes[0];
	my_ethernet_address.bytes[3]=my_ip_address.bytes[1];
	my_ethernet_address.bytes[4]=my_ip_address.bytes[2];
	my_ethernet_address.bytes[5]=my_ip_address.bytes[3];
}

void FunVarInit(void)
{
	unsigned int i;
	
	for(i=0;i<com_rxd_buffer_size;i++)
	{
		comrxdbuf[i]=0;
		comtxdbuf[i]=0;
	}
	
	for(i=0;i<=rt_size;i++)
	{
		retransmit_buffer[i].rtframe.status=0;
		retransmitpacket[i].status=0;
	}
	
	for(i=0;i<3;i++){txdnet.etherframe.sourcenodeid[i]=my_ethernet_address.words[i];}
	
	c_writecommand=0;
	c_readcommand=0;

	tcp1024.state=0;
	tcp1024.snd_nxt=0x0000;
	
	pwdi=!pwdi;

	b_dvrcommand=0;
	b_RunDvrCommand=0;
	c_DvrReadBuffer=0;
	c_DvrWriteBuffer=0;
	tcp_count=RetryTcp_Count;
	c_RstTcpCount=0;
	c_DvrRunTime=0;
	
	frameindex=0;	//IP包的序列号
	comrxdread=0;      //串口接收读指针
	comtxdread=0;      //串口发送读指针
	comrxdwrite=0;     //串口接收写指针
	comtxdwrite=0;  
	
	bCommandFlag=0;
	bDataFlag=0;
	c_type=0;
	
}
void init(void)
{
//	unsigned int i;
	unsigned char l,k;
	
	for(l=0;l<0x80;l++)//清空ram
	{
		for(k=0;k<0xff;k++)
		{
			XBYTE[k+l*0xff]=0;

		}
		pwdi=!pwdi;
	}
	
	sl_baud=1;
	sl_ipaddress=1;

	//reset=0;

	pwdi=!pwdi;

	//delay_100ms(1);//延时 0.1 秒;
	/*以下为单片机初始化  */
	timer0_init();/*定时器初始化*/
	serial_init();/*串口初始化*/


	if(b_reset==0)
	{
		b_reset=1;
		set_my_ip_address();
		set_my_ethernet_addr();
		gateway_ip_address.dwords=0xC0A80001;
		mask_ip_address.dwords=0xffffff00;
		ping_ip_address.dwords=0xc0a80002;
		dvr_ip_address.dwords=0xc0a80003;
	}
	
	netcard_init();/*对网卡的工作参数进行设置*/

	delay_ms(10);/*delay_ms为延时函数,延时单位为毫秒*/
	
	pwdi=!pwdi;
	
	FunVarInit();

	interrupt_init();/*中断初始化*/
}

⌨️ 快捷键说明

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