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也是这个道理了。
上面的是按位或操作,下边的是按位与操作,
P1DIR|=0x01 等同于 P1DIR = P1DIR | 0x01;后面的同理。
不是大神
也是学习中的小白,不过launchpad 没用过。
你先检查一下,你写的四行代码,有笔误的地方么?
“P1DIR|=0x40;
P10OUT|=0x01; //P1.0会亮---------》
P10OUT??
再用下面两条指令替换:
P1DIR|=0x40;
P1OUT|=0X01; //P1.0会亮”
你想说什么?没看懂。
P1.0会亮?接的是LED灯么?怎么接的?拉电流还是灌电流接法?
lanchpad上自带的,我试过了确实是这样,我很疑问。主程序中,在关狗之后,我只给了这两条程序,按照上面的内容互换后,结果一样。。。。
我看着快疯了。。。
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,那么你将端口设置成输出之后,会亮也不出奇。
你对比一下“P1DIR|=0x40;
P10OUT|=0x01;
P1DIR|=0x40;
P1OUT|=0X01; 操作的分别是哪个引脚。看看引脚和led的连接关系。
我这么的跟你说吧,用逻辑指令本意就是控制想控制的位从而不影响其他位,或|是针对1,把某些位置1,与&是针对0,把某些位清0,430单片机为什么不直接赋值,就是怕其他脚要是接了其他外设,没有想好的强制性的赋值有可能会导致其他外设无法正常工作,到头来就是编程习惯的问题
天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友