欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第三章单片机.ppt

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

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

    第三章单片机.ppt

    3.1 概述 3.2 80C51单片机寻址方式 3.3 80C51指令系统 3.4 本章小节 3.5 思考与练习题,第三章 80C51指令系统,3.1 概述,3.1 概述 一、指令系统与编程 1、指令 计算机进行某种操作的代码形式。 2、指令系统 一台计算机所能识别的全部指令。 3、程序 使计算机完成某种任务的一系列指令。,3.1 概述,二、 汇编语言与机器语言 1、机器语言 计算机能直接识别的由0和1组成的二进制编码指令,这种编码称为机器码。 特点: 记忆、书写、编程很不方便,不易理解,容易出错。 2、汇编语言 用助记符(操作码)、符号地址(操作数)、标号等符号表示指令的功能和特征。 特点: 便于记忆、理解、分类和编程。,3.1 概述,三、汇编语言格式 1、汇编语句 由4部分构成。 标号: 操作码 操作数 ;注释 2、各部分作用 “标号” 该指令的符号地址,根据需要设定。 标号是以字母开始,由18个字母或数字串组成,以冒号结尾; 不能用指令助记符、伪指令或寄存器名来做标号名; 标号是任选的,只在需要时才设标号; 一旦使用了某标号定义一地址单元,在程序的其他地方就不能随意修改这个定义,也不能重复定义。,3.1 概述,“操作码” 指令或伪指令的助记符,用来表示指令的性质。对于一条汇编语言指令,这一字段是必不可少的。 “操作数” 可以为工作寄存器名、SFR名、标号名、常数、表达式等,用以表示操作数地址; 根据指令功能的不同,操作数可以有一个、两个、三个或者没有,操作数之间用“,”分开; 分为目的操作数和源操作数两种; 为使操作数区段出现的字符和16进制数区别开来,在以字母开头的16进制数前加0,如将FFH写成0FFH(H表示此数为16进制数,二进制用B表示,十进制用D表示或省略)。,3.1 概述,“注释” 对指令的解释,可有可无。良好的注释是汇编语言程序编写中的重要组成部分。,3.1 概述,四、指令代码格式 1、指令代码(即机器语言) 指令的二进制数表示方法,是指令在存储器存储的形式。 2、根据指令代码的长度,80C51的指令可分为: 单字节指令 由8位二进制编码表示。有两种形式: (1) 8位全表示操作码。 例如,空操作指令NOP,机器码为:00000000,第三章 80C51单片机指令系统- 3.1 概述,(2) 8位编码中包含操作码和寄存器编码。 例如 MOV A,Rn ; 功能:把Rn中的内容送到A中,机器码为: 1 1 1 0 1 n (E8HEFH) 又如 MOV A,Ri ; 功能:把间址寄存器Ri中的内容为地址的单元中内容送到A中,其机器码为: 1 1 1 0 0 1 1 i (E6HE7H),3.1 概述,双字节指令 编码由两个字节组成,存放在存储器中占两个存储单元。 例如 MOV A,#data; 功能:把立即数#data送到A中,机器码为: 第一字节 0 1 1 1 0 1 0 0 操作码 (74H) 第二字节 #data 操作数(立即数) 又如 JZ rel ;功能:先调整程序指针,即PC(PC)+2,再进行判断:若(A)=0,则跳转到PC=(PC)+rel)的程序地址处。机器码为: 第一字节 0 1 1 0 0 0 0 0 操作码(60H) 第二字节 rel 操作数(相对偏移量),3.1 概述,三字节指令 三字节指令的编码由三个字节组成,第一字节为操作码,第二、三字节为操作数,存放在存储器中占三个存储单元。 例如 MOV direct,#data 功能:把立即数#data送到直接地址direct中,机器码为: 第一字节 0 1 1 1 0 1 0 1 操作码(75H) 第二字节 direct 操作数(直接地址) 第三字节 #data 操作数(立即数),3.1 概述,结论: 无论是哪种指令,其第一个字节均为操作码,它确定了指令的功能;其他的字节为操作数,指出了被操作的对象,指明了参与操作的数据或数据所存放的地址。 学会初步判断指令代码长度的方法,对于正确应用指令系统是非常有益的。,3.1 概述,3、指令代码长度的初步确定 (1)操作码是一定要占一个字节; (2)80C51在进行指令编码时,掌握的原则是尽量简单、短、具有规律性。因此,通常将作操作数的固定不变的寄存器隐含到操作码中(如A,B,Rn,DPTR等); (3)通常将作操作数的间址寄存器Ri,DPTR隐含到操作码中; (4)通常8位立即数#data,直接地址direct,相对偏移量rel单独占一个字节。 通过指令系统的学习,逐步了解、掌握确定指令代码长度的方法。,3.1 概述,五、指令中常用符号 (1) A:累加器ACC; (2) B:寄存器B; (3) C:进(借)位标志位,在位操作指令中作为位累加器使用; (4) Rn:当前选中的工作寄存器组的8个寄存器R0R7; (5) Ri:当前选中的工作寄存器组中作为寄存器间接寻址的2个寄存器R0、R1;,3.1 概述,(6) direct:表示可以直接寻址的内部RAM地址或SFR地址; (7) #data:包含在指令中的8位立即数; (8) #data16:包含在指令中的16位立即数; (9) addr16:16位目的地址; (10) addr11:11位目的地址; (11) rel:补码形式的8位地址偏移量。用于相对转移指令中,偏移量以下一条指令第一字节地址为基址,偏移量范围为-128+127; (12) bit:内部RAM或SFR的直接寻址位地址,3.1 概述,(13) :间址寄存器或基址寄存器前缀; (14) /:位操作指令中,表示对该位先求反再参与操作,但不影响原值; (15) (X):表示X地址中的内容; (16) (X):表示以X地址单元中内容为地址的单元中数; (17) XY:把Y单元中内容赋给X地址单元中; (18) (X)Y:把Y单元中内容赋给以X地址中内容为地址的单元中。,3.280C51单片机寻址方式,3.2 80C51单片机寻址方式 寻址方式:根据指令中给出的地址寻找真实操作数地址的方式。 80C51单片机共有7种寻址方式。 一、立即寻址 指令操作码后的一个字节是实际操作数本身。该操作数直接参与操作,又称立即数,用符号“”表示 例3.1 MOV A,#3AH ;A3AH 机器码:74H 3AH 一条双字节指令,功能:将立即数3AH送入A中。,3.280C51单片机寻址方式,设把指令存放在存储器的2000H、2001H两单元中。,3.280C51单片机寻址方式,例3.2 MOV DPTR,26ABH ;DPH26H,DPL0ABH 指令代码为90H、26H、ABH,存放在ROM中占用3个存储单元。 设把该指令存放在存储区的2000H、2001H、2002H单元。执行该指令后,立即数26ABH被送到DPTR中。,3.280C51单片机寻址方式,二、直接寻址 指令操作码后面的一个字节就是实际操作数地址。该地址指出了参与操作的数据所在的字节地址。 可用于直接寻址的空间有两种: (1)内部RAM低128字节单元(00H7FH)。 例3.3 MOV A,70H ;A(70H),指令的代码为E5H、70H,双字节指令。,第三章 80C51单片机指令系统- 3.280C51单片机寻址方式,设把该指令存放在1000H、1001H单元,且70H单元中存放的数值为10H。执行该指令后,数值10H就被送到A中。 (2)SFR,只能用于直接寻址。 例3.4 MOV IE,85H ;中断允许寄存器IE85H,3.280C51单片机寻址方式,三、寄存器寻址 指令中地址码给出的是某一通用寄存器编号,寄存器的内容为操作数。 可用于寄存器寻址的空间是:R0R7,ACC,Cy(位),DPTR,B。 对于A、B、DPTR和C,其寻址时具体的寄存器已隐含在其操作码中;而对选定的8个工作寄存器R0R7,则用操作码的低3位来指明所用的寄存器,用PSW中RS1、RS0来选择寄存器组。 例3.5 MOV A,R2 ;A(R2) 指令代码的二进制形式为11101010,十六进制为EAH。这里二进制数的低3位为010,正好为2,表示操作数为R2。,3.280C51单片机寻址方式,设这条指令存放在2020H单元,且PSW中RS1、RS0分别为1和0,则这里的R2为属于第二组工作寄存器,它的地址为12H。已知12H中存放的数据为4AH,则执行该指令后,4AH就被送到A中。,3.280C51单片机寻址方式,四、寄存器间接寻址 指令中给出的寄存器的内容为操作数的地址。 可间接寻址的寄存器有:R0、R1和DPTR。 使用时前面加符号表示间接寻址。可用R0或R1间接寻址片内RAM低128字节或片外RAM的256个字节范围,此类指令用操作码的最低位指明R0或R1;也可用DPTR间接寻址64K字节外部RAM。 例3.6 MOV A,R0 ;A(R0) 指令代码的二进制形式为11100110。注意,这里的最低位为0,表示现用寄存器为R0。该指令代码的十六进制形式为E6H。,3.280C51单片机寻址方式,设此指令存放在2030H单元,工作寄存器为第0组,在R0中存放的数值为50H,50H为片内RAM的一个单元,50H单元中存放的数值为ACH。执行该指令后,ACH送入A中。,3.280C51单片机寻址方式,例3.7 MOVX A,R1 指令代码的二进制形式为11100011。注意,这里的最低位为1,表示现用寄存器为R1。该指令代码的十六进制形式为E3H。 设此指令存放在2030H单元,工作寄存器为第0组,在R1中存放的数值为AFH,片外数据存储器AFH单元中的值为30H。执行该指令后,30H送入A中。 在执行PUSH和POP指令时,采用SP作寄存器间接寻址。,3.280C51单片机寻址方式,五、变址寻址(基址寄存器+变址寄存器间接寻址) 变址寻址时,指定的基址寄存器的内容与变址寄存器的内容(偏移量)相加,所得的结果作为操作数的地址。 例3.8 MOVC A,A+DPTR ;A(A)+(DPTR),源操作数中DPTR的内容为基地址,A中的内容为偏移量。 可作为基地址的寄存器有DPTR和PC,偏移量只能放在A中,偏移量为无符号数。 无论用DPTR或PC作为基址指针,变址寻址方式只适用于外部ROM,通常用于读取数据表。 该指令的代码为93H,是单字节指令。,3.280C51单片机寻址方式,设此指令存放在2040H单元,A中原存放值为E0H,DPTR中值为2000H,则A+DPTR形成的地址为20E0H。20E0H单元中内容为47H,则执行该指令后,A中原来的E0H被47H代替。,3.280C51单片机寻址方式,六、相对寻址 相对寻址时,由PC提供的基地址与指令中提供的偏移量rel相加,得到操作数地址。这时指出的地址是操作数与现行指令的相对位置。 例3.9 JC rel ;若Cy=1,则 PC(PC)+2+rel,否则 PC(PC)+2 执行这条指令时,若Cy=1,则程序跳转到当前PC值加2再加rel的方向地址处,其中2为该指令的字节长度,rel为8位带符号数,其表示的范围为-128+127。,3.280C51单片机寻址方式,该指令中设rel=03H,则指令的代码为40H、03H,是双字节指令。此指令表示若进位C=0,则程序顺序执行,即不跳转,(PC)=(PC)+2;若进位C=1,则以PC中的当前内容为基地址,加上偏移量03H后所得到的结果为该转移指令的目的地址。 现设此指令存放在1000H和1001H单元,且目前C=1,则取指令后,PC当前内容为1002H。对C进行判断后,把PC当前内容与偏移量03H相加,得到转移目的地址1005H。所以执行完此指令后,PC中的值为1005H,程序将从1005H开始执行。,3.280C51单片机寻址方式,80C51中的相对转移指令有二字节或三字节两种,它只适用于ROM空间。,3.280C51单片机寻址方式,七、位寻址 位寻址是对片内RAM的位寻址区和某些可位寻址(字节地址能被8整除)的SFR进行位操作时的寻址方式。位寻址与直接寻址中字节地址形式完全一样,主要由操作码来区分,使用时应注意。 例3.10 CLR 92H ;92H是SFR P1的D2这一位,若指令执行前P1=0FFH,则执行该指令后,P1=0FBH。 例如 MOV C,06H ;功能:将直接位地址06H中的内容送入位累加器C中。,3.280C51单片机寻址方式,3.280C51单片机寻址方式,例题1 指出下列指令的寻址方式 MOV A,R1 ;(A)(R1) 寄存器寻址 ADD A,#05H ; (A)(A)+立即数05H 立即寻址 MOV A,R1 ; (A)(R1)寄存器间接寻址 MOV 30H,4AH ;(30H)(4AH) 直接寻址 MOVC A,A+DPTR ;(A)(A)+(DPTR) 变址寻址 SJMP LP ;(PC)(PC)+2+偏移量 相对寻址 MOV 65H, C ;(65H)(Cy) 位寻址,3.380C51指令系统,3.3 80C51指令系统,3.380C51指令系统,3.3 80C51指令系统 一、数据传送指令(29条) 指令系统中最基本、最常用的一类指令,主要用于数据的传送、保存以及交换等场合。 1、内部RAM间的数据传送 80C51内部传送指令的指令助记符为MOV。按源操作数的寻址方式可分为4组:,3.380C51指令系统,1、内部RAM间的数据传送,3.380C51指令系统,(1)立即寻址 MOV A,#data ;Adata MOV Rn,#data ;Rndata MOV Ri,#data ;(Ri)data MOV direct,#data ;directdata MOV DPTR,#data16 ;DPTRdata16 例3.11 MOV A,#30H ;A30H MOV R1,#20H ;R120H MOV R1,#40H ;(20H)40H,3.380C51指令系统,(2)直接寻址 MOV A,direct ;A(direct) MOV direct,A ;direct(A) MOV Rn,direct ;Rn(direct) MOV Ri,direct ;(Ri)(direct) MOV direct2,direct1 ;direct2(direct1) 这组指令将内部RAM直接地址中的内容传送到Rn、A及直接地址中,这里的直接地址既可以指内部RAM低128字节,也可以指SFR区的地址。最后一条指令功能灵活,可使数据直接在内部RAM间传送,无需在A中中转。 例3.12 MOV P2,P1 ;P2(P1),3.380C51指令系统,(3)间接寻址 MOV A,Ri ;A(Ri) MOV Ri,A ;(Ri)(A) MOV direct,Ri ;direct(Ri) 例3.13 MOV 20H,#30H MOV R1,#20H MOV A,R1 ;(A)=30H,3.380C51指令系统,(4)寄存器寻址 MOV A,Rn ;A(Rn) MOV Rn,A ;Rn(A) MOV direct,Rn ;direct(Rn) 这组指令允许通用寄存器Rn与A或直接地址单元间的数据传送,但不允许寄存器间互相传送,寄存器间的传送要经A中转。 例如,MOV R1,R2这条指令是非法的。,3.380C51指令系统,2、涉及外部ROM和RAM的数据传送指令 80C51对外部ROM传送操作的指令助记符为MOVC,对外部RAM传送操作的指令助记符为MOVX。 (1)对外部ROM的传送操作 MOVC A,A+DPTR ;A(A)+(DPTR) MOVC A,A+PC ;PC(PC)+1,A(A)+(PC) 两条指令都是单字节指令,均为变址寻址方式,A中的偏移量为无符号数。 第一条指令以DPTR为基址寄存器,功能是将A的内容与DPTR的内容相加后形成一个16位地址,把该地址指出的ROM单元的内容送给A。,3.380C51指令系统,第二条指令以PC作为基址寄存器,首先将PC值加1指向下一条指令地址,然后将A的内容与PC的内容相加形成16位地址,把该地址指出的ROM单元的内容送给A。 这两条指令常用于查表。采用PC作为基址寄存器时,常数表与MOVC指令离得较近,称为近程查表;而采用DPTR作基址寄存器时,表首地址可在64K范围任意处,故称远程查表。 例3.14 (DPTR)=8100H,(A)=40H,执行指令 MOVC A,A+DPTR ,结果为ROM中8140H单元的内容送给A。 例3.15 (A)=30H,执行指令 1000H:MOVC A,A+PC 结果为ROM中1031H单元的内容送给A。,3.380C51指令系统,(2)对外部RAM的传送操作 MOVX A,Ri ;A(Ri) MOVX Ri,A ;(Ri)(A) MOVX A,DPTR ;A(DPTR) MOVX DPTR,A ;(DPTR)(A) 这组指令的功能:A与片外RAM间的相互传送。 前两条指令用R0或R1作低8位地址指针,由P0口送出,寻址范围为256B,此时P2口仍可作通用I/O口。 后两条指令以DPTR为片外RAM 16位地址指针,寻址范围为64KB。当片外RAM少于(或等于)256个字节时,上述指令均可使用;当片外RAM大于256个字节时,宜选用后两条指令。,3.380C51指令系统,由于80C51指令系统中没有专门的输入/输出指令,且片外扩展的I/O口与片外RAM是统一编址的,故上述4条指令也可以作为输入输出指令。 例3.16 设片外RAM:(2079H)=80H,执行下列指令: MOV DPTR,#2079H MOVX A,DPTR 结果为:(A)=80H。,3.380C51指令系统,80C51的堆栈区必须设在内部RAM中。堆栈是向上生长的,堆栈指针始终指向堆顶,且按“先进后出”的原则进行操作,即入栈时SP的内容先加1,然后数据推入;出栈时先弹出数据,然后SP的内容减1。 进栈指令:PUSH direct ;SP(SP)+1,(SP)(direct) 出栈指令:POP direct ;direct(SP),SP(SP)-1,3.380C51指令系统,例3.17 编制根据A中的内容(09)查其平方表的程序。 COUNT:PUSH DPH ;保护DPTR内容 PUSH DPL MOV DPTR ,#TABLE ;赋表首址 MOVC A,A+DPTR ;查表并传送给A POP DPL ;恢复DPTR原值 POP DPH RET ;返回主程序 TABLE:DB 00 DB 01 DB 64 DB 81,3.380C51指令系统,4、数据交换指令 XCH A,Rn ;(A) (Rn) XCH A,direct ;(A) (direct) XCH A,Ri ;(A) (Ri) XCHD A,Ri ;(A)30 (Ri)30, 将A内容的低4位与Ri间址单元内容的低4位交换,各自高4位内容保持不变。 SWAP A ;(A)30 (A)74,将A中内容的低4位与高4位交换。 前三条为字节交换指令,A的内容与源操作数所指定的数据相互交换。 后两条为半字节交换指令。,3.380C51指令系统,例3.18 分析下列程序执行情况。 MOV A,#20H ;(A)=20H MOV 30H,#8FH ;(30H)=8FH MOV R1,#30H ;(R1)=30H XCH A,R1 ;(A)=8FH,(R1)=20H XCHD A,R1 ;(A)30 (R1)30 结果为:(A)=80H,(R1)=30H,(30H)=2FH。 例3.19 (A)=0ABH,执行指令 SWAP A 结果为:(A)=0BAH。,3.380C51指令系统,二、算术运算指令(24条) 主要完成加、减、乘、除四则运算,以及加1 、减1、BCD码的运算和调整等。除加1、减1运算外,这类指令大多数要影响PSW。 分为7组: (1)加法指令 ADD A,Rn ;A(A)+(Rn) ADD A,direct ;A(A)+(direct) ADD A,Ri ;A(A)+(Ri) ADD A,#data ;A(A)+data 以上指令都以A为目的操作数地址,将A中内容与源操作数所指出的数据相加,结果送入A中。,3.380C51指令系统,例3.20 (A)=85H,(R0)=20H,(20H)=0AFH,执行指令 ADD A,R0 运算后:(A)=34H,CY=1,AC=1,OV=1,P=1。 上例中,若把85H和0AFH作无符号数相加,则不考虑溢出,结果为134H。若把85H和0AFH作有符号数相加,则得到两个负数相加得正数的错误结论,此时OV=1,表示出错。当进行带符号数(补码)运算时,若第6、7位中有一位产生进位而另一位不产生进位,则使OV=1;否则使OV=0。OV=1表示两正数相加,和变为负数,或两负数相加和变为正数的错误结果。溢出标志OV在CPU内部是靠硬件“异或门”获得的。,3.380C51指令系统,(2)带进位加法指令 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)+dataC 上述指令除考虑进位位外,和ADD指令完全相同。 例3.21 (A)=85H,(20H)=0FFH,CY=1,执行指令 ADDC A,20H 运算后:(A)=85H,CY=1, AC=1,OV=0,P=1。,3.380C51指令系统,(3)加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)+1 所有加1指令,除INC A指令只影响奇偶标志P外,均不影响PSW。 在第三条指令中若直接地址为I/O口,则进行“读-改-写”操作。其功能是先读入端口锁存器内容,然后在CPU中加1,再输出到端口。,3.380C51指令系统,(4)带借位减法指令 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-C 功能:从A中内容,减去借位Cy,再减去源操作数指定的内容,结果送入A中。 在上述操作中,Cy=1表示有借位,CY=0表示无借位;OV=1,表示带符号数相减时,正数减负数结果为负数或负数减正数结果为正数的错误结论,与加法类似,溢出标志也由运算时差的第6、7位的借位状态“异或”而得。另外,减法运算也影响PSW中的AC和P标志。,3.380C51指令系统,例3.22 (A)=0C9H,(R3)=54H,Cy=1,执行命令 SUBB A,R3 运算后:(A)=74H,Cy=0,AC=0,OV=1,P=0。 若在进行单字节或多字节减法运算前,不知借位标志Cy的值,则应在进行运算前对CY清“0”。,3.380C51指令系统,(5)减1指令 DEC A ;A(A)-1 DEC Rn ;Rn(Rn)-1 DEC direct ;direct(direct)-1 DEC Ri ;(Ri)(Ri)-1 所有减1指令,除DEC A指令只影响奇偶标志P外,均不影响PSW。 与加1指令相同,在第三条指令中若直接地址为I/O口,则进行“读-改-写”操作。应注意,DEC DPTR指令是非法的,需要时可以用DEC DPL代替。,3.380C51指令系统,(6)乘、除法指令 乘法 功能:两个8位无符号数相乘,其16位积的高8位存于B中,低8位存于A中;若乘积大于0FFH,则OV=1,否则OV=0;乘法运算总使Cy=0,P标志由A中内容确定。 例3.23 (A)=50H,(B)=0A0H,执行指令 MUL AB 结果为:(B)=32H,(A)=00H,Cy=0,OV=1,P=0。,3.380C51指令系统,除法 功能:除法指令中,A和B中均为无符号数,A中存放被除数,B中存放除数;所得商送入A中,余数送入B中。除法运算总使Cy和OV清“0”,P标志仍由A中内容确定。 例3.24 (A)=0FBH,(B)=12H,执行指令 DIV AB 结果为:(A)=0DH,(B)=11H,CY=0,OV=0,P=1。,3.380C51指令系统,DA A 它是在进行BCD码运算时,跟在ADD和ADDC指令之后,将相加后存放在A中结果进行调整。 调整的条件和方法: 若(A)309或AC=1,则(A)30(A)306H; 若(A)749或Cy=1,则(A)74(A)746H; 若以上两条同时满足,或高4位虽等于9,但低4位调整后有进位,则应加66H。 说明: 以上讨论的调整情况是由ALU硬件中的十进制调整电路自动进行的,用户不必考虑何时应加6H,使用时只需在ADD和ADDC后面紧跟一条DA A指令即可。,3.380C51指令系统,例3.25 利用十进制加法调整指令作十进制减法运算(应采用补码相加的方法,用9AH减去减数即得以10为模的减数补码)。 设被减数存放在30H单元,减数存放在40H单元,结果存放在50H单元,编程如下: CLR C ;清进位位 MOV A,9AH ;求减数补码 SUBB A,40H ADD A,30H ;与补码相加 DA A ;十进制调整 MOV 50H,A ;结果存放在50H单元,3.380C51指令系统,例如 26-11=15,第三章 80C51单片机指令系统- 3.380C51指令系统,三、逻辑操作指令(24条) 包括与、或、异或、求反、左右移位、清“0”等。这类指令的执行一般不影响PSW。,3.380C51指令系统,(1)逻辑与运算指令 ANL A,#data ;A(A)data ANL A,Rn ;A(A)(Rn) ANL A,direct ;A(A)(direct) ANL A,Ri ;A(A)(Ri) ANL direct,#data ;direct(direct)data ANL direct,A ;direct(direct)(A) 指令功能:两操作数所确定的内容按位相与后,结果送给目的操作数地址中。对于最后两条指令,当直接地址为I/O口时,则进行“读-改-写”操作,即数据来自端口锁存器,结果也写回端口锁存器。用来屏蔽某些位。,3.380C51指令系统,例3.26 (A)=07H,(R0)=0FDH, 执行指令 ANL A,R0 结果为:(A)=05H,3.380C51指令系统,(2)逻辑或运算指令 ORL A,#data ;A(A)data ORL A,Rn ;A(A)(Rn) ORL A,direct ;A(A)(direct) ORL A,Ri ;A(A)(Ri) ORL direct,#data ;direct(direct)data ORL direct,A ;direct(direct)(A) 指令功能:两操作数所确定的内容按位相或后,结果送给目的操作数地址中。同与逻辑一样,对于最后两条指令,当直接地址为I/O口时,也进行“读-改-写”操作。可置位任何RAM单元或寄存器的某些位。,3.380C51指令系统,与、或逻辑运算结合使用,可以实现对某单元内容的某些位进行交换,而其余位保持不变。 例3.27 将A的高5位送到P1口的高5位,而P1口的低3位保持不变。编程如下: MOV R2,A ;暂存A的内容 ANL A,#0F8H ;取A的高5位 ANL P1,#07H ;取P1的低3位 ORL P1,A ;组合P1口的内容 MOV A,R2 ;恢复A的内容,3.380C51指令系统,(3)逻辑异或运算指令 XRL A,#data ;A(A)data XRL A,Rn ;A(A)(Rn) XRL A,direct ;A(A)(direct) XRL A,Ri ;A(A)(Ri) XRL direct,#data ;direct(direct) data XRL direct,A ;direct(direct)(A) 同样,最后两条指令,也具有“读-改-写”功能。,3.380C51指令系统,异或操作也是按位进行的,当两操作数相同时结果为0,不同时结果为1。任一操作数与它自身相等的数异或,结果为0;任一操作数与00H异或,结果为操作数本身;任一操作数与0FFH异或,结果为操作数的非。应用于对目的操作数的某些位取反。 例3.28 (A)=90H,(R3)=73H, 执行指令 XRL A,R3 结果为:(A)=0E3H。,3.380C51指令系统,(4)A清“0”与取反指令 清“0”指令: CLR A ;A0 取反指令: CPL A ;A( ) 清“0”与取反指令只对A操作,它们都是单字节指令,若用上述异或指令也可以对某操作数清“0”或取反,但至少要二字节指令。 51系列没有求补指令,若需进行求补计算,可用“取反加1”实现。,3.380C51指令系统,(5)移位指令 RL A ;左小循环 RR A ;右小循环 RLC A ;左大循环 RRC A ;右大循环 移位指令也只对A进行操作。前两条指令分别将A中内容循环左移或右移一位,后两条指令分别将A中内容连同进位位CY一起循环左移或右移一位。,3.380C51指令系统,(5)移位指令,3.380C51指令系统,用9位循环指令实现多字节移位 例:编程将寄存器 R6R5 中的双字节数X左移一位。 CLR C ;Cy=0, 设 R6= 55H ,R5= AAH MOV A,R5 ;R6=01010101,R5=10101010,Cy=0 RLC A ; MOV R5,A ;R6=01010101,R5=01010100,Cy=1 MOV A,R6 ; RLC A ; MOV R6,A ;R6=10101011,R5=01010100,Cy=0 思考题:如何将寄存器R6R5中的双字节数X右移一位。,3.380C51指令系统,四、控制转移指令(17条) 转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。 功能:用于控制程序的走向,作用区间是ROM空间。 包括无条件转移指令、条件转移指令以及子程序调用和返回指令。 按转移条件分类: 1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。 2)条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。,3.380C51指令系统,按转移方式分类: 1)绝对转移:指令给出转移目的的绝对地址nn,执行指令后,PCnn。 例:地址 源程序 1000H LJMP 2000H 1003H 2000H ;转移目的指令 2)相对转移:指令给出转移目的与转移指令的相对偏移量e,执行指令后,PCPC+e 。 例:地址 源程序 1000H SJMP 02 1004H ;转移目的指令,3.380C51指令系统,1、无条件转移指令(必转指令) 功能:当程序执行完该指令时,程序无条件转移到指令所提供的地址上去。 LJMP addr16 ;PCaddr16 长转移指令,指令提供16位目的地址。故程序可在64K字节空间内无条件地转移到任何地方。 例3.29 LJMP 8100H 指令执行后,使程序转移到8100H。,3.380C51指令系统,AJMP addr11 ;PC(PC)+2,PC100addr11, PC1511不变 绝对转移指令,它提供11位目的地址,可在2K范围内无条件地转移到由a10a0所指出的地址单元中去。 AJMP指令将64K字节ROM划分为32个区,由PC高五位PC1511确定,每个区为2K,而每个区又分为8页,由指令的a10a9a8确定,每页有256个单元,所以,每个区相应有8种操作码。本指令不影响标志位。,3.380C51指令系统,3.380C51指令系统,例3.30 KVR:AJMP addr11 设addr11=00100000000B,标号KVR的地址为1030H,则执行该指令后,程序转移到1100H。 SJMP rel ;PC(PC)+2+rel 相对短转移指令。指令控制程序无条件转向指定地址指令中,rel是一个带符号的相对偏移量,范围为-128127,负数表示向后转移,正数表示向前转移。 指令优点:指令给出相对转移地址,不具体指出地址值,这样程序地址发生变化时,只要相对地址不发生变化,该指令就不需做任何改动。,3.3 80C51指令系统,在用汇编语言编写程序时,rel是一个地址符号,由汇编程序在汇编过程中自动计算偏移地址。在手工汇编时,可用下式计算偏移地址: 向后转移时:rel=0FEH-(源、目的地址差的绝对值) 向前转移时:rel=(源、目的地址差的绝对值)-2 例3.31 KRD:SJMP PKRD 如果KRD标号值为0100H,标号PKRD值为0123H,则转移的目的地址为0123H,偏移量为:rel=0123H0100H2=21H。,3.3 80C51指令系统,JMP A+DPTR ;PC(A)+(DPTR) 变址寻址的转移指令(散转指令)。转移的目的地址由基址寄存器DPTR中的16位数和A中的8位无符号偏移量之和确定。 当DPTR中内容确定后,改变A的值,可以实现多分支的程序转移。 该指令执行后不改变A和数据指针DPTR中内容,不影响任何标志位。,3.3 80C51指令系统,例3.32 利用散转指令,要求当(A)=0时,转处理程序G0,(A)=1时转处理程序G1,(A)=n时转处理程序Gn(n=0,1,2,3)。 编程: MOV DPTR,TABLE ;表首址送DPTR JMP ADPTR ;以A中内容为偏移量跳转 TABLE: AJMP G0 ;(A)=0,转G0处执行 AJMP G1 ;(A)=1,转G1处执行 AJMP Gn ;(A)=n,转Gn处执行,3.3 80C51指令系统,2、条件转移指令 它是依据某种特定条件转移的指令。条件满足时转移,否则顺序执行。其中的条件一般为前条指令执行后产生的结果,如运算结果为0否?是否产生了进(借)位等。 结果为0条件转移指令。 JZ rel ;若(A)=0,则PC(PC)2rel,否则PC(PC)2 JNZ rel ;若(A)0,则PC(PC)2rel,否则PC(PC)2 这两条指令都是双字节条件相对转移指令。前者转移的条件是A=0,后者转移的条件是A0,A中内容为之前最后一次运算产生的结果。,3.3

    注意事项

    本文(第三章单片机.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开