本帖最后由 zch305 于 2019-6-1 16:43 编辑
现在我使用单片机与GPRS通信想获取定位信息。下面程序是通过单片机串口发送ALIENTEK@AT+LOC指令并且将返回的位置数据存储到寄存器中再通过串口将位置数据发送到服务器上。用串口助手测试,发送ALIENTEK@AT+LOC,返回这个数据,''+LOCATION: 108.986671,34.247131" OK。下面是我的单片机程序,为什么结果是在服务器上接收到的是ALIENTEK@AT+LOC,而不是其返回数据,大家看看这有什么问题。
#include<reg52.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
char rcvbuf[20];
char rcvflag = 0;
void delayms(uint x) //51单片机常用延时程序
{
uint i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
}
void uart_init() //串口初始化
{
TMOD=0x20;
TH1=0XFd;
TL1=0XFd;
SCON=0x50;
PCON=0X00;
TR1=1;
EA=1;
ES=1;
}
void GPRS_init()
{
ES=0;//发送数据时关闭串口接收中断
TI=1;//发送中断执行清除标志
printf("ALIENTEK@AT+LOC\r\n");
while(!TI);
TI=0;
ES=1;
}
void send(char *p)
{
TI=0;
do
{
SBUF=*p;
p++;
while(!TI);
TI=0;
}while(*p);
SBUF=' ';
while(!TI);
TI=0;
}
void main()
{
char buf[10];
char z;
uart_init();
GPRS_init()
while(1)
{
if(rcvflag == 1) //判断是否接收到数据
{
ES = 0;
rcvflag = 0;
for(z=0;z<60;z++)
{
send1(rcvbuf);
}
z = 0;
}
}
}
void uart_rcv() interrupt 4 //中断接收程序
{
static char i = 0;
if(RI == 1)
{
ES = 0;
RI = 0;
rcvbuf[i++] = SBUF;
if(rcvbuf[i-1] == '\n') //判断字符串结束位置
{
rcvbuf = '\0';
i = 0;
rcvflag = 1; //字符串结束,把接收标志位置1
}
ES = 1;
}
}
|