资源描述
河南工业大学信息科学与工程学院教案
嵌入式系统
主讲教师: 金广锋
所在单位:信息科学与工程学院
课程代码: 106211
课程性质: 限选
课程学时: 44
授课对象: 电子信息技术专业本科
开课时间:2007—2008学年2学期
使用教材:李群芳《单片机原理、接口及应用-嵌入式系统技术基础》
出版社: 清华大学出版社
序论
1. 单片机的作用
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等,无不含有CPU 控制器,即单片机。
2. 单片机定义:
何谓单片机:一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A 等。
3.单片机的分类:
一般分为:
△ 51 系列单片机:
MCS 是Intel 公司单片机的系列符号。Intel 推出有MCS-48、MCS-51、MCS-96 系列单片机。
MCS-51 系列单既包括三个基本型80C31、8051、8751,以及对应的低功耗型号80C31、8051、87C51,因而MCS-51 特指Intel 的这几种型号。
在计算机领域,系列机是指同一厂家生产的具有相同系统结构的机器。20 世纪80 年代中期以后,Intel 以专利转让的形式把8051 内核给了许多半导体厂家,如AMTEL、PHILIPS、ANANOG DEVICES、DALLAS 等。这些厂家生产的芯片是MCS-51 系列的兼容产品,准确地说是与MCS-51 指令系统兼容的单片机。这些单片机与8051 的系统结构(只要是指令系统)相同,采用CMOS工艺,因而常用80C51 系列来称呼所有具有8051 指令系统的单片机。他们对8051 一般都作了一些扩充,更有特点、功能更强、市场竞争力更强,不应该把他们成为MCS-51 系列单片机。MCS 只是Intel 公司专用的。
具有51 内核的单片机 比如:
AT 系列 (AT89C51/52、AT89C1051/2051/4051、AT89S51/52、AT89LP2051、AT89S/LS53、AT89S/LS8252 等)、Intel 公司、SST 系列、STC、菲利普PHILIPS(LPC900 系列、P87C 系列等)、华邦(W77、W78)、CYPRESS 公司、MOTOROLA 等
△ AVR 单片机:
AVR 单片机是ATMEL 公司研制开发的一种新型单片机,它与51、PIC 单片机相比具有一系列的优点,用通俗的说法来说,AVR 的优点主要体现在以下几个方面:
1:在相同的系统时钟下AVR 运行速度最快;
2: 芯片内部的Flsah、EEPROM、SRAM 容量较大;
3:所有型号的Flash、EEPROM 都可以反复烧写、全部支持在线编程烧写(ISP);
4:多种频率的内部RC 振荡器、上电自动复位、看门狗、启动延时等功能,使得电路设计变得非常简单;
5:每个IO 口都可以以推换驱动的方式输出高、低电平,驱动能力强;
6:内部资源丰富,一般都集成A/D、D/A 模数器;PWM;SPI、USART、TWI、I2C 通信口;丰富的中断源等。
△ PIC 单片机:
1、PIC 最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O 较少、RAM 及程序存储空间不大、可靠性较高的小型单片机,若采用40 脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC 系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508 单片机仅有8 个引脚,是世界上最小的单片机。该型号有512 字节ROM、25 字节RAM、一个8 位定时器、一根输入线、5 根I/O 线,市面售价在3-6 元人人民币。这样一款单片机在象摩托车点火器这样的应用无疑是非常适合。PIC 的高档型号,如PIC16C74(尚不是最高档型号)有40 个引脚,其内部资源为ROM 共4K、192字节RAM、8 路A/D、3 个8 位定时器、2 个CCP 模块、三个串行口、1 个并行口、11 个中断源、33 个I/O 脚。这样一个型号可以和其它品牌的高档型号媲美。
第一课:MCS-51 单片机主要应用特性
MCS-51 单片机是美国INTE 公司于1980 年推出的产品,与MCS-48 单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111 条,MCS-51 单片机可以算是相当成功的产品,一直到现在,MCS-51 系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-51 单片机作为代表进行理论基础学习。我们也以这一代表性的机型进行系统的讲解。
MCS-51 系列单片机主要包括8031、8051 和8751 等通用产品,其主要功能如下:
·8 位CPU
·4kbytes 程序存储器(ROM)
·128bytes 的数据存储器(RAM)
·32 条I/O 口线
·111 条指令,大部分为单字节指令
·21 个专用寄存器
·2 个可编程定时/计数器
·5 个中断源,2 个优先级
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能
·双列直插40PinDIP 封装·单一+5V 电源供电
MCS-51 以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”,为以后的其它单片机的发展奠定了基础。正因为其优越的性能和完善的结构,导致后来的许多厂商多沿用或参考了其体系结构,有许多世界大的电气商丰富和发展了MCS-51 单片机,象PHILIPS、Dallas、ATMEL 等著名的半导体公司都推出了兼容MCS-51 的单片机产品,就连我国的台湾WINBOND 公司也发展了兼容C51(人们习惯将MCS-51 简称C51,如果没有特别声明,二者同指MCS-51 系列单片机)的单片机品种。
近年来C51 获得了飞速的发展,C51 的发源公司INTEL 由于忙于开发PC 及高端微处理器而无精力继续发展自己的单片机,而由其它厂商将其发展,最典型的是PHILIPS 和ATML 公司,PHILIPS 公司主要是改善其性能,在原来的基础上发展了高速I/O口,A/D 转换器,PWM(脉宽调制)、WDT 等增强功能,并在低电压、微功耗、扩展串行总线(I2C)和控制网络总线(CAN)等功能加以完善。
PHILIPS 公司在发展C51 的低功耗,高速度和增强型功能上作了不少贡献,当初主要由其来发展C51 单片机,他们的83Cxx和87Cxx 系列省去了并行扩展总线,适合于作为家用电器类控制的经济型单片机。
ATMEL 公司推出的AT89Cxx 系列兼容C51 的单片机,完美地将Flash(非易失闪存技术)EEPROM 与80C51 内核结合起来,仍采用C51 的总体结构和指令系统,Flash 的可反擦写程序存储器能有效地降低开发费用,并能使单片机作多次重复使用。
Siemens 公司也沿用C51 的内核,相继推出了C500 系列单片机,在保持了与C51 指令兼容的前提下,其产品的性能得到了进一步的提升,特别是在抗干扰性能,电磁兼容和通信控制总线功能上独树一帜,其产品常用于工作环境恶劣的场合。亦适用于通信和家用电器控制领域。
还有台湾的WINBOND 公司亦开发了一系列兼容C51 的单片机,其产品通常具备丰富的功能特性,而且与其质优价廉在市场也占有一定的分额。
下表是80C51 系列单片机的主要分类及功能特性:
系列
典型芯片
I/O 口
定时/计数器
中断源
串行通信口
片内RAM
片内ROM
51 系列
80C31
4x8 位
2x16 位
5
1
128 字节
无
80C51
4x8 位
2x16 位
5
1
128 字节
4k掩膜ROM
87C51
4x8 位
2x16 位
5
1
128 字节
4kBEPROM
89C51
4x8 位
2x16 位
5
1
128字节
4kBEEPROM
52 系列
80C32
4x8 位
2x16 位
6
1
256 字节
无
80C51
4x8 位
2x16 位
6
1
256 字节
8k掩膜ROM
87C52
4x8 位
2x16 位
6
1
256字节
4kBEPROM
89C52
4x8 位
2x16 位
6
1
256 字节
4kBEEPROM
8051 是MCS-51 系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21 个专用控制寄存器、4kB 的程序存储器、128 字节的数据存储器、4 组8 位的并行口、两个16 位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。
MCS-51 具有比较大的寻址空间,地址线宽达16 条,即外部数据存储器和程序存储器的寻址范围达216=64kB,这作为单片机控制来说已是比较大的,这同时具备对I/O 口的访问能力。此外,MCS-51 采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品。从而容易使产品形成系列化。
由于MCS-51 集成了几乎完善的8 位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利。MCS-51 的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相当灵活和方便的。
MCS-51 单片机的工作频率为2-12MHz,当振荡频率为12MHz 时,一个机器周期为1us,这个速度应该说是比较快的。
8051 中集成了完善的各种中断源,用户可十分方便地控制和使用其功能,使得它的应用范围加大,可以说它可以满足绝大部分的应用场合。
MCS-51 把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。因此,在工业测控系统中,使用单片机是最理想的选择。单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。
MCS-51 的开发环境要求较低,软件资源十分丰富,介绍其功能特性书籍和开发软件随处可取,只需配备一台PC(个人电脑——对电脑的配置基本上无要求),一台仿真编程器即可实现产品开发,早期的开发软件多使用DOS 版本,随着Windows 视窗软件的普及,现在几乎都使用Windows 版本,并且软件种类繁多,琳琅满目,在众多的单片机品种中,C51 的环境资源是最丰富的,这给C51 用户带来极大的便利。
第二课:MCS-51 单片机内部结构
◆ MCS-51 单片机内部结构:
8051 是MCS-51 系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051 单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
·中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8 位数据宽度的处理器,能处理8 位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(RAM):
8051 内部有128 个8 位用户数据存储单元和128 个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的RAM 只有128 个,可存放读写的数据,运算的中间结果或用户定义的字型表。
·程序存储器(ROM):
8051 共有4096 个8 位掩膜ROM,用于存放用户程序,原始数据或表格。
·定时/计数器(ROM):
8051 有两个16 位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
·并行输入输出(I/O)口:
8051 共有4 组8 位I/O 口(P0、 P1、P2 或P3),用于对外部数据的传输。
·全双工串行口:
8051 内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·中断系统:
8051 具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2 级的优先级别选择。
·时钟电路:
8051 内置最高频率达12MHz 的时钟电路,用于产生整个单片机运行的脉冲时序,但8051 单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL 的MCS-51 系列单片机采用的是哈佛结构的形式,而后续产品16 位的MCS-96 系列单片机则采用普林斯顿结构。
下图是MCS-51 系列单片机的内部结构示意图。
■ MCS-51 的引脚说明:
MCS-51 系列单片机中的8031、8051 及8751 均采用40Pin 封装的双列直接DIP 结构,右图是它们的引脚配置, 40 个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8 位共32 个I/O 口,中断口线与P3 口线复用。现在我们对这些引脚的功能加以说明:
·Pin20:接地脚。
·Pin40:正电源脚,正常工作或对片内EPROM 烧写程序时,接+5V 电源。
·Pin19:时钟XTAL1 脚,片内振荡电路的输入端。
·Pin18:时钟XTAL2 脚,片内振荡电路的输出端。
8051 的时钟有两种方式,一种是片内时钟振荡方式,但需在18 和19 脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1
接地,外部时钟信号从XTAL2 脚输入。
·输入输出(I/O)引脚:
Pin39-Pin32 为P0.0-P0.7 输入输出脚,Pin1-Pin1 为P1.0-P1.7 输入输出脚,Pin21-Pin28 为P2.0-P2.7 输入输出脚,Pin10-Pin17 为P3.0-P3.7 输入输出脚,这些输入输出脚的功能说明将在以下内容阐述。
·Pin9:RESET/Vpd 复位信号复用脚,当8051 通电,时钟电路开始工作,在RESET 引脚上出现24 个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC 指向0000H,P0-P3 输出口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。RESET 由高电平下降为低电平后,系统即从0000H 地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,
8051 的初始态如下表:
特殊功能寄存器初始态
特殊功能寄存器
初始态
ACC
00H
B
00H
PSW
00H
SP
07H
DPH
00H
TH0
00H
DPL
00H
TL0
00H
IP
xxx00000B
TH1
00H
IE
0xx00000B
TL1
00H
TMOD
00H
TCON
00H
SCON
xxxxxxxxB
SBUF
00H
P0-P3
1111111B
PCON
0xxxxxxxB
8051 的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd 还是一复用脚,Vcc掉电期间,此脚可接上备用电源,以保证单片机内部RAM 的数据不丢失。
·Pin30:ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE 端将有一个1/6 时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE 会跳过一个脉冲。如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。
·Pin29: 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC 的16 位地址数据将出现在P0 和P2 口上,外部程序存储器则把指令数据放到P0 口上,由CPU 读入并执行。
·Pin31:EA/Vpp 程序存储器的内外部选通线,8051 和8751 单片机,内置有4kB 的程序存储器,当EA 为高电平并且程序地址小于4kB 时,读取内部程序存储器指令数据,而超过4kB 地址则读取外部指令数据。如EA 为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA 端必须接地。在编程时,EA/Vpp 脚还需加上21V 的编程电压。
◆ P 口介绍:
P0 口:8 位、开漏极、双向IO;如果作为IO 使用时候,必须外接上拉电阻;作为输入时候必须置1。可以作为访问外部程序存储器和数据存储器时的低八位数据/地址总线的复用线,这种模式的时候内部含有上拉电阻;
P1 口:8 位双向IO 内部含有上拉电阻、可以驱动4 各TTL 负载,用做输入的时候线置1.
注意:ISP 编程时候:P1.5-MOSI P1.6-MISO P1.7-SCK
P2 口:内部带上拉的8 位双向IO 口。CPU 访问外部16 位地址的存储器时,P2 口提供高八位地址,当CPU 用8 位地址寻址外部存储器时,P2 口位P2 口特殊功能寄存器的内容。
P3 口:内部上拉的8 位双向口
做输出口时可以吸收4 各TTL 的灌电流,做输入口时将IO 置1,由内部上拉电阻拉位高电平,如果外部的负载位低电平,通过内部上拉电阻向外输出电流。
P3 口的其他功能:
引脚
符号
说明
P3.0
RXD
串行口输入
P3.1
TXD
串行口输出
P3.2
/INT0
外部中断0
P3.3
/INT1
外部中断1
P3.4
T0
T0定时器的外部计数输入
P3.5
T1
T1定时器的外部计数输入
P3.6
/WR
外部数据存储器的写选通
P3.7
/RD
外部数据存储器的读选通
ALE/PROG:地址索存允许、编程脉冲信号端
EA/Vpp:外部程序存储器访问允许;
EA=0:执行片外程序存储器程序;
EA=1:CPU 首先执行片内0-0FFFH,然后自动执行外部:1000H-FFFFH
注意:一般我们内部程序存储器足够使用,所以一般情况下接VCC。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端;
XTAL2:片内振荡器反相放大器和时钟发生器的输出端;
VCC:电源电压输入;
GND:电源地
第三课:MCS-51 单片机存储器结构
◆ MCS-51 单片机存储器结构
MCS-51 的存储器可分为四类:
程序存储器
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
MCS-51 具有64kB 程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM 的8031 单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU 从外部程序存储器读取程序。对于内部有ROM的8051 等单片机,正常运行时, 则需接高电平,使CPU 先从内部的程序存储中读取程序,当PC 值超过内部ROM 的容量时,才会转向外部的程序存储器读取程序。
8051 片内有4kB 的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H 单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
其中一组特殊是0000H—0002H 单元,系统复位后,PC 为0000H,单片机从0000H 单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU 直接去执行用户指定的程序。另一组特殊单元是0003H—002AH,这40 个单元各有用途,它们被均匀地分为五段,它们的定义如下:
0003H—000AH 外部中断0 中断地址区。
000BH—0012H 定时/计数器0 中断地址区。
0013H—001AH 外部中断1 中断地址区。
001BH—0022H 定时/计数器1 中断地址区。
0023H—002AH 串行中断地址区。
可见以上的40 个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,每段只有8 个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU 读到这条转移指令,便转向其他地方去继续执行中断服务程序。
数据存储器
数据存储器也称为随机存取数据存储器。MCS-51 单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外部数据存储区。MCS-51 内部RAM 有128 或256 个字节的用户数据存储(不同的型号有分别),它们是用于存放执行的中间结果和过程数据的。MCS-51 的数据存储器均可读写,部分单元还可以位寻址。
8051 内部RAM 共有256 个单元,这256 个单元共分为两部分。其一是地址从00H—7FH 单元(共128 个字节)为用户数据RAM。从80H—FFH 地址单元(也是128 个字节)为特殊寄存器(SFR)单元。从图1 中可清楚地看出它们的结构分布。
在00H—1FH 共32 个单元中被均匀地分为四块,每块包含八个8 位寄存器,均以R0—R7 来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL 工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU 只要定义这个寄存的PSW 的第3 和第4 位(RS0 和RS1),即可选中这四组通用寄存器。对应的编码关系如图2 所示。
内部RAM 的20H—2FH 单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16 个字节,128 个位,位地址为00H—7FH。位地址分配如表1 所示,CPU 能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51 具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
表1
单元地址
MSB
位地址
LSB
2FH
7FH
7EH
7DH
7CH
7BH
7AH
79H
78H
2EH
77H
76H
75H
74H
73H
72H
71H
70H
2DH
6FH
6EH
6DH
6CH
6BH
6AH
69H
68H
2CH
67H
66H
65H
64H
63H
62H
61H
60H
2BH
5FH
5EH
5DH
5CH
5BH
5AH
59H
58H
2AH
57H
56H
55H
54H
53H
52H
51H
50H
29H
4FH
4EH
4DH
4CH
4BH
4AH
49H
48H
28H
47H
46H
45H
44H
43H
42H
41H
40H
27H
3FH
3EH
3DH
3CH
3BH
3AH
39H
38H
26H
37H
36H
35H
34H
33H
32H
31H
30H
25H
2FH
2EH
2DH
2CH
2BH
2AH
29H
28H
24H
27H
26H
25H
24H
23H
22H
21H
20H
23H
1FH
1EH
1DH
1CH
1BH
1AH
19H
18H
22H
17H
16H
15H
14H
13H
12H
11H
10H
21H
0FH
0EH
0DH
0CH
0BH
0AH
09H
08H
20H
07H
06H
05H
04H
03H
02H
01H
00H
◆ 特殊功能寄存器:
ACC
E0H
累加器
B
F0H
乘法寄存器
PSW
D0H
程序状态字
SP
81H
堆栈指针
DPL
82H
数据存贮指针(低8位)
DPH
83H
数据存贮指针(高8位)
IE
A8H
中断允许控制器
IP
D8H
中断优先控制器
P0
80H
通道0
P1
90H
通道1
P2
A0H
通道2
P3
B0H
通道3
PCON
87H
电源控制及波特率选择
SCON
98H
串行口控制器
SBUF
99H
串行数据缓冲器
TCON
88H
定时器控制
TMOD
89H
定时器方式选择
TL0
8AH
定时器0低8位
TL1
8BH
定时器1低8位
TH0
8CH
定时器0高8位
TH1
8DH
定时器1高8位
特殊功能寄存器
特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51 单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。
MCS-51 有21 个特殊功能寄存器,它们被离散地分布在内部RAM 的80H—FFH 地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。表2 是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。
程序计数器PC(program Counter)
程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC 是一个16 位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC 有自动加1 功能,即完成了一条指令的执行后,其内容自动加1。PC 本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。
累加器ACC(Accumulator)
累加器A 是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A 或AB 累加器对中。大部分的数据操作都会通过累加器A 进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题。提高单片机的软件效率。
寄存器B
在乘除法指令中,乘法指令中的两个操作数分别取自累加器A 和寄存器B,其结果存放于AB 寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B 中。
程序状态字(Program Status Word)
位序
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
位标志
CY
AC
F0
RS1
RS0
OV
-
P
程序状态字是一个8 位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PSW.1 是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:
PSW.7(CY)进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是
在位操作中作累加位使用。
PSW.6(AC)辅助进位标志位,当进行加、减运算时当有低4 位向高4 位进位或借位时,AC 置位,否则被清零。AC 辅助进位位也
常用于十进制调整。
PSW.5(F0)用户标志位,供用户设置的标志位。
PSW.4、PSW.3(RS1 和 RS0)寄存器组选择位。可参见本章的图2 定义。
PSW.2(OV)溢出标志。带符号加减运算中,超出了累加器A 所能表示的符号数有效范围(-128—+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。执行加法指令ADD 时,当位6 向位7 进位,而位7 不向C 进位时,OV=1。或者位6 不向位7 进位,而位7 向C 进位时,同样OV=1。除法指令,乘积超过255 时,OV=1。表面乘积在AB 寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A 中。除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。
PSW.0(P)奇偶校验位。声明累加器A 的奇偶性,每个指令周期都由硬件来置位或清零,若值为1 的位数奇数,则P 置位,否则清零。
数据指针(DPTR)
数据指针为16 位寄存器,编程时,既可以按16 位寄存器来使用,也可以按两个8 位寄存器来使用,即高位字节寄存器DPH 和低位字节DPL。DPTR 主要是用来保存16 位地址,当对64kB 外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:
MOVX A, @DPTR
MOVX @DPTR, A
在访问程序存储器时,DPTR 可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。MOVC A, @A+@DPTR
堆栈指针SP(Stack Pointer)
堆栈是一种数据结构,它是一个8 位寄存器,它指示堆栈顶部在内部RAM 中的位置。系统复位后,SP 的初始值为07H,使得堆栈实际上是从08H 开始的。但我们从RAM 的结构分布中可知,08H—1FH 隶属1—3 工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP 进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH 之间较为适宜。数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出
数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。
那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU 并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。
MCS-51 的堆栈是在RAM 中开辟的,即堆栈要占据一定的RAM 存储单元。同时MCS-51 的堆栈可以由用户设置,SP 的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP 就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU 都是根据SP 指示的地址与相应的RAM 存储单元交换数据。
堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH 指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP 指令,用于子程序完成时,为主程序恢复现场。
I/O 口专用寄存器(P0、P1、P2、P3)
I/O 口寄存器P0、P1、P2 和P3 分别是MCS-51 单片机的四组I/O 口锁存器。MCS-51 单片机并没有专门的I/O 口操作指令,而是把I/O 口也当作一般的寄存器来使用,数据传送都统一使用MOV 指令来进行,这样的好处在于,四组I/O 口还可以当作寄存器直接寻址方式参与其他操作。
定时/计数器(TL0、TH0、TL1 和TH1)
MCS-51 单片机中有两个16 位的定时/计数器T0 和T1,它们由四个8 位寄存器组成的,两个16 位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0 和T1 当作16 位寄存来使用。
定时/计数器方式选择寄存器(TMOD)
TMOD 寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD 可以用字节传送指令设置其内容,但不能位寻址,各位的定义如下,更详细的内容,我们将在《MCS-51 定时器和中断系统》章节中叙述。
表4定时/计数器工作方
位序
D7
D6
D5
D4
D3
D2
D1
D0
位标志
GATE
C/T
M1
M0
GATE
C/T
M1
M0
定时/计数器1
定时/计数器0
串行数据缓冲器(SBUF)
串行数据缓冲器SBUF 用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行。
其他控制寄存器(TMOD)
除了以上我们简述的几个专用寄存外,还有IP、IE、TCO
展开阅读全文