打印

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

[复制链接]
2299|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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,而不影响别的位。

使用特权

评论回复
5
sjnh| | 2021-8-19 08:45 | 只看该作者
=是写,|=和&=是读-改-写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

969

主题

2978

帖子

7

粉丝