[AVR单片机] AVR串口不能接受数据

[复制链接]
2642|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 | 显示全部楼层
用的是什么开发环境?
古道热肠 发表于 2014-1-6 16:47 | 显示全部楼层
void write(uchar date)
{
  while(!(UCSRA&bit(UDRE)));
  UDR=date;
  while(!(UCSRA&bit(TXC)));
  UCSRA|=bit(TXC);
}这个写法可以不用这么复杂吧。什么型号的单片机,文档中通常用现成的底层驱动代码可以用。
 楼主| wdmhzh 发表于 2014-1-6 18:15 | 显示全部楼层
多谢各位老大,今天突然发现RXD引脚空闲时是低电平,用程序上拉,一切正常了,看来不能死盯手册呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

130

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部