?? receive.c
字號:
// LCD_write_char(4,0,Knots%10+0x30);
// }
// for(i=0;i<5;i++){
// LCD_write_char(11+i,0,angle);
// }
}
buf_full&=~0x04;
dsp_count=0;
}
}
//系統初始化
void sys_init()
{
// unsigned char i;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD = 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1=TL1=0xfa; /* TH1: reload value for 4800 baud @ 11.059MHz */
TR1 = 1; /* TR1: timer 1 run */
Init_Lcd12864(); //初始化LCD
ResetCursor(0,1);
printf("GPS Monitor V1.2");
ClearAS();
IE=0x90; //開總中斷、串口中斷
}
//串口接收中斷
void uart(void) interrupt 4
{
unsigned char tmp;
if(RI){
tmp=SBUF;
switch(tmp)
{
case '$':
cmd_number=0; //命令類型清空
mode=1; //接收命令模式
byte_count=0; //接收位數清空
break;
case ',':
seg_count++; //逗號計數加1
byte_count=0;
break;
case '*':
switch(cmd_number)
{
case 1:
buf_full|=0x01;
break;
case 2:
buf_full|=0x02;
break;
case 3:
buf_full|=0x04;
break;
}
mode=0;
break;
default:
if(mode==1){
//命令種類判斷
cmd[byte_count]=tmp; //接收字符放入類型緩存
if(byte_count>=4){ //如果類型數據接收完畢,判斷類型
if(cmd[0]=='G'){
if(cmd[1]=='P'){
if(cmd[2]=='G'){
if(cmd[3]=='G'){
if(cmd[4]=='A'){
cmd_number=1;
mode=2;
seg_count=0;
byte_count=0;
}
}
else if(cmd[3]=='S'){
if(cmd[4]=='V'){
cmd_number=2;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
else if(cmd[2]=='R'){
if(cmd[3]=='M'){
if(cmd[4]=='C'){
cmd_number=3;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
}
else if(mode==2){
//接收數據處理
switch (cmd_number){
case 1: //類型1數據接收。GPGGA
// $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18
switch(seg_count){
case 2: //緯度處理
if(byte_count<9){
WD[byte_count]=tmp;
}
break;
case 3: //緯度方向處理
if(byte_count<1){
WD_a=tmp;
}
break;
case 4: //經度處理
if(byte_count<10){
JD[byte_count]=tmp;
}
break;
case 5: //經度方向處理
if(byte_count<1){
JD_a=tmp;
}
break;
case 6: //定位判斷
if(byte_count<1){
lock=tmp;
}
break;
case 7: //定位使用的衛星數
if(byte_count<2){
use_sat[byte_count]=tmp;
}
break;
case 9: //高度處理
if(byte_count<6){
high[byte_count]=tmp;
}
break;
}
break;
case 2: //類型2數據接收。GPGSV
//$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
switch(seg_count){
case 3: //天空中的衛星總數
if(byte_count<2){
total_sat[byte_count]=tmp;
}
break;
}
break;
case 3: //類型3數據接收。GPRMC
//$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10
switch(seg_count){
case 1:
if(byte_count<6){ //時間處理
time[byte_count]=tmp;
}
break;
case 7: //速度處理
if(byte_count<5){
speed[byte_count]=tmp;
}
break;
case 8: //方位角處理
if(byte_count<5){
angle[byte_count]=tmp;
}
break;
}
break;
}
}
byte_count++; //接收數位加1
break;
}
}
RI=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -