义隆单片机课堂
EM78P447S单片机入门与实作系列讲座 第2讲 硬件系统概况(下)

🏠 首页 《无线电》杂志 2002年 🔗 第2期 🔗 第34页 分类:电脑与单片机 🔗

编前:
从本期讲座开始,我刊在台湾义隆公司的大力支持下将进行读者有奖问题回答活动,在每期单片机讲座中,笔者都会给大家设置相应的问题,有兴趣的读者可通过来信至编辑部或E-mail至computer@radio.com.cn的方式回答问题来参加此次有奖活动,我刊将根据答案情况每期抽取10名左右读者,赠送义隆公司提供的义隆单片机IC数据光盘。欢迎参与!D

一、程序存储器ROM和硬件堆栈

EM78P447S具有一个12位宽的程序计数器PC,用来产生ROM地址。PC所产生的12位地址最大可寻址4K字(指令字为13比特)的ROM空间,地址编码的最大范围为000H~FFFH(跟随有“H”或“h”后缀的数字表示是一个16进制数)。如图1所示。整个程序存储器以1K为单位进行分“页”,所以对于EM78P447S来说4K程序存储器共分作4页,分别记为“页0”、“页1”、“页2”和“页3”。

图1
图1 🔍原图 (567×597)

程序存储器中保留了3个特殊的单元:地址为FFFH的单元专门用作“复位矢量”;地址为001H的单元专门用作“硬件中断矢量”;地址为002H的单元专门用作“软件中断矢量”。所谓复位矢量就是主程序的入口地址,无论由于何种原因引起的单片机复位,它都将从该地址入口从头执行主程序。所谓硬件中断矢量就是对于硬件中断源进行服务的子程序的入口地址,无论由于两个中断源中的哪一个引起的CPU中断,都将从该地址进入硬件中断服务子程序。所谓软件中断矢量就是对于软件中断源进行服务的子程序的入口地址。

EM78P447S的堆栈与众不同,之所以称它为硬件堆栈,原因是,它具有5×12的独立暂存空间,既不占用程序存储器空间,也不占用数据存储器空间,更不需要进栈和出栈之类的堆栈操作专用指令。当CPU执行“调用子程序”的指令或者CPU响应中断而发生程序跳转时,就自动把当前程序计数器PC的值(即被中断的程序的断点地址)自动压入堆栈;而当在子程序末尾执行“返回主程序”的指令时,自动从堆栈中弹出断点地址并恢复程序计数器PC原先的值。

二、数据存储器RAM

EM78P447S的数据存储器,既可称为RAM,又可称为寄存器(Register)阵列,原因是这种单片机所配置的数据存储器,同时扮演着普通单片机中RAM和寄存器(包含通用和专用寄存器)的双重角色。

按空间分布可以分为“工作寄存器”空间和“特殊功能寄存器”空间,两个空间各自独立进行地址编码。“特殊功能寄存器”空间内的各个寄存器单元只能使用特殊指令来操作,并且只能实现读、写操作;而“工作寄存器”空间内的各个寄存器单元使用普通指令来操作,不仅能够实现读、写操作,还能实现左移位、右移位、置位、清位、位测试等复杂操作。见图2。

图2
图2 🔍原图 (567×731)

按功能又可以分为“专用寄存器”和“通用寄存器”两类。“专用寄存器”及其每个比特位的用途是固定的,而“通用寄存器”则可以供用户随意安排存储任何数据。见图3。

1. 通用寄存器

这类寄存器可由用户自由安排和存放随机数据,单片机上电复位后其内容是不确定的,而断电之后其内容又会自动消失。位于工作寄存器空间内,共有148个8比特宽的寄存器单元。其中,地址为08H~1FH的有24个;地址为20H~3EH的共有124(=31×4)个,分布在4个RAM“体”(Bank)上。4个体分别记为“体0”、“体1”、“体2”和“体3”,它们的体选码分别为00、01、10和11。因此,当访问地址在20H到3EH之间的寄存器单元时,还需要确定存储体。

2. 专用寄存器

专用寄存器的每个寄存器单元都有一种或几种固定的专门用途。它们分布于两个寄存器空间之内,其中位于工作寄存器空间内的有IAR、TCC、PC、STATUS、RSR、PORT5、PORT6、PORT7(也叫R0~R7)和ISR(也叫R3F)共9个,位于特殊功能寄存器空间内的有IOC5、IOC6、IOC7、IOCB、IOCE、IOCF和CONT共7个。

由于专用寄存器专门用于配置CPU内核的性能和控制各功能部件或外围模块的操作,因此,按功能又可细分成两类:一类是与CPU内核相关的寄存器,另一类是与功能部件或外围模块相关的寄存器。以下暂介绍与CPU内核相关的几个专用寄存器,其余的将在介绍各种功能部件或外围模块的部分中去讲解。

(1)状态寄存器STATUS(R3),地址为03H

状态寄存器与通用寄存器不完全一样,其中某些位只能读不能写,另一些位的状态会根据ALU内运算结果的不同而随时变化。状态寄存器各位的含义见附表:

图3
图3 🔍原图 (255×45)

● C:进位/借位标志位。执行加法指令时:1=发生进位;0=不发生进位。执行减法指令时:1=不发生借位;0=发生借位。

● DC:辅助进位/借位标志位(或称为半进位/借位标志位)。执行加法指令时:1=低四位向高四位发生进位;0=低四位向高四位不发生进位。执行减法指令时:1=低四位向高四位不发生借位;0=低四位向高四位发生借位。

● Z:零标志位。1=算术或逻辑运算的结果为零;0=算术或逻辑运算的结果不为零。

● P:节电标志位。当电源上电或WDTC(看门狗清零)指令执行后该位置“1”;当SLEP(睡眠)指令执行后该位清“0”。

● T:超时标志位。当电源上电或WDTC或SLEP指令执行后该位自动置“1”;当看门狗发生超时溢出该位自动清“0”。

● PS0和PS1:程序存储器ROM的页面选择位。

● GP:通用读/写位,没有专门用途。

(2)程序计数器PC(R2),地址为02H

程序计数器PC是一个唯一的12位宽的专门提供程序存储器地址的寄存器。单片机初次上电或复位,PC各位全部置1,即为FFFH(等于复位矢量),指向程序存储器ROM的最后一个单元(该单元中通常放置一条跳转指令,以便跳到程序的入口处)。每当CPU从程序存储器中取出一条指令它就自动加1,以便指向CPU将要执行的下一条指令所在的地址。

(3)间接寻址寄存器IAR(R0),地址为00H

位于数据存储器最顶端的地址为00H的IAR寄存器,其实是一个有名无实的寄存器,只是给它保留一个地址编码而已,物理上并不存在这个寄存器单元。用它来与RSR寄存器配合,实现对RAM的“工作寄存器”空间进行间接寻址。当访问(即读或写)IAR时,实际上是在访问 以RSR内容为地址的工作寄存器单元。在EM78系列单片机中采用这种别具一格的设计手法,可以使指令系统得到极大的简化。

(4)RAM选择寄存器RSR(R4),地址为04H

用来与IAR寄存器配合实现对于工作寄存器的间接寻址。方法是,预先将打算访问的某个工作寄存器的地址放到RSR寄存器中,然后访问IAR寄存器即可。可以把该寄存器看作两部分,高2位是体选码(在单片机初次加电或复位之后自动置为“00”),低6位是寄存器地址码。如图4所示。

三、输入/输出端口模块

输入端口负责从外界接收检测信号、键盘信号等各种开关量信号;输出端口负责向外界输送由内部电路产生的处理结果、显示信息、控制命令、驱动信号等。I/O口是单片机的一种极其重要的外设模块,对任何一款单片机都是必不可少的,只是数量不同而已。

在EM78P447S单片机中,具有3个输入/输出端口,分别是P5、P6和P7。由于EM78P447S属于8位单片机,因此每个端口都由数量不超过8条的端口引脚(或称口线)构成。每个端口中的每条引脚都可以用软件的方式,由用户按需要单独编程,设定为输出引脚或者输入引脚。“端口引脚”与“端口”这两个概念之间的关系就是一种“个体”与“整体”的关系。28脚的EM78P447SA的P5端口,比32脚的EM78P447SB的P5端口少了4条口线P54~P57。

1. 与输入/输出端口相关的寄存器

在EM78系列单片机中,每个端口都至少对应着两个在工作寄存器中统一编址的专用寄存器,分别是数据寄存器和方向控制寄存器。也就是EM78单片机把端口都当作寄存器来访问(即读出或写入),这样有利于减少指令集中指令的类型和数量,对于用户的记忆和编程也带来了方便。

(1)端口数据寄存器PORT5~PORT7(R5~R7),地址为05H~07H

为3个端口P5~P7的输入/输出“数据寄存器”,EM78单片机把I/O端口当作普通寄存器来操作。比如,从端口P6输出逻辑电平信号,就往PORT6寄存器中写入数据即可;从端口P6输入数字信号,就读取PORT6寄存器中的数据即可。

(2)端口控制寄存器IOC5~IOC7,地址为05H~07H

为3个端口P5~P7的输入/输出方向“控制寄存器”。通过设置该寄存器的每一位可以把相应的端口引脚定义为输入或输出状态。比如,当把IOC6寄存器设置为“bit7~bit0=00001111”时,则端口引脚P67~P64为“输出”状态,而端口引脚P63~P60为“输入”状态(对外呈现高阻态)。在单片机初次加电或复位之后,自动置为全“1”。

2. 输入/输出端口的内部结构和工作原理

EM78P447S的3个端口P5、P6和P7之间不仅存在内部结构上的差异,而且同属于一个端口的各条引脚的内部结构也不尽相同。但是,3个端口模块的电路结构却大同小异,都具有一个相同的基本部分,在此基础上再添加一些小电路附件,就形成了各个端口以及各条引脚之间的差异。我们只想用一个有代表性的“基本结构模型”,来向读者阐述一个端口模块和一条端口引脚的基本功能、电路结构和工作原理。

(1)输入/输出端口的基本结构

一条端口引脚内部电路的基本结构模型如图5所示。其中包括2个D触发器(数据寄存器PDR和控制寄存器PCR)、3只受控三态门(G1、G2和G3)、一只二选一选择器(MUX)。该模型电路共有6条引出线,其中控制线4条(PDWR、PDRD、PCWR和PCRD)、数据线2条(内侧为IOD、外侧为pin)。

端口的核心功能就是实现数据的吞吐。其中,数据输出的途径是,来自内部数据总线IOD的数据,送入数据寄存器PDR的D输入端,再经过三态门G3后送到外部引脚上;数据输入的途径是,来自外部引脚上的数据,经过选择器MUX和三态门G2送到内部数据总线IOD上。

(2)基本输入/输出端口的工作原理

对于输入/输出端口的基本操作有5种。现在结合图5所示电路,针对一条引脚进行的5种基本操作分别说明如下:


①写端口方向控制寄存器PCR

根据向控制寄存器中写入的内容不同,又可以分为两种情况:写入“1”则对应引脚被设置为“输入”;写入“0”则对应引脚被设置为“输出”。

a. 将引脚设定为输入状态:CPU经数据线IOD送来“1”,同时经控制线PCWR送来一个“写”脉冲;“1”被锁入PCR中,其Q端输出的高电平,一方面封住三态门G3,数据输出的路径被阻断;另一方面控制MUX将G2与外部引脚接通。因此,该引脚被设置为“输入”状态,并且引脚对外呈现高阻状态。

b. 将引脚设定为输出状态:CPU经IOD送来“0”,同时经PCWR线送来一个“写”脉冲,“0”被锁入PCR中,其Q端输出的低电平,一方面打开G3,数据输出的路径被接通;另一方面控制MUX将G2与PDR输出端接通。因此,该引脚被设置为“输出”状态。


②经端口引脚输出数据

前提是该端口引脚必须预先已被设定为“输出”状态。然后CPU把欲输出的数据“X”(可以为0或1)放到数据总线IOD上,接着由控制线PDWR送来“写”脉冲,将“X”锁入PDR中,并且立刻呈现到PDR的Q端上。再经过G3把“X”映射到外部引脚上。


③从端口引脚输入数据

前提是方向控制寄存器PCR的内容预先设定为“1”,引脚被设置为“输入”状态,此时MUX接通到G3的输出端。CPU经过PDRD线送来一个“读”脉冲,G2被打开,引脚上的逻辑信号经过MUX和G2被传送到内部数据总线IOD上。


④检查端口的输入/输出状态

从端口的方向控制寄存器读回控制信息。CPU经过PCRD线送来一个“读”脉冲,打开三态门G1,接通PCR的Q端到内部数据总线IOD,将PCR锁存的内容转移到IOD上。


⑤检查端口数据寄存器

从端口的数据寄存器读回前次输出的数据。前提是方向控制寄存器PCR的内容预先设定为“0”,引脚被设置为“输出”状态,此时MUX接通到PDR的输出端。CPU经过PDRD线送来一个“读”脉冲,G2被打开,PDR的内容被转送到IOD上。


本期有奖问题是:

1. EM78P447S的程序存储器的宽度为几个比特?长度或者说容量为几K?共分为几页?

2. EM78P447S的数据存储器,按空间分为哪两个寄存器空间?按功能又可以分为哪两类寄存器?

3. 输入/输出端口对于单片机来说起什么主要作用?EM78P447S共有几个端口?

读者若在学习过程中有何疑问,可E-MAIL至yanglin...@163.com,,笔者尽力为大家排忧解难。

(大海创作室)