📄 gpsdiv.c
字号:
#define UART_GLOBAL
#include "config.h"
static unsigned char send_byte_over;
/*******************************************************************************
程序名: vUART_Init
说 明: UART初始化程序,包括设置16C554和设置NMEA格式 ,115200
********************************************************************************/
void vGPS_Init(void)
{
EA = 0;
TR1 = 0;
ET1 = 0;
PCON = 0x80; //double
TMOD &= 0x0F;
TMOD |= 0x20; //timer 1 , mode 2
TH1 = PERIODH1;
TL1 = PERIODL1;
SCON = 0x50; //SERIAL 1, RECE ENABLE
ES = 1; //ENABLE UART INT
PS = 0; //PRIORITY
//--------------
chRece_Over = 0;
nBlock_Count = 1;
chBlock_Over = 0;
chBlock_Start= 0;
rUARTRece.chLen = 0;
//----------
TR1 = 1;
EA = 1;
vSoftTimer_Run(UART_NAK, UART_NAK_TIME, vUART_TimeOut_Nak); //没有应答, 重复发送
}
/*******************************************************************************
程序名: vUART_Int
说 明: UART中断服务程序,将接收到的数据保存到滚筒中
********************************************************************************/
void vUART_Int (void) interrupt SIO_VECTOR using 1
{
unsigned char chTemp;
if(RI)
{
chTemp = SBUF;
///////////////////////////////////////////////////////////////////////////
switch(rUARTRece.chLen)
{
case 0:
if(chTemp == 0x01) //一条数据开始
chBlock_Start = 0x01;
else if(chTemp == 0x04) //文件发送结束
chRece_Over = 0x01;
break;
case 131:
rUARTRece.chBuff[rUARTRece.chLen-1] = chTemp;
rUARTRece.chLen = 0x00;
chBlock_Over = 0x01;
chBlock_Start = 0x00;
break;
default: rUARTRece.chBuff[rUARTRece.chLen-1] = chTemp;
}
if(chBlock_Start)
rUARTRece.chLen++;
RI = 0;
}
if(TI)
{
send_byte_over=1;
TI=0;
}
}
/*******************************************************************************
chGPS_SendChar
说 明:从GPS滚筒中取出一个字符
********************************************************************************/
void vGPS_SendChar(unsigned char chTemp)
{
send_byte_over = 0;
SBUF = chTemp;
while(!send_byte_over) ; //如果没有发送完毕,等
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -