AVR系列单片机高手进(关于位操作的问题)

我在书上看到:TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00);我的理解:置位CS02位;清零CS01位;置位CS00位。也就是寄存器TCCR0低... 我在书上看到:TCCR0| =(1<<CS02)|(0<<CS01)|(1<<CS00);我的理解:置位CS02位;清零CS01位;置位CS00位。也就是寄存器TCCR0低3位的最终结果是101在与TCCR0相或。功能就是操作此3位,保持其他位原态不变,问题是如果我的原态这3位是010的话,那么在与位移之后的101相或不就是111了吗?这样一来不就没有达到我所需要的置位或清零的效果了吗!求解释。 展开
 我来答
gdxizhilang
2013-11-15 · TA获得超过3333个赞
知道小有建树答主
回答量:802
采纳率:50%
帮助的人:302万
展开全部
对,您的理解是对的,如果是置1,可以TCCR0| =(1<<CS02)|(1<<CS00);但是如果要清零CS01位,就要TCCR0&=~(1<<CS01),就是将(1<<CS01)取反再和TCCR0相与。

其中不知道您看的什么书和资料,简直实在害人, 真正在实际应用中,没有 TCCR0| =(0<<CS01)|(1<<CS00);这样用的,(0<<CS01)用在逻辑或中真是搞笑。
我是许先森
2013-11-15
知道答主
回答量:2
采纳率:0%
帮助的人:2746
展开全部
原态不能是010
追问
还有一条语句是这样的:DDRD=(0<<PD2)|(0<<PD3)|(0<<PD4)|(0<<PD5)|(1<<PD7); //PD2~PD5设为输入,PD7设为输出。  这是书上的原句,都没问题。问题是他在这句话里的DDRD后面没加“|”符号,那么等式右边的结果应该是10000000直接赋给DDRD。这样一来PD0,PD1,PD6这三位不就是都赋了0了吗?这样就没起到保持其他位的原态不变了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式