欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机3学习教程.pptx

    • 资源ID:87567058       资源大小:461.48KB        全文页数:48页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机3学习教程.pptx

    一一.汇编语言指令格式汇编语言指令格式 标号:操作码 操作数1 1,操作数22;注释 例:LOOPLOOP:MOV A MOV A,#40H#40H ;取参数1.1.标号:指令的符号地址。2.2.操作码:指明指令功能。3.3.操作数:指令操作对象。包括数据、地址、寄存器名及约定符号。4.4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。MOV_move传送XCH_exchange交换ANL_and logic与逻辑运算XRL_exclusive or异或运算MUL_Multiply乘法RR_rotate right右循环SJMP_short jump短跳转RET_return 子程序返回3-1 3-1 指令格式第1页/共48页二二.机器语言指令格式机器语言指令格式操作码 操作数1 1 操作数22分为单字节、双字节和三字节指令。指令中操作码和操作数是指令主体,称为指令可执行部分,附录指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOV AMOV A,R0R0E8HE8HMOV R6MOV R6,#32H#32H7E 32H7E 32HMOV 40HMOV 40H,#64H#64H75 40 64H75 40 64H111010000111111000110010011101010100000001100100第2页/共48页三三.指令描述符号介绍指令描述符号介绍在介绍指令之前,先把描述指令的一些符号的意义作些介绍。Rn当前工作寄存器区中的8个寄存器R.0R7(n=07)。Ri当前工作寄存器区中的2个工作寄存器R.0、R1(i=0,1)。direct8位的内部数据存储器单元中的地址。#data包含在指令中的8位常数。#data16包含在指令中的16位常数。addr1616位目的地址。addr1111位目的地址。rel8位带符号的偏移字节,简称偏移量。DPTR数据指针,可用作16位地址寄存器。bit内部RAM或专用寄存器中的直接寻址位。A累加器。B专用寄存器,用于乘法和除法指令中。C进位标志或进位位,或布尔处理机中的累加器。间址寄存器或基址寄存器的前缀,如Ri,DPTR。/位操作数的前缀,表示对该位操作数取反,如/bit。单元中的内容。()由寻址的单元中的内容。箭头左边的内容被箭头右边的内容所代替。第3页/共48页3-2 3-2 指令寻址方式3-2-13-2-13-2-13-2-1 寻址方式和操作数类寻址方式和操作数类型型3-2-2 3-2-2 3-2-2 3-2-2 寻址方式寻址方式一.立即寻址方式指令中给出实际操作数据(立即数)。举例:举例:8 8位立即数:MOV AMOV A,#40H#40H ;A A40H40H 16 16位立即数:MOV DPTRMOV DPTR,#2100H#2100H;DPTRDPTR2100H2100H一、寻址方式一、寻址方式 是指指令中确定操作数的形式。是指指令中确定操作数的形式。二、操作数类型二、操作数类型位(b)b)位寻址区中的一位二进制数据字节(B)8B)8位二进制数据字(W)16W)16位双字节数据第4页/共48页二.直接寻址方式 指令中直接给出操作数地址的寻址方式,能直接寻址的存储空间为内部RAMRAM和特殊功能寄存器(SFRSFR)。例2 2:MOV MOV PSWPSW,#20H#20H;PSW PSW#20H#20H PSWPSW为直接寻址寄存器的符号地址。例1 1:MOV AMOV A,30H30H;A A(30H30H)思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?65H 31H 7FH30H 65HA 第5页/共48页三.寄存器寻址方式以通用寄存器的内容为操作数的寻址方式。例:MOV AMOV A,R0R0;A AR0R0设指令执行前 A=20HA=20H,R0=40HR0=40H,执行指令后,A=A=?,R0=R0=?四.寄存器间接寻址方式 以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。存放地址的寄存器称为间址寄存器或数据指针,包括R0R0,R1R1,DPTRDPTR,SPSP等。例:MOV AMOV A,R0R0;A A(R0)(R0)设指令执行前 A=20HA=20H,R0=40HR0=40H,地址为4040H H存储器单元内容如图。执行指令后,A=A=?,R0=,R0=?,(40H)=,(40H)=?41H 67H 40H 30H30H40H30H40H40H0100 0000A0010 0000R00100 0000R04040H H第6页/共48页五.变址寻址方式由基址寄存器PCPC或DPTRDPTR中内容加上偏移量之和形成操作数的地址的寻址方式。偏移量由累加器A A提供。例:MOVC AMOVC A,A+DPTRA+DPTR;A A(A+DPTR)(A+DPTR)设指令执行前 A=09HA=09H,DPTR=2000HDPTR=2000H,存储器单元内容如图所示。执行指令后,A=A=?DPTR=DPTR=?12H2000H 六.位寻址方式 对位地址中的内容作位操作的寻址方式。它其实是一种直接寻址方式。例:MOV MOV C C,40H40H;CyCy(位地址4040H)H)设指令执行前 Cy=1Cy=1,位地址4040H H存储器单元如上图,执行指令后,Cy=Cy=?02008H 89H2009H 12H28H 0110001029H 11010111位寻址区47H-40H位地址号4FH-48H第7页/共48页七、相对寻址 以当前程序计数器PCPC的内容为基础,加指令给出的一偏移量形成新的PCPC值的寻址方式。SJMPSJMP0606H H20002000H H20082008H HPCPC200020002 2PCPC+20082008 例:SJMP 06HSJMP 06H;PC PC PC+2+06HPC+2+06H 假设该指令在程序存储器20002000H H(即PC=2000HPC=2000H),则执行指令后,PC=PC=?程序的执行过程如右图所示。即:程序转移到20082008H H处执行。20082008H H第8页/共48页3-33-33-33-3MCS-51MCS-51指令系统 指令按功能可分为如下几类:数据传送、算术运算类、逻辑运算、程序转移、子程序调用及返回、位操作指令。3-3-13-3-1 数据传送指令实现寄存器、存储器之间的数据传送。一.内部传送指令:片内数据存储器数据传送。二.外部传送指令:片外数据存储器数据传送。三.交换指令:片内数据存储器数据传送。四.堆栈操作指令:片内数据存储器数据传送。五.查表指令:程序存储器数据传送。第9页/共48页一、内部传送指令:实现片内数据存储器中数据传送。指令格式:MOVMOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。指令机器码:E8E8EFEFE5E5 directdirectE6E6、E7E7 74 74 datadata F8F8FFFFA8A8AFAF direct direct 78787F7F data data MOV AMOV A,Rn Rn ;ARnARnMOV AMOV A,directdirect;A(direct)A(direct)MOV AMOV A,Ri Ri;A(Ri)A(Ri)MOV AMOV A,#data#data ;AdataAdataMOV Rn,AMOV Rn,A;RnARnAMOV Rn,directMOV Rn,direct;Rn(direct)Rn(direct)MOV Rn,#dataMOV Rn,#data;RndataRndata MOV dirMOV dir,A A;(dir)A(dir)AMOV dirMOV dir,RnRn;(dir)Rn(dir)RnMOV dir1,dir2MOV dir1,dir2;(dir1)(dir2)(dir1)(dir2)MOV dirMOV dir,#data#data;(dir)data(dir)dataMOV dir,RiMOV dir,Ri;(dir)(Ri)(dir)(Ri)MOV Ri,AMOV Ri,A;(Ri)A(Ri)AMOV Ri,dirMOV Ri,dir;(Ri)dir(Ri)dirMOV Ri,#dataMOV Ri,#data;(Ri)data(Ri)dataMOV DPTR,#data16MOV DPTR,#data16;DPTRdata16DPTRdata16指令机器码:F5 F5 dirdir88888F 8F dirdir85 85 dir2 dir1dir2 dir175 75 dir datadir data 868687 87 dirdirF6F6F7F7 dir dir A6A6A7A7 dir dir76767777 data data9090 data16 data16第10页/共48页例1 1:顺序执行下列指令序列,求每一步执行结果。MOV AMOV A,#30H#30HMOV 40HMOV 40H,A AMOV R0MOV R0,#20H#20HMOV R0MOV R0,40H40HMOV 30HMOV 30H,20H20H例2 2:用两种寻址方式实现,将片内RAM RAM 6060H H单元的数据传送给累加器A A。;A=30HA=30H;(40H)=30H(40H)=30H;R0=20HR0=20H;(20H)=30H(20H)=30H;(30H)=30H(30H)=30H解2 2:MOV R0MOV R0,#60H#60H MOV AMOV A,R0R0解1 1:MOV A,60HMOV A,60H第11页/共48页说明:4.4.只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1.一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1MOV R1,R2R2MOV R2MOV R2,R0R02.间址寄存器只能使用 R0R0、R1R1。非法指令:MOV AMOV A,R2R23.SFRSFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOV R0MOV R0,#80H#80HMOV AMOV A,R0R0第12页/共48页二、外部传送指令实现片外数据存储器和累加器A A之间的数据传送。指令格式:MOVXMOVX 目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.1.DPTRDPTR作1616位数据指针,寻址6464KBKB片外RAMRAM空间MOVX AMOVX A,DPTRDPTR;A(DPTR)A(DPTR)MOVX DPTRMOVX DPTR,A A;(DPTR)A(DPTR)A2.2.RiRi作8 8位数据指针,寻址256256B B片外RAMRAM空间MOVXMOVX A A,RiRi;A(P2Ri)A(P2Ri)MOVXMOVX RiRi,A A;(P2Ri)A(P2Ri)A指令机器码E2E2E3HE3HF2F2F3HF3HE0HE0HF0HF0H第13页/共48页例3 3:将片外数据存储器数据从20002000H H传送到21002100H H。MOV DPTRMOV DPTR,#2000H#2000HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#2100H#2100HMOVX DPTRMOVX DPTR,A A习 题:将片外RAM 0000HRAM 0000H单元的数据传送到片内RAMRAM地址为6060H H的单元。;DPTR=2000HDPTR=2000H;A=X A=X;DPTR=2100H DPTR=2100H;(2100H)=X(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVX AMOVX A,2000H 2000H MOVX 2100H MOVX 2100H,2000H2000H思考题:为什么对DPTRDPTR的数据传送使用内部传送指令?第14页/共48页三、交换指令 实现片内RAMRAM区的数据双向传送。1.1.字节交换指令XCH AXCH A,Rn Rn;A A Rn RnXCH AXCH A,RiRi;A A(Ri)(Ri)XCH AXCH A,directdirect;A A(direct)(direct)习题:将片内RAMRAM6060H H单元与6161H H单元的数据交换。例4 4:设A=29HA=29H,(2AH)=38H,(2AH)=38H,执行指令 XCH AXCH A,2AH2AH后,A=A=?(2AH)=(2AH)=?38H29HXCH 60HXCH 60H,61H 61H 对吗?指令机器码:C8C8CFHCFHC6C6C7H C7H C5C5 dir dir 第15页/共48页2.2.半字节交换指令XCHD AXCHD A,Ri Ri;A A0 03 3 (Ri)(Ri)0 03 3 SWAP SWAP A A ;A A4 47 7 A A0 03 3例5 5:将片内2 2AHAH和2 2BHBH单元中的ASCIIASCII码转换成压缩式BCDBCD码存入2020H H单元。A0000000000H00001000100000001000010108H80H85HMOV A,#00HMOV R0,#2AHMOV R1,#2BHXCHD A,R0SWAP AXCHD A,R1MOV 20H,A0000000000H0000000000H85HR1R0习题:交换片内RAM RAM 4040H H单元和 41 41H H单元的低半字节。指令机器码:D6D6D7HD7HC4 C4 第16页/共48页四、堆栈操作指令入栈指令:PUSH dirPUSH dir;SPSPSP+1SP+1,(SP)(SP)(dir)(dir)出栈指令:POP dirPOP dir;(dir)(dir)(SP)(SP),SPSPSP-1SP-1例:设 A=02A=02,B=56HB=56H,执行下列指令后,SP=SP=?,A=A=?,B=?B=?SPSP SP 02 SP 56H 02 56H 02HSP SP 56H 02 SP 56H 02 56H SP 02 02HA56HSBRSBR:MOV SP MOV SP,#30H#30H;设栈底 PUSH APUSH A PUSH B PUSH B MOV A MOV A,#00H#00H MOV MOV B B,#01H#01H POP POP B B POP A POP A机器码:C0 C0 dirdirD0D0 dir dir PCPCPCPCPCPCPCPCPCPCPCPCB00H01H56H02H第17页/共48页五、查表指令 实现从程序存储器读取数据到A A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。1 1DPTRDPTR为基址寄存器 MOVCMOVC A A,A+DPTR A+DPTR;A A(A+DPTR)(A+DPTR)查表范围为 64 64KB KB 程序存储器任意空间,称为远程查表指令。2 2PCPC为基址寄存器MOVCMOVC A A,A+PCA+PC;A A(A+PC)(A+PC)常数表只能在查表指令后256256B B范围内。第18页/共48页例:查表法求Y=XY=X2 2。设X(0X15)X(0X15)在片内RAMRAM的2020H H单元中,要求将查表求Y Y,存入片内RAMRAM的2121H H单元。解法1 1:ORG 1000HORG 1000HSQU:SQU:MOV DPTRMOV DPTR,#TAB#TAB;确定表首地址(基地址)MOV AMOV A,20H20H;取X X(偏移量MOVC AMOVC A,A+DPTRA+DPTR;查表求Y=XY=X2 2MOV 21HMOV 21H,A A;保存Y YRETRET;子程序结束;其它程序段ORG 2000HORG 2000H;常数表格首地址TAB:TAB:DB 00DB 00,0101,0404,0909,225225;平方表第19页/共48页解法2 2:指令地址 源程序 ORG 1000HORG 1000H ;程序起始地址 1000 1000H H SQU:SQU:MOV A MOV A,20H20H;取X X 1002H 1002H ADD A ADD A,#03H#03H ;修正偏移量 1004 1004H H MOVC AMOVC A,A+PCA+PC ;查表求Y=XY=X2 2 1005H 1005H MOV 21H MOV 21H,A A;存结果 1007 1007H H RET RET ;子程序结束 1008 1008H H TAB:TAB:DB 00 DB 00,0101,04 04;平方表 100 100BHBH DB DB 0909,225 225 思考题:当00X255X255时,如何用查表法编程求Y=XY=X2 2。第20页/共48页习题:找出指令错误并改正:1 1MOV AMOV A,#1000H#1000H;A1000HA1000H2 2MOVX AMOVX A,1000H1000H;A(1000H)A(1000H)片外RAM3 3MOVC AMOVC A,1000H1000H;A(1000H)A(1000H)片外ROM4 4MOVX 60HMOVX 60H,A A;片外RAM(60H)ARAM(60H)A5 5MOV R0MOV R0,60H60H;片内RAMRAM:(61H)(60H)(61H)(60H)MOV 61H MOV 61H,R0R06.6.XCH R1 XCH R1,R2R2;R1R2R1R27.7.MOVX DPTR MOVX DPTR,#2000H#2000H;DPTR2000HDPTR2000H8.8.MOVX 60H MOVX 60H,DPTRDPTR;片内RAMRAM片外RAMRAM第21页/共48页3-3-23-3-23-3-23-3-2 算术运算指令算术运算指令该类指令共2424条。主要是进行无符号数的四则运算。与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPUCPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。MCS-51 MCS-51 的程序状态字寄存器 PSW PSW 为标志寄存器。其格式如下:其中标志位(自动设置状态)为CYCY、ACAC、OVOV和P P。用户选择位(编程设置状态)有RS0RS0、RS1RS1和F0F0。第22页/共48页一加、减指令1.加法指令 0011 10110011 1011 +0011 10110011 1011 0111 01100111 01107676H H 0 0 0 0 1 1 1 11 1)不带进位加法:ADDADD A A,源操作数(影响CyCy、OVOV、ACAC、P P)ADD A,Rn ;A A+Rn ADD A,direct ;A A+(direct)ADD A,Ri ;A A+(Ri)ADD A,#data ;A A+#data 例1 1:A=3BHA=3BH,PSW=0PSW=0,执行指令 ADD AADD A,#3BH#3BH求:A=A=,Cy=Cy=,OV=OV=,AC=AC=,P=P=,PSW=PSW=?01000001=4101000001=41H H解:OV=CyOV=Cy7 7 CyCy6 6=0=0,无进位Cy=0Cy=0,产生辅助进位AC=1AC=1,A A中数据的个数为奇数,P=1P=1。第23页/共48页 1001 10101001 1010 1110 00111110 0011 +0 0 1 1 0111 11010111 11012 2)带进位加法:ADDC AADDC A,源操作数(影响CyCy、OVOV、ACAC、P P)ADDC A,Rn ;A A+Rn+C ADDC A,direct ;A A+(direct)+C ADDC A,Ri ;A A+(Ri)+C ADDC A,#data ;A A+#data+C 其中:C来自PSW状态寄存器中的进位位C。7 7DHDH 1 1 1 1 0 0 0 0例2 2:A=9AHA=9AH,R2=E3HR2=E3H,PSW=0PSW=0,执行指令ADDC AADDC A,R2R2 后求:A=A=,Cy=Cy=,OV=OV=,AC=AC=,P=P=,PSW=PSW=?10000100=8410000100=84H H第24页/共48页带进位加法指令带进位加法指令ADDCADDCADDCADDC用于多字节运算用于多字节运算例:设双字节数 X X 存在片内RAMRAM 41 41H H、40H40H单元,Y Y存在4242H H、43H43H单元,编程求 Z=X+YZ=X+Y,并存入片内RAMRAM单元4444H H、45H45H、46H46H。ADDSADDS:MOV AMOV A,40H40HADD AADD A,42H42HMOV 44HMOV 44H,A AMOV AMOV A,41H41HADDC AADDC A,43H43HMOV 45HMOV 45H,A AMOV AMOV A,#0#0ADDC AADDC A,#0#0MOV 46HMOV 46H,A ARETRET;取被加数低字节;加上加数低字节;保存和的低字节;取被加数高字节;加上加数高字节;保存和的高字节;求高字节进位;子程序结束;低字节相加;高字节相加;计算高字节进位;子程序结束第25页/共48页2带借位减法指令 SUBB ASUBB A,源操作数(影响CyCy、OVOV、ACAC、P P)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 C0000 0 0 0 0 0 0 0 0习题:编程求双字节减法。设X X、Y Y存在片内 RAM 60HRAM 60H起始单元,计算 Z=X-Y Z=X-Y。例:A=5AHA=5AH,R2=5AHR2=5AH,Cy=0Cy=0,执行下列指令SUBB ASUBB A,R2R2求:A=A=,Cy=Cy=,OV=OV=,P=P=,AC=AC=?第26页/共48页3.增量、减量指令INCINC 单操作数;加1 1指令 INC A ;A A+1 INC Rn ;Rn Rn+1 INC direct ;(direct)(direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;DPTR DPTR+1DECDEC 单操作数 ;减1 1指令 DEC A ;A A-1 DEC Rn ;Rn Rn-1 DEC direct ;(direct)(direct)-1 DEC Ri ;(Ri)(Ri)-1注意:没有指令 DEC DPTR DEC DPTR 可用指令 DEC DPL DEC DPL 代替第27页/共48页二、乘除指令MUL ABMUL AB;BAABBAAB,Cy0Cy0,;当 积 高 字 节 B=0B=0,OV0OV0;B0B0,则OV1OV1例:A=60H(96),B=C0H(192)A=60H(96),B=C0H(192),执行指令 MUL AB MUL AB 后,求:A=A=,B=B=,Cy=Cy=,OV=OV=,P=P=?解:96 192=18432(480096 192=18432(4800H)H)0000H H 48H48H 0 0 1 1 0 01212H H 0CH0CH 0 0 0 0 0 0例:A=F6H(156)A=F6H(156),B=0DH(13)B=0DH(13),执行指令 DIV AB DIV AB 后求:A=A=,B=B=,Cy=Cy=,OV=OV=,P=P=?解:156 13=18(12156 13=18(12H)H),余数=12(12(0 0CH)CH)。思考题:如何实现多字节数据的乘除运算。DIV AB DIV AB;ABAB,AA商,BB余数,Cy0Cy0,;当除数B=0B=0,OV1OV1;B0B0,则OV0OV0第28页/共48页十进制加法指令:ADD AADD A,源操作数DA ADA A带进位十进制加法指令:ADDC AADDC A,源操作数DA A DA A 作业:BCDBCD码加法编程。设X X、Y Y为4 4位压缩BCDBCD码,求 Z=X+YZ=X+Y。三、BCDBCD调整指令:DADAA A;对 A A 中加法结果进行调整,且必须跟 ;在ADDADD或ADDCADDC指令之后。第29页/共48页 1)“与”操作指令 ANL A,Rn ;A A Rn ANL A,direct ;A A (direct)ANL A,Ri ;A A (Ri)ANL A,#data ;A A#data2)“或”操作指令 ORL A,Rn ;A A Rn ORL A,direct ;A A (direct)ORL A,Ri ;A A (Ri)ORL A,#data ;A A#data ORL direct,A ;(direct)(direct)A ORL direct,#data;(direct)(direct)#data3-3-33-3-33-3-33-3-3 逻辑运算与循环类指令逻辑运算与循环类指令 逻辑运算指令共有24条。主要用于对8位数进行逻辑“与”、“或”、“异或”、取反、清零以及循环移位。第30页/共48页5)8 8位循环指令 RL A ;A A循环左移一位 RR A ;A A循环右移一位 3)“异或异或”操作指令操作指令 XRL A,Rn ;A A Rn XRL A,direct ;A A (direct)XRL A,Ri ;A A (Ri)XRL A,#data ;A A#data XRL direct,A ;(direct)(direct)A XRL direct,#data;(direct)(direct)#data 4)求反与清除指令求反与清除指令 CPL A ;A A CLR A ;A 0第31页/共48页6)9 9位循环指令RLC ARLC A;带CyCy循环左移一位RRC ARRC A;带CyCy循环右移一位例2 2:A=23HA=23H,执行指令 CPL A CPL A 后,A=A=?解:23 23H H取反为DCHDCH。例1 1:A=23HA=23H,(20H20H)=40H=40H,执行指令 ANL AANL A,20H 20H 后 A=A=?解:2323H H 40H=00H40H=00H例3 3:A=20HA=20H,执行指令 RL A RL A 后,A=A=?解:A A中的各位向左移1 1位后,A=40HA=40H。0000H HDCHDCH4040H H第32页/共48页例4 4:设 A=11000101 A=11000101,Cy=0Cy=0,分别执行下列单条指令:CPL ACPL A 求:A=A=,Cy=Cy=RL ARL ARLC ARLC A 10001010 10001010 1 1例5 5:编程将寄存器 R6R5 R6R5 中的双字节数X X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0Cy=0,设 R6=55H R6=55H,R5=AAHR5=AAH;R6=01010101R6=01010101,R5=10101010R5=10101010,Cy=0Cy=0;R6=01010101R6=01010101,R5=01010100R5=01010100,Cy=1Cy=1;R6=10101011R6=10101011,R5=01010100R5=01010100,Cy=0Cy=0思考题:如何将寄存器R2R2中的数据奇数位取反,偶数位不变?第33页/共48页 3-3-4 3-3-4 转移指令 转移指令通过改写PCPC的当前值,从而改变CPUCPU执行程序的顺序,使程序发生跳转。按转移条件分类:1)1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。2)2)条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。按转移方式分类:1 1)绝对转移:指令给出转移目的的绝对地址 nnnn,执行指令后,PCPCnnnn。2)相对转移:指令给出转移目的与转移指令的相对偏移量e e,执行指令后,PCPCPCPC+e e。第34页/共48页一.无条件转移指令 1.1.长转移指令:LJMPLJMP addr16 addr16 ;PC PC addr16 addr16 指令机器码:02 02 addr16addr16指令转移范围:6464KBKB 2.2.绝对转移指令:AJMPAJMP addr11addr11;PCPCPC+2PC+2;PCPC10100 0pnpn10100 0 ;PCPC15151111不变 指令机器码:a a10108 8 0000100001,a a7 70 0 指令转移范围:2 2KBKB 转移时要求转移前后保持 PCPC15151111不变。第35页/共48页相对偏移量 rel rel 的计算式:r rel=el=目的指令地址-(-(转移指令地址+指令字节数)3.3.短转移指令:SJMPSJMP relrel ;PCPCPC+2+relPC+2+rel指令机器码:8080H H,rel rel 相对偏移量 relrel为8 8位补码。指令转移范围:前128128后127127字节 编程时,用标号代替转移目的地址,转移指令的操作数交给汇编程序计算。LJMP NEXT LJMP NEXT AJMP NEXTAJMP NEXT SJMP SJMP NEXTNEXT NEXT NEXT:第36页/共48页例:计算转移指令的相对偏移量 rel rel,并判断是否超出转移范围。相对偏移量=2150=2150H-(2130H+2)=001EHH-(2130H+2)=001EH,只取低8 8位:e=e=1EH1EH 指令机器码:801801EHEH 习题:计算程序中转移指令的相对偏移量 e e,并判断是否超出转移范围。地址 源程序21302130H H LOOPLOOP:2121B0HB0H SJMP LOOP SJMP LOOP指令地址源程序21302130H H SJMP NEXT SJMP NEXT 2150 2150H HNEXTNEXT:MOV AMOV A,R2R2第37页/共48页 4间接转移指令(多分支转移指令)JMP A+DPTR.JMP A+DPTR.;PCPCA+DPTRA+DPTR指令机器码 7373H H,指令转移范围6464KBKB。KEY:KEY:MOV DPTR,#KTAB MOV DPTR,#KTAB MOV A,40H MOV A,40H ADD A,A ADD A,A JMP A+DPTRJMP A+DPTRKTAB:KTAB:AJMP FUNC0 AJMP FUNC0 AJMP FUNC1AJMP FUNC1 FUNC0:FUNC0:FUNC1:FUNC1:应用:处理功能键。要求不同功能键执行不同程序段。设每个功能键对应一个键值 X(0XFH)X(0XFH)。设X X已存入片内RAMRAM的4040H H单元中。若X=0X=0,则执行程序段FUNC0FUNC0若X=1X=1,则执行程序段FUNC1FUNC1。第38页/共48页 二条件转移指令1.1.判零转移指令JZ relJZ rel;若A=00HA=00H,PCPC+2+rel(PCPC+2+rel(转移),;若A00HA00H,PCPC不变(不转移)条件转移指令形成程序的分支,赋予计算机判断决策能力。转移条件:1)1)标志位的状态 2)2)位地址中的状态 JNZ rel JNZ rel ;PCPC+2+rel(PCPC+2+rel(转移);若A=00HA=00H,PCPC不变(不转移)2.2.判CyCy转移指令JC rel JC rel ;Cy=1Cy=1则转移(PCPC+2+relPCPC+2+rel),;Cy=0Cy=0不转移 JNC rel JNC rel ;Cy=0Cy=0则转移(PCPC+2+relPCPC+2+rel),;Cy=1Cy=1不转移第39页/共48页3.3.判位转移指令JB bitJB bit,rel rel;(b)=1(b)=1转移(PCPC+3+relPCPC+3+rel),;否则不转移 JNB bitJNB bit,relrel ;(b)=0(b)=0转移(PCPC+3+relPCPC+3+rel),;否则不转移 JBC bitJBC bit,relrel ;(b)=1(b)=1转移(PCPC+2+relPCPC+2+rel),;且(bit)bit)0 0,否则不转移4.4.比较不相等转移指令:CJNECJNE A A,directdirect,relrel;若A(direct ),则转移 ;(PC PC+3+rel),否则程序顺序执行 CJNE ACJNE A,#data#data,rel rel ;若A#data,则转移 ;(PC PC+3+rel),否则程序顺序执行 CJNE RiCJNE Ri,#data#data,relrel第40页/共48页6 6循环转移指令:DJNZ RnDJNZ Rn,relrel;Rn Rn-1,若Rn 0,则转移 ;PC PC+2+rel;否则,程序顺序执行。DJNZ directDJNZ direct,rel rel;direct(direct)-1,;若(direct)0,则转移(PC PC+3+rel);否则,程序顺序执行。例:用于循环结构程序。设要求程序循环执行100100次MOV R2MOV R2,#64H#64H;设循环计数器初值LOOPLOOP:;多次循环程序段 DJNZ R2DJNZ R2,LOOPLOOP;循环控制 ;循环结束 说明:CJNE指令对标志C有影响。若第一操作数大于或等于第二操作数,则C=0;否则C=1。利用对C的判断,可使这几条指令实现两操作数相等与否的判断,还可完成两数大小的比较。第41页/共48页3-3-5 3-3-5 子程序调用和返回指令子程序调用和返回指令也使程序发生转移。子程序调用过程(如右图):一长调用指令LCALL addr16LCALL addr16 ;PCPCPC+3PC+3,;SPSPSP+1SP+1,(SP)(SP)PCPCL L,SPSPSP+1SP+1,(SP)(SP)PCPCH H;PCPCaddr16addr16addr16addr16为子程序起始地址,编程时可用标号代替。指令机器码:12 12 addr16addr16 指令调用范围:6464KBKB 与转移指令不同,转移时,先用堆栈保存当前地址。第42页/共48页二绝对调用指令ACALL addr11ACALL addr11 ;PCPCPC+2PC+2 ;SPSPSP+1SP+1,(SP)(SP)PCPCL L,SPSPSP+1SP+1,(SP)(SP)PCPCH H ;PCPC10100 0addr11,PCaddr11,PC15151111不变addr11addr11为子程序首地址指令机器码:a a10108 81000110001,a a7 70 0 指令调用范围 2 2KBKB。三子程序返回指令RETRET;PCPCH H(SP)(SP),SPSPSP-1SP-1,;PCPCL L(SP)(SP),SPSPSP-1SP-1RETRET指令机器码为2222H HRETRET指令从堆栈弹出保存的PCPC地址,实现子程序返回。RETIRETI机器码为:3232H HRETIRETI指令从堆栈弹出保存的PCPC地址,实现中断子程序返回。RETIRETI;PCPCH H(SP)(SP),SPSPSP-1SP-1,;P

    注意事项

    本文(单片机3学习教程.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开