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

📄 main.c

📁 用于GPS模块冷启动和初始化用的,控制器为LPC2200系列
💻 C
字号:
/****************************************************************************
* 文 件 名:main.c---RMC_RCV_GPS()
* 功    能:从串口接收RMC语句,确定卫星是否定位。
* 说    明:测试程序,开发时间2007年4月23日
****************************************************************************/
#include  "config.h"

#define UART_BPS 9600			// 定义通讯波特率

uint8 CheckMark = 0;           // 检测数据接收标志,为1则表示接收到所要的数据
uint8 COUNT = 10;             // RMC数据接收时间标志,超过设定的时间限报错

/****************************************************************************
* 名    称:UART0_Ini()
* 功    能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为4800
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Init(void)
{  
    uint16 Fdiv;

    U0LCR = 0x83;						// DLAB = 1,可设置波特率
    Fdiv = (Fpclk / 16) / UART_BPS;		// 设置波特率
    U0DLM = Fdiv / 256;							
    U0DLL = Fdiv % 256;						
    
    U0LCR = 0x03;

    //U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8个字节
    //U0IER = 0x01;                        // 使能RDA中断 
     
}
				


/****************************************************************************
* 名    称:Check_Info_GPS()
* 功    能:检测初始化后接收到的数据是否为RMC和ZDA语句,如不是报错;如是跳出
* 入口参数:无
* 出口参数:
****************************************************************************/
uint8 Check_Info_GPS(void)
{  
   uint8 data = 0;
   
   while (COUNT != 0)
    {
     if ((U0LSR&0x01) == 1)      // 判断是否收到有效数据
         { 
           data = U0RBR;
           
           if (data == 0x24)     // 判断是否接收到字头$
               RCV_RZ_GPS();      // 进入到RMC和ZDA接收函数      
          }          
    }
   
     COUNT = 10;                 // 恢复计数器的数值  
  // if (RCVMark == 0) 
  //       RMC_RCV_Err();
        
   return 0;
}



/****************************************************************************
* 名    称:RCV_RZ_GPS()
* 功    能:从串口接收确定是否为RMC和ZDA 语句,使用查询方式
* 入口参数:无
* 出口参数:
****************************************************************************/
uint8 RMC_RZ_GPS(void)
{  
   uint8 data = 0;
   uint8 t = 3;
   
   while(t != 0)
    {
     if ((U0LSR&0x01) == 1)       // 判断是否收到有效数据
         { 
           data = U0RBR;          
           t--;         
          }
       
     }
       
     if (data == 0x52)              // 判断是否接受到R    
            {                       
             COUNT--;
             CheckMark = 1;
            }
      
      else if(data == 0x5A)         // 判断是否接受到Z 
             {        
               COUNT--;
               CheckMark = 1;   
             }
      
           else 
              { 
               Check_Err_GPS();       // 接收到的不是所要求的语句
               COUNT = 0;             // 清零计数器,退出循环
               CheckMark = 0;         // 重新设置接收标志
              }
           
   return 0;
}


/****************************************************************************
* 名    称:Check_Err_GPS()---还未写!
* 功    能:当检测到不合要求的语句,报错,启动命令初始化函数Init_OEM_GPS()。
*           记住报错函数要设置好CheckMark的数值哦!
* 入口参数:无
* 出口参数:
****************************************************************************/
uint8 Check_Err_GPS(void)
{  
   return 0;
}




/****************************************************************************
* 名    称:main()
* 功    能:从串口UART0接收RMC数据,判断卫星是否定位
****************************************************************************/
uint8 main(void)
{      
    PINSEL0 = 0x00000004;		    // 设置I/O连接到UART0
    
    UART0_Init();                   // 初始化UART0                  
    
    while(CheckMark == 0)	
     {                                   
      Check_Info_GPS();               // RMC接收函数              
     }
   
    return 0;
}

⌨️ 快捷键说明

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