关于单片机串口中断程序

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

当MCU接收到GPS发来的一个字节时触发中断,进入中断程序,(在进入中断程序时串口照样接收,中断程序是往串口缓存区读的数据,并且读数据时相当快的,永远不用担心还在读的时候数据被新来的给覆盖了)将该接收的字节提取出放在一个缓冲区内,缓冲区是你自己定义的一个数组或字符串,谁你喜好,如你所述GPS是每隔1秒发送一次数据的,此时你可以在主程序中设计当0.5秒没有接收到GPS所发的数据时,就将缓冲区内的数据读出处理,并清空缓冲区,这样其实中断程序只管接收数据,主函数只管处理数据,两不相冲。

串口接收中断进不去,如何解决?

是单片机的串口接收中断吗?要设置中断标志位呀,串口接收方式也要对呀,设置波特率。

SCON=0X50

EA=1

ES=1

TMOD=0X20

TH1=0xfd

TL1=0xfd

TR1=1

还要写串口中断程序,这样,当串口接收到数据就会进入中断程序了。

返回的数据都是一样的吧,都是第一个字符?

你应该定义一个全局变量记录接受的字节数,另外每次中断只能接受一个字节。

你的中断函数是完成接受数据的吧,怎么里面还有一句(倒数第四行)等待发送结束?

int i=0

void USART2_IRQHandler(void)

{

if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断发生接收中断

{

USART_ClearITPendingBit(USART2, USART_IT_RXNE) //清除中断标志

TxBuf1[i++]=USART_ReceiveData(USART2) //接收数据

if(i==8) //接受完8个字节数据

{

LCD_write_String(7,2,IntToStr(TxBuf1[4]))

i=0 //计数清零

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存