应用一led灯控制系统软件设计1_第1页
应用一led灯控制系统软件设计1_第2页
应用一led灯控制系统软件设计1_第3页
应用一led灯控制系统软件设计1_第4页
应用一led灯控制系统软件设计1_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、应用一、单片机控制8个LED灯控制的软件部分设计1、所需基础知识;2、灯亮灭控制的程序实现;3、间隔闪灯的程序实现;软件设计的基础知识一、指令系统主要内容:指令格式、寻址方式、主要指令、基于指令的汇编程序设计,以及编译需求的伪指令指令系统 1、指令的一般格式: MCS-51单片机指令格式采用了单地址指令格式。一条汇编语句是 由标号、操作码、目的操作数、源操作数和注释等5部分组成的, 其中方括号中的部分是可以选择的。 指令的具体格式为: 标号:操作码 目的操作数,源操作数;注释 例如: HY1:MOV R3 , #08H ;执行数据传送操作指令系统 2、指令符号 A:累加器,用于运算及存放数据。

2、 B:专用寄存器,用于MUL和DIV指令中,存放第二操作数、乘积高位字节。 CY:进位标志位,或布尔处理器中的累加器。 bit:内部RAM或专用寄存器中的直接寻址位。 /bit:位地址单元内容取反。 DPTR:16位数据指针,也可作为16位地址寄存器。指令系统 Rn:工作寄存器中的寄存器Rn、R1R7之一; Ri:工作寄存器中的寄存器R0或R1; #data:8位立即数 #data16:16位立即数 direct:片内RAM或SFR的地址(8位) :间接寻址寄存器 Bit:片内RAM或SFR的位地址 addr11:11位目的地址 addr16:16位目的地址指令系统rel: 补码形式的8位地址

3、偏移量。偏移范围为-128127/:位操作指令中,该位求反后参与操作,不影响该位X:片内RAM的直接地址或寄存器(X):相应地址单元中的内容:箭头左边的内容送入箭头右边的单元内指令系统 3、指令分类 MCS-51单片机共有111条指令,可以实现51种基本操作。 按功能分类:数据传送类:29条算术运算类:24条功能逻辑运算类:24条控制转移类:17条位操作类:17条指令系统 按指令产生机器码字节数类分: 单片机中的指令并不是固定的长度,对于不同的指令,指令的字节数不同。MCS-51单片机用机器语言表示的指令格式按字节划分,有一字节指令、两字节指令和三字节指令等三种。 (1)一字节指令中的8位二进

4、制代码既包含操作码的信息,也包含操作数的信息。 例如指令:INC A MOVA,Rn XCHA,Rn ADDA,Ri DECRn(2) 二字节指令中的第一个字节表示操作码,第二个字节表示操作数,操作数既可能是立即数,也可能是地址。其指令格式为: 例如:ANLA,#90HADDA,#06HDEC30HMOVR2,#0F0H立即数或寻址地址操作码操作码立即数或寻址地址立即数或寻址地址(3)三字节指令中,第一字节表示操作码,另两个字节是 操作数,其指令格式为: 例如:ANL30H,#66HMOVDPTR,#1000HLJMP0300HCJNEA,20H,HL5按指令执行时间分类 如果按照指令的机器周

5、期数来分,MCS-51系列单片机常可以分为单周期指令57条,双周期指令52条和四周期指令2条等。 ( 1 ) 单周期指令的执行指令时间为一个机器周期。 例如:XCHA,R1 ADDA,R1 CLRA MOVR3,#0F0H (2)双周期指令的执行指令时间为2个机器周期。例如:MOVRn,30H DJNZ R3,LOOP JMPa+DPTR (3)四周期指令的执行指令时间为4个机器周期。例如: DIVAB MULAB4、寻址方式(1)、立即寻址Immediate Addressing操作数存在程序存储器中操作数就包含在指令代码中,在操作码之后,称为立 即数,用“”表示。如 :MOV P1, #8

6、0H MOV R7, #0F5HMOV DPTR,#1245H(2)直接寻址Direct Addressing直接使用数所在单元的地址找到了操作数,所以称这种方法 为直接寻址。操作数在SFR、内部RAM、位地址空间。如: MOV A,00HMOV C,60H MOV A,0F0H(3) 寄存器寻址Register Addressing对选定的工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进 行操作。例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部分,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,

7、那么这样一来, MOV A,00H和MOV A,R0不就没什么区别了吗?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个机器周期,而第二条则只需要1个机器周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8H) 就可以了。(4) 寄存器间接寻址(指针方式)RegisterIndirect Addressing把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。 R0,R18位地址,片内低128字节或片外 DPTR16位,片外64KBv MCS-51如: MOVA,

8、R0MOVXA,R0 MOVXA,DPTR操作数在片内RAM中操作数在片外RAM中操作数在片外RAM中(5) 相对寻址Relative Addressing改变PC将PC中的当前内容与指令第二字节给出的数相加,结果作为跳转指令的转移地址(转移目的地址)。PC中的当前内容称为基地址(本指令后的字节地址)指令第二字节给出的数据称为偏移量,1字节带符号数.常用于跳转指令。如:JC23H若C=0,不跳转; C=1,跳转.如:JC23当前PC1000H1001H1002H1024H1025H程序存储区3023404547指令代码23H1002H ALU1025H(6) 变址寻址(基址+变址)Base-R

9、egister-plus-Index-Register-Indirect Addressing以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两者内容相加,结果作为操作数的地址。常用于查表操作。v MCS-51操作数在程序存储器中MOVCA, A+DPTR ;(A+DPTR) AMOVCA, A+PC; PC+1 PC,(A+PC)A如:MOVCA,A+DPTR设DPTR=2000H,A=E0H2040H932041H指令代码程序存储区AE0 47 DPH DPL0020ALU20E0H4720E0H如:MOVCA,A+PC设A=E0H2040H2041H程序存储区83指令代码AE0 4

10、5 当前PC2120H472121H45ALU 2121H(7)位寻址BitAddressing对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。如:SETB3DH; 将27H.5位置1CLRC;Cy位清0操作数在片内RAM位地址区或SFR某些位中寻址方式涉及的存储器空间寻址方式寻址空间(操作数存放空间)立即寻址程序存储器直接寻址片内RAM低128字节、SFR寄存器寻址工作寄存器R0R7,A,B,DPTR寄存器间接寻址片内RAM:R0,R1,SP片外RAM:R0 ,R1,DPTR变址寻址程序存储器:A+PC,A+DPTR相对寻址程序存储器256字节范围内:PC+偏移量

11、位寻址片内RAM的位寻址区(20H2FH字节地址) 某些可位寻址的SFR5、MCS-51指令(A) 数据传送类指令 (29条) Data Transfer Instruction MCS-51助记符:MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POPv 源操作数寻址方式(5种):立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址v 目的操作数寻址方式(3种):直接寻址、寄存器寻址、寄存器间接寻址除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。1) 内部数据传送指令MOV(1) 以累加器为目的操作数的指令(4条)MOVA,Rn;RnAMOVA,dire

12、ct;(direct)AMOVA,Ri;(Ri)AMOVA,#data;dataA将源操作数指定内容送到A中。(2) 以寄存器Rn为目的操作数的指令 (3条)MOV Rn,AMOV Rn,direct MOV Rn,#data这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。(3) 以寄存器间接地址为目的字节的传送指令(3条)MOV Ri,A;A (Ri)MOV Ri,direct;(direct) (Ri) MOV Ri,#data; data (Ri)功能:把源操作数指定的内容送入以R0或R1为地址指针的片内存储单元中。例:MOVMOVR0,AR1,20HMOVR0,#3

13、4H(4) 以直接地址为目的操作数的指令(5条)MOV direct,A MOV direct,RnMOV direct1,direct2 MOV direct,RiMOV direct,#data这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。例: MOV20H,AMOV20H,R1MOV20H,30HMOV20H,R1MOV0A0H,#34HMOVP2,#34H(5)16位数据传送指令(1条)MOVDPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 例:M

14、OV DPTR,#1234H执行完了之后DPH中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。如下面两条指令:MOV DPH,#35HMOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。(6) 查表指令(2条)MOVCA,A+DPTR;A(A)+(DPTR)MOVCA,A+PC;A(A)+(PC)已知内存单元40H中有一个09范围内的数,用查表指令编出能查出该数立方值的程序。设立方表表头地址为0200H。程序及执行后的结果如下:MOVA,40HMOVDPTR,#LAB MOVCA,A+DPTRLAB:DB0,1,8,27,64若(40

15、H)为2,查表得8并存于A中(7) 外部数据传送指令MOVX (4条)说明:MOVXA,Ri MOVXRi,A MOVXA,DPTR MOVXDPTR,Ai. 在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递, 而外部则不行。比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。ii. 要读或写外部的RAM,当然

16、也必须要知道RAM的地址,在后两条指 令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1) 只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。(演示举例)iii. 使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。MOVDPTR,#0100H MOVXA,DPTRMOVDPTR,#0200H MOVXDPTR,A(8) 堆栈操作指令(PUSH、POP) (2条)PUSH direct;SPSP+1,(SP)(direct)POP direct; (direct) (SP)

17、, SPSP-1第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例:MOVSP,#5FHMOVA,#100 MOVB,#20 PUSHACC PUSHB则执行第一条PUSHACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样, 执行PUSHB时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行 完本条指令后,61H单元中的值变为20。(9) 数据交换指令 (5条)XCHA,Rn;ARnXCHA, direct;A(dire

18、ct)XCHA, Ri;A(Ri)XCHDA, Ri;A.3A.0(Ri).3(Ri).0SWAPA;A.3A.0A.7A.4例: 已知A中的内容为34HMOVR6, #29H XCHA, R6 SWAP AXCHA, R6 XCHD A, R0;R6=29H;A=29H,R6=34H;A=92H;A=34H,R6=92H;A=36H,(R0)=54H (设原来R0;指向的单元的内容为56H)课堂练习1.设:内部RAM中,(40H)=50H,(41H)=60H,(50H)=30H, (51H)=70H,执行下列片段后:a.MOVR0,40H;R0=50Hb.MOVR0,#40HMOVA,R0;

19、A=30HMOVA,R0INCR0;R0=51HINCR0MOVR0,A;(51H)=30HMOVA,R0;R0=40H;A=50H;(40)=51H;A=51H(40H)= H50H = HA= H (41H)= H51H= HR0= HXXXXXX XX XX XX XXXX XXXXXXXX XX 3034XXXX 23XXXXXX XX 30343412236712343430343412232. 给出每条指令执行后的结果MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,R0MOV34H,R1MOV45H,34HMOVDPT

20、R,#6712HMOV12H,DPHMOVR0,DPLMOVA,R0;(23H)=30H;(12H)=34H;R0=23H;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=67H;R0=12H;A=67H内部RAMDPH DPL34671245H3434H3023H6712H34R71212R1 R03. 利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换。主要对8位无符号数;也可用于带符号数运算。包括:加、减、乘、除、加1、减1运算指令影响PSW有关位。1)加法指令(13条)(1)不带进位位的加法指

21、令(4条)ADDA,#data;AdataAADDA,direct;A(direct)AADDA,Rn;ARnAADDA,Ri;A(Ri)A用途:将A中的值与源操作数所指内容相加,最终结果存在A中。例1:ADD A,#47HADD A,34H ADD A,R7 ADD A,R0例2:MOV A,#0AEH实验ADD A,#81H验证则执行完本条指令后,A中的值为2FH;一下本例C=1,AC=0,OV=1,P=1。对无符号数:结果为12FH;带符号数运算:OV=1,有错。(2)带进位位的加法指令(4条)ADDC A,Rn; ARnCYAADDC A,direct ; A(direct )CYA

22、ADDC A,Ri; A(Ri)CYA ADDC A,#data; AdataCYA用途:将A中的值和其后面的值以及进位位C中的值相加,最终结果存在A,常用于多字节数运算中。说明:由于51单片机是一种8位机,所以只能做8位的数算,但8位 运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展, 一般是将2个8位(两字节)的数算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到065535。例: 1067H+30A0H0001 00000011 00000100 00010110 01111010 00000000 01111067H30A0H4107H先做67H+A0H

23、=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。换言之,CY就相当于是100H。然后再做10H + 30H + CY,结果是41H,所以最终的结果是4107H。设:1067H存在R1R0中, 30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。MOVA,R0ADDA,R2;R0+R2A和CYMOVR4,AMOVA,R1ADDCA,R3;R1+R3+CYA和CYMOVR5,A又例:1067H+3020H实验0001 0000 0110 0111验证0011 0000 0010 0000一下本例0100 0000 1000 0

24、111设:1067H存在R1R0中,3020H 存在R3R2中,计算R1R0+R3R2, 结果存在R5R4中。1067H3020H4087H先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H, 而PSW中的CY=0。然后再做10H + 30H + CY,结果是40H,所以最终的结果是4087H。(3) 加1指令(5条)INCA;A+1A,影响P标志INCRn;Rn+1RnINCdirect;(direct)+1(direct)INCRi;(Rn)+1(Rn)INCDPTR;DPTR+1DPTR功能很简单,就是将后面目标中的值加1。例:A=12H,R0=33H,(21H)

25、=32H,(34H)=22H,DPTR=1234H。连续执行下面的指令:INC A INC R0 INC 21H INC R0 INC DPTR;A=13H;R0=34H;(21H)=33H;(34H)=23H;DPTR=1235H2) 减法指令(8条)(1) 带借位的减法指令(4条)SUBB A,Rn; ARnCYASUBB A,direct; A(direct )CYASUBBA,Ri;A(Ri)CYASUBBA,#data;AdataCYA将A中的值减去源操作数所指内容以及进位位C中的值,最终结果存在A中。如: SUBB A,R2设: A=C9H,R2=55H,CY=1,执行指令之后,A

26、中的值为73H。说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。对带符号数,要注意OV标志。OV=1,出错。2.减1指令(4条)DECA;A-1A,影响P标志DECRn;Rn-1RnDECdirect;(direct)-1(direct)DECRi;(Rn)-1(Rn)与加1指令类似。3) 十进制调整指令(1条)DAA在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用来对BCD 码加法运算结果进行自动修正。例:A=0001 0101BCD(代表十进制数15)ADD A,#8 DAA; A=1DH,按二进制规律加; A=23H,按十进制规

27、律加 【例3-12】编写程序完成68+89的BCD加法程序,并对调整过程进行分析。 解:二进制加法和十进制调整过程为:0 1 1 0 1 0 0 00+)1 0 0 0 1 0 0 1 1 1 1 1 0 0 0 1+)0 1 1 01 1 1 1 0 1 1 11+)0 1 1 0 0 0 0 0 0 1 0 1 0 1 1 1低4位9,加6调整高4位9,加60调整CY=14) 乘法指令(1条)MUL AB;ABBA此指令的功能是将A和B中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B 中,低8位放在A中。在乘积大于FFH时,0V置1,否则

28、OV为0;而CY总 是0。例:A=4EH,B=5DH,执行指令MULAB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。OV=1P=05) 除法指令(1条)DIV AB;AB的商A,余数B此指令的功能是将A中的8位无符号数除B中的8位无符号数(A/B)。除了以后,商放在A中,余数放在B中。CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0, 那么0V=1。如:A=11H,B=04H,执行指令DIV AB后, 结果:A=04H,B=1。CY=0OV= 0P=1总结 算数运算类指令对标志位的影响:指令助记符影 响 标 志备注CyOVACADD (加)“”表示有影响

29、(可置 1 或清 0);“0”表示总清 0ADDC (带进位加)SUBB (带借位减)MUL (乘)0DIV(除)0DA(二进制调整)练习试编写1234H-0FA3H的程序段,将结果高8位存入51H, 低8位存入50H单元。CLRCMOVA,#34HSUBBA,#0A3HMOV50H,AMOVA,#12HSUBBA,#0FHMOV51H,A(C) 逻辑运算指令 (24条)Logic Operations主要用于对2个操作数按位进行逻辑操作,结果送到A或直接寻址单元。v 主要操作与、或、异或、移位、取反、清零等。v 对标志位的影响除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。1

30、)逻辑“与”指令(6条)ANd Logic InstructionANL A,Rn;ARnAANL A,direct;A(direct)AANL A,Ri;A(Ri)AANL A,#data;AdataA影响P标志ANL direct,A;(direct)A(direct)ANL direct,#data;(direct)data(direct)后两条指令,若直接地址为I/O端口,则为“读改写”操作。例:71H和 56H相与:01110001 (71H) )01010110 (56H)01010000 即50H实验验证一下本例例:MOV A,#45H MOV R1,#25H MOV 25H,#

31、79H ANL A,R1 ANL 25H,#15H ANL 25H,A;A=45H;R1=25H;(25H)=79H;45H79H = 41HA; 79H15H = 11H (25H); 11H41H = 01H (25H)2)逻辑或指令(6条)OR Logic InstructionORL A,Rn;ARnA ORL A,direct;A(direct)A ORL A,Ri;A(Ri)AORL A,#data;AdataA影响P标志ORL direct,A;(direct)A(direct)ORL direct,#data ;(direct)data(direct)后两条指令,若直接地址为I

32、/O端口,则为“读改写”操作。例:71H和56H相或:01110001 (71H) 01010110 (56H)01110111 即77H例:实验验证一下本例MOVA,#45H;A=45HMOVR1,#25H;R1=25HMOV25H,#39H;(25H)=39HORLA,R1;45H39H= 7DHAORL25H,#13H;39H13H= 3BH (25H)ORL25H,A; 3BH7DH=7FH (25H)3)逻辑异或指令(6条)eXclusive-oRLogic InstructionXRL A,Rn;A RnA XRL A,direct;A (direct)A XRL A,Ri;A (

33、Ri)AXRL A,#data;A dataA影响P标志XRL direct,A;(direct) A(direct)XRL direct,#data;(direct) data(direct)01110001(71H))01010110(56H)00100111即27H后两条指令,若直接地址为I/O端口,则为“读改写”操作。例:71H和56H相异或:实验验证一下本例例:MOVMOVA,#45HR1,#25HMOV25H,#39HXRLA,R1XRL25H,#13HXRL25H,A;A=45H;R1=25H;(25H)=39H; 45H39H = 7CHA; 39H13H = 2AH (25H

34、);2AH7CH =56H (25H)4)清0与取反指令(2条)ComPlement Logic Operation取反:CPLA ;/AA例:若A=5CH,执行CPLA结果:A=A3H 清0:CLRA;0A5) 循环移位指令(4条)Rotate Logic instructionA.7A.0CYA.7A.0CYA.7A.0A.7A.0RL A RR A RLC ARRC A后两条指令,影响P标志和CY。例:若A=5CH,CY=1,执行RLC A后, 结果:A=B9H,CY=0,P=101011 10010101 11001v 对RLC、RRC指令,在CY=0时 RLC相当于乘以2 RRC相当

35、于除以2综合举例:把累加器A中的低4位状态,通过P1口的高4位输出, P1口的低4位状态不变。ANLA,#0FH;屏蔽A的高4位SWAPAANLP1,#0FH;清P1口高4位ORLP1,A;P1口高4位输出A的低4位;(D) 控制转移类指令( 17条) BranchingInstruction共有控制程序转移类指令(不包括位操作类的转移指令)。此类指令一般不影响PSW。包括以下类型: 无条件转移和条件转移 相对转移和绝对转移 长转移和短转移 调用与返回指令1) 无条件转移类指令(4条) 短转移类指令:AJMPaddr11 长转移类指令:LJMPaddr16 相对转移指令:SJMPrel 间接转

36、移指令:JMP A+DPTR(i) 上面的前三条指令,统统理解成:那么他们的区别何在呢?v 跳转的范围不同。 短转移类指令:AJMPaddr11 长转移类指令:LJMPaddr16 相对转移指令:SJMPrelv 指令构成不同。AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。转移范围:2KB64KB-128+127v 指令长度不同v 原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代。(ii) 第四条指令与前三条指令相比有所不同 间接转移指令:JMP A+DPTR这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。转移地址由A+DPTR形成,并直接

37、送入PC。指令对A、DPTR和标 志位均无影响。本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。例: MOV DPTR,#TAB ;将TAB代表的地址送入DPTR JMP A+DPTR ; 跳 转TAB: AJMP ROUT0 ;跳转ROUT0开始的程序段TAB+2: AJMP ROUT1 ;跳转ROUT1开始的程序段TAB+4: AJMP ROUT2 ;跳转ROUT2开始的程序段TAB+6: AJMP ROUT3 ;跳转ROUT3开始的程序段.ROUT0:.ROUT1:.ROUT2:.ROUT3:执行该段程序后,程序将根据A中的内容转移到不同的程序段去执行散转。A=0

38、,转ROUT0 A=2,转ROUT1 A=4,转ROUT2 A=6,转ROUT32) 条件转移指令(8条)条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。(i) 判A内容是否为0转移指令(2条)JZrel;如果A=0,则转移,否则顺序执行。JNZrel;如果A0,就转移。转移到相对于当前PC值的8位移量的地址去。即:新的PC值=当前PC+偏移量rel我们在编写汇编语言源程序时,可以直接写成:JZ标号;即转移到标号处。例:MOVA,R0JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFHL2:SJMPL2END在执行上面这段程序前:如果R0=0,

39、结果R1=0FFH。而如果R00, 则结果是R1=00H。把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么?如果R0=0,结果R1=00H。如果R0 0,结果是R1中的值为0FFH。(ii) 比较不等转移指令(4条)CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。同样地,使用时,我们可以将rel理解成标号,即:CJNE A,#data,标号CJNE A,direct,标号CJNE Rn,#data,标号CJNE

40、Ri,#data,标号利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大, 哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。举例:MOVA,R0CJNEA,#10H,L1MOVR1,#0;如R0=10H,则不转移R1=00H; AJMPL3L1:JCL2;如CY=1即 R010H,则转移AJMPL3L2:MOVR1,#0FFH L3:SJMPL3因此最终结果是:本程序执行前, 如果R0=10H,则R1=00H;如果R01

41、0H,则R1=0AAH; 如果R010H,则R1=0FFH。(iii) 减1不为0转移指令(2条)DJNZ Rn,rel DJNZ direct,relDJNZ指令的执行过程是这样的:它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0, 就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。例:DJNZ 10H,LOOP.LOOP:.例:MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的执行过程是:将23H单元中的数连续相加,存至A中,每加一次, 23H单元中的数值减1,直至减到0,共加(23H)次。3) 子程序调用和返回(i

42、)调用指令(2条)LCALLaddr16;长调用指令(3字节)ACALLaddr11;短调用指令(2字节)上面两条指令都是在主程序中调用子程序,两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。使用时可以用:LCALL标号;标号表示子程序首地址ACALL标号来调用子程序。指令的执行过程是:当前PC压栈,子程序首地址送 PC,实现转移。(ii)返回指令 (2条)子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。RET;子程序返回指令RETI;中断子程序返回指令两者不能互换使用。RET指令的执行过程是:堆栈栈顶内容(2

43、字节,调用时保存的当前PC值)弹出给PC,实现返回。RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。4) 空操作指令(1条)NOP空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。(E) 位操作指令 ( 17条)Boolean OperationsMCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理 器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。v 位操作区:内部RAM的20H-2FH这16个字节单元,即128个位 单元(位地址空间位007F

44、H);v 可以位寻址的特殊功能寄存器:8031中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除, 如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。在进行位处理时, CY用作“位累加器” 。位地址表达方式以PSW中位4( RS1 )为例。 直接(位)地址方式:如 D4H; 点操作符号方式:如 PSW.4,D0H.4; 位名称方式:如 RS1; 用户定义名方式:如用伪指令 bit SUB.REGbitRS1定义后,可用SUB.REG代替RS1。1) 位传送指令 (2条)MOV C,bit ;bit CMOV bit,C ;C bit这组指令的功能是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论