1、第三章第三章MCS-51MCS-51单片机指令系统单片机指令系统 基本要求:基本要求:熟记熟记MCS-51MCS-51的主要指令及简单程序的编程方法。的主要指令及简单程序的编程方法。难点及处理:难点及处理:MCS-51MCS-51的的111111条指令比较枯燥条指令比较枯燥 ,需要记忆,可,需要记忆,可多读一些例题并动手编一编。多读一些例题并动手编一编。第一节第一节 指令及其表示方式指令及其表示方式一、指令的基本概念一、指令的基本概念指令让计算机做某操作所发命令指令让计算机做某操作所发命令指令系统指令系统一台计算机所有指令的集合。一台计算机所有指令的集合。MCS-51单片机共单片机共111条指
2、令条指令,分为五大类分为五大类二、指令格式二、指令格式 1.汇编语言指令格式汇编语言指令格式:标号字母打头的字母、数字、下划线串;一般不超过标号字母打头的字母、数字、下划线串;一般不超过8个;个;不与指令助记符相同;可有可无。不与指令助记符相同;可有可无。操作码必不可少操作码必不可少,不可更改不可更改.操作数可有、可无,可一可二,可是寄存器、地址、数据操作数可有、可无,可一可二,可是寄存器、地址、数据 可用十、二、十六、可用十、二、十六、BCD、ASCII表示。表示。注释可有、可无,分号打头,注释可有、可无,分号打头,可用汉字、英文及简单的符号表示。可用汉字、英文及简单的符号表示。标号标号:操
3、作码操作码 操作数操作数 ;注释注释;B00HLOOP:MOV B,#00H2.机器语言格式机器语言格式:单字节:单字节:双字节:双字节:NOP;空操作;空操作操作码操作码 操作数INC 00H;00H单元内容加单元内容加1三字节:三字节:操作码 操作数 操作数MOV DPTR,#2233HMOV 20H,#30H;30H送送20H单元单元每条指令字节数可从附表中查出,每条指令字节数可从附表中查出,操作码可从附录中查出。操作码可从附录中查出。单字节、单字节、双字节、双字节、三字节指令三字节指令76H05H 00H75H 20H 30H90H 22H 33H第二第二节节 寻址方式寻址方式 (后移
4、)后移)建议学完本章后再来学本节建议学完本章后再来学本节#立即数标志立即数标志#data8、#data168位、位、16位立即数位立即数 间接寻址符号间接寻址符号几个符号说明几个符号说明AACCDirect8位片内位片内RAM地址地址addr11、addr1611位、位、16位地址位地址Rel8位,补码位,补码-128+127Bit8位片内位片内RAM位地址位地址Rn工作寄存器工作寄存器 n=0,7Ri可间接寻址的工作寄存器可间接寻址的工作寄存器 i=0、1传送类指令分:传送类指令分:内部传送内部传送 外部传送外部传送 堆栈操作堆栈操作 数据交换数据交换将源操作数所指定的内容传送至目的将源操作
5、数所指定的内容传送至目的操作数指定的单元去,源字节内容保操作数指定的单元去,源字节内容保持不变持不变.一、内部数据传送指令一、内部数据传送指令格式格式:MOV ,功能功能第三节第三节 数据传送指令数据传送指令1 以累加器以累加器A为为 目的操作数目的操作数 MOV A,#data MOV A,direct MOV A,Rn MOV A,Ri2 以以direct为目的操作数为目的操作数 MOV direct,A MOV direct,#data MOV direct1,direct2 MOV direct,Rn MOV direct,RiMOV A,#33HMOV A,#4050HMOV A,6
6、0HMOV A,R0MOV A,R0MOV 20H,AMOV 20H,#10HMOV 20H,10HMOV 7FH,R7MOV 00H,R13 以以Rn为目的操作数为目的操作数 MOV Rn,A MOV Rn,#data MOV Rn,direct4 以以Ri为目的操作数为目的操作数 MOV Ri,A MOV Ri,#data MOV Ri,direct注注:(:(1)MOV后,源内容不变。后,源内容不变。(2)Ri寻址范围寻址范围0127因此,上例中30H如换成80H就错了例:例:MOV R0,A该类指令之前要给该类指令之前要给R0送一地址送一地址MOV R0,#30HMOV R0,#80H
7、5 MOV DPTR,#data16例例1.下列指令是否正确下列指令是否正确.MOV A,00H MOV B,#0F0H MOV R4,#0AAH MOV R4,#0AAH MOV 80H,#80H MOV P0,#80H MOV R2,77H MOV 0C3H,#00H MOV R9,#7FH MOV R0,R1 MOV#30H,80H MOV DPH,#30H MOV DPL,#20H例例2.将数将数3AH送内部送内部 RAM20H单元单元,试编程试编程MOV 20H,#3AH或或MOV R1,#20HMOV R1,#3AH4,7,8,9,10,11,行错,行错MOV 0F0H,#0F0H
8、MOV DPTR,#3020H MOV A,30H MOV 30H,20H MOV 20H,A例例3 将将30H与与20H内容互换内容互换例例4 分别将(分别将(1)00H单元单元 (2)30H单元单元 (3)80H单元单元置全置全“1”,分别编程。,分别编程。(1)MOV 00H,#0FFH或(或(1)MOV R0,#00H MOV R0,#0FFH或(或(1)MOV PSW,#00H MOV R0,#0FFH(2)MOV 30H,#0FFH或或(2)MOV R0,#30H MOV R0,#0FFH(3)MOV 80H,#0FFH例例5 设(设(70H)=60H,(,(60H)=30H,P1
9、口为口为 输入口,其值为输入口,其值为7BH,下列程序后:下列程序后:MOV R0,#70HMOV A,R0MOV R1,AMOV A,R1MOV R0,P1MOV 60H,#40H(70H)=H,(60H)=H,A=H,R0=H,R1=H7B40307060例例6 将内部将内部RAM 30H开始的开始的20 个数送至个数送至50H开始的区域去。开始的区域去。MOV R7,#14H MOV R0,#30H MOV R1,#50HLOOP:MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP RET编程三步骤:编程三步骤:1、初始化、初始化2、数据处理、数据处
10、理3、修改地址指针,控制程序是否结束。、修改地址指针,控制程序是否结束。二、外部数据传送指令二、外部数据传送指令1 外部外部RAM与与A的传送的传送 MOVX A,DPTR MOVX A,Ri MOVX DPTR,A MOVX Ri,A 例例7 将内部将内部RAM30H的内容传送到的内容传送到 外部外部RAM3000H单元。单元。MOV A,30H MOV DPTR,#3000H MOVX DPTR,A例例8 将外部将外部RAM 30H内容传送内容传送 到外部到外部RAM 2000H单元单元 MOV R0,#30H MOV DPTR,#3000HMOVX A,DPTRMOV DPTR,#200
11、0HMOVX DPTR,A 或或MOV P2,#30HMOV R0,#00H MOVX A,R0 MOV DPTR,#2000H MOVX DPTR,AMOVX A,R0MOV DPTR,#2000HMOVX DPTR,A例例9 将外部将外部RAM 3000H内容传送内容传送 到外部到外部RAM 2000H单元单元 2 ROM与与A的传送的传送MOVC MOVC A,A+PC MOVC A,A+DPTR 例例10 已知数已知数0-9的平方表如下的平方表如下 8000H:0 8001H:1 8002H:4 8009H:81 试根据试根据A的内容查其平方值。的内容查其平方值。MOV DPTR,#8
12、000H MOVC A,A+DPTR RET8000H DB 00H,01H,04H,09H,10H,19H,24H,31H,40H,51H三、数据交换指令三、数据交换指令 1 字节交换字节交换 XCH A,Rn XCH A,Ri XCH A,direct 2 半字节交换半字节交换XCHD A,RiSWAP A例例11 将内部将内部RAM单元单元30H的低的低 4位与高位与高4位互换,并保持位互换,并保持 A的内容不变。的内容不变。MOV 30H,#29HXCH A,30HSWAP AXCH A,30H四、堆栈操作指令 入栈:PUSH direct ;sp sp+1 (sp)(direct)出
13、栈:POP direct ;(direct)(sp),sp sp-1例例13 已知已知SP=39H,DPTR=0123H PUSH DPL PUSH DPH 后后 SP=-H,(3AH)=-H,(3BH)=-H例例12 设设SP=30H,内部,内部RAM中中 (50H)=ABH,要求将此,要求将此 数压入堆栈,然后再弹到数压入堆栈,然后再弹到 A中。中。3B2301如:如:PUSH 30H如:如:POP BMOV SP,#30HPUSH 50HPOP ACC例例14 SP=32H,30H、31H、32H内容分别为内容分别为20H、23、01 POP DPH DPH=_H POP DPL DPL
14、=_H POP SP 后后 SP=_H(2)PUSH ACC PUSH PSW POP PSW POP ACC(1)PUSH P0 PUSH P2 POP P0 POP P201231F例例15 堆栈的两个典型应用:堆栈的两个典型应用:将将P0与与P2内容互换内容互换子程序中用于保护现场、恢复现场子程序中用于保护现场、恢复现场2 带进位加法带进位加法 ADDC A,#data ADDC A,direct ADDC A,Rn ADDC A,Ri 第四节第四节 算术运算指令算术运算指令一、加法指令一、加法指令1 加法加法 ADD A,#data ADD A,direct ADD A,Rn ADD
15、A,Ri 注:该类指令影响注:该类指令影响CY、AC、P、OV标志标志例例16 设内部设内部RAM 30H(低位)、(低位)、31H和和40H、41分别存放一分别存放一 16位数,试将其相加,结果存入位数,试将其相加,结果存入50H、51H单元。单元。MOV A,30H ADD A,40H MOV 50H,A MOV A,31H ADDC A,41H MOV 51H,A3 加加1指令指令 INC A INC Rn INC direct INC Ri INC DPTR 例例17 编程将存放在编程将存放在31H33H中的数相加,其和放入中的数相加,其和放入30H单元单元 (设和不超过设和不超过8位
16、)。位)。MOV R0,#31HMOV A,R0INC R0ADD A,R0INC R0ADD A,R0MOV 30H,A MOV R0,#31H MOV R7,#03H MOV A,#00HLOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV 30H,A设(设(31H)=38H,(,(32H)=2BH,(33H)=8EH,PSW=90H程序执行后,程序执行后,A=?PSW=(CY AC F0 RS1 RS0 OV-P)=?F1H51H 01100011(38H+2BH)10001110 11110001例例18设设R0=7EH,(7EH)=FFH,(7FH)=40H 执
17、行下列程序后:执行下列程序后:INC R0 INC R0 INC R0 R0=_H,(7EH)=_H,(7FH)=_H7F0041二、减法指令二、减法指令 1 带借位的减法带借位的减法SUBB A,#data SUBB A,direct SUBB A,RnSUBB A,Ri 7BH-20H=?2 减减1指令指令 DEC A DEC Rn DEC direct DEC Ri MOV A,#7BHSUBB A,#20HCLR C ;将;将CY清清0例例19 试编写计算试编写计算1234H-0FE7H的程序,将差存入的程序,将差存入40H开始的单元。程序执行后,开始的单元。程序执行后,CY=_,AC
18、=_,P=_,OV=_。CLR CMOV A,#34HSUBB A,#0E7HMOV 40H,AMOV A,#12HSUBB A,#0FHMOV 41H,A0110三、三、BCD调整指令调整指令 DA A例:例:39+47=?39BCD=0011 100147BCD=0100 0111 1000 000080应该=86调整规则:调整规则:1、若、若A的低的低4位大于位大于9或或AC=1,则低,则低4位加位加6。2、若、若A的高的高4位大于位大于9或或CY=1,则高,则高4位加位加6如:已知如:已知A和和B的值为十的值为十 进制数,求其和。进制数,求其和。ADD A,B DA A注:注:DA A
19、只调整组合型、加法只调整组合型、加法 如遇减法,则稍加处理。如遇减法,则稍加处理。0011 10010000 00110000 100139BCD组合型39BCD非组合型2 除法指令:除法指令:DIV AB (3)A、B为为8位无符号数。位无符号数。如果如果B不等于不等于0,则则OV标志为标志为1,否则否则OV为为0.注注:(1)该指令执行时该指令执行时,使使CY请请O四、乘除运算指令四、乘除运算指令 1 乘法指令乘法指令 MUL AB ;BA A*B (2)乘积的低乘积的低8位在位在A中中,高高8位在位在B中中注:注:(1)A、B为无符号数为无符号数 (2)商在商在A中中,余数在余数在B中中
20、(3)该指令使该指令使CY、OV清清0。如除数为如除数为0,则,则A为不定值,为不定值,OV=1一、对一、对A的操作的操作 CLR A;A清清0 CPL A;A取反取反 第五节第五节 逻辑运算指令逻辑运算指令移位指令移位指令RL A RLC A RR ARRC A AD7 D0RL AAD7 D0CYRLC A注:注:A的内容左移一次等于乘以的内容左移一次等于乘以2;右移一次等于除以右移一次等于除以2例例20 指令组指令组RLC AJC NEXT 的作用是?的作用是?例例21 编程将编程将A的内容乘以的内容乘以10。或或MOV B,#0AHMUL ABRL AMOV B,ARL ARL AAD
21、D A,B如果A中为负数,则程序转NEXT。ANL A,#dataANL A,directANL A,RnANL A,RiANL direct,AANL direct,#data二、逻辑运算二、逻辑运算ORL A,#dataORL A,directORL A,RnORL A,RiORL direct,AORL direct,#dataXRL A,#dataXRL A,directXRL A,RnXRL A,RiXRL direct,AXRL direct,#data注:常用该类指令对数据加工处理注:常用该类指令对数据加工处理如使如使A高高4位清位清0,低低4位不变位不变:使使A按位求反:按位求
22、反:使内部使内部RAM30H单元低单元低4位置位置1,高,高4位不变:位不变:ANL A,#0FHORL 30H,#0FHXRL A,#0FFH例例22 设外外部数据存储器(设外外部数据存储器(3000H)=B5H,编程编程 使其符号位使其符号位 变反、变反、D0位置位置1、D1和和D2位清位清0 MOV DPTR,#3000H MOV A,DPTR XRL A,#80HORL A,#01HANL A,#0F9HMOVX DPTR,A例例23 设设-32原原=10100000B=A0H,试编程求试编程求-32补。补。MOV A,#0A0HANL A,#7FHCPL AINC AXRL A,#7
23、FH例例24 已知已知A=8AH,R1=73H,试编程将,试编程将A的高的高4位与位与 R1的低的低4位合并成一个字节放在位合并成一个字节放在R0中。中。ANL A,#0F0HMOV R0,AMOV A,R1ANL A,#0FHORL A,R0MOV R0,A例例25 已知数字已知数字6和和7的的ASCII码(码(00110110B和和00110111B)分别存于分别存于40H和和41H单元,将其转换相应的单元,将其转换相应的BCD数数 (0110B和和0111B)以压缩形式存于)以压缩形式存于40H单元中,试单元中,试 编程。编程。ANL 40H,#0FH MOV A,41H ANL A,#
24、0FH SWAP A ORL 40H,A 第六节第六节 控制转移和位操作指令控制转移和位操作指令 一、控制转移一、控制转移 LJMP addr16 ;PC PC+3 PC addr16 AJMP addr11 ;PC PC+2 PC 010 addr11 PC 1115不变 SJMP rel ;PC PC+2 PC PC+rel JMP A+DPTR;PC DPTR+A LJMP 0F0F0H3000H:AJMP 30F0H6080H:AJMP 6900H是错指令是错指令等价于等价于 0100H:LJMP 0123H0100H:SJMP 21H多分支转移指令多分支转移指令 PC=0100H+2
25、+21H=0123H0100H:SJMP 81H向上转,向上转,即目标地址小于即目标地址小于0100H1 无条件转移无条件转移注:注:SJMP rel 指令为指令为2字节指令,字节指令,80 rel如如:1000H:SJMP LOOP1 LOOP1为为1054H52LOOP:SJMP LOOP即:即:SJMP$80 FE80rel=1054H-1000H-2=52Hrel为为8位有符号数位有符号数-相对偏移量相对偏移量向上移向上移(小地址小地址):rel=FE-(源、目的地址差的绝对值源、目的地址差的绝对值)向下移向下移(大地址大地址):rel=(源、目的地址差的绝对值源、目的地址差的绝对值)
26、-22 条件转移指令条件转移指令(1)JZ rel JNZ rel(2)CJNE A,direct,rel CJNE A,#data,rel CJNE Ri,#data,rel CJNE Rn,#data,rel(3)DJNZ direct,rel DJNZ Rn,rel例例26 将内部将内部RAM31H开始的开始的 10个无符号数相加结果存入个无符号数相加结果存入 30H单元,设和不超过单元,设和不超过8位。位。MOV R7,#09H MOV R0,#31H MOV A,R0LOOP:INC R0 ADD A,R0 DJNZ R7,LOOP MOV 30H,A SJMP$MOV DPTR,#
27、5500H MOV R0,#40H LOOP:MOVX A,DPTR MOV R0,A INC DPTR INC R0 CJNE R0,#50H,LOOP SJMP$例例27 将外部将外部RAM5500H开始内容送至内部开始内容送至内部RAM 40H4FH3 子程序调用及返回 LCALL addr16;PC PC+3 SP SP+1 (SP)PC07 SP SP+1 (SP)PC815 PC addr015 ACALL addr11;PC PC+2 SP SP+1 (SP)PC07 SP SP+1 (SP)PC815 PC 010 addr11 PC1115不变 RET ;PC 8 15 (S
28、P)SP SP-1 PC 07 (SP)SP SP-1 RETI ;中断返回2000H:LCALL 1000HSP33H32H31H4 空操作指令空操作指令NOP20H03H二、二、位操作指令位操作指令4 位条件转移位条件转移 JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel注注:3、5条区别条区别 3 位逻辑运算位逻辑运算:ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit CPL C CPL bit 2 位控制:位控制:CLR C CLR bit SETB C SETB bitMOV C,20HMOV C,P
29、SW.5SETB 0A0HSETB P2.0ANL C,/80HJC 70HJNB 99H,99H1 位传送:位传送:MOV C,bit MOV bit,CC又叫位累加器又叫位累加器例例28 按图示编程按图示编程D7 D0D7 D031H30HMOV A,31HMOV C,ACC.7MOV A,30HRLC AMOV 30H,AMOV A,31HRLC AMOV 31H,A例例29 内部内部RAM 40H单元中有单元中有ASCII码码(b7=0),编程,编程,给该数的最给该数的最 高位加上奇校验,送回原单元高位加上奇校验,送回原单元.例例30 编程序实现以下逻辑操作编程序实现以下逻辑操作 如果
30、如果P1.1=1,ACC.0=1且且OV=0则将则将CY置置1 MOV A,40H JB P,K SETB ACC.7 k:MOV 40H,AMOV C,P1.1ANL C,ACC.0ANL C,/OV+P1.7P2.0P2.1P2.7P2.3例例31 编程:编程:根据下列逻辑电路图求根据下列逻辑电路图求P1.7。MOV C,P2.1ORL C,/P2.0CPL CMOV F0,CMOV C,P2.7ANL C,P2.3ORL C,F0MOV P1.7,C例例32 判断判断A与与30H单元的内容,若单元的内容,若A=(30H),转向),转向LOOP1;若若A(30H),转向转向LOOP2;否则
31、,转向;否则,转向LOOP3。CJNE A,30H,NEXT SJMP LOOP1NEXT:JNC LOOOP2 JC LOOP3 (本章)第二节(本章)第二节 寻址方式寻址方式 一、立即寻址一、立即寻址MOV A,#06H二、直接寻址二、直接寻址 MOV A,06H三、寄存器寻址三、寄存器寻址INC R0注:下列两条指令等价,写法不同注:下列两条指令等价,写法不同 寻址方式不同寻址方式不同MOV A,B;寄存器寻址方式;寄存器寻址方式MOV A,0F0H;直接寻址方式;直接寻址方式寄存器包括:寄存器包括:Rn、A、B、DPTR、CY 四、寄存器间接寻址四、寄存器间接寻址INC R0五、变址寻
32、址(带五、变址寻址(带A+PC、A+DPTR)MOVC A,A+DPTR六、相对寻址六、相对寻址SJMP 54H七、位寻址七、位寻址MOV C,20HMOV C,ACC.7寻址方式寻址方式-指令中得到操作数的方式指令中得到操作数的方式第二章第二章 第三节第三节 MCS51单片机时序单片机时序1、指令周期、指令周期执行一条指令所需时间执行一条指令所需时间2、机器周期(、机器周期(M周期周期-machine)一个指令周期由一个指令周期由1、2、4个个M周期组成。周期组成。3、状态周期(、状态周期(S周期周期-status)1M=6S4、T周期(节拍周期(节拍P、主频、晶振)、主频、晶振)1S=2T
33、(P1、P2)MCS51的主频的主频=6MHZ或或12MHZ1M=1/6MHZ*12=2s每条指令的每条指令的M周周期数可查期数可查 附表附表MCS-51指令的取指指令的取指/执行时序执行时序 如图如图2-14所示,按照所示,按照MCS-51单片机的规定:一个机器周期单片机的规定:一个机器周期分为分为6个状态周期,一个状态周期含两个振荡周期,即一个机器个状态周期,一个状态周期含两个振荡周期,即一个机器周期周期=12个振荡周期。在每个机器周期中,个振荡周期。在每个机器周期中,ALE信号两次有效信号两次有效,一次在,一次在S1P2和和S2P1期间期间,一次在一次在S4 P2 和和S5 P1 期间。
34、期间。S1P1 P2S2P1 P2S3P1 P2S4P1 P2S5P1 P2S6P1 P2S1P1 P2时钟读操作码读操作码(无效)S1 S2 S3 S4 S5 S6 读第二字节 S1 S2 S3 S4 S5 S6 (a)单字节单周期(b)双字节单周期 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 读操作码读操作码(无效)(c)单字节双周期图 2-14 MCS-51的取指/执行时序1M周期读操作码例例33 假设一台假设一台8051单片机的时钟频率为单片机的时钟频率为12MHz,要求设,要求设 计一个软件延时程序,延时时间为计一个软件延时程序,延时时间为1ms。DIMS:MOV R7,#200 1DELAY:NOP 1 NOP 1 NOP 1 DJNZ R7,DELAY 2 RET 21+(1+1+1+2)*200+2=1003M1M=12个个T=12*1/12=1 s1003*1s1ms