为什么51单片机编程中P1^0 表示 P1I/O口里面的0号引脚

如题所述

第1个回答  推荐于2017-10-06
授之以渔吧

你有没有考虑一下便程序的时候为什么要引用头文件? 如果不呢?

去看一下 #include<reg51.h>或者是类似的头文件你就会发现有

例:sfr P1 = 0x90;

这样的一行即定义P1 与地址0x90 对应,P1 口的地址就是0x90.

SFR的定义在头文件reg51.h或reg52.h中。

在C51里,利用sbit可访问RAM中可寻址位或SFR中可寻址位。

如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C语言变量名,所以得给它另起一个名字,比如P1_0,可是P1_0 是不是就是P1.0呢?C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit 来定义,sbit 的用法有三种:

第一种方法:sbit 位变量名=地址值

第二种方法:sbit 位变量名=SFR 名称^变量位地址值

第三种方法:sbit 位变量名=SFR 地址值^变量位地址值

例如,定义P1 中的P1.1脚可以用以下三种方法:

sbit P1_1=0x92 (1)说明:0x92是P1.1 的位地址值

sbit P1_1=P1^1 (2)说明:其中P1必须先用sfr 定义好

sbit P1_1=0x90^2 (3)说明:0x90 就是P1的地址值本回答被提问者和网友采纳
第2个回答  2014-11-21

规定的啊

看头文件

第3个回答  2014-11-21
人工语言,可以理解为一些规定,哪有为什么呀。

为什么51单片机编程中P1^0 表示 P1I\/O口里面的0号引脚
如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C语言变量名,所以得给它另起一个名字,比如P1_0,可是P1_0 是不是就是P1.0呢?C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit 来定义,sbit 的用法有三种:第一种方法:sbit 位变量名=地...

P1^0 = 0 ; P1^1 =0;是什么意思呀?
P1^0 表示 P1I\/O口里面的0号引脚 。 =0 表示 给这个引脚赋值0 (就是低电平)

单片机C语言 P1^0 = 1 和P0 = 0xFF
P1^0=1,就是让这个端口的第一个引脚输出高电平 P0端口也有8个引脚 P0 = 0xFF就是让该端口8个引脚均输出高电平

“^”在单片机C语言里面怎么读?比如P1^0怎么读?
异或运算符啊~就读做异或 是位运算符的一种 比如说a的值是0x1001 b的值为0x1010 则a^b的值为0x0011;位运算遵循相同位上的数相同值为0,不同值为1.

单片机sfr和sbit有什么区别
sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。sfr P1 = 0x90;\/\/定义P1 I...

P1^0 = 0 ; P1^1
P1^0 表示 P1I\/O口里面的0号引脚 .=0 表示 给这个引脚赋值0 (就是低电平)

相似回答