📄 main.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 + -