第二章
单片微机的基本结构
微型计算机的基本组成有三部分,即中央处理器
CPU (通常包括运算器和控制器 )+存储器 +输入 /输出 (I/O)
接口。若将组成计算机的基本部件集成在一块芯片上,则
俗称为单片微机。
80C51内部结构如 图 2- 1所示,主要包括中央处理
器 CPU (算术逻辑部件 ALU、控制器等 ),只读存储器
ROM,随机存取存储器 RAM、定时器 /计数器、并行 I/O
口 P0~ P3、串行口、中断系统以及定时控制逻辑电路等。
2.1 80C51单片微机的内部结构
这些部件通过内部总线连接起来, 基本结构仍然是通用
CPU加上外围芯片的结构模式, 但功能单元上的控制与
先前相比有重大变化, 采用了特殊功能寄存器 (SFR) 进
行集中控制的方法 。
1.中央处理器
单片微机中的中央处理器( CPU)是单片微机的核心,
主要完成运算和控制功能,又增设了“面向控制”的处
理功能,增强了实时性。
2,程序存储器
根据内部是否带有程序存储器而形成三种型号:内部
没有程序存储器的称 80C31,内部带 ROM的称 80C51,
内部以 EPROM代替 ROM的称 87C51。
目前单片微机的程序存储器有以下几种结构形式:
⑴ 片内只读存储器
片内掩膜 ROM的特点是程序必须在制作单片微机时写入,
一次性固化,用户不能修改。这种结构形式只适用于程序已
成熟、定型,且批量很大的场合。并且只能在厂家定制完成。
这种单片微机的价格最便宜。
⑵ 片内可编程的 ROM
片内可编程的 ROM可直接由用户进行编程, 因而用户在实
际应用中甚感方便 。 一般有以下几种:
·紫外线可擦除型 ROM- EPROM型单片微机 (如 87C51)。
EPROM需用紫外线擦除, 必须脱机固化, 不能在线改写 。
·电可擦除型 ROM——EEPROM,随着微电子技术的发展,
已开始在单片微机中采用, 称为 Flash单片微机 (如 89C51)。
电可擦除型 ROM给用户带来了更大的方便, 特别是应用系统
的现场调试 。 由于目前价格已经迅速下降, 所以被广泛采用 。
EPROM和 EEPROM都是可以多次擦除和编程的, 或
称 MTP的 ROM。
·OTP的 ROM,仅允许用户一次编程。在应用系统或智能
产品的小批量试生产时应用,许多单片微机厂家都提供该类
产品。
⑶ 片外只读存储器
由于受芯片集成度的限制, 片内只读存储器一般
存储容量较小, 给使用带来不便 。 利用单片微机的并行
扩展技术可以外扩片外只读存储器 。 3,数据存储器
( RAM)
3,数据存储器 ( RAM)
在单片微机中, 用随机存取存储器 ( RAM) 来存储
程序在运行期间的工作变量和数据, 所以称为数据存储
器 。 一般在单片微机内部设置一定容量 ( 64 B至 384B)
的 RAM。 这样, 小容量的数据存储器以高速 RAM的形式集
成在单片微机内, 以加快单片微机运行的速度 。 而且这
种结构的 RAM还可以使存储器的功耗下降很多 。
在单片微机中,常把寄存器(如工作寄存器、特殊功
能寄存器、堆栈等)在逻辑上划分在片内 RAM空间中,所以
可将单片微机内部 RAM看成是寄存器堆,有利于提高运行速
度。
当内部 RAM容量不够时,还可通过串行总线或并行总
线外扩数据存储器。
4,并行 I/O口
单片微机往往提供了许多功能强、使用灵活的并行输
入 /输出引脚,用于检测与控制。有些 I/O引脚还具有多种功
能,比如可以作为数据总线的数据线、地址总线的地址线、
控制总线的控制线等。单片微机 I/O引脚的驱动能力也逐渐
增大,甚至可以直接驱动外扩的 LED显示器。
5,串行 I/O口
目前高档 8位单片微机均设置了全双工串行 I/O口, 用以
实现与某些终端设备进行串行通信, 或者和一些特殊功能的
器件相连的能力, 甚至用多个单片微机相连构成多机系统 。
随着应用的拓宽, 有些型号的单片微机内部还包含有两个串
行 I/O口 。
6,定时器 /计数器
在单片微机的实际应用中,往往需要精确的定时,或者需
对外部事件进行计数。为了减少软件开销和提高单片微机的
实时控制能力,因而均在单片微机内部设置定时器 /计数器
电路。 80C51共有两个 16位的定时器 /计数器,80C52则有三
个 16位的定时器 /计数器。
7,中断系统
80C51的中断功能较强,具有内、外共五个中断源,两
个中断优先级。
8,定时电路及元件
计算机的整个工作是在时钟信号的驱动下, 按照严格的
时序有规律地一个节拍一个节拍地执行各种操作 。 单片微机内
部设有定时电路, 只需外接振荡元件即可工作 。
外接振荡元件一般选用晶体振荡器, 或用价廉的 RC振荡器,
也可用外部时钟源, 作为振荡元件 。 近来有的单片微机将振荡
元件也集成在芯片内部, 这样不仅大大缩小了单片微机的体积,
同时也方便了使用 。
单片微机在结构上突破了常规的按逻辑功能划分芯片、
由多片构成微型计算机的设计思想,将构成计算机的许多功能
集成在一块晶体芯片上。
80C51有 40引脚双列直插( DIP),44引脚 (PLCC)
和 44引脚( PQFP/TQFP)封装形式。 80C51/ 80C52的封
装及逻辑图如 图 2- 2所示。
在某些场合, 不需通过并行总线扩展芯片, 这时常
采用 20引脚双列直插 ( DIP) 甚至仅 14引脚的单片微机,
如 ATMEL公司的 1051/2051/4051单片微机等, 或 PHILIPS
公司的 P87LPC764单片微机 。 它们的封装及引脚见 图 2–3。
2.2 80C51单片微机的引脚及其功能
按引脚的功能可分为三部分,
1,电源和晶振:
·Vcc——运行和程序校验时接电源正端 。
·Vss——接地 。
·XTAL1——输入到单片微机内部振荡器的反相放
大器 。 当采用外部振荡器时, 对 HMOS单片微机,此引脚
应接地;对 CHMOS单片微机, 此引脚作驱动端 。
·XTAL2——反相放大器的输出,输入到内部时钟
发生器。当采用外部振荡器时,XTAL2接收振荡器信号,
对 CHMOS,此引脚应悬浮。
2,I/O:
·P0——8位, 漏极开路的双向 I/O口 。
当使用片外存储器 ( ROM及 RAM) 时, 作低八
位地址和数据总线分时复用 。
P0口 ( 作为总线时 ) 能驱动 8个 LSTTL负载 。
·P 1——8位, 准双向 I/O口 。
在编程 /校验期间, 用做输入低位字节地址 。
P1口可以驱动 4个 LSTTL负载 。
对于 80C52,P1.0——T2,是定时器 2的计数输入端;
P1.1——T2EX,是定时器 2的外部输入端 。
读两个特殊引脚的输出锁存器时应由程序置 1。
·P 2——8位, 准双向 I/O口 。
当使用片外存储器 ( ROM及 RAM) 时, 输出高 8位地
址 。
在编程 /校验期间,接收高位字节地址。
P2口可以驱动 4个 LSTTL负载。
·P 3——8位, 准双向 I/O口, 具有内部上拉电路 。
P3提供各种替代功能 。 在提供这些功能时, 其输出锁存
器应由程序置 1。 P3口可以输入 /输出 4个 LSTTL负载 。
·串行口:
P3,0——RXD 串行输入口 。
P3,1——TXD 串行输出口。
·中断:
P3,2—— 外部中断 0输入 。
P3,3—— 外部中断 1输入 。
· 定时器/计数器:
P3,4——定时器 /计数器 T0的外部输入 。
P3,5——定时器 /计数器 T1的外部输入 。
·数据存储器选通:
P3,6——WR 低电平有效, 输出, 片外存储器写选通 。
P3,7—— RD 低电平有效,输出,片外存储器读选通。
3,控制线:共 4根 。
·RST——复位输入信号, 高电平有效 。 在振荡器工作时,
在 RST上作用两个机器周期以上的高电平, 将器件复位 。
·EA /Vpp——片外程序存储器访问允许信号, 低电平有效 。
EA=1,选择片内程序存储器 (80C51为 4KB,80C52为 8KB) ;
EA=0,则程序存储器全部在片外而不管片内是否有程序存储
器 。
使用 80C31时, 必须接地, 使用 8751编程时, 施加 21V
的编程电压 。
·ALE/PROG——地址锁存允许信号, 输出 。
在访问片外存储器或 I/O时, 用于锁存低八位地址, 以
实现低八位地址与数据的隔离 。
ALE以 1/6的振荡频率固定速率输出,可作为对外输出
的时钟或用作外部定时脉冲。在 EPROM编程期间,作输入。
输入编程脉冲( PROG)。
ALE可以驱动 8个 LSTTL负载。
·PSEN——片外程序存储器读选通信号, 低电平有效 。
在从片外程序存储器取指期间, 在每个机器周期中, 当
有效时, 程序存储器的内容被送上 P0口 ( 数据总线 ) 。
可以驱动 8个 LSTTL负载 。
中央处理器 CPU是单片微机内部的核心部件,主要
包括控制器、运算器和工作寄存器及时序电路。
2.3 80C51 CPU的结构和特点
中央控制器是识别指令, 并根据指令性质控制计算
机各组成部件进行工作的部件, 与运算器一起构成中央处
理器 。 在 80C51单片机中, 控制器包括程序计数器 PC,程
序地址寄存器, 指令寄存器 IR,指令译码器, 条件转移逻
辑电路及定时控制逻辑电路 。
其功能是控制指令的读出, 译码和执行, 对指令的
执行过程进行定时控制, 并根据执行结果决定是否分支转
移 。
2.3.1中央控制器
1,程序计数器 PC
程序计数器 PC( Program Counter) 是一个独立的计
数器, 不属于内部的特殊功能寄存器 。 PC中存放的是下一
条将要从程序存储器中取出的指令的地址 。
其基本的工作过程是:读指令时, 程序计数器 PC将
其中的数作为所取指令的地址输出给程序存储器, 然后程序
存储器按此地址输出指令字节, 同时程序计数器 PC本身自
动加 1,指向下一条指令地址 。
程序计数器 PC变化的轨迹决定程序的流程 。
在执行条件转移或无条件转移指令时, 程序计数器将被
置入转移的目的地址, 程序的流向发生变化 。
在执行调用指令或响应中断时, 将子程序的入口地址或者
中断矢量地址送入 PC,程序流向发生变化 。
2,数据指针 DPTR
DPTR是一个 16位的特殊功能寄存器, 主要功能是作为
片外数据存储器或 I/O寻址用的地址寄存器 ( 间接寻址 ),
故称为数据存储器地址指针 。
访问片外数据存储器或 I/O的指令为:
MOVX A,@ DPTR 读
MOVX @ DPTR,A 写
DPTR寄存器也可以作为访问程序存储器时的基址寄存器 。 这
时寻址程序存储器中的表格, 常数等单元, 而不是寻址指令 。
MOVC A,@ A+ DPTR
JMP @ A+ DPTR
DPTR寄存器既可以作为一个 16位寄存器处理, 也可以作为
两个 8位寄存器处理, 其高 8位用 DPH表示, 低 8位用 DPL表示 。
在 80C51中, 两个地址寄存器, 即程序计数器 PC与数据指针
DPTR,有相同之处, 也有差别:
⑴ 两者都是与地址有关的 1 6位的寄存器 。 其中 PC与程序
存储器的地址有关, 而 DPTR与数据存储器的地址有关 。 作为地
址寄存器使用时 PC与 DPTR都是通过 P0和 P2口输出的 。 PC的输
出与 ALE及信号有关; DPTR的输出, 则与 ALE、,信号有关 。
⑵ PC只能作为 16位寄存器对待。 PC是不可以访问的,它
不属于特殊功能寄存器,有自己独特的变化方式。 DPTR可以作
为 16位寄存器,也可以作为两个 8位寄存器,DPTR是可以访问
的,DPL和 DPH都位于特殊功能寄存器区中。
PSEN
3,指令寄存器 IR,指令译码器及控制逻辑
指令寄存器 IR是用来存放指令操作码的专用寄存器 。 执行程
序时, 首先进行程序存储器的读操作, 也就是根据程序计数
器给出的地址从程序存储器中取出指令, 送指令寄存器 IR,
IR的输出送指令译码器;然后由指令译码器对该指令进行译
码, 译码结果送定时控制逻辑电路, 如 图 2- 4所示 。
定时控制逻辑电路则根据指令的性质发出一系列定时
控制信号, 控制计算机的各组成部件进行相应 的工作, 执
行指令 。
条件转移逻辑电路主要用来控制程序的分支转移在
80C51中,转移条件也可分为两部分。一部分是内部条件,即
程序状态标志位( PSW)和累加器的零状态。另一部分是外
部条件,即 F0和所有位寻址空间的状态。
运算器主要用来实现对操作数的算术逻辑运算和位操作
的。如对传送到 CPU的数据进行加、减、乘、除、比较,BCD
码校正等算术运算;“与”、“或”、“异或”等逻辑操作;
移位、置位、清零、取反、加 1、减 1等操作。
80C51的 ALU还具有极强的位处理功能,如位置 1、位
清零、位“与”、位“或”等操作,对“面向控制”特别有用。
运算器主要包括算术逻辑运算单元 ALU、累加器 ACC
( A)、暂存寄存器,B寄存器、程序状态标志寄存器 PSW以及
BCD码运算修正电路等。
2.3.2 运算器
ALU有两个输入:
⑴ 通过暂存器 1的输入:输入数据来自寄存器, 直接寻址单
元 ( 含 I/O口 ), 内部 RAM,寄存器 B或是立即数 。
⑵ 通过暂存器 2或累加器 ACC的输入:通过暂存器 2的运
算的指令有
ANL direct,# data
ORL direct,# data
XRL direct,# data
其它的运算, 其输入之一大多数也要通过累加器 ACC。
ALU有两个输出, ⑴ 数
据经过运算后,其结果又通过内部总线送回到累加器中;
⑵ 数据运算后产生的标志位输出至程序状态字 PSW。
2,累加器 A
累加器 A是 CPU中使用最频繁的一个八位专用寄存器,
简称 ACC或 A寄存器。主要功能:累加器 A存放操作数,是
ALU单元的输入之一,也是 ALU运算结果的暂存单元。
在 80C51中只有一个累加器 A,而单片微机中大部分数据操作
都要通过累加器 A进行,容易产生, 瓶颈, 现象。
3,B寄存器
B寄存器在乘法和除法指令中作为 ALU的输入之一 。 乘法中,
ALU的两个输入分别为 A,B,运算结果存放在 AB寄存器对中 A
中放积的低 8位, B中放积的高 8位 。
除法中, 被除数取自 A,除数取自 B,商数存放于 A,余数存放
于 B。
在其它情况下, B寄存器可以作为内部 RAM中的一个单元来使
用 。
4,程序状态字 PSW
PSW( Program Status Word) 是一个逐位定义的 8位寄
存器, 其内容的主要部分是算术逻辑运算单元 ( ALU) 的输出 。
其中有些位是根据指令执行结果, 由硬件自动生成, 而有些位状
态可用软件方法设定 。
一些条件转移指令就是根据 PSW中的相关标志 位的状态, 来实现
程序的条件转移 。
其中, 除 PSW,1( 保留位 ), RS1和 RS0( 工作寄存器组选择控制
位 ) 及用户标志 F0之外, 其他四位:奇偶校验位 P,溢出标志位 OV、
辅助进位标志位 AC及进位标志位 CY都是 ALU运算结果的直接输出 。
P (PSW,0) -奇偶标志位 。
每个指令周期都由硬件来置位或清除 。
用以表示累加器 A中值为 1的个数的奇偶性:若累加器值为 1
的位数是奇数, P置位 ( 奇校验 ) ;否则 P清除 (偶校验 ) 。
CY AC F0 RS1RS0 OV - P
在串行通信中, 常以传送奇偶校验位来检验传输数据的
可靠性 。 通常将 P置入串行帧中的奇偶校验位 。
? OV (PSW,2) -溢出标志位。
当执行运算指令时, 由硬件置位或清除, 以指示运算是否
产生溢出, OV置位表示运算结果超出了目的寄存器 A所能表示
的带符号数的范围 ( 一 128~+ 127) 。
若以 Ci表示位 i向位 i + l有进位, 则 OV=C6⊕ C7;当位 6
向位 7有进位 (借位 )而位 7不向 CY进位 (借位 )时;或当位 7向 C进
位 (借位 )而位 6不向位 7进位 (借位 )时, OV标志置位, 表示带符
号数运算时运算结果是错误的;否则, 清除 OV标志, 运算个
结果正确 。
对于 MUL乘法, 当 A,B两个乘数的积超过 255时 OV置
位;否则, OV= 0。 因此, 若 OV= 0时, 只需从 A寄存器中取
积;若 OV= 1时, 则需从 B,A寄存器对中取积 。
对于 DIV除法, 若除数为 0时, OV=1;否则, OV=0。
? RS1,RS0 (PSW.4,PSW.3) -工作寄存器组选择位
用于设定当前工作寄存器的组号。工作寄存器共有四
组,其对应关系见 表 2–1
? AC (PSW,6) -辅助进位标志位。
当进行加法或减法运算时, 若低 4位向高 4位数发生进
位或借位时 AC将被硬件置位; 否则, 被清除 。
在十进制调整指令 DA中要用到 AC标志位状态 。
? CY (PSW,7) -进位标志位 。
在进行算术运算时, 可以被硬件置位或清除, 以表示
运算结果中高位是否有进位或借位 。 在布尔处理机中 CY被
认为是位累加器 。
? F0 (PSW,5) -用户标志位 。
开机时该位为, 0”。 用户可根据需要, 通过位操作指
令置, l”或者清, 0”。
时钟电路用于产生单片微机工作所需要的时钟信号,而时
序所研究的是指令执行中各信号之间的相互关系。单片微
机本身就如一个复杂的同步时序电路,为了保证同步工作
方式的实现,电路应在唯一的时钟信号控制下严格地按时
序进行工作。
2.3.3 时钟电路及 CPU的工作时序
1,时钟电路
在 80C51内带有时钟电路, 只需要在片外通过 XTALI
和 XTAL2引脚接入定时控制元件 ( 晶体振荡器和电容 ), 即
可构成一个稳定的自激振荡器 。 在 80C51芯片内部有一个高
增益反相放大器, 而在芯片的外部, XTAL1和 XTAL2之间
跨接晶体振荡器和微调电容 。 80C51的时钟电路如 图 2–6所示 。
由图可见, 时钟电路由下列几部分组成:振荡器及定时控制
元件, 时钟发生器, 地址锁存允许信号 ALE。
? 振荡器及定时控制元件
在 80C51芯片内部有一个高增益反相放大器, 其输入端为
芯片引脚 XTAL1,其输出端为引脚 XTAL2。
只需要在片外通过 XTAL1和 XTAL2引脚跨接晶体振荡器和微
调电容, 形成反馈电路, 振荡器即可工作 。 振荡器的结构和
振荡电路原理如 图 2- 7所示 。
振荡器的工作可以由 PD位 ( 特殊功能寄存器 PCON中
的一位 ) 控制 。 当 PD置 1时, 振荡器停止工作, 系统进入低
功耗工作状态 。
振荡器的工作频率一般在 1.2~ 12 MHz之间, 由于制造
工艺的改进, 有些单片微机的频率范围正向两端延伸, 高端
可达 40 MHZ,低端可达 0Hz。
在由多片单片微机组成的系统中,为了各单片微机之
间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为
各单片微机的振荡脉冲。
当由外部输入时钟信号时, 外部信号接入 XTAL1端, XTAL2
端悬空不用 。 对外部信号的占空比没有要求, 高低电平持续
时间应不小于 20 μs。
? 内部时钟发生器
内部时钟发生器实质上是一个 2分频的触发器。其输入
由振荡器引入的,输出为两个节拍的时钟信号。输出的前半
周期,节拍 1( P1)信号有效;后半周期,节拍 2( P2)信号
有效。每个输出周期为一个计算机 CPU的状态周期,即时钟
发生器的输出为状态时钟。每个状态周期内包括一个 P1节拍
和一个 P2节拍,形成 CPU内的基本定时时钟。
? ALE信号
一般地说, 状态时钟经过 3分频之后, 产生 ALE引脚上的
信号输出 。
2﹒ 时序定时单位
单片微机执行指令是在时序电路的控制下一步一步进行的 。 时
序是用定时单位来说明的 。 80C51的时序定时单位共有 4个:节
拍, 状态, 机器周期和指令周期 。
( 1) 节拍 P
振荡脉冲的周期称为节拍 。
( 2) 状态 S
一个状态 S包含两个节拍,其前半周期对应的节拍叫 P1,后半
周期对应的节拍叫 P2
( 3) 机器周期
80C51采用定时控制方式, 因此它有固定的机器周期 。
规定一个机器周期的宽度为 6个状态, 并依次表示为 S1~ S6。
由于一个机器周期共有 12个振荡脉冲周期, 因此机器周期就
是振荡脉冲的 12分频 。
当振荡脉冲频率为 12 MHZ时, 一个机器周期为 lμS;
当振荡脉冲频率为 6MHZ时, 一个机器周期为 2μS。
机器周期是单片微机的最小时间单位 。
( 4) 指令周期
执行一条指令所需要的时间称为指令周期 。 它是最大
的时序定时单位 。 80C51的指令周期根据指令的不同, 可包
含有一, 二, 三, 四个机器周期 。 当振荡脉冲频率为 12
MHZ时, 80C51的一条指令执行的时间最短为 lμS,最长为
4μS。
3,80C51指令时序
80C51共有 111条指令,全部指令按其长度可分为单字
节指令、双字节指令和三字节指令。
图 2- 8所表示的是几种典型单机器周期和双机器周期指令
的时序。
? 单机器周期指令,如 图 2- 8( a)、( b)所示。
双字节时, 执行在 S1P2开始, 操作码被读入指令寄存器;
在 S4P2时, 再读入第二个字节 。 单字节时, 执行在 S1P2开始,
操作码被读入指令寄存器;在 S4P2时仍有读操作, 但被读入
的字节 ( 即下一操作码 ) 被忽略, 且此时 PC并不增量 。
以上两种情况均在 S6P2时结束操作 。
双机器周期指令, 如 图 2- 8( c), ( d) 所示 。
双字节时, 执行在 S1P2开始, 操作码被读入指令寄存器;在
S4P2时, 再读入的字节被忽略 。 由 S5开始送出外部数据存储
器的地址, 随后是读或写的操作 。 在读, 写期间, ALE不输
出有效信号 。
在第二个机器周期, 片外数据存储器也寻址和选通, 但不产
生取指操作 。
单字节时, 执行在 S1P2开始, 在整个两个机器周期中, 共
发生四次读操作, 但是后三次操作都无效 。
一般, 算术 /逻辑操作发生在节拍 1期间, 内部寄存器对寄存
器的传送发生在节拍 2期间 。
图中的 ALE信号是为地址锁存而定义的, 该信号每有效一
次对应单片微机进行一次读指令操作 。 ALE信号以振荡脉冲
六分之一的频率出现, 因此, 在一个机器周期中, ALE信号
两次有效, 第一次在 S1P2和 S2P1期间, 第二次在 S4P2和 S5P1
期间, 有效宽度为一个状态周期 S。
( 1) 单字节单周期指令 ( 例如 INC A)
只需进行一次读指令操作 。 当第二个 ALE有效时, 由于 PC
没有加 1,所以读出的还是原指令 。
( 2) 双字节单周期指令 ( 例如 ADD A,# data)
ALE的两次读操作都是有效的, 第一次是读指令操作码, 第二
次是读指令第二字节 。
( 3) 单字节双周期指令 ( 例如 INC DPTR)
两个机器周期共进行四次读指令的操作, 但其中后三次的读操
作全是无效的 。
(4) 单字节双周期指令(例如 MOVX类指令)
MOVX类指令情况有所不同 。 因为执行这类指令时, 先在
ROM读取指令, 然后对外部 RAM进行读 /写操作 。 第一机器周期
时, 与其它指令一样, 第一次读指令 ( 操作码 ) 有效, 第二次读
指令操作无效 。 第二周期时, 进行外部 RAM访问, 此时与 ALE信
号无关, 因此, 不产生读指令操作 。
单片微机的存储器有两种基本结构:一种是在通
用微型计算机中广泛采用的将程序和数据合用一个存储
器空间的结构,称为普林斯顿( Princeton)结构;另一
种是将程序存储器和数据存储器截然分开,分别寻址的
结构,称为哈佛( Har- yard)结构。 Intel的 MCS- 51
和 80C51系列单片微机采用哈佛结构。 图 2–9为 80C51单
片微机存储器映象图。
? 在物理上设有 4个存储器空间
·程序存储器,片内程序存储器;
片外程序存储器 。
·数据存储器,片内数据存储器;
片外数据存储器。
2.4 存储器结构和地址空间
在逻辑上设有 3个存储器地址空间
·片内, 片外统一的 64 KB程序存储器地址空间;
·片内 256( 80C52 为 384) B数据存储器地址空间;
·片外 64 KB的数据存储器地址空间 。
在访问这 3个不同的逻辑空间时, 应选用不同形式的指
令 。
片内数据存储器空间, 在物理上又包含两部分:
对于 80C51型单片微机, 从 0~ 127 B为片内数据存储器
空间;从 128~ 255 B为特殊功能寄存器 (SFR)空间 ( 仅占用 20
多个字节 ) 。
对于 80C52型单片微机, 从 0~ 127 B为片内数据存储器空间;
从 128~ 255 B共 128个字节是数据存储器和特殊功能寄存器地
址重叠空间 。
80C51有三种基本的寻址空间:
·64 KB的片内, 外程序存储器寻址空间;
·64 KB的片外数据存储器寻址空间;
·256( 或 384) B的片内数据存储器寻址空间, 其中包括
特殊功能寄存器寻址空间 。
80C51的程序存储器( program memory)用于存放经调试
正确的应用程序和表格之类的固定常数。由于采用 16位的程序计
数器 PC和 16位的地址总线,因而其可扩展的地址空间为 64 KB。
⒈ 整个程序存储器可以分为片内和片外两部分。
EA引脚接高电平时,程序从片内程序存储器 0000H开始执行,即
访问片内存储器;当 PC值超出片内 ROM容量时,会自动转向片
外程序存储器空间执行。
EA引脚接低电平时, 迫使系统全部执行片外程序存储器 0000H
开始存放的程序 。
对于片内无 ROM的 80C31/80C32单片机, 应将 EA引脚固定接
低电平, 以迫使系统全部执行片外程序存储器程序 。
2.4.l 程序存储器
⒉ 程序存储器的某些单元被保留用于特定的程序入
口地址。
由于系统复位后的 PC地址为 0000H,故系统从 0000H单
元开始取指, 执行程序 。 从 0003H~ 002DH单元被保留用于
6个中断源的中断服务程序的入口地址 。
以下 7个特定地址被保留:
复位 0000H
外部中断 0 0003H
计时器 T0溢出 000BH
外部中断 1 0013H
计时器 T1溢出 001BH
串行口中断 0023H
计时器 T2/T2EX 002BH
在程序设计时, 通常在这些中断入口处设置无条件转移指
令, 使之转向对应的中断服务程序段处执行 。
⒊ 片内程序存储器为只读存储器 ROM。
存储器的类型有:掩膜 ROM,OTP( 一次性编程 )
ROM 和 MTP ( 多 次 编 程 ) ROM ( 包括 EPROM 及
E2PROM等 ) 。
在 87C51中为 4 KB的可编程, 可改写的只读存储器是
EPROM;在 89C51中为 4 KB的可编程, 可改写的只读存储
器是 EEPROM;而 80C31片内没有程序存储器, 使用时必
须由片外进行扩展 。
由于芯片内集成技术的提高, 片内程序存储器的容量做
得越来越大, 目前已达到 62 KB。 一般应用系统中, 已经
没有必要进行片外程序存储器的扩展 。
数据存储器( data memory)由随机存取存储器 RAM
构成,用来存放随机数据。
在 80C51 中, 数据存储器又分片内数据存储器
( internal data memory) 和片外数据存储器 ( external data
memory) 两部分 。
片内数据存储器 ( IRAM) 地址只有 8位, 因而最大寻
址范围为 256个字节 。
在 80C51中, 设置有一个专门的数据存储器的地址指
示器 — 数据指针 DPTR, 用于访问片外数据存储器
( ERAM) 。 数据指针 DPTR也是 16位的寄存器, 这样, 就
使 80C51具有 64 KB的数据存储器扩展能力 。
2.4.2 内部数据存储器
片内数据存储器是最灵活的地址空间。它在物理上又分成
两个独立的功能不同的区。
·片内数据 RAM区:对 80C51,为地址空间的低 128 B;
对 80C52,为地址空间的 0~ 255B。
·特殊功能寄存器 SFR区:地址空间的高 128 B。
对于 80C52,高 128B的 RAM区和 SFR区的地址空间
是重叠的 。 究竟访问哪一个区是通过不同的寻址方式来加
以区别, 即访问高 128B RAM区时, 选用间接寻址方式;
访问 SFR区, 则应选用直接寻址方式 。
图 2-10为片内数据存储器的地址空间分布图 。
⒈ 片内数据 RAM区
⑴ 工作寄存器区, 用寄存器直接寻址的区域,指令的
数量最多,均为单周期指令,执行的速度最快。
从 图 2–10中可知, 其中片内数据 RAM区的 0~ 31( 00H~
1FH), 共 32个单元, 是 4个通用工作寄存器组 ( 表 2–l),
每个组包含 8个 8位寄存器, 编号为 R0~ R7。
在某一时刻,只能选用一个寄存器组使用。其选择是通过软
件对程序状态字( PSW)中的 RS0,RS1两位的设置来实现的。
设置 RS0,RS1时,可以对 PSW字节寻址,也可以位寻址方式,
间接或直接修改 RS0,RS1的内容。
若 RS0,RS1均为 0,则选用工作寄存器 0组为当前工作寄存器 。
现需选用工作寄存器组 1则只需将 RS0改成 l,可用位寻址方式
( SETB PSW,3,PSW,3为 RS0位的符号地址 ) 来实现 。
累加器 ACC,B,DPTR及 CY( 布尔处理器的累加器 )
一般也作为寄存器对待 。
寄存器 R0,R1 通常用做间接寻址时的地址指针。
⑵ 位寻址区:
从片内数据 RAM区的 32- 47( 20H- 2FH)的 16个字节
单元,共包含 128位,是可位寻址的 RAM区。这 16个字节单元,
既可进行字节寻址,又可位寻址。字节地址与位地址之间的关
系见 表 2–2。
这 16个位寻址单元,再加上可位寻址的特殊功能寄存器一起构
成了布尔(位)处理器的数据存储器空间。在这一存储器空间
所有位都是可直接寻址的,即它们都具有位地址。
⑶ 字节寻址区,
从片内数据 RAM区的 48~ 127( 30H~ 7FH), 共 80个字节单
元, 可以采用直接字节寻址的方法访问 。
对于 80C52,还有高 128 B的数据 RAM区 。 这一区域只能采用
间接字节寻址的方法访问 。
⑷ 堆栈区及堆栈指示器 SP:
堆栈是在片内数据 RAM区中, 数据先进后出或后进先出的区
域 。 堆栈指示器 SP( stack pointer) 在 80C51中存放当前的堆
栈栈顶所指存储单元地址的一个 8位寄存器 。
堆栈有两种形式, 一是向上生成, 二是向下生成 。 80C51单片微
机的堆栈是向上生成的:即进栈时 SP的内容是增加的;出栈时
SP的内容是减少的 。
80C51的堆栈区域可用软件设置堆栈指示器 ( SP) 的值, 在片
内数据 RAM区中予以定义 。
系统复位后 SP内容为 07H。 如不重新定义, 则以 07H为栈底,
压栈的内容从 08H单元开始存放 。 通过软件对 SP的内容重新定义,
使堆栈区设定在片内数据 RAM区中的某一区域内, 堆栈深度不
能超过片内 RAM空间 。
堆栈是为子程序调用和中断操作而设立的 。 其具体功能有两个:
保护断点和保护现场 。 在 80C51单片微机中, 堆栈在子程序调用
和中断时会把断点地址自动进栈和出栈, 还有对堆栈的进栈和出
栈的指令 ( PUSH,POP) 操作, 用于保护现场和恢复现场 。
由于子程序调用和中断都允许嵌套,并可以多级嵌套,而现场
的保护也往往使用堆栈,所以一定要注意给堆栈以一定的深度,
以免造成堆栈内容的破坏而引起程序执行的” 跑飞”。
⒉ 特殊功能寄存器 SFR区
特殊功能寄存器 SFR( Special Function Register) 是 80C51中
各功能部件所对应的寄存器, 用以存放相应功能部件的控制命
令, 状态或数据的区域 。
80C51设有 128 B片内数据 RAM结构的特殊功能寄存器空间
区 。 除程序计数器 PC和 4个通用工作寄存器组外, 其余所有的
寄存器都在这个地址空间之内 。
80C51共定义了 21个特殊功能寄存器, 其名称和字节地
址列于 表 2- 3中 。 在 80C52中, 除上述 80C51的 21个之外, 还
增加了 5个特殊功能寄存器, 共计 26个 。 访问其它地址无效 。
在 80C51的 21个 ( 80C52的 26个 ) 特殊功能寄存器中,
字节地址中低位地址为 0H或 8H的特殊功能寄存器, 除有字节
寻址能力外, 还有位寻址能力 。 这些特殊功能寄存器与位地
址的对应关系见 表 2- 4。
片外数据存储器是在外部存放数据的区域,这一区域
只能用寄存器间接寻址的方法访问,所用的寄存器为 DPTR、
R1或 R0。指令助记符为 MOVX。
当用 R0,R1寻址时, 由于 R0,R1为 8位寄存器, 因此
最大寻址范围为 256B;当用 DPTR寻址时, 由于 DPTR为 16
位寄存器, 因此最大寻址范围为 64KB。
2.4.3 片外数据存储区
?80C51共有四个 8位的并行双向口,计有 32根输入/输出
( I/O)口线。各口的每一位均由锁存器、输出驱动器和
输入缓冲器所组成。由于它们在结构上的一些差异,故各
口的性质和功能也就有了差异。它们之间的异同列于 表 2
- 5。
2.5 并行输入 /输出端口
? P0口是一个多功能的 8位口, 可以字节访问也可位访问, 其
字节访问地址为 80H,位访问地址为 80H~ 87H。
⒈ 位结构
P0口位结构原理图见 图 2- 11。
2.5.1 P0口
⑴ P0口中一个多路开关:多路开关的输入有两个, 地址
/数据输出;输出锁存器的输出 /Q。 多路开关的输出用于控
制输出 FET Q0的导通和截止 。 多路开关的切换由内部控制信
号控制 。
⑵ P0口的输出上拉电路导通和截止受内部控制信号和地址
/数据信号共同 ( 相, 与, ) 来控制 。
⑶ 当内部信号置 1时, 多路开关接通地址/数据输出端 。
当地址/数据输出线置 1时, 控制上拉电路的, 与, 门输出为 1,
上拉 FET导通, 同时地址/数据输出通过反相器输出 0,控制
下拉 FET截止, 这样 A点电位上拉, 地址/数据输出线为 1。
当地址/数据输出线置 0时,, 与, 门输出为 0,上拉 FET截止,
同时地址/数据输出通过反相器输出 1,控制下拉 FET导通,
这样 A点电位下拉, 地址/数据输出线为 0。
通过上述分析可以看出, 此时的输出状态随地址/数据线而
变 。 因此, P0口可以作为地址 /数据复用总线使用 。 这时上下
两个 FET处于反相, 构成了推拉式的输出电路, 其负载能力大
大增加 。 此时的 P0口相当一个双向口 。
⑷ 当内部信号置 0时, 多路开关接通输出锁存器的 /Q端
这时明显地可以看出两点:
·由于内部控制信号为 0,与门关闭, 上拉 FET截止, 形成 P0口
的输出电路为漏极开路输出 。
·输出锁存器的 Q端引至下拉 FET栅极, 因此 P0口的输出状态由
下拉电路决定 。
在 P0口作输出口用时, 若 P0,i输出 1,输出锁存器的 Q端为 0,
下拉 FET截止, 这时 P0,i为漏极开路输出;若 P0,i输出 0,输
出锁存器的 Q端为 1,下拉 FET导通, P0,i输出低电平 。
在 P0口作输入口用时, 为了使 P0,i能正确读入数据, 必须先
使 P0.i置 1。 这样, 下拉 FET也截止, P0,i处于悬浮状态 。 A点
的电平由外设的电平而定, 通过输入缓冲器读入 CPU。 这时 P0
口相当于一个高阻抗的输入口 。
⒉ P0口的功能
⑴ 作 I/ O口使用
相当于一个真正的双向口:输出锁存, 输入缓冲, 但输入时需
先将口置 1;每根口线可以独立定义为输入或输出 。 它具有双向口
的一切特点 。
与其它口的区别是, 输出时为漏极开路输出, 与 NMOS的电路
接口时必须要用电阻上拉, 才能有高电平输出;输入时为悬浮状
态, 为一个高阻抗的输入口 。
⑵ 作地址/数据复用总线用
此时 P0口为一个准双向口 。 但是有上拉电阻, 作数据输入
时, 口也不是悬浮状态 。 作地址/数据复用总线用 。 作数据
总线用时, 输入/输出 8位数据 D0~ D7;作地址总线用时,
输出低 8位地址 A0~ A7。 当 P0口作地址/数据复用总线用之
后, 就再也不能作 I/ O口使用了 。
P1口是一个 8位口,可以字节访问也可按位访问,其字节访问
地址为 90H,位访问地址为 90H~ 97H。
⒈ 位结构和工作原理
P1口的位结构如 图 2- 12所示 。
包含输出锁存器, 输入缓冲器 BUF1( 读引脚 ), BUF2( 读锁存
器 ) 以及由 FET晶体管 Q0与上拉电阻组成的输出/输入驱动器 。
P1口的工作过程分析如下:
? P1.i位作输出口用时,CPU输出 0时, D= 0,Q= 0,Q= l,
晶体管 Q0导通, A点被下拉为低电平, 即输出 0; CPU输出 1时,
D= l,Q= 1,Q= 0,晶体管 Q0截止, A点被上拉为高电平, 即
输出 l。
2.5.2 P1口
? P1,i位作输入口用时:先向 P1,i位输出高电平, 使 A点提
升为高电平, 此操作称为设置 P1,i为输入线 。 若外设输入为 1
时 A点为高电平, 由 BUFI读入总线后 B点也为高电平;若外设
输入为 0时 A点为低电平, 由 BUF1读入总线后 B点也为低电平 。
⒉, P1口的特点
? 输出锁存器, 输出时没有条件;
? 输入缓冲, 输入时有条件, 即需要先将该口设为输入状态,
先输出 1;
? 工作过程中无高阻悬浮状态, 也就是该口不是输入态就是
输出态 。
具有这种特性的口不属于, 真正, 的双向口, 而被称为, 准,
双向口 。
⒊ P1口的操作
⑴ 字节操作和位操作
CPU对于 P1口不仅可以作为一个 8位口 ( 字节 ) 来操作, 也
可以按位来操作 。
有关字节操作的指令有:
输出,MOV P1,A ; P1←A
MOV P1,# data ; P1← # data
MOV P1,direct ; P1←direct
输入,MOV A,P1 ; A←P 1
MOV direct,Pl ; direct←Pl
有关位操作的指令有:
置位, 清除,SETB P1.i ; P1.i← 1
CLR Pl,i ; P1,i← 0
输入, 输出,MOV P1,i,C ; P1,i←CY
MOV C,P1,i ; CY←P 1.i
判跳,JB P1,i,rel ; P1.i=1,跳转
JBC P1,i,rel ; P1.i= 1,跳转且;清 P1.i= 0
逻辑运算,ANL C,P1,i ; CY← ( P1.i·CY)
ORL C,P1,i ; CY← ( P1.i+ CY)
P1,i中的 i= 0,… 7。
P1口不仅可以以 8位一组进行输入, 输出操作, 还可以逐
位分别定义各口线为输入线或输出线 。 例如:
ORL P1,# 0 0 0 0 0 0 1 0 B
可以使 P1,l位口线输出 l,而使其余各位不变 。
ANL P1,# 1 1 1 1 1 1 0 1 B
可以使 P1,1位线输出 0,而使其余各位不变 。
⑵ 读引脚操作和读锁存器操作
从 P1口的位结构图中可以看出, 有两种读口的操作:一种
是读引脚操作, 一种是读锁存器操作 。
? 在响应 CPU输出的读引脚信号时, 端口本身引脚的电平值
通过缓冲器 BUF1进入内部总线 。 这种类型的指令, 执行之前
必须先将端口锁存器置 1,使 A点处于高电平, 否则会损坏引
脚, 而且也使信号无法读出 。
这种类型的指令有:
MOV A,P1 ; A←P 1
MOV direct,P1 ; direct←P 1
? 在执行读锁存器的指令时, CPU首先完成将锁存器的值通过
缓冲器 BUF2读入内部, 进行修改, 然后重新写到锁存器中去,
这就是, 读一修改一写, 指令 。
这种类型的指令包含所有的口的逻辑操作 ( ANL,ORL、
XRL) 和位操作 (JBC,CPL,MOV,SETB,CLR等 ) 指令 。
⑶ P1口的多功能线
在 80C52中, P1,0和 P1,1口线是多功能的, 即除作一
般双向 I/O口线之外, 这两根口线还具有下列功能:
P1,0—定时器/计数器 2的外部输入端 T2;
P1,1—定时器/计数器 2的外部控制端 T2EX。
P2口是一个多功能的 8位口, 可以字节访问也可位访问, 其
字节访问地址为 A0H,位访问地址为 A0H~ A7H。
⒈ P2口位结构和工作原理
P2口位结构原理图示于 图 2- 13。
多路开关的输入有两个:一个是口输出锁存器的输出端 Q;
一个是地址寄存器 ( PC或 DPTR) 的高位输出端 。 多路开关的
输出经反相器反相后去控制输出 FET的 Q0。 多路开关的切换
由内部控制信号控制 。
输出锁存器的输出端是 Q而不是 Q,多路开关之后需接反相器。
2.5.3 P2口
? P2口的工作状态是 I/O口状态。
在内部控制信号的作用下,多路开关的输入投向输出锁存
器的输出 Q( C点)侧,这样多路开关将接通输出锁存器。
若经由内部总线输出 0,输出锁存器的 Q端为 0,信号经多
路开关和反相器后输出 1,Q0导通, A点为 0,输出低电平;
若经由内部总线输出 1,输出锁存器的 Q端为 1,反相器后输
出 0,Q0截止, A点为 1,输出高电平 。
? P2口的工作状态是输出高 8位地址 。
在内部控制信号的作用下,多路开关的输入投向地址输出( B
点)侧,这样多路开关将接通地址寄存器输出。 A点的电平将
随地址输出的 0,1而 0,1地变化。
⒉ P2口的功能
从上述工作过程的分析中可以看出 P2口是一个双功能的
口:
⑴ 作 I/ O口使用时, P2口为一准双向口 。
⑵ 作地址输出时, P2口可以输出程序存储器或片外数据存储
器的高 8位地址, 与 P0输出的低地址一起构成 16位地址线, 从
而可分别寻址 64KB的程序存储器或片外数据存储器 。 地址线
是 8位一起自动输出的 。
⒊ P2口使用中注意的问题
⑴ 由于 P2口的输出锁存功能, 在取指周期内或外部数据存储
器读, 写选通期间, 输出的高 8位地址是锁存的, 故无需外加
地址锁存器 。
⑵ 在系统中如果外接有程序存储器, 由于访问片外程序存储器
的连续不断的取指操作, P2口需要不断送出高位地址, 这时 P2
口的全部口线均不宜再作 I/O口使用 。
⑶ 在无外接程序存储器而有片外数据存储器的系统中, P2口使
用可分为两种情况:
? 若片外数据存储器的容量< 256 B:可使用, MOVX A,@ Ri”
及, MOVX @ Ri,A”类指令访问片外数据存储器, 这时 P2口
不输出地址, P2口仍可作为 I/O口使用;
? 若片外数据存储器的容量 >256 B:这时使用, MOVX A,@
DPTR”及, MOVX@ DPTR,A”类指令访问片外数据存储器,
P2口需输出高 8位地址 。 在片外数据存储器读, 写选通期间,
P2口引脚上锁存高 8位地址信息, 但是在选通结束后, P2口内
原来锁存的内容又重新出现在引脚上 。
使用, MOVX A,@ Ri”及, MOVX @ Ri,A”类访问指
令时, 高位地址通过程序设定, 只利用 P1,P3甚至 P2口中的某
几根口线送高位地址, 从而保留 P2口的全部或部分口线作 I/O口
用 。
P3口是一个多功能的 8位口,可以字节访问也可位访问,
其字节访问地址为 B0H,位访问地址为 B0H~ B7H。
⒈ 位结构与工作原理
P3口的位结构原理如 图 2- 14所示 。
? 与非门有两个输入端:一个为口输出锁存器的 Q端, 另一个
为替代功能的控制输出 。 与非门的输出端控制输出 FET管 Q0。
? 有两个输入缓冲器, 替代输入功能取自第一个缓冲器的输出
端; I/O口的通用输入信号取自第二个缓冲器的输出端 。
2.5.4 P3口
输出工作过程:
? 当替代输出功能 B点置 1时, 输出锁存器的输出可以顺利通到引
脚 P3,i。 其工作状况与 P1口相类似 。 这时 P3口的工作状态为 I/O口,
显然此时该口具有准双向口的性质 。
? 当输出锁存器的输出置 1时, 替代输出功能可以顺利通到引脚
P3,i。
若替代输出为 0时, 因与非门的 C点已置 l,现 B点为 0,故与
非门的输出为 l,使 Q0导通, 从而使 A点也为 0。 若替代输出为 1时,
与非门的输出为 0,Q0截止, 从而使 A点也为高电平 。 这时 P3口的
工作状态处于替代输出功能状态 。
⒉ P3口的功能
P3口是一个多功能口 。
⑴ 可作 I/O口使用, 为准双向口 。
既可以字节操作, 也可以位操作;既可以 8位口操作, 也可
以逐位定义口线为输入线或输出线;既可以读引脚, 也可以读
锁存器, 实现, 读一修改一输出, 操作 。
⑵ 可以作为替代功能的输入, 输出 。
替代输入功能:
P3,0 —— RXD,串行输入口 。
P3,2——INT0,外部中断 0的请求 。
P3﹒ 3——INT1,外部中断 1的请求 。
P3,4——T0,定时器/计数器 0外部计数脉冲输入 。
P3,5——T1,定时器/计数器 1外部计数脉冲输入 。
替代输出功能:
P3,l——TXD,串行输出口 。
P3, 6——外部数据存储器写选通, 输出, 低电平有效 。
P3,7——外部数据存储器读选通, 输出, 低电平有效 。
?是一个完整的一位微计算机,它具有自已的 CPU、寄存器、
I/O、存储器和指令集。一位机在开关决策、逻辑电路仿真、
和实时控制方面非常有效。
? 位处理器系统包括以下几个功能部件:
⑴ 位累加器:借用进位标志位 CY。 在布尔运算中 CY是数
据源之一, 又是运算结果的存放处, 位数据传送的中心 。 根
据 CY的状态实现程序条件转移,JC rel,JNC rel。
2.6 布尔(位)处理器
⑵ 位寻址的 RAM,内部 RAM位寻址区中的 0~ 127位 (20H~
2FH);
⑶ 位寻址的寄存器:特殊功能寄存器 ( SFR) 中的可以位寻
址的位 。
⑷ 位寻址的 I/O口:并行 I/O口中的可以位寻址的位 (如 P1.0)。
⑸ 位操作指令系统:位操作指令可实现对位的置位, 清 0、
取反, 位状态判跳, 传送, 位逻辑运算, 位输入 /输出等操
作 。
80C51单片微机共有复位、程序执行、低功耗以及编
程和校验四种工作方式。
2.7 80C51单片微机的工作方式
⒈ 复位操作
其主要功能是把 PC初始化为 0000H,使单片微机从
0000H单元开始执行程序 。 当由于程序运行出错或操作错误使
系统处于死锁状态时, 为摆脱困境, 可以按复位键以重新启动,
也可以通过监视定时器来强迫复位 。
除 PC之外, 复位操作还对其它一些特殊功能寄存器有影响,
它们的复位状态见 表 2–6。
复位操作还对单片微机的个别引脚信号有影响。例如在复位期
间,ALE和 PSEN信号变为无效状态,即 ALE=l,PSEN =l。
2.7.1 复位方式
⒉ 复位信号及其产生
⑴ 复位信号
RST引脚是复位信号的输入端 。 复位信号是高电平有效,
其有效时间应持续 24个振荡周期 (即 2个机器周期 )以上 。
若使用频率为 6MHz的晶振, 则复位信号应持续 4μs 以上 。 产生复
位信号的电路逻辑图如 图 2- 15所示 。
整个复位电路包括芯片内, 外两部分 。
外部电路产生的复位信号 ( RST) 送施密特触发器, 再由片
内复位电路在每个机器周期的 S5P2时刻对施密特触发器的输
出进行采样, 然后才能得到内部复位操作所需要的信号 。
复位操作有上电自动复位, 按键电平复位和外部脉冲复位三
种方式, 示于 图 2-16中
程序执行方式是单片微机的基本工作方式。由于复位
后 PC= 0000H,因此,程序执行总是从 0000H开始的。一般
在 0000H开始的单元中存放一条无条件转移指令,以便跳转
到实际主程序的入口去执行。
比如:
ORG 0000H
SJMP MAIN ;转主程序
2.7.2 程序执行方式
80C51有两种低功耗方式,即待机方式和掉电保护方
式。待机方式和掉电保护方式时涉及的硬件如 图 2- 17所示。
待机方式和掉电保护方式都是由电源控制寄存器
( PCON) 的有关位来控制的 。
2.7.3 低功耗工作方式
其中:
SMOD:波特率倍增位,在串行通讯时使用。
GF1,GF0:通信标志位 1,0。
PD:掉电方位式, PD= 1,则进入掉电方式 。
IDL:待机方式位,IDL= 1,则进入待机方式。
若 PD和 IDL同时为 1,则先激活掉电方式。
SMOD - - - GF1 GF0 PD IDL
电源控制寄存器格式如下:
⒈ 待机方式
⑴ 使用指令使 PCON寄存器 IDL位置 1,则 80C51进入待机方式 由
图 2-17中可看出这时振荡器仍然运行,并向中断逻辑、串行口和定
时器 /计数器电路提供时钟,中断功能继续存在 。
?向 CPU提供时钟的电路被阻断,因此 CPU不能工作,与 CPU有关
的如 SP,PC,PSW,ACC以及全部通用寄存器都被冻结在原状态。
⑵ 可以采用中断方式或硬件复位来退出待机方式 。
在待机方式下, 若产生一个外部中断请求信号, 在单片微机
响应中断的同时, PCON.0位 ( IDL位 ) 被硬件自动清 ‘ 0’,单片
微机就退出待机方式而进入正常工作方式 。 在中断服务程序中安
排一条 RETI指令, 就可以使单片微机恢复正常工作, 从设置待机
方式指令的下一条指令开始继续执行程序 。
⒉ 掉 电保护方式
⑴ PCON寄存器的 PD位控制单片微机进入掉电保护方式。
当 80C51检测到电源故障时,除进行信息保护外,还应
把 PCON.1位置‘ 1’,使之进入掉电保护方式。此时单片微机
一切工作都停止,只有内部 RAM单元的内容被保护。
⑵ 只能依靠复位退出掉电保护方式。
80C51备用电源由 Vcc端引入 。 当 Vcc恢复正常后, 只要
硬件复位信号维持 10ms,就能使单片微机退出掉电保护方式,
CPU则从进入待机方式的下一条指令开始重新执行程序 。
在待机和掉电保护期间引脚的状态见 表 2- 7。
对于片内具有 EPROM型程序存储器的 87C51(87C52)
和片内具有闪速存储器的 89C51 (89C52), 78E51 (78E52) 等
单片微机可以通过编程来修改程序存储器中的程序。
89C51内部有一个 4KB的 Flash PEROM。编程接口可
接收高电压 (12V) 或低电压 (VCC) 的允许编程信号。低电压
编程方式可以很方便的与 89C51内的用户系统进行编程;而
高压编程方式则可与通用的 EPROM编程器兼容。对于这二
种编程方式的芯片面上的型号和片内特征字节的内容不同。
⒈ 闪速存储器编程方式
表 2-8列出了 89C51闪速存储器的编程、校验、写锁定位等时
的逻辑电平。
2.7.4 编程方式
注意:⑴ 根据特征字节 (地址为 032H) 的内容选择合适的编程
电压 (VPP=12V或 5V)
⑵ 片擦除操作时,要求 PROG的脉冲宽度为 10ms。
⒉ 闪速存储器编程
⑴ 在对 89C51编程前,地址、数据、控制信号必须按
表 2-8和 图 2-18设置。
对 89C51的编程的步骤如下:
? 在地址线上输入要编程存储器单元地址 。
? 在数据线上输入要写入的数据 。
? 按 图 2-19的要求输出编程和校验的时序 。
? 对于高压编程模式, 将 EA/VPP升至 12V。
? 每对 Flash存储阵列写入一个字节或每写入一个程序加密
位,要向 ALE/PROG输出一个编程脉冲。
? 改变地址和数据,重复以上几步操作,直至目标程序
(OBJ文件 ) 结束。
字节写周期是自动定时的,一般不超过 1.5mS
⑵ 查询数据
89C51可以通过数据查询来检测一个写周期是否结束。
若数据未写完,则从 P0.7引脚上读 到的是该数据的最高位的
反码。当写周期结束后,读出值即为写入值。
⑶ 准备好 /忙 (RDY/BSY) 信号
从 图 2-19中可看出,编程期间 ALE/PROG为高电平后,P3.4
引脚被拉成低电平,表示 BUSY编程结束后,ALE/PROG为
低电平,表示 READY 。
⑷ 编程校验
如果锁定位 LB1和 LB2没有被编程,代码数据则可读
回,用来校验。锁定位不能直接被校验,只能通过观察它们
的功能是否被允许而间接得到证实。
⑸ 芯片擦除
通过正确的控制信号的组合,并保持 ALE/PROG引脚脉冲
宽度 (低电平 ) 约 10ms,则可对 EPROM阵列和三个锁定位进行电
擦除,擦除后代码阵列全为” 1” 。注意,在对程序存储器进行重
新编程前必须执行片擦除操作。
⑹ 读特征字节
89C51单片微机内有三个特征字节,地址为 030H,031H和
032H,分别用来指示该器件的生产厂商、型号和编程电压。
( 030H)=1EH 表示 ATMEL公司生产。
(031H)=51H 表示型号为 89C51
=61H 表示型号为 89LV51
(032H)=FFH 表示编程电压为 12V
=05H 表示编程电压为 5V
⒊ 程序锁定位的功能和编程
80C51片内有三个锁定位,但不含密码阵列。其编程状
况和特点参见 表 2-9。当第一级加密时,逻辑电压被取样并锁
存。在复位期间,若器件为上电而不是复位,则锁存器内容初
始化为一个随机值,直到复位操作结束。
锁定位的编程参照 表 2–9的逻辑电平进行。
END
图 2–1 80C51的内部结构图
图 2–2 80C51/80C52的封装及逻辑图
图 2–2 80C51/80C52的封装及逻辑图
图 2–3 非总线型单片微机引脚示意图
图 2–4 指令寄存器和指令译码器
图 2–5 算术逻辑运算单元 ALU
图 2–6 80C51单片微机的时钟电路
图 2–7 振荡器的结构和振荡电路原理
图 2–8 80C51单片微机指令时序
图 2–9 80C51单片微机存储器映象图
图 2–10 片内数据存储器各部分地址空间分布图
图 2- 11 P0口位结构原理图
图 2–12 P1口位结构原理图
图 2- 13 P2口位结构原理图
图 2–14 P3口位结构原理图
图 2–15 复位电路结构图
图 2–16 复位电路
图 2–17 80C51单片微机低功耗方式的内部结构
图 2–18 89C51的闪速存储器编程和校验
图 2–19 89C51的闪速存储器的编程和校验
RS1 RS0 组号 寄存器 R0~
R7地址
0 0 0组 00H~ 07H
0 1 1组 08H~ 0FH
1 0 2组 10H~ 17H
1 1 3组 18H~ 1FH
表 2–1 工作寄存器组
表 2–2 字节地址和位地址的关系
表 2–3 特殊功能寄存器 SFR的名称和地址
表 2–4 特殊功能寄存器 (SFR)的位地址
表 2- 5 80C51并行 I/O接口的异同
表 2–6 特殊功能寄存器 SFR的复位状态
表 2–7 待机和掉电保护方式时引脚状态
表 2–8 89C51闪速存储器的编程方式
表 2–9 89C51程序锁定位不同的编程状态及其特点
单片微机的基本结构
微型计算机的基本组成有三部分,即中央处理器
CPU (通常包括运算器和控制器 )+存储器 +输入 /输出 (I/O)
接口。若将组成计算机的基本部件集成在一块芯片上,则
俗称为单片微机。
80C51内部结构如 图 2- 1所示,主要包括中央处理
器 CPU (算术逻辑部件 ALU、控制器等 ),只读存储器
ROM,随机存取存储器 RAM、定时器 /计数器、并行 I/O
口 P0~ P3、串行口、中断系统以及定时控制逻辑电路等。
2.1 80C51单片微机的内部结构
这些部件通过内部总线连接起来, 基本结构仍然是通用
CPU加上外围芯片的结构模式, 但功能单元上的控制与
先前相比有重大变化, 采用了特殊功能寄存器 (SFR) 进
行集中控制的方法 。
1.中央处理器
单片微机中的中央处理器( CPU)是单片微机的核心,
主要完成运算和控制功能,又增设了“面向控制”的处
理功能,增强了实时性。
2,程序存储器
根据内部是否带有程序存储器而形成三种型号:内部
没有程序存储器的称 80C31,内部带 ROM的称 80C51,
内部以 EPROM代替 ROM的称 87C51。
目前单片微机的程序存储器有以下几种结构形式:
⑴ 片内只读存储器
片内掩膜 ROM的特点是程序必须在制作单片微机时写入,
一次性固化,用户不能修改。这种结构形式只适用于程序已
成熟、定型,且批量很大的场合。并且只能在厂家定制完成。
这种单片微机的价格最便宜。
⑵ 片内可编程的 ROM
片内可编程的 ROM可直接由用户进行编程, 因而用户在实
际应用中甚感方便 。 一般有以下几种:
·紫外线可擦除型 ROM- EPROM型单片微机 (如 87C51)。
EPROM需用紫外线擦除, 必须脱机固化, 不能在线改写 。
·电可擦除型 ROM——EEPROM,随着微电子技术的发展,
已开始在单片微机中采用, 称为 Flash单片微机 (如 89C51)。
电可擦除型 ROM给用户带来了更大的方便, 特别是应用系统
的现场调试 。 由于目前价格已经迅速下降, 所以被广泛采用 。
EPROM和 EEPROM都是可以多次擦除和编程的, 或
称 MTP的 ROM。
·OTP的 ROM,仅允许用户一次编程。在应用系统或智能
产品的小批量试生产时应用,许多单片微机厂家都提供该类
产品。
⑶ 片外只读存储器
由于受芯片集成度的限制, 片内只读存储器一般
存储容量较小, 给使用带来不便 。 利用单片微机的并行
扩展技术可以外扩片外只读存储器 。 3,数据存储器
( RAM)
3,数据存储器 ( RAM)
在单片微机中, 用随机存取存储器 ( RAM) 来存储
程序在运行期间的工作变量和数据, 所以称为数据存储
器 。 一般在单片微机内部设置一定容量 ( 64 B至 384B)
的 RAM。 这样, 小容量的数据存储器以高速 RAM的形式集
成在单片微机内, 以加快单片微机运行的速度 。 而且这
种结构的 RAM还可以使存储器的功耗下降很多 。
在单片微机中,常把寄存器(如工作寄存器、特殊功
能寄存器、堆栈等)在逻辑上划分在片内 RAM空间中,所以
可将单片微机内部 RAM看成是寄存器堆,有利于提高运行速
度。
当内部 RAM容量不够时,还可通过串行总线或并行总
线外扩数据存储器。
4,并行 I/O口
单片微机往往提供了许多功能强、使用灵活的并行输
入 /输出引脚,用于检测与控制。有些 I/O引脚还具有多种功
能,比如可以作为数据总线的数据线、地址总线的地址线、
控制总线的控制线等。单片微机 I/O引脚的驱动能力也逐渐
增大,甚至可以直接驱动外扩的 LED显示器。
5,串行 I/O口
目前高档 8位单片微机均设置了全双工串行 I/O口, 用以
实现与某些终端设备进行串行通信, 或者和一些特殊功能的
器件相连的能力, 甚至用多个单片微机相连构成多机系统 。
随着应用的拓宽, 有些型号的单片微机内部还包含有两个串
行 I/O口 。
6,定时器 /计数器
在单片微机的实际应用中,往往需要精确的定时,或者需
对外部事件进行计数。为了减少软件开销和提高单片微机的
实时控制能力,因而均在单片微机内部设置定时器 /计数器
电路。 80C51共有两个 16位的定时器 /计数器,80C52则有三
个 16位的定时器 /计数器。
7,中断系统
80C51的中断功能较强,具有内、外共五个中断源,两
个中断优先级。
8,定时电路及元件
计算机的整个工作是在时钟信号的驱动下, 按照严格的
时序有规律地一个节拍一个节拍地执行各种操作 。 单片微机内
部设有定时电路, 只需外接振荡元件即可工作 。
外接振荡元件一般选用晶体振荡器, 或用价廉的 RC振荡器,
也可用外部时钟源, 作为振荡元件 。 近来有的单片微机将振荡
元件也集成在芯片内部, 这样不仅大大缩小了单片微机的体积,
同时也方便了使用 。
单片微机在结构上突破了常规的按逻辑功能划分芯片、
由多片构成微型计算机的设计思想,将构成计算机的许多功能
集成在一块晶体芯片上。
80C51有 40引脚双列直插( DIP),44引脚 (PLCC)
和 44引脚( PQFP/TQFP)封装形式。 80C51/ 80C52的封
装及逻辑图如 图 2- 2所示。
在某些场合, 不需通过并行总线扩展芯片, 这时常
采用 20引脚双列直插 ( DIP) 甚至仅 14引脚的单片微机,
如 ATMEL公司的 1051/2051/4051单片微机等, 或 PHILIPS
公司的 P87LPC764单片微机 。 它们的封装及引脚见 图 2–3。
2.2 80C51单片微机的引脚及其功能
按引脚的功能可分为三部分,
1,电源和晶振:
·Vcc——运行和程序校验时接电源正端 。
·Vss——接地 。
·XTAL1——输入到单片微机内部振荡器的反相放
大器 。 当采用外部振荡器时, 对 HMOS单片微机,此引脚
应接地;对 CHMOS单片微机, 此引脚作驱动端 。
·XTAL2——反相放大器的输出,输入到内部时钟
发生器。当采用外部振荡器时,XTAL2接收振荡器信号,
对 CHMOS,此引脚应悬浮。
2,I/O:
·P0——8位, 漏极开路的双向 I/O口 。
当使用片外存储器 ( ROM及 RAM) 时, 作低八
位地址和数据总线分时复用 。
P0口 ( 作为总线时 ) 能驱动 8个 LSTTL负载 。
·P 1——8位, 准双向 I/O口 。
在编程 /校验期间, 用做输入低位字节地址 。
P1口可以驱动 4个 LSTTL负载 。
对于 80C52,P1.0——T2,是定时器 2的计数输入端;
P1.1——T2EX,是定时器 2的外部输入端 。
读两个特殊引脚的输出锁存器时应由程序置 1。
·P 2——8位, 准双向 I/O口 。
当使用片外存储器 ( ROM及 RAM) 时, 输出高 8位地
址 。
在编程 /校验期间,接收高位字节地址。
P2口可以驱动 4个 LSTTL负载。
·P 3——8位, 准双向 I/O口, 具有内部上拉电路 。
P3提供各种替代功能 。 在提供这些功能时, 其输出锁存
器应由程序置 1。 P3口可以输入 /输出 4个 LSTTL负载 。
·串行口:
P3,0——RXD 串行输入口 。
P3,1——TXD 串行输出口。
·中断:
P3,2—— 外部中断 0输入 。
P3,3—— 外部中断 1输入 。
· 定时器/计数器:
P3,4——定时器 /计数器 T0的外部输入 。
P3,5——定时器 /计数器 T1的外部输入 。
·数据存储器选通:
P3,6——WR 低电平有效, 输出, 片外存储器写选通 。
P3,7—— RD 低电平有效,输出,片外存储器读选通。
3,控制线:共 4根 。
·RST——复位输入信号, 高电平有效 。 在振荡器工作时,
在 RST上作用两个机器周期以上的高电平, 将器件复位 。
·EA /Vpp——片外程序存储器访问允许信号, 低电平有效 。
EA=1,选择片内程序存储器 (80C51为 4KB,80C52为 8KB) ;
EA=0,则程序存储器全部在片外而不管片内是否有程序存储
器 。
使用 80C31时, 必须接地, 使用 8751编程时, 施加 21V
的编程电压 。
·ALE/PROG——地址锁存允许信号, 输出 。
在访问片外存储器或 I/O时, 用于锁存低八位地址, 以
实现低八位地址与数据的隔离 。
ALE以 1/6的振荡频率固定速率输出,可作为对外输出
的时钟或用作外部定时脉冲。在 EPROM编程期间,作输入。
输入编程脉冲( PROG)。
ALE可以驱动 8个 LSTTL负载。
·PSEN——片外程序存储器读选通信号, 低电平有效 。
在从片外程序存储器取指期间, 在每个机器周期中, 当
有效时, 程序存储器的内容被送上 P0口 ( 数据总线 ) 。
可以驱动 8个 LSTTL负载 。
中央处理器 CPU是单片微机内部的核心部件,主要
包括控制器、运算器和工作寄存器及时序电路。
2.3 80C51 CPU的结构和特点
中央控制器是识别指令, 并根据指令性质控制计算
机各组成部件进行工作的部件, 与运算器一起构成中央处
理器 。 在 80C51单片机中, 控制器包括程序计数器 PC,程
序地址寄存器, 指令寄存器 IR,指令译码器, 条件转移逻
辑电路及定时控制逻辑电路 。
其功能是控制指令的读出, 译码和执行, 对指令的
执行过程进行定时控制, 并根据执行结果决定是否分支转
移 。
2.3.1中央控制器
1,程序计数器 PC
程序计数器 PC( Program Counter) 是一个独立的计
数器, 不属于内部的特殊功能寄存器 。 PC中存放的是下一
条将要从程序存储器中取出的指令的地址 。
其基本的工作过程是:读指令时, 程序计数器 PC将
其中的数作为所取指令的地址输出给程序存储器, 然后程序
存储器按此地址输出指令字节, 同时程序计数器 PC本身自
动加 1,指向下一条指令地址 。
程序计数器 PC变化的轨迹决定程序的流程 。
在执行条件转移或无条件转移指令时, 程序计数器将被
置入转移的目的地址, 程序的流向发生变化 。
在执行调用指令或响应中断时, 将子程序的入口地址或者
中断矢量地址送入 PC,程序流向发生变化 。
2,数据指针 DPTR
DPTR是一个 16位的特殊功能寄存器, 主要功能是作为
片外数据存储器或 I/O寻址用的地址寄存器 ( 间接寻址 ),
故称为数据存储器地址指针 。
访问片外数据存储器或 I/O的指令为:
MOVX A,@ DPTR 读
MOVX @ DPTR,A 写
DPTR寄存器也可以作为访问程序存储器时的基址寄存器 。 这
时寻址程序存储器中的表格, 常数等单元, 而不是寻址指令 。
MOVC A,@ A+ DPTR
JMP @ A+ DPTR
DPTR寄存器既可以作为一个 16位寄存器处理, 也可以作为
两个 8位寄存器处理, 其高 8位用 DPH表示, 低 8位用 DPL表示 。
在 80C51中, 两个地址寄存器, 即程序计数器 PC与数据指针
DPTR,有相同之处, 也有差别:
⑴ 两者都是与地址有关的 1 6位的寄存器 。 其中 PC与程序
存储器的地址有关, 而 DPTR与数据存储器的地址有关 。 作为地
址寄存器使用时 PC与 DPTR都是通过 P0和 P2口输出的 。 PC的输
出与 ALE及信号有关; DPTR的输出, 则与 ALE、,信号有关 。
⑵ PC只能作为 16位寄存器对待。 PC是不可以访问的,它
不属于特殊功能寄存器,有自己独特的变化方式。 DPTR可以作
为 16位寄存器,也可以作为两个 8位寄存器,DPTR是可以访问
的,DPL和 DPH都位于特殊功能寄存器区中。
PSEN
3,指令寄存器 IR,指令译码器及控制逻辑
指令寄存器 IR是用来存放指令操作码的专用寄存器 。 执行程
序时, 首先进行程序存储器的读操作, 也就是根据程序计数
器给出的地址从程序存储器中取出指令, 送指令寄存器 IR,
IR的输出送指令译码器;然后由指令译码器对该指令进行译
码, 译码结果送定时控制逻辑电路, 如 图 2- 4所示 。
定时控制逻辑电路则根据指令的性质发出一系列定时
控制信号, 控制计算机的各组成部件进行相应 的工作, 执
行指令 。
条件转移逻辑电路主要用来控制程序的分支转移在
80C51中,转移条件也可分为两部分。一部分是内部条件,即
程序状态标志位( PSW)和累加器的零状态。另一部分是外
部条件,即 F0和所有位寻址空间的状态。
运算器主要用来实现对操作数的算术逻辑运算和位操作
的。如对传送到 CPU的数据进行加、减、乘、除、比较,BCD
码校正等算术运算;“与”、“或”、“异或”等逻辑操作;
移位、置位、清零、取反、加 1、减 1等操作。
80C51的 ALU还具有极强的位处理功能,如位置 1、位
清零、位“与”、位“或”等操作,对“面向控制”特别有用。
运算器主要包括算术逻辑运算单元 ALU、累加器 ACC
( A)、暂存寄存器,B寄存器、程序状态标志寄存器 PSW以及
BCD码运算修正电路等。
2.3.2 运算器
ALU有两个输入:
⑴ 通过暂存器 1的输入:输入数据来自寄存器, 直接寻址单
元 ( 含 I/O口 ), 内部 RAM,寄存器 B或是立即数 。
⑵ 通过暂存器 2或累加器 ACC的输入:通过暂存器 2的运
算的指令有
ANL direct,# data
ORL direct,# data
XRL direct,# data
其它的运算, 其输入之一大多数也要通过累加器 ACC。
ALU有两个输出, ⑴ 数
据经过运算后,其结果又通过内部总线送回到累加器中;
⑵ 数据运算后产生的标志位输出至程序状态字 PSW。
2,累加器 A
累加器 A是 CPU中使用最频繁的一个八位专用寄存器,
简称 ACC或 A寄存器。主要功能:累加器 A存放操作数,是
ALU单元的输入之一,也是 ALU运算结果的暂存单元。
在 80C51中只有一个累加器 A,而单片微机中大部分数据操作
都要通过累加器 A进行,容易产生, 瓶颈, 现象。
3,B寄存器
B寄存器在乘法和除法指令中作为 ALU的输入之一 。 乘法中,
ALU的两个输入分别为 A,B,运算结果存放在 AB寄存器对中 A
中放积的低 8位, B中放积的高 8位 。
除法中, 被除数取自 A,除数取自 B,商数存放于 A,余数存放
于 B。
在其它情况下, B寄存器可以作为内部 RAM中的一个单元来使
用 。
4,程序状态字 PSW
PSW( Program Status Word) 是一个逐位定义的 8位寄
存器, 其内容的主要部分是算术逻辑运算单元 ( ALU) 的输出 。
其中有些位是根据指令执行结果, 由硬件自动生成, 而有些位状
态可用软件方法设定 。
一些条件转移指令就是根据 PSW中的相关标志 位的状态, 来实现
程序的条件转移 。
其中, 除 PSW,1( 保留位 ), RS1和 RS0( 工作寄存器组选择控制
位 ) 及用户标志 F0之外, 其他四位:奇偶校验位 P,溢出标志位 OV、
辅助进位标志位 AC及进位标志位 CY都是 ALU运算结果的直接输出 。
P (PSW,0) -奇偶标志位 。
每个指令周期都由硬件来置位或清除 。
用以表示累加器 A中值为 1的个数的奇偶性:若累加器值为 1
的位数是奇数, P置位 ( 奇校验 ) ;否则 P清除 (偶校验 ) 。
CY AC F0 RS1RS0 OV - P
在串行通信中, 常以传送奇偶校验位来检验传输数据的
可靠性 。 通常将 P置入串行帧中的奇偶校验位 。
? OV (PSW,2) -溢出标志位。
当执行运算指令时, 由硬件置位或清除, 以指示运算是否
产生溢出, OV置位表示运算结果超出了目的寄存器 A所能表示
的带符号数的范围 ( 一 128~+ 127) 。
若以 Ci表示位 i向位 i + l有进位, 则 OV=C6⊕ C7;当位 6
向位 7有进位 (借位 )而位 7不向 CY进位 (借位 )时;或当位 7向 C进
位 (借位 )而位 6不向位 7进位 (借位 )时, OV标志置位, 表示带符
号数运算时运算结果是错误的;否则, 清除 OV标志, 运算个
结果正确 。
对于 MUL乘法, 当 A,B两个乘数的积超过 255时 OV置
位;否则, OV= 0。 因此, 若 OV= 0时, 只需从 A寄存器中取
积;若 OV= 1时, 则需从 B,A寄存器对中取积 。
对于 DIV除法, 若除数为 0时, OV=1;否则, OV=0。
? RS1,RS0 (PSW.4,PSW.3) -工作寄存器组选择位
用于设定当前工作寄存器的组号。工作寄存器共有四
组,其对应关系见 表 2–1
? AC (PSW,6) -辅助进位标志位。
当进行加法或减法运算时, 若低 4位向高 4位数发生进
位或借位时 AC将被硬件置位; 否则, 被清除 。
在十进制调整指令 DA中要用到 AC标志位状态 。
? CY (PSW,7) -进位标志位 。
在进行算术运算时, 可以被硬件置位或清除, 以表示
运算结果中高位是否有进位或借位 。 在布尔处理机中 CY被
认为是位累加器 。
? F0 (PSW,5) -用户标志位 。
开机时该位为, 0”。 用户可根据需要, 通过位操作指
令置, l”或者清, 0”。
时钟电路用于产生单片微机工作所需要的时钟信号,而时
序所研究的是指令执行中各信号之间的相互关系。单片微
机本身就如一个复杂的同步时序电路,为了保证同步工作
方式的实现,电路应在唯一的时钟信号控制下严格地按时
序进行工作。
2.3.3 时钟电路及 CPU的工作时序
1,时钟电路
在 80C51内带有时钟电路, 只需要在片外通过 XTALI
和 XTAL2引脚接入定时控制元件 ( 晶体振荡器和电容 ), 即
可构成一个稳定的自激振荡器 。 在 80C51芯片内部有一个高
增益反相放大器, 而在芯片的外部, XTAL1和 XTAL2之间
跨接晶体振荡器和微调电容 。 80C51的时钟电路如 图 2–6所示 。
由图可见, 时钟电路由下列几部分组成:振荡器及定时控制
元件, 时钟发生器, 地址锁存允许信号 ALE。
? 振荡器及定时控制元件
在 80C51芯片内部有一个高增益反相放大器, 其输入端为
芯片引脚 XTAL1,其输出端为引脚 XTAL2。
只需要在片外通过 XTAL1和 XTAL2引脚跨接晶体振荡器和微
调电容, 形成反馈电路, 振荡器即可工作 。 振荡器的结构和
振荡电路原理如 图 2- 7所示 。
振荡器的工作可以由 PD位 ( 特殊功能寄存器 PCON中
的一位 ) 控制 。 当 PD置 1时, 振荡器停止工作, 系统进入低
功耗工作状态 。
振荡器的工作频率一般在 1.2~ 12 MHz之间, 由于制造
工艺的改进, 有些单片微机的频率范围正向两端延伸, 高端
可达 40 MHZ,低端可达 0Hz。
在由多片单片微机组成的系统中,为了各单片微机之
间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为
各单片微机的振荡脉冲。
当由外部输入时钟信号时, 外部信号接入 XTAL1端, XTAL2
端悬空不用 。 对外部信号的占空比没有要求, 高低电平持续
时间应不小于 20 μs。
? 内部时钟发生器
内部时钟发生器实质上是一个 2分频的触发器。其输入
由振荡器引入的,输出为两个节拍的时钟信号。输出的前半
周期,节拍 1( P1)信号有效;后半周期,节拍 2( P2)信号
有效。每个输出周期为一个计算机 CPU的状态周期,即时钟
发生器的输出为状态时钟。每个状态周期内包括一个 P1节拍
和一个 P2节拍,形成 CPU内的基本定时时钟。
? ALE信号
一般地说, 状态时钟经过 3分频之后, 产生 ALE引脚上的
信号输出 。
2﹒ 时序定时单位
单片微机执行指令是在时序电路的控制下一步一步进行的 。 时
序是用定时单位来说明的 。 80C51的时序定时单位共有 4个:节
拍, 状态, 机器周期和指令周期 。
( 1) 节拍 P
振荡脉冲的周期称为节拍 。
( 2) 状态 S
一个状态 S包含两个节拍,其前半周期对应的节拍叫 P1,后半
周期对应的节拍叫 P2
( 3) 机器周期
80C51采用定时控制方式, 因此它有固定的机器周期 。
规定一个机器周期的宽度为 6个状态, 并依次表示为 S1~ S6。
由于一个机器周期共有 12个振荡脉冲周期, 因此机器周期就
是振荡脉冲的 12分频 。
当振荡脉冲频率为 12 MHZ时, 一个机器周期为 lμS;
当振荡脉冲频率为 6MHZ时, 一个机器周期为 2μS。
机器周期是单片微机的最小时间单位 。
( 4) 指令周期
执行一条指令所需要的时间称为指令周期 。 它是最大
的时序定时单位 。 80C51的指令周期根据指令的不同, 可包
含有一, 二, 三, 四个机器周期 。 当振荡脉冲频率为 12
MHZ时, 80C51的一条指令执行的时间最短为 lμS,最长为
4μS。
3,80C51指令时序
80C51共有 111条指令,全部指令按其长度可分为单字
节指令、双字节指令和三字节指令。
图 2- 8所表示的是几种典型单机器周期和双机器周期指令
的时序。
? 单机器周期指令,如 图 2- 8( a)、( b)所示。
双字节时, 执行在 S1P2开始, 操作码被读入指令寄存器;
在 S4P2时, 再读入第二个字节 。 单字节时, 执行在 S1P2开始,
操作码被读入指令寄存器;在 S4P2时仍有读操作, 但被读入
的字节 ( 即下一操作码 ) 被忽略, 且此时 PC并不增量 。
以上两种情况均在 S6P2时结束操作 。
双机器周期指令, 如 图 2- 8( c), ( d) 所示 。
双字节时, 执行在 S1P2开始, 操作码被读入指令寄存器;在
S4P2时, 再读入的字节被忽略 。 由 S5开始送出外部数据存储
器的地址, 随后是读或写的操作 。 在读, 写期间, ALE不输
出有效信号 。
在第二个机器周期, 片外数据存储器也寻址和选通, 但不产
生取指操作 。
单字节时, 执行在 S1P2开始, 在整个两个机器周期中, 共
发生四次读操作, 但是后三次操作都无效 。
一般, 算术 /逻辑操作发生在节拍 1期间, 内部寄存器对寄存
器的传送发生在节拍 2期间 。
图中的 ALE信号是为地址锁存而定义的, 该信号每有效一
次对应单片微机进行一次读指令操作 。 ALE信号以振荡脉冲
六分之一的频率出现, 因此, 在一个机器周期中, ALE信号
两次有效, 第一次在 S1P2和 S2P1期间, 第二次在 S4P2和 S5P1
期间, 有效宽度为一个状态周期 S。
( 1) 单字节单周期指令 ( 例如 INC A)
只需进行一次读指令操作 。 当第二个 ALE有效时, 由于 PC
没有加 1,所以读出的还是原指令 。
( 2) 双字节单周期指令 ( 例如 ADD A,# data)
ALE的两次读操作都是有效的, 第一次是读指令操作码, 第二
次是读指令第二字节 。
( 3) 单字节双周期指令 ( 例如 INC DPTR)
两个机器周期共进行四次读指令的操作, 但其中后三次的读操
作全是无效的 。
(4) 单字节双周期指令(例如 MOVX类指令)
MOVX类指令情况有所不同 。 因为执行这类指令时, 先在
ROM读取指令, 然后对外部 RAM进行读 /写操作 。 第一机器周期
时, 与其它指令一样, 第一次读指令 ( 操作码 ) 有效, 第二次读
指令操作无效 。 第二周期时, 进行外部 RAM访问, 此时与 ALE信
号无关, 因此, 不产生读指令操作 。
单片微机的存储器有两种基本结构:一种是在通
用微型计算机中广泛采用的将程序和数据合用一个存储
器空间的结构,称为普林斯顿( Princeton)结构;另一
种是将程序存储器和数据存储器截然分开,分别寻址的
结构,称为哈佛( Har- yard)结构。 Intel的 MCS- 51
和 80C51系列单片微机采用哈佛结构。 图 2–9为 80C51单
片微机存储器映象图。
? 在物理上设有 4个存储器空间
·程序存储器,片内程序存储器;
片外程序存储器 。
·数据存储器,片内数据存储器;
片外数据存储器。
2.4 存储器结构和地址空间
在逻辑上设有 3个存储器地址空间
·片内, 片外统一的 64 KB程序存储器地址空间;
·片内 256( 80C52 为 384) B数据存储器地址空间;
·片外 64 KB的数据存储器地址空间 。
在访问这 3个不同的逻辑空间时, 应选用不同形式的指
令 。
片内数据存储器空间, 在物理上又包含两部分:
对于 80C51型单片微机, 从 0~ 127 B为片内数据存储器
空间;从 128~ 255 B为特殊功能寄存器 (SFR)空间 ( 仅占用 20
多个字节 ) 。
对于 80C52型单片微机, 从 0~ 127 B为片内数据存储器空间;
从 128~ 255 B共 128个字节是数据存储器和特殊功能寄存器地
址重叠空间 。
80C51有三种基本的寻址空间:
·64 KB的片内, 外程序存储器寻址空间;
·64 KB的片外数据存储器寻址空间;
·256( 或 384) B的片内数据存储器寻址空间, 其中包括
特殊功能寄存器寻址空间 。
80C51的程序存储器( program memory)用于存放经调试
正确的应用程序和表格之类的固定常数。由于采用 16位的程序计
数器 PC和 16位的地址总线,因而其可扩展的地址空间为 64 KB。
⒈ 整个程序存储器可以分为片内和片外两部分。
EA引脚接高电平时,程序从片内程序存储器 0000H开始执行,即
访问片内存储器;当 PC值超出片内 ROM容量时,会自动转向片
外程序存储器空间执行。
EA引脚接低电平时, 迫使系统全部执行片外程序存储器 0000H
开始存放的程序 。
对于片内无 ROM的 80C31/80C32单片机, 应将 EA引脚固定接
低电平, 以迫使系统全部执行片外程序存储器程序 。
2.4.l 程序存储器
⒉ 程序存储器的某些单元被保留用于特定的程序入
口地址。
由于系统复位后的 PC地址为 0000H,故系统从 0000H单
元开始取指, 执行程序 。 从 0003H~ 002DH单元被保留用于
6个中断源的中断服务程序的入口地址 。
以下 7个特定地址被保留:
复位 0000H
外部中断 0 0003H
计时器 T0溢出 000BH
外部中断 1 0013H
计时器 T1溢出 001BH
串行口中断 0023H
计时器 T2/T2EX 002BH
在程序设计时, 通常在这些中断入口处设置无条件转移指
令, 使之转向对应的中断服务程序段处执行 。
⒊ 片内程序存储器为只读存储器 ROM。
存储器的类型有:掩膜 ROM,OTP( 一次性编程 )
ROM 和 MTP ( 多 次 编 程 ) ROM ( 包括 EPROM 及
E2PROM等 ) 。
在 87C51中为 4 KB的可编程, 可改写的只读存储器是
EPROM;在 89C51中为 4 KB的可编程, 可改写的只读存储
器是 EEPROM;而 80C31片内没有程序存储器, 使用时必
须由片外进行扩展 。
由于芯片内集成技术的提高, 片内程序存储器的容量做
得越来越大, 目前已达到 62 KB。 一般应用系统中, 已经
没有必要进行片外程序存储器的扩展 。
数据存储器( data memory)由随机存取存储器 RAM
构成,用来存放随机数据。
在 80C51 中, 数据存储器又分片内数据存储器
( internal data memory) 和片外数据存储器 ( external data
memory) 两部分 。
片内数据存储器 ( IRAM) 地址只有 8位, 因而最大寻
址范围为 256个字节 。
在 80C51中, 设置有一个专门的数据存储器的地址指
示器 — 数据指针 DPTR, 用于访问片外数据存储器
( ERAM) 。 数据指针 DPTR也是 16位的寄存器, 这样, 就
使 80C51具有 64 KB的数据存储器扩展能力 。
2.4.2 内部数据存储器
片内数据存储器是最灵活的地址空间。它在物理上又分成
两个独立的功能不同的区。
·片内数据 RAM区:对 80C51,为地址空间的低 128 B;
对 80C52,为地址空间的 0~ 255B。
·特殊功能寄存器 SFR区:地址空间的高 128 B。
对于 80C52,高 128B的 RAM区和 SFR区的地址空间
是重叠的 。 究竟访问哪一个区是通过不同的寻址方式来加
以区别, 即访问高 128B RAM区时, 选用间接寻址方式;
访问 SFR区, 则应选用直接寻址方式 。
图 2-10为片内数据存储器的地址空间分布图 。
⒈ 片内数据 RAM区
⑴ 工作寄存器区, 用寄存器直接寻址的区域,指令的
数量最多,均为单周期指令,执行的速度最快。
从 图 2–10中可知, 其中片内数据 RAM区的 0~ 31( 00H~
1FH), 共 32个单元, 是 4个通用工作寄存器组 ( 表 2–l),
每个组包含 8个 8位寄存器, 编号为 R0~ R7。
在某一时刻,只能选用一个寄存器组使用。其选择是通过软
件对程序状态字( PSW)中的 RS0,RS1两位的设置来实现的。
设置 RS0,RS1时,可以对 PSW字节寻址,也可以位寻址方式,
间接或直接修改 RS0,RS1的内容。
若 RS0,RS1均为 0,则选用工作寄存器 0组为当前工作寄存器 。
现需选用工作寄存器组 1则只需将 RS0改成 l,可用位寻址方式
( SETB PSW,3,PSW,3为 RS0位的符号地址 ) 来实现 。
累加器 ACC,B,DPTR及 CY( 布尔处理器的累加器 )
一般也作为寄存器对待 。
寄存器 R0,R1 通常用做间接寻址时的地址指针。
⑵ 位寻址区:
从片内数据 RAM区的 32- 47( 20H- 2FH)的 16个字节
单元,共包含 128位,是可位寻址的 RAM区。这 16个字节单元,
既可进行字节寻址,又可位寻址。字节地址与位地址之间的关
系见 表 2–2。
这 16个位寻址单元,再加上可位寻址的特殊功能寄存器一起构
成了布尔(位)处理器的数据存储器空间。在这一存储器空间
所有位都是可直接寻址的,即它们都具有位地址。
⑶ 字节寻址区,
从片内数据 RAM区的 48~ 127( 30H~ 7FH), 共 80个字节单
元, 可以采用直接字节寻址的方法访问 。
对于 80C52,还有高 128 B的数据 RAM区 。 这一区域只能采用
间接字节寻址的方法访问 。
⑷ 堆栈区及堆栈指示器 SP:
堆栈是在片内数据 RAM区中, 数据先进后出或后进先出的区
域 。 堆栈指示器 SP( stack pointer) 在 80C51中存放当前的堆
栈栈顶所指存储单元地址的一个 8位寄存器 。
堆栈有两种形式, 一是向上生成, 二是向下生成 。 80C51单片微
机的堆栈是向上生成的:即进栈时 SP的内容是增加的;出栈时
SP的内容是减少的 。
80C51的堆栈区域可用软件设置堆栈指示器 ( SP) 的值, 在片
内数据 RAM区中予以定义 。
系统复位后 SP内容为 07H。 如不重新定义, 则以 07H为栈底,
压栈的内容从 08H单元开始存放 。 通过软件对 SP的内容重新定义,
使堆栈区设定在片内数据 RAM区中的某一区域内, 堆栈深度不
能超过片内 RAM空间 。
堆栈是为子程序调用和中断操作而设立的 。 其具体功能有两个:
保护断点和保护现场 。 在 80C51单片微机中, 堆栈在子程序调用
和中断时会把断点地址自动进栈和出栈, 还有对堆栈的进栈和出
栈的指令 ( PUSH,POP) 操作, 用于保护现场和恢复现场 。
由于子程序调用和中断都允许嵌套,并可以多级嵌套,而现场
的保护也往往使用堆栈,所以一定要注意给堆栈以一定的深度,
以免造成堆栈内容的破坏而引起程序执行的” 跑飞”。
⒉ 特殊功能寄存器 SFR区
特殊功能寄存器 SFR( Special Function Register) 是 80C51中
各功能部件所对应的寄存器, 用以存放相应功能部件的控制命
令, 状态或数据的区域 。
80C51设有 128 B片内数据 RAM结构的特殊功能寄存器空间
区 。 除程序计数器 PC和 4个通用工作寄存器组外, 其余所有的
寄存器都在这个地址空间之内 。
80C51共定义了 21个特殊功能寄存器, 其名称和字节地
址列于 表 2- 3中 。 在 80C52中, 除上述 80C51的 21个之外, 还
增加了 5个特殊功能寄存器, 共计 26个 。 访问其它地址无效 。
在 80C51的 21个 ( 80C52的 26个 ) 特殊功能寄存器中,
字节地址中低位地址为 0H或 8H的特殊功能寄存器, 除有字节
寻址能力外, 还有位寻址能力 。 这些特殊功能寄存器与位地
址的对应关系见 表 2- 4。
片外数据存储器是在外部存放数据的区域,这一区域
只能用寄存器间接寻址的方法访问,所用的寄存器为 DPTR、
R1或 R0。指令助记符为 MOVX。
当用 R0,R1寻址时, 由于 R0,R1为 8位寄存器, 因此
最大寻址范围为 256B;当用 DPTR寻址时, 由于 DPTR为 16
位寄存器, 因此最大寻址范围为 64KB。
2.4.3 片外数据存储区
?80C51共有四个 8位的并行双向口,计有 32根输入/输出
( I/O)口线。各口的每一位均由锁存器、输出驱动器和
输入缓冲器所组成。由于它们在结构上的一些差异,故各
口的性质和功能也就有了差异。它们之间的异同列于 表 2
- 5。
2.5 并行输入 /输出端口
? P0口是一个多功能的 8位口, 可以字节访问也可位访问, 其
字节访问地址为 80H,位访问地址为 80H~ 87H。
⒈ 位结构
P0口位结构原理图见 图 2- 11。
2.5.1 P0口
⑴ P0口中一个多路开关:多路开关的输入有两个, 地址
/数据输出;输出锁存器的输出 /Q。 多路开关的输出用于控
制输出 FET Q0的导通和截止 。 多路开关的切换由内部控制信
号控制 。
⑵ P0口的输出上拉电路导通和截止受内部控制信号和地址
/数据信号共同 ( 相, 与, ) 来控制 。
⑶ 当内部信号置 1时, 多路开关接通地址/数据输出端 。
当地址/数据输出线置 1时, 控制上拉电路的, 与, 门输出为 1,
上拉 FET导通, 同时地址/数据输出通过反相器输出 0,控制
下拉 FET截止, 这样 A点电位上拉, 地址/数据输出线为 1。
当地址/数据输出线置 0时,, 与, 门输出为 0,上拉 FET截止,
同时地址/数据输出通过反相器输出 1,控制下拉 FET导通,
这样 A点电位下拉, 地址/数据输出线为 0。
通过上述分析可以看出, 此时的输出状态随地址/数据线而
变 。 因此, P0口可以作为地址 /数据复用总线使用 。 这时上下
两个 FET处于反相, 构成了推拉式的输出电路, 其负载能力大
大增加 。 此时的 P0口相当一个双向口 。
⑷ 当内部信号置 0时, 多路开关接通输出锁存器的 /Q端
这时明显地可以看出两点:
·由于内部控制信号为 0,与门关闭, 上拉 FET截止, 形成 P0口
的输出电路为漏极开路输出 。
·输出锁存器的 Q端引至下拉 FET栅极, 因此 P0口的输出状态由
下拉电路决定 。
在 P0口作输出口用时, 若 P0,i输出 1,输出锁存器的 Q端为 0,
下拉 FET截止, 这时 P0,i为漏极开路输出;若 P0,i输出 0,输
出锁存器的 Q端为 1,下拉 FET导通, P0,i输出低电平 。
在 P0口作输入口用时, 为了使 P0,i能正确读入数据, 必须先
使 P0.i置 1。 这样, 下拉 FET也截止, P0,i处于悬浮状态 。 A点
的电平由外设的电平而定, 通过输入缓冲器读入 CPU。 这时 P0
口相当于一个高阻抗的输入口 。
⒉ P0口的功能
⑴ 作 I/ O口使用
相当于一个真正的双向口:输出锁存, 输入缓冲, 但输入时需
先将口置 1;每根口线可以独立定义为输入或输出 。 它具有双向口
的一切特点 。
与其它口的区别是, 输出时为漏极开路输出, 与 NMOS的电路
接口时必须要用电阻上拉, 才能有高电平输出;输入时为悬浮状
态, 为一个高阻抗的输入口 。
⑵ 作地址/数据复用总线用
此时 P0口为一个准双向口 。 但是有上拉电阻, 作数据输入
时, 口也不是悬浮状态 。 作地址/数据复用总线用 。 作数据
总线用时, 输入/输出 8位数据 D0~ D7;作地址总线用时,
输出低 8位地址 A0~ A7。 当 P0口作地址/数据复用总线用之
后, 就再也不能作 I/ O口使用了 。
P1口是一个 8位口,可以字节访问也可按位访问,其字节访问
地址为 90H,位访问地址为 90H~ 97H。
⒈ 位结构和工作原理
P1口的位结构如 图 2- 12所示 。
包含输出锁存器, 输入缓冲器 BUF1( 读引脚 ), BUF2( 读锁存
器 ) 以及由 FET晶体管 Q0与上拉电阻组成的输出/输入驱动器 。
P1口的工作过程分析如下:
? P1.i位作输出口用时,CPU输出 0时, D= 0,Q= 0,Q= l,
晶体管 Q0导通, A点被下拉为低电平, 即输出 0; CPU输出 1时,
D= l,Q= 1,Q= 0,晶体管 Q0截止, A点被上拉为高电平, 即
输出 l。
2.5.2 P1口
? P1,i位作输入口用时:先向 P1,i位输出高电平, 使 A点提
升为高电平, 此操作称为设置 P1,i为输入线 。 若外设输入为 1
时 A点为高电平, 由 BUFI读入总线后 B点也为高电平;若外设
输入为 0时 A点为低电平, 由 BUF1读入总线后 B点也为低电平 。
⒉, P1口的特点
? 输出锁存器, 输出时没有条件;
? 输入缓冲, 输入时有条件, 即需要先将该口设为输入状态,
先输出 1;
? 工作过程中无高阻悬浮状态, 也就是该口不是输入态就是
输出态 。
具有这种特性的口不属于, 真正, 的双向口, 而被称为, 准,
双向口 。
⒊ P1口的操作
⑴ 字节操作和位操作
CPU对于 P1口不仅可以作为一个 8位口 ( 字节 ) 来操作, 也
可以按位来操作 。
有关字节操作的指令有:
输出,MOV P1,A ; P1←A
MOV P1,# data ; P1← # data
MOV P1,direct ; P1←direct
输入,MOV A,P1 ; A←P 1
MOV direct,Pl ; direct←Pl
有关位操作的指令有:
置位, 清除,SETB P1.i ; P1.i← 1
CLR Pl,i ; P1,i← 0
输入, 输出,MOV P1,i,C ; P1,i←CY
MOV C,P1,i ; CY←P 1.i
判跳,JB P1,i,rel ; P1.i=1,跳转
JBC P1,i,rel ; P1.i= 1,跳转且;清 P1.i= 0
逻辑运算,ANL C,P1,i ; CY← ( P1.i·CY)
ORL C,P1,i ; CY← ( P1.i+ CY)
P1,i中的 i= 0,… 7。
P1口不仅可以以 8位一组进行输入, 输出操作, 还可以逐
位分别定义各口线为输入线或输出线 。 例如:
ORL P1,# 0 0 0 0 0 0 1 0 B
可以使 P1,l位口线输出 l,而使其余各位不变 。
ANL P1,# 1 1 1 1 1 1 0 1 B
可以使 P1,1位线输出 0,而使其余各位不变 。
⑵ 读引脚操作和读锁存器操作
从 P1口的位结构图中可以看出, 有两种读口的操作:一种
是读引脚操作, 一种是读锁存器操作 。
? 在响应 CPU输出的读引脚信号时, 端口本身引脚的电平值
通过缓冲器 BUF1进入内部总线 。 这种类型的指令, 执行之前
必须先将端口锁存器置 1,使 A点处于高电平, 否则会损坏引
脚, 而且也使信号无法读出 。
这种类型的指令有:
MOV A,P1 ; A←P 1
MOV direct,P1 ; direct←P 1
? 在执行读锁存器的指令时, CPU首先完成将锁存器的值通过
缓冲器 BUF2读入内部, 进行修改, 然后重新写到锁存器中去,
这就是, 读一修改一写, 指令 。
这种类型的指令包含所有的口的逻辑操作 ( ANL,ORL、
XRL) 和位操作 (JBC,CPL,MOV,SETB,CLR等 ) 指令 。
⑶ P1口的多功能线
在 80C52中, P1,0和 P1,1口线是多功能的, 即除作一
般双向 I/O口线之外, 这两根口线还具有下列功能:
P1,0—定时器/计数器 2的外部输入端 T2;
P1,1—定时器/计数器 2的外部控制端 T2EX。
P2口是一个多功能的 8位口, 可以字节访问也可位访问, 其
字节访问地址为 A0H,位访问地址为 A0H~ A7H。
⒈ P2口位结构和工作原理
P2口位结构原理图示于 图 2- 13。
多路开关的输入有两个:一个是口输出锁存器的输出端 Q;
一个是地址寄存器 ( PC或 DPTR) 的高位输出端 。 多路开关的
输出经反相器反相后去控制输出 FET的 Q0。 多路开关的切换
由内部控制信号控制 。
输出锁存器的输出端是 Q而不是 Q,多路开关之后需接反相器。
2.5.3 P2口
? P2口的工作状态是 I/O口状态。
在内部控制信号的作用下,多路开关的输入投向输出锁存
器的输出 Q( C点)侧,这样多路开关将接通输出锁存器。
若经由内部总线输出 0,输出锁存器的 Q端为 0,信号经多
路开关和反相器后输出 1,Q0导通, A点为 0,输出低电平;
若经由内部总线输出 1,输出锁存器的 Q端为 1,反相器后输
出 0,Q0截止, A点为 1,输出高电平 。
? P2口的工作状态是输出高 8位地址 。
在内部控制信号的作用下,多路开关的输入投向地址输出( B
点)侧,这样多路开关将接通地址寄存器输出。 A点的电平将
随地址输出的 0,1而 0,1地变化。
⒉ P2口的功能
从上述工作过程的分析中可以看出 P2口是一个双功能的
口:
⑴ 作 I/ O口使用时, P2口为一准双向口 。
⑵ 作地址输出时, P2口可以输出程序存储器或片外数据存储
器的高 8位地址, 与 P0输出的低地址一起构成 16位地址线, 从
而可分别寻址 64KB的程序存储器或片外数据存储器 。 地址线
是 8位一起自动输出的 。
⒊ P2口使用中注意的问题
⑴ 由于 P2口的输出锁存功能, 在取指周期内或外部数据存储
器读, 写选通期间, 输出的高 8位地址是锁存的, 故无需外加
地址锁存器 。
⑵ 在系统中如果外接有程序存储器, 由于访问片外程序存储器
的连续不断的取指操作, P2口需要不断送出高位地址, 这时 P2
口的全部口线均不宜再作 I/O口使用 。
⑶ 在无外接程序存储器而有片外数据存储器的系统中, P2口使
用可分为两种情况:
? 若片外数据存储器的容量< 256 B:可使用, MOVX A,@ Ri”
及, MOVX @ Ri,A”类指令访问片外数据存储器, 这时 P2口
不输出地址, P2口仍可作为 I/O口使用;
? 若片外数据存储器的容量 >256 B:这时使用, MOVX A,@
DPTR”及, MOVX@ DPTR,A”类指令访问片外数据存储器,
P2口需输出高 8位地址 。 在片外数据存储器读, 写选通期间,
P2口引脚上锁存高 8位地址信息, 但是在选通结束后, P2口内
原来锁存的内容又重新出现在引脚上 。
使用, MOVX A,@ Ri”及, MOVX @ Ri,A”类访问指
令时, 高位地址通过程序设定, 只利用 P1,P3甚至 P2口中的某
几根口线送高位地址, 从而保留 P2口的全部或部分口线作 I/O口
用 。
P3口是一个多功能的 8位口,可以字节访问也可位访问,
其字节访问地址为 B0H,位访问地址为 B0H~ B7H。
⒈ 位结构与工作原理
P3口的位结构原理如 图 2- 14所示 。
? 与非门有两个输入端:一个为口输出锁存器的 Q端, 另一个
为替代功能的控制输出 。 与非门的输出端控制输出 FET管 Q0。
? 有两个输入缓冲器, 替代输入功能取自第一个缓冲器的输出
端; I/O口的通用输入信号取自第二个缓冲器的输出端 。
2.5.4 P3口
输出工作过程:
? 当替代输出功能 B点置 1时, 输出锁存器的输出可以顺利通到引
脚 P3,i。 其工作状况与 P1口相类似 。 这时 P3口的工作状态为 I/O口,
显然此时该口具有准双向口的性质 。
? 当输出锁存器的输出置 1时, 替代输出功能可以顺利通到引脚
P3,i。
若替代输出为 0时, 因与非门的 C点已置 l,现 B点为 0,故与
非门的输出为 l,使 Q0导通, 从而使 A点也为 0。 若替代输出为 1时,
与非门的输出为 0,Q0截止, 从而使 A点也为高电平 。 这时 P3口的
工作状态处于替代输出功能状态 。
⒉ P3口的功能
P3口是一个多功能口 。
⑴ 可作 I/O口使用, 为准双向口 。
既可以字节操作, 也可以位操作;既可以 8位口操作, 也可
以逐位定义口线为输入线或输出线;既可以读引脚, 也可以读
锁存器, 实现, 读一修改一输出, 操作 。
⑵ 可以作为替代功能的输入, 输出 。
替代输入功能:
P3,0 —— RXD,串行输入口 。
P3,2——INT0,外部中断 0的请求 。
P3﹒ 3——INT1,外部中断 1的请求 。
P3,4——T0,定时器/计数器 0外部计数脉冲输入 。
P3,5——T1,定时器/计数器 1外部计数脉冲输入 。
替代输出功能:
P3,l——TXD,串行输出口 。
P3, 6——外部数据存储器写选通, 输出, 低电平有效 。
P3,7——外部数据存储器读选通, 输出, 低电平有效 。
?是一个完整的一位微计算机,它具有自已的 CPU、寄存器、
I/O、存储器和指令集。一位机在开关决策、逻辑电路仿真、
和实时控制方面非常有效。
? 位处理器系统包括以下几个功能部件:
⑴ 位累加器:借用进位标志位 CY。 在布尔运算中 CY是数
据源之一, 又是运算结果的存放处, 位数据传送的中心 。 根
据 CY的状态实现程序条件转移,JC rel,JNC rel。
2.6 布尔(位)处理器
⑵ 位寻址的 RAM,内部 RAM位寻址区中的 0~ 127位 (20H~
2FH);
⑶ 位寻址的寄存器:特殊功能寄存器 ( SFR) 中的可以位寻
址的位 。
⑷ 位寻址的 I/O口:并行 I/O口中的可以位寻址的位 (如 P1.0)。
⑸ 位操作指令系统:位操作指令可实现对位的置位, 清 0、
取反, 位状态判跳, 传送, 位逻辑运算, 位输入 /输出等操
作 。
80C51单片微机共有复位、程序执行、低功耗以及编
程和校验四种工作方式。
2.7 80C51单片微机的工作方式
⒈ 复位操作
其主要功能是把 PC初始化为 0000H,使单片微机从
0000H单元开始执行程序 。 当由于程序运行出错或操作错误使
系统处于死锁状态时, 为摆脱困境, 可以按复位键以重新启动,
也可以通过监视定时器来强迫复位 。
除 PC之外, 复位操作还对其它一些特殊功能寄存器有影响,
它们的复位状态见 表 2–6。
复位操作还对单片微机的个别引脚信号有影响。例如在复位期
间,ALE和 PSEN信号变为无效状态,即 ALE=l,PSEN =l。
2.7.1 复位方式
⒉ 复位信号及其产生
⑴ 复位信号
RST引脚是复位信号的输入端 。 复位信号是高电平有效,
其有效时间应持续 24个振荡周期 (即 2个机器周期 )以上 。
若使用频率为 6MHz的晶振, 则复位信号应持续 4μs 以上 。 产生复
位信号的电路逻辑图如 图 2- 15所示 。
整个复位电路包括芯片内, 外两部分 。
外部电路产生的复位信号 ( RST) 送施密特触发器, 再由片
内复位电路在每个机器周期的 S5P2时刻对施密特触发器的输
出进行采样, 然后才能得到内部复位操作所需要的信号 。
复位操作有上电自动复位, 按键电平复位和外部脉冲复位三
种方式, 示于 图 2-16中
程序执行方式是单片微机的基本工作方式。由于复位
后 PC= 0000H,因此,程序执行总是从 0000H开始的。一般
在 0000H开始的单元中存放一条无条件转移指令,以便跳转
到实际主程序的入口去执行。
比如:
ORG 0000H
SJMP MAIN ;转主程序
2.7.2 程序执行方式
80C51有两种低功耗方式,即待机方式和掉电保护方
式。待机方式和掉电保护方式时涉及的硬件如 图 2- 17所示。
待机方式和掉电保护方式都是由电源控制寄存器
( PCON) 的有关位来控制的 。
2.7.3 低功耗工作方式
其中:
SMOD:波特率倍增位,在串行通讯时使用。
GF1,GF0:通信标志位 1,0。
PD:掉电方位式, PD= 1,则进入掉电方式 。
IDL:待机方式位,IDL= 1,则进入待机方式。
若 PD和 IDL同时为 1,则先激活掉电方式。
SMOD - - - GF1 GF0 PD IDL
电源控制寄存器格式如下:
⒈ 待机方式
⑴ 使用指令使 PCON寄存器 IDL位置 1,则 80C51进入待机方式 由
图 2-17中可看出这时振荡器仍然运行,并向中断逻辑、串行口和定
时器 /计数器电路提供时钟,中断功能继续存在 。
?向 CPU提供时钟的电路被阻断,因此 CPU不能工作,与 CPU有关
的如 SP,PC,PSW,ACC以及全部通用寄存器都被冻结在原状态。
⑵ 可以采用中断方式或硬件复位来退出待机方式 。
在待机方式下, 若产生一个外部中断请求信号, 在单片微机
响应中断的同时, PCON.0位 ( IDL位 ) 被硬件自动清 ‘ 0’,单片
微机就退出待机方式而进入正常工作方式 。 在中断服务程序中安
排一条 RETI指令, 就可以使单片微机恢复正常工作, 从设置待机
方式指令的下一条指令开始继续执行程序 。
⒉ 掉 电保护方式
⑴ PCON寄存器的 PD位控制单片微机进入掉电保护方式。
当 80C51检测到电源故障时,除进行信息保护外,还应
把 PCON.1位置‘ 1’,使之进入掉电保护方式。此时单片微机
一切工作都停止,只有内部 RAM单元的内容被保护。
⑵ 只能依靠复位退出掉电保护方式。
80C51备用电源由 Vcc端引入 。 当 Vcc恢复正常后, 只要
硬件复位信号维持 10ms,就能使单片微机退出掉电保护方式,
CPU则从进入待机方式的下一条指令开始重新执行程序 。
在待机和掉电保护期间引脚的状态见 表 2- 7。
对于片内具有 EPROM型程序存储器的 87C51(87C52)
和片内具有闪速存储器的 89C51 (89C52), 78E51 (78E52) 等
单片微机可以通过编程来修改程序存储器中的程序。
89C51内部有一个 4KB的 Flash PEROM。编程接口可
接收高电压 (12V) 或低电压 (VCC) 的允许编程信号。低电压
编程方式可以很方便的与 89C51内的用户系统进行编程;而
高压编程方式则可与通用的 EPROM编程器兼容。对于这二
种编程方式的芯片面上的型号和片内特征字节的内容不同。
⒈ 闪速存储器编程方式
表 2-8列出了 89C51闪速存储器的编程、校验、写锁定位等时
的逻辑电平。
2.7.4 编程方式
注意:⑴ 根据特征字节 (地址为 032H) 的内容选择合适的编程
电压 (VPP=12V或 5V)
⑵ 片擦除操作时,要求 PROG的脉冲宽度为 10ms。
⒉ 闪速存储器编程
⑴ 在对 89C51编程前,地址、数据、控制信号必须按
表 2-8和 图 2-18设置。
对 89C51的编程的步骤如下:
? 在地址线上输入要编程存储器单元地址 。
? 在数据线上输入要写入的数据 。
? 按 图 2-19的要求输出编程和校验的时序 。
? 对于高压编程模式, 将 EA/VPP升至 12V。
? 每对 Flash存储阵列写入一个字节或每写入一个程序加密
位,要向 ALE/PROG输出一个编程脉冲。
? 改变地址和数据,重复以上几步操作,直至目标程序
(OBJ文件 ) 结束。
字节写周期是自动定时的,一般不超过 1.5mS
⑵ 查询数据
89C51可以通过数据查询来检测一个写周期是否结束。
若数据未写完,则从 P0.7引脚上读 到的是该数据的最高位的
反码。当写周期结束后,读出值即为写入值。
⑶ 准备好 /忙 (RDY/BSY) 信号
从 图 2-19中可看出,编程期间 ALE/PROG为高电平后,P3.4
引脚被拉成低电平,表示 BUSY编程结束后,ALE/PROG为
低电平,表示 READY 。
⑷ 编程校验
如果锁定位 LB1和 LB2没有被编程,代码数据则可读
回,用来校验。锁定位不能直接被校验,只能通过观察它们
的功能是否被允许而间接得到证实。
⑸ 芯片擦除
通过正确的控制信号的组合,并保持 ALE/PROG引脚脉冲
宽度 (低电平 ) 约 10ms,则可对 EPROM阵列和三个锁定位进行电
擦除,擦除后代码阵列全为” 1” 。注意,在对程序存储器进行重
新编程前必须执行片擦除操作。
⑹ 读特征字节
89C51单片微机内有三个特征字节,地址为 030H,031H和
032H,分别用来指示该器件的生产厂商、型号和编程电压。
( 030H)=1EH 表示 ATMEL公司生产。
(031H)=51H 表示型号为 89C51
=61H 表示型号为 89LV51
(032H)=FFH 表示编程电压为 12V
=05H 表示编程电压为 5V
⒊ 程序锁定位的功能和编程
80C51片内有三个锁定位,但不含密码阵列。其编程状
况和特点参见 表 2-9。当第一级加密时,逻辑电压被取样并锁
存。在复位期间,若器件为上电而不是复位,则锁存器内容初
始化为一个随机值,直到复位操作结束。
锁定位的编程参照 表 2–9的逻辑电平进行。
END
图 2–1 80C51的内部结构图
图 2–2 80C51/80C52的封装及逻辑图
图 2–2 80C51/80C52的封装及逻辑图
图 2–3 非总线型单片微机引脚示意图
图 2–4 指令寄存器和指令译码器
图 2–5 算术逻辑运算单元 ALU
图 2–6 80C51单片微机的时钟电路
图 2–7 振荡器的结构和振荡电路原理
图 2–8 80C51单片微机指令时序
图 2–9 80C51单片微机存储器映象图
图 2–10 片内数据存储器各部分地址空间分布图
图 2- 11 P0口位结构原理图
图 2–12 P1口位结构原理图
图 2- 13 P2口位结构原理图
图 2–14 P3口位结构原理图
图 2–15 复位电路结构图
图 2–16 复位电路
图 2–17 80C51单片微机低功耗方式的内部结构
图 2–18 89C51的闪速存储器编程和校验
图 2–19 89C51的闪速存储器的编程和校验
RS1 RS0 组号 寄存器 R0~
R7地址
0 0 0组 00H~ 07H
0 1 1组 08H~ 0FH
1 0 2组 10H~ 17H
1 1 3组 18H~ 1FH
表 2–1 工作寄存器组
表 2–2 字节地址和位地址的关系
表 2–3 特殊功能寄存器 SFR的名称和地址
表 2–4 特殊功能寄存器 (SFR)的位地址
表 2- 5 80C51并行 I/O接口的异同
表 2–6 特殊功能寄存器 SFR的复位状态
表 2–7 待机和掉电保护方式时引脚状态
表 2–8 89C51闪速存储器的编程方式
表 2–9 89C51程序锁定位不同的编程状态及其特点