打印

一个51语言c语言程序的问题

[复制链接]
2875|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luojing268|  楼主 | 2012-12-28 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到一个程序,里面有个if(P),关于if(P)的问题,程序如下:
void transmit_chx(void)
{
        static data unsigned char ch0_pt,ch1_pt,ch2_pt,ch3_pt;
        unsigned char oddaa,i,*p;
        if (ch0_outbuff[0]==0xff)
        {
                for (i=0;i<COMM_NUM;i++)
                {
                        ch0_pt++;
                        if (ch0_pt>=COMM_NUM) ch0_pt=0;
                        p=&ch0_queue[ch0_pt][0];
                        if (p[0]!=0xff)
                        {
                                oddaa  = p[0];                                    // command
                                oddaa ^= ch0_outbuff[1]=p[1];                // IDH
                                oddaa ^= ch0_outbuff[2]=p[2];                // IDM
                                oddaa ^= ch0_outbuff[3]=p[3];                // IDL
                                oddaa ^= ch0_outbuff[4]=p[4];                // data1
                                oddaa ^= ch0_outbuff[5]=p[5]&0x7f;        // data2
                                ACC = oddaa;
                                if (P)
                                {
                                        ch0_outbuff[5]|=0x80;
                                }
                                ch0_outbuff[0]=p[0];
                                if (p[0]==0x10) p[0]= 0xff;
                                if (p[0]==0x18)
                                {
                                    szcan_t_ch0++;
                                    if (szcan_t_ch0>5)
                                    {
                                       szcan_t_ch0=0;
                                       p[0]= 0xff;
                                 }
                            }
                                break;
                        }
                }
        }
问题1
关于oddaa,把一个数组第一个数辅给oddaa,然后不断异或,最后在和0x7f与,这样计算下来的值是校验的吗?
问题2
如果是校验,那么在哪里判断是否正确吗?是后面if(P)吗?
问题3
如果是if(P)那么if语句判断的是什么,是p指向的数组的第一个数吗?还是P指PSW ?
最好能讲下这段程序是怎么执行的,谢谢!!!!!!!!!!!!!!!!!

相关帖子

沙发
zf_015820| | 2012-12-28 10:52 | 只看该作者
问题1
关于oddaa,把一个数组第一个数辅给oddaa,然后不断异或,最后在和0x7f与,这样计算下来的值是校验的吗?
------这个,就是在做校验动作;

使用特权

评论回复
板凳
zf_015820| | 2012-12-28 10:53 | 只看该作者
问题2
如果是校验,那么在哪里判断是否正确吗?是后面if(P)吗?
-------是拿去给ACC用了,应该还有其他的程序, 主要是:你要搞清楚:这个校验的规则是什么?是FCS还是CRC校验?最后,才能去判断是否正确与否的问题;

使用特权

评论回复
地板
zf_015820| | 2012-12-28 10:56 | 只看该作者
问题3
如果是if(P)那么if语句判断的是什么,是p指向的数组的第一个数吗?还是P指PSW ?
-------P是指向数组的第一个数,就是判断数组第一个元素内是否有值;

建议:下点功夫研究下,或者说:你为什么要了解这个东东?想帮你,也不你到底要做什么功能 ?

使用特权

评论回复
5
luojing268|  楼主 | 2013-1-1 18:34 | 只看该作者
等待高手回复

使用特权

评论回复
6
赤铸| | 2013-6-2 12:44 | 只看该作者
大写P是系统定义的位变量,PSW的奇偶校验位

使用特权

评论回复
7
黑夜彩虹| | 2013-10-17 11:07 | 只看该作者
看不懂程序,但sbit P    = 0xD0;51头文件的内容

使用特权

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

本版积分规则

个人签名:51 msp430 stm32 学习中 求关注

14

主题

104

帖子

1

粉丝