Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
单片机概述所谓单片机,就是把中央处理器 CPU(Central Processing Unit)、随机存取存储器RAM(Random Access Memory)、只读存储器 ROM(Read Only Memory)、定时器/计数器以及I/O(Input/Output)接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微机系统的含义。尽管目前单片机的品种很多,但其中最具有典型性的当属 Intel公司的MCS-51单片机系列。MCS-51是在MCS-48的基础上发展起来的,虽然它仍是 8位单片机,但其功能较MCS-48有很大的增强。此外它还具有品种全、兼容性强、软硬件资料丰富等特点。直到现在MCS-51仍不失为单片机中的主流机型。单片机的主要功能就在于实现计算机控制。概括地可分为两个方面:1)计算机在控制系统中的离线应用。即控制系统的计算机辅助设计(CAD)——常使用微型机或小型机实现
2)计算机在控制系统中的在线应用。即以计算机代替常规的模拟或数字电路——单片机等实现
单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分控制功能,现在已能使用单片机通过软件方法实现了。这种以软件取代硬件并能提高系统性能的控制技术,称之为微控制技术。严格地说,单片机是微型机的一个分类。尽管微型计算机得到了最充分的发展,但微型机在原理和结构上仍和前三代计算机一样,还是属于经典的计算机结构。即一台计算机的硬件系统是由运算器、控制器、存储器、输入和输出设备共五个部分组成——冯诺依曼计算机体系结构。
1.运算器——实现算术和逻辑运算,计算机的数据运算和处理都在这里进行。2.控制器——计算机的指挥控制部件,和运算器一起被称为 CPU。3.存储器——用于存放程序和数据。分为内部和外部存储器。4.输入/输出设备——和存储器一起称为计算机的外部设备。计算机的软件系统包括系统软件(操作系统)、应用软件和程序设计语言三部分。单片机由于硬件支持和需要有限,只使用简单的操作系统程序(监控程序)和汇编语言。MCS-51单片机系列共有十几种芯片。MCS-51系列又分成 51和 52两个子系列,并以芯片型号的最末位数字作为标志。其中 51子系列是基本型,而 52子系列则属于增强型。52子系列功能增强的具体方面有:1)片内 ROM从 4KB增加到 8KB;
2)片内 RAM从 128字节增加到 256字节;3)定时器/计数器从 2个增加到 3个;4)中断源从 5个增加到 6个。
在 52子系列的内部 ROM中以掩膜方式集成有 8K BASIC解释程序(8052-BASIC),这意味着单片机已可以使用高级语言。MCS-51系列单片机采用两种半导体工艺生产:HMOS(高密度短沟道 MOS)工艺和CHMOS(互补金属氧化物HMOS)工艺。上表中凡带有“C”的,为 CHMOS芯片。CHMOS是 CMOS和HMOS的结合,除保持 HMOS高速和高密度的特点外,还具有 CMOS低功耗的特点。MCS-51单片机片内程序存储器有三种配置形式:掩膜 ROM、EPROM和无。此外,由于单片机的应用是面向现场的,因此它具有很强的抗干扰能力,这是任何其它计算机所不及的。MCS-51单片机结构和原理MCS-51单片机系列的典型芯片是 8051,其基本组成如下:
1.中央处理器(CPU)CPU是单片机的核心,完成运算和控制功能。MCS-51的 CPU能处理 8位二进制数或代码。2.内部数据存储器(内部 RAM)8051芯片共有 256个 RAM单元,但后 128个单元被专用寄存器占用,提供给用户使用的只是前 128个单元,用于存放可读写的数据。3.内部程序存储器(内部 ROM)8051共有 4KB掩膜 ROM,用于存放程序、原始数据或表格。4.定时器/计数器8051共有 2个 16位的定时器/计数器,以实现定时或计数功能,并以结果对计算机进行控制。5.并行 I/O口MCS-51共有四个 8位的 I/O口,实现数据的并行输入输出。6.串行口MCS-51单片机有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。该串行口即可作为全双工异步通信收发器使用,也可作为同步移位器使用。7.中断控制系统8051共有 5个中断源:外中断 2个,定时/计数中断 2个,串行中断 1个。8.时钟电路MCS-51芯片的内部有时钟电路,但需要外接晶体和微调电容。系统允许的最高晶振频率为12MHZ。MCS-51是标准的 40引脚双列直插式集成电路芯片。其中:P0.0~P0.7 P0口 8位双向口
P1.0~P1.7 P1口 8位双向口P2.0~P2.7 P2口 8位双向口P3.0~P3.7 P3口 8位双向口ALE 地址锁存控制信号——用于锁存 PO口输出的低 8位地址,以实现低位地址和数据的隔离。此外,ALE可作为外部时钟或外部定时脉冲使用(以晶振六分之一的固定频率输出正脉冲)。PSEN 外部程序存储器(ROM)选通信号——低电平有效,以实现外部 ROM单元的读操作。EA 访问程序存储器控制信号——低电平时,限定 ROM的读操作在外部;高电平是,则从内部 ROM开始读操作,并可延至外部 ROM。RST 复位信号——当输入复位信号延续 2个机器周期以上高电平时即为有效。用以完成初始化操作。XTAL1与XTAL2 外接晶体引线——当使用芯片内部时钟时,用于外接晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VSS 地线VCC +5V电源
P3口的第二功能如下表所示。此外,有内部 EPROM的单片机芯片(如 9751),为写入程
序需提供专门的编程脉冲和编程电源,这些信号也是由引脚的第二功能提供的:编程脉冲:30脚(ALE/PROG);编程电压(25V):31脚(EA/VPP)MCS-51单片机的备用电源也是以第二功能的方式由 9脚(RST/VPD)引入的——当电源发生故障,电压降低到下限值时,备用电源经此端向内部 RAM提供电压,以保护内部RAM中的信息部丢失。对于 9、30和 31引脚,第一功能与第二功能信号时单片机在不同工作方式下的信号,不会发生使用上的冲突。但对 P3口,在实际使用时,都是先按需要选用第二功能信号,剩下的口线才以第一功能作为数据位的输入输出使用。
8051的内部存储器8051单片机的芯片内部有 RAM和 ROM两类存储器。8051的内部 RAM共有 256个单元,通常把这些单元按其功能划分为两部分:低 128单元(地址 00H~7FH)和高 128单元(地址 80H~FFH)。
低 128单元按其用途划分为三个区域:1)寄存器区共有四组通用寄存器,每组 8个寄存单元(8位),各组都以 R0~R7作为寄存器单元的编号。常用于存放操作数及中间结果等。有时也称为工作寄存器,占据内部 RAM的 00H~1FH单元地址。在任一时刻,CPU只能使用其中的一组寄存器,并把正在使用的那组寄存器称之为当前寄存器组。寄存器组的选取由程序状态字寄存器 PSW中的 RS1、RS2位的状态组合来决定。通用寄存器为 CPU提供了就近数据存储的便利,有利于提高单片机的运算速度。同时,使用通用寄存器还能提高程序编制的灵活性。2)位寻址区内部 RAM的 20H~2FH单元,既可以作为一般的 RAM单元使用,进行字节操作,又可以对单元中的每一位进行位操作。位寻址区共有 16个 RAM单元(共 128位),位地址为00H~7FH。MCS-51利用这个位寻址区进行布尔处理机的存储。
3)用户 RAM区内部 RAM 低 128 单元 -通用寄存器 32 单元 -位寻址区 16 单元=80 单元,其地址为30H~7FH。在一般应用中常把堆栈开辟在此区中。高 128单元供给专用寄存器使用(专用寄存器 SFR区),其单元地址为 80H~FFH。8051共有 22个专用寄存器(21个是可字节寻址的)。
其中典型的 5个如下:1)程序计数器(PC-Program Counter)PC是 16位的计数器(寻址范围为 64KB),其内容为将要执行的指令地址。PC有自动加 1功能,从而实现程序的顺序执行。PC无地址(不可寻址),但可通过指令改变其内容。2)累加器(ACC-Accumulator)ACC为 8位寄存器,功能较多,也最为常用。既可用于存放操作数,也可用来存放运算的
中间结果。单片机中的大部分数据操作都是通过 ACC进行的,因此 ACC实际上称为单片机程序运行的“瓶颈”,制约着单片机软件效率的提高。3) B寄存器8位寄存器,主要用于乘除运算,也可作为一般数据寄存器使用。乘法运算时,B为乘数,乘积的高 8位也存于 B中。除法运算时,B为除数,余数也存于 B中。4)程序状态字(PSW-PROGRAM STATUS WORD)8位寄存器,用于寄存程序运行的状态信息。
其中,CY(PSW.7)——进位标志位:存放算术运算的进位标志;在位操作中,作累加位使用,位传送、位与、位或等位操作,操作位之一固定是进位标志位。AC(PSW.6)——辅助进位标志位:加减运算中,当有低 4位向高 4位进位或借位时,AC由硬件置位,否则被清零。F0(PSW.5)——用户标志位:用来控制程序的转向,需要时用软件方法置位或复位。RS1和 RS0(PSW.4和 PSW.3)——寄存器组选择位:用于设定通用寄存器的组号(软件设置)。
OV(PSW.2)——溢出标志位PSW.1保留未用P(PSW.0)——奇偶标志位:表明累加器中数的奇偶性(在每个指令周期由硬件自动进行置位或复位)5)数据指针(DPTR)16位寄存器,编程时,DPTR既可按 16位寄存器使用,也可以按两个 8位寄存器分开使用。即,分成DPH和DPL。DPTR 通常用作访问外部数据存储器时的地址指针(外部数据存储器的寻址范围为64KB)。专用寄存器的字节寻址1)在 22个专用寄存器中,唯一一个不可寻址的专用寄存器是 PC。PC不占据 RAM单元,它在物理上是独立的;
2) 21个可字节寻址的专用寄存器是不连续地分散在内部 RAM高 128单元中。尽管还余有许多空闲地址,但用户不能使用;
3)对专用寄存器只能使用直接寻址方式,编程时既可使用寄存器符号,也可使用寄存器
单元地址。专用寄存器的位寻址在 21个可寻址的专用寄存器中,有 11个是可以位寻址的。
表中凡字节地址不带括号的寄存器都是可进行位寻址的寄存器(全部专用寄存器可寻址的位共 83位),加上位寻址区的 128位,在MCS-51的内部 RAM中共有 128+83=211个可寻址位。
堆栈及堆栈指示器所谓堆栈(一种数据结构)就是只允许在其一端进行数据插入和数据删除操作的线性表。堆栈最大的特点就是“后进先出”(LIFO)。堆栈是为子程序调用和中断操作而设立的。其具体功能有两个:保护断点和保护现场。为了使单片机能进行多级中断嵌套及多重子程序嵌套,还要求堆栈具有足够的容量(或称为足够的堆栈深度)。堆栈的开辟可分为外堆栈和内堆栈。鉴于单片机的特点,因此在单片机中只能采用内堆栈形式(即在 CPU芯片的寄存器中开辟堆栈)。内堆栈的主要优点是操作速度快,但堆栈容量有限。堆栈有两种操作:进栈和出栈。为了指示栈顶地址,要设置堆栈指示器 SP(Stack Pointer),SP的内容就是堆栈栈顶的存储单元地址。由于MCS-51的堆栈设在内部 RAM中,因此 SP是一个 8位专用寄存器。SP可初始化为不同的值(系统复位后,SP的内容为 07H),因此堆栈的位置是浮动的。但堆栈最好在内部 RAM的 30H~7FH单元中开辟,因此在程序设计时,应注意把 SP值初始化位 30H以后。堆栈可有两种类型:向上生长型和向下生长型。
向上生长型堆栈,栈底在低地址单元。随着数据进栈,地址递增,指针上移;反之,随着数据的出栈,地址递减,指针下移。向下生长型堆栈的操作规则与之相反。MSC-51属于向上生长型堆栈,这种堆栈的操作规则如下:进栈操作:先 SP加 1,后写入数据;出栈操作:先读出数据,后 SP减 1。堆栈有两种使用方式:自动方式和指令方式。自动方式无需用户干预,即在调用子程序或中断时,返回地址(断点)自动进栈,程序返回时,断点再自动弹回 PC。指令方式,即使用专用的堆栈操作指令进行进出栈的操作。内部程序存储器(ROM)8051芯片内有 4K的 ROM存储单元(其地址为 0000H~0FFFH)。其中,一组特殊的单元是0000H~0002H。系统复位后,(PC)=0000H,单片机从 0000H单元开始取指令执行程序。如果程序不从 0000H单元开始,则应在这三个单元中存放一条无条件转移指令,以便直接转去执行指定的程序。另一组特殊单元是 0003H~002AH。共 40个单元,这 40个单元被均匀地分为五段,作为五个中断源的中断地址区。其中:
0003H~000AH 代表外部中断 0中断地址区000BH~0012H 代表定时/计数器 0中断地址区0013H~001AH 代表外部中断 1中断地址区001BH~0022H 代表定时/计数器 1中断地址区0023H~002AH 代表串行中断地址区中断响应后,按中断种类,自动转到各中断区的首地址去执行程序。但通常 8个单元难以存下一个完整的中断服务程序,因此往往在中断地址区的首地址处存放一条无条件转移指令以便中断响应后,通过中断地址区,再转移到中断服务程序的实际入口地址。并行输入/输出口电路结构MCS-51共有四个 8位的并行 I/O口,记作 P0~P3。它们已归入专用寄存器,并具有字节和位寻址功能。在单片机中,口(或称为端口)是一个集数据输入缓冲,数据输出驱动及锁存等多项功能为一体的 I/O电路。MCS-51单片机的四个 I/O口都是 8位双向口,它们在结构和特性上基本相同,但又各具特点。P0口既可以作为通用的 I/O口进行数据的输入输出,也可以作为单片机系统的地址/数据线使用。在实际应用中,P0口通常都是作为单片机系统的地址/数据线使用。而当 P0进行一般的输入操作时,由于输出电路是漏极开路的,因此必须外接上拉电阻才能输出高电平;当P0进行一般的输出操作时,必须先向电路中的锁存器写入“1”,使 FET截止,以免锁存器为“0”时对引脚读入的干扰。
P1口通常作为通用 I/O口使用的,无需再外接上拉电阻。当 P1口作为输入口使用时,通用先需向锁存器写入“1”,使输出驱动电路的 FET截止。
P2口与 P0口一样,可作为通用 I/O口使用,但通常是作为高位地址线使用。
P3口为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。
时钟电路与时序为了保证单片机同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。单片机时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。晶体的振荡频率为 1.2MHZ~12MHZ。晶体振荡频率越高,系统时钟频率也越高,单片机运行速度也越快。但快速的运行速度对存储器的运行速度要求高,同时对 PCB板的工艺要求也高(线间寄生电容要小)。因此,MCS-51通常使用振荡频率为 6MHZ的石英晶体,而12MHZ主要用于高速串行通信。
在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲。需注意的是,外接的脉冲信号应当是高低电平持续时间大于 20ns的方波,且脉冲频率应低于 12MHZ。
MCS-51的时序定时单位共有 4个,从小到大依次是:拍节、状态、机器周期和指令周期。拍节(P)定义为振荡脉冲的周期,而经二分频后得到的单片机时钟信号的周期称为状态(S)。即一个状态(S)包含两个拍节(P)。MCS-51采用定时控制方式,因而有固定的机器周期。规定一个机器周期的宽度为 6个状态,共 12个拍节,即机器周期就是振荡脉冲的十二分频。指令周期是指执行一条指令所需要的时间。MCS-51的指令周期根据指令的不同,可包含1~4个机器周期。MCS-51指令时序MCS-51共有 111条指令,全部指令按其长度可分为单字节指令、双字节指令和三字节指令。执行这些指令所需的机器周期数目不同,有以下几种情况:单字节指令单机器周期和单字节指令双机器周期,双字节指令单机器周期和双字节指令双机器周期。三字节的指令都是双机器周期的,单字节中的乘除指令为四机器周期。
图中的ALE信号时为地址锁存而定义的,以振荡脉冲的六分之一频率出现,每有效一次对应单片机进行的一次读指令操作。外部 ROM读时序
外部 RAM读写时序
MCS-51单片机的工作方式MCS-51单片机共有复位、程序执行、单步执行、掉电保护、低功耗以及 EPROM编程和校验等六种工作方式。1. 复位方式复位是单片机的初始化操作,其主要功能是把 PC初始化为 0000H,使单片机从 0000H单元开始执行程序;当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,
也需按复位键以重新启动。除 PC之外,复位操作还对以下一些专用寄存器有影响:
复位操作还对单片机的个别引脚信号有影响,例如使 。RST引脚为复位信号(高电平有效)的输入端,其有效时间应持续 24个振荡脉冲周期以上。
复位操作有上电自动复位和按键手动复位两种方式,按键方式又可分为电平方式和脉冲方式两种。
上述电路图的电阻电容参数适用于 6MHZ晶振——保证复位信号高电平持续时间大于 2个机器周期。2. 程序执行方式该方式是单片机的基本工作方式。3. 单步执行方式即通过外来脉冲控制程序的执行,来一个脉冲(按键一次)就执行一条指令。单步执行是借助单片机的外部中断功能来实现的。MCS-51的中断机制有这样的特点:从中断服务程序返回主程序后,至少要执行一条指令,然后再响应新的中断。4. 掉电保护方式MCS-51设置有掉电保护措施,可对 RAM与寄存器中的程序和数据进行掉电保护处理。其具体作法是,先把有用信息转存,然后再启用备用电源维持供电。所谓信息转存是指当电源故障时,立即将系统的有用信息转存至内部 RAM中保护起来,即通常所说的“掉电中断”。系统需具有备用电源与 VCC电源的自动切换电路,如上上图所示,才能保护转存的信息不被破坏。由于备用电源容量有限,为减少消耗,掉电后时钟电路和 CPU皆停止工作,只维持内部 RAM和专用寄存器工作。当电源 VCC恢复时,STR/VPD端的备用电压还应维持一段时间(约 10ms)。单片机恢复正常工作的第一件事是被保护信息的现场恢复。5. 低功耗方式(80C51)对 HMOS的 8051而言,掉电保护方式实际上就是低功耗方式;而 CHMOS得 80C51有两种低功耗方式:待机和掉电方式。这两种方式都由专用寄存器 PCON(电源控制寄存器)的有关位来控制。
其中SMOD——波特率倍增位,在串行通信是才使用GF0和GF1——通用标志位PD——掉电方式位IDL——待机方式位当 PCON寄存器的 IDL=1,则 80C51进入待机方式。这时 CPU时钟被阻断,但中断功能存在,振荡器仍然向中断逻辑、串行口和定时/计数器电路提供时钟。当 PCON寄存器的 PD=1,则 80C51进入掉电保护方式。此时只有内部 RAM单元的内容被
保存——与 8051不同!另外,其备用电源由VCC端引入。MCS-51指令系统概述一台计算机所能执行的指令集合就是它的指令系统。指令系统是由计算机生产厂商定义的没有通用性。指令系统是学习和使用单片机的基础和工具。单片机应用中主要使用机器语言和汇编语言,而由汇编语言编写的程序没有通用性,无法直接移植。MCS-51单片机指令系统共有 111条指令,分为五大类:1)数据传送类指令(29条)2)算术运算类指令(24条)3)逻辑运算及移位类指令(24条)4)控制转移类指令(17条)5)位操作类指令(17条)一条指令通常由操作码和操作数两部分组成。单片机的指令都是不定长的(变长指令)。在MCS-51指令系统中,共有一字节指令 49条;二字节指令 45条;三字节指令 17条。寻址方式所谓寻址,其实质就是如何确定操作数单元地址的问题。一般而言,寻址方式越多的计算机其寻址能力越强,但指令系统也越复杂。MCS-51共有七种寻址方式:1)寄存器寻址方式寄存器寻址就是操作数在寄存器中,因此制定了寄存器就能得到操作数。典型的如:MOV A, R0 ;把寄存器 R0中的内容(操作数)传送到累加器A中。该寻址方式的寻址范围包括:1.四个寄存器组(共 32个通用寄存器);2.部分专用寄存器。2)直接寻址方式指令中,操作数直接以单元地址的形式给出。典型如:MOV A, 3AH ;把内部 RAM 3AH单元中的数据传送给累加器A。这种寻址方式的寻址范围只限于内部 RAM,即低 128单元+专用寄存器(以单元地址或寄存器符号形式给出)。3)寄存器间接寻址方式寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器的名称前加标志“@”。典型如:MOV A, @R0 ;以 R0寄存器内容 3AH为地址,把该地址单元的内容送入累加器A其寻址范围为:1.内部 RAM低 128单元使用 R0或 R1作为间址寄存器,其通用形式为@RI(I=0或 1)。2.外部 RAM的 64KB使用DPTR作为间址寄存器,其形式为@DPTR。3.外部 RAM的低 256单元除可以使用DPTR作为间址寄存器寻址外,还可使用 R0或 R1(操作码为MOVX)。4.堆栈操作指令
即以堆栈指针 SP作为间址寄存器的间接寻址方式。4)立即寻址方式操作数(立即数)在指令中直接给出。为了与直接寻址指令中的直接地址相区别,在立即数前加标志“#”。典型如:MOV A, #3AH ;把数据 3AH送累加器AMOV DPTR, #DATA16 ;MCS-51指令系统中唯一的一条 16位立即寻址指令5)位寻址方式MCS-51有位处理功能,可以对数据位进行操作,响应地有位寻址方式。典型如:ANL C, 30H ;累加位 C和地址 30H的位进行逻辑与其寻址范围:1.内部 RAM中的位寻址区(单元地址为 20H~2FH,位地址为 00H~7FH)。2.专用寄存器(11个)的可寻址位(80位),可寻址位有四种表示方法:A) 直接使用为地址。如 PSW寄存器的第 5位地址为D5H。B) 位名称表示。如 PSW寄存器的第 5位是 F0。C) 单元地址+位表示。如D0H单元(即 PSW寄存器)的第 5位可表示为D0H.5。D) 专用寄存器符号+位表示。如 PSW寄存器的第 5位可表示位 PSW.5。6)变址寻址方式以 DPTR或 PC作为基址寄存器,以累加器 A作为变址寄存器,并以两者内容相加形成的16位地址作为操作数地址。如:MOVC A, @A+DPTR ;把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A。变址寻址的指令都是一字节指令,且只有三条:MOVC A, @A+DPTRMOVC A, @A+PCJMP @A+DPTR变址寻址方式只能对程序存储器进行寻址,或可说它是专门针对程序存储器的寻址方式。7)相对寻址方式位实现程序的相对转移而设计,把 PC的当前值加上偏移量 REL(8位二进制补码,范围为-128~+127)就构成了程序转移的目的地址。单片机执行指令的过程单片机的工作过程,实际上就是周而复始地取指令和执行指令的过程。在取指令阶段,单片机从程序存储器中取出指令的操作码,送入指令寄存器,再经过指令译码器译码,产生一系列的控制信号,然后进入指令执行阶段,即利用指令译码产生的控制信号,进行本指令规定的数据操作。例 使单片机进行 5+3操作,汇编程序如下:MOV A, #05HADD A, #03HMOV R0, A
汇编程序以指令代码形式存入程序存储器,共占五个存储单元(假设从 8000H单元开始存放)。
首先,程序计数器 PC赋以第一条指令的地址 8000H。开始执行程序,先进入第一条指令的取指令阶段,其操作步骤为:
1) PC的内容作为地址送出;2) PC指向下一存储单元;3)送出的地址选中 8000H单元;4)单片机发出 命令;5)在 命令控制下,将 8000H单元内容(指令的操作码)读出;6)读出的操作码送指令寄存器 IR;7)经指令译码器译码,发出执行本指令所需的各种控制信号。
数据传送类指令单片机的数据传送指令包括寄存器、累加器、RAM单元以及专用寄存器之间的相互数据传送。内部 RAM数据传送指令组1) 立即数传送指令8位立即数传送指令共四条:MOV A, #dataMOV direct, #dataMOV Rn, #data
MOV @Ri, #data16位立即数传送指令:MOV DPTR, #data16 ;将立即数的高 8位送DPH,立即数的低 8位送DPL
2) 内部 RAM单元之间的数据传送指令共五条:MOV direct2, direct1MOV direct, RnMOV Rn, directMOV direct, @RiMOV @Ri, direct内部 RAM单元之间的数据传送可以使用直接、寄存器以及寄存器间接寻址方式。3) 累加器的数据传送指令共有六条:MOV A, RnMOV Rn, AMOV A, directMOV direct, AMOV A, @RiMOV @Ri, A
外部 RAM数据传送指令组4) 使用DPTR进行间接寻址MOVX A, @DPTRMOVX @DPTR, A这两条指令的寻址范围为 64KB
5) 使用 Ri进行间接寻址MOVX A, @RI
MOVX @RI, A由于 RI(I=0,1)是 8位地址指针,因此指令的寻址范围只限于外部 RAM的低 256个单元。外部 RAM的数据传送只能通过累加器A进行。程序存储器(内部程序存储器+外部程序存储器)数据传送指令组程序存储器只能读,不能写,故其数据传输都是单向的,且只能向累加器A传送。共两条:MOVC A, @A+DPTR ;查表范围可达整个程序存储器的 64KB空间MOVC A, @A+PC ;只能在当前指令下面的 256个地址单元内查表这两条指令(通常用于查表操作)都是变址寻址方式,其寻址范围为 64KB。数据交换指令组(主要用于十六进制数或 BCD码的数位交换)6) 正字节交换指令共三条:XCH A, RN
XCH A, DIRECT
XCH A, @RI
7) 半字节交换指令XCHD A, @RI
8) 累加器高低半字节交换指令SWAP A
9) 堆栈操作指令组共两条:PUSH DIRECT ;进栈指令POP DIRECT ;出栈指令堆栈操作实际上是通过堆栈指示器 SP进行的间接寻址读写操作。
数据传输类指令不影响 PSW位的状态算术运算类指令MCS-51指令系统中只有 8位数而没有 16位数的运算指令。加法指令组共四条:ADD A, RN
ADD A, DIRECT
ADD A, @RI
ADD A, #DATA
加法运算影响 PSW为的状态。若位 3有进位,则AC=1;若位 7有进位,则 CY=1;若带符号数相加有溢出,则OV=1。带进位加法指令组——常用于多字节数的加法运算共四条:ADDC A, RN
ADDC A, DIRECT
ADDC A, @RI
ADDC A, #DATA
带借位减法指令组共四条:SUBB A, RN
SUBB A, DIRECT
SUBB A, @RI
SUBB A, #DATA
减法运算只有带借位减法指令(影响 PSW位)。若需进行不带借位的减法运算,只需把进位标志位清 0
加 1指令组共五条:INC AINC RN
INC DIRECT
INC @RI
INC DPTR这些指令操作不影响程序状态字 PSW。减 1指令组共四条:DEC ADEC RN
DEC DIRECT
DEC @RI
这些指令操作不影响 PSW位。乘除指令组乘除指令时整个指令系统中执行时间最长的指令(需要四个机器周期)。MUL AB ;累加器 A和寄存器 B中的两个无符号 8位数相乘,所得 16位乘积的低 8位放入A,高 8位放入 BDIV AB;累加器 A(被除数)和寄存器 B(除数)中的两个无符号 8位数相除,所得商放入A,余数放入 B除法运算影响 PSW位的状态。CY总是被清 0;OV除 B=0(除数为 0)之外,都被清 0
十进制调整指令该指令是一条专用指令,用于对 BCD码时间值数加法运算的结果进行修正。修正方法分为三种情况:
1. 累加器低 4位大于 9或AC=1;低位+06H修正2. 累加器高 4位大于 9或 CY=1;高位+60H修正3. 累加器高 4位为 9,低 4位大于 9;高位+60H修正指令操作通过逻辑电路实现,具体格式为:DA A
逻辑运算及位移类指令逻辑“与”运算指令组共六条:ANL A, RN
ANL A, DIRECT
ANL A, @RI
ANL A, #DATA
ANL DIRECT, AANL DIRECT, #DATA
逻辑“或”运算指令组共六条:ORL A, RN
ORL A, DIRECT
ORL A, @RI
ORL A, #DATA
ORL DIRECT, AORL DIRECT, #DATA
逻辑“异或”运算指令组
共六条:XRL A, RN
XRL A, DIRECT
XRL A, @RI
XRL A, #DATA
XRL DIRECT, AXRL DIRECT, #DATA
累加器清 0取反指令组CLR A ;累加器清 0CPL A ;累加器取反移位指令组MCS-51的移位指令只能对累加器A进行操作。共四条:RL A ;循环左移RR A ;循环右移RLC A ;带进位循环左移RRC A ;带进位循环右移
控制转移类指令控制转移类指令的基本功能是通过强迫改变 PC值来实现的。可分成无条件转移和有条件转移两类。
无条件转移指令组共四条:LJMP addr16 ;长转移指令(三字节指令),其转移范围可达 64KBAJMP addr11 ;绝对转移指令(两字节指令),以指令提供的 11位地址去替换 PC的低 11位内容,形成的新 PC值即转移的目的地址SJMP rel ;短转移指令,目的地址=(PC)+2+rel,其中 rel是一个带符号的 8位二进制补码,因此当 rel为正时向前转移;为负时向后转移JMP @A+DPTR ;变址寻址转移指令,以 DPTR的内容为基址,A的内容作为变址,可实现程序的多分支转移条件转移指令组1)累加器判零转移指令(两字节指令)
2)数值比较转移指令共四条:(三字节指令)CJNE A, #data, relCJNE A, direct ,relCJNE Rn, #data, relCJNE @Ri, #data, rel ;内部 RAM前 128单元与立即数不相等,则转换3)减 1条件转移指令——主要用于控制程序循环共两条:DJNZ Rn, rel ;两字节指令,寄存器内容减 1,若不为 0则转移DJNZ direct ,rel ;三字节指令,直接寻址单元内容减 1,若不为 0则转移子程序调用与返回指令组子程序调用指令共两条:用于断点保护和构造目的地址ACALL addr11 ;绝对调用指令(两字节指令),其操作内容可表示为:
LCALL addr16 ;长调用指令(三字节指令),其操作内容可表示为:
返回指令组共两条:RET ;子程序返回指令,其操作内容可表示为:
RET1 ;中断服务子程序返回指令,除具有子程序返回指令的全部功能外,还有清楚中断响应时置位的优先级状态,开放低级中断和恢复中断逻辑等功能空操作指令(单字节指令)NOP ;控制 CPU不作任何操作,只消耗一个机器周期,由于程序的等待或时间延时
布尔变量操作类指令硬件上,MCS-51内有一个布尔处理机(一位的微处理器),它以进位标志作为累加位,以内部 RAM位寻址区的 128个可寻址位作为存储位。软件上,包括:1)位传送指令组共两条:
MOV CY ,BIT
MOV BIT ,CYCY位作为中间变量,实现两个可寻址位之间的位传送2)位置位复位指令组共四条:CLR CY ;清零CLR BIT
SETB CY ;置 1SETB BIT
3)位运算指令组共六条:ANL CY ,BIT ;位“与”ANL CY ,/BIT
ORL CY ,BIT ;位“或”ORL CY ,/BIT
CPL CY ;位“非”CPL BIT
4)位控制转移指令组1.以 CY状态为条件的转移指令(两字节指令)共两条:
2.以位状态为条件的转移指令(三字节指令)共三条:JB bit ,rel ;位状态为 1,则转移JNB bit ,rel ;位状态为 0,则转移JBC bit ,rel ;位状态为 1,则转移并使该位清 0
存储器与存储器扩展单片机的扩展结构单片机扩展通常采用总线结构形式。该结构可以大大减少单片机系统中传输线数目,提高系统的可靠性,增强系统的灵活性。所谓总线,就是连接系统中各扩展部件的一组公共信号线。按其功能通常把系统总线
分为地址总线、数据总线和控制总线。其中:地址总线(AB)用于传送单片机送出的地址信号,以便进行存储单元和 IO端口的选择。只能由单片机向外发出(单向传输)。地址总线的数目决定可直接访问的存储单元的数目,MCS-51存储器扩展最多可达 64KB,因此最多需 16位地址。数据总线(DB)用于在单片机和存储器之间或者单片机与 IO口之间传送数据(双向传输)。数据总线的位数与单片机处理数据的字长一致,MCS-51的数据总线为 8位。控制总线(CB)是一组控制信号线,单根信号线是单向的,但不同方向的控制信号线可实现双向传输(单片机给部件,部件给单片机)。
单片机扩展的实现单片机芯片本身没有提供专用的地址和数据线,需借用它的 IO口线改造,因此单片机扩展的首要问题就是构造系统总线。具体构造方法如下:1)以 P0口的 8位口线作为地址/数据线2)以 P2口的口线作为高位地址线3)控制信号
扩展存储器编址及映像存储器编址,就是使用系统提供的地址线,通过适当地连接,最终达到一个编址唯一对应存储器中一个单元的目的。存储编址分两个层次:存储芯片的选择和芯片内部存
储单元的选择。存储器映像则研究各部分存储器在整个存储空间中所占据的地址范围,以便为存储器的使用提供依据。存储器编址存储器编址主要是研究芯片的选择问题,芯片的选择共有两种方法:线选法和译码法。1)线选法直接以系统的地址位作为存储芯片的片选信号。这种编址方法对存储空间的使用是断续的,不能充分有效地利用存储空间,扩充存储容量受限,只适用于小规模系统的存储器扩展。
译码法使用译码器对系统的高位地址进行译码,以其译码输出作为存储芯片的片选信号。这种方法能有效地利用存储空间,适用于大容量、多芯片存储器的扩展。程序存储器扩展程序存储器扩展使用只读存储器 ROM芯片。ROM存储器是根据内部MOS管阵列的通断来存储二进制信息的,根据编程方式(编程控制MOS管阵列的状态)的不同,ROM共分为三种:1)掩膜 ROM其编程是在生产过程中,以掩膜工艺实现的。这种 ROM芯片存储结构简单,集成度高,但工艺成本较高,只适于大批量生产。2)可编程 ROM(PROM)其程序是在由用户写入的(只能写一次,不能再修改)。3)可改写 ROM(EPROM)其程序由用户写入,允许反复擦出。按擦出方式不同又可分为 EPROM(紫外线擦出)和EEPROM(电擦除)。
数据存储器扩展数据存储器就是随机存储器 RAM。RAM可进行读写操作,但其断电后存储的信息会立即消失。按其工作方式可分为静态 RAM(SRAM)和动态 RAM(DRAM)两种。动态 RAM集成密度大,功耗低,价格便宜,但需要增加刷新电路,因此在单片机系统中很少使用。
扩展既可读又可写的程序存储器在单片机中,程序存储器和数据存储器是截然不同的,它们使用不同的片选信号,通过不同的指令进行操作。但不同的存储形式会给程序调试带来困难,ROM中的程序只能运行,而 RAM中的程序虽然可修改但不能运行。为解决这一矛盾,可把 RAM经过连接充作 ROM使用,使之既可运行程序,又可修改程序。
单片机存储器的特点单片机存储器比一般微型机存储器复杂,其具体表现就是多种存储器的交叠。为区分四种存储空间,使之不发生混淆,可通过硬件和软件两种措施。硬件措施是指对不同的存储空间使用不同的控制信号;软件措施指通过不同的指令访问不同的存储空间。交叠存储器的使用1)内部 ROM与 RAM的区分通过指令区分,ROM使用“MOVC”;RAM使用“MOV”。
2)外部 ROM与 RAM的区分通过指令区分,ROM使用“MOVC”;RAM使用“MOVX”。此外,两者有不同的选通信号,PSEN作为 ROM的选通信号;RD和WR作为 RAM的选通信号。3)内外 RAM的区分通过指令区分。4)内外 ROM的区分单片机的内外 ROM是统一编址的,对于像 8051这样有内部 ROM的单片机,应使 EA(访问内外 ROM控制)=1。但这样外部的 0000H~0FFFH(4KB存储空间)就被损失了。
中断与定时中断技术就是解决资源竞争的可行办法,采用中断方法可以使多项任务共享一个资源,所以中断技术实质上就是一种资源共享技术。中断功能1)实现 CPU与外设的速度配合由于许多外设速度较慢,无法与 CPU进行直接的同步数据交换,为此可通过中断方法来实现 CPU与外设的协调工作。采用中断技术,不但能实现主机和一台外设并行工作,而且还可以实现主机和多台外设并行工作。这样不但提高了 CPU的利用率,也提高了数据的输入/输出效率。2)实现实时控制
在自动控制系统中,各控制参量可能随机地在任何时刻向计算机发出请求,要求进行某种处理,对此,CPU必须作出快速响应和及时处理。这种实时处理功能只能靠中断技术才能实现。3)实现故障的及时发现系统在运行过程中,常会突然发生一些事先无法预料的故障,有了中断技术,计算机就能对这些故障及时发现并进行自动处理。4)实现人机联系现代计算机交互只能先通过键盘发出中断请求,在获得机器准许后,方可进行干预。中断处理流程
1)现场保护与恢复为了使中断服务程序的执行不破坏 CPU中寄存器或存储单元的原有内容,因此要把 CPU中有关寄存器或存储单元的内容推入堆栈中进行保护(现场保护)。中断结束后,在返回主程序前,则需把保存的现场内容从堆栈中弹出,以恢复寄存器或存储单元的原有内容(现场恢复)。
2)开中断和关中断在中断处理进行的过程中可能又有新的中断请求到来,但现场保护和恢复的操作是不允许打扰的,否则就会造成原有内容的破坏。为此在进行现场保护和恢复要先关闭中断系统,待现场保护和恢复完成后,使用系统的中断嵌套功能,再开放中断系统。3)中断服务程序任何中断都要转去执行中断服务程序(子程序),进行中断服务。4)中断返回返回主程序是通过一条专用的中断返回指令完成的,因此这条指令必然是中断服务程序的最后一条指令。MCS-51中断系统中断源MCS-51是一个多中断源的单片机,有三类共五个中断源,分别称为外部中断(两个)、定时中断(两个)和串行中断(一个)。1)外中断类外中断是由外部原因引起的,共有两个中断源,即外部中断 0和外部中断 1。它们的中断请求信号分别由引脚 INT0(P3,2)和 INT1(P3,3)引入。外部中断请求有电平方式和脉冲方式两种信号方式。可通过有关控制位的定义进行规定。电平方式为低电平有效,只要在单片机中断请求引入端口上采样到有效地低电平时,就可激活外部中断。脉冲方式是脉冲的后沿负跳有效。在这种中断请求方式下,中断请求信号的高电平和低电平状态都应至少维持一个机器周期,以确保电平变化能被单片机采样。2)定时中断类这种中断请求是在芯片内部发生的,因此无需再芯片上设置引入端。当计数结构发生溢出时,就以计数溢出信号作为中断请求。3)串行中断类每当串行口接受或发送完一组串行数据时,就产生一个中断请求,因此不需在芯片上设置引入端。中断控制与中断控制有关的寄存器共有四个,即定时器控制寄存器、中断允许控制寄存器、中断优先控制寄存器以及串行口控制寄存器。均为专用寄存器。1)定时器控制寄存器(TCON)该存储器地址 88H,位地址 8FH~88H。其内容如下:
该寄存器既有定时器/计数器的控制功能,又有中断控制功能,与中断有关的控制位共六位:IE0(IE1)——外中断请求标志位IT0(IT1)——外中断请求信号方式控制位
TF0(TF1)——计数溢出标志位2)串行口控制寄存器(SCON)该寄存器地址 98H,位地址 9FH~98H。其内容如下:
其中与中断有关的控制位共两位:TI——串行口发送中断请求标志位RI——串行口接收中断请求标志位3)中断允许控制寄存器(IE)该寄存器地址A8H,位地址AFH~A8H。其内容如下:
其中与中断有关的控制位共六位:EA——中断允许总控制位EX0(EX1)——外部中断允许控制位ET0(ET1)——定时/计数中断允许控制位ES——串行中断允许控制位MCS-51通过中断允许控制寄存器对中断实行两级控制。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应使用有关指令禁止中断(软件关闭)。4)中断优先级控制寄存器(IP)该寄存器地址 B8H,位地址为 BFH~B8H。其内容如下:
其中:PX0——外部中断 0优先级设定位PT0——定时中断 0优先级设定位PX1——外部中断 1优先级设定位PT1——定时中断 1优先级设定位PS——串行中断优先级设定位中断优先级是为中断嵌套服务的,MCS-51中断优先级的控制原则是:1.高优先级中断请求可以打断低优先级中断请求;但反之则不行。2.若一个中断请求已被响应,则同级的其它中断响应将被禁止。3.若同级的多个中断请求同时出现,则 CPU按外部中断 0→定时中断 0→外部中断 1→定时中断 1→串行中断。
这四个中断控制寄存器都是既可以进行字节寻址又可进行位寻址的,因此对位状态的设置既可以使用字节操作指令,又可以使用位操作指令。
中断响应中断响应就是单片机 CPU对中断源提出中断请求的接受。MCS-51的整个中断响应过程可分为以下几个问题:1)外部中断请求采样外部中断请求采样的实质就是如何识别外部中断请求信号,并把它锁定在定时器控制寄存器(TCON)的相应标志位中。CPU在每个机器周期的 S5P2对中断请求引脚 INT0(P3.2)和 INT1(P3.3)进行采样。对于电平方式的外中断请求,若采样为高电平,表明没有中断请求;若为低电平,则中断请求有效,IE0或 IE1置 1(中断请求信号反相锁定)。对于脉冲方式的外中断请求,若在两个相邻机器周期采样到的是先高后低(电平),则中断请求有效;否则 IE0或 IE1继续为 0。可见,在该方式下,中断请求脉冲高低电平的持续时间应在 12个晶振周期以上,以保证中断请求有效。除外部中断之外,其它中断源的中断请求都发生在单片机芯片内部,可以直接置位相应的中断请求标志位,因此不存在中断请求采样问题。
2)中断查询与响应MCS-51在每个机器周期的最后一个状态 S6,按前述优先级顺序对中断请求标志位进行查询。若查询到有标志位为 1,则表明有中断请求发生,因此就从紧接着的下一个机器周期 S1状态开始进行中断相应。中断响应的主要内容就是由硬件自动生成长调用指令 LCALL ADDR16,作为相应中断区的入口地址。各中断区只有 8个单元,通常难以安排一个完整的中断服务程序,因此总是在各中断区入口地址处放置一条无条件转移指令。但当存在下列情况之一时,将封锁 LCALL指令,不予执行:
1. CPU正处在为某一同级或高级的中断服务中。2.查询中断请求的机器周期不是当前指令的最后一个周期。3.按MCS-51中断系统的特定规定,在执行完返回指令(RET, RETI)后,还应再继续执行一条指令,才能响应中断。
3)中断响应时间指从查询中断请求标志位到转向中断区入口地址所需的机器周期数。MCS-51最短响应时间为三个机器周期(一个查询机器周期+两个 LCALL指令执行机器周期);中断响应的最长时间为八个机器周期。当然,若出现有同级或高级中断正在响应或服务中需等待的时候,那么响应时间就无法计算了。中断请求的撤出中断响应后,TCON或 SCON中的中断请求标志应及时清除。其撤出方法主要有:1)定时中断硬件自动撤出定时中断响应后,硬件自动把标志位(TF0或 TF1)清 0
2)外部中断自动与强制撤出对于脉冲请求方式,在中断响应后同样通过硬件自动地把标志位清 0;但对于电平请求方式,还需在中断响应后把中断请求输入端从低电平强制改为高电平。可通过D触发器的直接置位端 SD实现,当中断响应后 P1.0输出低电平使Q为高电平输出。
3)串行中断软件撤出在中断响应后,还需判断串行中断标志位 TI和 RI的状态。MCS-51定时器/计数器定时方法概述在单片机应用中,可供选择的定时方法有:1)软件定时通过执行循环程序以进行时间延迟,软件定时时间精确,无需外加电路,但会增加 CPU开销,因此不宜长时间定时使用,而且受条件影响。2)硬件定时不占 CPU,适宜长时间定时使用,但需改变硬件参数来调节定时时间,在使用上不灵活。
3)可编程定时器定时通过对系统时钟脉冲的计数来实现的。使用灵活、方便,并兼有计数功能。定时器/计数器的定时和计数功能MCS-51 单片机共有两个可编程的定时 /计数器,都是十六位加法计数结构,分别由TH0、TL0和 TH1、TH1四个 8位计数器组成。计数功能计数指对外部事件(输入脉冲)进行计数。MCS-51 的两个计数器分别以 T0(P3.4)和T1(P3.5)管脚作为计数器的输入端。外部输入脉冲在负跳变沿有效(计数器加 1)。在下一个机器周期的 S3P1进行计数,鉴于此,计数脉冲的频率不能高于振荡脉冲频率的 1/24。定时功能此时的计数脉冲来自单片机内部。每个机器周期产生一个计数脉冲,即计数频率为振荡频率的 1/12。定时器/计数器的控制寄存器
1)定时器控制寄存器(TCON)2)工作方式控制寄存器(TMOD)3)中断允许寄存器(IE)
定时器/计数器工作方式MCS-51的定时器/计数器共有四种工作方式:1)定时工作方式 0此时,计数器由 TH的 8位和 TL的低 5位构成。当 TL的低 5位计数溢出时,向 TH进位,而全部 13位计数溢出时,则向计数溢出标志位 TF0进位。
2)定时工作方式 1逻辑结构与定时工作方式 0完全相同,此时,计数器由 TH和 TL全部 16位构成。3)定时工作方式 2(自动重新加载工作方式)工作方式 0和 1的最大特点是计数溢出后,计数器为全 0(软件自动清 0)。因此不便于循环定时或循环计数应用。方式 2就是针对此问题而设置的。在这种工作方式下,TL作为计数器,TH作为预置寄存器。
初始化时把计数初值分别装入 TL和 TH中。当计数器溢出后(最大计数为 255),由预置寄存器 TH以硬件方法自动给计数器 TL重新加载。
4)定时工作方式 3定时工作方式 0、1和 2对两个定时器/计数器的设置和使用是完全相同的,但在工作方式 3下,两个定时器/计数器的设置和使用是不同的。1.工作方式 3下的定时器/计数器 0此时,定时器/计数器 0被拆成两个独立的 8位计数器 TL0和 TH0。其中,TL0独占定时器/计数器 0的控制位和全部引脚信号,其功能和操作与方式 0(或 1)完全相同。而 TH0只能作为简单的定时器使用(无计数器功能),并借用定时器/计数器 1的控制位 TR1(定时启动和停止)和 TF1(计数溢出)。
2.工作方式 3下的定时器/计数器 1由于运行控制位 TR1和计数溢出标志位 TF1已被定时器/计数器 0借用,故定时器/计数器 1不能在方式 3下使用,若硬把它设置为方式 3,就会停止工作。此时,定时器/计数器 1通常作为串行口的波特率发生器使用,以确定串口通信的速率。
用定时器/计数器进行外部中断扩展定时器/计数器实现外部中断扩展的方法即是在技术工作方式下,把计数器值为全 1,此时,只要在技术输入端加一个脉冲,就可以使计数器溢出,产生计数溢出中断。具体实现为:1)置定时器/计数器为工作方式 2;2)高低 8位计数器均予置为 FFH;3)扩展的外部中断请求信号接计数器输入端;4)把扩展外中断服务程序按所用的定时器/计数器中断入口地址存放。