搜索

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

[复制链接]
1187|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)  这个是把括号里的两位清零;

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 kk的回忆 得到打赏 ¥600.00
  • 2 名字还没想好 得到打赏 ¥350.00
  • 3 天意无罪 得到打赏 ¥312.00
  • 4 wolfe_yu 得到打赏 ¥210.00
  • 5 呐咯密密 得到打赏 ¥170.00
  • 6 gaoyang9992006 得到打赏 ¥120.00
  • 7 CZF11 得到打赏 ¥100.00
  • 8 年轻的国王 得到打赏 ¥90.00
  • 9 hunteredward 得到打赏 ¥90.00
  • 10 blust5 得到打赏 ¥85.00
在线客服 快速回复 返回顶部 返回列表