找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1767|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

AVR單片機USART接受中斷不能夠進入

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:286977 發(fā)表于 2018-4-10 19:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       為啥不能進入接受中斷函數(shù)呢?reset多次后可能有一兩次能夠進入。沒有使用MPCM,多設(shè)備交流模式。
       我想用兩個AVR ATmega8A進行通訊,一個單片機發(fā)送數(shù)據(jù)重復(fù)發(fā)送0x00和0x01,接受數(shù)據(jù)的一個單片機將這個0x00和0x01用二極管顯示出來。用示波器看發(fā)送數(shù)據(jù)的單片機發(fā)出的波形沒有問題。但是接受數(shù)據(jù)的單片機,不能夠進入接受中斷。
連接方式:兩個單片機供電相同,發(fā)送數(shù)據(jù)的單片機TXD和接受數(shù)據(jù)單片機的RXD連接,發(fā)送數(shù)據(jù)的單片機RXD和接受數(shù)據(jù)單片機的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位數(shù)據(jù)位
UCSRC |=BIT(1);
UCSRC &=~BIT(0);//異步模式直接設(shè)置0

UBRRL =49;//波特率設(shè)置為1250
UBRRH=0X00;

UCSRB |=BIT(7);//接受完成中斷
UCSRB &=~BIT(6);//發(fā)送完成中斷
UCSRB &=~BIT(5);//數(shù)據(jù)寄存器空中斷
UCSRB |=BIT(4);//接受使能
UCSRB |=BIT(3);//發(fā)送使能
UCSRB |=BIT(2);//選擇8位數(shù)據(jù)位
UCSRB &=~BIT(1);//RXB8用不著就置為初始值
UCSRB &=~BIT(0);//TXB用不著也設(shè)置為初始值

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為高來檢驗是否收到數(shù)據(jù)
}

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





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表