ATmeg128a 串口问题

2019-03-24 20:36发布

各位大侠,我的串口很奇怪,我先给串口0输入一串字符,然后给串口1输入字符‘a';串口1会先输出一个‘a',然后就没有输出我想要的数组里的数,反而一直输出’y'。我很气愤,特发此贴。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
yangxf1217
2019-03-25 01:18
//***********************************************************************
//   包含文件
//***********************************************************************

int   fbcount=0x00,flag1=0x00,flag2=0x00,i=0x00;

char fbdata[20];

char usart1_rdata;                                 
char usart_ct_data='a';
char usart_fb_data=0;

void usart0_init()
{
  UCSR0A=0x00;                                 //单倍速模式
  UCSR0B=0x98;                                 //接收中断允许                              
  UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);              //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
  UBRR0H=baud_h;                               //写波特率的值
  UBRR0L=baud_l;
}

void usart1_init()
{
  UCSR1A=0x00;                                 //单倍速模式
  UCSR1B=0x98;                                 //接收中断允许                              
  UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);              //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
  UBRR1H=baud_h;                               //写波特率的值
  UBRR1L=baud_l;
}





//*************************************************************************
//  串口0相关中断服务子程序
//*************************************************************************

//数据发送结束中断向量
SIGNAL(SIG_USART0_TRANS)             //中断服务程序
{
   delay_ms(1);                   //相关操作
}

SIGNAL(SIG_USART0_RECV)            //中断服务程序
{
     usart_fb_data=UDR0;           //将接收到的数据取出
fbdata[fbcount]=usart_fb_data;
fbcount++;
}


//*************************************************************************
//  串口1相关中断服务子程序
//*************************************************************************


//数据发送结束中断向量
SIGNAL(SIG_USART1_TRANS)             //中断服务程序
{
   delay_ms(1);                   //相关操作
}

SIGNAL(SIG_USART1_RECV)            //中断服务程序
{
    usart1_rdata=UDR1;           //将接收到的数据取出
    UDR1=usart1_rdata;
}


//*************************************************************************
//   主程序
//*************************************************************************
void main()
{
  usart0_init();                             //usart0串口初始化
  usart1_init();                              //usart1串口初始化配置

  SREG|=0x80;                                //开启全局中断

  while(1)
  {

  switch(usart1_rdata)
  {

     case 'a': UDR1=fbdata[0];break;
     default: UDR1='y';break;
}

  }
}

一周热门 更多>