单片机原理与应用-第二章.ppt

上传人:sh****n 文档编号:8731465 上传时间:2020-03-31 格式:PPT 页数:89 大小:871.50KB
返回 下载 相关 举报
单片机原理与应用-第二章.ppt_第1页
第1页 / 共89页
单片机原理与应用-第二章.ppt_第2页
第2页 / 共89页
单片机原理与应用-第二章.ppt_第3页
第3页 / 共89页
点击查看更多>>
资源描述
第二章MCS 51指令系统 2 1MCS 51指令系统的分类及一般说明2 2数据传送类指令2 3算术操作类指令2 4逻辑操作类指令2 5控制程序转移类指令2 6布尔变量操作类指令2 7小结 每条指令在执行时要花去一定的时间 以机器周期为单位 按指令执行时间分类 单周期 64条 双周期 45条 4周期 2条 按指令的功能分类 可分为5大类 数据传送类 29条 算术运算类 24条 逻辑运算及移位类 24 控制转移类 17条 位操作类 17条 每条指令在程序存储器ROM中占据一定的空间 以字节为单位 按指令所占字节数分类 单字节 49条 双字节 46条 3字节 16条 2 1MCS 51指令系统的分类和一般说明 标号 操作码操作数 注释 一 指令基本格式 方括符 表示可选项标号代表指令所在地址 1 8个字母 数字 结尾 标号 操作码 目的操作数 源操作数 注释 START MOVA 30H 将立即数30H传送至A中MOVDPTR 5678H 将立即数5678H传送至DPTR 标号 指令的符号地址 用于一段功能程序的识别标记或控制转移地址 指令前的标号代表该指令的地址 是用符号表示的地址 一般用英文字母和数字组成 标号必须用冒号 与操作码分隔 操作码 表示指令的操作功能 操作码用助记符表示 它代表了指令的操作功能 操作码是指令的必需部分 是指令的核心 不可缺少 操作数 参加操作的数据或数据地址 操作数与操作码之间用空格分隔 操作数与操作数之间用逗号 分隔 操作数可以是数据 也可以是数据的地址 数据地址的地址或操作数的其他信息 操作数可分为目的操作数和源操作数 操作数可用二进制数 十进制数或十六进制数表示 操作数的个数可以是0 3个 注释 指令功能说明 注释属于非必需项 是为便于阅读 对指令功能作的说明和注解 注释必须以 开始 二 指令分类 按指令功能分类 可分为数据传送类 算术运算类 逻辑运算类 位操作类和控制转移类等5大类指令 80C51共有111条指令 按指令长度分类 可分为1字节 2字节和3字节指令 按指令执行时间分类 可分为1机周 2机周和4机周指令 三 指令中常用符号 分类介绍各类指令之前 先对描述指令的一些符号意义进行一些简单约定 1 Ri和Rn R表示当前工作寄存器区中的工作寄存器 i表示0或1 即R0和R1 n表示0 7 即R0 R7 当前工作寄存器的选定是由PSW的RS1和RS0位决定的 2 data 表示立即数 data为8位常数 data是指包含在指令中的8位立即数 3 data16 包含在指令中的16位立即数 4 rel 相对地址 以补码形式表示的地址偏移量 范围为 128 127 主要用于无条件相对短转移指令SJMP和所有的条件转移指令中 5 addr16 16位目的地址 目的地址可在全部程序存储器的64KB空间范围内 主要用于无条件长转移指令LJMP和子程序长调用指令LCALL中 6 addr11 11位目的地址 目的地址应与下条指令处于相同的2KB程序存储器地址空间范围内 主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中 7 direct 表示直接寻址的地址 即8位内部数据存储器RAM的单元地址 0 127 255 或特殊功能寄存器SFR的地址 对于SFR可直接用其名称来代替其直接地址 8 bit 内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址 9 间接寻址寄存器或基地址寄存器的前缀 如 Ri DPTR 表示寄存器间接寻址 10 X 表示X中的内容 11 X 表示由X寻址的单元中的内容 即 X 作地址 该地址的内容用 X 表示 12 和 符号 表示对该位操作数取反 但不影响该位的原值 表示指令操作流程 将箭头一方的内容 送入箭头另一方的单元中去 四 寻址方式 寻址就是寻找操作数的地址 寻址方式 指令按地址获得操作数的方式MCS 51有七种寻址方式 且一条指令可能含多种寻址方式 寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址 基址寄存器 变址寄存器间接寻址 相对寻址位寻址 1 寄存器寻址选定某寄存器 自该寄存器中读取或存放操作数 以完成指令规定的操作 称为寄存器寻址 例如 MOVA R0 设指令执行前A 20H R0 40H 执行指令后 A 40H R0 40H 解析 指令执行如下所示 A R0 2 立即寻址立即寻址是直接给出操作数 操作数紧跟在操作码的后面 作为指令的一部分与操作码一起存放在程序存储器内 可以立即得到并执行 不需要另去寄存器或存储器等处寻找和取数 故称为立即寻址 该操作数称为立即数 并在其前冠以 号作前缀 以表示并非地址 立即数可以是8位或16位 用十六进制数表示 一般用于为寄存器或存储器赋常数初值 例如 8位立即数 MOVA 40H A 40H16位立即数 MOVDPTR 2100H DPTR 2100HADDA 05H A A 立即数05H 3 寄存器间接寻址 MOVA R0 将以R0中内容为地址的存储单元中的数据传送至A中MOVXA DPTR 将外RAMDPTR所指存储单元中的数据传送至A中PUSHPSW 将PSW中数据传送至堆栈指针SP所指的存储单元中MOV R1 0FH 30H 立即数0FH 寄存器中的内容是一个地址 由该地址单元寻址到所需的操作数 间接寻址用间址符 作为前缀 例 注意 1 间接 表示某寄存器中的 内容 只是一个 单元地址 这个地址单元中存放的数据才是要找的 操作数 2 符号 表示 在 其含义与读音皆同 at 例 MOVA R0 A R0 设指令执行前A 20H R0 40H 地址为40H存储器单元内容如图所示 执行指令后 A 34H R0 40H 40H 34H 解析 指令执行如下所示 R0 40H A 4 直接寻址直接寻址是给出操作数的直接地址 直接寻址范围为内RAM128B和特殊功能寄存器 访问特殊功能寄存器SFR只能采用直接寻址方式 例 设存储器两个单元的内容如图所示 执行指令MOVA 40H后A 56H 直接寻址方式对数据操作时 地址是固定值 而地址所指定的单元内容为变量形式 思考题 直接寻址方式指令和立即寻址方式指令的形式有什么不同 在本单片机中规定 访问特殊功能寄存器SFR只能采用直接寻址方式 例如 MOVA SP A SP MOVA 81H A SP MOVP1 5AH P1 5AH MOV90H 5AH P1 5AH MOVB 30H B 30H 在本单片机中访问特殊功能寄存器SFR只能采用直接寻址方式的原因是SFR分布在80H 0FFH范围内 而52系列单片机有256字节的片内RAM 其中的80H 0FFH的RAM与SFR所占地址重叠 于是规定 80H 0FFH范围内的RAM只能用寄存器间接寻址方式 而SFR只能用直接寻址方式 从而解决了地址冲突的问题 例如 MOVA 90H等效于MOVA P1属直接寻址 5 变址寻址基址寄存器加变址寄存器间接寻址 简称变址寻址 它以数据指针DPTR或程序计数器PC作为基址寄存器 累加器A作为变址寄存器 两者的内容相加形成16位程序存储器地址 该地址就是操作数所在地址 数据地址 基地址 偏移量例如 MOVCA A DPTR A A DPTR 该指令寻址及操作功能如下图所示 这种寻址方式常用于访问程序存储器中的常数表 6 相对寻址相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel 构成实际操作数地址的寻址方法 它用于访问程序存储器 常出现在相对转移指令中 在使用相对寻址时要注意以下两点 第一 当前PC值是指相对转移指令所在地址 一般称为源地址 加上转移指令字节数 即 当前PC值 源地址 转移指令字节数 例如 JZrel若该指令地址 源地址 为2050H 则执行该指令时的当前PC值即为2052H 第二 偏移量rel是有符号的单字节数 以补码表示 其相对值的范围是 128 127 即00H FFH 负数表示从当前地址向上转移 正数表示从当前地址向下转移 所以 相对转移指令满足条件后 转移的地址 一般称为目的地址 应为 目的地址 当前PC值 rel 源地址 转移指令字节数 rel例如 指令JZ08H和JZ0F4H表示累加器A为零条件满足后 从源地址 2050H 分别向下 向上转移10个单元 其相对寻址示意如下页图 a b 所示 这两条指令均为双字节指令 相对寻址示意图 a 指令JZ08H寻址示意图 b 指令JZF4H寻址示意图 7 位寻址MCS 51系列单片机具有位寻址的功能 即指令中直接给出位地址 可以对内部数据存储器RAM中的128位和特殊寄存器SFR中的93位进行寻址 并且位操作指令可对地址空间的每一位进行传送及逻辑操作 例如 SETBPSW 3 PSW 3 1该指令为双字节指令 指令的第二字节直接给出位地址D3H PSW 3的位地址 注意 1 位地址里的数据只可能是一个0或12 有的位地址十分明确 如P1 0 ACC 7等 有的位地址则 不太明确 如 MOVA 17H A 17H 17H是字节地址MOVACC 0 17H ACC 0 17H 这里ACC 0是位地址所以该指令中的17H是22H单元的第7位 在MCS 51系列单片机的存储空间中 指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的 7种寻址方式如下表所示 寻址方式小结 1 对片外程序存储器只能用变址寻址方式 或者反过来说 变址寻址是一种专门用于程序存储器的寻址方式 2 内部数据存储器由于使用频繁 因此寻址方式多 3 对外部数据存储器 只能使用寄存器间接寻址 4 立即寻址方式只涉及8位或16位数据 5 相对寻址解决程序转移问题 6 本节所讲的各种寻址方式都是针对于源操作数 但实际上目的操作数也有寻址问题 2 2 1数据传送类指令 数据传送类指令共29条 它是指令系统中最活跃 使用最多的一类指令 一般的操作是把源操作数传送到目的操作数 即指令执行后目的操作数改为源操作数 而源操作数保持不变 若要求在进行数据传送时 不丢失目的操作数 则可以用交换型传送指令 按数据传送类指令的操作方式 传送类指令分为3种类型 数据传送 MOV MOVX MOVC数据交换 XCH XCHD SWAP堆栈操作 PUSH POP数据传送类指令不影响进位标志CY 半进位标志AC和溢出标志OV 但当传送或交换数据后影响累加器A的值时 奇偶标志P的值则按A的值重新设定 数据传送类指令助记符与操作 Rn R0 R7 Ri R0 R1 data 8位立即数 data16 16位立即数direct 直接地址rel 8位带符号偏移量 1 内部存储器间传送指令 16条 内部数据存储器RAM区是数据传送最活跃的区域 可用的指令数也最多 共有16条指令 指令操作码助记符为MOV 寻址方式 立即寻址 直接寻址 寄存器寻址 寄存器间址 内部RAM之间源操作数传递关系图 例 顺序执行下列指令序列 求每一步执行结果 MOVA 30H A 30HMOV4FH A 4FH 30HMOVR0 20H R0 20HMOV R0 4FH 20H 30HMOV21H 20H 21H 30H 例 用两种寻址方式实现 将片内RAM60H单元的数据传送给累加器A 解1 MOVA 60H解2 MOVR0 60HMOVA R0 说明 1 一条指令中不能同时出现两个工作寄存器 非法指令 MOVR1 R2MOVR2 R02 间址寄存器只能使用R0 R1 非法指令 MOVA R23 SFR区只能直接寻址 不能用寄存器间接寻址 非法指令 MOVR0 80HMOVA R04 指令表 B 指令字节数 M 机器周期数只有指令表中的指令才有对应指令代码 计算机才能执行 编程时 不能随意 创造发明 指令 2 外部数据存储器数据传送指令 4条 MCS 51单片机CPU对片外扩展的数据存储器RAM或I O口进行数据传送 必须采用寄存器间接寻址的方法 通过累加器A来完成 一般数据的传送是通过P0口和P2口完成的 即片外RAM地址总线低8位由P0口送出 高8位由P2口送出 数据总线 8位 也由P0口传送 双向 但与低8位地址总线是分时传送的 MOVXA DPTR A DPTR MOVXA Ri A Ri MOVX DPTR A DPTR A MOVX Ri A Ri A 例 设外部RAM 0203H FFH 分析以下指令执行后的结果 MOVDPTR 0203H DPTR 0203HMOVXA DPTR A DPTR MOV30H A 30H A MOVA 0FH A 0FHMOVX DPTR A DPTR A 执行结果为 DPTR 0203H 30H FFH 0203H A 0FH 3 程序存储器向累加器A传送数据指令 2条 程序存储器向累加器A传送数据指令 通常称为查表指令 寻址方式属 基址 变址间接寻址 把程序存储器 ROM或EPROM 中存放的表格数据读出 传送到累加器A 它共有如下两条单字节指令 指令操作码助记符为MOVC A DPTR或 A PC指向程序存储器中的某单元 拟传送给累加器ACC的数据就是程序中事先写进去的表格数据 这些表格数据往往用伪指令DB DW等定义在程序中 MOVCA A DPTR A A DPTR MOVCA A PC PC PC 1 A A PC 例 在外部ROM EPROM中 从2000H单元开始依次存放0 9的平方值 0 1 4 9 81 要求依据累加器A中的值 0 9 来查找所对应的平方值 分析下述程序的结果 MOVDPTR 2000H DPTR 2000HMOVA 09H A 09HMOVCA A DPTR A A DPTR 执行结果 DPTR 2000H A 51H 81的十六进制数 例 仍以例1外部ROM EPROM2000H单元开始存放0 9的平方值 以PC作为基址寄存器进行查表 解 设MOVC指令所在地址 PC 1FF0H 则偏移量 2000H 1FF0H 1 0FH 相应的程序如下 MOVA 09H A 09HADDA 0FH 地址调整MOVCA A PC A A PC 1 执行结果为 PC 1FF1H A 51H 2 数据交换指令 5条 数据交换指令其数据作双向传送 涉及传送的双方互为源地址 目的地址 指令执行后各方的操作数都修改为另一方的操作数 因此 两操作数均未冲掉 丢失 数据交换类指令共有如下5条指令 XCHA direct A direct XCHA Ri A Ri XCHA Rn A Rn XCHDA Ri A3 A0 Ri 3 0 SWAPA A7 A4 A3 A0 例 设 R0 30H 30H 4AH A 28H 则执行下列指令后 各寄存器中的内容分别为多少 XCHA R0 A 4AH 30H 28HXCHDA R0 A 2AH 30H 48HSWAPA A 82H例 设A 29H 2A 38H执行指令XCHA 2AH后 A 2AH 解 A 38H 2A 29H习题 将片内RAM60H单元与61H单元的数据交换 用指令XCH60H 61H对吗 3 堆栈操作类指令 2条 堆栈操作有进栈和出栈操作 即压入和弹出数据 常用于保存或恢复现场 该类指令共有如下两条指令 入栈指令 PUSHn SP SP 1 SP n 出栈指令 POPn n SP SP SP 1说明 堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在RAM区任意位置 一般不安排在工作寄存器区和可按位寻址的RAM区 而是放在RAM区的靠后的位置 堆栈总是指向栈顶 通常PUSH与POP两条指令成对使用 例如 设 A 7BH 35H 11H并且知道 SP 60HPUSHACC 61H 7BHPUSH35H 62H 35H 即 62H 11HPOPACC A 62H 即 A 11HPOP5AH 5AH 61H 即 5AH 7BH 例 设A 02 B 56H 执行下列指令后 SP A B SBR MOVSP 30H 设栈底PUSHAPUSHBMOVA 0MOVB 01 POPBPOPA 习题 找出指令错误并改正 1 MOVA 1000H A 1000H2 MOVXA 1000H A 1000H 片外RAM3 MOVCA 1000H A 1000H 片外ROM4 MOVX60H A 片外RAM 60H A5 MOVR0 60H 片内RAM 61H 60H MOV61H R06 XCHR1 R2 R1 R27 MOVXDPTR 2000H DPTR 2000H8 MOVX60H DPTR 片内RAM 片外RAM 2 2 2算术运算类指令 算术运算类指令共有24条 与数据传送指令不同 多数算术运算指令会影响标志位的状态 即CPU执行算术运算指令后 根据数据操作情况自动设置标志位的状态 算术运算类指令可分为 加法带进位加法带借位减法加1减1单字节乘 除法运算十进制调整算术运算对8位无符号数可进行直接运算 借助溢出标志 可对带符号数进行2的补码运算 借助进位标志 可进行多字节加减运算 也可以对压缩BCD码 即单字节中存放两位BCD码 进行运算 算术运算类指令 算术运算类指令 续 加法运算 ADD 4条 带进位加法运算 ADDC 4条 带借位减法运算 SUBB 4条 所有的加法 ADD 带进位加法 ADDC 带借位减法 SUBB 运算都是以A为一个加数或被减数 最终结果也存进A 加法 ADD 带进位加法 ADDC 以及带借位减法 SUBB 运算中 如果产生了进位或借位 将自动对PSW中的Cy标志位置 1 带进位加法 ADDC A A Cy 第二操作数 带借位减法 SUBB A A Cy 第二操作数 算术运算类指令 续 加1 减1操作 INC DEC 9条 INC DEC与用加 减法指令做加1 减1操作不同之处在于INC DEC不影响标志位 单字节乘 除运算 MUL DIV 2条 两个单字节数的乘 除法运算只在A与B之间进行 MULAB A 与 B 相乘 积为16位数 A 积的高8位 B 积的低8位DIVAB A 除以 B 结果用2字节表示 A 商的整数部分 B 余数 算术运算类指令 续 BCD码是指 用二进制表达的十进制数 如 十进制数20可以用二进制数00010100B表示 也可以用十六进制数14H表示 还可以用BCD码00100000B或20H表示 4个二进制位就可以表示一位BCD码 0000 1001可表示十进制数 BCD数 0 9 8个二进制位就可以表示两位压缩的BCD码 00000000 10011001表示00 99 十进制调整 DAA 1条 用于两个BCD码之间的相加 这条指令只能跟在ADD或ADDC之后 若 A 3 0 9或 AC 1则 A 3 0 A 3 0 6 若 A 7 4 9或 CY 1则 A 7 4 A 7 4 6 P 60例5 两个十进制数 65 与 58 相加 根据常识 显然其和应当为 123 MOVA 65HADDA 58HDAA结果 A 23H CY 1 指令 DAA 完成的操作 65011001015801011000 1 3 18 19 2 6601100110 若 A 3 0 9或 AC 1则 A 3 0 A 3 0 6 若 A 7 4 9或 CY 1则 A 7 4 A 7 4 6 又如 两个十进制数 39 与 58 相加 根据常识 显然其和应当为 97 MOVA 39HADDA 58HDAA结果 A 97H CY 0 39001110015801011000 0 7 23 9 60110 指令 DAA 完成的操作 例 对累加器中的压缩BCD数加1和减1ADDA 01HDAAADDA 99HDAA 例 4位压缩的BCD数的相加程序 设一个加数放在30H 31H单元 另一个加数放在32H 33H单元 和数放到30H 31H单元 MOVR0 30H 设地址指针指向个位十位数MOVR1 32HMOVA R0ADDA R1 个位十位数相加DAMOV R0 AINCR0INCR1 指向百位千位数MOVA R0ADDCA R1 百位千位数相加DAAMOV R0 A 例 把累加器中的二进制数转换为3位BCD数的子程序 百位数放在HUND 十位 个位数放在TENONE中 HUND和TENONE为内部RAM中的两个单元 BINBCD MOVB 100DIVAB 得到百位数MOVHUND AMOVA 10XCHA BDIVAB 得到十位数和个位数SWAPAADDA B 组成压缩的BCD数MOVTENINE ARET 2 2 3逻辑运算及移位类指令 逻辑与运算 ANL 6条 逻辑或运算 ORL 6条 逻辑异或运算 XRL 6条 累加器清零 取反 CLR CPL 2条 累加器移位操作 RL RLC RR RRC 4条 1 逻辑 与 运算指令逻辑 与 运算指令共有如下6条 其助记符为ANL ANLdirect A direct direct A ANLdirect data direct direct dataANLA data A A dataANLA direct A A direct ANLA Ri A A Ri ANLA Rn A A Rn 逻辑 与 运算指令是将两个指定的操作数按位进行逻辑 与 的操作 例如 A FAH 11111010B R1 7FH 01111111B执行指令 ANLA R1 A 11111010 01111111结果为 A 01111010B 7AH 逻辑 与 ANL指令常用于屏蔽 置0 字节中某些位 若清除某位 则用 0 和该位相与 若保留某位 则用 1 和该位相与 2 逻辑 或 运算指令逻辑 或 运算指令共有如下6条指令 其助记符为ORL ORLdirect A direct direct A ORLdirect data direct direct dataORLA data A A dataORLA direct A A direct ORLA Ri A A Ri ORLA Rn A A Rn 逻辑 或 指令将两个指定的操作数按位进行逻辑 或 操作 例如 若 A C0H R0 3FH 3F 0FH执行指令 ORLA R0 A A R0 结果为 A CFH 它常用来使字节中某些位置 1 欲保留 不变 的位用 0 与该位相或 而欲置位的位则用 1 与该位相或 例 根据累加器A中4 0位的状态 用逻辑与 或指令控制P1口4 0位的状态 P1口的高3位保持不变 ANLA 00011111B 屏蔽A的高3位ANLP1 11100000B 保留P1的高3位ORLP1 A 使P1 4 P1 0按A4 A0置位若上述程序执行前 A B5H 10110101B P1 6AH 01101010B 则执行程序后 A 15H 00010101B P1 75H 01110101B 3 逻辑 异或 运算指令 异或 运算是当两个操作数不一致时结果为1 两个操作数一致时结果为0 这种运算也是按位进行 共有如下6条指令 其助记符为XRL XRLdirect A direct direct AXRLdirect data direct direct dataXRLA data A A dataXRLA direct A A direct XRLA Ri A A Ri XRLA Rn A A Rn 逻辑 异或 指令常用来对字节中某些位进行取反操作 欲某位取反则该位与 1 相异或 欲某位保留则该位与 0 相异或 还可利用异或指令对某单元自身异或 以实现清零操作 例 若 A B5H 10110101B 执行下列指令 XRLA 0F0H A的高4位取反 低4位保留MOV30H A 30H A 45HXRLA 30H 自身异或使A清零执行后结果 A 00H 逻辑 与 或 异或 各6条指令有如下共同的特点 逻辑 与 ANL 或 ORL 异或 XRL运算指令除逻辑操作功能不同外 三者的寻址方式相同 指令字节数相同 机器周期数相同 ANL ORL XRL的前两条指令的目的操作数均为直接地址方式 可很方便地对内部RAM的00H FFH任一单元或特殊功能寄存器的指定位进行清零 置位 取反 保持等逻辑操作 ANL ORL XRL的后4条指令 其逻辑运算的目的操作数均在累加器A中 且逻辑运算结果保存在A中 4 累加器A清零与取反指令CLRA A 00HCPLA A A 第1条是对累加器A清零指令 第2条是把累加器A的内容取反后再送入A中保存的对A求反指令 它们均为单字节指令 若用其它方法达到清零或取反的目的 则至少需用双字节指令 5 移位指令移位指令有如下循环左移 带进位位循环左移 循环右移和带进位位循环右移4条指令 移位只能对累加器A进行 RLA An 1 An A0 A7 RLCA An 1 An CY A7 A0 CY RRA An An 1 A7 A0 RRCA An An 1 CY A0 A7 CY 6 累加器移位操作 RL RLC RR RRC 4条 RLA左环移 累加器A 累加器A Cy 累加器A Cy 累加器A RRCA带进位位右环移 RRA右环移 RLCA带进位位左环移 2 3 4控制转移类指令 控制转移类指令共计17条 可分为无条件转移指令 条件转移指令 子程序调用及返回指令 有了丰富的控制转移类指令 就能很方便地实现程序的向前 向后跳转 并根据条件分支运行 循环运行 调用子程序等 1 无条件转移指令无条件转移指令有如下4条指令 它们提供了不同的转移范围和寻址方式 LJMPaddr16 PC addr16AJMPaddr11 PC PC 2 PC 10 0 addr11SJMPrel PC PC 2 relJMP A DPTR PC A DPTR 1 LJMP 长转移指令 三字节指令 提供16位目标地址addr16 LJMPaddr16例 在程序存储器0000H单元存放一条指令 LJMP3000H PC 3000H则上电复位后程序将跳到3000H单元去执行用户程序 2 AJMP 绝对转移指令 双字节指令 该指令执行后 程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2 构成当前PC值 取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址 即 PC 转移目的地址 由于11位地址的范围是00000000000 11111111111 即2KB范围 而目标地址的高5位是由PC当前值固定的 所以程序可转移的位置只能是和PC当前值在同一2KB的范围之内 本指令转移可以向前也可以向后 指令执行后不影响状态标志位 例 若AJMP指令地址 PC 2300H 执行指令 AJMP0FFH PC PC 2 2302H结果为 转移目的地址 PC 20FFH 程序向前转向20FFH单元开始执行 又如 若AJMP指令地址 PC 2FFFH 执行指令 AJMP0FFH PC PC 2 3001H结果为 转移目的地址 PC 30FFH 程序向后转向30FFH单元开始执行 3 SJMP 短转移指令 双字节指令 指令的操作数是相对地址Rel 由于rel是带符号的偏移量 所以程序可以无条件向前或向后转移 转移的范围是在SJMP指令所在地址PC值 源地址 加该指令字节数2的基础上 以 128 127为偏移量 256个单元 的范围内实现相对短转移 即 目的地址 源地址 2 relrel的计算公式如下 向前转移 rel FE 源地址与目的地址差的绝对值 向后转移 rel 源地址与目的地址差的绝对值 2若rel值大于80H 程序向前转移 若rel值小于80H 则程序向后转移 例 设 PC 2100H 若转向215CH去执行程序 则 rel 215CH 2100H 2H 5AH 4 JMP 间接长转移指令 JMP A DPTR它是以数据指针DPTR的内容为基址 以累加器A的内容为相对偏移量 在64KB范围内可无条件转移的单字节指令 该指令的特点是转移地址可以在程序运行中加以改变 例 根据累加器A的数值 转不同处理程序的入口 MOVDPTR TABLE 表首址送DPTRJMP A DPTR 依据A值转移TABLE AJMPTAB1 当 A 0时转TAB1执行AJMPTAB2 当 A 2时转TAB2执行AJMPTAB3 当 A 4时转TAB3执行 2 条件转移指令 判跳指令 条件转移指令是当某种条件满足时 程序转移执行 条件不满足时 程序仍按原来顺序继续执行 条件转移的条件可以是上一条指令或者更前一条指令的执行结果 常体现在标志位上 也可以是条件转移指令本身包含的某种运算结果 1 累加器判零转移指令这类指令有2条 JZrel 若 A 0 则 PC PC 2 rel若 A 0 则 PC PC 2JNZrel 若 A 0 则 PC PC 2 rel若 A 0 则 PC PC 2 例 将外部数据RAM的一个数据块传送到内部数据RAM 两者的首址分别为DATA1和DATA2 遇到传送的数据为零时停止 解 外部RAM向内部RAM的数据传送一定要以累加器A作为过渡 利用判零条件转移正好可以判别是否要继续传送或者终止 完成数据传送的参考程序如下 MOVR0 DATA1 外部数据块首址送R0MOVR1 DATA2 内部数据块首址送R1LOOP MOVXA R0 取外部RAM数据入AHERE JZHERE 数据为零则终止传送MOV R1 A 数据传送至内部RAM单元INCR0 修改地址指针 指向下一数据地址INCR1SJMPLOOP 循环取数 2 比较转移指令比较转移指令共有4条 其一般格式为 CJNE目的操作数 源操作数这组指令是先对两个规定的操作数进行比较 根据比较的结果来决定是否转移到目的地址 4条比较转移指令如下 CJNEA data relCJNEA direct relCJNE Ri data relCJNERn data rel 以上4条指令的差别仅在于操作数的寻址方式不同 均完成以下操作 若目的操作数 源操作数 则 PC PC 3 若目的操作数 源操作数 则 PC PC 3 rel CY 0 若目的操作数 源操作数 则 PC PC 3 rel CY 1 偏移量rel的计算公式为 向前转移 rel FD 源地址与目的地址差的绝对值 向后转移 rel 源地址与目的地址差的绝对值 3 3 减1条件转移指令 循环转移指令 减1条件转移指令有如下两条 DJNZdirect rel direct direct 1若 direct 0 则 PC PC 3否则 PC PC 3 relDJNZRn rel 若 Rn 0 则 PC PC 2否则 PC PC 2 rel LCALLaddr16子程序长调用指令 可在64K范围内调用子程序 3 子程序调用及返回 LCALL ACALL RET RETI 4条 ACALLaddr11子程序绝对调用指令 可在指令所在的2K范围内调用子程序 RET子程序返回指令 子程序结束并返回调用的下一条指令 RETI中断服务子程序返回指令 中断结束 返回被打断处的下一条指令 2 3 5位操作类指令 位操作又称为布尔变量操作 它是以位 bit 作为单位来进行运算和操作的 MCS 51系列单片机内设置了一个位处理器 布尔处理机 它有自己的累加器 借用进位标志CY 自己的存储器 即位寻址区中的各位 也有完成位操作的运算器等 这一组指令的操作对象是内部RAM中的位寻址区 即20H 2FH中连续的128位 位地址00H 7FH 以及特殊功能寄存器SFR中可进行位寻址的各位 在指令中 位地址的表示方法主要有以下4种 均以程序状态字寄存器PSW的第五位F0标志为例说明 直接位地址表示方式 如D5H 点操作符表示 说明是什么寄存器的什么位 方式 如PSW 5 说明是PSW的第五位 位名称表示方法 如F0 用户定义名表示方式 如用户定义用FLG这一名称 位符号地址 来代替F0 位操作类指令 17条 位操作类指令以位为单位进行逻辑运算及操作 可分为4种 位传送 MOV 2条 位清零 置位 CLR SETB 4条 位逻辑与 或 非运算 ANL ORL CPL 6条 位条件转移 JC JNC JB JNB JBC 5条 位传送指令 2条 MOVC bit C bit MOVbit C bit C 注 bit表示位地址 位清零 置位指令 4条 CLRbit 或C bit或C 0 SETBbit 或C bit或C 1 位逻辑与 或 非指令 6条 ANLC bit 或 bit ORLC bit 或 bit CPLbit 或C 注 bit 表示对bit位先取反然后再参加运算 判位条件转移指令 5条 JCrel Cy 1 就跳转 否则不跳转 JNCrel Cy 1 就跳转 否则不跳转 JBbit rel bit 1 就跳转 否则不跳转 JNBbit rel bit 1 就跳转 否则不跳转 JBCbit rel bit 1 就先将其清零再跳转 否则 不动此位也不跳转 例 比较内部RAMI J单元中A B两数的大小 若A B 则使内部RAM的位K置1 若A B 则大数存M单元 小数存N单元 设A B数均为带符号数 以补码数存入I J中 带符号数比较子程序的比较过程示意图 MOVA I A数送累加器AANLA 80H 判A数的正负JNZNEG A 0则转至NEGMOVA J B数送累加器AANLA 80H 判B数的正负JNZBIG1 A 0 B 0 转BIG1SJMPCOMP A 0 B 0 转COMPNEG MOVA J B数送累加器AANLA 80H 判B数的正负JZSMALL A 0 B 0 转SMALLCOMP MOVA I A数送累加器ACJNEA J BIG A B则转BIGSETBK A B 位K置1RETBIG JCSMALL A B转SMALLBIG1 MOVM I 大数A存入M单元MOVN J 小数B存入N单元RETSMALL MOVM J 大数B存入M单元MOVN I 小数A存入N单元RET 小结 MCS 51指令集 五大类功能 数据传送类指令 29条 算术运算类指令 24条 逻辑运算及移位类指令 24条 控制转移类指令 17条 位操作 布尔操作 类指令 17条 内部存储器间传送 MOV 16条 外部数据存储器RAM与累加器间传送 MOVX 4条 程序存储器ROM向累加器传送 MOVC 2条 数据交换 XCH XCHD SWAP 5条 堆栈操作 PUSH POP 2条 一 数据传送类指令 5种 29条 小结 二 算术运算类指令 6种 24条 加法运算 ADD 4条 带进位加法运算 ADDC 4条 带借位减法运算 SUBB 4条 加1 减1操作 INC DEC 9条 单字节乘 除法运算 MUL DIV 2条 十进制调整 DAA 1条 小结 三 逻辑运算及移位指令 5种 24条 逻辑与运算 ANL 6条 逻辑或运算 ORL 6条 逻辑异或运算 XRL 6条 累加器清零 取反 CLR CPL 2条 累加器移位操作 RL RLC RR RRC 4条 小结 四 控制转移类指令 4种 17条 无条件转移 LJMP AJMP SJMP JMP 4条 条件转移 判断跳转 JZ JNZ CJNE DJNZ 8条 子程序调用及返回 LCALL ACALL RET RETI 4条 空操作 NOP 1条 小结 五 位操作类指令 4种17条 位传送 MOV 2条 位清零 置位 CLR SETB 4条 位逻辑与 或 非运算 ANL ORL CPL 6条 位条件转移 JC JNC JB JNB JBC 5条 小结
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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