打印
[C语言]

请教一个简单的关于寄存器赋值问题

[复制链接]
1473|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是没错,不过这样做有副作用--把其他位清零了。
有时候只希望改动某些位但是同时不能影响到别的位。

使用特权

评论回复
5
限量_个性。| | 2013-12-23 12:59 | 只看该作者
"|"的最大好处就是不去影响其他的位同时正确的置位自己需要的位,如果用了0x000C,那么高位都会清零了,就不会达到最终想要的结果了。"&"往往用于清除某位啦。

使用特权

评论回复
6
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这句又是什么意思?

使用特权

评论回复
7
限量_个性。| | 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,那么这句意思就是将此两位置零。


使用特权

评论回复
8
soso| | 2013-12-23 17:44 | 只看该作者
尽快更换问题分类。目前在游戏

使用特权

评论回复
9
ningling_21| | 2013-12-23 18:34 | 只看该作者
P3_PMD &=Px4_PMD,这个是把除了Px4_PMD 之外的位全清零;
P3_PMD &=~(Px4_PMD | Px5_PMD)  这个是把括号里的两位清零;

使用特权

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

本版积分规则

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

23

主题

433

帖子

1

粉丝