河海大学单片机PPT6

上传人:汽*** 文档编号:568302675 上传时间:2024-07-24 格式:PPT 页数:73 大小:539KB
返回 下载 相关 举报
河海大学单片机PPT6_第1页
第1页 / 共73页
河海大学单片机PPT6_第2页
第2页 / 共73页
河海大学单片机PPT6_第3页
第3页 / 共73页
河海大学单片机PPT6_第4页
第4页 / 共73页
河海大学单片机PPT6_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《河海大学单片机PPT6》由会员分享,可在线阅读,更多相关《河海大学单片机PPT6(73页珍藏版)》请在金锄头文库上搜索。

1、单片机原理及应用机电工程学院河海大学常州校区第三章 MCS-51系列单片机指令系统13-1 3-1 指令格式及其操作寻址方式指令格式及其操作寻址方式3-2 3-2 指令系统指令系统一、基本概念一、基本概念 二、寻址方式二、寻址方式 一、数据传送指令一、数据传送指令 二、算术运算指令二、算术运算指令 三、逻辑运算指令三、逻辑运算指令 四、位操作指令四、位操作指令 五、控制转移指令五、控制转移指令 3.2.1 3.2.1 程序状态字程序状态字PSWPSW 3.2.2 3.2.2 指令系统指令系统23-1指令格式及其操作寻址方式指令格式及其操作寻址方式一、基本概念一、基本概念1、指令及其格式、指令及

2、其格式什么是指令?计算机认识什么样的指令?指令能干什么?机器指令:用2进制数0、1表示的命令代码。常以16进制表示。机器语言:由机器指令描述的程序语言。助记符指令:用字母和16进制数代替机器指令形成的符号指令。助记符语言:由助记符指令形成的程序语言,又称汇编语言。3MCS-51单片机汇编语言指令格式:标号:标号:操作码操作码操作数操作数1,操作数操作数2,操作数操作数3;注释;注释其中:标号:也称符号地址,代表该指令第1字节所在的地址,必须以字母开始,后跟18个字母或数字,并以冒号:结尾。操作码:规定了指令将要干什么,必不可少,由25个英文字母组成。操作数:表示参与运算的数数或或数数的的地地址

3、址,与操作码由一个或几个空格分开,多个操作数之间以“,”分开。(03个)注释:可有可无,必须以“;”开始。42、指令中的符号标识、指令中的符号标识Ri、Rn、#data、#data16、addr11、addr16、Direct、rel、bitA:寄存器寻址的累加器;ACC:直接寻址的累加器;:间接寻址符号(X):X中的内容(X): 由X的内容作为地址的单元中的内容:箭头左边的内容被右边的内容代替$:本条指令的起始地址/:位操作数前缀,表示取反。3、汇编语言的数据形式、汇编语言的数据形式二进制( B):0,1十进制( D):0,1,9十六进制( H):0,1,9,A,B,C,D,E,F5二、寻址

4、方式二、寻址方式 指令给出参与运算的数据的方式,即确确定定操操作作数数地地址址的方法,通俗讲:以什么方式找到参与指令执行的数据。MCS-51指令寻址方式主要有5种:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址基址寄存器变址寄存器间接寻址1、寄存器寻址寄存器寻址由指令指出以某寄存器的内容为操作数。寄存器寻址方式使用范围:(1)内部RAM中的32个工作寄存器R0R7;(2)A、B、C、DPTR;6例如:INCR3;(R3)(R3)+1操作码操作数指令中的R3即为寄存器寻址,其执行过程如下图:本例中:R3的“门牌号”高3位为0,决定了寻址内部RAM中00H1FH空间。对于Rn:具体寄存器由指令的低

5、3位指定。对于A、B、C、DPTR:则为隐含在指令代码中。72、直接寻址直接寻址在指令中含有操作数的直接地址,该地址指出了参与运算的数所在的字节单元地址或位地址(位寻址)。直接寻址的寻址范围:(1)内部数据存储器的低128字节,00H7FH;(2)特殊功能寄存器,注意除A、B、DPTR外,其他SFR只能采用直接寻址方式。(3)位寻址:所有可寻址位;例如:MOVA, 70H;(A)(70H)MOVC,70H;(CY)(70H)注意:对累加器直接寻址和位寻址时,要用符号“ACC”或直接地址“E0H”,以区别于寄存器寻址。83、寄存器间接寻址寄存器间接寻址指令中指出某一个寄存器的内容为操作数的地址,

6、以符号“”表示。其寻址范围:(1)以R0,R1为地址指针,寻址内部RAM00FFH和外RAM的低256B;(2)以堆栈SP为地址指针,寻址栈区单元。虽然在指令中并没有SP,但栈操作指令所操作的数据是由栈指针SP指出来的。;(3)以DPTR,或R0、R1(须用P2指定高8位地址) 为地址指针,寻址64KB的外部RAM和扩展I/O口。例:MOVA,R0;(A)(R0)PUSHACC;(SP)(A)MOVXA,DPTR;(A)(DPTR)94、立即寻址立即寻址操作数以常数的形式出现,直接跟在操作码后面,以指令字节的形式存放在ROM中。例如:MOVA,#40HMOVDPTR,#TABLE;TABLE为

7、标号地址MOVP1,#00000111BMOVR3,#185、基址寄存器变址寄存器间接寻址基址寄存器变址寄存器间接寻址(1)变址寻址以基址寄存器(PC、DPTR)和变址寄存器(A)的内容作为无符号数相加,形成16位地址,访问程序存储器(表格)。MOVCA,A+PC ;(A)(A)+(PC)MOVCA,A+DPTR;(A)(A)+(DPTR)*(PC)为本条指令的下条指令的首地址10例如:设(A)=30H,(PC)=1000H,执行MOVCA,A+PC的情况如下图所示。取数地址为:1001+30=1031H。显然:当(A)=00H时,新(PC)=1001H;当(A)=FFH时,新(PC)=110

8、0H;11(2)相对寻址指令中给定地址的相对偏移量rel,以PC当前值为基地址,加上rel所得结果为转移目标地址。rel:符号数,单字节补码,-128+127。例如:1000H:JC80H;判C转移指令,2字节分析:当CY=1时,转移,过程如下图所示:123-2指令系统指令系统3.2.1程序状态字程序状态字PSW即标志寄存器,字节地址为:D0H,可字节寻址、位寻址。作用:存放指令执行时有关信息、状态,供程序查询和判别。PSW字格式:字格式:D7D6D5D4D3D2D1D0CYACF0RS1RS0OVPCY:进位标志。操作结果最高位有进位输出(加法)或借位输入(减法),置位CY,否则清“0”CY

9、。AC:辅助进位标志。操作结果低4位向高4位有进位输出(加法)或借位输入(减法),置位AC,否则清“0”AC。OV:溢出标志。有进位到最高位但最高位没有产生进位或者最高位产生进位而低位没有向最高位进位,则置位OV,否则清“0”OV。也就是D7位和D6位中只有一个有进位或借位时,置位OV,两个位都没有进位/借位或者都有进位/借位时,清“0”OV。P:奇偶标志。累加器ACC的奇偶标志,如果累加器ACC的8位模2和为1,则P=1;否则P=0。即ACC里奇数个1,P=1,否则P=0。RS1,RS0:工作寄存器区选择位高位和低位。F0,F1:用户标志位133.2.2指令系统指令系统指指令令系系统统:对于

10、某单片机所能执行的全部指令的集合,它是一套控制计算机操作的编码(也就是二进制编码),也称之为机器语言。计算机只能识别和执行机器语言。单从其二进制编码来说,人是不容易理解的,所以通常采用符号指令(助记符)表示,也就是汇编指令。再通过汇编程序将之翻译成计算机能识别的机器语言。指令类型(按功能):数据传送指令(28条)算术运算指令(24条)逻辑运算指令(25条)位操作指令(12条)控制转移指令(22条)14一、数据传送指令、数据传送指令最基本、最主要的指令,共有29条,包括数据传送、数据交换、栈操作三类。目的单元为A时影响P标志。1、内部、内部RAM间的数据传送(间的数据传送(16条)条)(1)指令

11、格式指令格式:MOV目的字节,源字节功能:把源字节指定的变量传送到目的字节指定的存储单元中,源字节内容不变。(2)操作数操作数:A,Rn,direct,Ri,DPTR,#data15a、以累加器以累加器A为目的操作数的指令为目的操作数的指令MOVA,Rn;n=07MOVA,directMOVA,Ri;i=0,1MOVA,#datab、以、以Rn为目的操作数的指令为目的操作数的指令MOVRn,AMOVRn,directMOVRn,#data不能MOVRn,Ri或MOVR1,R216c、以直接地址单元为目的操作数的指令以直接地址单元为目的操作数的指令MOVdirect,AMOVdirect,RnM

12、OVdirect,directMOVdirect,RiMOVdirect,#datad、以寄存器间接寻址的单元为目的操作数的指令以寄存器间接寻址的单元为目的操作数的指令MOVRi,AMOVRi,directMOVRi,#datae、16位数据传送指令位数据传送指令MOVDPTR,#data16;高8位送DPH,低8位送DPL17例例3-1:设(70H)=60H,(60H)=20H,P1为输入口,状态为0B7H,执行如下程序:MOVR0,#70H;(78H70H)MOVA,R0;(E6H)MOVR1,A ;(F9H)MOVB,R1;(87HF0H)MOVR0, P1;(A690H)结果:(70H

13、)=0B7H(B)=20H(R1)=60H(R0)=70H要求:掌握指令功能、查表求机器码、寻址方式、结果18例例3-2:给出下列指令的执行结果,指出源操作数的寻址方式。MOV20H, #25HMOV25H, #10HMOVP1,#0CAHMOVR0,#20HMOVA,R0MOVR1,AMOVB,R1MOVR1,P1MOVP3,R1结果:(20H)=25H,(25H)=10H,(P1)=0CAH,(R0)=20H,(A)=25H,(R1)=25H,(B)=10H,(25H)=0CAH,(P3)=25H192、ACC与外部数据存储器(或扩展与外部数据存储器(或扩展I/O口)传递数据口)传递数据M

14、OVXMOVXA,DPTRMOVXA,Ri;均为单字节指令MOVXDPTR,AMOVXRi,A功能:A与外部RAM或扩展I/O口数据的相互传送。说明:(1)用Ri进行间接时只能寻址256个单元(0000H00FF),当访问超过256个字节的外RAM空间时,需利用P2口确定高8位地址(也称页地址),而用DPTR进行间址可访问整个64KB空间。(2)在执行上述读、写外RAM指令时,P3.7(RD)、P3.6(WR)会相应自动有效。(3)可用作为扩展I/O口的输入/输出指令20例例3-3:将外RAM2010H中内容送 外RAM2020单元中。分析:读2010H中内容A写数据2020H中流程如右图:程

15、序如下:MOVP2,#20H;输出高8位地址MOVR0,#10H;置读读低8位间接地址MOVXA,R0;读2010H中数据MOVR1,#20H;置写写低8位间接地址MOVXR1,A;将A中数据写入2020H中213、查表指令查表指令MOVC表格:程序存储器除存放程序外,还可存放一些常数,这种数据的结构称为表格。访问:通过两条程序存储器取数指令,即查表指令来访问,完成从ROM中读数,并只能送累加器A。指令格式:MOVCA,A+DPTR;(A)(A)+(DPTR)MOVCA,A+PC ;(PC)(PC)+1,(,(A)(A)+(PC)特点:单字节指令,源操作数为变址寻址,执行时,PSEN会自动有效

16、。功能:以DPTR、PC为基地址,与A中的8位无符号数相加,得到一个新16位地址,将其内容送A。22(1)用DPTR作为基寄存器例例3-4:设外部ROM的2000H单元开始的连续10个字节中已存放有09的平方数,要求根据A中的内容(09)来查找对应的平方值。START:MOVA,#3MOVDPTR,#TABLEMOVCA,A+DPTR;查表ORG 2000H2003单元内容TABLE:DB0,1,4,9,16,25,36,49,64,81结果:A(2003H),(A)=09H特点:可访问整个ROM的64KB空间,表格可放在ROM的任何位置,与MOVC指令无必然的关系。23(2)用PC作为基寄存

17、器例3-5:ORG 1000H1000HMOVA,#30H;1002HMOVCA,A+PC;结果是:A(1033H)优点:不改变PC的状态,根据A的内容取表格常数。缺点:(1)表格只能存放在查表指令以下的256个单元内。(2)当表格首地址与本指令间有其他指令时,须用调整偏移量,调整量为下一条指令的起始地址到表格首址之间的字节数。24例例3-6:阅读下列程序,给出运行结果,设(A)=3。1000HADDA,#02H;加调整量1002HMOVCA,A+PC;查表1003HNOP1004HNOP1005HTAB: DB66,77,88H,99H,W,10结果:(A)=99H,显然,2条NOP指令没有

18、时,不需调整。4、堆栈操作堆栈操作堆栈,由特殊功能寄存器SP(81H)管理,始终指向其栈顶位置,栈底视需要设在内部RAM低128B内。(1)进栈操作:PUSHdirect功能:先(SP)(SP)+1,再(SP)(direct);其中:direct为源操作数;目的操作数为SP,隐含。25例例3-7:已知:(A)=30H,(B)=70H 执行:MOVSP,#60H ;设栈底PUSHACC;PUSHB结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈操作:POP direct 功能:先(direct)(SP),再SP(SP)1其中:direct为目的操作数,源操作数为SP,隐含

19、。例例3-8:已知:(SP)=62H,(62H)=70H,(61H)=30H执行:POPDPHPOPDPL结果:(DPTR)=7030H,(SP)=60H265、与、与A的数据交换指令的数据交换指令数据交换指令共5条,完成累加器和内部RAM单元之间的字节或半字节交换。(1)整字节交换:XCHA,Rn ;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)(2)半字节交换:XCHDA,Ri;(A)03(Ri)03(3)累加器自身高低4位交换SWAPA;(A)74(A)3027例例3-9设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H

20、,求下列指令的执行结果(1)XCHA,20H;结果:(A)=68H,(20H)=57H(2)XCHA,R0;结果:(A)=39H,(30H)=57H(3)XCHA,R0 ;结果:(A)=30H,(R0)=57H(4)XCHDA,R0;结果:(A)=59H,(30H)=37H)(5)SWAPA;结果:(A)=75H28例例3-10:设内部RAM40H、41H单元中连续存放有4个压缩的BCD码数据,试编程序将这4个BCD码倒序排列。分析:流程如右图程序如下:MOVA,41HSWAPAXCHA,40HSWAPAMOV41H,A29程序存贮器:立即寻址和基寄存器加变址寄存器间接寻址;特殊功能寄存器:只

21、能直接寻址方式;8052等单片机的高128字节:只能采用寄存器间接寻址,不能用直接寻址;外部RAM/IO:只能用MOVX指令访问,采用寄存器间接寻址。R0、R1、DPTR30二、算术运算指令二、算术运算指令包括、加1、减1、十进制调整指令,共有24条,一般影响PSW中的CY、AC、OV、P标志位。1、加减法指令、加减法指令(12条)条)(1)指令助记符:ADD+ADDC带C+SUBB带C-(2)操作数:如右图,以A为目的操作数31(3)指令描述举例:不带进位加法不带进位加法 ADD4条ADDA,RnADDA,directADDA,RiADDA,#data带进位加法指令带进位加法指令 ADDC4

22、条ADDCA,RnADDCA,directADDCA,RiADDCA,#data带进位减法指令带进位减法指令 SUBB4条SUBBA,RnSUBBA,directSUBBA,RiSUBBA,#data32例例3-11:设(A)=D3H,(30H)=E8H执行: ADDA,30H结果:CY=1,AC=0,P=0,OV=0,(A)=BBH例例3-12:设(A)=88H,(30H)=99H,CY=1执行: ADDCA,30H10001000(88H)10011001(99H)+)1100100010结果:CY=1,AC=1,P=0,OV=1,(A)=22H例例3-13:设(A)=49H,CY=1,执

23、行:SUBBA,#54H01001001(49H)01010100(54H)-)111110100(借位1)结果:CY=1,AC=0,P=1,OV=0,(A)=F4H33例例3-14:试编制4位十六进制数加法程序,假定和数超过双字节(21H20H)+(31H30H)42H41H40H分析:先低字节作不带进位求和,再作带进位高字节求和。流程图(略),程序如下:MAIN:MOVA,20HADDA,30HMOV40H, AMOVA,21HADDCA,31H;带低字节进位加法MOV41H, A MOVA,#00H ;准备处理最高位MOVACC.0,CMOV42H, ASJMP342、加加1减减1指令指

24、令助记符:INC,DEC操作数:A,direct,Ri,Rn,DPTR指令描述:(不影响PSW,即使有进位或借位,CY也不变,除A影响P标志)(1)INC:加加15条INCA;(A)(A)+1INCRn ;(Rn)(Rn)+1INCRi ;(Ri)(Ri)+1INCdirect ;(direct) (direct)+1INCDPTR;(DPTR) (DPTR)+1(2)DEC:减减14条DEC A;(A)(A)1DEC Rn ;(Rn)(Rn)1DECRi;(Ri)(Ri)1DECdirect;(direct) (direct)35例例3-15:编制下列减法程序,要求:(31H30H)(41H

25、40H)31H30H分析:流程图(略),程序如下:MAIN:CLRC;CY清零MOVR0, #30HMOVR1, #40HMOVA, R0SUBBA, R1MOVR0,A ;存低字节INCR0;指向31HINCR1;指向41HMOVA, R0SUBBA, R1MOVR0,A ;存高字节HERE:SJMP HERE363、十进制调整指令十进制调整指令格式:格式:DAA 指令用于两个BCD码加法运算的加6修正,只影响CY位。指令的使用条件:(1)只能紧跟在加法指令(ADD/ADDC)后进行(2)两个加数必须已经是BCD码(3)只能对累加器A中结果进行调整加6修正的依据:由CPU判CY、AC是否=1

26、?A中的高、低4位是否大于9?例如:(A)=56H,(R5)=67H,(BCD码)执行:ADDA,R5DAA结果:(A)=23H,(CY)=137例例3-16:试编制十进制数加法程序(单字节BCD加法),假定和数为单字节,要求:(20H)+(21H)22H分析:流程如右图程序如下:MOVR0,#20HMOVA, R0INCR0ADDA, R0DAAINCR0MOVR0,A38例例3-17:十进制减法程序(单字节BCD数减法)要求:(20H)(21H)22H分析:主要要考虑到,DAA只能对加法调整,故必须先化BCD减法为加法做,关键为求两位十进制减数的补码(9AH-减数)流程如右图,程序如下:C

27、LRCMOVR0, #20HMOVR1, #21HMOVA,#9AHSUBBA,R1;求补ADDA,R0;求差DAAINCR1MOVR1,A;存结果394、乘除法指令乘除法指令唯一两条单字节4机器周期的指令。(1)8位无符号数乘法指令MULAB ; ( B158) ( A70)(A)(B)PSW:1)若乘积大于256,OV=1;否则OV=0;2)CY总是清“0”。例如:(A)=50H,(B)=A0H,执行MULAB后结果:(B)=32H,(A)=00H,(OV)=1(2)8位无符号除法指令DIVAB ;(A)(A/B)的(商);(B)(A/B)的(余数)PSW:1)CY、OV,清“0”2)若(

28、B)=0,OV=1。例如:(A)=2AH,(B)=05H,执行DIVAB后结果:(A)=08H,(B)=02H,(OV)=040例例3-18:双字节乘法程序,要求:(R0R1)(R2)R3R4R5分析: 设 ( R0) =J,( R1) =K,( R2) =L, 则:MOVA,R1JKMOVB,R2)LMULABKL高KL低MOVR5,A+)JL高JL低MOVR4,BR3R4R5MOVA,R0MOVB,R2MULABADDA,R4MOVR4,AMOVA,BADDCA,#00HMOVR3,A41例例3-19:编制将A中的数转换成三位BCD码程序,百位放在20H,十位、个位放在21H中。分析:(A

29、)/100商(百位)(20H);余数/10商(十位)(21H)74;余数(个位)(21H)30;流程如右图,程序如下:MOVB,#100DIVABMOV20H, AMOVA,BMOVB,#10DIVABSWAPAADDA,BMOV21H, ASJMP42三、逻辑运算指令三、逻辑运算指令逻辑运算类指令共24条,涉及A时,影响P标志。1、基本与、或、异或运算指令基本与、或、异或运算指令(1)指令助记符:ANL、ORL、XRL(2)操作数:如下图43(3)指令描述举例: a、逻辑逻辑“与与”指令指令6条条ANLA,RnANLA,directANLA,RiANLA,#dataANLdirect,AAN

30、Ldirect,#data这条指令常用来给某些位清“0”。当这条指令用于修改一个输出口(P0、P1、P2、P3)时,作为原始数据的值是从口数据锁存器读入,而不是引脚状态。44 b、逻辑逻辑“或或”指令指令6条条ORLA,RnORLA,directORLA,RiORLA,#dataORLdirect,AORLdirect,#data这条指令常用来给某些位置“1”。当这条指令用于修改一个输出口(P0、P1、P2、P3)时,作为原始数据的值是从口数据锁存器读入,而不是引脚状态。45 c、逻辑逻辑“异或异或”指令指令6条条XRLA,RnXRLA,directXRLA,RiXRLA,#dataXRLdi

31、rect,AXRLdirect,#data这条指令常用来给某些位求反。当这条指令用于修改一个输出口(P0、P1、P2、P3)时,作为原始数据的值是从口数据锁存器读入,而不是引脚状态。462、对、对A简单逻辑指令简单逻辑指令1)清零与取反CLR A;(A)清0CPL A;(A)取反2)循环移位指令RLA;循环左移RLCA;带进位循环左移如果A128,同时CY=0,则RLCA也相当于A*2RRA;循环右移RRCA;带进位循环右移47例例3-20:1)选通工作寄存器组中0区为工作区。ANLPSW,#11100111B;PSW的D4、D3位为002)利用移位指令实现累加器A的内容乘6。CLRCRLCA

32、 ;左移一位,相当于乘2MOVR0, ACLRCRLCA;再乘2,即乘4ADDA,R0;乘2+乘4=乘63)将ACC的低4位送P1口的低4位,P1口的高4位不变。ANLA,#0FH;高4位屏蔽(清0)ANLP1, #F0H;P1低4位清0ORLP1, A ;(P1.31.0)(A30)48例例3-21:设在外RAM2000H中放有两个BCD数,编程,使这两个BCD码分别存到2000H和2001H的低4位中。分析:流程如图程序如下:MOVDPTR,#2000HMOVXA,DPTRMOVR0,AANLA,#0FHMOVXDPTR,AMOVA,R0ANLA,#0F0HSWAPAINCDPTRMOVX

33、DPTR,A49四、位操作指令四、位操作指令布尔处理器C,可寻址内部RAM中的可寻址位:bit=00FFH,和SFR中的可寻址位。位地址的描述形式:(1)直接位地址,如MOVC,70H(2)字节地址+位地址,如ACC.4,PSW.4等(3)位寄存器名称,如F0,C,RS1,RS0等(4)伪指令定义过的位名称注意:CY-直接地址,是位寻址;C-位寄存器,为寄存器寻址。例如:CLRCY;机器码C2D7HCLRC;机器码C3H501、位传送指令位传送指令MOV C,bitMOV bit, C位变量必须经过C进行例如:MOVC,06HMOVP1.0,C2、位变量修改指令位变量修改指令CLR C;(C)

34、0CLR bit ;(bit)0CPL C ;(C)()CPL bit ;(bit)()SETBC;(C)1SETBbit;(bit)1例如:SETBP1.0513、位变量逻缉位变量逻缉“与与”指令指令ANL C,bit ;(C)(C)(bit)ANL C,/bit;(C)(C)()例如:设P1为输入口,P3为输出口,执行程序MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C结果:P3.0=P1.0P1.1/P1.2。4、位变量逻缉位变量逻缉“或或”指令指令ORL C,bit ;(C)(C)(bit)ORL C,/bit ;(C)(C)()“/”表示用寻址位的逻辑非作源

35、值参与运算,但不影响源值。52例如:设P1为输出口,执行下列程序,指出功能:(1) MOVC,00HORLC,01HMOVP1.7,C(2) MOVP1,#00HLOOP:SETBP1.0LCALLDELAYCLRP1.0LCALLDELAYAJMPLOOP(3)LOOP: SETBCRLCAMOVP1,ALCALLDELAYJNBACC.7,LOOP53例3-22将位地址40H、41H中的内容进行异或,结果存入42H中。分析:运算公式:Y=AB=程序如下:MOVC,41HANLC,/40HMOV42H,CMOVC,40HANLC,/41HORLC,42HMOV42H,C54五、控制转移指令五

36、、控制转移指令(22条)1、无条件转移指令、无条件转移指令55a、短跳转指令短跳转指令AJMPaddrll该指令在运行时先将PC+2,然后把PC的高5位和指令第一字节高3位以及指令第2字节相连( PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0) 而 得到跳转目的地址送入PC。因此,目标地址必须与它下面的指令存放在同一个2KB区域内(因为对于特定的该条指令,PC15PC14PC13PC12PC11已 经 固 定 , 变 化 的 只 有a10a9a8a7a6a5a4a3a2a1a0, 从 0000000000011111111111共211=2K范围)。意即

37、转跳的目的地址离该指令的下一条指令的地址最大距离只有2K。如KWR:AJMPaddrll如果addrll=00100000000B,标号KWR地址为1030H,则执行该条指令后,程序转移地址为1030+2=1032=0001000000110010,0001000100000000即1100。实际上:第二操作数一般都以标号代替。56b、相对转移指令相对转移指令SJMPrelPC+2(下条指令的地址)后,把指令的有符号的位移值加到PC上,并计算出转向地址。跳转范围:-128+127字节c、长跳转指令长跳转指令LJMPaddr16执行时将指令的第二字节和第三字节分别装入PC的高位和低位字节中,无条

38、件地转向指定地址。转跳地址可以在64K程序存贮空间的任何地方。d、基寄存器加变址寄存器间接转移指令基寄存器加变址寄存器间接转移指令JMPA+DPTR将累加器A中的8位无符号数与数据指针DPTR的16位数相加,结果作为下条指令的地址放入PC,不改变累加器和数据指针内容。主要功能是实现程序的散转功能,所以我们也习惯称之为散转指令。57例例3-23:执行下面的散转程序,程序将根据A中的内容(命令编号09)转相应的命令处理程序。MOVR1,ARLA;相当于A*2ADDA,R1;相当于A*3MOVDPTR,#PMTB;假设PMTB为8000HJMPA+DPTRPMTB:LJMPPM0;3字节指令,地址8

39、000HLJMPPM1;地址8003HLJMPPM2;地址8006HLJMPPM3;地址8009HLJMPPM4;地址800CHLJMPPM5;地址800FHLJMPPM6;地址8012HLJMPPM7;地址8015H582、条件转移指令条件转移指令根据某种条件判断转移的指令,执行时:条件满足时,转移执行;条件不满足时,顺序执行;目的地址:(PC)=下条指令首地址下条指令首地址+rel包括判A、判Bit、判C三种,共有7条:1)判)判A转移,转移,2字节字节JZrel;条件:(A)=0JNZrel;条件:(A)02)判)判Bit转移,转移,3字节字节JBbit,rel;条件:(bit)=1JN

40、Bbit,rel;条件:(bit)=0JBCbit,rel;条件:(bit)=1转移,并清bit位593)判)判C转移,转移,2字节字节JCrel;条件:(C)=1JNC rel;条件:(C)=0例例3-24利用P1.0、P1.1作为外接发光二极管的启停按钮,P1.2作为外接发光二极管端,试编制控制程序。60程序如下:START:MOVP1, #03H ;作P1口输入时先置1WT1:JBP1.0,WT1SETBP1.2WT2:JBP1.1,WT2CLRP1.2SJMPWT13、比较不相等转移指令比较不相等转移指令CJNEA, direct,rel;CJNEA, #data,rel;CJNERn

41、,#data,rel;CJNERi,#data,rel;61执行时:1)两操作数相等,顺序执行,且CY=0。2)两操作数不相等,转移执行,且对于无符号数若:第一操作数第二操作数,CY=0。例如:右图所示的比较判断,可利用CJNE和JC指令来完成。62例例3-24:内部RAM30H开头的20个连续单元中,存放有20个数,统计等于8的单元个数,结果放在R2中。分析:取一个数与8比较,相等R2加1,不相等跳过。并作20次重复即可。流程如右图,程序如下: ORG1000HSTART:MOVR0,#30HMOV R7,#20MOV R2,#0LOOP:CJNER0,#08H,NEXTINCR2NEXT:

42、INCR0DJNZ R7,LOOPSJMP634、减减“1”不为不为0转移指令转移指令又称循环转移指令,主要用来构成循环结构,有2条:DJNZRn, rel ;2字节指令,2周期指令DJNZdirect,rel;3字节指令,2周期指令目的地址:(PC)=(PC)+指令字节数指令字节数2或或3+rel例例3-25:利用DJNZ指令设计循环延时程序,已知fosc=12MHz1)单循环延时DELAY:MOV R7,#10DJNZ R7,t=2us10+1=21us2)双重循环延时DELAY:MOV R7,#10DL:MOV R6,#100DJNZ R6,DJNZ R7,DLt=(2us100+2+1

43、)10+1=2031us643)三重循环延时DELAY:MOVR7, #10DL2:MOVR6, #200DL1:MOVR5, #250DJNZR5, DJNZR6, DL1DJNZR7, DL2t=(2us250+2+1)200)+2+1)10+1=1006031us1秒65例例3-26P1口控制发光二极管,延时节日灯组合。LOOP:MOVP1,0AAH;灯光1ACALLDELAYMOVP1,055H;灯光2ACALLDELAYSJMPLOOPDELAY:MOVR7,0FFHDL1:MOVR6,0FFHDL2:NOP;空操作DJNZR6,DL2DJNZR7,DL1RET665、调用指令与返回

44、指令、调用指令与返回指令1)主程序和子程序结构主程序和子程序结构2)调用和返回调用和返回子程序是独立于主程序的具有特定功能的程序段,单独编写,能被主程序调用,又能返回主程序。按两者的关系有两种调用情况,多次调用和子程序嵌套,如图所示。673)堆栈堆栈和和PC值的保留值的保留调用子程序时,CPU自自动动将当前PC值保留在堆栈中(先PCL,后PCH),子程序返回时,自动弹出,送入PC。4)现场保护和恢复现场现场保护和恢复现场现场保护是指将需要保护的单元内容,在子程序的开始使用压栈指令存放在堆栈中的过程。恢复现场是指在子程序返回前,通过出栈指令,将被保护内容送回原来的寄存器。5)调用与返回指令调用与

45、返回指令(1)短调用指令)短调用指令ACALLaddr11执行时:1)(PC)+2PC,并压入堆栈,先PCL,后PCH;2)PC1511a100PC,获得子程序入口地址;3)转移范围同AJMP。68(2)长调用指令长调用指令LCALLaddr16执行时: 1)(PC)+3PC,并压入堆栈,先PCL,后PCH;2)addr16PC,获得子程序起始地址;3)可调用64K地址范围内的任意子程序。例如:已知(SP)=60H,执行下列指令后的结果:1000H:ACALL100H1000H:LCALL0800H结果:(SP)=62H,(61H)=02H,(62H)=10H,(PC)=1100H: (SP)

46、=62H,(61H)=03H,(62H)=10H,(PC)=0800H69(3)子程序返回指令子程序返回指令RET、中断返回指令中断返回指令RETIRET:从堆栈中退出PC的高位和低位字节,栈指针减2,即:1)(PCH)(SP),(SP)(SP)-1;2)(PCL)(SP),(SP)(SP)-1;RETI:从堆栈中退出PC的高位和低位字节,栈指针减2,同时清除中断优先,开放低级中断。6、空操作指令空操作指令NOP;(PC)(PC)+1空操作指令是一条单字节单周期指令,控制CPU不做任何操作,只作时间上的消耗,因此常用于程序的等待或时间的延迟。70例例2-27设计节日灯,通过P1.0P1.7控制

47、8个发光二极管,先亮1灯,隔1秒闪烁10次,然后左移1位闪10次,如此循环。分析:流程图,程序如下:MAIN: MOV A,#01HLOOP1: MOV R2,#10LOOP2: MOV P1,AACALLDELAYMOV P1,#00HACALLDELAYDJNZ R2,LOOP2RL AAJMP LOOP1DELAY:1秒延时子程序(略)RET71本章小结本章小结1、基本概念、寄存器寻址、寄存器间接寻址、直接寻址、位寻址、基寄存器加变址寄存器间接寻址。2、数据传送指令、算术运算指令、逻缉运算指令、位操作指令、控制转移指令重点:寻址方式和指令系统,简单程序阅读;D、编写数据传送指令时,要明确操作的是哪个地址空间的哪些单元。难点:寻址方式,控制转移指令中相对地址计算,堆栈操作,以及简单汇编程序阅读72MOVR0,AMOVA,R1MOVA,#04HMOVR1,30HMOVR1,PSWMOVR1,#0F1HMOVA,30HMOVA,IEMOVXA,DPTRMOV30H,R2MOV32H,AMOV32H,#0E3HMOVPSW,R1MOVPSW,AMOVPSW,#7FHMOVXDPTR,AMOV30H,PSWMOVPSW,30HMOV40H,41HMOVPSW,IE73

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号