#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define LSR0 XBYTE[0x7DFF]//串口a的线路状态寄存器的地址
#define LSR1 XBYTE[0xBDFF]//串口b的线路状态寄存器的地址
//#define LSR0 XBYTE[0x8500]//串口a的线路状态寄存器的地址
//#define LSR1 XBYTE[0x4500]//串口b的线路状态寄存器的地址
sbit RESET=P3^0;
//sbit P1_1=P1^1;
//sbit P1_2=P1^2;
//sbit P1_3=P1^3;
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC7=ACC^7;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
bit flag;
uchar ii,j,ch,temp;
uchar longitude[11];
uchar latitude[11];
uchar GPGGA[]={"$GPGGA,"};
void delay()
{
unsigned int i,j;
for(i=0;i<100;i++)
for(j=0;j<1000;j++);
}
void tl16c554_inita()//串口a的初始化
{
XBYTE[0x7BFF]=0x80;//置除数访问锁存器标志DLAB=1
XBYTE[0x78FF]=0x0c;//设置波特率为9600bps
XBYTE[0x79FF]=0x00;//波特率因子寄存器高位为0
_nop_();
XBYTE[0x7BFF]=0x03;//无奇偶校验,停止位1,8位数据
XBYTE[0x7AFF]=0x01;//使能FIFO,置接收触发字节数
XBYTE[0x7CFF]=0x08;
XBYTE[0x79FF]=0x03;//接收中断使能,发送字符为空中断使能
temp=XBYTE[0x78FF];//空读一次
flag=1;
while(flag)
{
ACC=LSR0;//检查接收状态
if(ACC0)
{
ACC=XBYTE[0x7DFF];//读空
flag=1;
}
else flag=0;
}
}
void tl16c554_initb()//串口b的初始化
{
XBYTE[0x8013]=0x80;//置除数访问锁存器标志DLAB=1
XBYTE[0x8010]=0x18;//设置波特率为4800bps
XBYTE[0x8011]=0x00;//波特率因子寄存器高位为0
XBYTE[0x8013]=0x03;//没有校验,停止位1,8位数据
XBYTE[0x8012]=0x01;//使能FIFO,置接收触发字节数01
XBYTE[0x8011]=0x01;//接收中断使能
temp=XBYTE[0x8010];//空读一次
flag=1;
while(flag)
{
ACC=LSR1;//检查接收状态
if(ACC0)
{
ACC=XBYTE[0x8010];//读空
flag=1;
}
else flag=0;
}
}
//********************************a的发送,从csa口发送
void a_send(uchar ch)
{
ACC=LSR0;
if(ACC5&&ACC6)//检测lsr0的第五位是否为1,thr中是否为空
{
XBYTE[0x7DFF]=ch;
flag=1;
}
else
{
flag=0;
}
}
//*********************************************a的接收
uchar a_rec()
{
ACC=LSR0;
if(ACC0)
{
flag=1;
ch=XBYTE[0x78FF];
return(ch);
}
else
{
flag=0;
}
}
//*********************************************b的接收
uchar b_rec()
{
ACC=LSR1;
if(ACC0)
{
flag=1;
ch=XBYTE[0x8010];
return(ch);
}
else
{
flag=0;
}
}
void main()
{
unsigned char i;
RESET=0;
RESET=1;
for(i=20;i>0;i--);
RESET=0;
tl16c554_inita();
//tl16c554_initb();
flag=1;
a_send(0X55);
while(1);
}
这是我的程序。大侠帮忙看看
|