3816|10

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

I/O端口的设置问题寄存器问题,菜鸟入门求解 [复制链接]

P1DIR|=0x01;
P1OUT|=0X01;
与下面这两条语句有什么区别:
P1DIR&=0x01;
P1OUT&=0X01;

最新回复

1. 首先你要搞清楚“&”和“|”的区别。     “&”叫做按位与运算,即就是1&1=1,1&0=0,0&1=0,0&0=0;    “|” 叫做按位或运算,即就是1|1=1,1|0=1,0|1=1,0|0=0; 2. P1DIR|=0x01;     P1DIR&=0x01;    P1OUT&=0X01;   P1OUT|=0X01; 如上四条语句其实都是叫做复合语句。 P1DIR|=0x01 P1DIR=P1DIR|0x01,其他的同理。 3.在msp430中 P1DIR|=0x01 P1DIR=P1DIR|0x01,是说将P1DIR的P1.1置位而P1口的其他IO,这样写有啥好处呢?我们知道“|”的好处呢,碰到任何数与0做按位运算都是它本身,这样写的好处即就是只改变P1.1的电平(即就是将它置位)而不影响其他IO的电平。同理 P1OUT|=0X01也是这个道理。   在msp430中 P1OUT&=0X01 P1OUT=P1OUT&0x01,其实就是将P1.1设置成output,其余P1口的IO复位。这样写的好处呢?我们知道任何数与0做按位与运算都是0.这样写的好处即就是只将P1.1复位而其他P1口的IO复位。同理,  P1DIR&=0x01也是这个道理了。   详情 回复 发表于 2015-7-20 12:38
 
点赞 关注

回复
举报

4177

帖子

9

TA的资源

五彩晶圆(高级)

推荐
 

1. 首先你要搞清楚“&”和“|”的区别。

    “&”叫做按位与运算,即就是1&1=1,1&0=0,0&1=0,0&0=0;

   “|” 叫做按位或运算,即就是1|1=1,1|0=1,0|1=1,0|0=0;

2. P1DIR|=0x01;     P1DIR&=0x01;
   P1OUT&=0X01;   P1OUT|=0X01;
如上四条语句其实都是叫做复合语句。 P1DIR|=0x01 <-->P1DIR=P1DIR|0x01,其他的同理。

3.在msp430中 P1DIR|=0x01 <-->P1DIR=P1DIR|0x01,是说将P1DIR的P1.1置位而P1口的其他IO,这样写有啥好处呢?我们知道“|”的好处呢,碰到任何数与0做按位运算都是它本身,这样写的好处即就是只改变P1.1的电平(即就是将它置位)而不影响其他IO的电平。同理 P1OUT|=0X01也是这个道理。

  在msp430中 P1OUT&=0X01 <-->P1OUT=P1OUT&0x01,其实就是将P1.1设置成output,其余P1口的IO复位。这样写的好处呢?我们知道任何数与0做按位与运算都是0.这样写的好处即就是只将P1.1复位而其他P1口的IO复位。同理,  P1DIR&=0x01也是这个道理了。





 
 

回复

2148

帖子

8

TA的资源

五彩晶圆(初级)

板凳
 
上面的是按位或操作,下边的是按位与操作,

P1DIR|=0x01 等同于 P1DIR = P1DIR | 0x01;后面的同理。
 
个人签名坐而言不如起而行
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

4
 
wsmysyn 发表于 2015-7-18 09:59
上面的是按位或操作,下边的是按位与操作,

P1DIR|=0x01 等同于 P1DIR = P1DIR | 0x01;后面的同理。

嗯。大神再帮我解一下,我用的是G2552
P1DIR|=0x40;
P10OUT|=0x01;   //P1.0会亮
再用下面两条指令替换:
P1DIR|=0x40;
P1OUT|=0X01; //P1.0会亮
这是为什么?


点评

不是大神也是学习中的小白,不过launchpad 没用过。 你先检查一下,你写的四行代码,有笔误的地方么? “P1DIR|=0x40; P10OUT|=0x01; //P1.0会亮---------》P10OUT?? 再用下面两条指令替换: P1D  详情 回复 发表于 2015-7-18 15:08
 
 
 

回复

2148

帖子

8

TA的资源

五彩晶圆(初级)

5
 
strawberry 发表于 2015-7-18 13:49
嗯。大神再帮我解一下,我用的是G2552
P1DIR|=0x40;
P10OUT|=0x01;   //P1.0会亮
再用下面两条指令替换 ...

不是大神也是学习中的小白,不过launchpad 没用过。
你先检查一下,你写的四行代码,有笔误的地方么?

“P1DIR|=0x40;
P10OUT|=0x01;   //P1.0会亮---------》P10OUT??
再用下面两条指令替换:
P1DIR|=0x40;
P1OUT|=0X01; //P1.0会亮”
你想说什么?没看懂。
P1.0会亮?接的是LED灯么?怎么接的?拉电流还是灌电流接法?
 
个人签名坐而言不如起而行
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

6
 
wsmysyn 发表于 2015-7-18 15:08
不是大神也是学习中的小白,不过launchpad 没用过。
你先检查一下,你写的四行代码,有笔误的地 ...

lanchpad上自带的,我试过了确实是这样,我很疑问。主程序中,在关狗之后,我只给了这两条程序,按照上面的内容互换后,结果一样。。。。
 
 
 

回复

2148

帖子

8

TA的资源

五彩晶圆(初级)

7
 
那就不太清楚了,因为确实没用过。

不过你可以到对应的*.h文件里找一下P10OUT的定义,跟P1OUT对比一下,看有什么不一样。
 
个人签名坐而言不如起而行
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

8
 
我看着快疯了。。。
P1是一个端口,有P1.7,P1.6,P1.5,P1.4,P1.3,P1.2,P1.1,P1.0一共8个管脚构成。
P1对应于若干个8位的寄存器
P1DIR表示输入/输出反向,某个位为1表示输出,为0表示输入。
P1OUT表示输出电平,或者选择上拉还是下拉电阻(当P1REN对应位为1的时候)。

P1DIR|=0x01;
P1DIR的bit0位不管原来是什么值,执行完这一句之后都是1。

没有P10这个端口,所以你写的P10OUT=1应该会直接报错编译不过。也就下载不进单片机里,自然是之前的状态咯
或者P1OUT在初始化之后就默认是0xff,那么你将端口设置成输出之后,会亮也不出奇。
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

9
 
你对比一下“P1DIR|=0x40;
P10OUT|=0x01;   
P1DIR|=0x40;
P1OUT|=0X01; 操作的分别是哪个引脚。看看引脚和led的连接关系。
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

10
 
我这么的跟你说吧,用逻辑指令本意就是控制想控制的位从而不影响其他位,或|是针对1,把某些位置1,与&是针对0,把某些位清0,430单片机为什么不直接赋值,就是怕其他脚要是接了其他外设,没有想好的强制性的赋值有可能会导致其他外设无法正常工作,到头来就是编程习惯的问题
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

11
 
嗯嗯,谢啦
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表