xou822 发表于 2013-8-10 22:27:01

求助 STC12C5A60S2接受GPS信号的问题

STC12C5A60S2,串口RX接GPS的TX口

然后波特率也设置为了9600(GPS默认值)

GPS是好的电压也是对的(GPS的TX端接TTL到电脑能够正常显示数据)

接到单片机以后,串口中断从未发生。。。(端口中断会点亮一个LED,但是LED正常运行程序后一直没亮过)

现在把代码贴出来,希望高人指点

谢谢


#include<STC/STC12C5A60S2.h>
#include<intrins.h>
#include<Font.c>

typedef unsigned char uchar;
typedef unsigned int uint ;

//GPS数据存储数组
uchar JD;            //经度
uchar JD_a;            //经度方向
uchar WD;            //纬度
uchar WD_a;            //纬度方向
uchar date;         //日期
uchar time;      //时间
uchar speed;      //速度
uchar high;      //高度
uchar angle;      //方位角
uchar use_sat;      //使用的卫星数
uchar total_sat;    //天空中总卫星数
uchar lock;            //定位状态
uchar cmd;            //用于存储命令类型的存储数组(前五位字母判断)
uchar cmd_number, mode, byte_count,comma; //命令字符串标号,命令数据区分,字节数,逗号数
uchar buf_full=0;            //1:整句接收完成,相应数据有效。0:缓存数据无效。
uchar tmp;//用于转存中断的SBUF
bit flag=0;   //用于标示收到信息


void UartInit(void)      //9600bps@11.0592MHz
{
    PCON &= 0x7F;      //波特率不倍速
    SCON = 0x50;      //8位数据,可变波特率
    AUXR &= 0xBF;      //定时器1时钟为Fosc/12,即12T
    AUXR &= 0xFE;      //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;      //清除定时器1模式位
    TMOD |= 0x20;      //设定定时器1为8位自动重装方式
    TL1 = 0xFD;      //设定定时初值
    TH1 = 0xFD;      //设定定时器重装值
    ET1 = 0;      //禁止定时器1中断
    TR1 = 1;      //启动定时器1
    EA= 1;      //允许中断
    ES= 1;      //允许串口中断
}

void UART_SER (void) interrupt 4 //串口中断
{   LED=0;                      //如果有中断就一直亮灯
   if(RI)                      //判断是否是接收中断
   {
      RI=0;                      //标志位清零
      tmp= SBUF;               //保存中断的值
      flag = 1;                     //设置中断标志
   }
      if(TI)                     //如果是串口标志志位,直接清零
   TI=0;
}

void main()
{
UartInit();         //初始化串口和定时器,允许中断
LCD_Init();      //初始化显示屏幕

LED=0;
delay_1ms(500);
LED=1;

while(1)         //开始死循环
{
if (flag==1)
processing();

LCD_printchar(0,0,(time+48));
LCD_printchar(1,0,(time+48));
LCD_printchar(2,0,':');
LCD_printchar(3,0,(time+48));
LCD_printchar(4,0,(time+48));
LCD_printchar(5,0,':');
LCD_printchar(6,0,(time+48));
LCD_printchar(7,0,(time+48));

}

}

wxlcj 发表于 2013-8-10 23:04:32

GPS输出,加个上拉或下拉电阻。明天看看确定一下。

xou822 发表于 2013-8-10 23:23:29

现在看起来和GPS无关

因为没有中断产生即使从电脑发送ttl也没法触发中断

geniuskim 发表于 2013-8-10 23:36:51

看起来你的程序是截取的

确认没有其它地方动过TR1,EA,ES吗
确认数据发送给了P30口吗

xou822 发表于 2013-8-10 23:54:00

程序不是完整的我省略了5110驱动部分和GPS信号处理部分

确认是接到3.0的,从电脑发送ttl都能收到

但是GPS没收到呢

xou822 发表于 2013-8-11 12:12:31

自己搞定了
说明一下

之前单片机的RX口同时接了GPS和电脑的TX端不知道什么原因   GPS的信号无法触发单片机中断
拔掉电脑的TX端以后,GPS信号成功收到{:loveliness:}

自己汗啊

wajlh 发表于 2013-8-11 12:18:17

没有烧掉一个TX端,相当不错了。

wajlh 发表于 2013-8-11 12:20:11

想监控串口的数据,正确做法是在电脑用两个串口的接收分别接在 待监控串口的接收和发送线上。

xou822 发表于 2013-8-11 12:46:50

还会烧tx端啊

书上没有这么说过哦

那 一般烧谁的   ttl的还是GPS的呢

qq48494730 发表于 2013-8-11 20:24:43

wajlh 发表于 2013-8-11 12:20 static/image/common/back.gif
想监控串口的数据,正确做法是在电脑用两个串口的接收分别接在 待监控串口的接收和发送线上。 ...

深有体会 前段时间调GTM900 把电脑和单片机串口接一起了 MAX232直接可以煮鸡蛋了。赶紧拔下来还好没坏
另外买了两个USB-232 现在电脑三个串口玩美搞定

wajlh 发表于 2013-8-11 20:36:08

xou822 发表于 2013-8-11 12:46 static/image/common/back.gif
还会烧tx端啊

书上没有这么说过哦


书上没跟你说可以把两个RX接在一起吧

xou822 发表于 2013-8-12 09:00:56

楼上的长老可以详细的说说为什么吗
页: [1]
查看完整版本: 求助 STC12C5A60S2接受GPS信号的问题