找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6755|回复: 14
收起左侧

求教单片机P1=P1|0x01的意思

  [复制链接]
ID:860248 发表于 2021-2-19 22:31 | 显示全部楼层 |阅读模式
求教一下各位
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;
    }
}

谢谢
回复

使用道具 举报

ID:885009 发表于 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内的值重置

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:419968 发表于 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+ \ 输入

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:97554 发表于 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

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:342822 发表于 2021-2-19 23:55 | 显示全部楼层
咳咳咳~~~
有现成的程序员计算器不会用吗
回复

使用道具 举报

ID:97554 发表于 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

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:860248 发表于 2021-2-20 01:11 | 显示全部楼层
谢谢各位
明白了, 是 新的赋值 和 旧的值 作 或 的相加 的意思

我的键盘 是两个小的直竖, 不知道原来是 | shift+ \ 输入
回复

使用道具 举报

ID:517951 发表于 2021-2-20 08:16 | 显示全部楼层
P1=P1|0x01就是把P0的第1位(P1^0)置高电平
回复

使用道具 举报

ID:840797 发表于 2021-2-20 08:30 | 显示全部楼层
同为小白的初学者,谢谢各位的解答!
回复

使用道具 举报

ID:883031 发表于 2021-2-21 15:30 | 显示全部楼层
采用或的方式好处在于不会影响其他位的值,尤其是在多处需要对同一寄存器赋值时特别有用。
回复

使用道具 举报

ID:388929 发表于 2021-2-21 16:33 | 显示全部楼层
我不是小白,也谢谢各大神的解答,每种答案都是一种思路,能分享真的是难能可贵,感谢
回复

使用道具 举报

ID:243702 发表于 2021-2-21 19:46 | 显示全部楼层
楼主要看看C语言位运算相关,位运算是修改一个数的某些位而保留其他位。
回复

使用道具 举报

ID:366464 发表于 2021-2-21 20:56 | 显示全部楼层
| 这个符号特别,在台式键盘右手shift上边 小台机把这符号截成两段
回复

使用道具 举报

ID:420836 发表于 2021-2-22 06:06 | 显示全部楼层
这是逻辑位或运算,如果所有在或操作中的位均为0,则结果为0,如果或操作的位中至少一位为1,则结果为1。使用Shift +“ \”获得| 标志。
回复

使用道具 举报

ID:231674 发表于 2021-3-2 15:57 | 显示全部楼层
P1|=(0x01<<N), 将P1第N位置1,其余位不变。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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