打印
[AVR单片机]

ATMEGA16串口接收,第二个指令无法覆盖第一个

[复制链接]
1137|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
P60914047|  楼主 | 2011-7-27 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想问一下,我编写的串口中断接收!为什么接收第一组命令,执行后。再发第二条指令,却不执行!!!
下面是一些截取的程序。。。。。恳请大家帮忙
/*串口接收数据中断函数*/
i 是全局变量
。。。。。。。
。。。。。
..........
void uart_rx()
{
   
    UCSRB&=~BIT(RXCIE);//禁止结束接收中断
rdata=UDR;   //接收数据
if(rdata == 0xff && i == 0) //如果第一个字节为0xff
{
   rec = rdata;
   i++;
   recflag = 1;
}
else
{
  if(recflag)
  {
   rec = rdata;
   i++;
   if(i == 7)
   {
    recfinish = 1;//接收7字节完成,置标志位
    i = 0;
    recflag = 0;
   }
  }
}
UCSRB|=BIT(RXCIE);//使能结束接收中断
}
........
.......
........
void main()
{
    uint sum = 0;
port_init();
duoji_init();
    uart_init(9600);//波特率为9600bps
while(1)
{  
    if(recfinish)
    {
     for(i = 1; i < 6; i++ )
  {
    sum+= rec;
  }
  if(sum == rec[6]) //校验
  {
   if(rec[2] != 0)
   {
    adjust_lens(rec[2]);//调整镜头参数
   }
   else if(rec[3] != 0)
   {
    adjust_location(rec[3]);//调整云台位置
   }
   
  }
  else break;
  recfinish = 0;
  sum = 0;
    }
}

   
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝