单片机原理及应用 第三章_第1页
单片机原理及应用 第三章_第2页
单片机原理及应用 第三章_第3页
单片机原理及应用 第三章_第4页
单片机原理及应用 第三章_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

,知识要点:(1)7种寻址方式(2)每条指令的意义(3)伪指令课程要求:(1)掌握单片机的指令格式(2)掌握单片机指令系统的寻址方式(3)掌握单片机的指令系统(4)掌握单片机的伪指令,3.1.1概述,1.指令与程序 指令:控制计算机完成各种操作的命令称为指令(Instruction)。 程序:一系列指令的有序集合称为程序(Program)。2.指令的属性指令一般有功能、时间和空间属性。,标号:操作码 操作数1,操作数2;注释换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数,1.标号:指令的符号地址2.操作码:指明指令功能。 3.操作数:指令操作对象数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。 操作码和操作数是指令主体。,MOV_move传送XCH_exchange交换ANL_and logic与逻辑运算XRL_exclusive or异或运算MUL_Multiply乘法RR_rotate right右循环SJMP_short jump短跳转RET_return 子程序返回,3.1.2指令格式,标号:操作码 操作数1,操作数2;注释换行表示一条指令结束。 例1: LOOP: MOV A,#40H ;取参数,3.1.3操作数类型,(1)立即数(2)寄存器操作数(3)存储器操作数,立即数,寄存器操作数,例2: MOV 70H,#40H ;取参数,存储器操作数,Rn(n=07)-当前选中的工作寄存器组中的寄存器R0R7之一;Ri(i=0,1)-当前选中的工作寄存器组中的寄存器R0或R1; -间接寻址寄存器前缀;#data -8位立即数;#data16-16位立即数;direct-片内低128个RAM单元地址及SFR地址(可用符号名称表示);,3.1.4指令描述约定(实际中体会),addr11-11位目的地址;addr16-16位目的地址;rel-补码形式表示的8位地址偏移量,值在128127范围内;bit-片内RAM或SFR的直接寻址位(可用符号名称表示);/-位操作数的取反操作前缀;() -表示 地址单元或寄存器中的内容; -将箭头右边的内容送入箭头左边的单元C-进位标志位或位处理机中的累加器。,3.1.4指令描述约定(实际中体会),3.2MCS-51单片机的寻址方式,寻址方式寻找操作数所在地址的方法。寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内快速地找到指定的地址单元一般说,寻址方式越多,系统的指令就越多,功能就越强大。MCS-51单片机有7种基本寻址方式:立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,1、立即寻址 操作数为立即数。 例: MOV A,#05H 操作数前以“#”做前缀,表示该数为立即数。,3.2.2寻址方式说明,FFH,ROM,05H,SFR,A,2、寄存器寻址 操作数存放在寄存器里。例:MOV A,Rn ;A(Rn)寄存器包括8个工作寄存器R0R7,累加器A, 寄存器B、数据指针DPTR。寻址范围包括:(1)4个通用工作寄存器组 48。(2)部分特殊功能寄存器,累加器A、乘法器B、数据指针寄存器DPTR以及进位C。,3.2.2寻址方式说明,FAH,RAM,FFH,22H,SFR,FFH,A,40H,R7,40H,3、直接寻址在指令中直接给出操作数的地址。在这种方式中, 指令的操作数部分直接是操作数的地址。 例:MOV A,32H 寻址范围: (1) 特殊功能寄存器。除了以单元地址的形式外,还可用寄存器名字的形式给出。 例:MOV A,80H MOV A,P0,3.2.2寻址方式说明,FAH,RAM,FFH,06H,SFR,FFH,A,06H,32H,(2) 片内RAM的低 128 个字节单元(00H7FH)。 (3)位地址空间。,4、寄存器间接寻址 在这种寻址方式中, 寄存器的内容为操作数的地址。 例:MOV A, R0 寄存器间接寻址只能使用寄存器R0、R1 以及DPTR作为地址指针,寻址片内和片外RAM区的数据。寄存器间接寻址符号为“”。,3.2.2寻址方式说明,FAH,RAM,FFH,22H,SFR,FFH,A,40H,40H,22H,R0,5、变址寻址 这种寻址方式用于访问程序存储器中的数据表格, 它以基址寄存器DPTR或PC的内容为基本地址, 加上变址寄存器A的内容作为操作数的地址。例: MOVC A, DPTR+A MOVC A, PC+A,3.2.2寻址方式说明,12D8H,6、相对寻址 相对寻址是以当前PC值加上指令中给出的偏移量rel,而构成实际操作数地址的寻址方式。注意:(1)当前PC值是指相对转移指令的存储地址加上该指令的字节数。 目的地址=转移指令所在的地址+转移指令的字节数+rel(2)偏移量rel是一带符号的8位二进制数补码数。,3.2.2寻址方式说明,7、位寻址MCS-51有位处理功能,可以对数据位进行操作例如:MOV C,02H寻址范围包括:(1)内部RAM中的位寻址区。位有两种表示方法,例如,40H;另一种是单元地址加上位,例如,(28H).0,指的是28H单元中的最低位,它们是等价的。,3.2.2寻址方式说明,0 0 0 1 1 0 0,RAM,FFH,SFR,FFH,PSW,40H,02H,1 1 0 0 1 1 1 0,1,0,0 0 1 0 1 1 0 0,(2)特殊功能寄存器中的可寻址位在指令中有如下4种的表示方法:a.直接使用位地址。例如PSW.5的位地址为0D5H。b.位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。c.单元地址加位数的表示方法。例如 :(0D0H).5。d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。,3.2.2寻址方式说明,3.3MCS-51单片机指令系统,MCS-51系列单片机指令系统按功能分为5类指令,分别为:,数据传送(29条)MOV/MOVC/MOVX算术运算(24条)ADD/SUBB/MUL/DIV逻辑运算(24条)ANL/ORL/XRL控制转移(17条)LJMP/JMP/SJMP布尔处理(17条)CLR/SETB/JC/JNC,MCS-51指令系统用42种助记符表示了33种指令功能。,3.3.1数据传送类指令,(1)MOV指令:实现片内数据存储器中数据传送指令格式: MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。,1、8位二进制的传送指令。,MOV A,Rn ;A(Rn),Rn=R0R7 MOV A,direct ;A(direct),MOV A,Ri ;A(Ri),Ri=R0、R1 MOV A,#data ;Adata,,3.3.1数据传送类指令,1、8位二进制的传送指令。,MOV Rn, direct ;Rn(direct)MOV Ri, direct ;(Ri)(direct) MOV direct1,direct2 ;(direct1)(direct2),2、16位二进制的传送指令。,MOV DPTR,#1234H,用于数据的保存及交换。,MOV A,#30HMOV 4FH,AMOV R0,#20HMOV R0,4FHMOV 21H,20H,;(A)= 30H;(4FH)= 30H;(R0)= 20H;(20H)= 30H;(21H)= 30H,3.3.1数据传送类指令,用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。解: MOV A,#60H或MOV A,60H,或 MOV R0,60H MOV A,R0 或 MOV R0,#60H MOV A,R0 结果A=32H,(),(),(),(),1. 一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1,R2 MOV R2,R0,2. 间址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR区只能直接寻址,不能用寄存器间接寻址。非法指令: MOV R0,#80H MOV A,R0,3.3.1数据传送类指令,(2)MOVC指令:查表指令,即将程序存储器的内容送累加器。指令格式: MOVC 目的操作数,源操作数,12D8H,MOVCA,A+PC,MOVCA,A+DPTR,3.3.1数据传送类指令,(3)MOVX指令:实现片外数据存储器和A累加器之间的数据传送。,指令格式:MOVX 目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1. DPTR作16位数据指针,寻址64KB片外RAM空间MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(DPTR)A2. Ri作低8位数据指针,寻址256B片外RAM空间MOVXA,Ri;A(Ri)MOVXRi,A ;(Ri)A,MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A,; (DPTR)= 2000H; (A)= X; (DPTR)= 2100H;(2100H)= X,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H,3.3.1数据传送类指令,3.3.1数据传送类指令,执行:(SP)=60H,(A)=30H,(B)=70H PUSH ACC ; (SP)+1=61HSP,(A)61H PUSH B; (SP)+1=62HSP,(B)62H 结果:(61H)=30H,(62H)=70H,(SP)=62H POP DPH ; (SP)DPH,(SP)-1SP POP DPL ; (SP)DPL,(SP)-1SP 结果:(DPTR)=7030H,(SP)=60H,(4)堆栈操作指令 入栈指令:PUSH n ;SP+1 SP ,(n) (SP) 出栈指令:POP n ;(SP) (n),SP-1 SP,字节交换指令XCH A,Rn ;A RnXCH A,Ri;A (Ri) XCH A,n ;A (n),例:设(A)= 29H,(2AH)=31H执行指令 XCH A,2AH后,(A)= ?(2AH)= ?,3.3.1数据传送类指令,(A)=31H, (2AH)=29H,3.3.1数据传送类指令,例:设(A)=35H,(R1)=20H,(20H)=46H,执行指令:XCHDA,R1,(A)=36H,(20H)=45H,例:设(A)=35H执行指令:SWAPA,(A)=53H,作业:1、用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。2.将片外RAM 0000H单元的数据传送到片内RAM的60H单元。,1.加法指令,0011 1011 + 0011 1011 0111 0110,76H 0 0 1 1,1)不带进位加法:ADD A,源操作数 ADD A,R2 ;AA+R2,影响Cy、OV、AC、P 例1:(A)=3BH,PSW=0,执行指令 ADD A,#3BH求:(A)= ,Cy= ,OV= ,AC= ,P= ,PSW= ?,01000001= 41H,3.3.2算术运算类指令,1001 1010 1110 0011+ 1 1 0111 1110,2)带进位加法: ADDC A,源操作数 ADDC A,R2 ;AA+R2+Cy,影响Cy、OV、AC、P,例2:(A)= 9AH,(R2)= E3H,PSW= 80H,执行指令ADDC A,R2 后求:(A)= ,Cy= ,OV= ,AC= ,P= ,PSW= ?,10000100 = 84H,3.3.2算术运算类指令,SUBB A,R2;AA-R2-Cy,;影响Cy、OV、AC、P,(A)=40H, Cy=0, OV=0, P=1 AC=0,例:(A)= 64H,(R2)= 23H,Cy= 1,执行下列指令SUBB A,R2求:(A)= ,Cy= ,OV= ,P= ,AC= ?,3.3.2算术运算类指令,INC 单操作数,3.3.2算术运算类指令,3. 增量指令,INC A;A (A)+1INC Rn;Rn (Rn)+1INC direct ;direct (direct)+1INC Ri ;(Ri) (Ri)+1INC DPTR;DPTRDPTR+1 注意:(1)不影响标志位状态,若变量中内容为FFH,则执行程序后变量溢出为00H。(2) INC DPTR是16位数加1指令,指令首先对低8位指针DPL的内容执行加1操作,当产生溢出时,就对DPH的内容进行加1操作,不影响Cy位状态。,4. 减量指令DEC 单操作数 DEC A;A (A)-1DEC Rn;Rn (Rn)-1DEC direct ;direct (direct)-1DEC Ri ;(Ri) (Ri)-1,3.3.2算术运算类指令,注意:(1)不影响标志位状态 (2)没有指令 DEC DPTR 可用指令 DEC DPL 代替,十进制加法指令:ADD A,源操作数DA A注意:两个压缩BCD码的数按二进制相加之后,必须经本指令的调整后才能得到正确的结果(为压缩BCD码表示)。,BCD调整指令:DAA; 对 A 中加法结果进行调整,5.十进制调整指令,3.3.2算术运算类指令,6.乘法指令,MUL AB;BAAB,Cy0,,例:(A)= 96(60H), (B)= 192(C0H),执行指令 MUL AB 后, 求:(A)= ,(B)= ,Cy= ,OV= ,P= ?解: 96 192 = 18432(4800H),00H 48H 0 1 0,3.3.2算术运算类指令,注意:影响标志位OV和C,其中C总为0,如果乘积大于255(0FFH)时,即B的内容不为0时,置位OV,3.3.2算术运算类指令,DIV AB ;AB,A商,B余数,Cy0,,7.除法指令,例:(A)= 246(F6H),(B)= 13(0DH),执行指令 DIV AB 后求:(A)= ,(B)= ,Cy= ,OV= ,P= ?解: 246 13 = 18(12H),余数= 12(0CH)。,12H 0CH 0 0 0,注意:影响标志位OV和C,其中C总为0,当除数B的内容为00H时,则执行结果不确定,OV置位。,(一)双操作数逻辑运算指令(对位逻辑运算): 1. 逻辑与指令 ANL A,Rn ; (A)(Rn)A,n=07 运算结果存入目的操作数中, 例:(A)=07H,(R0)=0FDH,执行指令:ANL A,R0 (A)= 00000111 (R0)=11111101,3.3.3逻辑运算类指令,结果:(A)= 00000101=05H,3.3.3逻辑运算类指令,2. 逻辑或指令 ORL A,Rn ;(A)(Rn)A ,n=07 例:(P1)=05H,(A)=33H,执行指令 ORL P1,A (P1)=00000101 (A) =00110011,结果:(P1)=00110111=37H,3逻辑异或指令 XRL A,Rn ;(A) (Rn)A 例:(A)=90H,(R3)=73H 执行指令:XRL A,R3 (A) =10010000 (R3)=01110011,3.3.3逻辑运算类指令,结果:(A)=11100011=E3H,例: (A)=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何? XRL A,#0C0H;将累加器A的内容D7、D6取反 ORL A,#03H;将累加器A的内容D1、D0置1ANL A,#0E7H;将累加器A的内容D4、D3清0,3.3.3逻辑运算类指令,解 :执行上述指令后,(A)=100011B。,(二)单操作数指令(A累加器为操作数)1. CLR A ;A0功能是将累加器A清0,不影响Cy、Ac、OV等标志。 2. CPL A ;A/A功能是将累加器A的内容按位逻辑取反,不影响标志。,3.3.3逻辑运算类指令,3. 循环移位指令:1)8位循环指令:RL A ;累加器A的8位向左循环移位,位7循环移入位0,不影响标志。 RR A ;累加器A的内容向右环移一位,Acc.0移入Acc.7,不影响其它标志。,2)9位循环指令: RLC A;累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响其它标志。 RRC A;累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7。,3.3.3逻辑运算类指令,例:设(A)=0A4H,C=1,顺序执行下列指令RLACPLARLCARRARRCA,按转移条件分类:1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。2)条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。3)调用和返回指令: 调用和返回子程序。,3.3.4控制转移类指令,转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。,一.无条件转移指令 1.长转移指令:LJMP nn ;PC nn 指令转移范围:64KB,2.相对短转移指令: SJMP rel ; PC PC+2,PC PC+rel相对偏移量 rel为8位补码。 指令转移范围:-128+127字节,相对偏移量 rel 的计算式: rel = 目的指令地址 -(转移指令地址+指令字节数) =目的地址 -当前PC值,编程时,用标号代替转移目的地址,转移指令的操作数交给汇编程序计算。LJMP NEXT / SJMP NEXT NEXT:,例1:计算转移指令的相对偏移量 rel ,并判断是否超出转移范围。,例2:原地踏步指令的指令代码HERE: SJMP HERE,相对偏移量 = 2150H -(2130H+2)= 001EH,指令地址源程序2130H SJMP NEXT 2150H NEXT:MOV A,R2,3间接转移指令(多分支转移指令) JMP A+DPTR ;PC A+DPTR指令转移范围64KB。,KEY: MOV DPTR,#KTAB MOV A,40H JMP A+DPTRKTAB: LJMP FUNC0 LJMP FUNC1 FUNC0: FUNC1: ,应用:处理功能键。要求不同功能键执行不同程序段。设每个功能键对应一个键值 X(0XFH)。 设X已存入片内RAM的40H单元中。若X=0,则执行程序段FUNC0若X=1,则执行程序段FUNC1。,(1)判零转移指令JZ NEXT ;若A=00H,PCNEXT(转移), ;若A00H,PC不变(不转移),条件转移指令形成程序的分支,赋予计算机判断决策能力,JNZ NEXT ;若A00H,PC NEXT(转移) ;若A=00H,PC不变(不转移),(2) 比较不相等转移指令: CJNE 操作数1,操作数2,NEQ,CJNE A,n,NEQ;若A(n),则PCNEQ ;且当A(n)时,Cy=0,当A(n)时,Cy=1; ;若A =(n),PC不变,且Cy=0。,(3)循环转移指令(减1不为0跳转指令):DJNZ 操作数,LOOP DJNZ R2,LOOP ;R2R2-1,若R20,PCLOOP , ;若R2=0,PC不变。,例:用于循环结构程序。设要求程序循环执行100次MOV R2,#100 ;设循环计数器初值LOOP: ;多次循环程序段 DJNZ R2,LOOP;循环控制 ;循环结束,三、子程序调用和返回指令子程序调用和返回指令也使程序发生转移。,子程序调用过程:与转移指令不同:调用时,先用堆栈保存当前地址,二子程序返回指令RET ; SP SP-2 (SP)PCH,然后(SP)-1SP(SP)PCL,然后(SP)-1SPRET指令从堆栈弹出保存的PC地址,实现子程序返回。,一长调用指令LCALL nn ;PC PC+3, SP SP+2, SP(PC), PC nnnn为子程序起始地址,编程时可用标号代替。指令调用范围:64KB,注意:1.子程序起始指令要使用标号,用作子程序名。 2. 执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,常用格式:MAIN:;主程序LCALL SUBR;调用SUBRSUBR:;子程序首地址RET;子程序返回,一.位数据传送MOV C,bitMOV bit,C例:(21H)=A1HMOV C,08H;(21H).0C,即C=108H是内部RAM 21H字节位0的位地址。,3.3.5位操作类指令,二.位变量修改指令CLR C;清“0”CyCLR bit;清“0”bit位CPL C;Cy求反CPL bit;bit位求反

温馨提示

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

评论

0/150

提交评论