C语言问题

[复制链接]
618|4
 楼主| 车水马龙 发表于 2020-4-21 12:30 | 显示全部楼层 |阅读模式
T**1 |= T**1_C7F_MASK;
T**1 = T**1_C7F_MASK;
请问大家这两种赋值操作为什么效果会不一样?(此寄存器来自飞思卡尔单片机手册)
blust5 发表于 2020-4-21 13:30 | 显示全部楼层
第一句会把后面数据的为1的位赋值到寄存器,而为0的位不改变寄存器的值(寄存器原来是什么值还是什么值),
第二句直接把后面的值全部赋值到寄存器,后面的0会覆盖掉前面寄存器相应位的1。

举个例子,如果 T**1 原来的值是0b0111 0000,T**1_C7F_MASK 的值是 0b0000 0110,那么
执行第一句后 T**1 的值是 0b0111 0110,执行第二句后 T**1 的值是 0b0000 0110
ningling_21 发表于 2020-4-21 14:26 | 显示全部楼层
上面的改变部分位,
下面的改变所有的位
sjnh 发表于 2020-4-21 14:42 | 显示全部楼层
第一句 先读出T**1到临时寄存器,然后改临时寄存器的个别位,然后再写入T**1;
第二句 直接把一个数写入T**1
sjnh 发表于 2020-4-21 14:43 | 显示全部楼层
*F*L*G*,限制,要不要脸
您需要登录后才可以回帖 登录 | 注册

本版积分规则

474

主题

476

帖子

0

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