AVR ATmega16 单片机串口通信问题?谢谢

问题是这样:利用串口助手实现电脑和单片机的通信,电脑向单片机发送数据(字符),可以实现单字节和多字节通信,现在的问题是,本来我单片机设置的波特率为19200,串口助手也是19200,如果我串口助手改成其他波特率(比如2400,9600等),再给单片机发送数据,那单片机肯定是没有反应,问题是把波特率改回来19200之后,数据就发送不进去了,必须关掉串口助手再次打开才行,我程序中也没有写发送数据不对就不接受,或者说关闭中断什么的,问题是这和波特率有关,我波特率设置应该没问题,要不然也不会实现通信?请问为什么,怎样解决,谢谢⼀⼀***字符接受中断函数***⼀⼀void uart_RX(void){UCSRB&=~BIT(RXCIE);⼀⼀关闭接受结束中断rdata[num]=UDR;send_B(rdata[num]);num++;flag=1;UCSRB|=BIT(RXCIE);⼀⼀打开中断}⼀⼀***发送一个字符***⼀⼀void send_B(uchar data){ while(!(UCSRA&(BIT(UDRE)))); UDR=data; while(!(UCSRA&(BIT(TXC)))); UCSRA|=BIT(TXC);⼀⼀清零⼀⼀}
2026年09月23日 14:14
有3个网友回答
网友(1):

有没有试过在串口助手中关闭串口,然后重新打开串口试试?
你说的这种现象,很可能是串口助手本身的某个小bug造成的.
前提是,你之前在关闭和重新打开串口助手期间,没有对单片机进行复位啊之类的操作,才可以这样判断.

网友(2):

如果单片机一直处于正常接收状态,重新启动串口助手之后单片机能作出响应,说明是串口助手这方面的问题,或是软件的问题,或是操作系统的问题,与单片机无关。

网友(3):

发送频率太快了,加个延时