打印

一段C51程序看了三遍,不解

[复制链接]
1697|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwag|  楼主 | 2010-12-1 19:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void tx(void) interrupt 4
{
      EA=0;
      if(RI)
      {
            RI=0;
            switch(sx_step)
            {
             case 0:
             {
              if(SBUF==0x7e)
              {
               sx_step=1;
               tx_buf[0]=SBUF;
               pf=0x7e;
              }
              else
              {
               sxcl_flag=1;
              }
             }
             break;
             case 1:
             {
              if(SBUF==0xd0)
              {
               sx_step=2;
               tx_buf[1]=SBUF;
               pf^=0xd0;
              }
              else
              {
               sxcl_flag=1;
              }
             }
             break;
             case 2:
             {
              tx_buf[2]=SBUF;
              sx_step=3;
              pf^=SBUF;
             }
             break;
             case 3:
             {
              tx_buf[3]=SBUF;
              sx_step=4;
              pf^=SBUF;
             }
             break;
             case 4:
             {
              tx_buf[4]=SBUF;
              sx_step=5;
              pf^=SBUF;
             }
             break;
             case 5:
             {
              tx_buf[5]=SBUF;
              sx_step=6;
              pf^=SBUF;
             }
             break;
             case 6:
             {
              tx_buf[6]=SBUF;
              sx_step=7;
              pf^=SBUF;
             }
             break;
             case 7:
             {
              tx_buf[7]=SBUF;
              sx_step=8;
              pf^=SBUF;
             }
             break;
             case 8:
             {
              tx_buf[8]=SBUF;
              sx_step=9;
              pf^=SBUF;
             }
             break;
             case 9:
             {
              tx_buf[9]=SBUF;
              sx_step=10;
              pf^=SBUF;
             }
             break;
             case 10:
             {
              tx_buf[10]=SBUF;
              sx_step=11;
              pf^=SBUF;
             }
             break;
             case 11:
             {
              tx_buf[11]=SBUF;
              sx_step=12;
              pf^=SBUF;
             }
             break;
             case 12:
             {
              tx_buf[12]=SBUF;
              sx_step=13;
              pf^=SBUF;
             }
             break;
             case 13:
             {
              tx_buf[13]=SBUF;
              sx_step=14;
              pf^=SBUF;
             }
             break;
             case 14:
             {
              tx_buf[14]=SBUF;
              sx_step=15;
              pf^=SBUF;
             }
             break;
             case 15:
             {
              tx_buf[15]=SBUF;
              sx_step=16;
              pf^=SBUF;
             }
             break;
             case 16:
             {
              if((SBUF^pf)==0)
              {               
               ture_flag=1;
              }
              else
              {
               ture_flag=0;
              }
              sxcl_flag=1;
             }
             break;
             default:break;
            }
      }
这段程序我看来看去最后结果SBUF^pf好像不可能为0。而是:
case 0: pf = 7e sbuf = 7e
case 1: pf = ae sbuf = d0
case 2: pf = 7e sbuf = d0
case 3: pf = ae sbuf = d0
...
case 15:pf = ae sbuf = d0
然后case 16:SBUF^pf这样就不为0了,不知这个程序是否这样执行,还望高手点拨一下!

相关帖子

沙发
POINTRTOS| | 2010-12-1 20:37 | 只看该作者
很简单嘛!这是接收程序,总计帧长18字节,7e开头,第二字节为d0,随后为数据,最后为校验.

搞不懂你是如何看程序的.

使用特权

评论回复
板凳
lwag|  楼主 | 2010-12-1 20:55 | 只看该作者
高手点拨就是不一样吗!能否具体分析一下?另外帧长好象是17字节,不知我看得对不对。
最后校验应该是这一段吧:
case 16:
             {
              if((SBUF^pf)==0)
              {               
               ture_flag=1;
              }
              else
              {
               ture_flag=0;
              }
              sxcl_flag=1;
             }
             break;
             default:break;
            }
      }
能否具体分析一下,谢谢各位大师!

使用特权

评论回复
地板
l0p0c| | 2010-12-3 17:45 | 只看该作者
哈哈……

使用特权

评论回复
5
l0p0c| | 2010-12-3 17:45 | 只看该作者
你是该好好看看!

使用特权

评论回复
6
POINTRTOS| | 2010-12-5 00:54 | 只看该作者
呵呵.  1^2^3^5 = sum   在接收方重算一次,接收正确的话,一定也是  1^2^3^5 = sum  那么sum^sum==0.不知楼主知道了不!

使用特权

评论回复
7
lwag|  楼主 | 2010-12-5 09:53 | 只看该作者
谢谢指导。
光看代码不太好理解,经过几位解释后理解了,谢谢。

使用特权

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

本版积分规则

3

主题

163

帖子

2

粉丝