《单片机原理与实用技术》第3章.ppt
《《单片机原理与实用技术》第3章.ppt》由会员分享,可在线阅读,更多相关《《单片机原理与实用技术》第3章.ppt(95页珍藏版)》请在三一办公上搜索。
1、单片机原理与实用技术付晓光 莫海霞制作,第3章MCS-51指令系统,3.1单片机指令系统概述,指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。,指令,3.1.2 指令格式,指令的表示形式称指令格式。编写程序时必须严格按指令格式书写。MCS-51指令由操作码和操作数组成。汇编语言指令格式如下:操作码助记符 操作数1,操作数2,操作数3,1.操作码助记符2.操作数,3.2寻址方式,指令中,操作数可能是具体的数据,也可能是具体的存放数据的地址或符号,无论何种情况,都可由操作数取得参与指令运行的二进制数据。这个过程叫作寻址。,3.2.1 立即寻址方式,所谓立即寻址就
2、是操作数在指令中直接给出。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能作为目的操作数。立即数有8位立即数和16位立即数。使用时在立即数前加“#”标志。,例:MOV A,#20H MOV DPTR,#20D8H,3.2.2直接寻址方式,直接寻址就是操作数直接以单元地址的形式给出。直接地址以存贮单元形式出现。例如指令:MOV A,20H,3.2.3寄存器寻址方式,寄存器寻址就是操作数在寄存器中。例如指令:MOV A,R2,3.2.4寄存器间接寻址方式,寄存器间接寻址使用的寄存器为Ri和DPTR,使用时寄存器前面加“标志。即以下形式:MOV A,Ri MOVX A,DPTR例如:(R1)
3、80H、(80H)=33H,则执行指令MOV A,Ri后,累加器A的内容为33H而不是80H。,寄存器间接寻址是以寄存器中的内容为地址取得操作数的方法。和寄存器寻址相比,寄存器寻址时,寄存器中存放的是操作数,而寄存器间接寻址中时,寄存器中存放的是操作数的地址。,3.2.5基址加变址寻址方式,基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址寄存器,以两者内容相加形成16位地址作为操作数地址。例如指令:MOVC A,A+DPTR,3.2.6位寻址方式,位寻址方式就是以位为操作数。MCS-51单片机有相当强的位处理功能,可以对位进行直接操作。例如指令:MOV C,4AH,位寻址范围1)内部
4、RAM的位寻址区 2)可供位寻址的11个专用寄存器,3.2.7相对寻址方式,相对寻址是在相对转移指令中,根据地址相对当前PC的偏移量得到操作数的方式。如:JZ rel,偏移量rel是一带符号8位二进数的补码数,范围为-128+127。实际书写程序时往往先用地址标号代替,在汇编为机器指令时再计算出来。,例3-1 指出下列每一条指令的寻址方式。MOV 2FH,#40HMOV A,R0MOV DPTR,#2020HMOV 45H,P0MOV A,R1MOVC A,A+PCJC LOOP,中的源操作数为立即寻址,目的操作数为直接寻址。中的源操作数为寄存器间接寻址,目的操作数为寄存器寻址。中的源操作数为
5、16位立即寻址,目的操作数为寄存器寻址。中的源操作数和目的操作数都是直接寻址。中的源操作数和目的操作数都为寄存器寻址。中的源操作数为基址加变址寻址,目的操作数为寄存器寻址。中的操作数为相对寻址。,例3-2 判断下列指令是否正确,若不正确请指出错误:MOV A,DPTR MOV DPTR,#03H MOV#80H,R7 MOV B,C,解不正确。A是8位寄存器,DPTR为16位寄存器,不匹配。正确。不正确。#80H为立即数,不能作为目的地址。不正确。B为8位字节寄存器,C为1位位累加器,不匹配。,3.3 数据传送指令,1.通用传送指令MOV,指令格式:MOV,功能:把源操作数所表示的数据传送到目
6、的地址指定的存贮单元之中,而不改变源操作数。即该指令是“复制”,不是“搬家”。,3.3.1内部RAM数据传送指令,通用指令,2)以Rn为目的地址的指令MOV Rn,A;Rn(A)MOV Rn,direct;Rn(direct)MOV Rn,#data;Rn data,1)以累加器A为目的地址的指令MOV A,Rn;A(Rn)MOV A,direct;A(direct)MOV A,Ri;A(Ri)MOV A,#data;A data,4)以寄存器间接地址为目的的地址的指令MOV Ri,A;(Ri)(A)MOV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)data
7、,3)以直接地址为目的地址的指令MOV direct,A;direct(A)MOV direct,Rn;direct(Rn)MOV direct,direct;direct(direct)MOV direct,Ri;direct(Ri)MOV direct,#data;direct data,5)16位数据传送指令MOV DPTR,#data16;DPTR data16;DPL data70;DPH data158,例3-3 设RAM 40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。MOV R0,#40H MOV A,R0MOV R1,AM
8、OV B,R1MOV R1,P1MOV P2,P1,解执行结果为:(A)80H,(B)47H,(R0)40H,(R1)80H,(P1)0FFH,(P2)0FFH,(80H)0FFH。,;R0 40H;A(40H)80H;R1 80H;B(80H)47H;(80H)0FFH;P2 0FFH,1)字节交换指令XCH XCH A,Rn;(A)(Rn)XCH A,direct;(A)(direct)XCH A,Ri;(A)(Ri),2.数据交换指令,例:设(A)=08H,(R7)=0DCH,执行指令 XCH A,R7结果为:(A)=0DCH,(R7)=08H,功能:将累加器A中内容与源操作数互换。,例
9、:(A)=80H,(R0)=30H,(30H)=0FH,执行指令 XCHD A,R结果为:(A)=8FH,(30H)=00H,2)半字节交换XCHD,XCHD A,Ri;(A)低4位(Ri)低4位 功能:累加器A中内容与源操作数低4位交换,高4位不变。,3)累加器高低数字节交换指令SWAP A SWAP A;(A)低4位(A)高4位 功能:A中高4位与低4位互换。,例:(A)=80H,执行SWAP A结果为:(A)08H.,解 XCH A,20H SWAP A MOV R1,21H XCHD A,R1 SWAP A XCH A,20H,例3-4 试用交换指令使片内20H单元的高4位与21H单元
10、的低4位交换。,数据写入堆栈称入栈,数据从堆栈中读出称出栈。,3.栈操作指令,PUSH direct;SP(SP)+1,(SP)(direct)功能:将堆栈指针加1后,片内RAM单元内容送进栈顶单元,原RAM单元内容不变。说明:PUSH指令常用于保护CPU现场。栈操作是字节指令,每次只能压入或弹出1个字节的内容。如PUSH DPTR是错误的,但可以用以下两条指令完成DPTR的入栈。PUSH DPH PUSH DPL,1)入栈指令PUSH,例:设(A)=30H,(B)=80H,(SP)=50H.则执行指令:PUSH A PUSH B,结果为:(51H)=30H,(52H)=80H,(SP)=52
11、H,POPdirect;direct(SP),SP(SP)-1功能:将(SP)内容传送给片内RAM单元,SP内容减1。说明:栈操作要注意先入后出的原则。POP指令常用于恢复CPU现场,2)出栈指令POP,例3-5 试用栈操作指令完成P0和P1内容的互换。解 PUSH P0 PUSH P1 POP P0 POP P1,3.3.2 片外数据存贮器与累加器A 之间的传送指令,MOVX A,DPTR;A(DPTR)MOVX A,Ri;A(Ri)MOVX DPTR,A;(DPTR)(A)MOVX Ri,A;(Ri)(A),说明:片外数据存贮单元与片内RAM之间的数据传送以及片外数据存贮单元之间的数据传送
12、不能直接进行,必须通过累加器A中转。MOVX 20H,2000H及MOVX 3000H,2000H等都是错误的。寻址方式只能是寄存器间接寻址。参与间接寻址的寄存器只有Ri和DPTR两种(3个)。DPTR为16位寄数器,寻址范围为000H0FFFFH共64KB空间。而Ri是8位寄数器,只能寻址000FFH低256单元。,解 MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A MOV DPTR,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A,例3-6 将片外数据存贮器2000H单元的内容传送到片内的20H单元中;将片外数据存贮器2000H
13、单元的内容传送到片外0FAH单元。,3.3.3程序存贮器向累加器A传送指令,MOVC A,A+PC;A(A)+(PC)MOVC A,A+DPTR;A(A)+(DPTR),说明:程序存贮器只能读出,不能写入,所以其数据传送都是单向的,即从程序存贮器读出数据,并且只能向累加器A传送。ROM片内、片外是统一编址,该指令既可访问片内,又可访问片外程序存贮器。该类指令主要用于查表,又称查表指令。应用时,一般以PC或DPTR确定表格的首址,查表时,根据A中不同的内容查找到表格中的相应项,故此时称PC或DPTR为基址寄存器,A为变址寄存器,寻址方式为基址加变址寻址。使用DPTR作基址寄存器比较灵活,且不易出
14、错。建议尽可能使用MOVCA,DPTR指令。,解法一 以DPTR为基址寄存器,平方表首址可灵活安排在适当的位置如2000H,即平方表的内容从2000H单元放起。程序如下:ORG 1800H MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A ORG 2000H DB 00H,01H,04H,10H,19H,24H DB 31H,40H,51H,64H,,例3-7 以查表方式求出片内RAM中20H单元数的平方值,存入片内21H单元中。,ORG 1000H1000MOV A,20H 1001 ADD A,#03H 1003 MOVC A,A+PC10
15、04 MOV 21H,A1006 RET1007 DB 00H,01H,04H,解法二 以PC为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置。,XCH A,20H XCH A,30H XCH A,20H,例3-8 改正下列指令中的错误,完成其功能:MOV A,2000H;片外RAM 2000H单元内容送入A。MOVX 20H,2000H;片外RAM 2000H单元内容送入片内20H单元。MOVC A,2000H;将ROM 2000H单元内容送入A。MOVX A,A+DPTR;以查表方式将片外RAM单元的内容送入A。XCH 40H,30H;交换片内RAM 30H和40H单元的内容。
16、PUSH AB;将寄存器对AB的内容压入堆栈。,解 MOV DPTR,#2000H MOVX A,DPTR,MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A,MOV DPTR,#2000H MOV A,#0 MOVC A,A+DPTR,无法以查表方式将片外RAM 存贮单元的内容送入A。,PUSH A PUSH B,3.4算术运算类指令,1.不带进位加法指令ADD,ADD A,Rn;A(A)+(Rn)ADD A,direct;A(A)+(direct)ADD A,#data;A(A)+dataADD A,Ri;A(A)+(Ri),3.4.1 加法指令,功能:ADD指令把
17、源操作数与累加器A内容相加,结果存在累加器中。该操作不改变源操作数,影响PSW中的C、AC、OV和P位。说明:ADD指令的目的操作数只能是累加器A,且只有以上4种形式。如ADDB,40H或ADD A,203AH等都是不存在的,非法的。指令中,参加运算的两个8位二进制数,即可看作是8位无符号数(0255),也可以看作是7位带符号数的补码数(-128+127)。,例3-9 试编程计算40H和41H两单元字节数的和,并存放在42H单元。若(40H)=0B3H,(41H)=79H,给出计算结果并判断PSW受影响的位。,解程序如下:MOV A,40H ADD A,41H MOV 42H,A,若(40H)
18、=0B3H,(41H)=79H,则运算结果:若是无符号数,和为12CH;若是有符号数,和为+2CH。(42H)=2CH,(C)=1,(AC)=0,(OV)=0,(P)=1。,2.带进位加法指令ADCC,ADDC A,Rn;A(A)+(Rn)+(C)ADDC A,direct;A(A)+(direct)+(C)ADDC A,#data;A(A)+data+(C)ADDC A,Ri;A(A)+(Ri)+(C),功能:该操作与ADD类似,只是PSW中的进位位C参与运算。带进位加法指令通常用于多字节或多个数加法运算。,解当(C)0时,两指令运行结果一样,为(A)0A4H。当(C)1时,两指令运行的结果
19、不同,相差1。即ADD A,30H的结果为(A)0A4H,而ADDC A,30H的结果是(A)0A5H。显然,ADD指令与C值无关,而ADDC的运行结果与C值有关。,例3-10已知(A)=26H,(30H)=7EH,比较在(C)0、(C)1两种情况下执行 ADD A,30H 和 ADDC A,30H指令的结果。,解 MOV A,30H ADD A,40H;低字节相加 MOV 50H,A MOV A,31H ADDC A,41H;高字节相加 MOV 51H,A ADDC A,#00H;取高相加产生的进位 MOV 52H,A说明:多字节数求和,从低字节开始,最低字节相加用ADD指令,高字节相加用A
20、DDC指令。N字节数相加,结果可能为N+1字节数。为单独取得进位的值,可参考例311。,例3-11 两字节无符号数相加,被加数放在内部RAM30H,31H单元(低位放在前),加数放在内部RAM40H、41H单元。计算两数的和,放在50H52H单元中。,3.增量指令INC,INC A;A(A)+1INC Rn;Rn(Rn)+1INC direct;direct(direct)+1INC Ri;(R)i(Ri)+1INC DPTR;DPTR(DPTR)+1,功能:对A,Rn,内部RAM单元及数据指针DPTR进行加1操作,除INC A影响P外,不影响任何标志位。说明:若原为0FFH,执行该指令后,将
21、变为00H,但不影响进位位C。,其结果为:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(P)=0,C及其它位不变。,例3-12(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH执行下列指令:INC A INC R2 INC R0 INC DPTR,4.十进制调整指令DA A,DA A,例3-13 在20H、21H中分别存放压缩BCD码55和72,试将两数相加,并计算出结果。,解MOV A,20H ADD A,21H DA A,结果(A)=27,C=1如果不使用DAA指令,则结果为0C
22、7H,是错误的。,例3-14 设两个4位BCD码分别存放在30H(十位、个位)和31H(百位、千位)、40H(十位、个位)和41H(百位、千位)。试编程求这两个数的和,结果存放在30H、31H、32H中。,解程序如下:MOV R0,#30H MOV R1,#40HMOV A,R0;取十位、个位ADD A,R1;两数十位、个位相加DA A;调整为BCD码MOV R0,A;存十位、个位INC R0 INC R1MOV A,R0;取千位、百位ADDC A,R1;两数千位、百位和进位位相加DA A;调整为BCD码MOV R0,A;存千位、百位MOV A,#0ADDC A,#0INC R0MOV R0,
23、A;存万位,3.4.2 减法指令,1.带进位减法指令SUBB,SUBB A,Rn;A(A)(Rn)(C)SUBB A,direct;A(A)(direct)(C)SUBB A,Ri;A(A)(Ri)(C)SUBB A,#data;A(A)data(C),功能:指令功能是以A中数为被减数,减去操作数,再减去进位,差存在A中。影响PSW中的C,AC,OV,和P位。说明:MCS-51指令系统中,无不带进位(实为借位)的减法指令。若进行不带借的减法运算,要在运算前使用ADD A,#00H或CLR C等指令将进位标志清0。减法指令中,无BCD码调整。,例3-15 两个双字节数相减,被减数放在30H,31
24、H,减数放在40H,41H中,差放入50H、51H。,解 ADD A,#00H;将进位位清0 MOV A,30H SUBB A,40H;低字节相减 MOV 50H,A MOV A,31H SUBB A,41H;高字节相减 MOV 51H,A说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清0。,2.减1指令DEC,DEC A;A(A)-1DEC Rn;Rn(Rn)-1DEC direct;direct(direct)-1DEC Ri;(Ri)(Ri)-1,功能:减1运算说明:与INC命令类似,但无DPTR减1指令。若原为00H,执行该指令后,将变为0FFH。例如(A)=10H,(R
25、5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。则执行以下指令:DEC A,DEC R5,DEC 30H,DEC R0结果为:(A)0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=0,3.4.3 乘法指令MUL,MUL AB,功能:累加器A和寄存器B中的两个无符号8位数相乘,所得16位乘积的低8位放在A中,高8位入在B中。说明:乘法指令影响PSW的状态。执行MUL指令后,C被清0,OV与结果有关,若OV=0,表示乘积小于255(0FFH),只在A中,(B)0;若OV=1,则乘积大于255,(B)0。例如:(A)=20H,(B)=0A0H,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理与实用技术 单片机 原理 实用技术
链接地址:https://www.31ppt.com/p-5897202.html