中职中专单片机原理电子教案3Word文档格式.docx
《中职中专单片机原理电子教案3Word文档格式.docx》由会员分享,可在线阅读,更多相关《中职中专单片机原理电子教案3Word文档格式.docx(44页珍藏版)》请在冰点文库上搜索。
MOVA,3AH。
该指令将内部RAM中3AH单元的内容送给累加器A,若(3AH)=20H,执行示意图如图3.1。
执行结果A=20H。
图3.1“MOVA,3AH”示意图
3.寄存器寻址方式
寄存器寻址就是操作对象放在寄存器中,指令只提供存放操作对象的寄存器,执行时通过寻找寄存器得到操作对象。
书写时,用符号名称表示寄存器。
寄存器寻址方式的寻址范围包括:
四个工作寄存器组共32个通用寄存器、部分特殊功能寄存器。
MOVA,R0。
该指令把寄存器R0的内容送到累加器A中,若R0=20H,执行过程如图3.2。
指令执行后A=20H。
图3.2“MOVA,R0”指令示意图
4.寄存器间接寻址方式
寄存器间接寻址就是操作对象的存储器单元地址存放在寄存器中,执行时通过寻找指定的寄存器,取出其内容作为存储单元地址,从而得到操作的对象。
书写时,用“@”和寄存器符号表示。
寄存器间接寻址的寻址范围包括:
内部RAM低128字节、外部RAM64KB、堆栈操作指令。
设寄存器R1=60H,A=20H,执行指令ADDA,@R1。
若(60H)=10H,执行过程如图3.3。
执行结果A=30H。
图3.4“MOVA,@R1”指令示意图
5.相对寻址方式
相对寻址是指以指令中给出的操作数作为程序转移的偏移量。
书写时,以“rel”表示地址偏移量。
目标地址表示为:
目标地址=转移指令首地址+转移指令字节数+rel
JC3AH。
执行过程如图3.4。
图3.4“JC3AH”指令示意图
6.变址寻址方式(又称基址寄存器加变址寄存器间接寻址)
指令提供了以DPTR或PC为基址、以累加器A为变址的两种寄存器,通过将两种寄存器的内容相加形成的16位数据,作为操作对象存储单元的地址。
MCS-51系列单片机的变址寻址只能对程序存储器进行寻址,而且变址寻址指令只有三条:
MOVCA,@A+DPTR
MOVCA,@A+PC
JMP@A+DPTR
MOVCA,@A+DPTR。
若A=35H,DPTR=3F30H,那么操作对象存储单元的地址为3F65H,若(3F65H)=5CH,执行过程如图3.5。
则执行结果为A=5CH。
图3.5“MOVCA,@A+DPTR”指令示意图
7.位寻址方式
指令给出的操作数是内部数据存储器中的可寻址位。
书写时,有四种表示方法:
直接使用位地址、位名称表示法、单元地址加位表示法、专用寄存器名称加位表示法。
MCS-51单片机的位寻址范围包括:
内部RAM中的位寻址区、特殊功能寄存器的可寻址位。
ANLC,21H.5。
该指令将进位标志CY和内部RAM的21H单元的第5位进行逻辑与运算,结果保存到C中。
总结
本节主要讲解如何通过寻找操作数的有效地址,来获得真正的操作对象。
为汇编程序打基础。
板书设计
一、立即寻址方式
1、定义2、举例
二、直接寻址方式
三、寄存器寻址方式
四、寄存器间接寻址方式
五、相对寻址方式
六、变址寻址方式
七、位寻址方式
思考题
名词解释:
寻址方式、操作数、
P743.1(5)
课后反思
3.2指令系统
4学时
掌握MCS-51指令系统的数据传送指令、算术指令、逻辑运算指令、位操作指令和控制转移指令。
1.MCS-51指令系统的数据传送指令、算术指令、逻辑运算指令、位操作指令和控制转移指令。
复习MCS-51单片机的指令和寻址方式,不同的指令助记符和不同的寻址方式的组合构成了MCS-51的指令系统,本节着重介绍MCS-51指令系统。
熟记描述指令的符号
通过举例来熟记29条数据传送指令的书写及其功能
通过举例熟记算术指令的书写及其功能
通过举例熟练掌握24条逻辑运算指令
注意指令执行对位操作位的影响
掌握程序控制指令各指令的功能及应用
通过举例来掌握位操作指令
按指令的功能,MCS-51指令系统可分为五大类:
·
数据传送指令
·
算术运算指令
逻辑运算指令
程序控制指令
位操作指令
描述指令的一些符号的意义:
Rn(n=0~7):
表示当前工作寄存器组R0~R7中的某一个寄存器。
@Ri(i=0~7):
可以作间接寻址的寄存器,只能是R0和R1两个寄存器,“@”是间接寻址标识符。
direct:
内部RAM的8位地址,可以是内部RAM的单元地址(00H~7FH)或特殊功能寄存器地址。
#data:
8位立即数,其中“#”是立即数标识符。
#data16:
16位立即数。
addr11:
11位目的地址。
用于ACALL和AJMP指令中,转移范围为2KB。
addr16:
16位目的地址。
用于LCALL和LJMP指令中,转移范围为64KB。
rel:
相对转移指令中的8位偏移地址,范围是-128~+127。
DPTR:
数据指针,用作16位的地址寄存器。
bit:
内部RAM或特殊功能寄存器中的直接寻址位。
rrr:
在操作码中,表示R0~R7寄存器的编码。
A:
累加器,写作“A”时,是寄存器寻址;
写作“ACC”时,是直接寻址。
B:
特殊功能寄存器,用于MUL和DIV指令中。
/:
位操作数的前缀,表示对该位操作数取反。
(存储单元地址):
表示某存储单元的内容。
(间址寄存器):
由寄存器间接寻址的单元中的内容。
一、数据传送指令
功能是实现计算机内不同存储区域之间的信息传递。
MCS-51数据传送如下图3.6:
图3.6数据传送示意图
1.内部RAM、特殊功能寄存器之间的数据传送
·
立即数传送指令
MOVA,#data;
A←data
MOVdirect,#data;
(direct)←data
MOVRn,#data;
Rn←data
MOV@Ri,#data;
(Ri)←data
MOVDPTR,#data16;
DPH←data高8位,DPL←data低8位
例3.1分析下列指令的寻址方式以及指令执行后存储单元和寄存器的内容。
MOVA,#20H;
目的操作数采用寄存器寻址,A=20H
MOV32H,#23H;
目的操作数采用直接寻址,(32H)=23H
MOVR4,#2FH;
目的操作数采用寄存器寻址,R4=2FH
MOV@R0,#5AH;
目的操作数采用寄存器间接寻址,(R0)=5AH
MOVDPTR,#203FH;
目的操作数采用寄存器寻址,DPTR=203FH
·
内部RAM单元之间的数据传送指令
MOVdirect1,direct2;
(direct1)←(direct2)
MOVdirect,Rn;
(direct)←Rn
MOVRn,direct;
Rn←(direct)
MOVdirect,@Ri;
(direct)←(Ri)
MOV@Ri,direct;
(Ri)←(direct)
例3.2分析指令的寻址方式和执行结果
MOVP2,R2;
目的操作数采用直接寻址,源操作数为寄存器寻址;
P2=R2,该指令等价于MOV0A0H,R2
MOV2FH,30H;
两个操作数均采用直接寻址,(2FH)=(30H)
MOV20H,@R1;
目的操作数为直接寻址,源操作数为寄存器间接;
寻址,执行结果:
(20H)=(R1)
与累加器有关的数据传送指令
MOVA,Rn;
A←Rn
MOVRn,A;
Rn←A
MOVA,direct;
A←(direct)
MOVdirect,A;
(direct)←A
MOVA,@Ri;
A←(Ri)
MOV@Ri,A;
(Ri)←A
例3.3分析下列指令的寻址方式和执行结果
MOVA,R5;
两操作数均采用寄存器寻址,A=R5
MOVA,0F0H;
原操作数为直接寻址,A=(0F0H)
MOVA,@R1;
源操作数为寄存器间接寻址,A=(R1)
2.累加器与外部RAM之间的数据传送
MOVXA,@DPTR;
A←(DPTR)
MOVX@DPTR,A;
(DPTR)←A
MOVXA,@Ri;
A←(Ri)
MOVX@Ri,A;
例3.4已知DPTR=2000H,片外RAM(2000H)=05H,R1=0F0H,片外RAM(0F0H)=0A0H。
MOVXA,@DPTR;
指令执行后,A=05H
MOVX@R1,A;
指令执行后,片外RAM(0F0H)=05H
3.程序存储器中的数据传送到累加器A的指令
只能从程序存储器向累加器传送数据。
MOVCA,@A+DPTR;
A←(A+DPTR)
MOVCA,@A+PC;
A←(A+PC)
例3.5把累加器A中的十六进制数字00H~0FH转换成ASCII码。
INCA;
调整偏移量(数据表的首地址与MOVC指令间隔1个单元)
MOVCA,@A+PC;
查表取数
RET;
子程序返回
DB30H,31H,32H,33H,34H;
在程序存储器中顺序存放
DB35H,36H,37H,38H,39H;
0~F的ASCII码
DB41H,42H,43H,44H,45H,46H
假如上述指令代码在程序存储器的存储如下图3.7所示。
如果累加器A=0FH,则执行INCA后,A=10H,程序存储器取出MOVC指令后,PC=2001H,则
A+PC=2011H,于是执行MOVC指令后A=(2011H)=46H,即将累加器A中十六进制数字F转换成相应的ASCII码46H。
图3.7例3.5程序存储器数据分布图
4.内部RAM单元与累加器A之间数据交换指令
字节交换指令
XCHA,Rn;
A←→Rn
XCHA,direct;
A←→(direct)
XCHA,@Ri;
A←→(Ri)
半字节交换指令
XCHDA,@Ri;
A(D3~D0)←→(Ri)(D3~D0),即累加器A的低4位与Ri间址的内部RAM单元的低4位交换。
累加器A的高4位与低4位交换指令
SWAPA;
A(D3~D0)←→A(D7~D4)
例3.6设A=4FH,R1=20H,内部RAM中(20H)=35H,则
XCHA,@R1;
执行指令后,A=35H,(20H)=4FH
例3.7设R0=50H,A=3FH,内部RAM中(50H)=21H,则
XCHDA,@R0;
指令执行后,A=31H,(50H)=2FH
5.堆栈操作指令
进栈指令
PUSHdirect;
SP←SP+1,(SP)←(direct)
出栈指令
POPdirect;
(direct)←(SP),SP←SP–1
例3.8已知SP=3AH,DPTR=1234H,则
PUSHDPL;
SP←SP+1=3BH,(3BH)=34H
POPDPH;
SP←SP+1=3CH,(3CH)=12H
执行指令后,SP=3CH,(3CH)=12H,(3BH)=34H
例3.9设SP=4FH,内部RAM的(4FH)=45H,(4EH)=01H则
POPPSW;
PSW←(4FH)=45H,SP←SP-1=4EH
POPACC;
ACC←(4EH)=01H,SP←SP-1=4DH
执行结果为:
SP=4DH,ACC=01H,PSW=45H
例3.10堆栈操作指令常用于子程序中
子程序入口处,保护现场的指令:
PUSHACC
PUSHPSW
子程序返回时,恢复现场的指令:
POPPSW
POPACC
注:
1.内部RAM的前128字节、特殊功能寄存器之间可以互相传送数据,但最多只允许一个操作数使用寄存器间接寻址。
2.访问特殊功能寄存器必须采用直接寻址,不能采用寄存器间接寻址,否则会引起错误。
3.MCS-51指令系统没有提供B寄存器寻址方式(乘法指令例外)。
4.注意累加器A和ACC两种写法的区别:
A为寄存器寻址方式,ACC为直接寻址方式。
二、算术运算指令
1.加减运算指令
加减运算指令的目的操作数是累加器A,源操作数可以是立即数、通用寄存器、内部RAM或特殊功能寄存器和Ri间址的内部RAM。
加法指令ADD
功能:
将累加器和源操作数相加,结果送累加器A,源操作数不变。
形式:
ADDA,Rn;
A+Rn→A
ADDA,direct;
A+(direct)→A
ADDA,@Ri;
A+(Ri)→A
ADDA,#data;
A+data→A
ADD指令影响程序状态字PSW的CY、AC、OV位。
例如,A=0C0H,R1=0AEH,执行ADDA,R1指令。
11000000
+10101111
01101111
运算结果:
A=6FH,AC=0,CY=1,OV=1。
带进位加法指令ADDC
将累加器A、源操作数以及进位标志CY相加,结果送累加器A。
A+Rn+CY→A
A+(direct)+CY→A
A+(Ri)+CY→A
A+data+CY→A
ADDC指令影响程序状态字PSW的CY、AC、OV位。
带借位减法指令SUBB
功能:
将累加器和源操作数相减,结果送累加器A,源操作数不变。
形式:
SUBBA,Rn;
A-Rn-CY→A
SUBBA,direct;
A-(direct)-CY→A
SUBBA,@Ri;
A-(Ri)-CY→A
SUBBA,#data;
A-data-CY→A
SUBB指令影响程序状态字PSW的CY、AC、OV位。
加1指令INC
该指令只有一个操作数,执行时把操作数的内容加1,结果送回原单元。
INCA;
A+1→A
INCRn;
Rn+1→Rn
INCdirect;
(direct)+1→(direct)
INC@Ri;
(Ri)+1→(Ri)
INCDPTR;
DPTR+1→DPTR
加1指令主要用于修改地址指针和计数次数,它对CY、AC、OV没有影响。
减1指令DEC
该指令只有一个操作数,执行时把操作数的内容减1,结果送回原单元。
DECA;
A-1→A
DECRn;
Rn1→Rn
DECdirect;
(direct)-1→(direct)
DEC@Ri;
(Ri)-1→(Ri)
该指令不影响CY、AC、OV。
2.乘除法指令
乘法指令MUL
把累加器A和寄存器B中的无符号数相乘,所得16位乘积的低位字节存入A中,高位字节存入B中。
MULAB
A=1AH,B=20H,执行指令MULAB
执行结果为A=40H,B=03H,OV=1,CY=0
除法指令DIV
用A中8位无符号数除以B中8位无符号数,所得商存入A中,余数存入B中,并将CY和OV置0。
DIVAB
A=0F4H,B=0AH,执行指令DIVAB
执行结果为A=18H,B=04H,OV=0,CY=0
3.十进制调整指令
把A中的数作为两个BCD数相加之和进行调整,得到两位正确的BCD数。
DAA
73-54=19
先执行9AH-54H,得到补熟46H,再执行73H+46H=0B9H,最后执行调整指令将0B9H加上60H得到19H,即得到正确的BCD数。
三、逻辑运算指令
1.逻辑与运算指令
逻辑与运算指令常用作字节清零或位清零。
共有6条指令:
ANLA,Rn;
A∧Rn→A
ANLA,direct;
A∧(direct)→A
ANLA,@Ri;
A∧(Ri)→A
ANLA,#data;
A∧data→A
ANLdirect,A;
(direct)∧A→(direct)
ANLdirect,#data;
(direct)∧data→(direct)
若A=0A6H,R1=0A4H,执行ANLA,R1后,A=0A4H
2.逻辑或运算指令
逻辑或运算可以实现对某个单元的某些位置1,其余位不变。
ORLA,Rn;
A∨Rn→A
ORLA,direct;
A∨(direct)→A
ORLA,@Ri;
A∨(Ri)→A
ORLA,#data;
A∨data→A
ORLdirect,A;
(direct)∨A→(direct)
ORLdirect,#data;
(direct)∨data→(direct)
3.逻辑异或运算
逻辑异或运算可以用来比较两个数据是否相等。
当两个数据异或结果为0,则表示相等,否则表示不相等。
共有6条指令。
XRLA,Rn;
ARn→A
XRLA,direct;
A(direct)→A
XRLA,@Ri;
A(Ri)→A
XRLA,#data;
Adata→A
XRLdirect,A;
(direct)A→(direct)
XRLdirect,#data;
(direct)data→(direct)
若A=7FH,R1=0A5H,则执行指令XRLA,R1后,A=0DAH。
4.累加器清0和取反指令
累加器清0指令:
CLRA;
0→A
累加器按位取反指令:
CPLA;
→A
若A=55H,则执行指令:
CPLA;
执行结果A=0AAH
CLRA;
执行结果A=00H
5.循环移位指令
循环右移指令:
RRA
将累加器A的内容逐位循环右移一位。
如图所示:
例如,若A=6AH=01101010B,执行RRA指令后,A=35H。
循环左移指令:
RLA
将累加器A的内容逐位左移一位,如图所示:
例如,若A=0A3H=10100011B,执行RLA指令后,A=47B。
带进位循环右移指令:
RRCA
将累加器A的内容和进位位一起逐位循环右移一位,如图所示:
例如,若A=4BH=01001011B,CY=1,执行RRLA指令后,A=0A5H,CY=1。
此操作影响CY位。
带进位循环左移指令:
RLCA
将累加器A的内容和进位位一起逐位循环左移一位,如图所示:
四、程序控制指令
程序控制指令完成程序的转移、子程序的调用与返回、中断返回等功能。
指令运行的实质是改变程序计数器PC的值,使程序不按顺序执行,从而实现程序的分支、循环等功能。
1.无条件转移指令
相对转移指令:
SJMPrel
执行指令时,先将PC+2,再把指令中带符号的偏移量rel加到PC上,得到转移目标地址。
绝对转移指令:
AJMPaddr11
指令执行时,先将PC+2,然后将addr11送入PC10~PC0,而PC15~PC11保持不变。
这样就得到转移目标地址。
绝对转移范围是以AJMP指令的下一条指令高5位地址所确定的2KB范围内。
长转移指令:
LJMPaddr16;
addr16→PC
执行指令时,把16位地址addr16装入程序计数器PC,转移范围可达64KB。
间接转移指令:
JMP@A+DPTR;
A+DPTR→PC
执行指令时,数据指令DPTR和累加器A的内容相加装入程序计数器PC。
2.条件转移指令
累加器判零转移指令
JZrel;
若A=0,则PC+2+rel→PC,否则PC+2→PC
JNZrel;
若A≠0,则PC+2+rel→PC,否则PC+2→PC
比较转移指令
CJNEA,direct,rel;