找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1386|回复: 0
打印 上一主题 下一主题
收起左侧

AVR单片机USART接受中断不能够进入

[复制链接]
跳转到指定楼层
楼主
ID:286977 发表于 2018-4-10 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       为啥不能进入接受中断函数呢?reset多次后可能有一两次能够进入。没有使用MPCM,多设备交流模式。
       我想用两个AVR ATmega8A进行通讯,一个单片机发送数据重复发送0x00和0x01,接受数据的一个单片机将这个0x00和0x01用二极管显示出来。用示波器看发送数据的单片机发出的波形没有问题。但是接受数据的单片机,不能够进入接受中断。
连接方式:两个单片机供电相同,发送数据的单片机TXD和接受数据单片机的RXD连接,发送数据的单片机RXD和接受数据单片机的TXD连接,以及指示                 二极管io口的连接。
接受单片机的程序如下
#include<iom8v.h>
#include<macros.h>

unsigned char rdata;
unsigned char flag;


void io_init(void)
{
DDRD &=~BIT(0);//RXD
DDRD |=BIT(1);//TXD
PORTD |=BIT(0);
SFIOR &=~BIT(2);

DDRC=0XFF;
}

void usart_init(void)
{
UCSRC |=BIT(7);//选择UCSRC进行操作
UCSRC &=~BIT(6);//异步模式
UCSRC &=~BIT(5);//奇偶校验禁止
UCSRC &=~BIT(4);
UCSRC &=~BIT(3);//一个stop bit
UCSRC |=BIT(2);//选择8位数据位
UCSRC |=BIT(1);
UCSRC &=~BIT(0);//异步模式直接设置0

UBRRL =49;//波特率设置为1250
UBRRH=0X00;

UCSRB |=BIT(7);//接受完成中断
UCSRB &=~BIT(6);//发送完成中断
UCSRB &=~BIT(5);//数据寄存器空中断
UCSRB |=BIT(4);//接受使能
UCSRB |=BIT(3);//发送使能
UCSRB |=BIT(2);//选择8位数据位
UCSRB &=~BIT(1);//RXB8用不着就置为初始值
UCSRB &=~BIT(0);//TXB用不着也设置为初始值

UCSRA |=~BIT(1);//正常不倍速的模式

SREG |=BIT(7);
}


#pragma interrupt_handler inter_rxc:12
void inter_rxc(void)
{
//进入中断会清除标志位,ATmega8A中,只有该位置位
//才能进入中断,所以下面的可以不要,
//while(!(UCSRA&BIT(7)))  
//{}
rdata=UDR;
//rdata &=0X01;
//rdata ^=0X01;
PORTC |=BIT(0);//令PC0为高来检验是否收到数据
}

void main(void)
{
io_init();
usart_init();
while(1)
  {
  PORTC |=BIT(1);
  }
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表