第三章 MCS-51指令系统_第1页
第三章 MCS-51指令系统_第2页
第三章 MCS-51指令系统_第3页
第三章 MCS-51指令系统_第4页
第三章 MCS-51指令系统_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章MCS-51单片机指令系统

基本要求:熟记MCS-51的主要指令及简单程序的编程方法。

难点及处理:

MCS-51的111条指令比较枯燥,需要记忆,可多读一些例题并动手编一编。第一节指令及其表示方式一、指令的基本概念指令--让计算机做某操作所发命令指令系统--一台计算机所有指令的集合。MCS-51单片机共111条指令,分为五大类二、指令格式

1.汇编语言指令格式:标号--字母打头的字母、数字、下划线串;一般不超过8个;不与指令助记符相同;可有可无。操作码--必不可少,不可更改.操作数--可有、可无,可一可二,可是寄存器、地址、数据可用十、二、十六、BCD、ASCII表示。注释--可有、可无,分号打头,可用汉字、英文及简单的符号表示。标号:操作码操作数;注释;B00HLOOP:MOVB,#00H2.机器语言格式:单字节:双字节:NOP;空操作操作码操作码操作数INC00H;00H单元内容加1三字节:操作码操作数操作数MOVDPTR,#2233HMOV20H,#30H;30H送20H单元每条指令字节数可从附表中查出,操作码可从附录中查出。单字节、双字节、三字节指令76H05H00H75H20H30H90H22H33H第二节

寻址方式

后移)建议学完本章后再来学本节#--立即数标志#data8、#data16--8位、16位立即数

@--间接寻址符号几个符号说明A--ACCDirect--8位片内RAM地址addr11、addr16--11位、16位地址Rel--8位,补码-128~+127Bit--8位片内RAM位地址Rn--工作寄存器n=0,…7Ri--可间接寻址的工作寄存器i=0、1传送类指令分:内部传送外部传送堆栈操作数据交换将源操作数所指定的内容传送至目的操作数指定的单元去,源字节内容保持不变.一、内部数据传送指令格式:MOV<目的操作数>,<源操作数>功能第三节数据传送指令1以累加器A为目的操作数

MOVA,#data

MOVA,directMOVA,Rn

MOVA,@Ri2以direct为目的操作数

MOVdirect,AMOVdirect,#dataMOVdirect1,direct2MOVdirect,Rn

MOVdirect,@RiMOVA,#33HMOVA,#4050HMOVA,60HMOVA,R0MOVA,@R0MOV20H,AMOV20H,#10HMOV20H,10HMOV7FH,R7MOV00H,@R13以Rn为目的操作数

MOVRn,AMOVRn,#dataMOVRn,direct4以@Ri为目的操作数

MOV@Ri,AMOV@Ri,#dataMOV@Ri,direct注:(1)MOV后,源内容不变。(2)@Ri寻址范围0~127因此,上例中30H如换成80H就错了例:MOV@R0,A该类指令之前要给R0送一地址MOVR0,#30HMOVR0,#80H5MOVDPTR,#data16例1.下列指令是否正确.

MOVA,00HMOVB,#0F0HMOVR4,#0AAHMOV@R4,#0AAHMOV80H,#80HMOVP0,#80HMOV@R2,77HMOV0C3H,#00HMOVR9,#7FHMOV@R0,@R1MOV#30H,80HMOVDPH,#30HMOVDPL,#20H例2.将数3AH送内部

RAM20H单元,试编程MOV20H,#3AH或MOVR1,#20HMOV@R1,#3AH4,7,8,9,10,11,行错MOV0F0H,#0F0HMOVDPTR,#3020HMOVA,30HMOV30H,20HMOV20H,A例3将30H与20H内容互换例4分别将(1)00H单元(2)30H单元(3)80H单元置全“1”,分别编程。(1)MOV00H,#0FFH或(1)MOVR0,#00HMOV@R0,#0FFH或(1)MOVPSW,#00H

MOVR0,#0FFH(2)MOV30H,#0FFH或(2)MOVR0,#30HMOV@R0,#0FFH(3)MOV80H,#0FFH例5设(70H)=60H,(60H)=30H,P1口为输入口,其值为7BH,下列程序后:MOVR0,#70HMOVA,@R0MOVR1,AMOVA,@R1MOV@R0,P1MOV60H,#40H(70H)=H,(60H)=H,A=H,R0=H,R1=H7B40307060例6将内部RAM30H开始的20个数送至50H开始的区域去。

MOVR7,#14HMOVR0,#30HMOVR1,#50HLOOP:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR7,LOOPRET编程三步骤:1、初始化2、数据处理3、修改地址指针,控制程序是否结束。二、外部数据传送指令1外部RAM与A的传送

MOVX

A,@DPTRMOVX

A,@Ri

MOVX@DPTR,AMOVX@Ri,A例7将内部RAM30H的内容传送到外部RAM3000H单元。

MOVA,30HMOVDPTR,#3000HMOVX@DPTR,A例8将外部RAM30H内容传送到外部RAM2000H单元

MOVR0,#30HMOVDPTR,#3000HMOVXA,@DPTRMOVDPTR,#2000HMOVX@DPTR,A或MOVP2,#30HMOVR0,#00HMOVXA,@R0MOVDPTR,#2000HMOVX@DPTR,AMOVXA,@R0MOVDPTR,#2000HMOVX@DPTR,A例9将外部RAM3000H内容传送到外部RAM2000H单元

2ROM与A的传送MOVCMOVCA,@A+PCMOVCA,@A+DPTR例10已知数0---9的平方表如下8000H:08001H:18002H:48009H:81

试根据A的内容查其平方值。MOVDPTR,#8000HMOVCA,@A+DPTRRET8000HDB00H,01H,04H,09H,10H,19H,24H,31H,40H,51H三、数据交换指令

1字节交换

XCHA,Rn

XCHA,@Ri

XCHA,direct2半字节交换XCHDA,@RiSWAPA例11将内部RAM单元30H的低4位与高4位互换,并保持

A的内容不变。MOV30H,#29HXCHA,30HSWAPAXCHA,30H四、堆栈操作指令入栈:PUSHdirect;spsp+1

(sp)(direct)出栈:POPdirect;(direct)(sp),spsp-1例13已知SP=39H,DPTR=0123HPUSHDPLPUSHDPH后

SP=----H,

(3AH)=----H,(3BH)=----H例12设SP=30H,内部RAM中(50H)=ABH,要求将此数压入堆栈,然后再弹到

A中。3B2301如:PUSH30H如:POPBMOVSP,#30HPUSH50HPOPACC例14SP=32H,30H、31H、32H内容分别为20H、23、01

POPDPHDPH=______HPOPDPLDPL=____HPOPSP后SP=____H(2)

PUSHACCPUSHPSW…POPPSWPOPACC(1)

PUSHP0PUSHP2POPP0POPP201231F例15堆栈的两个典型应用:将P0与P2内容互换子程序中用于保护现场、恢复现场2带进位加法

ADDCA,#dataADDCA,directADDCA,Rn

ADDCA,@Ri第四节算术运算指令一、加法指令1加法

ADDA,#dataADDA,directADDA,Rn

ADDA,@Ri注:该类指令影响CY、AC、P、OV标志例16设内部RAM30H(低位)、31H和40H、41分别存放一16位数,试将其相加,结果存入50H、51H单元。MOVA,30HADDA,40HMOV50H,AMOVA,31HADDCA,41HMOV51H,A3加1指令

INCAINCRn

INCdirectINC@Ri

INCDPTR例17编程将存放在31H~33H中的数相加,其和放入30H单元(设和不超过8位)。MOVR0,#31HMOVA,@R0INCR0ADDA,@R0INCR0ADDA,@R0MOV30H,A

MOVR0,#31HMOVR7,#03H

MOVA,#00HLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOV30H,A设(31H)=38H,(32H)=2BH,(33H)=8EH,PSW=90H程序执行后,A=?PSW=(CYACF0RS1RS0OV--P)=?F1H51H

01100011(38H+2BH)1000111011110001例18设R0=7EH,(7EH)=FFH,(7FH)=40H

执行下列程序后:

INC@R0INCR0INC@R0R0=____H,(7EH)=____H,(7FH)=____H7F0041二、减法指令

1带借位的减法SUBBA,#dataSUBBA,directSUBBA,RnSUBBA,@Ri7BH-20H=?2减1指令

DECADECRn

DECdirectDEC@RiMOVA,#7BHSUBBA,#20HCLRC;将CY清0例19试编写计算1234H-0FE7H的程序,将差存入40H开始的单元。程序执行后,

CY=____,AC=____,P=____,OV=____。CLRCMOVA,#34HSUBBA,#0E7HMOV40H,AMOVA,#12HSUBBA,#0FHMOV41H,A0110三、BCD调整指令

DAA例:39+47=?39BCD=0011100147BCD=01000111

1000000080应该=86调整规则:1、若A的低4位大于9或AC=1,则低4位加6。2、若A的高4位大于9或CY=1,则高4位加6如:已知A和B的值为十进制数,求其和。

ADDA,BDAA注:DAA只调整组合型、加法如遇减法,则稍加处理。00111001000000110000100139BCD组合型39BCD非组合型2除法指令:DIVAB(3)A、B为8位无符号数。如果B不等于0,则OV标志为1,否则OV为0.注:(1)该指令执行时,使CY请O四、乘除运算指令1乘法指令MULAB;BAA*B(2)乘积的低8位在A中,高8位在B中注:(1)A、B为无符号数(2)商在A中,余数在B中(3)该指令使CY、OV清0。如除数为0,则A为不定值,OV=1一、对A的操作

CLRA;A清0

CPLA;A取反第五节逻辑运算指令移位指令RLARLCARRARRCA

AD7D0RLAAD7D0CYRLCA注:A的内容左移一次等于乘以2;右移一次等于除以2例20指令组RLCAJCNEXT

的作用是?例21编程将A的内容乘以10。或MOVB,#0AHMULABRLAMOVB,ARLARLAADDA,B如果A中为负数,则程序转NEXT。ANLA,#dataANLA,directANLA,RnANLA,@RiANLdirect,AANLdirect,#data二、逻辑运算ORLA,#dataORLA,directORLA,RnORLA,@RiORLdirect,AORLdirect,#dataXRLA,#dataXRLA,directXRLA,RnXRLA,@RiXRLdirect,AXRLdirect,#data注:常用该类指令对数据加工处理如使A高4位清0,低4位不变:使A按位求反:使内部RAM30H单元低4位置1,高4位不变:ANLA,#0FHORL30H,#0FHXRLA,#0FFH例22设外外部数据存储器(3000H)=B5H,编程使其符号位变反、D0位置1、D1和D2位清0

MOVDPTR,#3000HMOVA,@DPTRXRLA,#80HORLA,#01HANLA,#0F9HMOVX@DPTR,A例23设[-32]原=10100000B=A0H,

试编程求[-32]补。MOVA,#0A0HANLA,#7FHCPLAINCAXRLA,#7FH例24已知A=8AH,R1=73H,试编程将A的高4位与

R1的低4位合并成一个字节放在R0中。ANLA,#0F0HMOVR0,AMOVA,R1ANLA,#0FHORLA,R0MOVR0,A例25已知数字6和7的ASCII码(00110110B和00110111B)

分别存于40H和41H单元,将其转换相应的BCD数(0110B和0111B)以压缩形式存于40H单元中,试编程。ANL40H,#0FHMOVA,41HANLA,#0FHSWAPAORL40H,A第六节控制转移和位操作指令一、控制转移

LJMPaddr16;PCPC+3

PCaddr16AJMPaddr11;PCPC+2PC0~10addr11PC11~15不变

SJMPrel;PCPC+2PCPC+rel

JMP@A+DPTR;PCDPTR+ALJMP0F0F0H3000H:AJMP30F0H6080H:AJMP6900H是错指令等价于0100H:LJMP0123H0100H:SJMP21H多分支转移指令PC=0100H+2+21H=0123H0100H:SJMP81H—向上转,即目标地址小于0100H1无条件转移注:SJMPrel

指令为2字节指令,80rel如:1000H:SJMPLOOP1LOOP1为1054H52LOOP:SJMPLOOP即:SJMP$80FE80rel=1054H-1000H-2=52Hrel为8位有符号数----相对偏移量向上移(小地址):rel=FE-(源、目的地址差的绝对值)向下移(大地址):rel=(源、目的地址差的绝对值)-22条件转移指令(1)JZrel

JNZrel(2)CJNEA,direct,rel

CJNEA,#data,rel

CJNE@Ri,#data,rel

CJNERn,#data,rel(3)DJNZdirect,rel

DJNZRn,rel例26将内部RAM31H开始的10个无符号数相加结果存入30H单元,设和不超过8位。MOVR7,#09HMOVR0,#31HMOVA,@R0LOOP:INCR0ADDA,@R0DJNZR7,LOOPMOV30H,ASJMP$MOVDPTR,#5500HMOVR0,#40HLOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0CJNER0,#50H,LOOPSJMP$例27将外部RAM5500H开始内容送至内部RAM40H~4FH3子程序调用及返回

LCALLaddr16;PCPC+3SPSP+1(SP)PC0~7SP

SP+1(SP)PC8~15PCaddr0~15ACALLaddr11;PCPC+2SPSP+1(SP)PC0~7SPSP+1(SP)

PC8~15PC0~10addr11PC11~15不变

RET;PC8~15(SP)SPSP-1PC0~7(SP)SPSP-1RETI;中断返回2000H:LCALL1000HSP33H32H31H4空操作指令NOP20H03H二、位操作指令4位条件转移

JCrel

JNCrel

JBbit,rel

JNBbit,rel

JBCbit,rel注:3、5条区别3位逻辑运算:

ANLC,bitANLC,/bitORLC,bitORLC,/bit

CPLCCPLbit2位控制:

CLRCCLRbitSETBCSETBbitMOVC,20HMOVC,PSW.5SETB0A0HSETBP2.0ANLC,/80HJC70HJNB99H,99H1位传送:

MOVC,bitMOVbit,CC又叫位累加器例28按图示编程D7D0D7D031H30HMOVA,31HMOVC,ACC.7MOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,A例29内部RAM40H单元中有ASCII码(b7=0),编程,给该数的最高位加上奇校验,送回原单元.例30编程序实现以下逻辑操作如果P1.1=1,ACC.0=1且OV=0则将CY置1MOVA,40HJBP,KSETBACC.7k:MOV40H,AMOVC,P1.1ANLC,ACC.0ANLC,/OV++P1.7P2.0P2.1P2.7P2.3例31编程:根据下列逻辑电路图求P1.7。MOVC,P2.1ORLC,/P2.0CPLCMOVF0,CMOVC,P2.7ANLC,P2.3ORLC,F0MOVP1.7,C例32判断A与30H单元的内容,若A=(30H),转向LOOP1;

若A>(30H),转向LOOP2;否则,转向LOOP3。CJNEA,30H,NEXTSJMPLOOP1NEXT:JNCLOOOP2JCLOOP3

(本章)第二节寻址方式一、立即寻址MOVA,#06H二、直接寻址MOVA,06H三、寄存器寻址INCR0注:下列两条指令等价,写法不同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论