8051单片机指令定义详解

合集下载

第三章 8051汇编指令

第三章  8051汇编指令
((x))— 由X地址中的内容为地址,其地址单 元中的内容。
6
汇编语言对不同数制的表示方式
数据的表示方式: 十进制立即数:MOV A,#123 十六进制: MOV A,#7FH 二进制: MOV A,#10011011B 直接地址的表示方式: 十进制立即数:MOV A,123 十六进制: MOV A,7FH 二进制: MOV A,10011011B
注:目的操作数都是A
39
算术运算指令
[2]. 带进位加法指令(4条)
ADDC A, direct ;(A)+(data)+(C)→(A)
ADDC A,#data ;(A)+#data +(C)→(A) ADDC A,Rn ADDC A,@Ri ;(A)+Rn+(C)→(A) ;(A)+((Ri))+(C)→(A)
例如: CLR C
CPL C
SETB P1.2 作业:写出51单片机可位寻址的专用寄存器有哪 些?
17
[7].相对寻址 以PC的内容为基址,加上给出的偏移 量作为转移地址,从而实现程序的转移。这 种寻址方式主要用于转移指令。
例如: S: MOV A,#20 ..... AJMP S
18
软件使用介绍 单片机编程软件:KEIL 电路仿真软件:PROTEUS 电路仿真软件 PCB设计软件
MOV A,#'k'
11
[2].直接寻址 指令中原操作数直接以存储单元的地址 出现。 MOV A,direct 例如: MOV A,68H
12
[3].寄存器寻址 寄存器寻址可以对8个工作寄存器R0-R7进 行操作,也可以对寄存器A、B等进行操作。 例如: MOV R1,#10 MOV A,R1 MOV R2,A

8051单片机指令

8051单片机指令

8051单片机指令8051单片机是一种经典的微控制器,使用广泛,特别适用于嵌入式系统开发。

在实际的编程过程中,了解并掌握8051单片机的指令集是非常重要的。

本文将介绍一些常用的8051单片机指令,帮助读者更好地理解和应用这些指令。

一、MOV指令MOV指令是8051单片机中最常用的指令之一,用于将数据从一个寄存器移动到另一个寄存器。

例如,MOV A, B表示将B寄存器的值移动到A寄存器中。

这个指令非常简单直观,容易理解和使用。

二、ADD指令ADD指令用于将两个数相加,并将结果存储到累加器。

例如,ADD A, B表示将A和B寄存器中的值相加,并将结果存储到A寄存器中。

这个指令非常有用,可以实现简单的数学运算。

三、SUB指令SUB指令用于计算两个数的差值,并将结果存储到累加器。

例如,SUB A, B表示将B寄存器的值从A寄存器的值中减去,并将结果存储到A寄存器中。

这个指令也非常常用,可以实现简单的减法运算。

四、MUL指令MUL指令用于计算两个数的乘积,并将结果存储到累加器和扩展寄存器中。

例如,MUL AB表示将A和B寄存器中的值相乘,并将低8位结果存储到累加器A中,将高8位结果存储到扩展寄存器B中。

这个指令非常有用,可以实现简单的乘法运算。

五、DIV指令DIV指令用于计算两个数的商和余数,并将结果存储到累加器和余数寄存器中。

例如,DIV AB表示将A和B寄存器中的值相除,并将商存储到累加器A中,余数存储到余数寄存器B中。

这个指令非常有用,可以实现简单的除法运算。

六、JMP指令JMP指令用于无条件跳转到指定的地址。

例如,JMP 2000H表示程序跳转到2000H地址处执行。

这个指令非常常用,可以实现程序的控制流跳转。

七、JC指令JC指令用于在进位标志位(Carry Flag)为1时跳转到指定的地址。

例如,JC 3000H表示当进位标志位为1时,程序跳转到3000H地址处执行。

这个指令非常有用,可以实现条件判断和分支跳转。

8051单片机常用指令

8051单片机常用指令

8051单⽚机常⽤指令3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为⽬的的操作数的指令;访问外部RAM的指令;读程序存储器的指9.堆栈操作3.2 分类指令在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。

Rn:当前指定的⼯作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。

Ri:当前指定的⼯作寄存器组中的RO,R1(其中i=0,1)。

(Ri):Ri间址寻址指定的地址单元。

((Ri)):Ri间址寻址指定地址单元中的内容。

dir:8位直接字节地址(在⽚内RAM和SFR存储空间中)。

#data8:8位⽴即数。

#datal6:16位⽴即数。

addrl6:16位地址值。

addrll:11位地址值。

bit:位地址(在位地址空间中)。

rel:相对偏移量(⼀字节补码数)。

下⾯介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。

3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为⽬的的操作数的指令;访问外部RAM的指令;读程序存储器的指令;数据交换指令以及准栈操作指令。

9.堆栈操作PUSH dir ;SP⼗1-6P,(dir)⼀(SP)POP dir ;((SP))⼀dir,SP-1--P ,例1 SP=07H,(35H)=55H,指令PUSH 35H执⾏后,55H送⼊08H地址单元,SP=08H。

例2 SP=13H,(13H)= 1FH,指令POP 25H执⾏后,1FH压⼊25H地址单元,SP此时为12H。

综合例把⽚内RAM中50H地址单元中的内容与40H地址单元中的内容互换。

⽅法⼀(直接地址传送法):MOV A ,50H数据传送与交换类指令是各类指令中数量最多、使⽤最频繁的⼀类指令,编程时应能⼗分熟练地灵活运⽤3.2.2算术运算类指令共有24条指令,主要包括加、减、乘、除、增量、减量和⼗进制调整等指令。

8051单片机的指令系统

8051单片机的指令系统
立即寻址、直接寻址、寄存器寻址、 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 寄存器间接寻址、变址寻址。
说明 传送操作 交换操作 堆栈操作
目的操作数寻址方式:
直接寻址、寄存器寻址、 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P ACC的指令影响奇偶标志 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影 响标志位。 响标志位。
9 XCH XCH XCH XCHD SWAP
MOV XCH SWAP XCH XCHD
交换指令( 交换指令(5条)
A, A,Rn A, A, direct A, A, @Ri A, @Ri A, A
R6, #29H A, R6 A A, R6 A, @R0
例: 已知A中的内容为34H
算术运算类指令
MOV A,# 60H , ;A←#60H MOV DPTR,# 3400H ;DPTR←#3400H , MOV 30H,# 40H , 单元←#40H ;30H单元 单元
4 寄存器间接寻址
以寄存器中内容为地址,以该地址中内容为操 作数的寻址方式。间接寻址的存储器空间包括内 部数据RAM和外部数据RAM。能用于寄存器间接 寻址的寄存器有R0,R1和DPTR。在寄存器名称 前面加一个符号@来表示寄存器间接寻址。 例:
2 直接寻址
指令中直接给出操作数地址的寻址方式, 能进行直接寻址的存储空间有SFR寄存器和内 部数据RAM。 例:
MOV MOV PSW,# 20H , A,30H , ;PSW←#20H ;A←(30H)
3 立即寻址
指令中直接给出操作数的寻址方式。立即操 作数用前面加有#号的8位或16位数来表示。 例:
程序存储器 执行前PC 执行前

8051单片机的指令列表

8051单片机的指令列表
1
1
ADDC A,#data
累加器加立即数和进位标志
2
1
ADDC A,direct
累加器加直接寻址单元和进位标志
2
1
INC A
累加器加1
1
1
INC Rn
寄存器加1
1
1
INC direct
直接寻址单元加1
2
1
INC @Ri
内部RAM单元加1
1
1
INC DPTR
数据指针加1
1
2
DA A
十进制调整
1
1
SUBB A,Rn
ORL C,bit
C逻辑或直接寻址位
2
2
ORL C,/bit
C逻辑或直接寻址位的反
2
2
JC rel
C为1转移
2
2
JNC rel
C为零转移
2
2
JB bit,rel
直接寻址位为1转移
3
2
JNB bit,rel
直接寻址为0转移
3
2
JBC bit,rel
直接寻址位为1转移并清该位
3
2
直接寻址单元或立即数
3
1
XRL A,Rn
累加器异或寄存器
1
1
XRL A,@Ri
累加器异或内部RAM单元
1
1
XRL A,#data
累加器异或立即数
2
1
XRL A,direct
累加器异或直接寻址单元
2
1
XRL direct,A
直接寻址单元异或累加器
2
1
XRL direct,#data
直接寻址单元异或立即数

80C51单片机原理

80C51单片机原理

80C51单片机原理RAM地址寄存器 RAM 128B 程序地址寄存器P0驱动器 P2锁存器 P2驱动器P1锁存器 暂存器2 B 寄存器 4KB ROM暂存器1ACC SP P0锁存器 PC PC 增1 缓冲器 P3锁存器 OSC中断、串行口及定时器PSW ALU DPTRP1驱动器 P3驱动器XTAL1XTAL2 P0.0~P0.7 P2.0~P2.7 P3.0~P3.7 P1.0~P1.7 RST ALEV CCV SS定时控制 指令译码器 指令寄存器 PSEN EA表2-1 P3口各引脚与第二功能表PSW 的各位定义见表80C51 P0~P3接口功能简见大多数口线都有双重功能,介绍如下: 1、P0口具有双重功能:(1) 作为通用I/O ,外接I/O 设备。

(2) 作为地址/数据总线。

在有片外扩展存储器的系统 中,低8位地址和数据由P0口分时传送。

PSW 位地址 PS W.7PSW .6PSW .5 PSW .4 PSW .3 PSW .2 PSW .1 PSW .0 位标志CY ACF0RS1RS0OVF1P2、P1口是唯一的单功能口:作为输入/输出口,P1口的每一位都可作为输入/输出口。

3、P2口具有双重功能:(1)作为输入/输出口。

(2)作为高8位地址总线。

在有片外扩展存储器的系统中,高8位地址由P2口传送。

4、P3口具有双重功能:(1)作第一功能使用时,其功能为输入/输出口。

(2)作第二功能使用时,每一位功能定义如表2.1所示。

80C51单片机的4个I/O口都是8位双向口,这些口在结构和特性上是基本相同的,但又各具特点,以下将分别介绍之。

图2-9 P0口某位的结构图2-10 P1口某位的结构图2-11 P2口某位的结构图2-12 P3口某位的结构P0~P3口使用时应注意事项1、如果80C51单片机内部程序存贮器ROM够用,不需要扩展外部存贮器和I/O接口,80C51的四个口均可作I/O口使用。

8051单片机指令表

8051单片机指令表

8051单片机指令表助记符指令说明字节数周期数(数据传递类指令)MOV A,Rn寄存器传送到累加器11 MOV A,direct直接地址传送到累加器21 MOV A,@Ri累加器传送到外部RAM(8地址)11 MOV A,#data立即数传送到累加器21 MOV Rn,A累加器传送到寄存器11 MOV Rn,direct直接地址传送到寄存器22 MOV Rn,#data累加器传送到直接地址21 MOV direct,Rn寄存器传送到直接地址21 MOV direct,direct直接地址传送到直接地址32 MOV direct,A累加器传送到直接地址21 MOV direct,@Ri间接RAM传送到直接地址22 MOV direct,#data立即数传送到直接地址32 MOV@Ri,A直接地址传送到直接地址12 MOV@Ri,direct直接地址传送到间接RAM21 MOV@Ri,#data立即数传送到间接RAM22 MOV DPTR,#data1616位常数加载到数据指针31 MOVC A,@A+DPTR代码字节传送到累加器12 MOVC A,@A+PC代码字节传送到累加器12 MOVX A,@Ri外部RAM(8地址)传送到累加器12 MOVX A,@DPTR外部RAM(16地址)传送到累加器12 MOVX@Ri,A累加器传送到外部RAM(8地址)12 MOVX@DPTR,A累加器传送到外部RAM(16地址)12 PUSH direct直接地址压入堆栈22POP direct直接地址弹出堆栈22XCH A,Rn寄存器和累加器交换11XCH A,direct直接地址和累加器交换21XCH A,@Ri间接RAM和累加器交换11XCHD A,@Ri间接RAM和累加器交换低4位字节11(算术运算类指令)INC A累加器加111 INC Rn寄存器加111 INC direct直接地址加121 INC@Ri间接RAM加111 INC DPTR数据指针加112 DEC A 累加器减111 DEC Rn寄存器减111 DEC direct直接地址减122 DEC@Ri间接RAM减111 MUL AB累加器和B寄存器相乘14 DIVAB累加器除以B寄存器14 DA A累加器十进制调整11 ADD A,Rn寄存器与累加器求和11 ADD A,direct直接地址与累加器求和21 ADD A,@Ri间接RAM与累加器求和11 ADD A,#data立即数与累加器求和21 ADDC A,Rn寄存器与累加器求和(带进位)11 ADDC A,direct直接地址与累加器求和(带进位)21 ADDC A,@Ri间接RAM与累加器求和(带进位)11 ADDC A,#data立即数与累加器求和(带进位)21 SUBB A,Rn累加器减去寄存器(带借位)11 SUBB A,direct累加器减去直接地址(带借位)21 SUBB A,@Ri累加器减去间接RAM(带借位)11 SUBB A,#data累加器减去立即数(带借位)21(逻辑运算类指令)ANL A,Rn寄存器“与”到累加器11 ANL A,direct直接地址“与”到累加器21ANL A,@Ri间接RAM“与”到累加器11 ANL A,#data立即数“与”到累加器21 ANL direct,A累加器“与”到直接地址21 ANL direct,#data立即数“与”到直接地址32 ORL A,Rn寄存器“或”到累加器12 ORL A,direct直接地址“或”到累加器21 ORL A,@Ri间接RAM“或”到累加器11 ORL A,#data立即数“或”到累加器21 ORL direct,A累加器“或”到直接地址21 ORL direct,#data立即数“或”到直接地址31 XRL A,Rn寄存器“异或”到累加器12 XRL A,direct直接地址“异或”到累加器21 XRL A,@Ri间接RAM“异或”到累加器11 XRL A,#data立即数“异或”到累加器21 XRL direct,A 累加器“异或”到直接地址21 XRL direct,#data立即数“异或”到直接地址31 CLR A累加器清零12 CPL A累加器求反11 RL A累加器循环左移11 RLC A带进位累加器循环左移11 RR A累加器循环右移11 RRC A带进位累加器循环右移11 SWAP A累加器高、低4位交换11 (控制转移类指令)JMP@A+DPTR相对DPTR的无条件间接转移12 JZ rel累加器为0则转移22 JNZ rel累加器为1则转移22 CJNE A,direct,rel比较直接地址和累加器,不相等转移32 CJNE A,#data,rel比较立即数和累加器,不相等转移32CJNE Rn,#data,rel比较寄存器和立即数,不相等转移22 CJNE@Ri,#data,rel比较立即数和间接RAM,不相等转移32 DJNZ Rn,rel寄存器减1,不为0则转移32 DJNZ direct,rel直接地址减1,不为0则转移32 NOP空操作,用于短暂延时11 ACALL add11绝对调用子程序22 LCALL add16长调用子程序32 RET从子程序返回12 RETI 从中断服务子程序返回12 AJMP add11无条件绝对转移22 LJMP add16无条件长转移32 SJMP rel无条件相对转移22(布尔指令)CLR C清进位位11 CLR bit清直接寻址位21 SETB C置位进位位11 SETB bit置位直接寻址位21 CPL C取反进位位11 CPL bit取反直接寻址位21 ANL C,bit直接寻址位“与”到进位位22 ANL C,/bit直接寻址位的反码“与”到进位位22 ORL C,bit直接寻址位“或”到进位位22 ORL C,/bit直接寻址位的反码“或”到进位位22 MOV C,bit 直接寻址位传送到进位位21 MOV bit,C进位位位传送到直接寻址22 JC rel如果进位位为1则转移22 JNC rel如果进位位为0则转移22 JB bit,rel如果直接寻址位为1则转移32 JNB bit,rel如果直接寻址位为0则转移32JBC bit,rel直接寻址位为1则转移并清除该位22(伪指令)ORG指明程序的开始位置DB定义数据表DW定义16位的地址表EQU给一个表达式或一个字符串起名DATA给一个8位的内部RAM起名XDATA给一个8位的外部RAM起名BIT给一个可位寻址的位单元起名END指出源程序到此为止(指令中的符号标识)Rn工作寄存器R0-R7Ri工作寄存器R0和R1@Ri间接寻址的8位RAM单元地址(00H-FFH)#data88位常数#data1616位常数addr1616位目标地址,能转移或调用到64KROM的任何地方addr1111位目标地址,在下条指令的2K范围内转移或调用Rel8位偏移量,用于SJMP和所有条件转移指令,范围-128~+127 Bit片内RAM中的可寻址位和SFR的可寻址位Direct直接地址,范围片内RAM单元(00H-7FH)和80H-FFH $指本条指令的起始位置。

单片机第4章8051单片机指令系统

单片机第4章8051单片机指令系统

单片机第4章8051单片机指令系统在单片机的世界里,指令系统就如同指挥官手中的指令手册,指引着单片机完成各种复杂的任务。

8051 单片机的指令系统更是其中的重要组成部分,它为我们提供了丰富多样的指令,让我们能够灵活地控制单片机的运行。

8051 单片机的指令系统可以分为五大类,分别是数据传送指令、算术运算指令、逻辑运算指令、控制转移指令和位操作指令。

数据传送指令是指令系统中的基础,就像是在战场上调配物资一样。

它能够实现寄存器之间、寄存器与存储器之间、立即数与寄存器或存储器之间的数据传递。

比如 MOV 指令,它可以将一个数据从源地址传送到目的地址。

假设我们要将立即数 50H 传送到累加器 A 中,就可以使用指令“MOV A, 50H”。

这样,累加器 A 就存储了 50H 这个数值。

算术运算指令则像是在进行战斗中的兵力计算。

它包括加法、减法、乘法和除法等运算。

ADD 指令用于加法运算,SUBB 指令用于带借位的减法运算。

例如,我们要将累加器 A 中的值与寄存器 B 中的值相加,并将结果存放在累加器 A 中,就可以使用指令“ADD A, B”。

如果要进行带借位的减法运算,比如从累加器 A 中减去寄存器 B 中的值以及借位标志位 CY 的值,可以使用指令“SUBB A, B”。

逻辑运算指令就像是在制定战略时的思考逻辑。

AND 指令用于逻辑与操作,ORL 指令用于逻辑或操作,XRL 指令用于逻辑异或操作。

以 AND 指令为例,如果我们要将累加器 A 中的值与立即数 80H 进行逻辑与操作,并将结果存放在累加器 A 中,就可以使用指令“AND A, 80H”。

控制转移指令则是指挥战斗中的战略部署调整。

它可以改变程序的执行顺序,使单片机能够根据不同的条件执行不同的程序段。

比如 JZ 指令,如果累加器 A 的值为 0,则程序跳转到指定的地址;JC 指令,如果进位标志位 CY 为 1,则程序跳转到指定的地址。

位操作指令则专注于对单个位的操作,就像是在精细地调整战斗中的某个关键环节。

8051单片机指令定义详解——ADDCA,(3)

8051单片机指令定义详解——ADDCA,(3)

8051单片机指令定义详解——ADDCA,(3)8051 单片机指令定义详解——ADDC A,(3)8051 单片机指令定义详解(ADDC A,)ADDC A,功能:带进位的加法。

说明:执行ADDC 指令时,把src-byte 所代表的源操作数连同进位标志一起加到累加器A 上,并将结果置于累加器A 中。

根据运算结果,若在第7 位有进位生成,则将进位标志置1,否则清零;若第3 位有进位生成,则置辅助进位标志为1,否则清零。

如果是无符号整数相加,进位的置位显示当前运算结果发生溢出。

如果第6 位有进位生成而第7 位没有,或第7 位有进位生成而第6 位没有,则将OV 置1,否则将OV 清零。

在进位有符号整数相加运算的时候,OV 置位,表示两个正整数之和为一负数,或是两个负整数之和为一正数。

本类指令的源操作数允许4 种寻址方式:寄存器寻址、直接寻址、寄存器间接寻址、和立即寻址。

示例:假设累加器A 中的数据为0C3H(11000011B),R0 的值为0AAH(10101010B),进位标志为1,执行如下指令:ADDC A,R0累加器A 中的结果为6EH(01101101B),辅助进位标志AC 被清零,进位标志C 和溢出标志OV 被置1。

ADDC A,Rn 字节数:1 执行周期:1 机器吗:00110rrr 操作:(A)←(A) +(C)+(Rn)ADDC A, direct 字节数:2 执行周期:1 机器吗:00110101 aaaaaaaa 操作:(A)←(A)+(C)+(direct)ADDC A, @Ri 字节数:1 执行周期:1 机器吗:0010011i 操作:(A)。

8051单片机指令详解

8051单片机指令详解

数据传递类指令(1)以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。

第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。

第四条指令是将立即数data送到A中。

下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。

MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。

MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。

如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。

MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。

(2)以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

(3)以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H(4)以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H(5)十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。

其中高8位送入DPH,低8位送入DPL。

例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。

8051单片机for循环的汇编指令

8051单片机for循环的汇编指令

8051单片机是一种十分经典的单片机产品,它的应用非常广泛。

在程序设计中,for循环是一种十分常见的结构,今天我们就来讨论一下在8051单片机中,如何使用汇编指令来实现for循环。

1. for循环的基本原理在C语言中,for循环的基本结构通常为:```cfor (初始化表达式; 条件表达式; 更新表达式) {循环体}```其中,初始化表达式用于初始化循环控制变量,条件表达式用于判断是否进入循环,更新表达式用于更新循环控制变量的值。

在8051单片机中,我们需要将这个逻辑转化为对应的汇编指令序列。

2. 实现for循环的汇编指令在8051单片机中,通常使用DJNZ(Decrement and Jump ifNot Zero)指令来实现for循环。

DJNZ指令有两个操作数,第一个操作数为目标位置区域,第二个操作数为循环计数器。

其基本格式为: ```DJNZ A, target```其中,A为循环计数器,target为跳转的目标位置区域。

该指令的作用是将A减一,如果A不为零,则跳转到目标位置区域执行,否则继续执行下一条指令。

3. for循环的汇编实现示例下面是一个简单的例子,演示了如何在8051单片机中使用汇编指令实现for循环:```assemblyMOV R0, #10 ; 初始化循环计数器,设置循环次数为10LOOP: ; 循环开始标签; 循环体; 在这里编写循环体的汇编指令; ...DJNZ R0, LOOP ; 循环计数器减一,如果不为零则跳转到LOOP标签```在这个示例中,使用MOV指令将立即数10加载到R0寄存器中,作为循环次数的初始值。

然后通过DJNZ指令进行循环,当R0不为零时跳转到LOOP标签执行循环体中的指令,直到循环结束。

4. 注意事项在使用汇编指令实现for循环时,需要注意一些细节:- 循环计数器的选择:在8051单片机中,有多个寄存器可以用作循环计数器,如R0、R1等。

需要根据具体的应用场景和程序需求来选择合适的寄存器。

8051_指令符号定义

8051_指令符号定义

■指令符號定義符號說明Rn 所選擇暫存器庫中之R0~R7,n=0~7。

direct 直接定址位址。

@Ri 間接定址位址,i=0或1。

#data 8位元資料常數。

#data16 16位元資料常數。

addr11 11位元位址常數,使用於ACALL及AJMP指令。

addr16 16位元位址常數,使用於LCALL及LJMP指令。

rel 8位元偏移位址常數,使用於SJMP及相對跳躍指令中。

bit 位元定址位址。

←以右方資料取代左方資料。

(X) 將X內容取出。

((X)) 以X內容為位址,以間接定址方式取出資料。

rrr n之2進制值。

如n=6,rrr=110。

符號定義■算數運算指令指令說明位元組機械週期ADD A,Rn 將暫存器內容加入A累加器 1 1 ADD A,direct 將直接位址內容加入A累加器 2 1 ADD A,@Ri 將間接位址內容加入A累加器 1 1 ADD A,#data 將8位元常數資料加入A累加器 2 1 ADDC A,Rn 將暫存器與進位C F加入A累加器 1 1 ADDC A,direct 直接位址內容與進位C F加入累加器 2 1 ADDC A,@Ri 間接位址內容與進位C F加入累加器 1 1 ADDC A,#data 將8位元常數資料與進位加入累加器 2 1 SUBB A,Rn A累加器內容減暫存器與借位C F 1 1 SUBB A,direct A累加器內容減直接位址內容與借位 2 1 SUBB A,@Ri A累加器內容減間接位址內容與借位 1 1 SUBB A,#data 累加器內容減8位元常數資料與借位 2 1 INC A A累加器內容加1 1 1 INC Rn 暫存器內容加1 1 1 INC direct 直接位址內容加1 2 1 INC @Ri 間接位址內容加1 1 1 INC DPTR 資料指標DPTR內容加1 1 2 DEC A A累加器內容減1 1 1 DEC Rn 暫存器內容減1 1 1 DEC direct 直接位址內容減1 2 1 DEC @Ri 間接位址內容減1 1 11 4 MUL AB A累加器乘以暫存器B,相乘結果之高8位元存入B,低8位元存入ADIV AB A累加器除以暫存器B,相除結果之商存1 4入A,餘數存入BDA A A累加器內容調整成10進制BCD數 1 1算數運算指令■ 邏輯運算指令指令說明位元組機械週期ANL A,Rn 暫存器AND至A累加器內 1 1 ANL A,direct 直接位址內容AND至A累加器內 2 1 ANL A,@Ri 間接位址內容AND至A累加器內 1 1 ANL A,#data 8位元資料AND至A累加器內 2 1 ANL direct,A A累加器內容AND至直接位址內 2 1 ANL direct,#data8位元資料AND至直接位址內 3 2 ORL A,Rn 暫存器OR至A累加器內 1 1 ORL A,direct 直接位址內容OR至A累加器內 2 1 ORL A,@Ri 間接位址內容OR至A累加器內 1 1 ORL A,#data 8位元資料OR至A累加器內 2 1 ORL direct,A A累加器內容OR至直接位址內 2 1 ORL direct,#data8位元資料OR至直接位址內 3 2 XRL A,Rn 暫存器XOR至A累加器內 1 1 XRL A,direct 直接位址內容XOR至A累加器內 2 1 XRL A,@Ri 間接位址內容XOR至A累加器內 1 1 XRL A,#data 8位元資料XOR至A累加器內 2 1 XRL direct,A A累加器內容XOR至直接位址內 2 1 XRL direct,#data8位元資料XOR至直接位址內 3 2 CLR A 清除A累加器 1 1 CPL A A累加器內容取補數 1 1 RL A A累加器內容向左旋轉1位元 1 1 RLC A A累加器與進位C F一起左旋1位元 1 1 RR A A累加器內容向右旋轉1位元 1 1 RRC A A累加器與進位C F一起右旋1位元 1 1 SWAP A A累加器的高低4位元互相交換 1 1邏輯運算指令■ 資料轉移指令指令說明位元組機械週期MOV A,Rn 將暫存器內容移入A累加器 1 1 MOV A,direct 將直接位址內容移入A累加器 2 1 MOV A,@Ri 暫存器間接位址內容移入A累加器 1 1 MOV A,#data 將8位元常數資料移入A累加器 2 1 MOV Rn,A 將A累加器內容移入暫存器 1 1 MOV Rn,direct 將直接位址內容移入暫存器 2 2 MOV Rn,#data 將8位元常數資料移入暫存器 2 1 MOV direct,A 將A累加器內容移入直接位址內 2 1 MOV direct,Rn 將暫存器內容移入直接位址內 2 2 MOV direct,direct 將直接位址內容移入直接位址內 3 2 MOV direct,@Ri 暫存器間接定址內容移入直接位址內 2 2 MOV direct,#data 將8位元常數資料移入直接位址內 3 2 MOV @Ri,A 將A累加器內容移入間接位址內 1 1 MOV @Ri,direct 將直接位址內容移入間接位址內 2 2 MOV @Ri,#data 將8位元常數資料移入間接位址內 2 1 MOV DPTR,#data16 將16位元常數資料移入資料指標內 3 2 MOVC A,@A+DPTR 將程式記憶體內容移入A累加器內 1 2 MOVC A,@A+PC 將程式記憶體內容移入A累加器內 1 2 MOVX A,@Ri 將外部資料記憶體內容移入A累加器 1 2 MOVX A,@DPTR 將外部資料記憶體內容移入A累加器 1 2 MOVX @Ri,A 將A累加器內容移入外部資料記憶體 1 2 MOVX @DPTR,A 將A累加器內容移入外部資料記憶體 1 2 PUSH direct 將直接位址內容存入堆疊內 2 2 POP direct 自堆疊頂端取出資料存入直接位址內 2 2 XCH A,Rn A累加器內容與暫存器內容互換 1 1 XCH A,direct A累加器內容與直接位址內容互換 2 1 XCH A,@Ri A累加器內容與間接位址內容互換 1 1 XCHD A,@Ri 累加器與間接位址低4位元內容互換 1 1資料轉移指令■布林運算指令指令說明位元組機械週期CLR C 清除進位旗標C F=0 1 1 CLR bit 清除位元位址內容 2 1 SETB C 設定進位旗標C F=1 1 1 SETB bit 設定位元位址內容 2 1 CPL C 將進位旗標C F內容取補數 1 1 CPL bit 將位元位址內容取補數 2 1 ANL C,bit 將位元位址內容AND至C F內 2 1 ANL C,/bit 將位元位址內容取補數AND至C F內 2 2 ORL C,bit 將位元位址內容OR至C F內 2 2 ORL C,/bit 將位元位址內容取補數OR至C F內 2 2 MOV C,bit 將位元位址內容移入進位旗標C F內 2 1 MOV bit,C 將進位旗標C F移入位元位址內 2 2 JC rel 若C F=1,則跳至相對位址rel 2 2 JNC rel 若C F=0,則跳至相對位址rel 2 2 JB bit,rel 若 (bit)=1,則跳至相對位址rel 3 2 JNB bit,rel 若 (bit)=0,則跳至相對位址rel 3 2 JBC bit,rel 若 (bit)=1,則跳至相對位址rel,同時清3 2除位元位址bit內容布林運算指令■程式分支指令指令說明位元組機械週期ACALL addrl1 副程式呼叫(可定址2KB範圍) 2 2 ACALL addrl6 副程式呼叫(可定址64KB範圍) 3 2 RET 自副程式返回主程式 1 2 RETI 自中斷副程式返回主程式 1 2 AJMP addrl1 絕對跳躍 (2KB範圍) 3 2 LJMP addrl6 遠程跳躍 (64KB範圍) 3 2 SJMP rel 相對跳躍 (-128byte ~ +127byte) 2 2 JMP @A+DPTR 間接跳躍 (64KB範圍) 1 2 JZ rel 若A=0,則跳至rel位址2 2範圍-128byte ~ +127byteJNZ rel 若A≠0,則跳至rel位址2 2範圍-128byte ~ +127byteCJNE A,direct,rel 若A累加器與直接位址內3 2容不相等,則跳至rel位址範圍-128byte ~ +127byteCJNE A,#data,rel 若A≠data,則跳至rel位址,範圍3 2-128byte ~ +127byteCJNE Rn,#data,rel 若暫存器內容≠data,則跳至rel位址3 2範圍-128byte ~ +127byteCJNE @Ri,#data,rel 若間接位址內容≠data,則跳至rel位3 2址,範圍-128byte ~ +127byteDJNZ Rn,rel 暫存器內容減1,若不等於0,則跳2 2至rel位址DJNZ direct,rel 直接位址內容減1,若不等於0,則3 2跳至rel位址NOP 無動作 1 1程式分支指令。

标准8051单片机指令说明

标准8051单片机指令说明

标准8051单片机指令说明1.ACALL addrll指令名称:绝对调用指令指令代码:指令功能:构造目的地址,进行子程序调用。

其方法是以指令提供的11位地址(A10~A0)取代PC的低11位,PC的高5位不变。

操作内容:P C←(PC)+2SP←(PC)+1(SP)←(PC)7~0SP←(SP)+1(SP) ←(PC)15~8PC10~0←addr10~0字节数:2机械周期:2使用说明:由于指令只给出子程序地址的低11位,因此调任范围是2KB.2.ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加.操作内容:A←(A)+(Rn),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV3.ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数:2机器周期:1影响标志位:C,AC,OV4.ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV5.ADDC A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数:2机器周期:1影响标志位:C,AC,OV6.ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H ~3FH指令功能:累加器内容,寄存器内容与进位位相加操作内容:A←(A)+(Rn)+(C),n=0 ~7字节数:1机器周期:1影响标志位:C,AC,OV7.ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容,内部RAM低128单元或专用寄存器内容与进位位相加操作内容:A←(A)+(direct)+(C)字节数:2机器周期:1影响标志位:C,AC,OV8.ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H ~37H指令功能:累加器内容,内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV9.ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容,立即数及进位位相加操作内容:A←(A)+data+(C)字节数:2机器周期:1影响标志位:C,AC,OV10.AJMP addrll指令名称:绝对转移指令指令功能:构造目的地址,实现程序转移.其方法是以指令提供的11位地址,取代PC的低11位,而PC的高5位保持不变操作内容:PC←(PC)+2PC10~0←addrll字节数:2机器周期:2使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB11.ANL A,Rn指令名称:寄存器逻辑与指令指令代码:58H~5FH指令功能:累加器内容逻辑与寄存器内容操作内容:A←(A)∧(Rn),n=0~7字节数:1机器周期:112.ANL A,direct指令名称:直接寻址逻辑与指令指令代码:55H指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容操作内容:A←(A) ∧(direct)字节数:2机械周期:113.ANL A,@Ri指令名称:间接寻址逻辑与指令指令代码:56H~57H指令功能:累加器内容逻辑与内部RAM低128单元内容操作内容:A←(A) ∧(Ri) i=0,1字节数:1机器周期:114.ANL A,#data指令名称:立即数逻辑与指令指令代码:54H指令功能:累加器内容逻辑与立即数操作内容:A←(A) ∧data字节数:2机器周期:115.ANL direct,A指令名称:累加器逻辑与指令指令代码:52H指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容操作内容: direct←(A) ∧direct字节数:2机器周期:116.ANL direct,# data指令名称:逻辑与指令指令代码:53H指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数操作内容: direct←(direct) ∧data字节数:3机械周期:217.ANL C,bit指令名称:位逻辑与指令指令代码:82H指令功能:进位标志逻辑与直接寻址位操作内容:C←(C) ∧(bit)字节数 :2机械周期:218.ANL C,/bit指令名称:位逻辑与指令指令代码:B0指令功能:进位标志与直接寻址位的反操作内容: C←(C) ∧(bit)字节数 :2机械周期:219.CJNE A, direct,rel指令名称:数值比较转移指令指令代码:B5H指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移操作内容:若(A)=( direct),则PC←(PC)+3,C←0若(A)>(direct),则PC←(PC)+3+rel,C←0若(A)<(direct),则PC←(PC)+3+rel,C←1字节数:3机械周期:220.CJNE A,# data,rel指令名称: 数值比较转移指令指令代码:84H指令功能:累加器内容与立即数比较,不等则转移操作内容:若(A)=data,则PC←(PC)+3,C←0若(A)>data,则PC←(PC)+3+rel,C←0若(A)<data,则PC←(PC)+3+rel,C←1字节数 :3机械周期:221.CJNE Rn,#data,rel指令名称:数值比较转移指令指令代码:B8H~BFH指令功能:寄存器内容与立即数比较操作内容:若(Rn)=data,则PC←(PC)+3,C←0若(Rn)>data,则PC←(PC)+3+rel,C←0若(Rn)<data,则PC←(PC)+3+rel,C←1字节数: 3机械周期:222. CJNE @Ri,#data,rel指令名称: 数值比较转移指令指令代码:B6H~B7H指令功能:内部RAM低128单元内容与立即数比较,不等则转移操作内容: 若(Ri)=data,则PC←(PC)+3,C←0若(Ri)>data,则PC←(PC)+3+rel,C←0若(Ri)<data,则PC←(PC)+3+rel,C←1字节数:3机械周期:223.CLR A指令名称:累加器清零指令指令代码:E4H指令功能:累加器清零操作内容:A←0字节数: 1机械周期:124.CLR C指令名称:进位标志清零指令指令代码:C3指令功能: 进位位清零操作内容:C←0字节数:1机械周期:1指令名称:直接寻址位清零指令指令代码:C2H指令功能: 直接寻址位清零操作内容: bit←0字节数: 2机械周期:126.CPL A指令名称:累加器取反指令指令代码:F4H指令功能:累加器取反操作内容:A←(A)字节数:1机械周期:127.CPL C指令名称:进位标志取反指令指令代码:B3H指令功能:进位标志位状态取反操作内容:C←(C取反)字节数: 1机械周期:128.CPL bit指令名称:直接寻址位取反指令指令代码:B2H指令功能: :直接寻址位取反操作内容: bit←(bit取反)字节数:2机械周期:129.DA A指令名称:十进制调整指令指令代码:D4H指令功能:对BCD码加法运算的结果进行有条件的修正操作内容:若(A)3~0>9∨(AC)=1,则A3~0←(A)3~0+6若(A)7~4>9∨(AC)=1,则A7~4←(A)7~4+6若(A)7~4=9∧(A)3~0>9,则A7~4←(A) 7~4+6 字节数:1机械周期:130.DEC A指令名称:累加器减1指令指令代码:14H指令功能: 累加器内容减1操作内容:A←(A)-1字节数: 1机械周期:1指令名称:寄存器减1指令指令代码:18H~1FH指令功能: 寄存器内容减1操作内容:Rn←(Rn)-1,n=0~7字节数:1机械周期:132.DEC direct指令名称:直接寻址减1指令指令代码:15H指令功能:内部RAM低128单元及专用寄存器内容减1操作内容: direct←(direct)-1字节数:2机械周期:133.DEC @Ri指令名称:间接寻址减1指令指令代码:16H~17H指令功能: :内部RAM低128单元内容减1操作内容: Ri←(Ri)-1,i=0,1字节数: 1机械周期:134.DIV AB指令名称:无符号数除法指令指令代码:84H指令功能:A的内容被B的内容除.指令执行后,商存A中,余数存于B中操作内容:A←(A)/(B)的商B←(A)/(B)的余数字节数: 1机械周期:4影响标志位:C 被清零;若B=00H,除法无法进行,并使OV=1;否则OV=0 35.DJNZ Rn,rel指令名称:寄存器减1条件转移指令指令代码:D8H~DFH指令功能:寄存器内容减1.不为0转移;为0顺序执行操作内容:Rn←(Rn)-1,n=0~7若(Rn)≠0,则PC←(PC)+2+rel若(Rn)=0,则PC←(PC)+2字节数: 2机械周期:236.DJNZ direct,rel指令名称:直接寻址单元减1条件转移指令指令代码:D5H指令功能:内部RAM低128单元内容减1,不为0转移,为0顺序执行操作内容:direct←(direct)-1若(direct)≠0,则PC←(PC)+3+rel若(direct)= 0,则PC←(PC)+3字节数:3机械周期:237.INC A指令名称:累加器加1指令指令代码:04H指令功能:累加器内容加1操作内容:A←(A)+1字节数:1机械周期:138.INC Rn指令名称:寄存器加1指令指令代码:08H~0FH指令功能:寄存器内容加1操作内容:Rn←(Rn)+1,n=0~7字节数:1机械周期:139.INC direct指令名称:直接寻址单元加1指令指令代码:05H指令功能:内部RAM低128单元或专用寄存器内容加1操作内容:direct←(direct)+1字节数:2机械周期:140.INC @Ri指令名称:间接寻址单元加1指令指令代码:06H~07H指令功能:内部RAM低128单元内容加1操作内容:(Ri) ←((Ri))+1.i=0,1字节数:1机械周期:141.INC DPTR指令名称:16位数据指针加1指令指令代码:A3H指令功能:数据指针寄存器DPTR内容加1操作内容:DPTR←(DPTR)+1字节数:1机械周期:242.JB bit rel指令名称:位条件转移指令指令代码:20H指令功能:根据指定位的状态,决定程序是否转移.若为1则转移,否则顺序执行操作内容:若(bit)=1,则PC←(PC)+3+rel若(bit) ≠1,则PC←(PC)+3字节数:3机械周期:243.JBC bit rel指令名称:位条件转移清零指令指令代码:10H指令功能:对指定位的状态进行测试.若为1则把该位清零并进行转移;否则顺序执行操作内容:若(bit)=1,则PC←(PC)+3+rel,bit←0若(bit) ≠1,则PC←(PC)+3字节数:3机械周期:244.JC rel指令名称:累加位条件转移指令指令代码:40H指令功能:根据累加位(C)的状态决定程序是否转移,若为1则转移,否则顺序顺序执行操作内容:若(C)=1,则PC←(PC)+2+rel若(C)≠1,则PC←(PC)+2字节数:2机械周期:245.JMP @A+DPTR指令名称:无条件间接转移指令指令代码:73H指令功能:A内容与DPTR内容相加作为转移目的地址,进行程序转移操作内容:PC←(A)+(DPTR)字节数:1机械周期:246.JNB bit rel指令名称:位条件转移指令指令代码:30H指令功能:根据指定位的状态,决定程序是否转移.若为0则转移,否则顺序执行操作内容:若(bit)=0,则PC←(PC)+3+rel若(bit) ≠0,则PC←(PC)+3字节数:3机械周期:247.JNC rel指令名称:累加位条件转移指令指令代码:50H指令功能:根据累加位(C)的状态决定程序是否转移,若为0则转移,否则顺序顺序执行操作内容:若(C)=0,则PC←(PC)+2+rel若(C)≠0,则PC←(PC)+2字节数:2机械周期:248.JNZ rel指令名称:判0转移指令指令代码:70H指令功能:累加位 (A)的内容不为0,则程序转移;否则顺序执行操作内容:若(A) ≠0,则PC←(PC)+2+rel若(A)=0,则PC←(PC)+2字节数:2机械周期:249.JZ rel指令名称:判0转移指令指令代码:60H指令功能:累加位 (A)的内容为0,则程序转移;否则顺序执行操作内容:若(A) = 0,则PC←(PC)+2+rel若(A) ≠0,则PC←(PC)+2字节数:2机械周期:250.LCALL addr16指令名称:长调用指令指令代码:12H指令功能:按指令给定地址进行子程序调用操作内容:PC←(PC)+3SP←(SP)+1(SP) ←(PC)7~0SP←(SP)+1(SP) ←(PC)15~8PC←addr16字节数:3机械周期:2使用说明:在职6KB的范围内调用子程序51.LJMP addr16指令名称:长转移指令指令代码:02H指令功能:使程序按指定地址进行无条件转移操作内容:PC←addr16字节数:3机械周期:252.MOV A,Rn指令名称:寄存器数据传送指令指令代码:E8H~EFH指令功能:寄存器内容送累加器操作内容:A←(Rn),n=0~7字节数:1机械周期:153.MOV A,direct指令名称:直接寻址数据传送指令指令代码:E5H指令功能:内部RAM低128(书上说的是126)单元或专用寄存器内容送累加器操作内容:A←(direct)字节数:2机械周期:154.MOV A ,@Ri指令名称:间接寻址数据传送指令指令代码:E6H~E7H指令功能:内部低128单元内容送累加器 (我认为描述不当)操作内容:A←((Ri)),i=0,1字节数:1机械周期:155.MOV A,#data指令名称:立即数据传送指令指令代码:74H指令功能:立即数送累加器操作内容:A←data字节数:2机械周期:156.MOV Rn,A指令名称:累加器数据传送指令指令代码:F8H~FFH指令功能:累加器内容送寄存器操作内容:Rn←(A)字节数:1机械周期:157.MOV Rn, direct指令名称:直接寻址数据传送指令指令代码:A8H~AFH指令功能:内部RAM低128单元或专用寄存器内容送累加器操作内容:Rn←(direct),n=0~7字节数:2机械周期:2指令名称:立即数传送指令指令代码:78H~7FH指令功能:立即数送寄存器操作内容:Rn←data,n=0~7字节数:2机械周期:159.MOV direct,A指令名称:累加器数据传送指令指令代码:F5H指令功能:累加器内容传送内部RAM低128单元或专用寄存器操作内容:direct←(A)字节数:2机械周期:160. MOV direct,Rn指令名称:寄存器数据传送指令指令代码:88H~8FH指令功能:寄存器内容传送内部RAM低128单元或专用寄存器操作内容:direct←(Rn),n=0~7字节数:2机械周期:261.MOV direct2, direct1指令名称:直接寻址数据传送指令指令代码:85H指令功能:内部RAM低128(书上是123)单元或专用寄存器之间相互传送操作内容:direct2←(direct1)字节数:3机械周期:262.MOV direct,@Ri指令名称:间接寻址数据传送指令指令代码:86H~87H指令功能:内部RAM低128单元内容传送内部RAM低128单元或专用寄存器操作内容:direct←((Ri)),i=0.1字节数:2机械周期:263.MOV direct,#data指令名称:立即数传送指令指令代码:75H指令功能:立即数送内部RAM低128单元或专用寄存器操作内容:direct←data字节数:3机械周期:2指令名称:累加器数据传送指令指令代码;F6H~F7H指令功能:累加器内容送内部RAM低128单元操作内容:(Ri) ←(A),i=0,1字节数:1机械周期:165.MOV @Ri, direct指令名称:直接寻址数据传送指令指令代码;A6H~A7H指令功能: 内部RAM低128单元或专用寄存器内容送内部RAM低128单元操作内容:字节数:2机械周期:266.MOV @Ri,#data指令名称:立即数传送指令指令代码;76H~77H指令功能:立即数送内部RAM低128单元操作内容: (Ri) ←data,i=0,1字节数:2机械周期:167.MOV C,bit指令名称:位数据传送指令指令代码;A2H指令功能:内部RAM可寻址位或专用寄存器的位状态送累加位C操作内容:C←(bit)字节数:2机械周期:168.MOV bit,C指令名称:累加位数据传送指令指令代码;92H指令功能: 累加位(书上写的是器)状态送内部RAM可寻址位或专用寄存器的指定位操作内容: bit←(C)字节数:2机械周期:269.MOV DPTR,#datal6指令名称:十六位数据传送指令指令代码;90H指令功能:十六位立即数送数据指针操作内容:DPH←data15~8DPL←data7~0字节数:3机械周期:270.MOVC A,@A+DPTR指令名称: 程序存储器读指令指令代码:93H指令功能:读程序存储器单元内容送累加器操作内容:A←(A)+(DPTR)字节数:1机械周期:2使用说明:变址寄存器A内容加基址寄存器DPTR内容时,低8位产生的进位直接加到高位,不影响进位标志71.MOVC A,@A+PC指令名称: 程序存储器读指令指令代码:83H指令功能:读程序存储器内容送累加器操作内容:A←((A)+(PC))字节数:1机械周期:2使用说明: 变址寄存器A内容加基址寄存器DPTR内容时,低8位产生的进位直接加到高位,不影响进位标志72.MOVX A,@Ri指令名称:寄存器间接寻址外部RAM读指令指令代码:E2H~E3H指令功能:读外部RAM低256单元数据送累加器字节数:1机械周期;273.MOVX A,@DPTR指令名称:数据指针间接寻址外部RAM读指令指令代码:E0H指令功能:读外部RAM单元数据送累加器操作内容:A←((DPTR))字节数:1机械周期:274.MOVX @Ri,A指令名称:寄存器间接寻址外部RAM写指令指令代码:F2H~F3H指令功能:把累加器内容写入外部RAM低256单元数据操作内容:(Ri) ←(A),i=0,1字节数:1机械周期;275.MOVX @DPTR,A指令名称:数据指针间接寻址外部RAM写指令指令代码:F0H指令功能:把累加器内容写入外部RAM单元操作内容: DPTR←(A)字节数:1 , 机械周期:276.MUL AB指令名称:乘法指令指令代码:A4H指令功能:实现8位无符号数乘法运算.两个乘数分别放在累加器A和寄存器B中.乘积为16,低8位在B中,高8位在A中操作内容:AB←(A)×(B)字节数:1机械周期:4影响标志位:进位标志复位.若乘积大于255,则OV标志置位;否则复位77.NOP指令名称: 空操作指令指令代码:00H指令功能:不执行任何操作,常用于产生一个周期的时间延迟操作内容:PC←(PC)+1字节数:1机械周期:178.ORL A,Rn指令名称:逻辑或操作指令指令代码:48H~4FH指令功能:累加器内容与寄存器内容进行逻辑或操作操作内容:A1(书上在个1) ←(A)∨(Rn),n=0~7字节数:1机械周期:179.ORL A,direct指令名称:指令代码:45H操作内容: A ←(A)∨(direct)字节数:2机械周期:180.ORL A,@Ri指令名称: 逻辑或操作指令指令代码:46H~47H指令功能:累加器内容与内部RAM低128单元内容进行逻辑或操作操作内容: A ←(A)∨((Ri)),i=0,1字节数:1机械周期:181.ORL A,#data指令名称: 逻辑或操作指令指令代码:44H指令功能:累加器内容与立即数进行逻辑或操作操作内容: A ←(A)∨data字节数:2机械周期:182.ORL direct,A指令名称:逻辑或操作指令指令代码:42H指令功能:内部RAM低128单元或专用寄存器内容与累加器内容进行逻辑或操作操作内容:direct←(direct)∨(A)字节数:2机械周期:183.ORL direct,#data指令名称:逻辑或操作指令指令代码:43H指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑或操作操作内容:direct←(direct)∨(data )字节数:3机械周期:284.ORL C,bit指令名称:位逻辑或操作指令指令代码:72H指令功能:累加位C的状态与内部RAM可寻址位或专用寄存器指定位进行逻辑或操作操作内容:C←(C)∨(bit )字节数:2机械周期:285.ORL C,/bit指令名称:位反逻辑或操作指令指令代码:A0H指令功能:累加位C的状态与内部RAM可寻址位或专用寄存器指定位的反进行逻辑或操作操作内容:C←(C)∨(bit 非)字节数:2机械周期:2使用说明:指定位的状态取反后进行逻辑或操作,但并不改变指定位的原来状态86.POP direct指令名称:出栈指令指令代码:D0H指令功能:堆栈栈顶单元的内容送内部RAM低128单元或专用寄存器操作内容:direct←(SP)字节数:2机械周期:287.PUSH direct指令名称:进栈指令指令代码:C0H指令功能:内部RAM低128单元或专用寄存器内容送堆栈栈顶单元操作内容:SP←(SP)+1(SP)←(direct)字节数:2;机械周期:2指令名称:子程序返回指令指令代码:22H指令功能:子程序返回操作内容:PC15~8←((SP))SP←(SP)-1PC7~0←((SP))SP←(SP)-1字节数:1机械周期:289.RETL指令名称:中断返回指令指令代码:32H指令功能:中断服务程序返回操作内容:PC15~8←((SP))SP←(SP)-1PC7~0←((SP))SP←(SP)-1字节数:1机械周期:290.RL A指令名称:循环左移指令指令代码:23H指令功能:累加器内容循环左移一位操作内容:An+1←(An);n=0~6A0←(A7)字节数:1机械周期:191.RLC A指令名称:带进位循环左移指令指令代码:33H指令功能:累加器内容连同进位标志位循环左移一位操作内容:An+1(书上写的是减1)←(An);n=0~6 A0←(C)C←(A7)字节数:1机械周期:192.RR A指令名称:循环右移指令指令代码:03H指令功能:累加器内容循环右移一位操作内容:An←(An+1);n=0~6A7←(A0)字节数:1;机械周期:1指令名称:带进位循环右移指令指令代码:13H指令功能:累加器内容连同进位标志位循环右移一位操作内容:An←(An+1);n=0~6A7←(C)C←(A0)字节数:1机械周期:194.SETB c指令名称:进位标志置位指令指令代码:D3H指令功能: 进位标志置位操作内容:C←1字节数:1机械周期:195.SETB bit指令名称:直接寻址位置位指令指令代码:D2H指令功能: 内部RAM可寻址位或专用寄存器指定位置位操作内容:bit←1字节数:2机械周期:196.SJMP rel指令名称:短转移指令指令代码:80H指令功能:按指令提供的偏移量计算偏移的目的地址,实现程序的无条件相对转移操作内容:PC←(PC)+2PC←(PC)+rel字节数:2机械周期:2使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC-126) ~(PC+129).其中PC值为本指令的地址.97.SUBB A,Rn指令名称:寄存器寻址带进位减法指令指令代码:98H~9FH指令功能:累加器内容减寄存器内容和进位标志位内容操作内容:A←(A)-(Rn)-(C),n=0~7字节数:1机械周期:1影响标志位:当够减时,进位标志位复位;不够减时,进位标志置位.当位3发生借位时,AC置位,否则AC复位.当位6及位7不同时发生借位时,OV置位,否则OV复位98.SUBB A, direct指令名称:直接寻址带进位减法指令指令代码:95H指令功能:累加器内容减内部RAM低128单元或专用寄存器和进位标志位内容操作内容: A←(A)-( direct)-(C)字节数:2机械周期:1影响标志位:同SUBB A,Rn指令(序号97)99.SUBB A,@Ri指令名称: 间接寻址带进位减法指令指令代码:96H~97H指令功能: 累加器内容减内部RAM低128单元内容及进位标志位内容操作内容: A←(A)-((Ri))-(C),i=0,1字节数:1机械周期:1影响标志位:同SUBB A,Rn指令(序号97)100.SUBB A,#data指令名称:立即数带进位减法指令指令代码:94H指令功能:累加器内容减立即数及进位标志内容操作内容: A←(A)-data -(C)字节数:2机械周期:1影响标志位:同SUBB A,Rn指令(序号97)101.SWAP A指令名称:累加器高低半字节交换指令指令代码:C4H指令功能:累加器内容的高4位与低4位交换操作内容:(A) 7~4交换(A)3~0字节数:1机械周期:1102.XCH A,Rn指令名称:寄存器寻址字节交换指令指令代码:C8H~CFH指令功能: 寄存器寻址字节交换(书上没有交换二字)操作内容:(A)交换(Rn);n=0~7字节数:1机械周期:1103.XCH A, direct指令名称:直接寻址字节交换指令指令代码:C5H指令功能:累加器内容与内部低128单元或专用寄存器内容交换操作内容:(A)交换(direct)字节数:2; 机械周期:1104.XCH A,Ri指令名称: 间接寻址字节交换指令指令代码:C6H~C7H指令功能:累加器内容与内部RAM低128单元内容交换操作内容: (A)交换((Ri));i=0,1字节数:1机械周期:1105.XCHD A,@Ri指令名称:半字节交换指令指令代码:D6H~D7H指令功能: 累加器内容低4位与内部RAM低128单元内容低4位交换操作内容: (A)3~0交换((Ri))3~0;i=0,1字节数:1机械周期:1106.XRL A,Rn指令名称:逻辑异或操作指令指令代码:68H~6FH指令功能:累加器内容与寄存器内容进行逻辑异或操作操作内容:A←(A)异或(Rn);n=0←7字节数:1机械周期:1107.XRL A, direct指令名称: 逻辑异或操作指令指令代码:65H指令功能: 累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容: A←(A)异或(direct)字节数:2机械周期:1108.XRL A,@Ri指令名称: 逻辑异或指令指令代码:66H~67H指令功能: 累加器内容与内部RAM低128单元内容进行逻辑异或操作操作内容: A←(A)异或(Ri);i=0,1字节数:1机械周期:1109.XTL A,#data指令名称: 逻辑异或指令指令代码:64H指令功能: 累加器内容与立即数进行逻辑异或操作操作内容: A←(A)异或data字节数:1机械周期:1110 .XRL direct, A指令名称: 逻辑异或操作指令指令代码:62H指令功能: 累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容: direct←(direct)异或(A)字节数:2机械周期:1111 .XRL direct, #data指令名称: 逻辑异或操作指令指令代码:63H指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑异或操作操作内容: direct←(direct)异或(data)字节数:3机械周期:2。

51单片机汇编指令表

51单片机汇编指令表

以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。

- MOVC:将数据从外部代码存储器复制到累加器或寄存器。

2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。

- SUB:从累加器中减去另一个寄存器或存储器中的值。

- INC:将累加器或寄存器的值加1。

- DEC:将累加器或寄存器的值减1。

3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。

- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。

- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。

- CPL:对累加器或寄存器中的值进行按位取反操作。

4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。

- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。

5. 跳转指令:
- JMP:无条件跳转到指定的地址。

- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。

- AJMP:绝对跳转,跳转到指定的地址。

- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。

6. 位操作指令:
- SETB:将某个位设置为1。

- CLR:将某个位清零。

- JB:如果某个位为1,则跳转到指定地址。

- JNB:如果某个位为0,则跳转到指定地址。

8051单片机指令系统

8051单片机指令系统

8051 单片机指令系统难点 MCS-51 单片机的寻址方式 数据传送指令和算术运算指令的使用 位操作和控制转移类指令的使用要求掌握: MCS-51 单片机的寻址方式 指令系统的基本格式 指令系统的操作功能了解: 指令系统的基本格式 操作数的使用方法 指令系统的操作过程2.7.1MCS-51 单片机指令格式计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统. MCS—51 单片机的指令系统是一个具有 255 种代码的集合,绝大多数指令包含两个基本部 分:操作码和操作数.操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或 数据所存放的地址. MCS—51 指令系统中所有程序指令是以机器语言形式表示,可分为单字节,双字节, 三字节 3 种格式. 用二进制编码表示的机器语言由于阅读困难, 且难以记忆. 因此在微机控制系统中采用 汇编语言指令来编写程序.本章介绍 MCS—51 指令系统就是以汇编语言来描述的.表 1 汇编指令与指令代码代码字节 单字节 单字节 双字节 三字节指令代码 84 A3 7410 B440 rel汇编指令 DIV AB INC DPTR MOV A,#10H CJNE A,#40H,LOOP指令周期 四周期 双周期 单周期 双周期一条汇编语言指令中最多包含 4 个区段,如下所示: 标号: 操作码 目的操作数,源源操作数 ;注释标号与操作码之间": "隔开; 操作码与操作数之间用"空格"隔开; 目的操作数和源源操作数之间有", "分隔; 操作数与注释之间用"; "隔开. 标号是由用户定义的符号组成,必须用英文大写字母开始.标号可有可无,若一条指令 中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址, 在汇编时,把该地址赋值给标号. 操作码是指令的功能部分,不能缺省.MCS—51 指令系统中共有 42 种助记符,代表了 33 种不同的功能.例如 MOV 是数据传送的助记符. 操作数是指令要操作的数据信息.根据指令的不同功能,操作数的个数有 3,2,1 或没 有操作数.例如 MOV A,#20H,包含了两个操作数 A 和#20H,它们之间用","隔开. 注释可有可无, 加入注释主要为了便于阅读, 程序设计者对指令或程序段作简要的功能说明, 在阅读程序或调试程序时将会带来很多方便.2.7.2寻址方式所谓寻址方式,通常是指某一个 CPU 指令系统中规定的寻找操作数所在地址的方式, 或者说通过什么的方式找到操作数.寻址方式的方便与快捷是衡量 CPU 性能的一个重要方 面,MCS—51 单片机有七种寻找方式.1立即数寻址立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本 身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中.立即数只 能作为源操作数,不能当作目的操作数. 例如: MOV A,#52H ;A←52H MOV DPTR,#5678H ;DPTR←5678H 立即寻址示意图如 1 所示.图 1 立即寻址示意图2直接寻址在指令中含有操作数的直接地址, 该地址指出了参与操作的数据所在的字节地址或位地址. 例如: MOV A,52H ;把片内 RAM 字节地址 52H 单元的内容送累加器 A 中. MOV 52H,A ;把 A 的内容传送给片内 RAM 的 52H 单元中. MOV 50H,60H ;把片内 RAM 字节地址 60H 单元的内容送到 50H 单元中. MOV IE,#40H ;把立即数 40H 送到中断允许寄存器 IE.IE 为专用功能寄存器,其字节地址为 0A8H.该指令等价于 MOV 0A8H,#40H.INC60H;将地址 60H 单元中的内容自加 1.图 2 直接寻址方式示意图在 MCS-51 单片机指令系统中,直接寻址方式可以访问 2 种存储空间: (1)内部数据存储器的低 128 个字节单元(00H~7FH) (2)80H~FFH 中的(SFR)特殊功能寄存器. 这里要注意,指令 MOV A,#52H 与 MOV A,52H 指令的区别,后者表示把片内 RAM 字节地址为 52H 单元的内容传送到累加器(A) .3寄存器寻址由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址.寄存器 一般指累加器 A 和工作寄存器 R0~R7.例如: MOV A,Rn ;A←(Rn) 其中 n 为 0~7 之一,Rn 是工作寄存器. MOV Rn,A ;Rn←(A) MOV B,A ;B←(A) 寄存器寻址方式的寻址范围包括: 寄存器寻址的主要对象是通用寄存器,共有 4 组 32 个通用寄存器,但寄存器寻址只能 使用当前寄存器组.因此指令中的寄存器名称只能是 R0~R7.在使用本指令前,需通过 对 PSW 中 RS1,RS0 位的状态设置,来进行当前寄存器组的选择. 部分专用寄存器.累加器 A,B 寄存器以及数据指针 DPTR 等.4寄存器间接寻址方式由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址.这里 要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的 存储器单元地址. 寄存器间接寻址只能使用寄存器 Ro 或 Rl 作为地址指针, 来寻址内部 RAM(00H~FFH)中的数据.寄存器间接寻址也适用于访问外部 RAM,可使用 R0,Rl 或 DPTR 作为地址指 针.寄存器间接寻址用符号"@"表示.例如: MOV R0,#60H ;R0←60H MOV A, @R0 ;A ← ((R0)) MOV A ,@R1 ;A ← ((R1)) 指令功能是把 Ro 或 R1 所指出的内部 RAM 地址 60H 单元中的内容送累加器 A. 假 定(60H)=3BH,则指令的功能是将 3BH 这个数送到累加器 A. 例如, MOV DPTR,#3456H ;DPTR←3456H MOVX A,@DPTR ;A ←( (DPTR) ) 是把 DPTR 寄存器所指的那个外部数据存储器(RAM)的内容传送给 A,假设 (3456H)=99H,指令运行后(A)=99H. 同样,MOVX @DPTR,A;MOV @R1,A;也都是寄存器间接寻址方式.寄存 器间接寻址方式的示意图如图 3 所示.图 3 寄存器间接寻址方式示意图5位寻址MCS-51 单片机中设有独立的位处理器.位操作指令能对内部 RAM 中的位寻址区 (20H~2FH)和某些有位地址的特殊功能寄存器进行位操作.也就是说可对位地址空间的 每个位进行位状态传送,状态控制,逻辑运算操作.例如指令 SETB TR0 ;TR0←1 CLR 00H ; (00H)←0 MOV C,57H ;将 57H 位地址的内容传送到位累加器 C 中 ANL C,5FH ;将 5FH 位状态与进位位 C 相与,结果在 C 中6基址寄存器加变址寄存器间接寻址这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR 或 PC)的 内容为基本地址,加上变址寄存器 A 的内容形成 16 位的地址,访问程序存储器中的数据表 格.例如;MOVC A,@A + DPTR MOVC A,@A + PC JMP @A+DPTR MOVC A,@A+DPTR图 4 变址寻址方式示意图7相对寻址相对寻址以程序计数器 PC 的当前值作为基地址,与指令中给出的相对偏移量 rel 进 行相加,把所得之和作为程序的转移地址.这种寻址方式用于相对转移指令中,指令中的相 对偏移量是一个 8 位带符号数,用补码表示.可正可负,转移的范围为-128~+127.使用中 应注意 rel 的范围不要超出.例如: JZ LOOP DJNE R0,DISPLAY2.7.3 1指令系统指令分类MCS-51 指令系统有 42 种助记符,代表了 33 种功能,指令助记符与各种可能的寻址方 式相结合,共构成 111 条指令.在这些指令中,单字节指令有 49 条,双字节指令有 45 条, 三字节指令有 17 条;从指令执行的时间来看,单周期指令有 64 条,双周期指令有 45 条, 只有乘法,除法两条指令的执行时间是 4 个机器周期. 按指令的功能,MCS-51 指令系统可分为下列 5 类: (1)数据传送类指令(29 条) (2)算术运算类指令(24 条) (3)逻辑运算及移位类指令(24 条) (4)位操作类指令(17 条) (5)控制转移类指令(17 条) 在分类介绍指令前,先把描述指令的一些符号的意义作一简单介绍. Rn―当前选定的寄存器区中的 8 个工作寄存器R0~R7,即n=0~7. Ri―当前选定的寄存器区中的 2 个寄存器 R0,R1,i=0,1. Direct—8 位内部 RAM 单元的地址,它可以是一个内部数据区 RAM 单元(00H~7FH) 或特殊功能寄存器地址(I/O 端口,控制寄存器,状态寄存器 80H~0FFH) . #data—指令中的 8 位常数.#data16—指令中的 16 位常数. addr16—16 位的目的地址, 用于 LJMP, LCALL, 可指向 64KB 程序存储器的地址空间. addr11—11 位的目的地址,用于 AJMP,ACALL 指令.目的地址必须与下一条指令的 第一个字节在同一个 2KB 程序存储器地址空间之内. rel—8 位带符号的偏移量字节,用于 SJMP 和所有条件转移指令中.偏移量相对于下一 条指令的第一个字节计算,在—128~+127 范围内取值. bit—内部数据 RAM 或特殊功能寄存器中的可直接寻址位. DPTR—数据指针,可用作 16 位的地址寄存器. A—累加器 B—寄存器,用于 MUL 和 DIV 指令中. C—进位标志或进位位. @—间接寄存器或基址寄存器的前缀,如@Ri,@DPTR. /—位操作的前缀,表示对该位取反. (X)—X 中的内容. ( (X) )—由 X 寻址的单元中的内容. ←—箭头左边的内容被箭头右边的内容所替代.2数据传送类指令数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址.指令执行后, 源操作数保持不变,目的操作数为原操作数所替代 数据传送类指令用到的助记符有: MOV, MOVX, MOVC, XCH, XCHD, PUSH, POP, SWAP. 数据一般传送指令的助记符"MOV"表示 格式: MOV [目的操作数],[源操作数] 功能:目的操作数←(源操作数中的数据) 源操作数可以是:A,Rn,direct,@Ri,#data 目的操作数可以是:A,Rn,direct,@Ri 数据传送指令一般不影响标志,只有一种堆栈操作可以直接修改程序状态字 PSW,这 样,可能使某些标志位发生变化. ①以累加器为目的操作数的内部数据传送指令 MOV MOV MOV MOV A,Rn A,direct A,@Ri A,#data;A←(Rn) ;A←(direct) ;A←( (Ri) ) ;A←data这组指令的功能是:把源操作数的内容送入累加器 A.例如:MOV A,#10H,该指令 执行时,将立即数 10H(在 ROM 中紧跟在操作码后)送入累加器 A 中. ② 数据传送到工作寄存器 Rn 的指令 MOV MOV MOV Rn,A Rn,direct Rn,#data;Rn←(A) ;Rn←(direct) ;Rn←data这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的 R0~R7 中的某一个寄 存器. 指令中 Rn 在内部数据存储器中的地址由当前的工作寄存器区选择位 RS1, RS0 确定, 可以是 00H~07H,08H~0FH,10H~17H,18H~1FH.例如:MOV R0,A,若当前 RS1, RS0 设置为 00(即工作寄存器 0 区) ,执行该指令时,将累加器 A 中的数据传送至工作寄存 器 R0(内部 RAM 00H)单元中. ③ 数据传送到内部 RAM 单元或特殊功能寄存器 SFR 的指令 direct,A ;direct←(A) MOV direct,Rn ;direct←(Rn) MOV direct1,direct2 ;direct1←(direct2) MOV direct,@Ri ;direct←( (Ri) ) MOV direct,#data ;direct←#data MOV @Ri,A ; (Ri←(A) MOV @Ri,direct ; (Ri)←(direct) MOV @Ri,#data ; (Ri)←data MOV DPTR,#data16 ;DPTR←data16 MOV 这组指令的功能是:把源操作数的内容送入内部 RAM 单元或特殊功能寄存器.其中第 三条指令和最后一条指令都是三字节指令. 第三条指令的功能很强, 能实现内部 RAM 之间, 特殊功能寄存器之间或特殊功能寄存器与内部 RAM 之间的直接数据传送. 最后一条指令是 将 16 位的立即数送入数据指针寄存器 DPTR 中. 片内数据 RAM 及寄存器的数据传送指令 MOV,PUSH 和 POP 共 18 条,如图 5 所示.图 5 片内RAM及寄存器的数据传送指令④累加器 A 与外部数据存储器之间的传送指令 A,@DPTR ;A←(DPTR) MOVX A,@Ri ;A←( (Ri) ) MOVX @DPTR,A ; (DPTR)←A MOVX @Ri,A ; (Ri)← A MOVX 这组指令是: 在累加器 A 与外部数据存储器 RAM 单元或 I/O 口之间进行数据传送前两 条指令执行时,P3.7 引脚上输出有效信号,用作外部数据存储器的读选通信号;后两条指令执行时,P3.6 引脚上输出有效信号,用作外部数据存储器的写选通信号.DPTR 所包含的 16 位地址信息由 P0(低 8 位)和 P2(高 8 位)输出,而数据信息由 P0 口传送,P0 口作分 时复用的总线.由 Ri 作为间接寻址寄存器时,P0 口上分时 Ri 指定的 8 位地址信息及传送 8 位数据,指令的寻址范围只限于外部 RAM 的低 256 个单元. ⑤程序存储器内容送累加器 MOVC A,@A+PC MOVC A,@A+DPTR 这是两条很有用的查表指令, 可用来查找存放在外部程序存储器中的常数表格. 第一条 指令是以 PC 作为基址寄存器,A 的内容作为无符号数和 PC 的内容(下一条指令的起始地 址) 相加后得到一个 16 位的地址, 并将该地址指出的程序存储器单元的内容送到累加器 A. 这条指令的优点是不改变特殊功能寄存器 PC 的状态, 只要根据 A 的内容就可以取出表格中 的常数.缺点是表格只能放在该条指令后面的 256 个单元之中,表格的大小受到了限制,而 且表格只能被一段程序所利用. 第二条指令是以 DPTR 作为基址寄存器,累加器 A 的内容作为无符号数与 DPTR 内容 相加,得到一个 16 位的地址,并把该地址指出的程序存储器单元的内容送到累加器 A.这 条指令的执行结果只与指针 DPTR 及累加器 A 的内容有关,与该指令存放的地址无关,因 此,表格的大小和位置可以在 64KB 程序存储器中任意安排,并且一个表格可以为各个程序 块所公用. ⑥ 堆栈操作指令 PUSH direct POP direct 在 MCS-51 单片机的内部 RAM 中,可以设定一个先进后出,后进先出的区域,称其为 堆栈.在特殊功能寄存器中有一个堆栈指针 SP,它指出栈顶的位置.进栈指令的功能是: 首先将堆栈指针 SP 的内容加 1,然后将直接地址所指出的内容送入 SP 所指出的内部 RAM 单元;出栈指令的功能是:将 SP 所指出的内部 RAM 单元的内容送入由直接地址所指出的 字节单元,接着将 SP 的内容减 1. 例如:进入中断服务程序时,把程序状态寄存器 PSW,累加器 A,数据指针 DPTR 进 栈保护.设当前 SP 为 60H.则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH 执行后,SP 内容修改为 64H,而 61H,62H,63H,64H 单元中依次栈入 PSW,A,DPL, DPH 的内容,当中断服务程序结束之前,如下程序段(SP 保持 64H 不变) POP DPH POP DPL POP ACC POP PSW 指令执行之后,SP 内容修改为 60H,而 64H,63H,62H,61H 单元的内容依次弹出到 DPH,DPL,A,PSW 中. MCS-51 提供一个向上的堆栈,因此 SP 设置初值时,要充分考虑堆栈的深度,要留出 适当的单元空间,满足堆栈的使用.⑦ 字节交换指令 数据交换主要是在内部 RAM 单元与累加器 A 之间进行,有整字节和半字节两种交换. (1) 整字节交换指令 XCH XCH XCH A,Rn A,direct A,@Ri; (A) (Rn) ; (A) (direct) ; (A) ( (Ri) )(2)半字节交换指令 字节单元与累加器 A 进行低 4 位的半字节数据交换.只有一条指令. XCHD A,@Ri(3)累加器高低半字节交换指令 只有一条指令: SWAP A【例 1】 (R0)=30H, (A)=65H, (30H)=8FH 执行指令:XCH A,@R0 ; (R0)=30H, (A)=8FH, (30H)=65H XCHD A,@R0 ; (R0)=30H, (A)=6FH, (30H)=85H SWAP A ; (A)=56H数据交换指令 XCH,XCHD,和 SWAP 共 5 条,如图 6 所示.图6数据交换指令3算术运算类指令算术运算类指令共有 24 条,包括加,减,乘,除 4 种基本算术运算指令,这 4 种指令 能对 8 位的无符号数进行直接运算,借助溢出标志,可对带符号数进行补码运算;借助进位 标志,可实现多精度的加,减运算,同时还可对压缩的 BCD 码进行运算,其运算功能较强. 算术指令用到的助记符共有 8 种:ADD,ADDC,INC,SUBB,DEC,DA ,MUL,DIV. 算术运算指令执行结果将影响进位标志 (Cy) 辅助进位标志 , (Ac) 溢出标志位 , (Ov) . 但是加 1 和减 1 指令不影响这些标志.对标志位有影响的算术运算指令见表 3-10 中,×表 示指令运算的结果使该标志位置位或复位. 1. 加法指令 加法指令分为普通加法指令,带进位加法指令和加 1 指令. (1)普通加法指令 A,Rn ;A←(A)+(Rn) ADD A,direct ;A←(A)+(direct) ADD A,@Ri ;A←(A)+( (Ri) ) ADD A,#data ;A←(A)+ data ADD 这组指令的功能是将累加器 A 的内容与第二操作数相加,其结果放在累加器 A 中.相 加过程中如果位 7(D7)有进位,则进位标志 Cy 置"1" ,否则清"0" ;如果位 3(D3)位 有进位,则辅助进位标志 Ac 置"1" ,否则清"0" . 对于无符号数相加,若 Cy 置"1" ,说明和数溢出(大于 255) .对于带符号数相加时, 和数是否溢出(大于+127 或小于-128) ,则可通过溢出标志 OV 来判断,若 OV 置为"1" , 说明和数溢出. 【例 2】 (A)=85H,R0=20H, (20H)=0AFH,执行指令: ADD A,@R0结果: (A)=34H;Cy=1;AC=1;OV=1. 对于加法,溢出只能发生在两个加数符号相同的情况.在进行带符号数的加法运算时,溢出标志 OV 是一个重要的编程标志,利用它可以判断两个带符号数相加,和数是否溢出. (2)带进位加法指令 A,Rn ;A←(A)+(Rn)+(Cy) ADDC A,direct ;A←(A)+(direct)+(Cy) ADDC A,@Ri ;A←(A)+( (Ri) )+(Cy) ADDC A,#data ;A←(A)+ data+(Cy) ADDC 这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一 次进位标志 Cy 的内容也一起加进去,对于标志位的影响也与普通加法指令相同. 【例 3】 (A)=85H, (20H)=0FFH,Cy=1 执行指令: ADDC A,20H结果: (A)=85H;Cy=1;AC=1;OV=0. (3)增量指令;A←(A)+1 INC A ;Rn ←(Rn)+1 INC Rn ;direct ←(direct)+1 INC direct ;(Ri)←( (Ri))+1 INC @Ri ;DPTR ←(DPTR)+1 INC DPTR 这组指令的功能是:将指令中指出的操作数的内容加 1.若原来的内容为 0FFH,则加 1 后将产生溢出,使操作数的内容变成 00H,但不影响任何标志.最后一条指令是对 16 位 的数据指针寄存器 DPTR 执行加 1 操作,指令执行时,先对低 8 位指针 DPL 的内容加 1, 当产生溢出时就对高 8 位指针 DPH 加 1,但不影响任何标志. 【例 4】 (A)=12H, (R3)=0FH, (35H)=4AH, (R0)=56H, (56H)=00H 执行如下指令:INC A ;执行后(A)=13H INC R3 ;执行后(R3)=10H INC 35H ;执行后(35H)=4BH INC @R0 ;执行后(56H)=01H (4)十进制调整指令DA A 这条指令对累加器 A 参与的 BCD 码加法运算所获得的 8 位结果进行十进制调整, 使累 加器 A 中的内容调整为二位压缩型 BCD 码的数.使用时必须注意,它只能跟在加法指令之 后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位. 执行该指令时,判断 A 中的低 4 位是否大于 9,若满足大于则低 4 位做加 6 操作; 同样,A 中的高 4 位大于 9 则高 4 位加 6 操作. 例如:有两个 BCD 数 36 与 45 相加,结果应为 BCD 码 81,程序如下: MOV A,#36H ADD A,#45H DA A 这段程序中,第一条指令将立即数 36H(BCD 码 36H)送入累加器 A;第二条指令进 行如下加法:得结果 7BH;第三条指令对累加器 A 进行十进制调整,低 4 位(为 0BH)大于 9,因 此要加 6,最后得到调整的 BCD 码 81. 2. 减法指令 (1)带进位减法指令 A,Rn ;A←(A)-(Rn)-(Cy) SUBB A,direct ;A←(A)-(direct)-(Cy) SUBB A,@Ri ;A←(A)-(Ri)-(Cy) SUBB A,#data ;A←(A)-data-(Cy) SUBB 这组指令的功能是:将累加器 A 的内容与第二操作数及进位标志相减,结果送回到累 加器 A 中. 在执行减法过程中, 如果位 7 (D7) 有借位, 则进位标志 Cy 置 "1" 否则清 , "0" ; 如果位 3(D3)有借位,则辅助进位标志 AC 置"1" ,否则清"0" .若要进行不带借位的减 法操作,则必须先将 Cy 清"0" (2)减 1 指令;A←(A)-1 A DEC ;Rn←(Rn)-1 DEC Rn ;direct←(direct)-1 DEC direct ;(Ri)←( (Ri))-1 DEC @Ri 这组指令的功能是:将指出的操作数内容减 1.如果原来的操作数为 00H,则减 1 后将 产生溢出,使操作数变成 0FFH,但不影响任何标志.3. 乘法指令 乘法指令完成单字节的乘法,只有一条指令: MUL AB 这条指令的功能是:将累加器 A 的内容与寄存器 B 的内容相乘,乘积的低 8 存放在累加 器 A 中,高 8 位存放于寄存器 B 中,如果乘积超过 0FFH,则溢出标志 OV 置"1" ,否则清 "0" ,进位标志 Cy 总是被清"0" . 【例 5】 (A)=50H, (B)=0A0H,执行指令: MUL AB 结果: (B)=32H, (A)=00H(即乘积为 3200H) ,Cy=0,OV=1. 4. 除法指令 除法指令完成单字节的除法,只有一条指令: DIV AB这条指令的功能是:将累加器 A 中的内容除以寄存器 B 中的 8 位无符号整数,所得商 的整数部分放在累加器 A 中, 余数部分放在寄存器 B 中, 清进位标志 Cy 和溢出标志 OV 为 "0" 若原来 B 中的内容为 0, . 则执行该指令后 A 与 B 中的内容不定, 并将溢出标志置 "1" , 在任何情况下,进位标志 Cy 总是被清"0" . 算术运算类指令包括:ADD,ADDC,SUBB,MUL,DIV,INC,DEC 和 DA,如图 7所示.图7算术运算类指令4逻辑运算指令逻辑运算指令共有 24 条,分为简单逻辑操作指令,逻辑与指令,逻辑或指令和逻辑异 或指令.逻辑运算指令用到的助记符有 CLR,CPL,ANL,ORL,XRL,RL,RLC,RR, RRC. 1. 简单逻辑操作指令 CLR CPL RL RLC RR RRC A A A A A A;对累加器 A 清"0" ;对累加器 A 按位取反 ;累加器 A 的内容向左循环移 1 位 ;累加器 A 的内容带进位标志向左循环移 1 位 ;累加器 A 的内容向右循环移 1 位 ;累加器 A 的内容带进位标志向右循环移 1 位循环左移指令示意图:RLA循环右移指令示意图:RR A带进位的循环左移指令示意图:RLC A带进位的循环右移指令示意图:RRC A这组指令的功能是:对累加器 A 的内容进行简单的逻辑操作除了带进位的移位指令外, 其他都不影响 Cy,AC,OV 等标志.示意图可以帮助我们进一步理解循环移位指令. 2.逻辑与指令 A,Rn ;A←(A)∧(Rn) ANL A,direct ;A←(A)∧(direct) ANL A,@Ri ;A←(A)∧( (Ri)) ANL A,#data ;A←(A)∧ data ANL direct,A ;direct←(direct)∧(A) ANL direct,#data ;direct←(direct)∧ data ANL 这组指令的功能是: 将两个操作数的内容按位进行逻辑与操作, 并将结果送回目的操作数 的单元中. 【例 6】 (A)=37H, (R0)=0A9H 执行指令: ANL A,R0 结果: (A)=21H 3. 逻辑或指令 A,Rn ;A←(A)∨(Rn) ORL A,direct ;A←(A)∨(direct) ORL A,@Ri ;A←(A)∨( (Ri)) ORL A,#data ;A←(A)∨ data ORL direct,A ;direct ←(direct)∨(A) ORL direct,#data ;direct ←(direct)∨ data ORL 这组指令的功能是:将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操 作数的单元中. 【例 7】 (A)=37H, (P1)=09H 执行指令: ORL P1,A 结果: (A)=3FH4. 逻辑异或指令 XRL XRL XRL XRL XRL XRL A,Rn A,direct A,@Ri A,#data direct,A direct,#data;A←(A)⊕(Rn) ;A←(A)⊕(direct) ;A←(A)⊕( (Ri)) ;A←(A)⊕ data ;direct ←(direct)⊕(A) ;direct ←(direct)⊕data这组指令的功能是:将两个操作数的内容按位进行逻辑异或操作,并将结果送回目的 操作数的单元中.图8逻辑运算类指令5控制转移类指令控制转移指令共有 17 条,不包括按布尔变量控制程序转移指令.其中有 64K 范围的长 调用,长转移指令;2KB 范围的绝对调用和绝对转移指令;有全空间的长相对转移和一页 范围内的短相对转移指令;还有多种条件转移指令.由于 MCS-51 提供了较丰富的控制转移 指令, 因此在编程上相当灵活方便. 这类指令用到的助记符共有 10 种: AJMP, LJMP, SJMP, JMP,ACALL,LCALL,JZ,JNZ,CJNE,DJNZ. 1. 无条件转移指令(1)绝对转移指令 AJMP addr11 这是 2KB范围内的无条件跳转指令,执行该指令时,先将PC+2,然后将addr11 送入 PC10~PC0,而PC15~PC11保持不变.这样得到跳转的目的地址.需要注意的是,目标地址 与AJMP后一条指令的第一个字节必须在同一个 2KB区域的存储器区域内.这是一条二字节 指令,其指令格式为: A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0操作过程可表示为:PC←(PC)+2 PC10~0←addr11 例如程序存储器的 2070H 地址单元有绝对转移指令: 2070H AJMP 16AH(00101101010B) 因此指令的机器代码为: 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1 0程序计数器Pc当前=PC+2=2070H+02H=2072H,取其高 5 位 00100 和指令机器代码给出的 11 位地址 00101101010 最后形成的目的地址为:0010 0001 0110 1010B=216AH. (2)相对转移指令 SJMP rel 执行指令时,先将 PC+2,再把指令中带符号的偏移量加到 PC 上,得到跳转的目的地址 送入 PC. 目标地址=源地址+2+rel 源地址是 SJMP 指令操作码所在的地址.相对偏移量 rel 是一个用补码表示的 8 位带符 号数,转移范围为当前 PC 值的-128~+127 共 256 个单元. 若偏移量 rel 取值为 FEH(-2 的补码) ,则目标地址等于源地址,相当于动态停机,程 序终止在这条指令上,停机指令在调试程序时很有用.MCS-51 没有专用的停机指令,若要 求动态停机可用 SJMP 指令来实现: HERE:SJMP HERE; 动态停机(80H,FEH) 或写成:HERE SJMP $ ; "$"表示本指令首字节所在单元的地址,使用它可省略 标号. (3)长跳转指令 LJMP addr16 ;PC ←addr16 执行该指令时,将 16 位目标地址 addr16 装入 PC,程序无条件转向指定的目标地址. 转移指令的目标地址可在 64KB 程序存储器地址空间的任何地方,不影响任何标志. (4)间接转移指令(散转指令) JMP @A+DPTR ;PC ←(A)+(DPTR) 这条指令的功能是把累加器A中的 8 位无符号数与数据指针DPTR的 16 位数相加(模 16 2 ) ,相加之和作为下一条指令的地址送入PC中,不改变A和DPTR的内容,也不影响标志. 间接转移指令采用变址方式实现无条件转移,其特点是转移地址可以在程序运行中加以改 变.例如,当把DPTR作为基地址且确定时,根据A的不同值就可以实现多分支转移,故一 条指令可完成多条条件判断转移指令功能. 这种功能称为散转功能, 所以间接指令又称为散 转指令. 2. 条件转移指令; (A)=0 转移 JZ rel ; (A)≠0 转移 JNZ rel 这类指令是依据累加器 A 的内容是否为 0 的条件转移指令.条件满足时转移(相当于 一条相对转移指令) ,条件不满足时则顺序执行下面一条指令.转移的目标地址在以下一条 指令的起始地址为中心的 256 个字节范围之内(-128~+127) .当条件满足时, PC←(PC)+2+ rel,其中(PC)为该条件转移指令的第一个字节的地址. 3. 比较转移指令。

8051单片机指令和寻址方式

8051单片机指令和寻址方式

8051单⽚机指令和寻址⽅式80C51指令系统专⽤于80C51系列单⽚机,具有255种操作码(00H-FFH)除去A5H。

1. 寻址⽅式寻址⽅式就是指指令中给出寻找操作数或操作数所在地址的⽅法,执⾏任何指令都需要操作数。

1)⽴即寻址MOV DPTR,#1234H; ⽴即寻址是指在指令中直接给出操作数,出现在指令中的操作数称为⽴即数,因此被称为⽴即寻址。

2)直接寻址MOV A,3AH; 直接寻址是指在指令中直接给出操作数单元地址。

功能是将⽚内RAM的3AH单元内的数据传送内累加器A。

直接寻址⽅式只能给出8位地址,因此这种寻址⽅式的寻址范围只限于⽚内RAM。

具体:a.低128单元,在指令中直接以单元地址的形式给出;b.特殊功能寄存器,即可以以单元地址形式也可以以寄存器符号形式给出。

直接寻址是访问SFR寄存器的唯⼀⽅法。

3)寄存器寻址INC R0; 寄存器寻址是指指令中将指定的寄存器的内容作为操作数。

该语句实现R0寄存器的⾃加⼀操作。

寄存器寻址范围: a.四个寄存器组共32个通⽤寄存器; b.部分特殊功能寄存器,A、AB、DPTR。

4)寄存器间接寻址ANL A,@R1; 是指在指令中给出的寄存器内容是操作数的地址,从该地址取出的才是操作数。

@前缀是区分寄存器寻址和间接寻址的标志。

寻址范围:a.⽚内ram低128单元,只能采⽤R0或R1为间接寻址寄存器;b.⽚外的64K ram单元,使⽤DPTR作为间接寻址寄存器;c.⽚外RAM低256单元,除了⽤DPTR外还可以⽤R0或R1为间址寄存器,例如MOVX A,@R0d.堆栈区,堆栈操作指令(PUSH和POP)5)相对寻址是指在指令中给出的操作数为程序转移的偏移量。

如JC 80H;6)变址寻址是指以DPTR或PC为基址寄存器,累加器A作为变址寄存器,以两者的内容相加,形成16为的程序存储地址作为操作数地址。

如:MOVC A,@A+DPTR; 变址寻址只能对程序存储器寻址7)位寻址单⽚机有位操作功能,位寻址的范围包括:a)⽚内ram中的位寻址区。

8051单片机汇编指令速查表分解

8051单片机汇编指令速查表分解

8051系列单片机汇编语言指令速查表说明:1)Ri, Rn指当前工作寄存器,i,n = 0 – 7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。

这里介绍指令助记符及其相关符号的记忆方法。

一、助记符号的记忆方法1、表格列举法把44个指令助记符按功能分为五类,每类列表记忆。

此处从略,请读者自己总结。

2、英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。

例如:增量INC-Incremect 减量DNC-Decrement 短转移SJMP-Short jump长转移LJMP-Long jump 比较转移CJNE-Compare jump not equality绝对转移AJMP-Absolute jump 空操作NOP-No operation交换XCH-Exchange 加法ADD-Addition乘法MUL-Multiplication 除法DIV-Division左环移RL-Rotate left 进位左环移RLC-Rotate left carry右环移RR-Rotate right 进位右环移RRC-Rotate right carry3、功能模块记忆法单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。

这样,化整为零,各个击破,实现快速记忆。

1)数据传送组。

2)加减运算组MOV 内部数据传送ADD 加法MOVC 程序存储器传送ADDC 带进位加法MOVX 外部数据传送SUBB 带进位减法3)逻辑运算组。

4)子程序调用组。

ANL 逻辑与LCALL 长调用ORL 逻辑或ALALL 绝对调用XRL 逻辑异或RET 子程序返回二、指令的记忆方法1、指令操作数的有关符号MCS-51的寻址方式共有七种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址、位寻址。

8051指令系统与编程基础-指令系统部分.

8051指令系统与编程基础-指令系统部分.
结果:(DPTR)=7030H,(SP)=60H。
23
3.3.1 数据传输类指令
7 累加器A与外部数据存储器RAM/IO传送指令
MOVX A,@DPTR ;((DPTR))→A,读外部RAM/IO
MOVX A,@Ri
;((Ri))→A,读外部RAM/IO
MOVX @DPTR,A ;(A)→((DPTR)),写外部RAM/IO
28
3.3.2 算术运算类指令
指令系统中,有单字节的加、减、乘、除法指令,算术运 算功能比较强。
算术运算指令都是针对8位二进制无符号数的,如要进行 带符号或多字节二进制数运算,需编写具体的运算程序, 通过执行程序实现。
算术运算的结果将使PSW的进位(Cy)、辅助进位(Ac) 、溢出(OV)3种标志位置1或清0。但增1和减1指令不影 响这些标志。
MOV <目的操作数>,<源操作数> 数据传送类指令是把源操作数传送到目的操作数。指令执行之 后,源操作数不改变,目的操作数修改为源操作数。所以数据 传送类操作属“复制”性质,而不是“搬家”。
15
3.3.1 数据传输类指令
1 以累加器为目的操作数的指令
把源操作V
越大,指令系统就越复杂。
寻址方式所要解决的主要问题就是如何在整个存 储器和寄存器的寻址空间内快速地找到指定的地址单 元。共7种寻址方式,重点是前5种。
6
3.2 指令系统的寻址方式
1 寄存器寻址方式
指令中的操作数为某一寄存器的内容。
例如:MOV A,Rn
;(Rn)→A,n =0~7
把Rn中的源操作数送入到累加器A中。由于指令指定了从寄存
器Rn中取得源操作数,所以称为寄存器寻址方式。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PSW
堆栈指针
ISP/IAP 地址生成器 程序计数器PC PCA SPI
TMP1
定时器0/1 串行口1 串行口2
WDT
LVD/LVR Control Unit
Port1锁存器
AD C
Port2,3,4, 5锁存器 Port2,3,4, 5驱动器
Port1驱动器
单片机内部结构MCS-51
MCS-51单片机与8051单片机的区别
各部分功能清单
• 1. 算术逻辑单元ALU • ALU :能进行8位二进制数的加(带进位加)、减(带借位 减)、乘、除、加1、减1及BCD加法的十进制调整等算术运算, 能进 行8位变量逻辑“与”、 “或”、 “异或”、 求补、 清零等逻辑运 算, 并有数据传送、程序转移等功能。
• 2.累加器ACC • ACC :称累加器A, 为一个8位寄存器, 它是CPU中使用最频繁的 寄存器。进入ALU作算术和逻辑运算的操作数多来自于A, 运算结果也 常送回A保存。 • 3.寄存器B • 是为ALU进行乘除法设置的。 • 4. 程序状态字寄存器PSW PSW是一个标志寄存器(8位), 它保存指令执行结果的特征信 息, 以供程序查询和判别。
STC12C5A60S2系列1T单片机简介 STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的 单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传 统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位 A/D转换(250K/S),针对电机控制,强干扰场合。1.增强型8051 CPU,1T,单时钟 /机器周期,指令代码完全兼容传统80512.工作电压:STC12C5A60S2系列工作电 压:5.5V- 3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V- 2.2V(3V单 片机)3.工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz4.用户应用 程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节......5.片上集成 1280字节RAM6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通 8051传统I/O口) 可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入 /高阻,开漏 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过 55mA7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专 用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片8.有 EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM)9. 看门狗10.内部集成 MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)11.外 部掉电检测电路:在P4.6口有一个低压门槛比较器 5V单片机为1.32V,误差为 +/-5%,3.3V单片机为1.30V,误差为+/-3%12.时钟源:外部高精度晶体/时钟,内 部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使 用内部R/C振荡器还是外部晶体/时钟
MCS-51 RAM ROM
无 EPROM/ROM
8051
AUX-RAM 无
寄存器
PC SP 其他
指令寄存器
PC增量器 SP DPTR
Control-Unit
程序计数器+PCA SPI WDT+堆栈指针
指令系统分类总结
• • • • • 1.数据传送类指令 2.算术操作类指令 3.逻辑操作类指令 4.控制转移类指令 5.布尔变量操作类指令
8051单片机指令定义详解
MOVC MOVX XRL NOP ORL POP RET RETI RL RLC RR RRC SETB SJMP SUBB SWAP XCH XCHD 把程序存储器中的代码字节数据 转送至累加器A 外部传送 字节变量的逻辑异或 空操作 两个字节变量的逻辑或运算 出栈 从子例程返回 中断返回 将累加器A中的数据位循环左移 带进位循环左移 将累加器饿数据位循环右移 带进位循环右移 置位 短跳转 带借位的减法 交换累加器的高低半字节 交换累加器和字节变量的内容 交换累加器和@Ri对应单元中的 数据的低4位
常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~15.5MHz 3.3V单片机 为: 8MHz~12MHz 精度要求不高时,可选择使用内部时钟,但因为有制造误 差和温漂,以实际测试为准13.共4个16位定时器 两个与传统8051兼容的定时器/计 数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波 特率发生器 再加上2路PCA模块可再实现2个16位定时器14. 2个时钟输出口,可由 T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟15.外部中断I/O口7 路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒, INT0/P3.2, INT1/P3.3, T0/P3.4, T1/P3.5, RxD/P3.0, CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器 设置到P4.3)16. PWM(2路)/PCA(可编程计数器阵列,2路) ---也可用来当2路 D/A使用 ---也可用来再实现2个定时器 ---也可用来再实现2个外部中断(上升 沿中断/下降沿中断均可分别或同时支持)17.A/D转换, 10位精度ADC,共8路,转换 速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系 列是高速的8051,可再用定时器或PCA软件实现多串口19. STC12C5A60S2系列有 双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2), TxD2/P1.3(可通过寄存器设置到P4.3)20.工作温度范围:-40 - +85℃(工业级) / 0 75℃(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通 I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描 来节省I/O口,或用双CPU,三线通信,还多了串口。
STC12C5A60S2单片机硬件系统框图
红外光电 传感器阵 列 数码管显 示电路 键盘电路
系统电源
蜂鸣器电 路 STC125A60S 2单片机 电机控制 电路 速度检测 电路
程序下载 接口
STC12C5A60S2系统内部结构框图
AUX-RAM 1024B
RAM地址 寄存器 RAM 256B
程序存储器 B寄存器 ACC TMP2 ALU
数据传送类指令
算术操作类指令
逻辑操作类指令
控制转移类指令
布尔变量操作类指令
绝对调用 加法 带进位的加法 绝对跳转 对字节变量进行逻辑运算 若两个操作数不相等则转移 清除累加器 在加法运算之后,对累加器A进行 十进制调整 DEC 把BYTE所代表的操作数减1 DIV 除法 DJNZ 减1,若非0则跳转 INC 加1 JB 若位数据位1则跳转 JC 若进位标志为1,则跳转 JMP 间接跳转 JNB 如果bit所代表的位不为1则跳转 JNC 若进位标志非1则跳转 JNZ 如果累加器的类容非0则跳转 JZ 如果累加器的类容为0则跳转 LCALL 长调用 LJMP 长跳转 MOV 传送字节变量 MUL 乘法 ACALL ADD ADDC AJMP ANL CJNE C 片内的高增益反相放大器通过XTAL1、 XTAL2外接作为反馈元件 的片外晶体振荡(呈感性)与电容组成的并联谐振回路构成一个自激振 荡器, 向内部时钟电路提供振荡时钟。 6.布尔处理机 • 布尔处理(即位处理)是MCS—51单片机ALU所具有的一种功能。 单片机指令系统中的布尔指令集(17条位操作指令), 存储器中的位地址 空间, 以及借用程序状态标志寄存器PSW中的进位标志CY作为位操作 “累加器”, 构成了单片机内的布尔处理机。 7.控制部件及振荡器(控制器) • 控制部件是单片机的神经中枢, 它包括定时和控制电路、指令寄存 器、译码器以及信息传送控制等部件。单片机的定时控制功能是由片内 的时钟电路和定时电路来完成的。片内的时钟产生有两种方式:⑴内部 时钟方式; ⑵外部时钟方式振荡器的频率主要取决于晶体的振荡频率, 一般晶体可在1.2~12 MHz之间任选, 电容C1、 C2可在5~30 pF之间 选择, 电容的大小对振荡频率有微小的影响, 可起频率微调作用。
相关文档
最新文档