51单片机初入门答疑

高低电平

由于电源从正极到负极有电压差,并且电路是导通的,所以就会有电流通过,LED 小灯因为有了电流通过,所以就会直接发光。我们把右侧的原 GND 处接到单片机 P0.0 引脚上,那么如果我们单片机输出一个低电平,也就是跟 GND 一样的 0V 电压,就可以让 LED 小灯和图 2-4 一样发光了。

因为我们的单片机是可以编程控制的,我们可以让 P0.0 这个引脚输出一个高电平,就是跟 VCC 一样的 5V 电压,那么这个时候,左侧 VCC 电压和右侧的 P0.0 的电压是一致的,那就没有电压差,没有电压差就不会产生电流,没有电流 LED 小灯就不会亮,也就是会处于熄灭状态。

特殊功能寄存器和位定义

第一条语句是:sfr  P0 = 0x80;

sfr 这个关键字,是 51 单片机特有的,他的作用是定义一个单片机特殊功能寄存器(special function register)。51 单片机内部有很多个小模块,每个模块居住在拥有唯一房间号的房间内,同时每个模块都有 8 个控制开关。P0 就是一个功能模块,就住在了 0x80 这个房间里,我们就是通过设置 P0 内部这个模块的 8 个开关,来让单片机的 P0 这 8 个 IO 口输出高电平或者低电平的。而 51 单片机内部有很多寄存器,如果我们想使用的话必须提前进行 sfr 声明。不过 Keil 软件已经把所有这些声明都预先写好并保存到一个专门的文件中去了,我们要用的话只要文件开头添加一行#include<reg52.h>即可

第二条语句是:sbit  LED = P0^0;

这个 sbit,就是对刚才所说的 SFR 里边的 8 个开关其中的一个进行定义。经过上边第二条语句后,以后只要在程序里写 LED,就代表了 P0.0 口(“^”这个符号在数字键 6 上边),注意这个 P 必须大写,也就是说我们给 P0.0 又取了一个更形象的名字叫做 LED。
![[IO口特殊功能寄存器.png]]t 图中 P0 口所在的地址是 0x80,一共有从 7 到 0 这 8 个 IO 口控制位,后边有个 Reset Value(复位值),这个很重要,是我们看寄存器必看的一个参数,8 个控制位复位值全部都是 1。

这就是告诉我们,每当单片机上电复位的时候,所有的引脚的值默认是都是 1,即高电平,我们在设计电路的时候也要充分的考虑这个问题。

C 运算符

按位与 – &

只有当两个对应的二进制位都为 1 时,结果才为 1,否则为 0

按位或 – |

只有当两个对应的二进制位其中有一个是 1,结果就是 1,同 0 才为 0

按位异或 – ^

只有当两个对应的二进制位互异,结果就为 1,否则为 0