微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于51中的 |=和&=

关于51中的 |=和&=

时间:10-02 整理:3721RD 点击:

void main()
{        unsigned char a,b,c;
        //自己做来记牢的,供大家参考
        //按位与“&”        必须都为‘1’ 否则为‘0’
        P2        =        0xff;               
        P2        &=        0x80;                // 'P2=P2&0X80' 意思相同        
                                                //1111 1111 & 1000 000        
                                                //结果P2.7=1,其余都为0 “1000 0000”

        //按位或“|” 必须都为‘0’ 否则为‘1’
        P0        =        0x00;                //改为P1/P2/P3都可以,就是P0调试会有不同
        P0        |=        0x11;                //'P0=P0|0x11' 意思相同
                                                //0000 0000 | 0001 0001
                                                //结果是0001 0001        P0.0和P0.4为‘1’

   //按位异或“^” 相同为‘0’ 不同为‘1’
   //暂无
   //按位取反“~” ‘1’为‘0’        ‘0’为‘1’
        P1        =        0x7d;                //0111,1101
        P1        =~        P1;                        //1000,0010
        
        //左移“>>” 右移"<<"        
        P3        =        0xf0;                //1111 0000                未左移前
        P3        =        P3>>4;                //0000 1111                左移后          P3>>=4; 意思相同
        P3        =        P3<<4;                //1111 0000                右移回          P3<<=4; 意思相同                        
               
        //循环左移_crol_(X,1)、循环右移_cror_(X,1)           
        P2        =        0xfe;                          //P2.0为‘0’                  1111 1110
        P2        =        _crol_(P2,1);         //左移1位 循环        1111 1101
        P2        =        _cror_(P2,1);        //右移1位 循环        1111 1110
                                                        //循环表示当P2.0左移到超过P2.7时,又跳到P2.0
        //高四位取反,低四位不变
        P2        =        0xfa;                                                 //1111 1010          执行前
        P2 = ((~P2) & 0xF0) | (P2 & 0x0F);        //0000 1010          执行后
        //(P2 & 0x0F)                1111 1010 & 0000 1111 = 0000 1010
        //((~P2) & 0xF0)        0000 0101 & 1111 0000 = 0000 0000        
        //0x00|0x0a=0x0a
        //以下也可以高4位取反,低4位不变
        P2        =        0x37;                    //0011 0111
        a        =        P2>>4;                    //0000 0011
        a        =~        a;                            //1111 1100
        a        <<=        4;                                //1100 0000
        b        =        P2<<4;                        //0111 0000
        b        >>=        4;                                //0000 0111
        a        =        a|b;                        //1100 0111
        
        //取得高4位,或者取得低4位
        P2        =        0x3f;
        a        =        P2>>4;        //得到高4位
        b        =        P2<<4;        //得到低4位
        //也可以是下面这样
        a        =        P2;
        b        =        a/16;        //得到高4位
        c        =        a%16;        //得到低4位
        //在或者
        b = (a & 0xF0) >> 4;     //得到高四位
        c = (a & 0x0F);          //得到低四位        
        
               
}

意思是P2=P2|0x01
或者am=am&0x01
你多来问几次就能记牢的了

其实刚发完贴,5秒后,我就记得了- -!
估计下次又记不得,或者把&跟|搞乱

上面的
       a        =        P2;
        b        =        a/16;        //得到高4位
        c        =        a%16;        //得到低4位
abc得改为INT型

与    就是强制某些位清0
或    就是强制某些位置1
异或 就是把某些位取反

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top