导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教一个单片机c程序的问题[shaqidezhu]

 *第45175篇: 请教一个单片机c程序的问题

  
楼 主:shaqidezhu 2006年12月19日10:15
 请教一个单片机c程序的问题
各位大侠,请指点下小弟:
  在keil下编了一个c语言程序,在protues下仿真通过了,但是实际的电路板却不行。该程序是把GPS发送的数据中提取时间,经度,纬度显示在lcd上。程序如下:
#include "REGX52.H"
#include "LCD1602.h"

unsigned  char idata GPSBuffer[32];//GPS发送的时间,经度,纬度共31位
unsigned  char idata GPSBuffer1[32];
//串口中断初始化**********************************************************************************
void sini()
{
  TMOD=0x20;    
  TH1=0xfa;     
  TL1=0xfa;
  PCON=0x00;    
  SCON=0xd8;   
  TR1=1;        
  ES=1;
  EA=1;
}
//主程序**********************************************************************************
void main()
{     
    LCD_Initial();
    P2=0x05;
    GPSBuffer[31]='\0';
    GPSBuffer1[31]='\0';
        sini();
    while(1);
}
//串口中断*********************************************************************************
void intrr() interrupt 4
{
    unsigned char i,j;
    bit find=0;//数据查找标记

//查找标记符*********************************************************************************
    for(j=0;j  <8;j++) //GPS每帧数据是242位;检验8次    
{
    for(i=0;i  <31;i++)//从SBUF收一次数据
    {
      while(RI!=1 );
      RI=0;
      GPSBuffer[i]=SBUF;
    }
    for(i=0;i  <29;i++)//查找时间,经度,纬度前的标记符
    { 
      if(GPSBuffer[i]==0x47&&GPSBuffer[i+1]==0x47&&GPSBuffer[i+2]==0x41)//标记符GGA对应的ASC2码
         {
                 find=1;//找到
         break;
         }
     }
    if(find==1)
    break;
  }

//显示程序**************************************************************************************
    if(find==1)
  {
    for(i=0;i  <31;i++)//继续接受所需数据
    {
      while(RI!=1 );RI=0;
      GPSBuffer1[i]=SBUF;
    }

    for(i=0;i  <27;i++)
    {
      if(GPSBuffer[i]==0x47&&GPSBuffer[i+1]==0x47&&GPSBuffer[i+2]==0x41)
        { 
         
         if(i  <11)//GPSBuffer中有效数据多于LCD的一行
         {
         
         Printf(0,0,&GPSBuffer[i+4]);//显示在LCD的第一行
         Printf(0,1,&GPSBuffer[i+20]);//显示在LCD第二行
              Printf(12-i,1,&GPSBuffer1[0]);
         }
    if(i==11)//GPSBuffer中有效数据等于LCD的一行
         {
         Printf(0,0,&GPSBuffer[i+4]);
         Printf(0,1,&GPSBuffer1[0]);
         }
         if(i>  11)//GPSBuffer中有效数据少于LCD的一行
         {
         Printf(0,0,&GPSBuffer[i+4]);
         Printf(27-i,0,&GPSBuffer1[0]);
         Printf(0,1,&GPSBuffer1[i-11]);
         }
        }
     }
     if(GPSBuffer[27]==0x47&&GPSBuffer[28]==0x47&&GPSBuffer[29]==0x41)//标记符在GPSBuffer的末端
       { 
         Printf(0,0,&GPSBuffer1[0]);
         Printf(0,1,&GPSBuffer1[16]);
       }
     if(GPSBuffer[28]==0x47&&GPSBuffer[29]==0x47&&GPSBuffer[30]==0x41)
      {
       Printf(0,0,&GPSBuffer1[1]);
       Printf(0,1,&GPSBuffer1[17]);
       }

  }
  Delay1ms(300);//延时300毫秒

}


  GPS发送的一帧数据为(每秒发一次):$GPRMC,090729,V,3046.7484,N,10356.8178,E,,,171106,1.3,W*7D
$GPGGA,090729,3046.7484,N,10356.8178,E,0,00,,,M,,M,,*51
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,01,00,034,00,02,23,239,00,03,00,119,00,04,64,256,00*78
$PGRME,,M,,M,,M*00
$PGRMM,WGS 84*06

  
2楼:shaqidezhu 2006年12月19日14:36
 一一
GPS发送数据的位宽是10位的,tmod应该设定为0x58,我已经改了,还是不行,protues仿真结果已经出来了,实际的电路板lcd上什么都没有,直接 用printf(0,0,"a")这样的程序测试电路板是可用的

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:关于8位MCU的选型

[下一篇主题]:请教大家,单片机直接IO控制,电流放大用什么芯片好呢