关于AVR单片机编程问题,为什么很多书上写设引脚为输入要DDRA&=OB11110111,DDRA=0X00 不行吗?求解~

 我来答
wolf_lhy
2013-01-23 · TA获得超过6609个赞
知道大有可为答主
回答量:1090
采纳率:66%
帮助的人:552万
展开全部
你那么写不是不对,但是要看具体的情况.
你写的 DDRA = 0x00,是把A口全部设置成输入
而程序里的 DDRA &= 0B11110111,是把PA.3口设置成输入状态,至于A口其他引脚,原来是什么状态还保持什么状态,这样,只设置需要的PA.3,而不影响其他引脚.
DDRA &= 0B11110111这样写相对比较直观,不过看着不太舒服,如果写成
DDRA &= 0xF7;短小精悍,但是不直观.
其实,有个又直观,又短小的写法:
DDRA &= ~(1<<3); //将PA.3设置成输入,其他引脚不变
DDRA &= ~(1<<5); //将PA.5设置成输入,其他引脚不变

DDRA &= ~(1<<6); //将PA.6设置成输入,其他引脚不变
追问
额,那PA.3口设置成输出写DDRA=0XF7不行吗?为什么要加&呢(这个与有什么效果)?还有有些为什么加"|"啊,比如DDRA |=0B11110111
追答
额,那PA.3口设置成输出写DDRA=0XF7不行吗?为什么要加&呢(这个与有什么效果)?还有有些为什么加"|"啊,比如DDRA |=0B11110111tangram_guid_1358952779097
举个例子,假设,原来的PA中,PA.0,PA.2是输入状态,PA.3是输出状态,现在我需要把PA.3改变为输入状态,那么,如果按照你的写法,DDRA = 0xF7,这句话的结果,PA.3的确如你所愿变成了输入,但是,同时,你也把PA.0,PA.2的状态改变了,这是不符合要求的.
你的C语言基础有待再扎实一下,&表示"位与"的意思,我随便举个例子:
例如: 0x55 & 0x67 = ?
这样算,把两个数字都打成二进制,然后一位一位的进行"与"运算,即双1才得1,有0则0
任何一位,不管它是1,还是0,只要是与 1相与,都保持不变,1&1 = 1,0&1 = 0
任何一位,不管它是1,还是0,只要是与 0相与,都要变成0 ,1&0 = 0,0&0 = 0
0x55 = 01010101
0x67 = 01100111
-------------------------------
01000101
所以 0x55 & 0x67 = 0x45
所以 DDRA &= 0xF7 ,0xF7 = 1111 0111
根据我说的,
任何一位,不管它是1,还是0,只要是与 1相与,都保持不变,1&1 = 1,0&1 = 0
任何一位,不管它是1,还是0,只要是与 0相与,都要变成0 ,1&0 = 0,0&0 = 0
所以,只有第三位变成了0,而其他位,因为是与"1"相与,所以保持原来状态不变.
所以,再达到第三位变成0的目的的同时,也没有改变其他位的状态.
而你后面提到的那个 "位或" ,就是"|"这个符号,与&的表现差不多,是按位进行"或"运算.
运算的原则是:双0才得0,有1即为1;
任何一位,不管它是1,还是0,只要是与 1相或,都要变成1, 1|1 = 1,0|1 = 1
任何一位,不管它是1,还是0,只要是与 0相或,都保持不变 ,1|0 = 1,0|0 = 0
所以,你明白:DDRA |=0B11110111为什么这么写了吗?
一剑出血
高粉答主

2013-01-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
采用读-修改-写操作,防止修改其它不应修改的位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1099211218
2013-01-24
知道答主
回答量:9
采纳率:0%
帮助的人:8.7万
展开全部
简单些说&操作可以清0某些位而不会影响到其他位的原来状态,| 操作可以置1某些位而不影响其他位的原来状态。就是这样,一个是清0指定位,一个是置1指定位,两者都不会影响其他位的操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0e5527799
2013-01-23 · TA获得超过901个赞
知道小有建树答主
回答量:702
采纳率:0%
帮助的人:366万
展开全部
可以,
0B 开头是二进制的,0X开头是十六进制输入,都是一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式