在嵌入式开发中一些非常好用的小技巧

用 “ / ” 和 “ % ” 获取任意进制数的前任意位或者后任意位
十进制数举例
例如我们想将123的前两位和后1位拆分,那么可以让他和10进行运算
123/10 = 12
123%10 = 3
如果想拆分1234的前两位和后两位,那么可以跟10的平方进行运算,类比到2进制,8进制,16进制都是这么做就OK,
十六进制数举例
64535对应16进制是FC17,如果想要分离前后两位,那么只需要跟16的平方做运算就OK
64535/256 = FC
64535%256 = 17
应用场景
1.例如16位定时器,分两个字节的计数器,需要分别对这俩寄存器进行设置初值

使用 “ | ” 和 “ & ” 将二进制数某个位置1或置0

某位置1
例如 二进制数: 0110 1011 ( 0x6B),我想将首位置1, 那就让他或上 1000 0000(0x 80),计算得11101011(0xEB)
0x 6B | 0x80 = 0x EB
某位置1
例如 二进制数: 0110 1011 ( 0x6B),我想将末位置0, 那就让他与上 000 0001(0x 01),计算得01101010(0x 6A)
0x 6B & 0x01 = 0x 6A
应用场景
1.需要单独配置不位寻址寄存器的某一位时

使用 “ & ” 取出某个二进制数的某一位
例如 二进制数: 0110 1011 ( 0x6B),我想取出最高位,那么就需要它与上1000 0000(0x 80),如果6B首位是1,那么输出是1(在C语言中,会自动将),首位是0,输出也是0

unsigned char a;
if (0x6B & 0x 80);  a = 1; else  a = 0;

应用场景
1.串行通信中,需要一位一位发送数据,例如和一些只需要一根信号线的设备进行通信时。

使用 “%”来实现计数变量从0计满后清0
如果我定义一个变量count,用来计数,当计满100,我让他清0

unsigned char count = 0;
while(1)
{
	count ++
	count %= 100;  //计满100后清0
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值