打印

C51串口收发数据组求助

[复制链接]
1394|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都会重置,

问题解决了?

使用特权

评论回复
5
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;
                  }                 
                 }
                 }

使用特权

评论回复
6
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

粉丝