[综合信息] 按位操作

[复制链接]
938|0
lzbf 发表于 2025-8-22 07:53 | 显示全部楼层 |阅读模式
对于我们写的代码和 STC-ISP 生成的代码有何区别呢?对于我们的代码而言,没有啥区别。但是,对于 STC-ISP 生成的代码应该算是更标准化和工程化吧(这话说得很油腻啊!)。

按位与操作(就是 & 这个符号),很多语言都有这个运算符,意义也都一样。& 操作的特性是对指定位进行清 0,其他位保持不变。那 TMOD &= 0xF0 来说,这条语句是把 TMOD 的低 4 位清 0,高 4 位则保持不变。因为我们要使用 T0 定时器/计数器,使用 T0 需要设置 TMOD 的低 4 位,所以先给低 4 位清 0,然后再对低 4 位进行设置。而高 4 位是用来设置 T1 的,我们不使用 T1 ,所以让 T1 的设置保持不变。

按位或操作(就是 | 这个符号),很多语言也都有这个运算符。| 操作的特性是对指定位进行置位操作,而其余位保持不变。对于 TMOD |= 0x01 来说,这条语句是让 TMOD 的高 4 位保持不变,然后把最低位设置为 1。

很多时候一个字节是拆成很多个位来使用的,比如 TMOD 就是这样。在操作这些位的时候,就要尽可能地只操作我们需要操作的位,而其他我们不操作的位要保持不变。甚至在有些情况下要把整个字节或者标志位都保存了,操作后再进行恢复,以保持上下文环境不被我们的操作所破坏。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

5633

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部