原创 C语言中常见的置位操作

2011-1-5 22:17 11343 7 8 分类: MCU/ 嵌入式
如何对某一位置0或者置1?
方法一:


写成宏,方便移植
#define setbit(x,y) x|=(1<<y) //将X的第Y位置1
#define clrbit(x,y) x&=!(1<<y) //将X的第Y位清0

 

#define clrbit(x,y) x&=!(1<<y) //将X的第Y位清0
是错错错错错错的
害人不浅啊,也害了我自己

不知道大家发现没有
! and ~
正确应该为#define clrbit(x,y) x&=~(1<<y)

 

方法二:

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 
 

上述方法在嵌入式系统的编程中是非常常见的,我们需要牢固掌握。

文章评论1条评论)

登录后参与讨论

用户106445 2011-1-5 22:15

#define clrbit(x,y) x&=!(1<
相关推荐阅读
用户106445 2008-12-25 19:17
ST-BUS基本原理
 ST-BUS基本原理    ST-BUS(Serial Telecom BUS,串行通信总线)是卓联半导体公司根据电信应用的需要而定义的一种重要的通信设备内部总线通信协议,它可以将多路信息(包括音频...
用户106445 2008-12-25 18:58
无源晶体与有源晶振的区别、应用范围及用法
无源晶体与有源晶振的区别、应用范围及用法:1、无源晶体——无源晶体需要用DSP片内的振荡器,在datasheet上有建议的连接方法。无源晶体没有电压的问题,信号电平是可变的,也就是说是根据起振电路来决...
用户106445 2008-12-13 20:39
更改XP收藏夹的位置
用户的收藏的网址系统默认存放在C:\Documents and Settings\username \收藏夹 里。但有时因为种种原因要重做系统时,应该把这个文件复制出来,在做完系统后把这个文件夹还原回...
用户106445 2008-12-05 22:24
令人头晕的指针
某种类型名   *)另一种类型指针变量名: 这个只是转换了指针类型。 *(某种类型名*)&另一种类型指针变量名     这个将   另一种类型指针的指针(地址)   转换成了   某种类型指针...
用户106445 2008-12-05 22:22
指针不完全手册2
第二节 指针的应用<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />1、 指针与变量定...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条