地址锁存器

由于MCS-51单片机的P0口是分时复用的地址/数据总线,因此在进行程序存储器扩展时,必须利用地址锁存器将信号从地址/数据总线中分离开来。

常用的地址锁存器是:


74LS373

地址锁存器--74LS373

74LS373.bmp (48466 字节)

74LS373是带有三态门的八D锁存器，当使能信号线OE为低电平时，三态门处于导通状态，允许1Q-8Q输出到OUT1-OUT8，当OE端为高电平时，输出三态门断开，输出线OUT1-OUT8处于浮空状态。G称为数据打入线，当74LS373用作地址锁存器时，首先应使三态门的使能信号OE为低电平，这时，当G端输入端为高电平时，锁存器输出（1Q-8Q）状态和输入端（1D-8D）状态相同；当G端从高电平返回到低电平（下降沿）时，输入端（1D-8D）的数据锁入1Q-8Q的八位锁存器中。

当用74LS373作为地址锁存器时，它们的G端可直接与单片机的锁存控制信号端ALE相连，在ALE下降沿进行地址锁存.

参见: 8282 74LS273


8282

地址锁存器--8282

8282.jpg (6083 字节) 8282是带有三态门的八D锁存器，当使能信号线OE为低电平时，三态门处于导通状态，允许1Q-8Q输出到OUT1-OUT8，当OE端为高电平时，输出三态门断开，输出线OUT1-OUT8处于浮空状态。

当用8282作为地址锁存器时，它的STB可直接与单片机的锁存控制信号端ALE相连，在ALE下降沿进行地址锁存。

参见: 74LS373 74LS273


74ls273

地址锁存器--74LS273

74ls273.bmp (68694 字节) 74LS273是带清除端的八D触发器，只有清除端为高电平时才具有锁存功能，锁存控制端为11脚CLK，在上升沿锁存。单片机的ALE端输出的锁存控制信号必须经反相器后才能连到74LS273的CLK端，以满足CLK在上升沿锁存的要求。

参见: 74LS373 8282


存储器扩展

MCS-51的程序存储器寻址空间为64k字节(0000H--FFFFH),其中8051、8751片内涵有4K字节的ROM或EPROM，8031片内部不带ROM。当片内ROM不够用或采用8031芯片时，需扩展程序存储器。MCS-51单片机访问外部程序存储器所使用的控制信号有：
ALE：低8位地址锁存控制；
PSEN：外部程序存储器“读取”控制。

常用的程序存储器有：
EPROM： 2716 2732 2764 27128 27256
EEPROM：2817 2864

MCS-51的数据存储器寻址空间为64k字节(0000H--FFFFH)。而8031单片机内部只有128个字节的RAM存储器。数据存储器只使用WR、RD控制线。

常用的数据存储器有：
静态RAM：6116 6264
动态RAM：2186


EPROM-2764

EPROM--2764

2764.jpg (9385 字节) 2764是8K*8字节的紫外线镲除、电可编程只读存储器，单一+5V供电，工作电流为75mA，维持电流为35mA，读出时间最大为250nS，28脚双列直插式封装。各引脚的含义为：

A0-A12为13根地址线，可寻址8K字节；O0-O7为数据输出线；CE为片选线；OE为数据输出选通线；PGM为编程脉冲输入端；Vpp是编程电源；Vcc是主电源。

参见： 27256 返回


EPROM-27256

EPROM--27256

27256.jpg (9978 字节)

27256是32K*8字节的紫外线镲除、电可编程只读存储器，单一+5V供电，工作电流为100mA，维持电流为40mA，读出时间最大为250nS，28脚双列直插式封装。各引脚的含义为：

A0-A15为16根地址线，可寻址32K字节；O0-O7为数据输出线；CE为片选线；OE/Vpp为数据输出选通线/编程电源。

参见： 2764 返回


静态RAM-6116

静态RAM--6116

6116.jpg (9654 字节) 6116是2K*8位静态随机存储器芯片,采用CMOS工艺制造,单一+5V供电,额定功耗160mW,典型存取时间200ns,24线双列直插式封装.

各引脚含义如下:
A0-A10为地址线;CE是片选线;OE是读允许线;WE是写允许线.

6116的操作方式如下:
CE | OE | WE | 方式 | D0-D7
H | * | * | 未选中 | 高阻
L | L | H | 读 | Dout
L | H | L | 写 | Din
L | L | L | 写 | Din

参见: 6264 返回


静态RAM-6264

静态RAM--6264

6264.jpg (7366 字节)

6264是8K*8位静态随机存储器芯片,采用CMOS工艺制造,单一+5V供电,额定功耗200mW,典型存取时间200ns,28线双列直插式封装.

各引脚含义如下:
A0-A12为地址线;CE是片选线;OE是读允许线;WE是写允许线.

6264的操作方式如下:

CE1 | CE2 | OE | WE | 方式 | D0-D7
H | * | * | * | 未选中 | 高阻
* | L | * | * | 未选中 | 高阻
L | H | H | H | 输出禁止 | 高阻
L | H | L | H | 读 | Dout
L | H | H | L | 写 | Din
L | H | L | L | 写 | Din

参见: 6116 返回


8255A

8255A是Intel公司生产的可编程输入输出接口芯片,它具有3个8位的并行I/O口(参见引脚图),具有三种工作方式,可通过程序改变其功能,因而使用灵活,通用性强,可作为单片机与多种外围设备连接时的中间接口电路。

8255有三种基本工作方式:

方式0(Mode 0):基本输入输出
方式1(Mode 1):选通输入输出
方式2(Mode 2):双向传送

三种工作方式由工作方式控制字决定,方式控制字由CPU通过输入/输出指令来提供.三个端口中C口被分为两个部分,上半部分随A口称为A组,下半部分随B口称为B组.其中A口可工作与方式0、1和2，而B口只能工作在方式0和1。


8255引脚及控制逻辑

8255.jpg (16530 字节) 8255共有40个引脚,采用双列直插式封装,各引脚功能如下:

D0--D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS：片选信号线，低电平有效，表示芯片被选中。
RD：读出信号线，低电平有效，控制数据的读出。
WR：写入信号线，低电平有效，控制数据的写入。
Vcc：+5V电源。
PA0--PA7：A口输入/输出线。
PB0--PB7：B口输入/输出线。
PC0--PC7：C口输入/输出线。
RESET：复位信号线。
A1、A0：地址线，用来选择8255内部端口。
GND：地线。

其控制逻辑为:

A1 | A0 | RD | WR | CS | 工作状态
0 | 0 | 0 | 1 | 0 | A口数据-->数据总线
0 | 1 | 0 | 1 | 0 | B口数据-->数据总线
1 | 0 | 0 | 1 | 0 | C口数据-->数据总线
0 | 0 | 1 | 0 | 0 | 总线数据-->A口
0 | 1 | 1 | 0 | 0 | 总线数据-->B口
1 | 0 | 1 | 0 | 0 | 总线数据-->C口
1 | 1 | 1 | 0 | 0 | 总线数据-->控制字寄存器
* | * | * | * | 1 | 数据总线-->三态
1 | 1 | 0 | 1 | 0 | 非法状态
* | * | 1 | 1 | 0 | 数据总线-->三态


8255内部结构

8255内部包括三个并行数据输入/输出端口，两个工作方式控制电路，一个读/写控制逻辑电路和8位总线缓冲器。各部分功能概括如下：

（1）端口A、B、C
A口：是一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。
B口：是一个8位数据输入/输出锁存器/缓冲器和一个8位数据输入锁存器。
C口：是一个8位数据输出锁存器/缓冲器和一个8位数据输入缓冲器（输入不锁存）。
通常A口、B口作为数据输入/输出端口。C口作为控制/状态信息端口，它在“方式控制字”的控制下可分为两个4位端口，每个端口有一个4位锁存器，分别与A口、B口配合使用，作为控制信号输出或状态信息输入端口。

（2）工作方式控制电路
工作方式控制电路有两个，一个是A组控制电路，另一个是B组控制电路。这两组控制电路具有一个控制命令寄存器，用来接受中央处理器发来的控制字，以决定两组端口的工作方式，也可根据控制字的要求对C口按位清“0”或者按位置“1”。
A组控制电路用来控制A口和C口的上半部分（PC7-PC4）。B组控制电路用来控制B口和C口的下半部分（PC3-PC0）。

（3）总线数据缓冲器
总线数据缓冲器是一个三态双向8位缓冲器，作为8255与系统总线之间的接口，用来传送数据、指令、控制命令以及外部状态信息。

（4）读/写控制逻辑电路
读/写控制逻辑电路接受CPU发来的控制信号RD、WR、RESET、地址信号A1-A0等，然后根据控制信号的要求，将端口数据读出，发往CPU，或者将CPU送来的数据写入端口。


8255工作方式控制字

工作方式控制字

D0 | 端口C(下半部) 1:输入 0:输出 | B组
D1 | 端口B 1:输入 0:输出
D2 | 方式选择 0:方式0 1:方式1
D3 | 端口C(上半部) 1:输入 0:输出 | A组
D4 | 端口A 1:输入 0:输出
D5D6 | 方式选择 00:方式0 10:方式1 *1:方式2
D7 | 置方式标志 1:有效 |

C口按位操作控制字:

D0 | 位:置位/复位 1:置位 0:复位
D3D2D1
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111
CO | C1 | C2 | C3 | C4 | C5 | C6 | C7
D4 | 无关
D5
D6
D7 | 位:置位/复位标志 0:有效


8255工作方式0

工作方式0:

工作方式0是一种基本的输入/输出工作方式,在这种方式下,三个端口都可以由程序设置为输入或输出,没有固定的用于应答的联络信号.其基本的功能可概括如下:

1、可具有两个8位端口（A、B）和两个4位端口（C口的上半部分和下半部分）。
2、任何一个端口都可以设定为输入或者输出，各端口的输入、输出可构成16种组合。
3、数据输出时可以锁存，输出时不锁存。

按照方式0工作时，CPU可以通过简单的传送指令对人以一个端口进行读/写，这样各端口就可以作为查询式输入/输出接口。按照查询方式工作时， A口、B口可作为两个数据输入/输出端口，C口的某些位可作为这两个端口的控制/状态信号端。


8255工作方式1

工作方式1

工作方式1是一种选通式输入/输出工作方式。在这种工作方式下，选通信好于输入/输出数据一起传送，由选通信号对数据进行选通。其基本功能可概括如下：

1、三个端口分为两组，即A组和B组。
2、每一组包括一个8位数据端口和一个4位的控制/状态端口。
3、每一个8位数据端口均可设置为输入或者输出，输入端均可锁存。
4、4位端口作为8位数据端口的控制/状态信号端口。

方式1输入:
当任何一个端口按照工作方式1输入时,控制联络信号如图所示:

I1A.jpg (7343 字节) | I1A1.jpg (7182 字节)
I1B.jpg (5740 字节) | I1B1.jpg (6620 字节)

各控制信号的功能如下:
STB:选通输入,低电平有效.是由外设送来的输入信号,用来将输入数据送入输入锁存器:
IBF:输入缓冲器满信号,高电平有效,表示数据已送入输入锁存器,它由STB信号的下降沿置位,由RD信号的上升沿复位.
INTR:中断请求信号,高电平有效,由8255输出,向CPU发中断请求.发中断请求的条件是STB、IBF、INTE（中断允许）为高电平。中断请求信号由RD的下降沿复位。
INTE A：A口中断允许信号，由PC4的置位/复位来控制，INTE B由PC2的置位/复位来控制。

方式1输出：
当任何一个端口按照工作方式1输入时,控制联络信号如图所示:

O1A.jpg (9229 字节) | O1A1.jpg (9127 字节)
O1B.jpg (6982 字节) | O1B1.jpg (6753 字节)

各控制信号的功能如下:
OBF：输出缓冲器满信号,低电平有效，是8255输出给外围设备的联络信号。表示CPU已把输出数据送到指定端口，外设可以把数据取走。它由WR信号的上升沿置“0”（有效），由ACK信号的下降沿置“1”（无效）。
ACK：外设响应信号，低电平有效。表示CPU输出给8255的数据已由外设取走。
INTR：中断请求信号，高电平有效。表示数据已被外设取走，请求CPU继续输出数据。中断请求的条件是ACK、OBF和INTE（中断允许）为高电平，中断请求信号由WR的下降沿复位。
INTE A：由PC6的置位/复位来控制。
INTE B：由PC2的置位/复位来控制。


8255工作方式2

工作方式2：

A口除了工作方式0、1之外，还有工作方式2。按照方式2工作时，A口称为双向数据总线端口，既可以发送数据，又可以接收数据。其主要功能可概括如下：

1、有一个8为双向数据输入/输出端口（A）和一个5位控制信号端口（C）。
2、输入、输出均可锁存。
3、5位控制信号端口（C）作为8位双向数据输入/输出端口A的控制/状态信号端口。
4、工作方式2只适合于A口。

按照工作方式2工作时,A口既可工作于查询方式,又可工作于中断方式.其控制联络信号如图所示:

2A.jpg (9384 字节) 2A1.jpg (10540 字节)

各控制信号功能如下:
INTR:中断请求信号,高电平有效.在输入、输出方式时，可用于向CPU发中断请求。
OBF：输出缓冲器满信号，低电平有效。是8255输出给外设的联络信号，表示CPU已把数据输出到A口。
ACK：外设响应信号，低电平有效。用来启动A口三态输出缓冲器输出数据。
INTE1：是一个与输出缓冲器相关的中断允许触发器，由PC6的置位/复位来控制。
STB：选通输入，低电平有效。是由外设送来的输入信号，用来将数据送入输入锁存器。
IBF：输入缓冲器满信号，高电平有效，表示数据已送入输入锁存器。
INTE2；是一个与输入缓冲器相关的中断允许触发器，由PC4的置位/复位来控制。

当A口工作于方式2时，B口可工作于方式0或方式1，既可以作为输入端口，又可以作为输出端口。这时C口主要用于控制/状态信号的输入/输出。C口各位的功能如图所示，其中高5位用于A口，低3位用于B口。


???:


V/F转换器

V/F转换器接口技术

V/F转换器与计算机接口有以下特点:
1、接口简单，占用计算机硬件资源少，频率信号可输入微机的任一根I/O口线或作为中断源及计数输入等。
2、抗干扰性好，V/F转换本身是一个积分的过程，且用V/F转换器实现A/D转换，就是频率计数过程，相当于在计数时间内对频率信号进行积分，因而有较强的抗干扰能力。另外可采用光电耦合器连接V/F转换器与计算机之间的通道，实现光电隔离。
3、便于远距离传输，可通过调制进行无线电传输或光电传输。

常用的V/F转换器有：

LM331 AD650


LM331

V/F转换器--LM331

LM331是通用的V/F变换器，适用于A/D转换器、高精度的F/V变换器、长时间积分器、线性频率调制或解调器等电路。

主要特性：
1、频率范围 1--100KHz
2、低的非线性 +0.01%
3、单电源或双电源供电
4、单电源供电电压为+5V是也可保证转换精度。
5、温度特性 最大+50ppm/。C
6、低功耗 Vs=5V时为15mW
7、廉价

LM331.jpg (6825 字节) 电特性参数：

电源范围： 4--40V
输入电压范围： -2.0V--Vs
最大失调电压: +14mV
电源电压对增益的影响: 4.5V<Vs<10V 0.1%/V
10V<Vs<40V 0.06%/V
工作电流: 8.0mA

参阅: V/F转换电路 高精度V/F电路 F/V变换电路


运算放大器

ua741.jpg (3789 字节) | uA741是美国仙童公司较为早期的产品,由于其性能完善,如差模电压范围和共模电压范围宽,增益高,不需外加补偿,功耗低,负载能力强,有输出保护等,因此具有较广泛的应用.
OP-07.jpg (3516 字节) | OP-07是一种具有低失调电压、低失调电流和低飘移的超低失调运算放大器，其广泛运用于稳定积分、精密加法、比较、阈值电压检测、微弱信号精确放大等场合，是一种通用性极强的运算放大器。 OP-07电源电压范围为+3V--+18V，输入电压范围0--+14V。
7650.jpg (7212 字节) | 斩波稳零集成运放时采用先进的CMOS工艺制成的大规模模拟集成电路，其特点是超低失调和超低漂移，高增益、高输入阻抗。 7650的内部时钟为200Hz，为得到较好的频响，其输出负载电阻应大于10K。由于滤波器影响频率特性，因此在直流和超低频时使用才体现出其优越性。
LF347.jpg (7256 字节) | LF347是一种场效应管与双极性管兼容的单片四运放，具有高输入阻抗，高速的性能，具有内部失调电压调节，低失调电流、低谐波失真、低噪声等特点，可广泛应用于高速积分、快速D/A转换、采样/保持电路及一般放大电路中。 LF347的供电电压一般为+12V，其差模电压增益为100dB，输入失调电压3mV，共模抑制比为100dB，输入电阻106M欧，转换速率13V/uS，单位增益带宽为4MHz。


LF398

集成采样/保持器--`LF398

LF398.jpg (4005 字节) 当作为单一放大器时，其直流增益精度为0.002%,采样时间小于6us时精度可达0.01%;输入偏置电压的调整只需在偏置端(2脚)调整即可,并且在不降低偏置电流的情况下,带宽允许1MHz,其主要技术指标有:
1、工作电压：+5--+18V
2、采样时间：<10us
3、可与TTL、PMOS、CMOS兼容
4、当保持电容为0.01uF时，典型保持步长为0.5mV
5、低输入漂移，保持状态下输入特性不变
6、在采样或保持状态时高电源抑制

参见：LF398典型应用图


指令系统概述

指令是指挥计算机执行某种操作的命令。一条指令可用两种语言形式表示，即机器语言和汇编语言指令。机器语言指令是用二进制代码表示，称指令码，又称机器码，计算机能直接识别并加以分析和执行。汇编语言指令用助记符表示，称汇编语言指令，它便于程序员编写、阅读和识别程序，但不能为计算机识别和理解，必须汇编成机器语言指令才能为计算机所认识，并执行。

一台计算机机所有指令的集合，称为该计算机机的指令系统。它是表征计算机性能的重要标志。每台计算机都有它自己特有的指令系统。

8051汇编语言需用40多种助记符来表征30多种指令功能。由于功能助记符需定义诸如内部数据存储器、程序存储器、外部数据存储器等，同一种功能需用几个助记符来表示（如MOV、MOVX、MOVC等）。通过这些助记符，与指令中的源、目的地址组合成MCS－51的111条指令。

MCS－51指令系统是用户比较熟悉的MCS－48指令系统的扩充。扩充后的指令系统可扩展片内CPU的外围接口功能，并优化字节效率和执行速度。MCS－51指令系统由49条单字节指令、45条双字节指令的17条三字节指令组成，这样可提高程序存储器的使用效率。对于大多数算术、逻辑运算和转移操作，可选用短地址或长地址指令来实现，以提高运算速度、编程效率和节省存储器单元。在111条指令中，64条指令的执行时间为12个振荡器周期，45条为24个振荡器周期，只有乘、除法指令需8个振荡周期。当主频为12MHZ时，典型指令的执行时间为1US，运算速度是比较快的。

用汇编语言表示的指令格式（与典型微型计算机相似）为：
标号：操作码助记符 [（目的操作数），（源操作数）]；注释
标号是该指令的符号地址，可根据需要设置。某个语句一旦赋予某个标号，则在其它语句的操作数中就可以引用该标号，以便控制程序的转移或寻址。标号与操作码之间用冒号“：”分隔开。

操作码和操作数是指令的核心部分，在二者之间用若干空格分隔开。操作码在汇编语言中用助记符表示，它的作用是命令CPU作何种操作。操作数和源操作数，二者之间用“，”号隔开。

用机器语言表示的指令格式以8位二进制数（字节）为基础，有单字节、双字节和三字节指令，其格式为：
单字节：操作码
双字节：操作码 数据或寻址方式
三字节：操作码 数据或寻址方式


寻址方式

MCS－51设有7种寻址方式，即：
寄存器寻址
直接寻址
寄存器间接寻址
立即寻址
基址寄存器加变址寄存器间接寻址
相对寻址
位寻址

参见:指令系统


寄存器寻址方式

一、寄存器寻址方式

寄存器寻址是对由指令选定的工作寄存器（R0--R7）进行读／写，由指令操作码字节的最低３位指明所寻址的工作寄存器。对累加器A、寄存器B、数据指针DPTR、位处理累加器CY等，也可当作寄存器方式寻址。

例如，设累加器A内容为10H，R3的内容为4FH，则执行指令MOV A，R3，其指令码为11101011，其中最低3位（011）即为工作寄存器R3的地址。

执行结果：累加器A内容变为4FH，R3内容不变。

返回 下一页


直接寻址方式

二、直接寻址方式

直接寻址方式是指令直接给出操作数地址。

直接寻址方式可访问三种地址空间：

  • 特殊功能寄存器地址空间，这是唯一能寻址特殊功能寄存器的寻址方式；

  • 内部数据存储器（RAM）地址空间；

  • 特定的位地址空间。

例如，指令MOV 65H，A，指令代码为：

第一个字节（F5H）为操作码，第二个字节（65H）即为指令中给出的直接地址（direct）。执行结果把Ａ的内容送内部RAV的65单元中。

返回 下一页


寄存器间接寻址方式

三、寄存器间接寻址方式

寄存器间接寻址是将指定的寄存器内容为地址，由该地址所指定的单元内容作为操作数。MCS-51规定R2或R1为间接寻址寄存器，它可寻址内部RAM低位地址的128个字节单元内容。还可采用数据指针（DPTR）作为间接寻址寄存器，寻址外部数据存储器的64K字节空间，但不能用本寻址方法寻址特殊功能寄存器。

例如，设将内部RAM的65H单元内容（47H）送A，可执行指令：MOV A，@R0，其中R0内容为65H。该指令执行示意如图2所示。

指令的执行过程为：当程序执行到本指令时，就以指令中所指定的工作寄存器R0的内容（65H）为指针，将内部数据存储器65H单元的内容（47H）送累加器A。

返回 下一页


立即寻址方式

四、立即寻址方式

立即寻址方式是由指令直接给出操作数来寻址的。通常紧跟指令操作码之后的一个或两个字节数，就是寻址所需的操作数。这类指令大都是二字节指令，仅有一条是三字节指令。它提供两字节的立即数（例如MOV DPTR，＃1600H）。（“＃”为立即数指示符号）。

例如指令：MOV A，＃62H，是把立即数62H送累加器A。立即寻址指令执行示意如图3所示。

返回 下一页


变址间接寻址方式

五、变址间接寻址方式

基址寄存器加变址寄存器间接寻址方式，是MCS－51指令集所独有的，它是以程序计数器PC或数据指针DPTR作为基址寄存器，以累加器A作为变址寄存器，这二者内容之和为有效地址。例如：

JMP @A＋DPTR | MOVC A, @A+PC
MOVC A,@+DPTR |

这种寻址方式特别适用于查表。DPTR为16位字宽，可指向64K字节的任何单元；@A＋PC可指向以PC当前值为起始地址的256字节单元。具体执行过程将结合有关指令再介绍。

返回 下一页


变址间接寻址方式

六、相对寻址方式

这与典型微计算机的相对寻址相似。它以PC的当前值为基准，加上指令中给出的相对偏移量（rel）形成有效转移地址。相对偏移量（rel）是一个带符号的8位二进制数，常以补码的形式出现。因此，程序的转移范围为：以PC的当前值为起始地址，相对偏移在＋127－128个字节单元之间。例如执行指令：

JC rel 设 rel ＝75H，Cy＝1

这是一条以Cy为条件的转移指令。因为JC rel 指令是二字节指令，当程序取出指令的第二个字节时，PC的当前值已是原PC＋2，由于Cy＝1，所以程序转向PC＋75H单元去执行。其执行过程如图4所示。

返回 下一页


位寻址方式

七、位寻址方式

MCS－51设有独立的位处理器。进行位处理时，可对内部RAM和特殊功能寄存器的某些位寻址单元进行寻址。详细操作将在布尔（位）处理类指令部分介绍。

返回


MCS-51系列单片机指令系统

按指令的功能，归纳为5大类。

  • 1．数据传送指令（28条）；

  • 2．算术运算指令（24条）；

  • 3．逻辑操作指令（25条）；

  • 4．控制转移指令（17条）。

  • 5．位操作指令（17条）；

在介绍指令前，反描述指令的一些符号意义先作一简单介绍。

Rn－－当前选定寄存器组的工作寄存器R0--R7。

data－－8位内部数据存储器单元地址，它可以是内部RAM（0--127）某个单元，或一个特殊功能存储器（即I／O口、控制寄存器、状态寄存器等）的地址。

@R－－以工作寄存器R0或R1作间接寻址寄存器（即i＝1或0），以间接寻址内部RAM（0--256）单元。

#data－－指令中的8位立即常数。

#data16－－指令中的16位立即常数。

addr16－－16位地址数，供LCALL和LJMP指令使用，可转向64K外部程序存储器地址空间的任何单元。

addr11－－低11位地址数，供LCALL和LJMP指令使用，使程序转向下一条指令的第一个字节为起始地址的2K字节范围内和程序存储器地址空间。

direct－－直接寻址方式，可直接寻址内部RAM和特殊功能寄存器。

rel－－带符号的8位相对偏移量（2的补码），常用于SJMP和所有条件转移指令。范围为相对于下一条指令的第一个字节为起始地址的－128~＋127字节单元。

bit－－内部数据存储器RAM或特殊功能寄存器里的直接寻址位。

－－表示数据传送方向。

－－表示数据交换。

（）－－表示单元内容。

（（））－－表示间接寻址的内容。


数据传送指令

一、数据传送指令

传送指令是指令系统中最基本，使用最多的一类指令，主要用于数据的传送、保存以及交换等场合。

  • 1．以累加器A为目的操作数的指令（4条）

这组指令的功能是把源操作数指定的内容送入累加器A中。

有寄存器、直接、寄存器间接和立即4种寻址方式。

MOV A, Rn | MOV A, data
MOV A,@Rn | MOV A,#data
  • 2．以寄存器Rn为目的的操作数的指令（3条）

这组指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。

有寄存器、直接和立即3种寻址方式。

MOV Rn, A | MOV Rn,data
MOV Rn,#data |
  • 3．以直接地址为目的操作数的指令（5条）

这组指令的功能是把源操作数指定的内容送到由直接地址data所指定的片内RAM中。

有寄存器、直接、寄存器间接和立即4种寻址方式。

MOV data,A | MOV data,Rn
MOV data1,data2 | MOV data,@Ri
MOV data,#data |
  • 4．以间接地址为目的操作数的指令（3条）

这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。

有寄存器、直接和立即3种寻址方式。

MOV @Ri,A | MOV @Ri,data
MOV @Ri,#data |
  • 5．查表指令（2条）

这组指令的功能是对存放于程序存储器中的数据表格进行查找传送。使用变址寻址方式。

MOVC A,@A+DPTR MOVC A, @A+PC
  • 6．累加器A与片外AM传送指令（4条）

这组指令的功能为累加器A与片RAM间的相互传送。由于MCS－51指令系统中没有专门的输入／输出指令，且片外扩展的I／O口与片外RAM是统一编址的，故以下4条指令也可作为输入／输出指令。使用寄存器间接寻址方式。

MOVX A，@DPAR | MOVX @DPTR,A
MOVX A,@Ri | MOVX @Ri,A
  • 7．堆栈操作类指令（2条）

该类指令的功能是把直接寻址单元的内容传送到堆栈指针SP所指的单元中，以及把SP所指单元的内容送到直接寻址单元中。

PUSH data POP data

前一条指令称为入栈操作指令，后一条指令称为出栈指令。由于开机复位后，（SP）＝07H，故一般需重新设置SP的初值。由于压入堆栈的第一个数必须存放在SP＋1所指存储单元，故实际的栈底为SP＋1所指存储单元。

  • 8．交换指令（4条）

该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换。

有寄存器、直接和寄存器间接3种寻址方式。

XCH A，Rn | XCH A，data
XCH A，@Ri | XCHD A，@Ri
  • 9．16位数据传送类指令（1条）

MOV DPTR，#data

该指令的功能是把16位常数送入数据指针寄存器，使用立即寻址方式。译成机器码时，是高位字节在前，低位字节在后。

返回 下一页


算术运算指令

二、算术运算指令

MCS－51具有强大的加、减、乘、除四则算术运算指令。

1．程序状态字PSW

MCS－51有一个程序状态字寄存器PSW，用来保存指令执行结果的标志，供程序查讯和判别。PSW是特殊功能寄存器中的一个，其格式如下：
PSW7－－既是布尔处理机的累加器C，又是进位标志CY，如果操作结果在最高位有进位输出（加法时）或借位输入（减法时），置位CY，否则清“0”CY。
AC－－辅助进位（半进位）标志。如果操作结果的低4位有进位（加法时）或向高4位借位时（减法），置AC，否则清“0”AC，AC主要用于二－十进制数加法调整。
OV－－溢出标志。如果操作结果有进位进入最高位，但最高位没有产生进位，或者最高位产生进位而低位没有向最高位进位，这时置位溢出标志位，否则OV清“0”。溢出标志位用于补码运算，当有符号的数运算结果不能用8位二进制数表示时，OV将置位。
P－－累加器A的奇偶标志位，如果累加器A的8位的模2和为1（奇），则P＝1；否则P＝0。由于P总是表示A的奇偶性，随着A的内容变化的，所以一个值写入PSW的P位的值不变。
RS1、RS0－－指示当前使用的工作寄存器区。
F0－－用户标志位。可作为软件标志，它的作用和内部RAM位寻址区的各位相似。
PSW1－－保留位，对它的操作无效。

2．加法指令

  • 1、不带进位加法指令
ADD A,#data | ADD A,data
ADD A,@Ri | ADD A,Rn

工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加，所得和存放于累加器A中，当和的第3、7位有进位时，分别将AC，CY标志位置1；否则为0。
上述指令的执行将影响标志位AC、CY、OV、P。

对于无符号数，进位标志位CY＝1，表示溢出；CY＝0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位，而另一位不产生进位，溢出标志位OV置“1”否则被清“0”。OV＝1表示两个正数相加，和变为负数，或两个负数相加，和变为正数的错误结果。
源操作数有四种寻址方式：寄存器、直接、间接和立即数。

  • 2、带进位加法指令：
ADDC A,#data | ADDC A,data
ADDC A,@Ri | ADDC A,Rn

这是四条带进位的加法指令。将累加器A内容加当前CY标志位内容，再加无符号单字节的数，和存于累加器A中。当运算结果第3、7位产生进位溢出时，则分别置位AC、CY和OV标志位。本指令执行将影响标志位AC、CY、OV、P。
本指令常用于多字节加法。

  • 3、加1指令：
INC A | INC data
INC @Ri | INC Rn
INC DPTR |

INC指令将指定的内容加1，结果仍存放于原A或原单元中。如原值为0FFH，加1运算后将变成00H，运算结果不影响标志位。
本指令可对累加器A、工作寄存器RN、RI间址和直接寻址的单元内容进行加1运算。可见MCS－51加1指令是较丰富的。
注意：当用本指令使输出并行I／O内容加1时，用作输出口原始值，将从输出口的数据锁存器中读入，而不是从输出口的引脚上读入。

  • 4、二－十进制调正指令：

DA A

若[(A0-3)>9]或[(AC)=1),则(A0-3)(A0-3)+06H

本指令是对A的BCD码加法结果进行调正。两个压缩型BCD码按二进制数相加之后，必须经本指令调正，才能得到压缩型BCD码的和数。

本指令的操作为：若累加器A的低4位数值大于9或者第3位向第4位产生进位，即AC辅助进位位为1，则需将A的低4位内容加6调正，以产生低4位正确的BCD码值。如果加0调正后，低4位产生进位，且高4位均为1时，则内部加法将置位CY，反之，它并不清“0”CY标志位。
若累加器A的高4位值大于9或最高进位位CY＝1，则高位4位需加6调正，以产生高4位的正确BCD码值。同样，在加6调正后产生最高进位，则置位CY，反之，不清“0”CY这时CY的置位，表示和数BCD码值大于等于100。这对多字节十进制加法有用。不影响OV标志。
由此可见，本指令是根据累加器A的原始数值和PSW的状态，对累加器A进行加O6H、60H或66H的操作。
必须注意：本指令不能简单地把累加器A中的16进制数交换成BCD码，也不能用于十进制减法的调正。

3．减法指令

MCS－51在MCS－48的基础上增加了带借位减法指令，加强了计算机的运算功能。
1、带借位减法指令：

SUBB A,#data | SUBB A,data
SUBB A,@Ri | SUBB A,Rn

带借位减法指令SUBB，从累加器A中减去进位标志位CY和指定的变量，结果在累加器A中，若第七位有借位，则置位位CY，否则CY清0。若第3位有错位，则置位辅助进位标志AC，否则清0 AC。若第7和第6位中有一位需借位，而另一位不借位，则置位溢出标志OV。溢出位OV用于带符号的整数减法，它表示（OV＝1）一个正数减负数结果为负数；或一个负数减正数结果为正数的错误结果。
源操作数允许有四种寻址方式：寄存器RN，直接地址direct，间址Ri或立即数。
当在进行单字节或多字节减法前，不知道进位标志位CY的值，则应在减法指令前先将CY清“0”。

4．乘法指令

MUL AB

乘法指令是MCS－51新增加的，运算速度只需4个机器周期。它大大增加了MCS－51单片机的运算功能，克服了MCS－48系列单片机的不足。
本指令将累加器A和寄存器B中二个8位无符号整数进行相乘，16位乘积的低8位存于A中，高8位存于B中，如果乘积大于255（0FFH），即B的内容不为0时，则置位溢出标志位OV，否则清“0”OV。进位标志位CY总是清“0”。

5．除法指令

DIV AB

MCS－51系列单片机增加的除法指令，运算时间亦只需4个机器周期，同样也增强了MCS－51的运算功能，使它能适用于复杂的且要求运算功能较强的控制系统。除法指令格式：
本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数，所得结果商的整数部分存于A中，整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数（B中内容）为00H时，则执行结果将为不定值，即执行结果送往A和B中的为不定值，且置位溢出标志位OV。在任何情况下，均清“0”CY。

6．减一指令

DEC A | DEC data
DEC @Ri | DEC Rn

DEC指令把所指的寄存器内容减1，结果仍送回原寄存器，若原来寄存器的内容为00H，则减1后将为FFH，运算结果不影响任何标志位，该组指令使用了直接、寄存器和寄存器间寻址。同加1指令一样，在第二条指令中，若直接地址是I／O口，则进行“读－改－写”操作。

返回 下一页


逻辑操作指令

三、逻辑操作指令

逻辑操作类指令共有效25条，有与、或、异或、求反、左右移位、清0等逻辑操作，对应的寻址方式有直接、寄存器和间接寻址，该类指令的执行一般不影响PSW。

1．循环移位指令（4条）

RL A； | RR A；
RLC A； | RRC A；

前两条指令的功能分别是将累加器A的内容循环左移一位，后两条指令的功能分别是将累加器A的内容连同进位位CY一起循环左移或右移一位。

2．累加器半字节交换指令（1条）

SWAP A；

这条指令的功能是将累加器A的高低两半字节交换。如（A）＝56H，执行指令SWAP A 后，结果（A）＝65H。

3．求反指令（1条）

CPL A；

4．清0指令（1条）

CLR A；

5．逻辑与指令（6条）

ANL A，#data； | ANL data，#data
ANL A，Rn | ANL A，data
ANL data,A | ANL A，@Ri

这组指令的第二条和第五条指令中，若直接地址正好是I／O口，则也是“读－改－写”操作。

6．逻辑或指令（6条）

ORL A，#data | ORL data，#data
ORL A，Rn | ORL A，data
ORL data，A | ORL A，@Ri

这组指令的第二条和第五条也具有“读－改－写”功能。

7．逻辑异或指令（6条）

XRL A，#data | XRL data,#data
XRL A，Rn | XRL A，data
XRL data,A | XRL A，@Ri

同样，这组指令的第二条和第五条也具有“读－写－改”功能。

返回 下一页


控制转移指令

四、控制转移指令

控制转移类指令用于控制程序的走向，故其作用区间是程序存储器空间。利用具有16位地址的长调用、长转移指令可对64K程序存储器的任一地址单元进行访问，也可用具有11位地址的绝对调用和绝对转移指令，访问2K字节的空间。另外，还有在一页范围的短相对转移以及许多条件转移指令，这类指令一般不影响标志位，不面分别给予介绍。

1．无条件转移语句（4条）

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

上述指令的功能是当程序执行完该指令时，程序就无条件地转移到指令所提供的地址上去。

第一条指令称为长转移指令，指令提供16位目标地址，将指令中第二字节和第三字节地址码分别装入PC的高8位中，所以无条件转移的目标地址范围是64K字节空间。

第二条指令称为绝对转移指令，指令提供11位目标地址，所以，无条件转移的目标地址范围是从下条指令开始的2K字节空间。

第三条指令称为相对短转移指令，指令控制程序无条件的转向指定地址。该指令的rel是一个带符号的相对偏移量，范围为－128~＋127。负数表示向后转移，正数表示向前转移。这条指令的优点是指令给出的是相对转移地址，不具体指出地址值，这样当程序地址发生变化时，只要相对地址不发生变化，该指令就不需作任何改动。在用汇编语言写程序时，rel是一个标号，由汇编程序在汇编过程中自动计算偏移地址。在手工汇编时，可用下式计算偏移地址：

向后转移时：rel=FEH－（源、目的地址的绝对值）

向前转移时：rel=（源、目的地址差的绝对值）－2

第四条指令称为散转指令（又称为间接转移指令），该指令把累加器A中的8位无符号数与作为基址寄存器DPTR中的16位数据相加，所得的值送入PC作为转移的目的地址。该指令执行后不影响累加器A和数据指针DPTR中的原内容，也不影响任何标志位。这条指令的特点是其转移地址不是编程时确定的，而是在程序运行时动态决定的。因此，可以在DPTR中装入多条转移程序的首地址，而由累加器A中的内容来动态选择该时刻应转向那一条分支程序。

2．条件转移指令（8条）

1．JZ rel | 2．JNZ rel
3．CJNEA,data,rel | 4．CJNE A,#data,rel
5. CJNE Rn,#data,rel | 6．CJNE @Ri,data,rel
7．DJNZ Rn,rel | 8．DJNZ data,rel

上述指令执行满足某种特定条件的转移，其目标在以下一条指令的起始地址为中心的256个字节范围内（－128~＋127）。

第一条和第二条指令是判别累加器A中的内容是否为0来确定是顺序执行还是转移。

第三条至第六条是比较转移指令，该指令通过比较前面两个操作数的大小，如果它们的值不相等则转移，相等则继续执行。指令执行后要影响进位位CY，若操作数1小于操作数2，则CY＝1；若操作数1大于操作数2，则CY＝0。

3．调用指程序及返回指令（4条）

1．LCALL addr16 2．ACALL addr11 3．RET 4．RETI

在程序设计中，经常需要对某段程序反复执行，为了减少程序的编写以及浪费不必要的地址空间，于是引入了主程序和子程序的概念，通常把某一段需要反复调用的程序称为子程序，子程序的最后一条指令为返回主程序指令（RET），而对具有调用子程序功能的指令称为调用指令。

第一条指令称为长调用指令，其与LJMP一样提供16位地址，可调用64K字节范围内的子程序。由于其为三字节指令，所以执行时首先（PC）＋3，以获得下一条指令地址，并把此时的PC内容压入堆栈，作为返回地址，然后把地址addr16装入PC，转去执行子程序。

第二条指令称为绝对调用指令，该指令提供11位目标地址，限制在2K字节范围内调用，由于是双字节指令，所以执行时（PC）＋2以获得下一条指令的地址，然后把该地址压入堆栈作为返回地址。其操作码的形成与AJMP指令相同。

第三条指令称为子程序返回指令，表示子程序结束需返回主程序，所以执行该指令时，分别从堆栈中弹出调用子程序时压入的返回地址。

第四条指令称为中断返回指令，该指令的执行过程类似指令RET，但其还能恢复中断逻辑，RETI和RET决不能互换使用。

4．空操作指令（1条）

NOP；

空操作指令除了PC加1外，CPC不作任何操作，而转向下一条指令去执行。这条指令常用于产生一个机器周期的延时。

返回 下一页


位操作指令

五、位操作指令

位操作类指令共有17条，均以位为操作对象，分别完成位传送、位状态控制、位逻辑运算、位条件转移等功能，在汇编语言中，位地址的表示方式有以下4种：

  • 直接用位地址表示：如91H。
  • 字节地址位数方式：如P1．0（90H）。
  • 位名称方式：如RS0。
  • 用户使用伪指令事先定义过的符号地址。

1．位数据传送指令（2条）

MOV C，bit MOV bit,C

上述指令把源操作数指定的变量传送到目的操作数指定的单元中。第二条指令若是对I/O口的位进行操作，则也是“读－改－写”操作。

2．位状态控制指令（6条）

CLR C | CLR bit | CPL C
CPL bit | SETB C | SETB bit

上述指令的功能是分别对进位标志和直接寻址进行清0、求反以及直接位地址是I／O口的某一位时，也具有“读－改－写”功能。

3．位逻辑运算指令（4条）

ANL C,bit | ANL C,/bit
ORL C,bit | ORL C/bit

上述指令的功能是将位累加器C的内容与直接位地址的内容或直接位地址内容的反进行逻辑与、逻辑或，结果仍送回C中。

4．位条件转移指令（5）

JC rel | JNC rel
JB bit,rel | JNB bit,rel
JBC bit,rel |

上述指令的功能分别是判别进位位C和直接位地址的内容是“1”还是“0”，以此来决定程序的走向。最后一条指令的功能是：若直接位址的内容为“1”则转移，并且同时将该位清0，否则顺序执行。这条指令若是对I／O口某一位操作，也具有“读－改－写”功能。

返回


ACALL

ACALL addr11

第二条指令称为绝对调用指令，该指令提供11位目标地址，限制在2K字节范围内调用，由于是双字节指令，所以执行时（PC）＋2>(PC)以获得下一条指令的地址，然后把该地址压入堆栈作为返回地址。其操作码的形成与AJMP相同。

参见:控制转移类指令


ADD

ADD A,#data | ADD A,data
ADD A,@Ri | ADD A,Rn

工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加，所得和存放于累加器A中，当和的第3、7位有进位时，分别将AC，CY标志位置1；否则为0。
上述指令的执行将影响标志位AC、CY、OV、P。

对于无符号数，进位标志位CY＝1，表示溢出；CY＝0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位，而另一位不产生进位，溢出标志位OV置“1”否则被清“0”。OV＝1表示两个正数相加，和变为负数，或两个负数相加，和变为正数的错误结果。
源操作数有四种寻址方式：寄存器、直接、间接和立即数。

参见:算术运算类指令


ADDC

ADDC A,#data | ADDC A,data
ADDC A,@Ri | ADDC A,Rn

这是四条带进位的加法指令。将累加器A内容加当前CY标志位内容，再加无符号单字节的数，和存于累加器A中。当运算结果第3、7位产生进位溢出时，则分别置位AC、CY和OV标志位。本指令执行将影响标志位AC、CY、OV、P。
本指令常用于多字节加法。

参见:算术运算类指令


AJMP

AJMP addr11

第二条指令称为绝对转移指令，指令提供11位目标地址，所以，无条件转移的目标地址范围是从下条指令开始的2K字节空间。

参见:控制转移类指令


ANL

ANL C,bit ANL C,/bit

上述指令的功能是将位累加器C的内容与直接位地址的内容或直接位地址内容的反进行逻辑与，结果仍送回C中。

参见:位操作类指令


CJNE

CJNE A,data,rel | CJNE A,#data,rel
CJNE Rn,#data,rel | CJNE @Ri,#data,rel

比较转移指令，该指令通过比较前面两个操作数的大小，如果它们的值不相等则转移，相等则继续执行。指令执行后要影响进位位CY，若操作数1小于操作数2，则CY＝1；若操作数1大于操作数2，则CY＝0。

参见:控制转移类指令


DIV

CLR

CLR C CLR bit

上述指令的功能是分别对进位标志和直接寻址进行清0、求反以及直接位地址是I／O口的某一位时，也具有“读－改－写”功能。

参见:位操作类指令


DIV

CPL

CPL bit CPL C

上述指令的功能是分别对进位标志和直接寻址进行清0、求反以及直接位地址是I／O口的某一位时，也具有“读－改－写”功能。

参见:位操作类指令


DA

DA A

若[(A0-3)>9]或[(AC)=1),则(A0-3)(A0-3)+06H

本指令是对A的BCD码加法结果进行调正。两个压缩型BCD码按二进制数相加之后，必须经本指令调正，才能得到压缩型BCD码的和数。

本指令的操作为：若累加器A的低4位数值大于9或者第3位向第4位产生进位，即AC辅助进位位为1，则需将A的低4位内容加6调正，以产生低4位正确的BCD码值。如果加0调正后，低4位产生进位，且高4位均为1时，则内部加法将置位CY，反之，它并不清“0”CY标志位。
若累加器A的高4位值大于9或最高进位位CY＝1，则高位4位需加6调正，以产生高4位的正确BCD码值。同样，在加6调正后产生最高进位，则置位CY，反之，不清“0”CY这时CY的置位，表示和数BCD码值大于等于100。这对多字节十进制加法有用。不影响OV标志。
由此可见，本指令是根据累加器A的原始数值和PSW的状态，对累加器A进行加O6H、60H或66H的操作。
必须注意：本指令不能简单地把累加器A中的16进制数交换成BCD码，也不能用于十进制减法的调正。

参见:算术运算类指令


DEC

DEC A | DEC data
DEC @Ri | DEC Rn

DEC指令把所指的寄存器内容减1，结果仍送回原寄存器，若原来寄存器的内容为00H，则减1后将为FFH，运算结果不影响任何标志位，该组指令使用了直接、寄存器和寄存器间寻址。同加1指令一样，在第二条指令中，若直接地址是I／O口，则进行“读－改－写”操作。

参见:算术运算类指令


DIV

DIV AB

MCS－51系列单片机增加的除法指令，运算时间亦只需4个机器周期，同样也增强了MCS－51的运算功能，使它能适用于复杂的且要求运算功能较强的控制系统。除法指令格式：
本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数，所得结果商的整数部分存于A中，整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数（B中内容）为00H时，则执行结果将为不定值，即执行结果送往A和B中的为不定值，且置位溢出标志位OV。在任何情况下，均清“0”CY。

参见:算术运算类指令


DJNZ

DJNZ Rn,rel DJNZ data,rel

该指令通过比较前面两个操作数的大小，如果它们的值不相等则转移，相等则继续执行。指令执行后要影响进位位CY，若操作数1小于操作数2，则CY＝1；若操作数1大于操作数2，则CY＝0。

参见:控制转移类指令


INC

INC A | INC data
INC @Ri | INC Rn
INC DPTR |

INC指令将指定的内容加1，结果仍存放于原A或原单元中。如原值为0FFH，加1运算后将变成00H，运算结果不影响标志位。
本指令可对累加器A、工作寄存器RN、RI间址和直接寻址的单元内容进行加1运算。可见MCS－51加1指令是较丰富的。
注意：当用本指令使输出并行I／O内容加1时，用作输出口原始值，将从输出口的数据锁存器中读入，而不是从输出口的引脚上读入。

参见:算术运算类指令


JB

JB bit,rel

功能分别是判别进位位C和直接位地址的内容是“1”还是“0”，以此来决定程序的走向。这条指令若是对I／O口某一位操作，也具有“读－改－写”功能。

参见:位操作类指令


JBC

JBC bit,rel

若直接位址的内容为“1”则转移，并且同时将该位清0，否则顺序执行。这条指令若是对I／O口某一位操作，也具有“读－改－写”功能。

参见:位操作类指令


JC

JC rel

判别进位位C和直接位地址的内容是“1”还是“0”，以此来决定程序的走向。这条指令若是对I／O口某一位操作，也具有“读－改－写”功能。

参见:位操作类指令


JMP

JMP @(A)+DPTR

称为散转指令（又称为间接转移指令），该指令把累加器A中的8位无符号数与作为基址寄存器DPTR中的16位数据相加，所得的值送入PC作为转移的目的地址。该指令执行后不影响累加器A和数据指针DPTR中的原内容，也不影响任何标志位。这条指令的特点是其转移地址不是编程时确定的，而是在程序运行时动态决定的。因此，可以在DPTR中装入多条转移程序的首地址，而由累加器A中的内容来动态选择该时刻应转向那一条分支程序。

参见:控制转移类指令


JNC

JNC rel

判别进位位C和直接位地址的内容是“1”还是“0”，以此来决定程序的走向。

参见:位操作指令


JNZ

JNZ rel

判别累加器A中的内容是否为0来确定是顺序执行还是转移。

参见:控制转移类指令


JZ

JZ rel

判别累加器A中的内容是否为0来确定是顺序执行还是转移。

参见:控制转移类指令


LCALL

LCALL addr16

长调用指令，其与LJMP一样提供16位地址，可调用64K字节范围内的子程序。由于其为三字节指令，所以执行时首先（PC）＋3，以获得下一条指令地址，并把此时的PC内容压入堆栈，作为返回地址，然后把地址addr16装入PC，转去执行子程序。

参见:控制转移类指令


LIMP

LJMP

LJMP addr16

长转移指令，指令提供16位目标地址，将指令中第二字节和第三字节地址码分别装入PC的高8位中，所以无条件转移的目标地址范围是64K字节空间。

参见:控制转移类指令


MOV

参见:数据传输类指令、位操作类指令


MOVC

MOVC A,@A+DPTR MOVC A, @A+PC

这组指令的功能是对存放于程序存储器中的数据表格进行查找传送。使用变址寻址方式

参见:数据传输类指令


MUL

MUL AB

乘法指令是MCS－51新增加的，运算速度只需4个机器周期。它大大增加了MCS－51单片机的运算功能，克服了MCS－48系列单片机的不足。
本指令将累加器A和寄存器B中二个8位无符号整数进行相乘，16位乘积的低8位存于A中，高8位存于B中，如果乘积大于255（0FFH），即B的内容不为0时，则置位溢出标志位OV，否则清“0”OV。进位标志位CY总是清“0”。

参见:算术运算类指令


NOP

NOP

空操作指令除了PC加1外，CPC不作任何操作，而转向下一条指令去执行。这条指令常用于产生一个机器周期的延时。

参见:控制转移类指令


ORL

ORL C,bit ORL C/bit

上述指令的功能是将位累加器C的内容与直接位地址的内容或直接位地址内容的反进行逻辑或，结果仍送回C中。

参见:位操作类指令


DIV

POP

POP data

出栈指令.

参见:数据输类指令


PUSH

PUSH data

入栈操作指令，由于开机复位后，（SP）＝07H，故一般需重新设置SP的初值。由于压入堆栈的第一个数必须存放在SP＋1所指存储单元，故实际的栈底为SP＋1所指存储单元。

参见:数据操作类指令


RET

RET

子程序返回指令，表示子程序结束需返回主程序，所以执行该指令时，分别从堆栈中弹出调用子程序时压入的返回地址。

参见:控制转移类指令


RET1

RETI

RETI

中断返回指令，该指令的执行过程类似指令RET，但其还能恢复中断逻辑，RETI和RET决不能互换使用。

参见:控制转移类指令


RL

RL A

将累加器A的内容循环左移一位。

参见:逻辑操作类指令


RLC

RLC A

功能是将累加器A的内容连同进位位CY一起循环左移一位。

参见:逻辑操作类指令


RR

RR A

累加器A的内容循环右移一位。

参见:逻辑操作类指令


RRC

RRC A

功能是将累加器A的内容连同进位位CY一起循环右移一位。

参见:逻辑操作类指令


DIV

SETB

SETB C SETB bit

功能是分别对进位标志和直接寻址进行清0、求反以及直接位地址是I／O口的某一位时，也具有“读－改－写”功能。

参见:位操作类指令


SJMP

SJM rel

相对短转移指令，指令控制程序无条件的转向指定地址。该指令的rel是一个带符号的相对偏移量，范围为－128~＋127。负数表示向后转移，正数表示向前转移。这条指令的优点是指令给出的是相对转移地址，不具体指出地址值，这样当程序地址发生变化时，只要相对地址不发生变化，该指令就不需作任何改动。在用汇编语言写程序时，rel是一个标号，由汇编程序在汇编过程中自动计算偏移地址。在手工汇编时，可用下式计算偏移地址：

向后转移时：rel=FEH－（源、目的地址的绝对值）

向前转移时：rel=（源、目的地址差的绝对值）－2

参见:控制转移类指令


DIV

SUBB

SUBB A,#data | SUBB A,data
SUBB A,@Ri | SUBB A,Rn

带借位减法指令SUBB，从累加器A中减去进位标志位CY和指定的变量，结果在累加器A中，若第七位有借位，则置位位CY，否则CY清0。若第3位有错位，则置位辅助进位标志AC，否则清0 AC。若第7和第6位中有一位需借位，而另一位不借位，则置位溢出标志OV。溢出位OV用于带符号的整数减法，它表示（OV＝1）一个正数减负数结果为负数；或一个负数减正数结果为正数的错误结果。
源操作数允许有四种寻址方式：寄存器RN，直接地址direct，间址Ri或立即数。
当在进行单字节或多字节减法前，不知道进位标志位CY的值，则应在减法指令前先将CY清“0”。

参见:算术运算类指令


DIV

SWAP

SWAP A

这条指令的功能是将累加器A的高低两半字节交换。如（A）＝56H，执行指令SWAP A 后，结果（A）＝65H。

参见:逻辑操作类指令


DIV

XCH

该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换,有寄存器、直接和寄存器间接3种寻址方式。

XCH A，Rn XCH A，data
XCH A，@Ri

参见:数据传输类指令


DIV

XCHD

该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换, 有寄存器、直接和寄存器间接3种寻址方式。

XCHD A，@Ri

参见:数据传输类指令


XRL

XRL A，#data | XRL data,#data
XRL A，Rn | XRL A，data
XRL data,A | XRL A，@Ri

同样，这组指令的第二条和第五条也具有“读－写－改”功能。

参见:逻辑操作类指令