51系列单片机的指令系统.ppt_第1页
51系列单片机的指令系统.ppt_第2页
51系列单片机的指令系统.ppt_第3页
51系列单片机的指令系统.ppt_第4页
51系列单片机的指令系统.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第3章51单片机的指令系统 单片机原理 接口及应用 内容提要 寻址方式 数据传送与交换指令 算术运算 逻辑运算指令 控制转移指令 位操作指令 预备知识 一 什么是指令指令 Instrution 指挥计算机执行某种操作的命令指令可用的语言表示形式 1 机器语言指令 用二进制编码 2 汇编语言指令 用助记符表示的指令 3 高级语言指令 比如C语言中高级语言指令都要汇编成机器语言指令 才能为计算机所识别 二 8051指令系统总表33种功能 每种功能可有几种助记符 41种助记符 不同的 目的 源 地址 111条指令 111条指令 按功能分5类 数据传送类28个算术运算类24个逻辑运算类25个位 布尔 操作类17个控制转移类17个 按字节数分3类 单字节49个双字节45个三字节17个按机器周期数分3类 1TM64个2TM45个4TM2个 三 符号说明1 指令助记符Rn 当前工作寄存器组中的R0 R7 Ri 当前工作寄存器组中的R0或R1 dir 8位内部数据单元地址 称直接地址 包括 1 内部RAM0 7FH 2 SFR的地址 data 8位立即数 data16 8位立即数 Ri 由R0或R1所指示的单元的内容 三 符号说明1 指令助记符bit 内部数据存储器RAM中的位地址或SFR中的直接寻址位 rel 带符号的8位相对的偏移量 以补码表示 范围为相对于下一条指令的第一个字节为起始的 128 127字节单元 addr11 11位目标地址 共ACALL和AJMP使用 寻址范围是2 11 程序存储器 addr16 16位目标地址 共LCALL和LJMP使用 寻址范围是2 16 程序存储器 表示当前指令的地址 2 关于注释 数据传递的方向 数据交换 单元内容 间接寻址单元的内容 与V 或Xor 异或 3 指令格式MCS 51单片机汇编语言指令格式 操作符目的操作数 源操作数 操作符指明该指令完成什么操作 操作数是指明该指令的操作对象 目的操作数是存放结果的 指令中操作数提供的方式称为寻址方式 3 1寻址方式 MCS 51有7种的寻址方式 1 寄存器寻址 RegisterAddressing 2 直接寻址 DirectAddressing 3 寄存器间接寻址 RegisterIndirectAddressing 4 立即寻址 ImmediateAddressing 5 变址寻址 IndexedAddressing 6 相对寻址 RelativeAddressing 7 位寻址 BitAddressing 1 立即寻址立即数直接出现在指令中 即操作码后紧跟着就是立即要操作的数 立即数 立即数存放在中 在51系列单片机的指令系统中 立即数用一个前面加 号的8位数 data 如 80H 或16位数 data16 如 2052H 表示 立即寻址中的数 称为立即数 例如指令 MOVA 80H只能访问程序存储器 2 寄存器寻址操作数存放在某一寄存器中 指令中出现相应的寄存器 Eg MOVA R0寄存器包括 A B DPTR R0 R7 C B仅在乘除法指令中为寄存器寻址 在其他指令中为直接寻址 A可以寄存器寻址又可以直接寻址 直接寻址时写作ACCEg INCDPTR 三 直接寻址指令中直接给出了操作数的地址 而不是操作数本身 它是对SFR进行存取的唯一方式 Eg MOVA 30HMOVACC 30H直接寻址的空间 1 内部RAM 包括通用寄存器区 Eg MOVA R1INCAMOVA 01HINCACC 2 SFR的全部Eg MOVTCON AMOVSBUF ACC 3 内部RAM地址空间的子集的128bitEg MOVA 7EHMOVC 7EH 4 SFR地址空间子集的128bitEg SETBEASETBRS0CLRRS1 4 寄存器间址指令指定某一寄存器 R0 R1或DPTR 的内容作为操作数的地址 寄存器内容不是操作数本身 而是操作数的地址 由此地址单元取出的内容才是操作数 所以寄存器 R0 R1或DPTR 实际上是地址指针 Eg MOVA R0 适用于 1 内部RAM R0 R1 SP MOVR1 90HMOV R1 76H 2 内部数据RAM的低半字节 R0 R1 XCHDA R0XCHDA R1 3 外部数据存储器 R0 R1 DPTR 注意 1 MOVA R0 内RAMMOVXA R0 外RAM 2 SFR不能用本方式 3 对外部数据存储器64kB空间要用16位寄存器DPTR作数据指针 4 PUSH和POP用间接寻址 实际 SP是隐含的 5 变址寻址基准寄存器的内容加上变址寄存器的内容所得到的是真正操作数的地址 有两类 1 MOVCA A PC 以累加器A作变址寄存器 PC作基址寄存器 2 MOVCA A DPTR 以累加器A作变址寄存器 DPTR作基址寄存器注意 1 两类变址方式 特别适合于查表MOVCA A PC 只能访问位于 本地 的较小的表 表页数最多为256B MOVCA A DPTR 可查访位于64kB程序存储器范围内任何地方任何长度的表 因为当表的位置或表的长度 256B时 可以重新设置数据指针DPTR的内容 而PC却不能任意设置 2 只能访问程序存储器 6 相对寻址指令执行时 以PC当前值为基值 加上指令给出的相对偏移量 rel 形成有效的转移目标地址 转移范围 以PC的当前值为起始地址的 128 127字节单元之间 7 位寻址对片内RAM中20H 2FH中的128个位地址及SFR中的可位寻址的位地址寻址 例如 MOVC 20H 20H位的内容送CY标志位 C称为位累加器 MOVA 20H 字节寻址 将内部RAM中20H单元中的内容送给累加器A 以上两条指令均为寻址 究竟是位寻址还是字节寻址 根据两操作数类型一致的原则 由另一个操作数决定 3 2数据传送与交换指令 数据传送与交换指令分类 1 通用MOV传送字节变量2 布尔MOV传送位变量3 栈操作PUSH进栈POP出栈4 累加器A专用XCH数据交换XCHD交换低四位SWAP累加器A高低4位互换MOVX外部数据存储器取送MOVC程序存储器送A5 目标地址传送MOVDPTR data16 dir Ri Rn data A 1 MOVA Rn datadirect Ri 2 MOVdirect ARn Ri datadirect2 3 MOVRn 4 MOV Ri Adirect data 1 内部RAM SFR之间的传送MOV指令 Adirect data 3 2数据传送与交换指令 2 2 1传送类指令 5 目的地址的传送指令MOVDPTR data16 这是唯一的一条把16位数据一次传送的指令 该16位数据常指存储器的地址 Eg1 MOVDPTR 0A123HEg2 MOVR2 AMOVPSW 08HMOVR2 AEg3 MOVA P1MOVP2 P1 6 累加器A与外部RAM传送指令Input MOVXA Ri MOVXA DPTR Output MOVX Ri A MOVX DPTR A Ri访问片外RAM DPTR访问片外RAM Eg 将23H送入片外RAM0FFFFH单元 7 累加器A与程序存储器传送指令MOVCA A DPTR MOVCA A PC 常用于查表 MOVA 01HMOVDPTR M2MOVCA A DPTRM1 RETM2 DB66H 77H 88H 99H 8 PUSH 入栈 指令PUSHdirect 源 直接寻址 目的 隐含的寄存器间址 SP 入栈操作 栈指针先加1 即 SP SP 1 指向原栈顶的下一个单元 再将直接地址寻址的单元内容压入当前SP所指的堆栈单元中 9 POP 出栈 指令POPdirect 源 隐含的寄存器间址 SP 目的 直接寻址 弹出操作 由栈指针 SP 所寻址的内部RAM 堆栈 单元中内容 送入直接地址寻址的单元中 然后 SP SP 1 总结 1 一般使用堆栈前 栈指针要初始化 否则 一上电指向07H单元 即第一个压入的数从08H单元堆起 2 PUSHdirect源 目的 POPdirect 源 目的 3 PUSH和POP指令的第二字节均指直接地址 因此 在汇编时 A Rn SFR或RAM单元均应用其直接地址 4 在调用子程序或中断的保护现场和恢复现场时 PUSH和POP指令要按 FILO 原则配对使用 例 设A 02 B 56H 执行下列指令序列后 SP A B SBR MOVSP 30HPUSHAPUSHBMOVA 0MOVB 01 POPBPOPARET 设栈底 保护现场 恢复现场 堆栈操作示意 3 2 2交换指令实现片内RAM区的数据双向传送 1 字节交换指令XCHA Rn A RnXCHA Ri A Ri XCHA direct A direct 例设 A FFH R1 30H 30H 87H FFH 21H执行 XCHA R1XCHA 30HXCHA R1 2 半字节交换指令 XCHDA Ri A0 3 Ri 0 3 A 34H 50H 96H 执行MOVR1 50HXCHDA R1 3 A累加器高 低半字节交换SWAPAEg A 0FH 执行SWAPA 例3 4 3 将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元 数字0 9的ASCII码30H 39H 85H 压缩的BCD码和非压缩的BCD码见图如1823压缩的BCD码为1823H非压缩的BCD码为01080203H 08 例将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元 MOVA 00H A 00MOVR0 2AHMOVR1 2BHXCHDA R0SWAPAXCHDA R1XCHA 20H 85H R1 R0 习题 交换片内RAM40H单元和41H单元的低半字节 0 0 低4位交换A 08 A 80H 低4位交换 20H 85H 38 00 A 35 80 85 R1 R0 30 30 3 3算术运算和逻辑运算指令 1 算术运算类 1 加法类ADDADDCINCDA 2 减法类SUBBDEC 3 乘法MULAB 4 除法DIVAB2 逻辑运算类 1 单操作数操作CLRSETBCPLRLRLCRRRRCSWAP 2 双操作数操作ANLORLXRL 一 算术运算类指令 1 加法类指令 1 加法ADDA ADD A Rn Ri datadir Eg A 78H 检查ADDA 69H执行结果 2 带进位位加法指令ADDCA ADDC A Rn Ri datadir Eg A 00H R7 FFH Cy 1 检查ADDCA R7执行结果 3 加1指令 INC Rn RidirectADPTR 4 二 十进制调整指令调整指令 DAA 将A中内容变成BCD码调整方法 和低4位大于9或有半进位则低4位加6 和的高4位大于9或有进位 则高4位加6 注意 1 参加运算的数须约定为BCD数 2 进行加法运算Eg A 65H R7 59H 检查ADDA R5DAA执行结果DAA指令只对一个字节和调整 如为多字节相加必须进行多次调整 此指令不能对减法结果进行调整 2 减法类指令 1 带借位的减法指令SUBBA SUBB A Rn Ri datadir Eg A 0D8H 30H 63H Cy 1 检查SUBBA 30H执行结果 2 减1指令 DEC Rn RidirectADPTR 3 乘法指令 MULAB 8位 8位无符号数乘法指令 产生16位积 高字节存于B中 低字节存于A中 4 除法指令 DIVAB 8位 8位无符号数除法指令 被除数和结果的商存于A中 除数和结果的余数存于B中Eg A 0FBH B 12H 检查DIVAB执行结果 二 逻辑运算类指令 1 单操作数操作 1 按字节寻址CLRACPLAEg A 5CH 执行CPLA后RLAEg A 0C5H 执行RLA后 RLCAEg A 0C5H Cy 0 执行RLCA后RRARRCASWAPA 2 按位寻址 CLR Cbit SETB Cbit CPL Cbit 2 双操作数操作 1 按字节寻址逻辑与 ANL A Rn Ri datadir ANL direct A data 逻辑或 ORL A Rn Ri datadir ORL direct A data 逻辑异或 XRL A Rn Ri datadir XRL direct A data 2 按位寻址 ANLC bit bit ORLC bit bit 指令对标志位的影响有如下规律 1 P标志位仅对A累加器操作的指令有影响 2 传送指令 加1 减1指令 逻辑运算指令不影响Cy OV AC标志位 3 加减运算指令影响标志位 乘除指令使Cy 0 当乘积大于255 或除数为0时 OV置1 4 对进位位Cy 指令中用C表示 进行操作的指令和大环移指令 显然会影响Cy 具体指令对标志位的影响可参阅附录A 标志位的状态是控制转移指令的条件 因此指令对标志位的影响应该记住 例1 编写程序 将21H单元的低三位和20H单元的低五位合并为一个字节 并送至30H单元 要求21H单元的低三位放在高位上例2 把R1R0和R3R2中的2个4位BCD码相加 结果送到R5R4中 如有进位 则保存于进位位C中 3 4位操作指令 MCS 51单片机的特色之一就是具有丰富的位处理功能 以进位标志CY为位累加器C 使得开关量控制系统的设计变得十分方便 在程序中位地址的表达有多种方式 1 用直接位地址表示 如D4H 2 用 操作符号表示 如PSW 4 或D0H 43 用位名称表示 如RS1 4 用用户自定义名表示 如ABCBITD4H 其中ABC定义为D4H位的位名 BIT为位定义伪指令 以上各例均表示PSW 4的RS1位 例用位操作指令实现X X0 X1 设X0为P1 0 X1为P1 1 X为ACC 0 解 1 因位操作指令中无异或指令 依据X X0 X1 X0X1 X0X1 用与 或指令完成 编程如下 XBITACC 0X0BITP1 0X1BITP1 1 位定义MOVC X0ANLC X1 C X0 X1MOV20H C 暂存于20H单元MOVC X1ANLC X0 C X0 X1ORLC 20H C X0X1 X0X1MOVX CSJMP 解 2 根据异或规则 一个数与 0 异或 该数值不变 与 1 异或 该数值变反 编程如下 MOVC X0JNBX1 NCEX X1 0 X C X0CPLCNCEX MOVX C X1 1 X C X0SJMP 3 5转移控制类指令 1 无条件转移包括 绝对子程序调用 长子程序调用 子程序返回 绝对转移 长转移 短转移 间接转移 空操作2 条件转移包括 依零标志转移 依进位标志转移 判位变量跳转 判位变量清零跳转 CJNE DJNZ 一 无条件转移指令 1 短转移 相对转移 SJMPrel pc pc 2 pc pc rel说明 2个字节指令 转移范围 以PC当前为基准 后128B或前127B 相对偏移量rel的计算Rel 目标地址 PC当前值 目标地址 本指令的第一字节 02H Eg1 往后跳 0100HSJMPAA0102HNOP0123HAAA NOPEg2 往前跳 00FFHFIRST NOP0100HSJMPFIRST0102HNOP 2 绝对跳转指令AJMPaddr11 PC PC 2 PC10 0 addr10 0 PC15 11 不变说明 2个字节指令 转移范围 指令第一字节在内的同一2kB空间内 同一2kB内 的含义 12D6HAJMPaddr110001001011010110B00010 转移范围为1000H 17FFH共2kB 3 长转移指令LJMPaddr16 PC addr15 0转移范围 64kB程序存储器地址空间任何单元 该指令为3字节指令 Eg1 0100HLJMPA12300HA1 NOP 4 间接转移指令JMP A DPTR PC A DPTR 转移范围 以数据指针DPTR内容为起始的256B空间内的指定地址 作用 实现多分支 又称散转指令 DPTR决定分支转移程序的首地址 A的内容动态决定某一个分支转移 Eg MOVDPTR TBLJMP A DPTRTBL AJMPLABEL0 AJMPLABEL1 AJMPLABEL2 LABEL0 LABEL1 LABEL2 5 空操作NOP PC PC 1不作任何操作 仅将程序计数器PC加1作用 1 用于延时或时间上的等待 单周期指令 2 调试是修改程序Eg A1 MOVA 00HADDA BSJMPA1 6 子程序调用与返回指令子程序 MCS 51设置两种调用指令 绝对调用ACALL 二字节长调用LCALL 三字节 1 绝对调用指令ACALLaddr11 与AJMP类似 addr11提供11位目标地址 允许调用入口地址与该指令在同一2kB范围内的任何子程序 Eg 设 SP 08H 符号地址 SUBRTN 所对应的程序存储器实际地址为0345H 执行指令 0123HACALLSUBRTN 2 长调用指令LCALLaddr16允许调用64kB范围内的任何子程序 3 返回指令RET中断返回指令RETI与RET相似 但他有恢复中断优先级状态触发器 4 几点说明A 调用子程序指令与转移指令的区别B 子程序允许嵌套C 调用过程中参数的传递方式通过寄存器传递通过堆栈传递利用数据指针传递 二 条件转移指令 1 可供测试的标志 1 PSW 2 片内RAM和SFR中的一些位 软标志位 2 条件转移指令分类 1 依零标志转移JZrel 当A 0 转JNZrel 当A 0 转 2 依进位

温馨提示

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

评论

0/150

提交评论