社区导航

 

搜索
查看: 11477|回复: 21

[求助] P1DIR|=0x01与P1DIR=0x01有什么区别

[复制链接]

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-11 00:21 | 显示全部楼层 |阅读模式
P1DIR|=0x01与P1DIR=0x01有什么区别

回复

使用道具 举报

3386

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2015-8-11 00:32 | 显示全部楼层
本帖最后由 ljj3166 于 2015-8-17 23:07 编辑

区别还是蛮大的吧
P1DIR|=0x01,按位相或,只把最低位置1,其它位不发生变化,放到430里面就是P1.1-P1.7的IO方向不变,P1.0配置成输出;
P1DIR=0x01,整个八位数码被配置成0000 0001,P1.1-P1.7配置成输入,P1.0配置成输出
不知道理解对不对
建议多理解一下c语言运算基础
So what......

回复

使用道具 举报

368

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2015-8-11 00:59 | 显示全部楼层
二楼正解

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-11 09:06 | 显示全部楼层
1. P1DIR|=0x01与P1DIR=0x01, P1DIR|=0x01是复合赋值语句,等价于P1DIR=P1DIR|0x01,这是个按位或运算,然后再赋值。0与任何数做或运算都是不改变其值,所以在这个语句中只有将最低位置位了,其余位没有变化。所以这个运算的好处是,只改变最低位的值,而不影响其他位;
2. P1DIR=0x01,就是简单的额一条赋值语句,意思就是说最低位是1,其他位都是0.假如P1DIR之前是别的值,那么这条语句的结果就是将0x01赋值给了P1DIR。
区别就是:P1DIR|=0x01只有最低位置位了而没有影响其他位,P1DIR=0x01直接赋值,可能会改变之前P1DIR的值。

回复

使用道具 举报

1572

TA的帖子

0

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-11 10:23 | 显示全部楼层
|= 和 = 的区别都搞不清楚么。。。。楼主C语言需要认真学一下啊,这些是最基础的运算符了

回复

使用道具 举报

73

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-11 13:16 | 显示全部楼层
或的话只动要改变的一位,0与任何或都是原来的值。直接P1DIR=0X01会将8位都改变,避免误操作

回复

使用道具 举报

19

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-11 14:03 | 显示全部楼层
我也学习下,各位说的正解。

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-11 15:45 | 显示全部楼层
楼主你好,P1DIR|=0x01是编程常用的写法,让最低位置1,不用或的写法属于强行八位的赋值,即最低位是1,其他七位是0,一般不会采用的

回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-15 22:27 | 显示全部楼层
anqi90 发表于 2015-8-11 10:23
|= 和 = 的区别都搞不清楚么。。。。楼主C语言需要认真学一下啊,这些是最基础的运算符了

呵呵这个我怎么会不知道,我只是疑问再达到的效果是一样的,都是把P1.0置1,为什么一定要写成按位或的形式

点评

效果不一样,或运算只是把P1.0置一,其他位不变,赋值不仅把1.0置一,还把其他位全部置0了,那么问题来了,如果其他位本来的值是1呢?你这个赋值是对P1口赋值。  详情 回复 发表于 2015-8-19 12:07
要是知道有什么区别还会说 “达到的效果是一样的”? 写的是对P1DIR做的操作,你只能看到对P1.0的影响么.......  详情 回复 发表于 2015-8-15 22:43

回复

使用道具 举报

1572

TA的帖子

0

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-15 22:43 | 显示全部楼层
xjq182 发表于 2015-8-15 22:27
呵呵这个我怎么会不知道,我只是疑问再达到的效果是一样的,都是把P1.0置1,为什么一定要写成按位或的形 ...

要是知道有什么区别还会说 “达到的效果是一样的”?
写的是对P1DIR做的操作,你只能看到对P1.0的影响么.......

回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-17 12:58 | 显示全部楼层
huaiqiao 发表于 2015-8-11 09:06
1. P1DIR|=0x01与P1DIR=0x01, P1DIR|=0x01是复合赋值语句,等价于P1DIR=P1DIR|0x01,这是个按位或运算,然 ...

1 是输出, 0是输入吧;

点评

对你11楼和12楼的疑问,我不多做说明哦。请您举个例子去尝试,自己用笔算算就什么都知道了。我告诉了您答案,可能下次碰到您又记不得了。另外,可以看出您的C语言的基础不堪入目啊,请先夯实基础,再着手写程序。或  详情 回复 发表于 2015-8-17 19:17

回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-17 12:59 | 显示全部楼层
huaiqiao 发表于 2015-8-11 09:06
1. P1DIR|=0x01与P1DIR=0x01, P1DIR|=0x01是复合赋值语句,等价于P1DIR=P1DIR|0x01,这是个按位或运算,然 ...

为什么使用 P1DIR|=0x01这个时其他位不变,只p1.0变

回复

使用道具 举报

101

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-17 13:19 | 显示全部楼层
好好看看c语言教材~

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-17 19:17 | 显示全部楼层
qaz12345 发表于 2015-8-17 12:58
1 是输出, 0是输入吧;

对你11楼和12楼的疑问,我不多做说明哦。请您举个例子去尝试,自己用笔算算就什么都知道了。我告诉了您答案,可能下次碰到您又记不得了。另外,可以看出您的C语言的基础不堪入目啊,请先夯实基础,再着手写程序。或者在写程序的时候,一边写,一边想想为什么(也可以用笔举例算)。

回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-17 22:26 | 显示全部楼层
huaiqiao 发表于 2015-8-17 19:17
对你11楼和12楼的疑问,我不多做说明哦。请您举个例子去尝试,自己用笔算算就什么都知道了。我告诉了您答 ...


file:///C:\Users\zhouzhuang\AppData\Roaming\Tencent\Users\1430069033\QQ\WinTemp\RichOle\G96%I$$BC$E7PX~`PGZP)(F.png

G96%I$$BC$E7PX~`PGZP)(F.png

回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-17 22:26 | 显示全部楼层

这个怎么理解啊?

回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-17 22:32 | 显示全部楼层
huaiqiao 发表于 2015-8-17 19:17
对你11楼和12楼的疑问,我不多做说明哦。请您举个例子去尝试,自己用笔算算就什么都知道了。我告诉了您答 ...

0与任何数  或  ,那个数不变  这个我理解了,输入输出没懂

点评

去搜 GPIO 输入输出模式 不需要管是哪个单片机的,原理都一样 或者去看你想找的单片机的datasheet,肯定有关于GPIO的说明 不要问题想都不想张嘴就问,先自己想办法解决,解决不了了要问也要把你做了什么努力列  详情 回复 发表于 2015-8-20 10:39
您好,我已经给您说的很清楚 了,请您举出例子,P1DIR |=0x10;P1DIR &=0x7f;您可将P1DIR赋一个举例的初值后,自己拿起笔来将其转换成二级制,然后运算,可以吗?二进制的计算您不会吗? 15楼您截个图是想丢给我,让  详情 回复 发表于 2015-8-17 23:44

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-17 23:44 | 显示全部楼层
qaz12345 发表于 2015-8-17 22:32
0与任何数  或  ,那个数不变  这个我理解了,输入输出没懂

您好,我已经给您说的很清楚 了,请您举出例子,P1DIR |=0x10;P1DIR &=0x7f;您可将P1DIR赋一个举例的初值后,自己拿起笔来将其转换成二级制,然后运算,可以吗?二进制的计算您不会吗?
15楼您截个图是想丢给我,让我给您算吗?我当然知道是怎么回事。
学习的话,需要您自己动手计算才能真正明白是怎么回事呢?您自己都不动手。
就一句不理解,踢个球给我。我还需要给您解释很多吗?前面的话,我已经解释的很清楚了。如果您还不理解,不能怪我。是你的基础,实在不堪。  请动起手来好吗?谢谢。

回复

使用道具 举报

50

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-19 12:07 | 显示全部楼层
xjq182 发表于 2015-8-15 22:27
呵呵这个我怎么会不知道,我只是疑问再达到的效果是一样的,都是把P1.0置1,为什么一定要写成按位或的形 ...

效果不一样,或运算只是把P1.0置一,其他位不变,赋值不仅把1.0置一,还把其他位全部置0了,那么问题来了,如果其他位本来的值是1呢?你这个赋值是对P1口赋值。

回复

使用道具 举报

1572

TA的帖子

0

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2015-8-20 10:39 | 显示全部楼层
qaz12345 发表于 2015-8-17 22:32
0与任何数  或  ,那个数不变  这个我理解了,输入输出没懂

去搜 GPIO 输入输出模式
不需要管是哪个单片机的,原理都一样
或者去看你想找的单片机的datasheet,肯定有关于GPIO的说明

不要问题想都不想张嘴就问,先自己想办法解决,解决不了了要问也要把你做了什么努力列出来
难道别人要从1+1开始教给你微积分吗

回复

使用道具 举报

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

关闭

站长推荐上一条 1/5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-2 17:31 , Processed in 0.571583 second(s), 42 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表