打印
[AVR单片机]

AVR串口不能接受数据

[复制链接]
2138|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wdmhzh|  楼主 | 2014-1-3 18:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<mytouwenjian.h>
#pragma interrupt_handler read:12
uchar nn,mm=0;
void inst()//初始化函数
{
  UCSRA=0;
  UCSRB=(bit(RXCIE)|bit(RXEN)|bit(TXEN));//接收结束中断允许 发送接收使能
  UCSRC=bit(URSEL)|0X06;//8位数据 1停止位
  UBRRH=0;
  UBRRL=71;//波特率9600  11.0592晶振
  SREG|=bit(7);//开全局中断
  DDRD|=0X02;
}
void write(uchar date)
{
  while(!(UCSRA&bit(UDRE)));
  UDR=date;
  while(!(UCSRA&bit(TXC)));
  UCSRA|=bit(TXC);
}
void read()//接收中断程序
{
  UCSRB&=~bit(RXCIE);//关中断
  nn=UDR;
  mm=1;
  UCSRB|=bit(RXCIE);//开中断
}
void main()
{
  uchar kkk=0x55;
  inst();
  DDRA=0XFF;
  write(kkk);
  
  while(1)
  {
    if(mm)
    {write(nn);PORTA=nn;mm=0;}
  }
}

请高手看看上面这程序,串口调试助手能接收单片机发送的数据 但单片机不能接收数据 ,我做过实验,是没有进入接收中断程序,但把程序稍微改改,能进入发送中断程序 。 不知问题出在那??

相关帖子

沙发
huangxz| | 2014-1-3 22:33 | 只看该作者
程序不全吧,如果发送中断能产生,接收不产生,有可能是串口参数的问题,
仔细看看波特率等对不对

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4
板凳
NE5532| | 2014-1-4 11:21 | 只看该作者
先调发送,用PC机上的串口助手来看,所有数据都能发对了,说明波特率没问题,再调接收。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4
地板
古道热肠| | 2014-1-6 16:45 | 只看该作者
用的是什么开发环境?

使用特权

评论回复
5
古道热肠| | 2014-1-6 16:47 | 只看该作者
void write(uchar date)
{
  while(!(UCSRA&bit(UDRE)));
  UDR=date;
  while(!(UCSRA&bit(TXC)));
  UCSRA|=bit(TXC);
}这个写法可以不用这么复杂吧。什么型号的单片机,文档中通常用现成的底层驱动代码可以用。

使用特权

评论回复
6
wdmhzh|  楼主 | 2014-1-6 18:15 | 只看该作者
多谢各位老大,今天突然发现RXD引脚空闲时是低电平,用程序上拉,一切正常了,看来不能死盯手册呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

130

帖子

2

粉丝