在编写C51程序中常看到特殊寄存器的置位为什么用或逻辑?

在学习C51时看到书里面或者实例里,很多无法位寻址的特殊寄存器的置位常采用了或逻辑(|=),为什么不直接采用赋值的方法?比方说对定时器TMOD的设置,常看到TMOD|=0x02,已经确定仅对T0设置,不需要使用T1,为什么不直接使用赋值语句:TMOD=0x02

TMOD|=0x02,TMOD=0x02的区别在于|= 不改变定时器1的设置, 就你的问题而言,这两种赋值都可以。如果你用32位的CPU 你就不可直接赋值,如果你非要用直接赋值那样你的计算复杂°就变大了 ,而是用|= 的方法赋值。 为了让学习者养成 好的编程习惯 就推荐用|=的 赋值 。

明白没
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-08-05
因为TMOD有很多位,TMOD=0x02不仅仅把第一位赋值,也把所有其他位全部设置为0,这是错误的,而TMOD|=0x02只修改第一位追问

如果是用在程序运行过程中重新定义直接赋值肯定会把之前定义位被错误的清零了,但是作为程序最开始的初始化设置(也就是已知哪些位需要清零,哪些位需要置位)用“或”赋值和直接赋值应该没有太多的区别,其实我想知道的是,对于C51语句上是否有特别的要求(就像特殊寄存器中有的不能位定义,只能用赋值的情况)

追答

没特别听说过这种限制

本回答被提问者采纳