#include<stc12c5a.h>
#include<string.h>
#define S2RI 0x01
#define uint unsigned int
#define uchar unsigned char
uchar inter_ok=0;
uchar temp[80];
uchar gps_flag=0;
uchar rec_start=0;
uchar rec_stop=0;
uint num=0;
sbit LED7=P1^7;
sbit LED6=P1^6;
sbit LED5=P1^5;
sbit LED4=P1^4;
uchar tmp;
void uart2_init()
{
AUXR=0X10; //允許獨(dú)立波特率運(yùn)行
BRT=0XFD; // 波特率為9600
S2CON=0X50; //方式1,8位,可變波特率,S2REN=1,允許串口接收
AUXR1 = AUXR1&0xef ; // UART2在P1口
IE2=0X01; //允許串口2中斷
EA=1;
}
//void delayms(uint a)
// { uint b,c;
// for(b=a;b>0;b--)
// for(c=1222;c>0;c--) ;
// }
void init_time()
{
TMOD=0X20;
TH1=0xFD;
TL1=0XFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
/*接收中斷服務(wù)子程序*/
void GPS_interrupt() interrupt 8
{
IE2=0X00; //關(guān)串口2中斷
if(S2CON&S2RI)
{
tmp=S2BUF;
if ((tmp== '$')&&(gps_flag==0)) //當(dāng)?shù)谝蛔址麨?時(shí)開(kāi)始接收
{
rec_start=1;
rec_stop=0 ;
}
if(rec_start)
{
temp[num++]=tmp ;
if(tmp=='\n') //檢測(cè)到換行符時(shí)
{
temp[num]='\0'; //字符串結(jié)束
rec_start=0;
gps_flag=1;
rec_stop=1; //停止接收,轉(zhuǎn)出
num=0;
}
}
}
S2CON&=~S2RI; //清空串口2的接收標(biāo)志位
IE2=0X01; //開(kāi)串口2
}
void main()
{
int len,i;
init_time();
uart2_init();
while(1)
{
if(rec_stop)
{
TR0 = 1;
len=strlen(temp); // 得到字符串長(zhǎng)度
for(i=0;i<len;i++) //把數(shù)據(jù)傳到串口1
{
SBUF=temp[i];
while(!TI);
TI=0;
}
gps_flag=0;
rec_stop=0;
}
}
} |