




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习情景二 AT89S52单片机寻址方式及指令系统 学习目标 熟练掌握MCS 51单片机的寻址方式和指令系统能编写简单完整的程序掌握标志位技能目标 能够对工作任务进行分析 找出相应算法 绘制流程图 能够根据流程图编写程序 会使用KeilC51 Vision2集成开发环境 观察与修改存储器 项目一片内存储器及特殊功能寄存器 第一部分项目要求在KeilC51 Vision2集成开发环境下 在编辑窗口编辑给定程序 观察片内RAM工作寄存器区 内部RAM位寻址区 RAM间接与直接寄存器区 内部RAM间接寻址区 内部RAM特殊功能寄存器区 外部RAM区 XRAM 的数据 并根据要求进行修改 说明每条指令的寻址方式 第二部分相关知识 AT89S52单片机寻址方式AT89S52单片机指令寻址AT89S52单片机标志位MSC 51单片机指令系统简介 一 AT89S52单片机寻址方式 寻址方式是指CPU寻找操作数或操作数地址的方法 具体来说寻址方式就是如何找到存放操作数的地址 把操作数提取出来的方法 它是计算机的重要性能指标之一 也是汇编语言程序设计中最基本的内容之一 二 AT89S52单片机指令寻址 存放指令代码的地址称指令地址 指令存放是在程序存储器中 是按顺序存放的 执行时也是按指令地址顺序执行 除非是转移 存放数据的地址称操作数地址 数据的存放是任意的 无规律 操作数的来源为 A 操作数在指令中B 操作数在存储器中C 操作数在寄存器中D 操作数在I O端口中 寻址方式 7种立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址 一 立即寻址是指操作数在指令操作数域直接给出 例 MOVA 25H A 25HMOVDPTR 1856H DPTR 1856H 图2 1立即寻址 MOVA 25H DPH DPL 图2 2立即寻址 MOVDPTR 1856H 二 直接寻址是指操作数的地址直接在指令操作数域给出 可访问 种地址空间 1 内部RAM低128单元 00 7FHMOVA 3CH A 3CH 2 特殊功能寄存器SFR 唯一方式80 0FF MOVA P1 A P1口 MOVA 90H 3 211个位地址空间MOVC 30H Cy 30H MOVA 30H A 30H 例 MOVA 30H 机器码为E530H指令功能是把直接地址30H单元的内容送累加器A 即 30H A 如图所示 34H 34H 例 MOVDPTR 1234h DPH 12H DPL 34H 注意 立即数前加 号 以区别直接地址 例如 MOVA 30H A 30HMOVA 30H A 30H 三 寄存器寻址 操作数存放在寄存器中 MOVA R0MOVR0 01001111B 工作寄存器 00H 1FH RS1RS0寄存器组片内RAM地址寄存器00第0组00H 07HR0 R701第1组08H 0FHR0 R710第2组10H 17HR0 R711第3组18H 1FHR0 R7 SETBRS0MOVR3 56H 寄存器为R0 R7 A B DPTR C 例2 6 MOVA R1 A R1 例如 MOVA R3 机器码为0EBH指令功能是把当前R3中的操作数送累加器A 指令执行示意图如图所示 设 R3 12H 四 寄存器间接寻址 是指操作数存放在以寄存器内容为地址的单元中 寄存器中存放的是操作数的地址 而操作数在存储器中 通过寄存器可间接得到 用符号 表示 寄存器间接寻址可寻址范围如下 1 内部RAM低128单元 地址范围00H 7FH 用Ri i 0 1 和SP作为间址寄存器 2 与P2口配合使用 用Ri指示低8位地址 可寻址片外数据存储器或I O口的64kB区域 3 DPTR间接寻址寄存器 可寻址片外程序存储器或数据存储器包括I O口的各自的64kB区域 可间接寻址的寄存器为R0 R1 SP DPTR 例如 MOVA R1 机器码E7H设 R1 60H 60H 50H 执行结果 A 50H 该指令执行过程如图所示 五 变址寻址 基址寄存器 变址寄存器的间接寻址方式DPTR PCAMOVCA A DPTR A DPTR A MOVCA A PC A PC A JMP A DPTR PC A DPTR MOVCA A DPTR A A DPTR 指令功能为DPTR中的内容与A中的内容相加 其和所指示的单元的数送入累加器A 如图所示 图2 6变址寻址 MOVCA A DPTR 六 相对寻址是以程序计数器PC的当前值为基地址 加上指令中给出的偏移量rel作为转移目的地址 转移目的地址 下一条指令地址 rel 例2 9 JC80H JCrel 4085H设rel 85H Cy 1 目标地址 PC当前值 七 位寻址bit 位寻址是指对一些内部RAM和特殊功能寄存器进行位操作时的寻址方式 位寻址范围 1 内部RAM的位寻址区 共16个单元的128位 单元地址为20H 2FH 位地址为00H 7FH 可用直接位地址或字节地址加位的表示方法 例如 MOVC 7AH或MOVC 2FH 2 2 特殊功能寄存器SFR可供位寻址的专用寄存器共11个 实有位地址位83位 位地址有4种表达方式 以对程序状态寄存器PSW辅助进位位AC进行操作为例 PSWCyACF0RS1RS0OVPD0HD7HD6HD0H 1 直接使用位地址3 单元地址加位的表示法MOVC 0D6HMOVC 0D0H 62 位名称表示法4 专用寄存器符号加位的表示法MOVC ACMOVC PSW 6 寻址方式与寻址空间 寻址方式与寻址空间 续 三 AT89S52单片机标志位 四 AT89S52单片机指令系统简介 80C51指令系统有42种助记符 代表了33种功能 指令助记符与各种可能的寻址方式相结合 共构成111条指令 指令分类 数据传送类指令 28 传送类指令举例算术运算类指令 24 逻辑运算类指令 25 控制转移类指令 17 布尔处理类指令 17 指令是指单片机执行某种操作的命令 指令系统 或指令集 是指单片机能够识别和执行的全部指令 用汇编语言编写的程序称为源程序 为完成某项任务 人们按要求编排的指令操作序列称为程序 例2 11 要做 10 20 的加法 可写成 汇编语言程序机器语言程序MOVA 0AH740AHADDA 14H2414H 一 指令及程序的概念 1 汇编语言指令格式 标号 操作码 目的操作数 源操作数 注释 例如 Loop ADDA R0 A R0 A 2 机器语言指令格式 二 指令格式 三 指令系统中使用的常用符号Rn 当前寄存器工作区中的寄存器 其中 n 0 7 direct 内部数据存储器地址 可指定一个内部RAM单元 0 127 或一个专用寄存器 128 255 Ri 通过R1或R0间接寻址 指定数据存储器RAM中的一个单元 0 255 data 在指令中指明8位常数 datal6 在指令中指明16位常数 addrll 11位目的地址 用在ACALL或AJMP指令中 表示调用或转移地址 寻址范围为2KB addrl6 16位目的地址 用在LCALL或LJMP指令中 表示调用或转换地址 寻址范围为64KB rel 8位偏移量 用补码表示 用在SJMP等转移指令中 寻址范围为 128 127 bit 表示位寻址空间中的位地址 8位 寻址范围为0 FFH 四 AT89S52指令系统助记符 指令系统有42种助记符 代表了33种功能 指令助记符与各种可能的寻址方式相结合 共构成111条指令 按指令的功能可分为五大类 为了便于理解 加强记忆 给出每个助记符的解释 1 数据传送类指令 7种助记符 28条指令 MOV 对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送 MOVC 读程序存储器数据表格的数据传送 MOVX 对外部RAM的数据传送 XCH 字节交换 XCHD 低半字节交换 PUSH 入栈 POP 出栈 例1 MOVA 40H A 40H MOVA 40H A 40H注意40H和 40H的区别 例2 MOVA R1 A R1 MOVA R1 A R1 注意 R1和R1的区别 例3 MOV90H 40H P1 40HMOVP1 40H PI 40HMOVR0 90H R0 90HMOV R0 40H 90H 40H注意 1 目的操作数不能采用立即寻址 2 Ri中的i范围为0和1 3 Rn中的n的范围为0 7 4 每条指令中最多只能有1个Rn或 Ri 例4 以下指令都是错误的 MOV 30H 40HMOVA R2MOVR1 R3MOVR1 R0MOV R1 R2MOV R0 R1 例5 MOVA 60H A 60H 目的操作数为寄存器寻址MOV0E0H 60H A 60H 目的操作数为直接寻址MOV09H 40H 09H 40H 目的操作数为直接寻址MOVR1 40H R1 40H 目的操作数为寄存器寻址 例6 分析程序的执行结果 设内部RAM中30H单元的内容为80H 试分析执行下面程序后各有关单元的内容 MOV60H 30H 60H 30HMOVR0 60H R0 60HMOVA R0 A 30HMOVR1 A R1 30HMOV40H R1 40H 80H程序执行结果为 A 30H R0 60H R1 30H 60H 30H 40H 80H 30H 80H 例7 将内部RAM80H单元的内容送入外部RAM70H单元 程序如下 MOVR0 80HMOVA R0MOVR0 70HMOVX R0 A此例中访问内部RAM和访问外部RAM均通过R0间接寻址 不同的是访问内部RAM用操作码MOV 访问外部RAM使用操作码MOVX 二者不能混淆 PUSHdirect sp sp 1 sp direct POPdirect direct sp sp sp 1 堆栈操作指令 1 堆栈一种数据结构 是 先进后出 线性表 2 堆栈操作 压入PUSH 弹出POP3 堆栈区 占片内RAM中连续的存储单元复位后 系统自动将SP指针指向07H用户可将堆栈区设在30H 7FH数据缓冲区内 MOVSP 5FH 堆栈有两种类型 向上生长型和向下生长型 如图所示 向上生长型堆栈 栈底在低地址单元 随着数据进栈 地址递增 SP的内容越来越大 指针上移 反之 随着数据的出栈 地址递减 SP的内容越来越小 指针下移 如 b 图所示 栈顶 栈顶 2 算术运算类指令 8种助记符 24条指令 ADD 加法 ADDC 带进位加法 SUBB 带借位减法 DA 十进制调整 INC 加1 DEC 减1 MUL 乘法 DIV 除法 例8 设20H 21H单元存放一个16位二进制数X1 高8位存于21H单元 30H 31H单元存放另一个16位二进制数X2 高8位存于31H单元 求X1 X2 和存于20H 21H 设两数之和不超过16位 解 程序如下 ORG2000HMOVR0 20HMOVR1 30HMOVA R0 取被加数低8位ADDA R1 求和的低8位MOV R0 A 存和的低8位INCR0 指向被加数高8位INCR1 指向加数高8位MOVA R0 取被加数高8位ADDCA R1 求和的高8位MOV R0 A 存和的高8位SJMP 停机END运算结果高8位存于21H单元 低8位存于20H单元 例9 试分析执行以下程序后 各有关单元的结果 解 程序如下 MOVR1 7FHMOV7EH 00HMOV7FH 40HDEC R1DECR1DEC R1执行结果 R1 7EH 7EH 0FFH 7FH 3FH 十进制调整指令DAA 调整累加器内容为BCD码这条指令跟在ADD或ADDC指令后 将相加后存放在累加器中的结果进行十进制调整 完成十进制加法运算功能 用BCD码表示的十进制数在进行相加时 应该是逢十进一 但AT89S52指令系统中没有逢十进一的指令 只有满十六进位的指令 所以用ADD和ADDC做加法后 要跟一个DAA指令进行十进制调整 DAA 若AC 1或 A 3 0 9 则A A 06H 若Cy 1或 A 7 4 9 则A A 十60H调整原则 形式上非BCD码需要加06H 60H 66H调整形式上是BCD码时 CYAC调整原则00不调整01 06H10 60H11 66H 例10 编写程序完成78 93的BCD码加法程序 并对调整过程进行分析 解 相应BCD码加法程序为 ORG3000HMOVA 78H A 78HADDA 93H A 78H 93H 0BHDAASJMP END执行结果 A 71H 考虑进位标志 Cy 1 操作结果为171 例11 已知第一个BCD码1234存放在30H和31H单元 其中 30H 34H 31H 12H 第二个BCD码5678存放在40H和41H单元 其中 40H 78H 41H 56H 求两数之和 结果存放在50H 51H单元中 分析 1234 5678 6912 51H 69H 50H 12H CLRC 清CMOVA 30H A 34HADDA 40H A 34H 78H ACHDAA 低4位 C 9A A 06H ACH 06H B2H高4位 B 9A A 60H B2H 60H 12HCY 1MOV50H A 50H 12HMOVA 31H A 12HADDCA 41H A 12H 56H CY 69HDAA 低4位 9不用调整高4位 6不用调整MOV51H A 51H 69H 乘法指令 MULAB A A B低字节 B A B高字节指令功能 是把累加器A和寄存器B中两个8位无符号二进制数相乘 积的低8位存在累加器A中 积的高8位存在B寄存器中 运算结果将对Cy OV P标志位产生如下影响 1 进位标志位Cy总是清 0 2 P标志仍为A累加器的奇偶校验位 3 当积大于255 B中的内容不为0 时 则OV 1 否则OV 0 例12 设 A 80H B 21H 执行指令 MULAB结果为 A 80H B 16H OV 1 Cy 0 P 1 除法指令 DIVAB A A B 商 B A B 余数 该指令把累加器A中的8位无符号整数除以寄存器B中8位无符号整数 所得商存在A中 余数存在B中 对标志位的影响如下 1 对Cy和P标志的影响与乘法时相同 2 当除数为0时 除法没有意义 OV 1 否则OV 0 表示除法操作是合理的 例13 设 A 0B6H B 0FH 执行指令 DIVAB结果为 A 0CH B 02H OV 0 Cy 0 P 0 3 逻辑运算及位移类指令 10种助记符 17条指令 ANL 逻辑与 ORL 逻辑或 XRL 逻辑异或 CRL 清0 CPL 取反 RL 循环左移 RLC 带进位循环左移 RR 循环右移 RRC 带进位循环右移 SWAP 低4位与高4位交换 例14 将累加器A中的压缩BCD码拆成二个字节的非压缩BCD码 低位放入30H 高位放人31H单元中 程序如下 PUSHACC 保存A中的内容ANLA 0FH 清除高4位 保留低4位MOV30H A 低位存人30HPOPACC 恢复A中原数据SWAPA 高 低4位互换ANLA 0FH 清除高4位 保留低4位MOV31H A 高位存入31H 例15 将累加器A中的高4位由P1口的高4位输出 P1口的低4位不变 编程如下 ANLA 11110000B A 11110000B A 保存A中的高4位 低4位为0MOV40H A A 40H MOVA P1 P1 AANLA 00001111B A 00001111B A 保存P1中的低4位 ORLA 40H 40H A A保留了A中的高4位 P1中的低4位MOVP1 A A P1由P1输出指定的内容END 例16 编制程序把累加器A中低4位送人P1口低4位 P1口高4位不变 程序如下 ANLA 0FH 取出A中低4位 高4位为0ANLP1 0F0H 使P1口低4位为0 高4位不变ORLP1 A 字节装配 例17 执行下面的程序段 观察累加器A中内容的变化 MOVA 01H A 01HRLA A 02HRLA A 04HRLA A 08H 例18 编制程序将M1 M1 1单元中存放的16位二进制数扩大到二倍 设该数低8位在M1单元中 扩大后小于65536 CLRC Cy 0MOVR0 M1 操作数低8位地址送R0MOVA R0 A 操作数低8位RLCA 低8位操作数左移 低位补0 最高位在Cy中MOV R0 A 送回M1单元INCR0 R0指向MI 1单元MOVA R0 A 操作数高8位RLCA 高8位操作数左移 M1最高位通过Cy移入最低位MOV R0 A 送回M1 1单元 4 控制转移类指令 18种助记符 17条指令 ACALL 子程序绝对调用 LCALL 子程序长调用 RET 子程序返回 RETI 中断返回 AJMP 绝对转移 LJMP 长转移 SJMP 短转移 JMP 转移 CJNE 比较不相等则转移 DJNZ 减1后不为0则转移 JZ 结果为0则转移 JNZ 结果不为0 结果为1 则转移 JC 有进位位则转移 JNC 无进位位则转移 JB 位为1则转移 JNB 位为0则转移 JBC 位为1则转移 并清除该位 NOP 空操作 1 16位地址的无条件转移指令LJMPaddrl6 PC addrl6实现在64KB全地址空间范围内的无条件转移 因而又称为长转移指令 2 11位地址的无条件转移指令AJMPaddrll PC PC 2 PC10 0 addrl1转移范围 2K PC15 11不变指令常称为绝对转移指令 因为地址高5位保持不变 仅低11位发生变化 因此寻址范围为该指令地址加2后 向下的2K区域 无条件转移指令 4条 00001a10a9a8 a7a6 a0 2FFFHAJMPL1当前 PC 2FFFH 2 3001H转移地址PC 00110 保持高5位不变 L1地址标号范围3000H 37FFH若L1 35BCH 5页 则指令码为A1BCH例 判断下面两种情况 AJMP是否能正确转移到L0处去 AJMPL0 L0 MOVA 12H 设 AJMPL0 存放在程序存储器27F0H单元 MOVA 12H 存放在程序存储器2800H单元 设 AJMPL0 存放在程序存储器27FEH单元 MOVA 12H 存放在程序存储器2FBCH单元 分析 第一种情况 CPU执行到该条指令时 AJMP是二字节指令 PC的当前值 27F0H 2 27F2H 0010011111110010目的地址 2800H 0010100000000000因为两条指令PC值的高5位不相同 所以无法正确转移 第二种情况 PC的当前值 27FEH 2 2800H 0010100000000000目的地址 2FBCH 0010111110111100因为两条指令PC值的高5位相同 所以可以正确转移 例19 根据累加器A中命令键键值 设计命令键操作程序入口跳转表 CLRC 清进位RLCA 键值乘2 左移MOVDPTR JPTAB 指向命令键跳转表首址JMP A DPTR 散转入命令键入口JPTAB AJMPCCS0 双字节指令AJMPCCS1 双字节指令AJMPCCS2 双字节指令从程序中看出 当 A 00H 散转到CCS0 当 A 01H时 散转到CCS1 由于AJMP是双字节指令 散转前A中键值先乘2 例20 设累加器A中存放待处理命令的编号 0 n n 85 程序存储器中存放着标号为PGTB的转移表 则执行以下程序 将根据A内命令编号转向相应的命令处理程序 PG MOVB 3 A A 3MULABMOVDPTR PGTB DPTR 转移表首址JMP A十DPTRPGTB LIMPPG0 转向命令0处理入口LIMPPGl 转向命令1处理入口 LJMPPGn 转向命令n处理入口 例21 编制程序 将内部RAM70H字节起始的16个数送外部RAM1000H字节起始的16个单元 MOVR7 16 数据长度送R7MOVR0 70H 数据块起始地址送R0MOVDPTR 1000H 存放区起始地址送DPTRLOOP MOVA R0 从内RAM取数据MOVX DPTR A 数据送外RAMINC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《毫米、分米的认识》教学设计-2024-2025学年三年级上册数学人教版
- 初中分班考试试卷及答案
- 2025年全国化工自动化仪表作业证考试题库(含答案)
- 2025年高考生物试题分类汇编种群及其动态(原卷版)
- 蒸汽包安全知识培训内容课件
- 2025年陕西省中考生物试题及解析
- 2025混凝土承包的合同范本
- 2025科技创新贷款合同
- 葡萄酒知识培训教程
- 消毒管理办法题目及答案
- JCT799-2016 装饰石膏板标准
- 第1课 美术作品的创作 课件-2023-2024学年高中美术人教版(2019)美术鉴赏
- 精麻药品培训试题
- 我多年总结的健身功法(图示)
- 太阴病篇概述
- DSCQ安装操作培训
- 污水处理厂安全文明施工组织设计
- GB/T 19627-2005粒度分析光子相关光谱法
- 国际投资学(investment)讲义课件
- 施工机具进场检查验收记录
- 二年级健康成长上册教案
评论
0/150
提交评论