[C语言] 请教一个简单的关于寄存器赋值问题

[复制链接]
1782|8
 楼主| Dick00 发表于 2013-12-23 11:31 | 显示全部楼层 |阅读模式
    对寄存器进行赋值是可以单独给某一位赋值的,例如I2CON控制器为32位寄存器,假设其中第三位名称为STA,第二位名称为STO,均为置1使能,所以我可以给I2CON=0x000c来使STA=1,STO=1.那I2CON |=STA;I2CON |=STO这样赋值有什么优点?还有就是如果是I2CON &=STA这样赋值有时什么意思呢?请大神帮忙解答下,不胜感激。
ayb_ice 发表于 2013-12-23 11:45 | 显示全部楼层
这不基本问题吗

不影响无关位
znmcu 发表于 2013-12-23 12:11 来自手机 | 显示全部楼层
主要是程序可读性。
其实最方便直观的方法是用位段。
diweo 发表于 2013-12-23 12:17 | 显示全部楼层
可以给I2CON=0x000c来使STA=1,STO=1是没错,不过这样做有副作用--把其他位清零了。
有时候只希望改动某些位但是同时不能影响到别的位。
限量_个性。 发表于 2013-12-23 12:59 | 显示全部楼层
"|"的最大好处就是不去影响其他的位同时正确的置位自己需要的位,如果用了0x000C,那么高位都会清零了,就不会达到最终想要的结果了。"&"往往用于清除某位啦。
 楼主| Dick00 发表于 2013-12-23 16:30 | 显示全部楼层
限量_个性。 发表于 2013-12-23 12:59
"|"的最大好处就是不去影响其他的位同时正确的置位自己需要的位,如果用了0x000C,那么高位都会清零了,就 ...

那再问一下:
P3_PMD |=(Px4_OD | Px5_OD)是不是将Px4_OD、Px5_OD两位置1;那么P3_PMD &=Px4_PMD是不是将Px4_PMD置0?
P3_PMD &=~(Px4_PMD | Px5_PMD)Z这句又是什么意思?
限量_个性。 发表于 2013-12-23 16:48 | 显示全部楼层
P3_PMD |=(Px4_OD | Px5_OD)是不是将Px4_OD、Px5_OD两位置1;那么P3_PMD &=Px4_PMD是不是将Px4_PMD置0?
我觉的要看Px4_OD与Px5_OD当前的状态,是0还是1
P3_PMD &=~(Px4_PMD | Px5_PMD)Z这句又是什么意思?
将Px4_PMD 与Px5_PMD两位取反,如果之前的状态都是1,那么这句意思就是将此两位置零。


soso 发表于 2013-12-23 17:44 | 显示全部楼层
尽快更换问题分类。目前在游戏
ningling_21 发表于 2013-12-23 18:34 | 显示全部楼层
P3_PMD &=Px4_PMD,这个是把除了Px4_PMD 之外的位全清零;
P3_PMD &=~(Px4_PMD | Px5_PMD)  这个是把括号里的两位清零;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:生活总会是美好的,别人不相信的并不代表他不能实现,加油。

23

主题

433

帖子

1

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