3. 字节(byte)
把相邻的8 位二进制数称为字节。由于计算机只能识别和处理二进制数,因此在计算机内部把所有的数据,如字母、数字、特殊符号等都用二进制代码表示。
二进制代码常用到的是ASCII码,它的长度为8位,其中低7位表示字母本身的编码,例如,大写字母W 用二进制数表示为1010lllB ,第8位用作奇偶效验位或规定为0 。80C51 数据存储器每个单元是8位,正好能放入8位二进制数,即1个字节。字节的多少代表着存储器的容量大小。
2.2.3 程序存储器
程序存储器主要用于存储程序,其最大特点是电源关掉后,所存储的程序不会消失,像计算机中的硬盘一样。80C51程序存储器在片内有4KB,使用片内存储器时要将单片机EA(第31引脚)接高电平,即接到电源+5V。如果片内容量不够时,可在片外安装存储芯片扩展6OKB,如图2.4所示,使程序存储器(片内加片外)达到64KB。
程序存储器是十六位的,用4 位十六进制数来表示地址。其中片内4KB 的地址范围是0000H~0FFFH,片外60KB 的地址范围是1000H~FFFFH。
图2.4 程序存储器配置
数据存储器
数据存储器是程序运行中暂时存放数据的地方,也称为寄存器。其特点是存储内容会随着电源的关闭而消失,像计算机中的内存一样。
数据存储器是8 位存储器,一个单元是一个字节,片内部有256 字节(可以想象为一个256 层的存储柜,每层8 个隔),地址范围用十六进制数可表示为00H~FFH 。图2.5 为片内数据存储器的配置示意图。可分两部分,其中,低128 字节(OOH~7FH )为一般用途寄存器区;高128 字节(80H~FFH )为特殊功能寄存器区,如图2.5 (a)所示。
图2.5 片内数据存储器的配置示意图
1.一般用途寄存器区
一般用途寄存器区RAM 的容量为128 字节,根据用途可划分为工作寄存器区、位寻址区和用户RAM 区,如图2.5 (b)所示。
·工作寄存器区
在低128字节中,00H~1FH共32个单元(字节)是工作寄存器区,又分为4组,每组由8个单元组成,分别用R0~R7作为这8个单元的寄存器名。
在单片机复位后,选中的是第0组工作寄存器。每组寄存器均可选作CPU当前工作寄存器,可以通过PSW状态字中RS1、RS0的设置来改变CPU当前使用的工作寄存器。
·位寻址区
低128字节中的20H~2FH共16个单元是位存储区,可用位寻址方式访问其各位。
·用户RAM 区
低128字节中的30H~7FH共80个单元是用户RAM区,用作堆栈或数据缓冲。
2 .特殊功能寄存器区
特殊功能寄存器,简称SFR 。它在单片机中扮演着非常重要的角色,使用输入/输出、中断、串行口、计时/计数等功能,都必须先设置SFR 中的各相关寄存器。
特殊功能寄存器的地址范围为80H~FFH ,如图2.5 (c)所示,其中包括如下所列的寄存器。
·累加器ACC ( A )。
·B寄存器。
·程序状态字组PSW 。
·数据指针寄存器DPTR 。
·堆栈指针寄存器SP 。
·P0 、P1 、P2 、P3 端口寄存器。
·中断允许控制寄存器IE 。
·中断优先权IP 寄存器。
·计时/计数模式寄存器TMOD 。
·计时/计数器控制/状态寄存器TCON 。
·串行通信控制寄存器SCON 。
·串行数据寄存器SBUF 。
·电源控制及数据传输率选择寄存器PCON 。
其中,常用的有P0 、Pl 、P2、P3 端口寄存器及累加器A 等。
2.3 单片机工作的基本原理
单片机的功能主要是通过向特殊寄存器输送0 或1 二进制数来实现的,所以,了解0和1 的作用对理解单片机工作的基本原理非常重要,下面就以一个程序实例来说明输入/输出端口的工作原理。
程序TEST.ASM 是一个实例程序,图2.6 是它的电路图,在图中单片机P1端口的8个引脚分别与8只发光二极管相连。
图2.6 Pl 端口输出电路
如果将该程序写入单片机后,在程序运行时会看到8个发光二极管中接在P1.0~P1.3、P1.5~Pl.7的发光二极管被点亮;而P1.1和P1.4所接的发光二极管熄灭。
程序:TEST.ASM
MOV P1 ,#00010010B
JMP $
END ~
引脚与寄存器的关系
程序中的Pl对外是输入/输出端口,共有8个引脚,分别与8只发光二极管相连;而Pl对内是特殊功能寄存器里的一个单元,地址在90H ,单元内共有8个位,每位接出一根引线,就是在外面看到的引脚PI.0~P1.7,Pl寄存器与引脚的对应关系示意图如图2.7所示。
图2.7 Pl 寄存器与引脚的对应关系示意图
单片机的P0、P2、P3 与上述的逻辑结构相同。
单片机中0和1的作用
1.在端口的外部0与1是表示电平的高低
图2.8 所示是图2.6 P1 端口输出的等效电路,D是发光二极管,当正向电流有电流流过时,二极管就会发光。R 是限流电阻,防止二极管因电流过大而被烧坏。
从电路中可以看出,当开关K 向下与b 点相接时,二极管的负极接地,即Pl 端口输出呈现低电平,用0来表示,此时二极管因有电流通过而发光;当开关K 向上与a 点相接时,二极管的负极接电源+5V ,即Pl 端口输出呈现高电平,用1 来表示(此时的l 不是1V ,而是代表+5V ) ,此时二极管被截止,没有电流通过,也就不能发光。
所以,当Pl引脚为低电平O 时,灯会点亮;当P1引脚为高电平1时,灯会灭。0和1在端口的外部是表示电平的高低。
图2.8 Pl 端口等效电路
2.在单片机内部对寄存器而言,0 和1是表示二进制数
要想使输出端引脚呈现低电平或高电平,只需要向寄存器Pl 输入相应的二进制数0或1 即可。例如,通过使用单片机的MOV 指令(MOV 指令的功能是输送数据),把8 位二进制数00010010 送到特殊功能寄存器Pl 单元,程序为:MOV PI , #00010010B ,如图2.9 所示。0 所对应的引脚是低电平,发光二极管导通发光;1 所对应的引脚是高电平,发光二极管截止,灯灭。
图2.9 装入8 位二进制数