第2章单片机指令篇.docx
《第2章单片机指令篇.docx》由会员分享,可在线阅读,更多相关《第2章单片机指令篇.docx(13页珍藏版)》请在冰豆网上搜索。
第2章单片机指令篇
第二章
MCS_51指令系统
2.1.2寻址方式
关键:
有几个放数的地方?
如何找到数,数送到什么地方去?
数字量0和1与模拟量0伏和5伏的关系。
1.寄存器寻址方式MOVA,R0
2.直接寻址方式MOVA,30H
3.寄存器间接寻址方式MOVA,@R0
4.立即寻址方式MOVA,#30H
5.位寻址方式ANLC,30H
6.变址寻址方式MOVCA,@A+DPTR
MOVCA,@A+PC
JMPA,@A+DPTR
7.相对寻址方式SJMPrel
2.2数据传送指令
2.2.1内部RAM数据传送指令组
1.立即数传送指令
MOVA,#data
MOVdirect,#data
MOVRn,#data
MOV@Ri,#data
MOVDPTR,#data16
2.内部RAM之间的数据传送指令
MOVdirect2,direct1
MOVdirect,Rn
MOVRn,direct
MOVdirect,@Ri
MOV@Ri,direct
3.累加器的数据传送指令
MOVA,Rn
MOVRn,A
MOVA,direct
MOVdirect,A
MOVA,@Ri
MOV@Ri,A
2.2.2外部RAM数据传送指令组
对外部RAM只能使用间接寻址方法,分别使用DPTR和Ri作间址寄存器
1.使用DPTR进行间接寻址
MOVXA,@DPTR
MOVX@DPTR,A
2.使用Ri进行间接寻址
MOVXA,@Ri
MOVX@Ri,A
2.2.3程序存储器数据传送指令组
MOVCA,@A+DPTR
MOVCA,@A+PC
寻址范围64KB
2.2.4数据交换指令组
数据交换指令主要是在内部RAM单元与累加器A这之间进行,有整字节和半字节交换
1.整字节交换指令
XCHA,Rn
XCHA,direct
XCHA,@Ri
2.半字节交换指令
XCHDA,@Ri
例:
已知:
(R0)=20H,(A)=3fH,(20)=75H
求:
XCHDA,@R0后结果
结果是:
(R0)=20H,(A)=35H,(20)=7fH
3.高低半字节交换指令
SWAPA
2.2.5堆栈操作指令组
PUSHdirect;低128单元或专用寄存器
POPdirect;
2.3算术运算指令
2.3.1加法指令组
ADDA,Rn
ADDA,direct
ADDA,@Rn
ADDA,#data
2.3.2带进位加法指令组
ADDCA,Rn
ADDCA,direct
ADDCA,@Rn
ADDCA,#data
例:
三字节无符号数相加,被加数放在20H~22H单元,加数放在内部RAM中2AH~2CH
程序如下:
MOVR0,#20H
MOVR1,#2AH
MOVR7,#03H
CLRC
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR7,LOOP
CLRA
ADDCA,#00H
MOV@R0,A
2.3.3带进位减法指令组
SUBBA,Rn
SUBBA,direct
SUBBA,@Rn
SUBBA,#data
2.3.4加1指令组
INCA
INCRn
INCdirect
INC@Ri
INCDPTR
减1指令组
DECA
DECRn
DECdirect
DEC@Ri
注:
没有DPTR减1指令组
2.3.6乘法指令
MULAB
两个无符号8位数相乘,16位积低8位放在A中,高8位放B中
除法指令
DIVAB
两个无符号8位数相除,被除数放在A中,除数放B中
运算后,商放在A中,余数放B中
2.3.7十进制调整指令
DAA
对BCD码十进制数加法运算的结果进行修正。
2.4逻辑运算及移位类指令
2.4.1与运算指令组
ANLA,Rn
ANLA,direct
ANLA,@Ri
ANLA,#data
ANLdirect,A
ANLdirect,#data
2.4.2或运算指令组
ORLA,Rn
ORLA,direct
ORLA,@Ri
ORLA,#data
ORLdirect,A
ORLdirect,#data
例:
将累加器A的低4位送P1口的低4位,但P1口的高4位需保持不变。
MOVR0,A;A内容暂存R0
ANLA,#0FH;屏蔽A的高4位,低4位不变
ANLP1,#0FOH;屏蔽P1口的低4位,高4位不变
ORLP1,A;实现低4位的传送
MOVA,R0;恢复A的内容
2.4.3异或运算指令组
XRLA,Rn
XRLA,direct
XRLA,@Ri
XRLA,#data
XRLdirect,A
XRLdirect,#data
2.4.4累加器清0指令
CLRA
累加器取反指令
CPLA
2.4.5移位指令组
RLA;循环左移
RRA;循环右移
RLCA;带进位循环左移
RRCA;带进位循环右移
2.5控制转移指令
2.5.1无条件转移指令组
1.长转移指令LJMPaddr16
2.绝对转移指令AJMPaddr11
3.短转移指令SJMPrel
4.变址寻址转移指令JMP@A+DPTR
2.5.2条件转移指令组
1.累加器判零转移指令
JZrel
JNZrel
2.数值比较转移指令
CJNEA,#data,rel
CJNEA,direct,rel
CJNERn,#data,rel
CJNE@Ri,#data,rel
3.条件转移指令
DJNZRn,rel
DJNZdirect,rel
2.5.3子程序的调用与返回指令组
1.子程序的概念
2.子程序调用指令
ACALLaddr11
LCALLaddr16
3.返回指令
RET;子程序返回指令
RETI;中断服务子程序返回指令
2.5.4空操作指令NOP
2.6布尔变量操作类指令
出于控制应用的需要,MCS-51具有较强的布尔变量处理能力。
所谓布尔变量也即开关变量,以位(bit)为单位进行运算和操作。
在硬件方面,为了实现布尔变量处理,8051有一个布尔处理机,所谓布尔处理机实际上就是一位的微处理机,它以进位标志作为累加位,以内部RAM位寻址区的128个可寻址位作为存储位。
在软件方面,8051的指令系统中有一个进行布尔变量操作的指令子集,可以进行布尔变量的传送、运算及控制转移等操作。
这些指令通常称之为位操作指令,也就是本节所称的布尔变量操作指令。
2。
6。
1位传送指令组
位传送操作就是可寻址位与累加位CY之间的相互传送,共有两条指令:
MOVC,bit;CY=BIT
MOVbit,C;BIT=CY
指令中的C就是CY。
由于没有两个可寻址位之间的传送指令,因此它们之间无法实现直
接传送。
如需要这种传送,应使用这两条指令以CY作中介实现之。
例如将20H位的内容传送
5A位。
MOV10H,C;暂存CY内容
MOVC,20H;20H位送CY
MOV5AH,C;CY送5AH位
MOVC,10H;恢复CY内容
2.6.2位置位复位指令组
指令对CY及可寻址位进行置位或复位操作。
共有四条指令:
CLRC;CY=0
CLRbit;bit=0
SETBC;CY=1
SETBbit;bit=1
2.6.3位运算指令组
位运算都是逻辑运算,有与、或、非三种,共六条指令。
ANLC,bit
ANLC,/bit
ORLC,bit
ORLC,/bit
CPLC
CPLbit
布尔变量操作指令中,没有位的异或运算,如需要时可由多条上述位操作指令实现。
例如E、B、D代表位地址,进行E、B内容的异或操作,即D=EB+EB。
MOVC,B
ANLC,/E
MOVD,C
MOVC,E
ANLC,/B
ORLC,D
MOVD,C;异或结果送D位
通过位逻辑运算,可以对各种组合逻辑电路进行模拟,即用软件方法来获得组合电路的逻辑功能。
2.6.4位控制转移指令组
位控制转移指令就是以位的状态作为实现程序转移的判断条件。
对这些指令分别说明:
1.以C状态为条件的转移
共两条指令:
JCrel
JNCrel
2.以住状态为条件的转移指令
共三条指令:
JBbit,rel;位状态为1转移
JNBbit,rel;位状态为0转移
JBCbit,rel;位状态为1转移,并使该位清0
练习题
1.什么是指令系统、机器语言和汇编语言?
2.在单片机应用中广泛使用何种语言?
它们能直接执行吗?
为什么?
3.简述MCS-51指令的格式。
4.简述MCS-51的指令寻址方式。
5.如若访问专用寄存器,可使用那些寻址方式?
6.如若访问外部RAM单元,可使用那些些寻址方式?
7.如若访问内部RAM单元,可使用那些寻址方式?
8.如若访问内外程序存储器,可使用那些寻址方式?
9.说明十进制调整的原因和方法。
10.说明MCS-51的布尔处理机功能。
11.试分析以下程序段的执行结果
MOVSP,#3AH
MOVA,#20H
MOVB,#30H
PUSHACC
PUSHB
POPACC
POPB
12.已知(A)=7AH,(R0)=30H,(30H)=A5H,(PSW)=80H,请填写各条指令的执行结果。
(1)XCHA,R0
(3)XCHA,30H
(4)XCHDA,@R0
(5)SWAPA
(6)ADDA,R0
(7)ADDA,30H
(8)ADDA,#30H
(9)ADDCA,30H
(10)SUBBA,30H
(11)SUBBA,#30H
13.已知(30H)=40H,(40H)=10H,(10H)=00H,(Pl)=CAH,请写出执行以下程序段后各有关单元的内容。
MOVR0,#30H
MOVA,@R0
MOVR1,A
MOVB,@R1
MOV@R1,P1
MOVP2,P1`
MOV10H,#20H
MOV30H,10H
14.已知(A)=83H,(R0)=17H,(17H)=34H,请写出执行完下列程序段后A的内容。
ANLA,#17H
ORLI7H,A
XRLA,@R0
CPLA
15.阅读下列程序说明其功能
MOVR0,#30H
MOVA,@R0
RLA
MOVR1,A
RLA
RLA
ADDA,RI
MOV@RO,A
功能是: