注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
yangxf1217的个人空间 https://home.eeworld.com.cn/space-uid-331045.html [收藏] [复制] [分享] [RSS]
日志

打开中断后不能执行while中的if语句了

已有 1143 次阅读2013-9-25 17:30

int   fbnum=0x00;
char fbdata[20];
char usart0_rdata;
char usart1_rdata;                                
//*************************************************************************
//  串口初始化服务子程序
//*************************************************************************
void usart0_init()
{
  //UCSR0A=0x00;                                 //单倍速模式
  UCSR0B=0x98;                                 //接收中断允许                              
  UCSR0C=(1<   UBRR0H=baud_h;                               //写波特率的值
  UBRR0L=baud_l;
}
void usart1_init()
{
  //UCSR1A=0x00;                                 //单倍速模式
  UCSR1B=0x98;                                 //接收中断允许                              
  UCSR1C=(1<   UBRR1H=baud_h;                               //写波特率的值
  UBRR1L=baud_l;
}
//*************************************************************************
//  数据处理服务子程序
//*************************************************************************
void datado(char getdata)
{
int i=0;
  if(getdata==\'a\')
   {
    for(i=0;i<=fbnum;i++)
      {
      UDR1=fbdata;
     delay_ms(10);
   }
    UDR1=usart1_rdata;
     delay_ms(10);
   }
}

//*************************************************************************
//  串口0相关中断服务子程序
//*************************************************************************
//数据接收中断向量
SIGNAL(SIG_USART0_RECV)            //中断服务程序
{
usart0_rdata=UDR0;           //将接收到的数据取出
fbdata[fbnum]=usart0_rdata;
fbnum++;
}

//*************************************************************************
//  串口1相关中断服务子程序
//*************************************************************************
//数据接收中断向量
SIGNAL(SIG_USART1_RECV)            //中断服务程序
{
usart1_rdata=UDR1;           //将接收到的数据取出
    datado(usart1_rdata);
}

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

  SREG|=0x80;                                //开启全局中断
  while(1)
  {
   delay_ms(1000);
    if(usart1_rdata==\'a\')
   {
      delay_ms(10);
      int i;
    for(i=0;i<=fbnum;i++)
      {
      UDR1=fbdata;
     delay_ms(10);
   }
   }
    else
   {
    UDR1=usart1_rdata;
    delay_ms(10);
   }
  
  }
}



我给串口0输入一串字符,串口1输入a结果在串口1中输出了这串字符,并且输出一个a
但是在主程序中却不停的输出ox00,我就奇了怪了。if语句没有执行啊。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章