字节
时触发中断,进入中断程序,(在进入中断程序时串口照样接收,中断程序是往串口
缓存
区读的数据,并且读数据时相当快的,永远不用担心还在读的时候数据被新来的给覆盖了)将该接收的字节提取出放在一个
内,缓冲区是你自己
定义
的一个
数组
或
字符串
,谁你喜好,如你所述GPS是每隔1秒发送一次数据的,此时你可以在
主程序
中设计当0.5秒没有接收到GPS所发的数据时,就将缓冲区内的数据读出处理,并清空缓冲区,这样其实中断程序只管
接收数据
,
主函数
只管处理数据,两不相冲。
void sys_init(void)//UART TIMER0初始化{
TH0 = 0xB8TL0 = 0x00//20ms的时钟基准
//串口中断
TI=0
RI=0
SCON=0x50 //选用方式1
TMOD=0x20
TMOD = (TMOD &0xf0) | 1//MODE 1
TH1=0xfd //波特率为9600
TL1=0xfd
PCON=0x00 //倍频0x80
IE = 0x90 // EA ELVD EADC ES ET1 EX1 ET0 EX0
// IE = 0xb0 // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1 //enable TIMER1
ES=1 //开串口开断
TR0=1//串口接收中断
ET0=0 //T0 中断
ET1=0 // T1 中断
IT0=1EX0=1
EA=1
timer_1S_cnt=0
IGT=1
}
void receive(void) interrupt 4 using 1
{
if(RI)
{
// if(Rx<RxIn)
{*pBuf=SBUFpBuf++
// *(SystemBuf+Rx)=SBUF
// SystemBuf[Rx]=SBUF
Rx++
}
RI=0
}
}
有开定时器和AD的,你自己去掉吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)