关于单片机串口中断程序

关于单片机串口中断程序,第1张

当MCU接收到GPS发来的一个

字节

时触发中断,进入中断程序,(在进入中断程序时串口照样接收,中断程序是往串口

缓存

区读的数据,并且读数据时相当快的,永远不用担心还在读的时候数据被新来的给覆盖了)将该接收的字节提取出放在一个

缓冲区

内,缓冲区是你自己

定义

的一个

数组

字符串

,谁你喜好,如你所述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的,你自己去掉吧


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11513866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存