标题:
求教单片机P1=P1|0x01的意思
[打印本页]
作者:
kscheang
时间:
2021-2-19 22:31
标题:
求教单片机P1=P1|0x01的意思
求教一下各位
P1=P1|0x01 是什么意思?
我在百度只查到说是
(将P1与0x01按位或之后,再赋给P1)
可否请教详细解释
另外
P1=P1|0x01
这个 | 怎样输入
(我现在只用 Ctrl-C Ctrl-V 贴上)
我的程序如下:
#include<reg52.h>
unsigned int t;
unsigned char i;
void delay(int t)
{
while(t--);
}
void main ()
{
delay(30000);
P1 = 0x01;
while(1)
{
for(i=0;i<8;i++)
{
delay(30000);
P1<<=1;
P1=P1|0x01;
}
P1 = 0x01;
}
}
谢谢
作者:
aba_aba
时间:
2021-2-19 23:18
|:或操作,1|1=1、1|0=1、0|0=0
那个符号是shift+\,
‘\’在回车上方
0x01是32位16进制,但是内部仍然是2进制,
整体展开就是
0000 0000 0000 0000 0000 0000 0000 0001
所以P1<<=1就是
0000 0000 0000 0000 0000 0000 0000 0010
P1|0x01就是
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0001
这两个按位|,结果就是
0000 0000 0000 0000 0000 0000 0000 0011
所以P1=P1|0x01
就是把0000 0000 0000 0000 0000 0000 0000 0011
赋值给P1,
最后for循环结束,
P1 = 0x01
将P1内的值重置
作者:
adject
时间:
2021-2-19 23:22
P1=P1|0x01 //P1 第0位置1 其他位不变
void main ()
{
delay(30000);
P1 = 0x01; //P1第0位置1 其他置0
while(1)
{
for(i=0;i<8;i++)
{
delay(30000);
P1<<=1; //P1等于P1左右一位
P1=P1|0x01; //P1 第0位置1 其他位不变
}
P1 = 0x01;
}
}
| shift+ \ 输入
作者:
杨雪飞
时间:
2021-2-19 23:31
aba_aba 发表于 2021-2-19 23:18
|:或操作,1|1=1、1|0=1、0|0=0
那个符号是shift+\,
‘\’在回车上方
0x01是8位 16进制,
0 0 0 0 0 0 0 1 二进制的1
8 4 2 1 8 4 2 1
0x 0 1 十六进制的1
作者:
taotie
时间:
2021-2-19 23:55
咳咳咳~~~
有现成的程序员计算器不会用吗
作者:
杨雪飞
时间:
2021-2-19 23:57
将P1与0x01按位或之后,再赋给
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 单片机的的P1口的八个管脚,
| | | | | | | |
0 0 0 0 0 0 0 1 管脚低电平为0,高电平为1,
8 4 2 1 8 4 2 1 转换成十六进制,管脚对应下边的8421,所有
的高电平相加就是16进制。比如最后一脚为高
电平 16进制就是01,0x是16进制数开头。
那么与运算就是两个数运算,有1就等1,三种情况1与1得1,1与0,还是得1,0与0,那就得0,所以叫有1得1,全0得0。
P1=0X01那也就是最上边的情况,P1.0是高电平,其余的都是低电平。
接下来看你的程序
P1 = 0x01; 这个就好理解了吧,P1.7---P1.1都是低电平0,只有P1.0是高电平。
while(1) 整个红字这一段是把高电平这个引脚的电平向左移8次。
{
for(i=0;i<8;i++) 就是这句,跟while和下边P1<<=1;结合,运行8次
{
delay(30000);
P1<<=1;
P1=P1|0x01; 然后再与上0X01;那就是每移一次最右边的脚都是高电平,这样一来,那就是一个接一个的高电平向左移到最高位P1.7了。
}
P1 = 0x01; 这最后一句是当P1口全都是高电平了之后,再让P1口只有P1.0为高电平。
}
}
这个这一段的意思就是如果P1口接的发光二极管(LED)的话,那就是依次从P1.0开始向最高位熄灭,然后再回到P1.0口熄灭状态,或者相反的状态。
|这个符号在回车的上边,在51C语言里读作“或”,是一个运算符,上边讲过他的运算法则了。
即: 1|1=1 1|0=1 0|0=0
作者:
kscheang
时间:
2021-2-20 01:11
谢谢各位
明白了, 是 新的赋值 和 旧的值 作 或 的相加 的意思
我的键盘 是两个小的直竖, 不知道原来是 | shift+ \ 输入
作者:
rayin
时间:
2021-2-20 08:16
P1=P1|0x01就是把P0的第1位(P1^0)置高电平
作者:
bsljling
时间:
2021-2-20 08:30
同为小白的初学者,谢谢各位的解答!
作者:
cn_zhx
时间:
2021-2-21 15:30
采用或的方式好处在于不会影响其他位的值,尤其是在多处需要对同一寄存器赋值时特别有用。
作者:
billaj
时间:
2021-2-21 16:33
我不是小白,也谢谢各大神的解答,每种答案都是一种思路,能分享真的是难能可贵,感谢
作者:
dddggg412
时间:
2021-2-21 19:46
楼主要看看C语言位运算相关,位运算是修改一个数的某些位而保留其他位。
作者:
zuiqf1978
时间:
2021-2-21 20:56
| 这个符号特别,在台式键盘右手shift上边
小台机把这符号截成两段
作者:
TTQ001
时间:
2021-2-22 06:06
这是逻辑位或运算,如果所有在或操作中的位均为0,则结果为0,如果或操作的位中至少一位为1,则结果为1。使用Shift +“ \”获得| 标志。
作者:
红叶夜夜笙歌
时间:
2021-3-2 15:57
P1|=(0x01<<N), 将P1第N位置1,其余位不变。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1