zoukankan      html  css  js  c++  java
  • 嵌入式中对某一位清0或置1

    方法一:
    写成宏,方便移植
    #define setbit(x,y) x|=(1<<y) //将X的第Y位置1
    #define clrbit(x,y) x&=!(1<<y) //将X的第Y位清0
     
    方法二:
    C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作。通常要对硬件寄存器进行位设置,譬如,通过将AM186ER型80186处理器的中断屏蔽控制寄存器的第低6位设置为0(开中断2),最通用的做法是:
    #define INT_I2_MASK 0x0040 
    wTemp = inword(INT_MASK);
    outword(INT_MASK, wTemp &~INT_I2_MASK);

    而将该位设置为1的做法是:

    #define INT_I2_MASK 0x0040 
    wTemp = inword(INT_MASK);
    outword(INT_MASK, wTemp | INT_I2_MASK);

    判断该位是否为1的做法是:

    #define INT_I2_MASK 0x0040 
    wTemp = inword(INT_MASK);
    if(wTemp & INT_I2_MASK)
    {
    … /* 该位为1 */
    }

    方法三:
    int a|=(1<<x) //X就是某位需要置1的数字,如第四位置1为: a|=(1<<4)
    int b&=~(1<<x) //把某位置0
    x=x|0x0100    //把第三位置1
    x=x&0x1011    //把第三位置0
    #define BitGet(Number,pos) ((Number) >> (pos)&1)) //用宏得到某数的某位
    #define BitGet(Number,pos) ((Number) |= 1<<(pos)) //把某位置1
    #define BitGet(Number,pos) ((Number) &= ~(1<<(pos)) //把某位置0
    #define BitGet(Number,pos) ((Number) ^= 1<<(pos)) //把Number的POS位取反
    典型操作有:
    WTCON |=  (1 << 5) //WTCON的第五位清1 
    WTCON &= ~(1 << 5) //WTCON的第五位清0   

  • 相关阅读:
    周练2
    周练1
    周赛6(28)
    django中的orm:
    crm项目包含django创建虚拟环境:
    crm项目建表(django自带认证、分页、插件功能):
    自动化测试js代码打印类名:
    pages框架之豆瓣:
    mybatis反向生成实体类、dao层以及映射文件
    mybatis反向生成实体类、dao层以及映射文件
  • 原文地址:https://www.cnblogs.com/wgang171412/p/5157531.html
Copyright © 2011-2022 走看看