寄存器的一些操作
2017-09-05 20:02
736 查看
目录
目录将寄存器中的某一位置1或则清0
其它位重置
其它位不变
判断寄存器某一位为0还是1
将寄存器的某一位取反1-0 0-1
寄存器合并
方法一 有效位之外其他位均为0可以将其先适当移位操作然后在运算
方法二 如果这2个数除了有效位之外其他位需要保留为1方法是先与适当的数之后2个数
寄存器拆分
逻辑移位
将寄存器中的某一位置1或则清0
其它位重置int l_data; void SetBit(int pos)//将某一位置位的操作 { if((pos >= 0) && (pos <= 31)) { l_data |= BIT_MASK(pos);//BIT_MASK是 掩码。就是除了这一位其余位均为0 } } void ClrBit(int pos)//将某一位清0的操作 { if((pos >= 0) && (pos <= 31)) { l_data &= ~BIT_MASK(pos); } }
其它位不变
WTCON |= (1 << 5) //WTCON的第五位清1 WTCON &= ~(1 << 5) //WTCON的第五位清0
注意:这两种方法经常用于定义宏,很方便。#define INT_I2_MASK 0x0040
判断寄存器某一位为0还是1
bool is1(int pos)//判断某一位是否为1 { if((pos >= 0) && (pos <= 31)) { if(l_data & (BIT_MASK(pos)) == 0x1) //BIT_MASK是掩码。就是除了这一位其余位均为0 { return true; } else { return false; } } }
将寄存器的某一位取反(1->0 ; 0->1)
void ReverseBit(int pos)//将某一位取反 { if((pos >= 0) && (pos <= 31)) { l_data ^= BIT_MASK(pos); } }
寄存器合并
保留2个数的不同部分,将它们合并为1个数方法一: 有效位之外,其他位均为0,可以将其先适当移位操作,然后在”|”运算。
例:将temp中的低8位和t中的高4位组合成一个12位数
unsigned short temp = 0x00AB; unsigned char t = 0xC0; temp = temp<<4; temp |= (t>>4);
例二:保留channel的底4位,将其作为result的高4位,result的低4位设置为0xC;
channel = (channel<<4) | 0x0C;
方法二: 如果这2个数除了有效位之外,其他位需要保留为1,方法是先与适当的数”|”,之后2个数”&”
例一:保留temp的高4位和line的底4位,并将其组合成result。由于line的其他位全位1,所以必须先将temp的其他位全部设置为1,之后2个数”&”即可。
unsigned char result; unsigned char temp = 0xAB; unsigned char line = 0xFE; temp |= 0x0F; result = temp&line;
寄存器拆分
将一个16位数的高低8位分别拆成2个8位数,方法是通过多字节数赋给少字节数,多字节数高位字节部分将被自动截取的原理。unsigned short temp = 0xCDAB; unsigned char fir; unsigned char sec; fir = temp>>8; sec = temp;
逻辑移位
CPU没有来算数移位操作,如何用逻辑移位操作实现例如:line = 0xFE,如何实现其的左移操作后,右边补入的是1而不是默认的0。
line = (line<<1)|0x01;
复习一下。原址:http://blog.csdn.net/tkp2014/article/details/49495641
相关文章推荐
- C语言自定义寄存器操作的一些方法
- C语言自定义寄存器操作的一些方法
- 关于寄存器操作的一些常用方法
- c语言自定义寄存器操作的一些方法
- 16.单向链表的一些基本操作实现(链表反转,链表有环无环判断,链表冒泡排序,链表快速排序)
- 数据库里面的一些增删改查操作代码
- 字符串操作的一些陷阱,谨记!
- 剑指offer 从尾到头打印列表 包含vector 一些操作
- php与Mysql的一些简单的操作
- C#操作word的一些基本方法(word打印,插入文件,插入图片,定位页眉页脚,去掉横线)
- 树的一些操作
- javascript与jQuery对照学习总结(一)(一些常规操作)
- jquery 的一些操作
- PDF转Word文档(PDF的一些操作)
- 栈的一些简单操作
- Calendar 的一些操作
- C#中一些字符串操作的常用用法,c#编码和解码
- jQuery操作Select下拉框标签的一些方法和属性整理
- 一些窗口操作
- 关于java API操作elasticsearch 实时更新的一些问题及解决