send_recv.c

来自「此程序实现无线信标定位」· C语言 代码 · 共 92 行

C
92
字号
/***********************************************/

#include<reg51.h>

void port_init(void);
extern unsigned char data local_lat[11];//="2446.5211N";
extern unsigned char data local_lon[12];//="12100.1536E";

/*
unsigned char data data_buf;  //由于中断函数不接收参数,故只能用全局变量
unsigned char data check_data[2];
unsigned char data check_flag;  //检验开始标志
unsigned char data check_right;	//校验位是否正确标志,1表示正确
bit int_flag=0;//中断执行标志
*/

void recv_data(void)
{
	unsigned char dflag = 0;//记录逗号的次数
	unsigned char data i = 0,j = 0,data_buf;

	port_init(); 
	RI = 0;

	while(1)
	{	
		while(!RI)
		{}
		if(SBUF == 'A')
		break;
		RI = 0;
	}	
	RI = 0;	

	while(1)
	{		
		while(!RI)
		{}
		data_buf = SBUF;
		if(data_buf == '$')
		break;
		RI = 0;
	}

/*接收数据  $GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C */
	RI=0;	
	do
	{
		while(!RI)
		{}
		data_buf = SBUF;
		if(data_buf == ',') dflag++;
		if(dflag == 3 && data_buf != ',')	
			{
				local_lat[i] = data_buf;
				i++;
			}

		if(dflag == 4 && data_buf != ',') 
			{
				local_lat[i] = data_buf;
				local_lat[i+1] = '\0';		//以字符串的方式结束
			}

		if(dflag == 5 && data_buf != ',')
			{	
				local_lon[j] = data_buf;
				j++;
			}

		if(dflag == 6 && data_buf != ',') 
			{
				local_lon[j] = data_buf;
				local_lon[j+1] = '\0';		//以字符串的方式结束
			}
		RI = 0;
	}while(data_buf != 'E');
	TR1 = 0;
}


void port_init(void)
{
	TMOD = 0x20;
	PCON = 0;		//SMOD=0
	SCON = 0x50;	// MODE 1	REN = 1
	TH1 = 0xCC;	//600baut 12MHz oscillator frequence,SMOD=0
	TL1 = 0xCC;
	TR1 = 1;		//Start timer 1
}

⌨️ 快捷键说明

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