嵌入式C中常见位操作
时间:2010-06-06 来源:guocai_yao
假设数是REGISTER(一般是某个寄存器),长度为LEN,pos为REGISTER的某一位,则0<=pos<=(LEN-1)
1. 用宏得到某数(一般是某个寄存器的某个状态位)的某位 。
#define BitGet(REGISTER,pos) ((REGISTER) >> (pos) & 1)) |
2. 把某位置1, 0<=pos<=LEN-1
#define BitSet(REGISTER,pos) ((REGISTER) |= 1<<(pos))
//或者将某些位同时置1,例如将第1、3、5位同时置1(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1)) |
3. 把某位清零0,0<=pos<=LEN-1
#define BitClr(REGISTER,pos) ((REGISTER) &= ~(1<<(pos))
//或者将某些位同时清0,例如将第0、2、4位同时清0(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1)) |
4. 把REGISTER的POS位取反,0<=pos<=LEN-1
#define BitRes(REGISTER,pos) ((REGISTER) ^= 1<<(pos))
//或者将某些位同时取反,例如将第1、2、4位同时取反(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1)) |