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

📄 main.c

📁 用于GPS模块冷启动和初始化用的,控制器为LPC2200系列
💻 C
字号:
/****************************************************************************
* 文 件 名:main.c---Chek_Info_GPS()
* 功    能:初试化GPSOEM后检测是否只输出RMC和ZDA语句。
* 说    明:测试程序
****************************************************************************/
#include  "config.h"
#include <stdio.h>

#define UART_BPS1 9600			// 定义通讯波特率
#define UART_BPS0 115200		// 定义通讯波特率

uint8 checkmark_m1 = 0;           // 检测数据接收标志,为1则表示接收到所要的数据
/******************COUNT的值需要修改****************************************/
uint8 count_m1 = 20;              // RMC数据接收时间标志,超过设定的时间限报错

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

    U1LCR = 0x83;						// DLAB = 1,可设置波特率
    Fdiv = (Fpclk / 16) / UART_BPS1;		// 设置波特率
    U1DLM = Fdiv / 256;							
    U1DLL = Fdiv % 256;						
    
    U1LCR = 0x03;

    //U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8个字节
    //U0IER = 0x01;                        // 使能RDA中断 
     
}
				
/****************************************************************************
* 名    称:UART0_Ini()
* 功    能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Init(void)
{  
    uint16 Fdiv;

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

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

/****************************************************************************
* 名    称:UART0_ErrSend()
* 功    能:向串口发送Error信息。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/

uint32 UART0_ErrSend(uint32 Num)
{     
  uint32 t; 
  
   t = 0;
   while(t<5)            // 发送5个0      
         {
          U0THR = 0;
          t++; 
          while( (U0LSR&0x40) == 0)
                   NULL;	    	  // 等待数据发送完毕
         } 
    
        
   U0THR = Num;           // 发送错误号      
   while( (U0LSR&0x40) == 0)
           NULL ;	  // 等待数据发送完毕

    return 0;
}

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



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


/****************************************************************************
* 名    称:Check_Err_GPS()---还未写!
* 功    能:当检测到不合要求的语句,报错,启动命令初始化函数Init_OEM_GPS()。
*           记住报错函数要设置好checkmark_m1的数值哦!
* 入口参数:无
* 出口参数:
****************************************************************************/
/*
uint8 Check_Err(void)
{  
   return 0;
}
*/
/****************************************************************************
* 名    称:main() - Chek_Info_GPS()
* 功    能:从串口UART0接收RMC数据,判断卫星是否定位
****************************************************************************/
int main(void)
{      
    PINSEL0 = 0x00050005;		    // 设置I/O连接到UART0,UART1
    
    UART1_Init();                   // 初始化UART1                  
    UART0_Init();
    
    while(checkmark_m1 == 0)	
     {                                   
      Check_Info();               // RMC接收函数              
     }
   
    return 0;
}

⌨️ 快捷键说明

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