⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps程序.c

📁 用于手机gps开发
💻 C
字号:
#include <stdio.h> 
#include <string.h> 
//#include <F:\aa\commmm\dos.h> 

#define LSB 0
#define MSB 1

#define RXR 0
#define TXR 0
#define IER 1
#define IIR 2
#define LCR 3
#define MCR 4
#define LSR 5
#define MSR 6

#define Com1_base 0x3f8
#define uchar unsigned char
volatile uchar i=0;
volatile uchar flag=0;
volatile uchar inputdata;
volatile uchar onInput = 0x00;
volatile uchar onOutput = 0x00;

uchar data [255];
uchar datad [255];

void interrupt (*OldVect)();
void interrupt SerialISR();

void InitCom()
{
    uchar inttemp;
    /*设置波特率什么的*/
    outportb(Com1_base+LCR,0x80);
    outportb(Com1_base+LSB,0x0c);
    outportb(Com1_base+MSB,0x00);
    outportb(Com1_base+LCR,0x03);
    outportb(Com1_base+IER,0x01);
    
    /*设置中断向量*/
    OldVect = getvect(0x0c);
    disable();
    inttemp = inportb(0x21)&0xef;
    outportb(0x21,inttemp);
    setvect(0x0c,SerialISR);
    enable();
}

void CloseCom()
{
    disable();
    outportb(Com1_base+IER,0x00);
    outportb(Com1_base,0x00);
    outportb(0x21,inportb(0x21)|~(0xef));       
    setvect(0x0c,OldVect);
}

void interrupt SerialISR()
{
    /*串口中断服务代码*/

   


    inputdata = inportb(Com1_base+RXR);
   if(inputData==10)
   { 
          flag==0;
          utportb(0x20,0x20);    /*中断结束的代码*/  
    }


   if(inputData=='$')
   {   
          flag=1;   
          i=1;  
               
          /*服务代码结束*/
          outportb(0x20,0x20);    /*中断结束的代码*/
    }
   if(flag==1)
   {  
          data[i]=inputdata; 
          i++;
    }

}

void SendChar(uchar key)
{
    while( ((inportb(Com1_base + LSR)) & 0x40) == 0);
        outportb(Com1_base + TXR,key);
}

void main()
{


    uchar key;
    InitCom();

while(1)
{ 
   if(data[3]=='R')
{   
  strcpy (data ,datad);
   
   for(int i=0;i<255;I++){
   if(datad[i]=='$') //帧头,SectionID为逗号计数器
    SectionID=0;
    if(datad[i]==10){ //帧尾
    }
    if(datad[i]==',') //逗号计数
    SectionID++;
else {
  switch(SectionID){
     case 1: //提取出时间
      m_sTime+=datad[i];
      printf("%s\n",m_sTime);
      break;
      case 2: //判断数据是否可信(当GPS天线能接收到有3颗GPS卫星时为A,可信)
      if(Datad[i]=='A')
//  GPSParam[m_nNumber].m_bValid=true;
      break;
      case 3: //提取出纬度
      m_sPositionY+=datad[i];
      break;
      case 5: //提取出经度
      m_sPositionX+=datad[i];
      break;
      case 9: //提取出日期
      m_sDate+=datad[i];
      break;
      default:
      break;
  }
}
}
} 
}
        CloseCom();
       printf("Bye~.\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -