《80C51单片机指令系统.ppt》由会员分享,可在线阅读,更多相关《80C51单片机指令系统.ppt(58页珍藏版)》请在三一办公上搜索。
1、单片机原理与应用,第3章 80C51单片机指令系统,1.CPU包括哪两部分电路?,2.80C51单片机引脚有多少个?分为几类?,3.80C51内部RAM空间分配?ROM空间?,4.80C51单片机PO口在作为通用I/O口使用时要注意什么?,5.80C51单片机时钟电路一般外接晶振多少HZ?相应的机器周期如何计算?,6.80C51单片机复位如何实现,有哪两种方式?,单片机指令系统简介,80C51指令寻址方式,80C51单片机指令分类介绍,1,2,3,本章主要内容,3.1 单片机指令系统概述,一、基本概念指令:规定计算机基本操作的语句或命令。指令系统:一个单片机所能执行的指令集合,是单片机提供给用
2、户使用的软件资源。,二、指令格式:标号:操作码目的操作数,源操作数;注释标号:用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟17个字母或数字,并以“:”结尾。操作码:用英文缩写的指令功能助记符,规定指令进行什么操作,源操作数:提供操作的对象指出的是一个源地址,表示操作数来自何处。也可以是一个立即数,表示操作的对象与目的操作数之间要用“,”号隔开。,目的操作数:提供操作的对象;指出一个目标地址,表示操作结果存放单元的地址;与操作码之间必须以一个或几个空格分隔。,注释:在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中
3、文、英文或某些符号来表示,显然它不存入计算机,只出现在源程序中。,标号:操作码目的操作数,源操作数;注释 表示该项是可选项;例如:LOOP:ADD A,10H;(A)(A)+10H CLR A RETI RET,三、指令中常用符号介绍(1)Ri和Rn:R表示当前工作寄存器区中的工作寄存器,当前工作寄存器的选定是由PSW的RS1和RS0位决定的。i表示0或1,即R0和R1;n表示07,即R0R7;(2)data:表示立即数,data为8位二进制常数。data是指包含在指令中的8位立即数。(3)data16:包含在指令中的16位立即数。,(4)rel:8位补码形式表示的地址偏移量范围为-128+1
4、27,主要用于无条件相对短转移指令SJMP和所有的条件转移指令中。,(5)addr16:16位目的地址目的地址可在全部程序存储器的64 KB空间范围内,用于无条件长转移指令LJMP和子程序长调用指令LCALL中,(6)addr11:11位目的地址以该11位地址替换PC的低11位内容,形成新的PC值。用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中,(7)direct:表示直接寻址的地址,即8位内部数据存储器RAM的单元地址(0127);特殊功能寄存器SFR的地址。对于SFR可直接用其名称来代替其直接地址。,(8)bit:内部数据存储器RAM中位寻址区中的位地址特殊功能寄存器SFR中
5、的可直接寻址位地址或名称。,(9):间接寻址寄存器或基地址寄存器的前缀,如Ri,DPTR,表示寄存器间接寻址。,(10)(X):表示X(地址或寄存器)中的内容。在注释中使用。,(11)(X):表示(X)作地址,该地址的内容用(X)表示。在注释中使用。,(12)/符号:加在位地址的前面,表示对该位状态取反。,3.2 80C51单片机指令寻址方式,寻址方式:如何确定操作数单元地址,并取得操作数(源操作数的寻址方式)80C51有7种寻址方式:,1.寄存器寻址方式,2.直接寻址方式,3.寄存器间接寻址方式,4.立即寻址方式,5.变址寻址方式,6.位寻址方式,7.相对寻址方式,1.寄存器寻址方式操作数在
6、寄存器(以符号名表示寄存器)中,指定寄存器就能得到操作数寄存器寻址的主要对象:当前通用寄存器,R0R7;部分专用寄存器 A、AB、DPTR例:MOV A,R0,2.直接寻址方式操作数直接以存储单元地址的形式给出寻址范围:在内部RAM中低128单元:直接以单元地址形式给出专用寄存器:可以以单元地址形式给出,还可以寄存器符号形式给出,直接寻址是访问专用寄存器的唯一方法。例:MOV A,30H MOVA,P1,3.寄存器间接寻址方式由指令指出某一个寄存器的内容作为操作数的地址。在寄存器前加符号。寻址范围:访问片内RAM低128单元,用R0和R1。MOV A,R0(R1)用访问片外RAM 64KB,用
7、DPTR。MOVX A,DPTR访问片外RAM低256单元,也可以用R0和R1。MOVX A,R0(R1)(DPTR)堆栈操作指令 PUSH POP,4.立即寻址方式在指令中直接给出操作数。立即数前面加#标志。例:MOVA,#30H MOVDPTR,#2000H,5.变址寻址以16位的程序计数器PC或数据指针DPTR作为基址寄存器,以8位的累加器A作为变址寄存器,并以两者内容相加形成的16位地址为操作数地址。只能对程序存储器进行寻址,范围64K。指令只有三条:MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR,6.位寻址方式指令中直接给出位地址,对数据位进行处理寻址范围:
8、片内RAM的位寻址区(128位)。SFR的可寻址位(83位)。直接使用位地址 位名称表示方法 单元地址加位数 专用寄存器符号加位数例:MOV C,3AH,7.相对寻址方式为转移指令采用的寻址方式。以PC的内容(相对转移指令的存储地址加上该指令的字节数)作为基址寄存器,加上指令中给定的偏移量所得结果作为转移地址。偏移量rel是有符号的单字节数。以补码表示,其值的范围是-128+127,负数表示从当前地址向前转移,正数 表示从当前地址向后转移。目的地址=转移指令地址+转移指令字节数+rel,说明下列指令中源操作数的寻址方式MOVA,R7MOVA,R1MOVCA,A+DPTRMOVA,P0MOVA,
9、#88HMOVA,88HMOV C,P0.0,3.3 80C51单片机指令系统,80C51指令分类(按功能分)数据传送指令(29条)算术运算指令(24条)逻辑运算指令及移位类指令(24条)控制转移类指令(17条)位操作类指令(17条),一、数据传送指令(29条)1.内部RAM单元之间数据传送指令(16条)2.片外RAM数据传送指令(4条)3.ROM数据传送指令(2条)4.交换指令(5条)5.堆栈指令(2条),1.内部RAM单元之间数据传送指令(16)以A为目标操作数的传送指令(4)以Rn为目标操作数的指令(3)以直接地址为目标操作数的指令(5)以间接地址为目标操作数的指令(3)16位数据传送指
10、令(1),目的操作数为A(4)MOV A,#data MOV A,directMOV A,RnMOV A,Ri目的操作数为Rn(3)MOV Rn,#dataMOV Rn,directMOV Rn,A目的操作数为DPTR(1)MOV DPTR,#data,例1:指令执行前(A)=33H,(R0)=30H,(30H)=55H,指令执行后的结果:MOVA,R0;(A)=?MOVA,30H;(A)=?MOVA,R0;(A)=?MOVA,#20H;(A)=?,30H,55H,(30H)=55H,20H,例2指令执行前(A)=33H,(R0)=30H,(30H)=55H,指令执行后的结果:MOVR0,A;
11、(R0)=MOVR3,30H;(R3)=MOVR7,#20H;(R7)=,33H,55H,20H,例3 指令执行前(DPTR)=2000H,指令执行后的结果:MOV DPTR,#8811H;,(DPTR)=8811H,目的操作数为direct(5)MOV direct,AMOV direct,directMOV direct,#dataMOV direct,RnMOV direct,Ri目的操作数为Ri(3)MOV Ri,AMOV Ri,directMOV Ri,#data,例4指令执行前(A)=33H,(R0)=20H,(20H)=55H,(40H)=88H,指令执行后的结果:MOV30H,
12、A;(30H)=MOV30H,R0;(30H)=MOV30H,R0;(30H)=MOV30H,#20H;(30H)=MOV30H,40H;(30H)=,33H,20H,55H,20H,88H,例5指令执行前(A)=33H,(R0)=30H,(30H)=55H,指令执行后的结果:MOV R0,A;(30H)=MOV R0,30H;(30H)=MOV R0,#20H;(30H)=,33H,55H,20H,练习一,(59H)=50H,执行指令后的结果MOVA,59HMOVR0,AMOVA,#00HMOVR0,AMOVA,#25HMOV51H,AMOV53H,#70H,练习二,写出相应的指令(内RAM
13、内RAM)将R1的内容传送到20H单元。将A的内容传送到寄存器R5。将立即数30H传送到累加器A。将R0的内容传送到A。将立即数88H传送到50H单元。,2.片外RAM传送指令(4)寻址方式:寄存器间接寻址,只能通过A实现片内片外数据传送目的操作数为AMOVX A,RiMOVX A,DPTR目的操作数为RiMOVX Ri,AMOVX DPTR,A,例6:指令执行前(DPTR)=2000H,(A)=30H,(2000H)=55H,(R0)=20H,(20H)=88HMOVXA,DPTR;MOVXR0,A;,(A)=55H,(20H)=30H,练习3:按要求写出指令:将外部RAM中2000H单元的
14、内容送A,MOV DPTR,#2000HMOVXA,DPTR 法1,MOV P2,#20H 法2MOV R0,#00HMOVX A,R0,练习4:按要求写出指令:将A的内容送外部RAM中2000H单元,MOV DPTR,#2000HMOVXDPTR,A 法1,MOV P2,#20H 法2MOV R0,#00HMOVXR0,A,练习5:按要求写出指令:(内RAM 外RAM)将50H的内容送外部RAM中2000H单元,MOV DPTR,#2000HMOV A,50HMOVXDPTR,A,练习6:按要求写出指令:(外RAM 内RAM)将外部RAM中2000H的内容送50H单元,MOV DPTR,#2
15、000HMOVX A,DPTRMOV 50H,A,练习7:按要求写出指令:(外RAM 外RAM)将外部RAM中2000H的内容送1000H单元,MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#1000HMOVX DPTR,A,3.ROM数据传送指令(2条)ROM数据只能读,不能写,因此数据传送是单向的。MOVC A,A+PCMOVC A,A+DPTR片外ROM中的数据只能传送到累加器A。用于查阅常数表,DPTR、PC称为基地址寄存器,用于存放表格的首地址。A中的数称为地址偏移量,用于指出表格中待查数据存放的单元地址偏移表头地址的字节数。,例:指令执行前(DPTR)=20
16、00H,(A)=30H,(2030H)=55H,MOVC A,A+DPTR则(A)=(2000H+30H)=(2030H)=55H,ROM数据传送指令又称查表指令,例:MOV DPTR,#TABLEMOV A,#02HMOVC A,A+DPTRSJMP$TABLE:DB 0,1,24,9,16,25,36,49,64,81,或者MOV A,#02HADD A,#02HMOVC A,A+PCSJMP$TABLE:DB 0,1,24,9,16,25,36,49,64,81,4.数据交换指令(5条),将源操作数的内容和累加器A的内容互换XCHA,Rn;(A)(Rn)XCHA,direct;(A)(d
17、irect)XCHA,Ri;(A)(Ri)XCHDA,Ri;(A)30(Ri)30,最后一条指令将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位不变。,累加器高低半字节交换指令只有一条指令:SWAP A,例:已知:(A)=80H,(R0)=30H,(30H)=44H;执行下列指令后的结果:XCHA,R0;(A)=44H,(30H)=80HXCHDA,R0;(A)=84H,(30H)=40HXCHA,R0;(A)=30H,(R0)=80H,法1:XCHA,30H法2:MOVR0,A MOVA,30H MOV30H,R0,练习8:将A的内容和30H的内容互换。,MOV A,40
18、H XCH A,30H MOV 40H,A或 MOV A,40H MOV 40H,30H MOV 30H,A,练习9:将40H的内容和30H的内容互换。,MOVR0,#20H SWAPA XCHDA,R0 SWAPA,练习10(A)74(20H)30,思考?,2.将外RAM的内容和外RAM的内容互换。,1.将内RAM的内容和外RAM的内容互换。,5.堆栈操作指令(2条)进栈指令 PUSH direct(SP)+1(SP),(direct)(SP),出栈指令 POP direct(SP)(direct),(SP)-1(SP),注意:将A入栈或出栈应写成:PUSH ACC 或 PUSH 0E0H POP ACC 或 POP 0E0H,例:已知:(30H)=0FFH,(20H)=80H,(SP)=60H执行下列指令后的结果:PUSH 30H PUSH 20H(61H)=(30H)=0FFH;(62H)=(20H)=80H;,复习,常用堆栈指令有哪些?执行指令后的结果:(A)=05H,(R1)50H,(50H)=75H,(SP)=60H XCHA,R1 XCHDA,R1 XCHA,50H PUSHACC,Thank you!,