C51中对不可位寻址的特殊寄存器设置为啥常看到用或逻辑置位

[复制链接]
 楼主| elephant00 发表于 2021-8-17 17:10 | 显示全部楼层 |阅读模式
之前一直用汇编编写51的程序,感觉比较复杂的运算还是蛮麻烦的,于是就开始学习C51编程,看到书里的实例中对一些不能进行位寻址的特殊寄存器的置位,往往都采用了或逻辑运算来实现(|=),尤其在程序开始时就需要初始化定义的特殊寄存器,为什么不直接赋值而需要用或逻辑运算?简单举个例子,程序中只需要使用T0,8位重装模式,照汇编里的习惯直接TMOD赋值(TMOD=0x02),但是书里面却使用了 TMOD|=0x02。实在不明白为啥。还望各位大侠指点小的一二,在此表示非常感谢
lyjian 发表于 2021-8-17 20:11 | 显示全部楼层
因为直接赋会影响所有位,逻辑赋值只影响你需要设置的位。
lyjian 发表于 2021-8-17 20:14 | 显示全部楼层
本帖最后由 lyjian 于 2021-8-17 20:22 编辑

汇编也不都会直接赋值,汇编也会用逻辑或或与来置1或置0。
看你要做什么,用C也是同样意图。用直接赋值还是逻辑或,看意图,不分汇编还是C。
coody 发表于 2021-8-18 22:44 | 显示全部楼层
不能位寻址的寄存器或变量,一般用|=来将某个或某些位写1,用&=来将某个或某些位写0,而不影响别的位。
sjnh 发表于 2021-8-19 08:45 | 显示全部楼层
=是写,|=和&=是读-改-写
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1030

主题

3869

帖子

7

粉丝
快速回复 返回顶部 返回列表