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

📄 hpjk05.c

📁 gps和gsm集成程序
💻 C
📖 第 1 页 / 共 2 页
字号:
					Delay(2);
				}
		}
}
	
void comd_decode(void)	
{
	switch (pc_code)
		{
			case 16:{
					ascii[0]=*pointer_code;
					ascii[1]=*(pointer_code+1);
					gps_start_hour=ascii_to_hex();
					ascii[0]=*(pointer_code+2);
					ascii[1]=*(pointer_code+3);
					gps_start_min=ascii_to_hex();
					ascii[0]=*(pointer_code+4);
					ascii[1]=*(pointer_code+5);
					gps_stop_hour=ascii_to_hex();
					ascii[0]=*(pointer_code+6);
					ascii[1]=*(pointer_code+7);
					gps_stop_min=ascii_to_hex();
					task=3;
				} break;
			case 23:{
					task=6;
				} break;
		}
}	

void UART0_ISR (void) interrupt 4 using 1
{
 	if(RI0) 
  		{                                
   			RI0=0;
   			*pointer=SBUF0;
   			pointer++;
   		}
 	else
  		{
   			if(counter==counter1)
    				TI0=0;
    			else 
    				{
    					SBUF0=vp_comd_send[counter];
    					counter++;
    					TI0=0;
    				}
   		}
}

void UART1_ISR (void) interrupt 20 using 2
{
	if ((SCON1&0x01)==1)
		{
			SCON1=SCON1&0xFE;
			*pointer=SBUF1;
			pointer++;
		}
	else
		SCON1=SCON1&0xFD;
}

void erase_flash(void)
{
	unsigned char i;
	flash_data=0x5000;
	FLSCL=0x41;                       
	PSCTL=0x03;                       
	for(i=0;i<80;i++)
	   	{
	    		*(flash_data+i*512)=0xFF;
	    	}
	FLSCL=0x40;                      
	PSCTL=0x00;                       
}

void write_flash(void)
{
	unsigned int i;
	FLSCL=0x41;
  	PSCTL=0x01;
	for (i=0;i<counter2;i++)
		{
			*flash_data=*pointer1;
			pointer1++;
			flash_data++;
		}
	FLSCL=0x40;
  	PSCTL=0x00;
}

void date_setup(void)
{
	unsigned char i;
	unsigned char j;
	FLSCL=0x41;
  	PSCTL=0x01;
	for (i=0,j=8;i<4;i++,j++)
		*((unsigned char xdata *)(0x5000+i))=*((unsigned char code *)(0x5000+j));
	FLSCL=0x40;                      
	PSCTL=0x00;
}

void dial_ring(void)
{
	unsigned char i;
	unsigned char temp[25];
	for (i=0;i<8;i++)
		{
			while ((SCON1&0x01)==0) {}
			dial_buffer[i]=SBUF1;
			SCON1=SCON1&0xFE;
		}
	for (i=0;i<4;i++)
		temp[i]=dial_buffer[i+2];
	temp[i]='\0';
	
	if (strcmp(temp,"RING")==0)
		{
			strcpy (dial_buffer,"ata\x0d");
			for (i=0;i<4;i++)
				{
					SBUF1=gsm_comd_send[i];
					while ((SCON1&0x02)==0) {}
					SCON1=SCON1&0xFD;
				}
/*
			SCON1=SCON1&0xFE;
			dial_buffer[i]=SBUF1;
			dial_buffer[i]=SBUF1;
			
			for (i=0;i<24;i++)
				{
					while ((SCON1&0x01)==0) {}
					dial_buffer[i]=SBUF1;
					SCON1=SCON1&0xFE;
				}
			for (i=0;i<16;i++)
				temp[i]=dial_buffer[i+6];
			temp[i]='\0';
			if (strcmp(temp,"CONNECT 9600/RLP")==0)
				{
					task=7;
					Delay(2);
				}
*/
			Delay(7);
			SCON1=SCON1&0xFE;
			dial_buffer[i]=SBUF1;
			dial_buffer[i]=SBUF1;
			task=7;
		}
}

void data_to_pc(void)
{
	unsigned int i=1;
	SCON1=SCON1&0xFD;
	SCON1=SCON1&0xFD;
	flash_read=0x5000;
	SBUF1=0xA0;
	while ((SCON1&0x02)==0) {}
	SCON1=SCON1&0xFD;
	SBUF1=0x05;
	while ((SCON1&0x02)==0) {}
	SCON1=SCON1&0xFD;
	for (;!(flash_read==0xF000);flash_read++,i++)
		{
			SBUF1=*flash_read;
			while ((SCON1&0x02)==0) {}
			SCON1=SCON1&0xFD;
			if (i==4096)
				{
					Delay(1);
					i=1;
				}
		}
}

void data_to_pc_end(void)
{
	unsigned char i;
	Delay(1);
	strcpy (dial_buffer,"+++");
	for (i=0;i<3;i++)
		{
			SBUF1=dial_buffer[i];
			while ((SCON1&0x02)==0) {}
			SCON1=SCON1&0xFD;
		}
	Delay(2);
	strcpy (dial_buffer,"ath\x0d");
	for (i=0;i<4;i++)
		{
			SBUF1=dial_buffer[i];
			while ((SCON1&0x02)==0) {}
			SCON1=SCON1&0xFD;
		}
	Delay(2);
	SCON1=SCON1&0xFE;
	dial_buffer[i]=SBUF1;
	dial_buffer[i]=SBUF1;
}
	
	
	
		
void main(void)
{
	unsigned char i;
	EA=0;
 	WDTCN=0xDE;                       
 	WDTCN=0xAD;
	SYSCLK_Init();
	SP=0x30;
	clear_xram(0x1000);
	T2_ini();
	task=1;
	gps_start_hour=0xFF;
	gps_start_min=0xFF;
	gps_stop_hour=0xFF;
	gps_stop_min=0xFF;
	PORT_Init();
	ON_CON=1;
	GSMOFF=0;
	GPSOFF=0;
	NET=0;
	UART_Init();
	GSM_on();
	stop_gps();

	for (i=1;i<=50;i++)
		delete_message(i);
	
	for(;;)
	{
		switch (task)
			{
				case 1:{
						read_message();
					} break;
				case 2:{
						comd_decode();
					} break;
				case 3:{
						//time_adjust();
						strcpy(vp_comd_send,"@@Aa\xFF\xFF\xFF\xDF\x0D\x0A");
						for (;;)
							{	
								i=0;
								SBUF0=vp_comd_send[i];                
							 	i++;
							 	for (;i<10;i++)
									{
							   			while(!TI0){}                   
							   			TI0=0;
							   			SBUF0=vp_comd_send[i];
							   		}
							   	while(!TI0){}  
							   	TI0=0;
							   	
							   	for(i=0;i<10;i++)
							  		{
							   			while(!RI0){}                   
							   			RI0=0;
							   			vp_comd_response[i]=SBUF0;
							   		}
								if ((vp_comd_response[4]==gps_start_hour)&(vp_comd_response[5]==gps_start_min))
									{
										NET=1;
										vp_comd_send[0]='@';   
										vp_comd_send[1]='@';   
										vp_comd_send[2]='E';
										vp_comd_send[3]='a';   
										vp_comd_send[4]=0;     
										vp_comd_send[5]=0x24;
										vp_comd_send[6]=0x0D;  
										vp_comd_send[7]=0x0A;															 
		 								vp_comd_send[8]='@';
		 								vp_comd_send[9]='@';   
		 								vp_comd_send[10]='B';  
		 								vp_comd_send[11]='i';
		 								vp_comd_send[12]=0;    
		 								vp_comd_send[13]=0x2B; 
		 								vp_comd_send[14]=0x0D;
		 								vp_comd_send[15]=0x0A;
		 								pointer=gps_data_receive;
		 								
		 								EA=1;
		 								SBUF0=vp_comd_send[0];
		 								counter=1;
		 								counter1=16;
		 								ES0=1;
		 								
		 								alarm_timer0=1;
		 								alarm_timer0_ring=0;
		 								alarm_timer0_unit=10;
		 								ET2=1;
		 								
		 								while (alarm_timer0_ring==0) {}
		 								EA=0;
		 								ES0=0;
		 								ET2=0;
		 								task=4;
		 								break;
		 							}
		 						}
 					} break;
 				case 4:{
						//time_adjust();
						strcpy(vp_comd_send,"@@Aa\xFF\xFF\xFF\xDF\x0D\x0A");
						for (;;)
							{
								i=0;
								SBUF0=vp_comd_send[i];                
							 	i++;
							 	for (;i<10;i++)
									{
							   			while(!TI0){}                   
							   			TI0=0;
							   			SBUF0=vp_comd_send[i];
							   		}
							   	while(!TI0){}  
							   	TI0=0;
							   	
							   	for(i=0;i<10;i++)
							  		{
							   			while(!RI0){}                   
							   			RI0=0;
							   			vp_comd_response[i]=SBUF0;
							   		}
								if (vp_comd_response[6]==15)
									{
										//strcpy(vp_comd_send,"@@Eg");   //@=40h E=45h g=67h 
										vp_comd_send[0]='@';
										vp_comd_send[1]='@';
										vp_comd_send[2]='E';
										vp_comd_send[3]='g';
										vp_comd_send[4]=0x0F;
										vp_comd_send[5]=0x2D;
										vp_comd_send[6]=0x0D;
										vp_comd_send[7]=0x0A;
										i=0;
								
										SBUF0=vp_comd_send[i];                
								 		i++;
								 		for (;i<8;i++)
											{
								   				while(!TI0){}                   
								   				TI0=0;
								   				SBUF0=vp_comd_send[i];
								   			}
								   				while(!TI0){}  
								   				TI0=0;
								   		
								   		for (i=0;i<158;i++)
								   			{
		   										while(!RI0){}                   
		   										RI0=0;
		   										*pointer=SBUF0;
												pointer++;
		   									}
		   								erase_flash();
		   								counter2=pointer-0x800;
		   								flash_data=flash_data+4;
		   								pointer1=0x800;
		   								write_flash();
		   								task=5;
		   								break;
		   							}
		   						}
					} break;
				case 5:{
						pointer=pointer1=0x800;
						time_adjust();
						if ((vp_comd_response[4]==gps_stop_hour)&(vp_comd_response[5]==gps_stop_min))
							{
								stop_gps();
								date_setup();
								gps_start_hour=0xFF;
								gps_start_min=0xFF;
								gps_stop_hour=0xFF;
								gps_stop_min=0xFF;
								task=6;
							}
						else
							{	
								for (i=0;i<158;i++)
						   			{
   										while(!RI0){}                   
   										RI0=0;
   										*pointer=SBUF0;
										pointer++;
   									}
   								counter2=158;
   								write_flash();
   								
							}
					} break;
				case 6:{
						NET=0;
						dial_ring();
					} break;
				case 7:{
						data_to_pc();
						data_to_pc_end();
						task=1;
					} break;
			}
	}
}

⌨️ 快捷键说明

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