位操作读写寄存器一个字节的多个位

本文介绍两种方法实现寄存器多位的读写操作。方法一通过位运算实现目标位的清零和其他位保持不变;方法二则通过位运算实现目标位设置为1而其他位清零。同时,还提供了读取寄存器中指定位的操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、写寄存器多个位
方法一

/**********************************************************************
	bitStart  目标字节的起始位
	length    位长度
	data      存放改变目标字节位的值
	b         写入后的一个字节值
*******************************************************************************/ 
u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);         //使写入的位清零,其他位置1
data <<= (8 - length);
data >>= (7 - bitStart);
b &= mask;
b |= data;

方法二

/**********************************************************************
	bitStart  目标字节的起始位
	length    位长度
	data      存放改变目标字节位的值
	b         写入后的一个字节值
*******************************************************************************/ 
u8 mask = ((1 << length) - 1) << (bitStart - length + 1);//使写入的位置1,其他位清0
data <<= (bitStart - length + 1); 
data &= mask; 
b &= ~(mask); 
b |= data; 

二、读寄存器多个位

/**********************************************************************
	bitStart  目标字节的起始位
	length    位长度
	b         读取多个位的值
*******************************************************************************/ 
u8 mask = ((1 << length) - 1) << (bitStart - length + 1);//使读入的位置1,其他位清0
b &= mask;
b >>= (bitStart - length + 1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值