标题:
STC12C5A60S2的双串口,一个收,另外一个发,用来接收GPS的信息
[打印本页]
作者:
hd731513942
时间:
2015-11-9 20:50
标题:
STC12C5A60S2的双串口,一个收,另外一个发,用来接收GPS的信息
最近在做个项目,STC12C5A60S2+GPS,GPS挂在串口2上接收数据然后发给串口1,做了好久没做出来,感觉程序逻辑上没什么错误,程序如下,大家看看有什么问题吗?
作者:
hd731513942
时间:
2015-11-9 20:51
#include<stc12c5a.h>
#include<string.h>
#define S2RI 0x01
#define uint unsigned int
#define uchar unsigned char
uchar inter_ok=0;
uchar temp[80];
uchar gps_flag=0;
uchar rec_start=0;
uchar rec_stop=0;
uint num=0;
sbit LED7=P1^7;
sbit LED6=P1^6;
sbit LED5=P1^5;
sbit LED4=P1^4;
uchar tmp;
void uart2_init()
{
AUXR=0X10; //允许独立波特率运行
BRT=0XFD; // 波特率为9600
S2CON=0X50; //方式1,8位,可变波特率,S2REN=1,允许串口接收
AUXR1 = AUXR1&0xef ; // UART2在P1口
IE2=0X01; //允许串口2中断
EA=1;
}
//void delayms(uint a)
// { uint b,c;
// for(b=a;b>0;b--)
// for(c=1222;c>0;c--) ;
// }
void init_time()
{
TMOD=0X20;
TH1=0xFD;
TL1=0XFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
/*接收中断服务子程序*/
void GPS_interrupt() interrupt 8
{
IE2=0X00; //关串口2中断
if(S2CON&S2RI)
{
tmp=S2BUF;
if ((tmp== '$')&&(gps_flag==0)) //当第一字符为$时开始接收
{
rec_start=1;
rec_stop=0 ;
}
if(rec_start)
{
temp[num++]=tmp ;
if(tmp=='\n') //检测到换行符时
{
temp[num]='\0'; //字符串结束
rec_start=0;
gps_flag=1;
rec_stop=1; //停止接收,转出
num=0;
}
}
}
S2CON&=~S2RI; //清空串口2的接收标志位
IE2=0X01; //开串口2
}
void main()
{
int len,i;
init_time();
uart2_init();
while(1)
{
if(rec_stop)
{
TR0 = 1;
len=strlen(temp); // 得到字符串长度
for(i=0;i<len;i++) //把数据传到串口1
{
SBUF=temp[i];
while(!TI);
TI=0;
}
gps_flag=0;
rec_stop=0;
}
}
}
作者:
hd731513942
时间:
2015-11-9 21:07
用的GPS是UBLOX-M6-0-001 GPRS用的是SIM900A模块,大家有相关资料吗,可不可以提供一根参考参考
作者:
忆昔
时间:
2016-5-12 17:06
楼主 问题解决了吗?同求
作者:
415655001
时间:
2016-5-21 13:46
33333333333
作者:
jono
时间:
2017-2-5 20:02
楼主问题解决了吗
作者:
ztlcc
时间:
2017-2-6 18:05
你两个串口程序放在一起很难确定是哪个有问题,对照官方文档一个个调好,这个不难的
作者:
lvderen
时间:
2017-2-8 22:42
楼主 问题解决了吗?同求
作者:
里本来
时间:
2017-5-19 14:53
没有初始化串口1
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1