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);//清零//
}

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

你好,我有接着试了试,不是串口助手的问题,用其他串口调试软件也一样,我上面说的问题不完全对,单片机也需要重新上电,现在调试程序发现,用错误的波特率发送数据后,单片机响应中断,然后就回不来了,中断是接受结束中断,里边的程序是按照通常的格式编写的,我贴出来看看,谢谢

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

你好,我有接着试了试,不是串口助手的问题,用其他串口调试软件也一样,我上面说的问题不完全对,单片机也需要重新上电,现在调试程序发现,用错误的波特率发送数据后,单片机响应中断,然后就回不来了,中断是接受结束中断,里边的程序是按照通常的格式编写的,我贴出来看看,谢谢

第3个回答  2013-04-29
发送频率太快了,加个延时追问

老师你好,请问吧延时加在哪里?

本回答被提问者采纳

avr 单片机串口通信问题,求助
个人觉得可能是你的电脑串口出了问题,你可以用一根串口线插到电脑上,另一端将2,3脚短接,打开串口调试助手,看有没有数据接收,如果没有的话,应该是串口出了问题

AVR mega16 与PC 串口通信问题 我想通过PC端的串口助手发送一个十六进...
ATMEGA16单片机的UDR只能读取1次,所以接收时应该放入一个变量中,输出显示的时候将这个变量输出到PORTB端口。还有就是你这个data_temp在uchar receive(void)函数中根本就不会被赋值,在它前一条指令return UDR已经返回,data_temp=UDR;不会被执行 ...

ATMEGA16 用AVR studio无法连接ISP和JTAG
使用某些USB口的ISP或JTAG下载工具时,一旦单片机的熔丝位设置不对就无法下载程序了,你可以从这些方面考虑,有一种并口仿真器可以在这种情况下修改熔丝位的,当然,据说用有源晶振或外加信号源的方式也可以修改,你可以搜一下。

单片机和电脑串行通信出现乱码问题!!!各位客官给看一下,谢了
熔丝选项中应设置为外部振动器才行,否则单片机只是用内部不准确的8MHz RC振荡器,通信自然不准了。

零基础学AVR单片机:基于ATmega16、汇编及C语言内容简介
随后,章节转向AVR单片机的编程语言,包括C语言的运用,使学习者掌握这一重要技能。章节四至七深入剖析了ATmega16单片机的基本结构,从指令系统与汇编系统的讲解到I\/O端口和中断系统的操作,让读者对硬件操作有深入理解。章节八至十着重讲解了复位系统、睡眠模式设置以及定时器\/计数器O和1的功能,这些都是...

AVR 单片机 启用外部中断后,外部中断功能变成了复位功能,十分疑惑,求...
原因很可能是你的中断写错了,因为AVR单片机的编译器不统一,例如ICC、GCC等,就算同是GCC,不同的编译器对中断的写法也不统一,因此遇到这种情况先根据芯片型号,打开头文件,比对中断宏定义名。例如:Atmega16单片机,在ICC中串口中断可以写成这样:“void USART_Rx_Isr(void) ”;在AVR Studio中串口...

atmega16是几位的AVR单片机??百科说它是“低功耗8 位CMOS微控制器”,我...
是8位的AVR单片机

求大神解决AVR烧录问题,芯片类型是ATMEGA16A.(是最小系统) 配套买的下 ...
这个芯片是有熔丝位设置的,包括很多参数高低熔丝位,扩展熔丝位,以及LOCK BIT.如果你的这个芯片熔丝位已经烧录过不是默认值那就会造成你这种情况,你需要找到芯片中熔丝位的值去定义你的参数!

AVR单片机我无论给串口什么值,串口都返回80
一般是波特率不匹配吧,你在下载程序的时候注意配置一下熔丝位,CKSEL[3..0]

atmega 16单片机控制下的HC蓝牙模块可以与普通手机蓝牙进行通信吗??
原理上是这样的 在我手机上是这样的情况 蓝牙模块可以搜索到 也配对成功了 但是还没有连接上 只有下载了蓝牙串口助手之后连接才算连接上了 这毕竟跟手机对手机的连接不一样 至于支持塞班的软件我不清楚 大概很少吧

相似回答