C51串口收发数据组求助

[复制链接]
1721|5
 楼主| lbb_1112 发表于 2015-12-14 11:47 | 显示全部楼层 |阅读模式
从串口接收一组以数据,数组以FF开头,如FF 00 11 22 33 44 55 66,一直接收。然后在满足某一条件时候发送出去,现在收到数据的顺序不对了,程序:

void r_t_data(void) interrupt 4        //串口中断接收数据组,共7个,首位为0xFF.
{
   uchar data_r,i;
           bit rec;
       
        if (RI==1)
        {
         data_r=SBUF;
         RI=0;
         if((data_r==0xff))
                 {i=0;
                 rd[i]=SBUF;
                 i++;
                 rec=1;        }
         if(rec==1)                           
                  {
                          if(i<7)
                           {rd[i]=SBUF;       
                          i++;
                          }
                         if(i>=7)
                         { rec=0;
                         }
                  }                 
                 }

       

               if(r==1)                       //如果r为1,则发送数组。在主程序里;
                        {ES=0;
                        zhuanhuan();                       
                        cai1=cai1+cai;
                        txdd(rd,7);
                        ES=1;       
                         r=0;
                        }

void txdd(uchar tt[],uchar n)                                           //RS232装tt数组里的的n个数据写出,
{  uchar i;
         for(i=0;i<n;i++)
         { SBUF=tt[i];
          while(!TI );
                TI=0;   
        }
}
                 
wh6ic 发表于 2015-12-14 12:06 | 显示全部楼层
第一个if后面少了个条件 或 括弧外的 else
 楼主| lbb_1112 发表于 2015-12-14 13:09 | 显示全部楼层
wh6ic 发表于 2015-12-14 12:06
第一个if后面少了个条件 或 括弧外的 else

谢谢,以解决,每次进中断时i都会重置,
dirtwillfly 发表于 2015-12-14 18:29 来自手机 | 显示全部楼层
lbb_1112 发表于 2015-12-14 13:09
谢谢,以解决,每次进中断时i都会重置,

问题解决了?
 楼主| lbb_1112 发表于 2015-12-15 10:23 | 显示全部楼层
本帖最后由 lbb_1112 于 2015-12-15 10:25 编辑

恩,解决了谢谢,V设全局变量了,不能每次进中断都定义void r_t_data(void) interrupt 4
{
   uchar data_r;
           bit rec;
loop:        if (RI==1)
        {
         data_r=SBUF;
         RI=0;
         {if(data_r==0xff)
                 {v=0;
                 rd[v]=SBUF;
                 v++;
                 rec=1;
                 tec=0;       
                 }
         else if(rec==1)
                  {
                          if(v<8)
                           {rd[v]=SBUF;       
                          v++;
                          }
                         if(v>=8)
                         { rec=0;
                         }
               
                  }
                  else
                  {
                   goto loop;
                  }                 
                 }
                 }

dirtwillfly 发表于 2015-12-15 10:32 | 显示全部楼层
lbb_1112 发表于 2015-12-15 10:23
恩,解决了谢谢,V设全局变量了,不能每次进中断都定义void r_t_data(void) interrupt 4
{
   uchar data_ ...

赞一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部