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 + -
显示快捷键?