智能电子的指令系统.ppt

上传人:牧羊曲112 文档编号:5989767 上传时间:2023-09-11 格式:PPT 页数:106 大小:533KB
返回 下载 相关 举报
智能电子的指令系统.ppt_第1页
第1页 / 共106页
智能电子的指令系统.ppt_第2页
第2页 / 共106页
智能电子的指令系统.ppt_第3页
第3页 / 共106页
智能电子的指令系统.ppt_第4页
第4页 / 共106页
智能电子的指令系统.ppt_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《智能电子的指令系统.ppt》由会员分享,可在线阅读,更多相关《智能电子的指令系统.ppt(106页珍藏版)》请在三一办公上搜索。

1、第2章 智能电子的指令系统,2.1 MCS-51单片机的寻址方式,2.2 单片机的指令介绍,2.3 汇编程序设计,2.1 MCS-51单片机的寻址方式,学习目标:1、理解立即寻址、寄存器寻址、寄存器间址、直接寻址、位寻址2、,复习,1、单片机的P0口内接上拉电阻?2、机器周期和指令周期以及时钟周期?3、单片机只用外部程序存储器,应该如何设置?4、SP的初设值为多少?为什么要这样设置5、请写出PSW中的各位标志,她们都有什么意义?6、B寄存器都什么作用?,2.1 MCS-51单片机的寻址方式,指令本身是一组二进制数代码,为了便于记忆,将这些代码用具有一定含义的指令助记符来表示,助记符一般采用英文

2、单词的缩写。例:指令代码 助记符 740A MOV A,#0AH,指令和助记符,一条指令由操作码和操作数组成。操作码指明执行什么操作,例如数的传送、加法、减法等。操作数则表示这条指令所完成的操作对象,即是对谁进行操作。操作数可以是一个数,或者是一个数所在的内存地址。指令由指令字节组成,不同的指令,指令的字节数不相同。有单字节指令、双字节指令和三字节指令。,指令的字节数,寄存器寻址,以寄存器的名称找到存储单元,并以寄存器的内容为操作数的寻址方式。通用寄存器为A、B、DPTR以及R0R7。例:CLR A;A0 INC DPTR;DPTRDPTR+1 ADDR5,#20H;R5#20H+R5,直接寻

3、址,指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例:MOVPSW,20H;PSW(20H)MOVA,30H;A(30H),立即寻址,操作数紧跟在指令之后,寻址程序存储器的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例:MOVA,#60H;A#60H MOVDPTR,#3400H;DPTR#3400H MOV30H,#40H;30H单元#40H,寄存器间接寻址,以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1和DPTR。在寄存器名称

4、前面加一个符号来表示寄存器间接寻址。例:MOV A,R0;A(R0)MOVX DPTR,A;外部RAM(DPTR)A,MOV A,R0 操作示意图,片外RAM,2000H,DPTR,30H,A,2000H,30H,MOVX DPTR,A操作示意图,变址寻址,变址寻址是以某个寄存器的内容为基本地址,然后在这个基址上加以地址的偏移量,才是真正的操作数地址。例:MOVC A,A+DPTR;A(A+DPTR)MOVC A,A+PC;A(A+PC),MOVC A,A+DPTR 操作示意图,相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用

5、于修改PC值,主要用于实现程序的分支转移。例:SJMP 08H;PCPC+2+08H,SJMP 08H 操作示意图,位寻址,位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址。例:SETB 10H;将10H位置1 MOV 32H,C;32H进位位C CLR PSW.4;将RS1位清0,2.2 单片机的指令介绍,学习目标:1、掌握数据传送指令2、掌握逻辑运算指令3、掌握转移指令4、掌握算术运算指令5、掌握位操作指令,2.2.1.数据传送类指令,助记符 说明 MOV、MOVX、MOVC 传送操作 XCH、XCHD、SWAP 交换操作 PUSH、POP 堆栈操作

6、 源操作数寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址。目的操作数寻址方式:直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影 响标志位。,8051单片机片内数据传送图,(1)以累加器为目的操作数的指令(4条),MOV A,Rn MOV A,directMOV A,RiMOV A,#data 这组指令功能将源操作数指定内容送到A中。,(2)以寄存器Rn为目的操作数的指令(3条),MOV Rn,A MOV Rn,direct MOV Rn,#data MOV Rn,Rn(x),没有这样的指令 这组指令功能是把源操作数指定的内容送入当

7、前工作寄存 器,源操作数不变。,(3)以直接地址为目的操作数的指令(5条),MOV direct,AMOV direct,RnMOV direct1,direct2MOV direct,RiMOV direct,#data 这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。例:MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H,(4)以间接地址为目的操作数的指令(3条),MOV Ri,A MOV Ri,direct MOV Ri,#data 功能:把源操作数指定的内容送入以R0或R1中内容为 地址的

8、片内存储单元。例:MOV R0,A MOV R1,20H MOV R0,#34H,(5)十六位数的传递指令(1条),MOV DPTR,#data16(实际工作中常用)8051是8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位 送入DPH,低8位送入DPL。例:MOV DPTR,#1234H执行完了之后DPH中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。如下面两条指令:MOV DPH,#35H MOV DPL,#12H。相当于执行了 MOV DPTR,#3512H。,(6)累加器A与片外RAM之间的数据传递

9、类指令(4条),MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A说明:A.在8051中,与外部RAM存储器打交道的只可以是累加器A。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行。,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。B.要读或写外部RAM,必须要知道RAM的地址,采用DPTR时,地址被直接放在

10、DPTR中的。采用Ri(R0或R1)时,由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。,C.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。MOV DPTR,#0100HMOVX A,DPTRMOV DPTR,#0200HMOVX DPTR,A,(7)读程序存储器指令(2条),MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格说明:查找到的结果被放在A中,因此,本条指令执行前后,

11、A中的值不一定相同。例:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100HDB 0,1,4,9,16,25,(8)堆栈操作(2条),PUSH directPOP direct第一条为压入指令,将direct中的内容送入堆栈中,第二条为弹出指令,将堆栈中的内容送回到direct中。例:MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 执行第一条PUSH 40H指令是这样的:将SP中的值加1,变为11H,然后将40H中的值送到11H单元中,因此执行

12、完本条指令后,内存11H单元的值是50H,同样,执行POP 30H时,是将11H中的值送入到30H单元中,即执行完本条指令后,30H单元中的值变为50H。,(9)交换指令(5条),XCH A,RnXCH A,directXCH A,RiXCHD A,RiSWAP A例:已知A中的内容为34HMOV R6,#29HXCH A,R6SWAP AXCH A,R6 XCHD A,R0,小结,1、数据传送类指令有哪几种类型?是否影响状态标志位?2、如何记忆这些指令?,除MOV A,XX类指令影响P标志外,其他的传送指令均不影响状态标志位。,小结,(2)对于MOV指令,其目的操作数按A、Rn、direct

13、、Ri的顺序书写,则可以记住MOV的15条指令。例如:MOV A,data/direct/Rn/RiMOV Rn,data/direct/AMOV direct,data/direct/A/Rn/RiMOV Ri,data/direct/A,记忆方法:(1)分模块区记忆,如MOV/MOVX/MOVC,算术运算类指令,主要用于8位无符号数运算;也可用于带符号数运算。包括:加、减、乘、除、加1、减1运算指令,指令操作将影响PSW中有关状态位。,(1)加法指令,ADD A,#data ADD A,direct ADD A,Rn ADD A,Ri 用途:将A中的值与源操作数所指内容相加,最终结果 存在

14、A中。,A.不带进位位的加法指令(4条),例1:ADD A,#47HADD A,34HADD A,R7ADD A,R0,例2:MOV A,#0AEH;-82ADD A,#81H;-127则执行完本条指令后,A中的值为2FHPSW中状态位 C=1,AC=0,OV=1,P=1对无符号数:结果为12FH;对带符号数:OV=1,有错。,B.带进位位的加法指令(4条),ADDC A,Rn;ARnCYAADDC A,direct;A(direct)CYAADDC A,Ri;A(Ri)CYAADDC A,#data;AdataCYA 用途:将A中的值和其后面的值以及进位位C中的值相加,最终结果存在A,常用于

15、多字节数运算中。,例:,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。换言之,CY就相当于是100H。然后再做10H+30H+CY,结果是41H,所以最终的结果是4107H。,1067H+30A0H,0001 0000 0110 0111,0011 0000 1010 0000,0100 0001 0000 0111,1067H,30A0H,4107H,又例:,先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H,而PSW中的CY=0。然后再做10H+30H+CY,结果是40H,所以最终的结果是40

16、87H。,1067H+3020H,0001 0000 0110 0111,0011 0000 0010 0000,0100 0000 1000 0111,1067H,3020H,4087H,C.加1指令(5条),INC A;A+1A,影响P标志INC Rn;Rn+1RnINC direct;(direct)+1(direct)INC Ri;(Rn)+1(Rn)INC DPTR;DPTR+1DPTR功能很简单,就是将后面目标中的值加1。,例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。连续执行下面的指令:INC A INC R0 INC 21H INC

17、 R0 INC DPTR,;A=13H;R0=34H;(21H)=33H;(34H)=23H;DPTR=1235H,DA A在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用来对BCD码加法运算结果进行自动修正。例:A=00010101(代表十进制数15)ADD A,#8,D.十进制调整指令(1条),;A=1DH,按二进制规律加,;A=23H,按十进制规律加,DA A,使用DA A 的前提,就是两个BCD码相加。,(2)减法指令(8条),SUBB A,Rn;ARnCYASUBB A,direct;A(direct)CYASUBB A,Ri;A(Ri)CYASUBB A,#data;Ad

18、ataCYA将A中的值减去源操作数所指内容以及进位位C中的值,最终结果存在A中。说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。,A.带借位的减法指令(4条),B.减1指令(4条),DEC A;A-1A,DEC Rn;Rn-1RnDEC direct;(direct)-1(direct)DEC Ri;(Rn)-1(Rn)与加1指令类似。,(3)乘法指令(1条),MUL AB;ABBA此指令的功能是将A和B中的两个8位无符号数相乘,结果将为16无符号数。其中高8位放在B中,低8位放在A中。在乘积大于FFH时,0V置1,否则OV为0;而CY总是0。

19、例:A=4EH,B=5DH,执行MUL AB指令后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。,(4)除法指令(1条),DIV AB;AB的商A,余数B此指令的功能是将A中的8位无符号数除B中的8位无符号数,商放在A中,余数放在B中。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1。例:A=11H,B=04H,执行DIV AB指令后,结果为:A=04H,B=1。,逻辑运算与循环类指令,主要用于对2个操作数按位进行逻辑操作,结果送到A或直接寻址单元。主要操作 与、或、异或、移位、取反、清零等。对标志位的影响 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影

20、响标志位。,(1)逻辑或指令(6条),ORL A,Rn;ARnAORL A,direct;A(direct)AORL A,Ri;A(Ri)AORL A,#data;AdataAORL direct,A;(direct)A(direct)ORL direct,#data;(direct)data(direct),例:71H和56H相或:01110001(71H)01010110(56H),01110111 即77H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,(2)逻辑与指令(6条),ANL A,Rn;ARnAANL A,direct;A(direct)AANL A,Ri;A(Ri

21、)AANL A,#data;AdataAANL direct,A;(direct)A(direct)ANL direct,#data;(direct)data(direct),例:71H和56H相与:01110001(71H)01010110(56H),01010000 即50H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,例:71H和56H相异或:01110001(71H))01010110(56H),(3)逻辑异或指令(6条),XRL A,Rn;A RnAXRL A,direct;A(direct)AXRL A,Ri;A(Ri)AXRL A,#data;A dataAXRL

22、direct,A;(direct)A(direct)XRL direct,#data;(direct)data(direct),00100111 即27H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,(4)取反与清0指令(2条),取反:CPL A;/AA例:若A=5CH,执行CPL A 结果:A=A3H,清0:CLR A;0A,(5)循环移位指令(4条),RL ARR ARLC ARRC A,后两条指令,影响P和CY标志。,例:,若A=5CH,CY=1,执行RLC A后,,对RLC、RRC指令,在CY=0时RLC相当于乘以2RRC相当于除以2,结果:A=B9H,CY=0,P=1,

23、综合举例:,ANL A,#0FH;屏蔽A的高4位SWAP AANL P1,#0FH;清P1口高4位ORL P1,A;P1口高4位输出A的低4位;,把累加器A中的低4位状态,通过P1口的高4位输出,P1口的低4位状态不变。,程序转移类指令,此类指令一般不影响PSW。包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令,(1)无条件转移类指令(4条),短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel 间接转移指令:JMP A+DPTR,上面的前三条指令,统统理解成:PC值改变,即跳转到一个标号处。那么他们的区别何

24、在呢?,跳转的范围不同。,短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel,转移范围:2KB64KB-128+127,指令构成不同。AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,散转指令:JMP A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。转移地址由A+DPTR形成,并直接送入PC。指令对A、DPTR和标志位均无影响。本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。,(2)第

25、四条指令与前三条指令相比有所不同,(2)条件转移指令(8条),条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,一、判A内容是否为0转移指令(2条),JZ rel;如果A=0,则转移,否则顺序执行。JNZ rel;如果A0,就转移。转移到相对于当前PC值的8位移量的地址去。即:新的PC值=当前PC+偏移量rel在编写汇编语言源程序时,可以直接写成:JZ 标号;即转移到标号处。,二、比较不等转移指令(4条),CJNE A,#data,rel CJNE A,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel此类指令的功能是将两

26、个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。同样地,使用时,可以将rel理解成标号,即:CJNE A,#data,标号CJNE A,direct,标号CJNE Rn,#data,标号CJNE Ri,#data,标号,利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。,三、减1不为0转移指令(2条),DJNZ Rn,relDJNZ direct,relDJN

27、Z指令的执行过程是这样的:它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。例:LOOP:DJNZ 10H,LOOP,例:MOV 23H,#0AH CLR ALOOP:ADD A,23H DJNZ 23H,LOOP SJMP$上述程序段的执行过程是:将23H单元中的数连续相加,存至A中,每加一次,23H单元中的数值减1,直至减到0,共加(23H)次。,子程序调用与返回指令,一、调用指令(2条),LCALL addr16;长调用指令(3字节)ACALL addr11;短调用指令(2字节)上面两条指令都是在主程序中调用子程序,

28、两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令下一条指令的第一字节在相同的2KB存储区之内。使用时可以用标号表示子程序首地址.,二、返回指令(2条),子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。RET;子程序返回指令RETI;中断子程序返回指令两者不能互换使用。,2.2.6 空操作指令(1条),NOP空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。,2.2.7 位操作指令,8051单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在8051中,有一部份RAM和一部份S

29、FR是具有位寻址功能的。位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH);可以位寻址的特殊功能寄存器。,以PSW中位4(RS1)为例。直接(位)地址方式:如 D4H;点操作符号方式:如 PSW.4,D0H.4;位名称方式:如 RS1;用户定义名方式:如用伪指令 bitSUB.REG bit RS1定义后,可用SUB.REG代替RS1。,位地址表达方式,(1)位传送指令(2条),MOV C,bit;bit CMOV bit,C;C bit这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。例:MOV C,P1.0;将P1.0的状态送给C

30、。MOV P1.0,C;将C中的状态送到P1.0;引脚上去。,(2)位清0和置位(4条),位清0指令 CLR C;使CY=0 CLR bit;使指令的位地址等于0。例:CLR P1.0;即使P1.0变为0 位置1指令 SETB C;使CY=1 SETB bit;使指定的位地址等于1。例:SETB P1.0;使P.0变为1,(3)位逻辑运算指令(6条),位与指令 ANL C,bit;Cy与指定位的值相与,结果送CyANL C,/bit;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。但注意:指定的位地址中的值本身并不发生变化。例:ANL C,/P1.0,位取反指令 CPL C;使C

31、y值取反。CPL bit;使指定的位的值取反。例:CPL P1.0,位或指令 ORL C,bitORL C,/bit,(4)位条件转移指令(5条),判Cy转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。,判位变量转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。,2.2.8 汇编语言格式与伪指令,汇编语言源

32、程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)汇编语句的格式:标号:操作码操作数;注释3.伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。,ORG 定位目的程序的起始地址。格式:ORG 表达式 表达式必须为16位地址值。如:ORG 0000H END 汇编语言程序结束伪指令。一定放在程序末尾!,EQU 赋值伪指令。格式:字符名称 EQU 数值或汇编符号 例:AAEQU30HK1EQU40HMOV A,AA;(30H)AMOV A,K1;(40H)A,DB 从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数据常数表。格式:DB 字节常

33、数 或 ASCII字符例:ORG 1000HDB34H,0DEH,A,BDB0AH,0BH,20,DW 从指定单元开始定义(存储)若干个字的数据 或ASCII码字符。格式:DW字常数或ASCII字符 例:ORG 2000HDW1234H,BDW0AH,20,DS 从程序存储器中留空。格式:DS 表达式 表达式,表示要留出的单元数。例:ORG 1000HDB34HDS 04H DW 78H,1000H,1005H,在Flash Rom中比较有用,可以用来存放数据而不会掉电丢失,BIT 位地址符号指令。把位地址赋于规定的字符名称。格式:字符名称BIT位地址例:ABCBITP1.1QQBITP3.2

34、,学习目标:1、掌握流程图的画法2、掌握顺序程序结构3、掌握分支选择程序结构4、掌握循环程序结构5、会设计简单的延时子程序,2.3 汇编程序设计,程序设计的基本步骤 一般步骤为:(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试;显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本形式。,2.3.2 流程图画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流

35、向。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。如图:,2.3.3 顺序程序结构例1:已知两个压缩BCD码分别放在内部RAM的31H30H和33H 32H等4个单元中,试编程求和,结果存入R4R3R2中。分析:流程如图:程序如下:ORG 0000HLJMP MAINORG 0030H MAIN:MOVA,30HADDA,32HDAAMOVR2,AMOVA,31HADDCA,33HDA AMOVR3,ACLRAMOVACC.0,CMOVR4,AHERE:SJMPHEREEND,例2:利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码

36、,存入21H、22H中,高位存在22H。分析:控制流程图(略),程序如下:START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVCA,A+DPTRMOV21H,AMOVA,20HANLA,#0F0HSWAPAMOVCA,A+DPTRMOV22H,ASJMP TABLE:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H,分支程序设计(1)单分支程序单分支结构程序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则顺序执行。在MCS-51指令系统中条件转移指令有:(1)判A转移指令JZ、JNZ;(2)判位转

37、移指令JB、JNB、JBC、JC、JNC;(3)比较转移指令CJNE;(4)减1不为0转移指令DJNZ;,例1:假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号数,要求找出其中的大数并存入ST3单元。分析:两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:START:CLR C MOV DPTR,#ST1 MOVX A,DPTR MOV R7,A INC DPTR MOVX A,DPTR SUBB A,R7 JC BIG1 MOVX A,DPTR SJMPBIG2BIG1:XCH A,R7BIG2:INC DP

38、TRMOVX DPTR,ASJMP,(2)多分支程序(1)嵌套分支结构例2:设变量X存放于30H单元,函数值Y存放31H单元。试按照式:1 X0Y=0 X=0 的要求给Y赋值-1 X0分析:X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。流程图如下:,START:MOV A,30H JZOVER JNBACC.7,LAB1 MOVA,#0FFH SJMP OVER LAB1:MOVA,#1 OVER:MOV31H,A SJMP,(3)多重分支结构利用MCS-51单片机的散转指令JMP A+DPTR,可方便地实现多重分支控制,因此,又称

39、为散转程序。假定多路分支的最大序号为n,则分支的结构如图所示。,例3 根据条件0、1、2、n,分别转向处理程序PRG0、PRG1、PRGn,条件K设在R2中。START:MOV DPRT,#TABLE MOV A,R2 JMP A+DPTR TABLE:AJMP PRG0 AJMP PRGn PRG0:PRGn:,2.3.5 循环程序设计(1)循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:DJNZ、CJNE、JC、JNC、JZ、JNZ等控制类指令。,(2)单循环终止循环控制采用计数的方法,即用一个寄存器作为循环次数计数器,每次循环后

40、计数加1或减1,达到终止值后退出循环。例1:计算50个8位二进制数(单字节)之和。要求:50个数存放在30H开头的内部RAM中,和放在R6R7中。分析:采用DJNZ循环体的流程框图如下页所示,在参考程序中,R0为数据地址指针,R2为减法循环计数器。,START:MOV R6,#0 MOV R7,#0 MOV R2,#50 MOV R0,#30H LOOP:MOV A,R7ADD A,R0 MOV R7,A CLR A ADDC A,R6 MOV R6,A INC R0 DJNZ R2,LOOP SJMP$,(3)多重循环 如果在一个循环程序中嵌套了其他的循环程序,称为多重循环程序。在用软件实现

41、延时时显得特别有用。例2:设计1秒延时子程序,假设fosc=12MHz。分析:软件延时与指令的执行时间关系密切,在使用12MHz晶振时,一个机器周期的时间为1us,执行一条DJNZ指令的时间为2us,我们可以采用三重循环的方法写出延时1秒的子程序,DELAY:MOV R7,#10;DL3:MOV R6,#200;DL2:MOV R5,#250;DL1:DJNZ R5,DL1;DJNZ R6,DL2;DJNZ R7,DL3;RET,例:无符号二进制乘法程序。将(R2R3)和(R6R7)两个双字节无符号数相乘,结果送R4R5R6R7。NMUL:MOV R4,#0MOV R5,#0MOV R0,#1

42、6;16位二进制数CLR CNMLP:MOV A,R4;右移一位RRC AMOV R4,AMOV A,R5RRC AMOV R5,AMOV A,R6RRC AMOV R6,AMOV A,R7 RRC A,MOV R7,AJNC NMLN;C为移出的乘数最低位MOV A,R5;执行加法ADD A,R3MOV R5,AMOV A,R4ADDC A,R2MOV R4,ANMLN:DJNZ R0,NMLP;循环16次MOV A,R4;最后将结果再右移一位RRC AMOV R4,AMOV A,R5RRC A,MOV R5,AMOV A,R6RRC AMOV R6,AMOV A,R7RRC AMOV R7

43、,A RET,本章小结,本章重点讲述了单片机的指令系统。首先重点讲述了7大寻址方式。然后分讲了数据传送类指令、算术和逻辑运算类指令、转移指令、位操作指令。最后阐述了单片机的伪指令,以及单片机的一般编程格式。通过本章的学习,同学们要掌握子程序的编写,外部RAM的,编程题目1、按下列要求写出相应的指令(1)把寄存器R5的内容送到累加器A中。(2)把外部RAM1000H单元内容传送到内部RAM30H单元中(3)清除内部RAM3FH单元的高4位(4)使累加器A的最低位置1(5)清除进位位(6)使ACC.4和ACC.5置12、请使用位操作指令,编程实现:其中 20H、2FH、2AH都是位地址 3、将外部

44、RAM8000H开始的20个字节数据传送到外部RAM8100H开始的地址单元中去,4、双字节加法被加数放在内部RAM的 30H(高字节),31H(低字节)单元中,加数存放在内部RAM的32H(高字节)和33H(低字节)中,运算结果放存放在30H,31H中,进位存放在位寻址区的00H位。5、求双字节补码程序 设双字节数放在内部RAM的30H和31H单元(高字节在低地址),将其取补后存入40 H(存放高字节)和41H(存放低字节)单元6、将外部RAM40H-60H单元中的数据传送到内部RAM的同地址区域,将原地址数据全部清零。7、编程统计累加器A中“1”的个数。8、从内部RAM30H单元开始存放了20个数,找出其中的最大数。9、利用调子程序的方法,进行两个无符号数相加。请编主程序及子程序。10、试编:查表法求120的平方数子程序。要求:X在累加器A中,1X20,平方数高位存放在R6中,低位存放在R7中。,11.试编写程序,对片外4000H开始的单元中100个带符号数,统计其中正数、负数和零的个数,分别存到片内RAM 12H、11H和10H单元中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号