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

📄 5112udp.c

📁 一个嵌入式系统通过GPRS进行数据传输的程序,协议芯片为5112,程序中描述了通过单片机上网及通过UDP数据传输的过程
💻 C
📖 第 1 页 / 共 4 页
字号:
void killtimer( unsigned char ch)
{
	switch ( ch )
	{
		case 0:
			timer0=0;
			timer0_reg=0;
			break;
		case 1:
			timer1=0;
			timer1_reg=0;
			break;
		case 2:
			timer2=0;
			timer2_reg=0;
			break;
		case 3:
			timer3=0;
			timer3_reg=0;
			break;
		case 4:
			timer4=0;
			timer4_reg=0;
			break;
		case 5:
			timer5=0;
			timer5_reg=0;
			break;
		case 6:
			timer6=0;
			timer6_reg=0;
			break;
		case 7:
			timer7=0;
			timer7_reg=0;
			break;
		case 8:
			timer8=0;
			timer8_reg=0;
			break;
		case 9:
			timer9=0;
			timer9_reg=0;
			break;
		case 10:
			timer10=0;
			timer10_reg=0;
			break;
		case 11:
			timer11=0;
			timer11_reg=0;
			break;
		case 12:
			timer12=0;
			timer12_reg=0;
			break;
		case 13:
			timer13=0;
			timer13_reg=0;
			break;
		default:
			break;
	}
}

///////////////////////////////
//
//NAME: init_timer0
//DESCRIPTION: TIMER0 INTERRUPT SERVICE PROGRAM
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void init_timer0() interrupt 1
{
	TR0=0;
	TH0=0x70;  //7000 for 22.1184Mhz(20mS),4c10 for 11.0592MHz(50mS)
	TL0=0x00;
	if ( timer8 )
	{
		timer8_reg++;
		if ( timer8_reg == set_timer8 )
		{
			timer8_reg=0;
			timer8_prog();
		}
	}
	if ( timer0 )
	{
		timer0_reg++;
		if ( timer0_reg == set_timer0 )
		{
			timer0_reg=0;
			timer0_prog();
		}
	}
	if ( timer1 )
	{
		timer1_reg++;
		if ( timer1_reg == set_timer1 )
		{
			timer1_reg=0;
			timer1_prog();
		}
	}
	if ( timer2 )
	{
		timer2_reg++;
		if ( timer2_reg == set_timer2 )
		{
			timer2_reg=0;
			timer2_prog();
		}
	}
	if ( timer3 )
	{
		timer3_reg++;
		if ( timer3_reg == set_timer3 )
		{
			timer3_reg=0;
			timer3_prog();
		}
	}
	if ( timer4 )
	{
		timer4_reg++;
		if ( timer4_reg == set_timer4 )
		{
			timer4_reg=0;
			timer4_prog();
		}
	}
	if ( timer5 )
	{
		timer5_reg++;
		if ( timer5_reg == set_timer5 )
		{
			timer5_reg=0;
			timer5_prog();
		}
	}
	if ( timer6 )
	{
		timer6_reg++;
		if ( timer6_reg == set_timer6 )
		{
			timer6_reg=0;
			timer6_prog();
		}
	}
	if ( timer7 )
	{
		timer7_reg++;
		if ( timer7_reg == set_timer7 )
		{
			timer7_reg=0;
			timer7_prog();
		}
	}
	if ( timer9 )
	{
		timer9_reg++;
		if ( timer9_reg == set_timer9 )
		{
			timer9_reg=0;
			timer9_prog();
		}
	}
	if ( timer10 )
	{
		timer10_reg++;
		if ( timer10_reg == set_timer10 )
		{
			timer10_reg=0;
			timer10_prog();
		}
	}
	if ( timer11 )
	{
		timer11_reg++;
		if ( timer11_reg == set_timer11 )
		{
			timer11_reg=0;
			timer11_prog();
		}
	}
	if ( timer12 )
	{
		timer12_reg++;
		if ( timer12_reg == set_timer12 )
		{
			timer12_reg=0;
			timer12_prog();
		}
	}
	if ( timer13 )
	{
		timer13_reg++;
		if ( timer13_reg == set_timer13 )
		{
			timer13_reg=0;
			timer13_prog();
		}
	}
	TF0=0;
	TR0=1;
}
//////////////////////////////
//
//NAME: timer0_prog
//DESCRIPTION: TIMER0 PROGRAM FOR SYSTEM STATUS FLASH
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer0_prog(void)
{
	DSP_STAT=~DSP_STAT;
}
//////////////////////////////
//
//NAME: timer1_prog
//DESCRIPTION: TIMER1 PROGRAM FOR INIT SYSTEM
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer1_prog(void)
{
	unsigned char  dt,addr,i;
	unsigned char *p;
	killtimer(1);
	if ( send_buf1[71] == 0x55 )
	{
		dt=send_buf1[2];
		switch ( dt )
		{
			case 0x00:
				dt=64;
				break;
			case 0x01:
				dt=160;
				break;
		    case 0x02:
				dt=208;
				break;
			case 0x03:
				dt=232;
				break;
			case 0x04:
				dt=244;
				break;
			case 0x05:
				dt=250;
				break;
			case 0x06:
				dt=253;
				break;
			case 0x07:
				dt=254;
				break;
			case 0x08:
				dt=255;
				break;
			default:
				dt=250;
				break;
		}
		p=&dt;
		addr=x_baud;
		x_write(addr,p,1);//write user baud
		for ( i = 0 ; i < 16 ; i++ )
		{
			if ( send_buf1[i+3] == 0x00 ) break;
		}
		p=&send_buf1[3];
		addr=x_isp_num;
                i++;
		x_write(addr,p,i);//write isp num
		for ( i = 0 ; i < 16 ; i++ )
		{
			if ( send_buf1[i+19] == 0x00 ) break;
		}
		p=&send_buf1[19];
		addr=x_isp_name;
                i++;
		x_write(addr,p,i);//write isp name
		for ( i = 0 ; i < 16 ; i++ )
		{
			if ( send_buf1[i+35] == 0x00 ) break;
		}
		p=&send_buf1[35];
		addr=x_isp_name;
                i++;
		x_write(addr,p,i);//write isp password
		xbuf[0]=send_buf1[51];
		xbuf[1]=send_buf1[52];
		p=&xbuf[0];
		addr=x_my_port;
		x_write(addr,p,2);//write my port
		xbuf[0]=send_buf1[53];
		xbuf[1]=send_buf1[54];
		xbuf[2]=send_buf1[55];
		xbuf[3]=send_buf1[56];
		p=&xbuf[0];
		addr=x_server_addr;
		x_write(addr,p,4);//write server ip address
		xbuf[0]=send_buf1[57];
		xbuf[1]=send_buf1[58];
		p=&xbuf[0];
		addr=x_server_port;
		x_write(addr,p,2);//write server port
		if ( send_buf1[1] == 0x01)
		{
			xbuf[0]=send_buf1[59];
			xbuf[1]=send_buf1[60];
			xbuf[2]=send_buf1[61];
			xbuf[3]=send_buf1[62];
			p=&xbuf[0];
			addr=x_my_addr;
			x_write(addr,p,4);//write my address
		}
		xbuf[0]=send_buf1[63];
		xbuf[1]=send_buf1[64];
		xbuf[2]=send_buf1[65];
		xbuf[3]=send_buf1[66];
		p=&xbuf[0];
		addr=x_to_addr;
		x_write(addr,p,4);//write to address
		rcv_init=0;
		rcv_cnt0=0;
		waitinit=0;
		xbuf[0]=0x55;
		addr=x_mark;
		p=&xbuf[0];
		x_write(addr,p,1);
		DSP_STAT=1;
		DSP_LINK=1;
		DSP_CALL=1;
		DSP_SEND=1;
		DSP_RCV=1;
		for ( i = 0 ; i < 6 ; i ++ ) wait(150);

		DSP_STAT=0;
		DSP_LINK=0;
		DSP_CALL=0;
		DSP_SEND=0;
		DSP_RCV=0;
	}
}
//////////////////////////////
//
//NAME: timer2_prog
//DESCRIPTION: TIMER2 PROGRAM FOR CALLING
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer2_prog(void)
{
	DSP_CALL=~DSP_CALL;
}
//////////////////////////////
//
//NAME: timer3_prog
//DESCRIPTION: TIMER3 PROGRAM FOR RECONNECT
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer3_prog(void)
{
	//killtimer(3);
	reconnect_cnt++;
	if ( reconnect_cnt > 3 )
	{
		reconnect_cnt=0;
		request_ppp=1;

	}
	DSP_LINK=1;
}
//////////////////////////////
//
//NAME: timer4_prog
//DESCRIPTION: TIMER4 PROGRAM FOR RECEIVE DATA FROM EQU TO SEND TO SERVER DELAY 1S
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer4_prog(void)
{
	killtimer(4);
	if (( com0_send_addr + com0_send_len) != (com1_rcv_addr_hand + com1_rcv_len ))
	request_send_data_to_server=1;
}
//////////////////////////////
//
//NAME: timer5_prog
//DESCRIPTION: TIMER5 PROGRAM FOR SEND DATA TO SERVER 150mS
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer5_prog(void)
{
	killtimer(5);
	DSP_SEND=1;
}
//////////////////////////////
//
//NAME: timer6_prog
//DESCRIPTION: TIMER5 PROGRAM FOR RECEIVE DATA FROM SERVER
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer6_prog(void)
{
	killtimer(6);
	DSP_RCV=1;
}
//////////////////////////////
//
//NAME: timer7_prog
//DESCRIPTION: TIMER7 PROGRAM FOR RESET SYSTEM DELAY
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer7_prog(void)
{
	request_reset=1;
	/*killtimer(7);
	killtimer(6);
	killtimer(5);
	DSP_STAT=1;
	DSP_LINK=1;
	DSP_CALL=1;
	DSP_SEND=1;
	DSP_RCV=1;
	wait(150);
	wait(150);
	wait(150);
	wait(150);
	wait(150);
	wait(150);
	wait(150);

	DSP_STAT=0;
	DSP_LINK=0;
	DSP_CALL=0;
	DSP_SEND=0;
	DSP_RCV=0;
	while(1)
	{
	;
	}*/
}
//////////////////////////////
//
//NAME: timer8_prog
//DESCRIPTION: TIMER8 PROGRAM 300mS for wait 5112 2nd 0x7e
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer8_prog(void)
{
	killtimer(8);
	rcv_7d=0;
	rcv_data0=0;
	rcv_cnt0=0;
	com0tocom1=0;
	rcv_56=0;
	receive_5112=0;

}
//////////////////////////////
//
//NAME: timer9_prog
//DESCRIPTION: TIMER9 PROGRAM FOR WAIT 5112 ACK
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer9_prog(void)
{
	killtimer(9);
	ack=1;
}
//////////////////////////////
//
//NAME: timer10_prog
//DESCRIPTION: TIMER10 PROGRAM FOR DELAY 10S LINK TEST FROM EQU TO SERVER
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer10_prog(void)
{
	request_send_chk_to_server=1;
}
//////////////////////////////
//
//NAME: timer11_prog
//DESCRIPTION: TIMER11 PROGRAM FOR DISPLAY RECEIVE AND SEND LINK TEST FLASH
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer11_prog(void)
{
	killtimer(11);
	DSP_SEND=1;
}
//////////////////////////////
//
//NAME: timer12_prog
//DESCRIPTION: TIMER12 PROGRAM FOR WAIT PPP ERROR AFTER SEND HUNG UP COMMAND
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer12_prog(void)
{
	killtimer(12);
	phy_err=1;
}
//////////////////////////////
//
//NAME: timer13_prog
//DESCRIPTION: TIMER13 PROGRAM FOR RESET SYSTEM 20MIN DON NOT RECEIVE LINK TEST FROM SERVER
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void timer13_prog(void)
{
	while(1)
	{
	;
	}
}
//////////////////////////////
//
//NAME: init_com1
//DESCRIPTION: UART1 INTERRUPT SERVICE PROGRAM( EQU )
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void init_com1() interrupt 7
{
	unsigned char data dt;
	unsigned int  data addr_temp;
	if ( TI1 )
	{
		if ( rcv_to_send_com1_addr == send_to_com1_addr )
		{
			com1_send_finish=1;
			killtimer(6);
			DSP_RCV=1;
		}
		else
		{
			SBUF1=send_buf1[send_to_com1_addr];
			send_to_com1_addr++;
			if ( send_to_com1_addr == RCV_BUF_MAX ) send_to_com1_addr = 0;
		}
		TI1=0;
	}
	if ( RI1 )
	{
		if ( waitinit == 1 )
		{
			dt=SBUF1;
			if ( rcv_init )
			{
				send_buf1[rcv_cnt0]=dt;//receive init data
				rcv_cnt0++;
			}
			else
			{
				if ( dt == 0xaa )
				{
					rcv_init=1;
					rcv_cnt0=0;
					settimer(1);
				}
			}
		}
		else
		{
			if (run & issend_to_server)
			{
				dt=SBUF1;
				if ( !timer4 ) settimer(4);
				addr_temp=com1_rcv_addr_hand+com1_rcv_len;
				if ( addr_temp > (SEND_BUF_MAX-1) ) addr_temp=addr_temp-SEND_BUF_MAX;
				if (( dt == 0x7e )|(dt == 0x7d))
				{
					rcv_equ_chk=rcv_equ_chk+dt;
					send_buf0[addr_temp]=0x7d;
					com1_rcv_len++;
					addr_temp++;
					if ( addr_temp == SEND_BUF_MAX ) addr_temp=0;
					send_buf0[addr_temp]=(dt ^ 0x20);
					rcv_7d_cnt++;
				}
				else
				{
					if ((dt == 0x55) | ( dt == 0x56 ))
					{
						send_buf0[addr_temp]=0x56;
						rcv_equ_chk=rcv_equ_chk+0x56;
						com1_rcv_len++;
						addr_temp++;
						if ( addr_temp == SEND_BUF_MAX ) addr_temp=0;
						dt=dt ^ 0x20;
						send_buf0[addr_temp]=dt;
						rcv_equ_chk=rcv_equ_chk+dt;

					}
					else
					{
						rcv_equ_chk=rcv_equ_chk+dt;
						send_buf0[addr_temp]=dt;
					}
				}
				com1_rcv_len++;
				if ( com1_rcv_len > (SEND_BUF_MAX-1) )
                {
	                 com1_rcv_len = (SEND_BUF_MAX-1) ;
                }
				if ( com1_rcv_len > SEND_MAX_CNT )
				{
					request_send_data_to_server=1;
					timer4_reg=0;
				}
			}
		}
		RI1=0;
	}
}
//////////////////////////////
//
//NAME: init_com0
//DESCRIPTION: UART0 INTERRUPT SERVICE PROGRAM (5112)
//CALL:
//INPUT:
//OUTPUT:NONE
//
///////////////////////////////
void init_com0() interrupt 4
{
	unsigned char data dt,chtemp,i;
	unsigned int data idt,chk;
	unsigned char *p;
    ES0=0;
	if ( TI )
	{
		if ( send_data0 )
		{
			if ( send_com0_cnt == com0_send_len )//send data to 5112
			{
				send_com0_finish=1;
				send_com0_cnt=0;
			}
			else
			{
				idt=com0_send_addr+send_com0_cnt;
				if ( idt > (SEND_BUF_MAX-1) ) idt=idt-SEND_BUF_MAX;
				ACC=send_buf0[idt];
				TB8=P;
				SBUF0=ACC;
				send_com0_cnt++;
			}
		}
		else
		{
			if ( send_com0_cnt == send_ctr_com0_len )//send ctrl to 5112
			{
				send_com0_finish=1;
				send_com0_cnt=0;
			}
			else
			{
				ACC=send_ctr_com0_buf[send_com0_cnt];
				TB8=P;
				SBUF0=ACC;
				send_com0_cnt++;
			}
		}
		TI=0;
	}
	if ( RI )
	{
		dt=SBUF0;
		ACC=dt;
		if ( RB8 != P )
		{
			if ( sm )
			{
				send_buf0[rcv_cnt0]=dt;
				rcv_cnt0++;
			}
			else
			{
				chtemp=dt;
				if (( dt == 0x7d ) & ( rcv_cnt0>2 ))
				{
					rcv_7d=1;
				}
				else
				{
					if( rcv_7d )
					{

						dt=dt ^ 0x20;
						rcv_7d=0;
					}

					if ( rcv_data0 == 0 )

⌨️ 快捷键说明

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