jnz和djnz_单片机系统与应用

本文详细介绍了MCS-51兼容单片机的7种寻址方式,包括立即寻址、寄存器寻址、直接寻址等,并举例说明。同时,概述了MCS-51的指令集,包括数据传送、算术运算、逻辑运算、控制转移和位操作指令,特别强调了条件转移指令CJNE和DJNZ的应用。
摘要由CSDN通过智能技术生成

MCS-51兼容系列寻址方式与指令集

PartI.寻址方式

MCS-51兼容单片机共支持以下7种寻址方式

符号#data

符号direct

符号@Ri,  @DPTR

符号@A+DPTR,  @A+PC

符号rel

符号bit

立即寻址

表示方法-#data。

注意:常量符号引用时,要安照立即数的方式进行引用。

EX:MOV A,#0 ; MOV DPTR,#0; MOV DPTR,#ARRAY;取定义的一个数组的起始地址

寄存器寻址

指通用寄存器R0~R7。

注意:(1) R0~R7有4个工作区,通过寄存器寻址方式引用的永远是当前PSW中RS1/RS0指向工作区中的相应寄存器。但也可通过直接寻址方式操作这四个工作区中的任意一个寄存器。

(2) 累加器A,暂存器B,进位标志C和DPTR,可以采用寄存器寻址也可采用直接寻址,应根据指令的寻址要求灵活对待。

直接寻址

用于访问片内RAM 00H~7FH的存储单元和位于80H~FFH之间的特殊功能寄存器SFR。

其中00~7FH之间的存储单元还可以通过间址访问,但SFR只能通过直接寻址访问。

EX: MOV A,P0;注意P0是P0口锁存器,是SFR,寻址中直接使用SFR的名字与使用其地址一样,都是直接寻址方式。

寄存器间接寻址

间址寄存器 R0/R1/DPTR,R0/R1是8位寄存器,所以使用它们间址的寻址范围只有256字节,用于对内部RAM的间接寻址。DPTR是16寄存器,用于对外部RAM/ROM 64K地址空间进行间接寻址。

注意:对内部RAM 80H~FFH(52系列)必须是用R0/R1间址寻址进行访问,以区别位于同一地址空间的特殊功能寄存器。

EX:   MOV  R0,#86H

MOV  A, @R0

MOV DPTR,#1001H

MOVX @DPTR,A

基址变址寻址

基址寄存器PC/DPTR,变址寄存器A。

注意:访问程序存储器只能用基址变址寻址方式。但PC不能随意更改,而DPTR可以根据需要放入基地址。与此同时,这种寻址方式可以方便的进行查表操作,包括基于地址表的多分支跳转。

EX:MOVC A,@A+DPTR;

JMP @A+DPTR;地址表跳转,DPTRPC,从而实现跳转。

相对寻址

针对SJMP短跳转指令,使用的寻址方式。PC+相对偏移量->PC,相对偏移量=跳转位置-当前PC值,相对偏移量可以位于-128~127之间,即短转移的范围在当前位置的前128到后127之间。

EX:SJMP label;指令机器码中存储的是Label到当前地址的偏移值

位寻址

针对可位寻址区域-内部RAM 20H~2FH之间和地址为8的整数倍的SFR,可通过位地址引用,操作相应位,也有些书不把其作为独立的寻址方式,而认为是一种特殊的直接寻址。

EX:MOV C,20H

MOV A,20H ;第一条指令中20H为位地址,而第二条指令中为内部RAM字节地址。

位地址可以为以下形式: 20H,20.1,P0.1

PartII.指令集

MCS-51指令系统分为以下五类:

1.数据传送指令

类型

目的操作数

指令格式

执行的操作

片内RAM传送指令

A

MOV A, Rn

用于实现单片机内部RAM区数据传送,根据指令格式规定的合法源和目的操作数寻址方式,实现:

源操作数 à 目的操作数

MOV A, @Ri

MOV A, direct

MOV A, #data

Rn

MOV Rn, A

MOV Rn, #data

MOV Rn, direct

direct

MOV direct, A

MOV direct, #data

MOV direct, direct

MOV direct, Rn

MOV direct, @Ri

@Ri

MOV @Ri, A

MOV @Ri, #data

MOV @Ri, direct

DPTR

MOV DPTR, #data16

类型

目的操作数

指令格式

执行的操作

片外RAM传送指令

A

MOVX A, @DPTR

片外RAM的数据必须进行累加器A进行数据传送,且对片外RAM的寻址只能用间接寻址方式,@DPTR或者@Ri

@DPTR

MOVX @DPTR, A

@Ri

MOVX @Ri, A

ROM

(程序存储器)传送

A

MOVC A,@A+DPTR

片外ROM只能使用基址变址寻址方式访问。

程序存储器是只读的。

MOVC A,@A+DPTR

交换指令

(只对CPU内部RAM区)

XCH A, Rn

累加器A与其它片内RAM寻址方式访问单元交换数据。

XCH A, @Ri

XCH A,direct

XCHD A,@Ri

A的低4位ßà(Ri)低4位

SWAP A

A的高4位和低4位交换

堆栈操作

PUSH direct

满递增堆栈,操作数只能采用直接寻址方式

POP direct

2.算术运算指令

类型

指令格式

操作

对PSW标记位影响

加法

ADD A, Rn/@Ri/#data/direct

目的操作数必须为A

Cy,Ov,Ac

ADDC A, Rn/@Ri/#data/direct

带进位加

Cy,Ov,Ac

INC A/Rn/@Ri/#data/DPTR

自增,DPTR可以自增

不影响 对A自增会影响P

减法

SUBB A,Rn/@Ri/#data/direct

考虑借位Cy的减法

Cy,Ov,Ac

DEC A/Rn/@Ri/direct

自减,DPTR不能自减

不影响,对A自减会影响P

乘法

MUL AB

A*BàBA,B放高位,A放低位

OV=P=0

除法

DIV AB

A/B(商)àA

A/B(余数)àB

OV P

十进制调整

DAA

根据Cy和Ac标记位对累加器A中的内容进行调整

3.逻辑运算指令

逻辑运算指令一般不影响PSW中的标记位,只有以下两种情况影响标记位:

(1)目的操作数为A时,影响奇偶标记位P;

(2)带进位的移位指令影响CY位;

类型

目的操作数

指令格式

操作

A

ANL A, Rn/@Ri/#data/direct

direct

ANL direct, A/#data

A

ORL A, Rn/@Ri/#data/direct

direct

ORL direct, A/#data

异或

A

XRL A, Rn/@Ri/#data/direct

direct

XRL direct, A/#data

累加器清零

CLR  A

累加器求反

CPL  A

移位

移位

RL  A

RR  B

带Cy的循环

RLC  A

RRC  A

4.控制转移指令

CJNE和DJNZ是主要的两条条件转移指令,这两条指令都会先做一个减法,影响了标记位后,根据标记位判断条件,确定分支。

类型

指令格式

执行的操作

说明

无条件转移

AJMP  addr11

Addr11àPC

各种无条件转移采用的寻址方式不同,跳转范围不同,指令字节数不同。

SJMP  rel

PC+2+relàPC

LJMP  addr16

Addr16àPC

间接转移

JMP  @A+DPTR

(A+DPTR)àPC

主要用于跳转表转移

调用及返回

ACALL addr11

Addr11àPC

断点入栈

各种跳转指令和子程序调用指令,在写程序时,目的地址一律写的是标号,只是汇编时,会变成不同的转移地址。子程序调用与无条件跳转指令的区别在于,子程序调用为了能够正常返回,需要保存断点。

LCALL addr16

Addr16àPC

断点入栈

RET

子程序返回

RETI

中断返回

条件转移指令

(全部为相对寻址,只能在当前PC~128到127之间跳转)

JZ/JNZ  rel

根据A的值是否为0,跳转

CJNE A,#data/direct,rel

CJNE Rn,#data,rel

CJNE @Ri,#data,rel

注意,首先要进行比较,有一个减法的过程,去影响标记位,而后根据标记位判断,若两个操作数不同,则跳转到标号处,否则顺序执行。

DJNZ Rn,rel

操作数-1à操作数(注意,先减);若操作数不为0,则跳转到标号处,如果不为0,则顺序执行。

DJNZ direct, rel

空操作

NOP

PC+1àPC, 其实就是占1个字节的程序存储空间,消耗一定的CPU时间。

5.位操作指令

注意,位操作指令,没有直接对C或者bit赋值的MOV指令,因为CLR/SETB能够实现。

类型

指令格式

执行的操作

说明

位传送

MOV C, bit

bità C

直接寻址位与位累加器(进位标记)C之间的传送

MOV bit, C

Cà bit

位变量赋值

CLR C

清零

能够对位累加器(进位标记位)C和直接寻址位进行清零/置1和取反操作

CLR bit

CPL C

求反

CPL bit

SETB C

置1

SETB bit

位逻辑运算

ANL C, bit

C ^ bitàC

在对I/O操作时,使用这类指令,将操作I/O口锁存器

ANL C, /bit

C ^ /bitàC

ORL C, bit

C | bitàC

ORL C, /bit

C | /bitàC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值