




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章MCS 51单片机指令系统 3 1MCS 51单片机指令系统简介3 2MCS 51单片机指令系统3 3汇编语言程序设计3 4MCS 51汇编语言实用程序设计 略 退出 3 1MCS 51单片机指令系统简介 MCS 51单片机能够识别并执行的指令共有111条 这111条指令 构成了MCS 51单片机的指令系统 3 1 1MCS 51单片机指令系统的分类1 MCS 51单片机指令系统按指令所占的字节数可分为以下三类 1 单字节指令 49条 2 双字节指令 46条 3 三字节指令 16条 2 按指令的执行时间可分为以下三类 1 单周期指令 65条 2 双周期指令 44条 3 四周期指令 2条 3 按指令的功能可分为以下五类 1 数据传送类指令 29条 2 算术运算类指令 24条 3 逻辑运算类指令 24条 4 控制转移类指令 17条 5 位操作类指令 17条 3 1 2指令格式MCS 51单片机汇编语言指令由操作码和操作数两部分组成 指令格式为 操作码 操作数 3 1 3指令中的常用符号 Rn 表示当前工作寄存器R0 R7中的一个 Ri 表示寄存器间接寻址 常常作间接寻址的地址指针 其中Ri代表R0和R1寄存器中的一个 Direct 表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址 对SFR而言 既可使用它的物理地址 也可直接使用它的名字 date 表示8位立即数 即8位常数 取值范围为 00H 0FFH date16 表示16位立即数 即16位常数 取值范围为 0000H 0FFFFH addr16 表示16位地址 addr11 表示11位地址 rel 用补码形式表示的地址偏移量 取值范围为 128 127 Bit 表示内部RAM和SFR中的具有位寻址功能的位地址 SFR中的位地址可以直接出现在指令中 为了阅读方便 往往也可用SFR的名字和所在的数位表示 如 表示PSW中奇偶校验位 可写成D0H 也可写成PSW 0的形式出现在指令中 表示间接寻址寄存器或基址寄存器的前缀符号 表示当前指令的地址 3 1 4寻址方式1 立即寻址立即寻址是将操作数直接存放在指令中 作为指令的一部分存放在代码段里 立即寻址中的数 称为立即数 例如指令 MOVA 30H2 直接寻址直接寻址是将操作数的地址直接存放在指令中 这种寻址方式的操作数只能存放在内部数据存贮器和特殊功能寄存器中 例如 MOVA 30H 3 寄存器寻址寄存器寻址是指操作数存放在以上所说的寄存器中 并且寻址时的寄存器已隐含在指令的操作码中 例如 MOVA R04 寄存器间址寄存器间址是指操作数存放在以寄存器内容为地址的单元中例如 MOVA R0 5 变址寻址变址寻址是指操作数存放在变址寄存器和基址寄存器的内容相加形成的数为地址的单元中 其中累加器A作变址寄存器 程序计数器PC或寄存器DPTR作基址寄存器 例如 MOVCA A DPTR6 相对寻址相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加 从而形成转移的目标地址 例如 JZ61H 7 位寻址位寻址 是指对片内RAM中20H 2FH中的128个位地址 以及SFR中的11个可进行位寻址的寄存器中的位地址寻址 例如 位寻址指令MOVC 20H 此指令是将RAM中位寻址区20H位地址中的内容 送给位累加器C 字节地址寻址指令 MOVA 20H 此指令是将内部RAM中20H单元中的内容送给累加器A 3 2MCS 51单片机指令系统 3 2 1数据传送类指令1 内部传送指令 16条 1 将数据传送到累加器A的指令 4条 2 将数据传送到工作寄存器Rn的指令 3条 3 将8位数据直接传送到直接地址 内部RAM单元或SFR寄存器 指令 5条 4 将8位数据传送到以间接寄存器寻址的RAM单元的指令 3条 5 16位数据传送指令 1条 3 3汇编语言程序设计 3 3 1汇编语言及其语句格式1 汇编语言这里介绍MCS 51单片机的汇编语言 2 汇编语言的语句格式一条汇编语言的语句包括四部分内容 标号 操作码 操作数和注释 其格式为 标号 操作码操作数 注释例如 LOOP MOVA 20H A 20H 3 3 2伪指令1 定位伪指令格式 ORGn2 定义字节伪指令格式 标号 DBX1 X2 Xn此伪指令的功能是把Xi存入从标号开始连续的单元中 3 定义双字节伪指令格式 标号 DWX1 X2 Xn此伪指令的功能是把Xi存入从标号开始的连续单元中 4 预留存贮区伪指令格式 DSnDSn从标号指定单元开始 预留n个单元的存贮区 5 赋值伪指令格式 字符名称xEQUn此指令的功能是将数据或地址n赋给字符名称 6 结束汇编指令格式 ENDEND指示源程序到结束 常将其放在汇编语言源程序的末尾 3 3 3汇编语言程序设计过程1 分析任务 确定算法或解题思路2 根据算法和解决思路画出程序流程图流程图是由一些框图和流程线组合而成 置的框图连接在一起 位于不同框图的圈内 应标注相同的字母 3 根据流程图编写程序4 上机调试程序3 3 4顺序结构程序设计按照程序编写的顺序 依次执行 任何复杂的程序 都含有较大成份的顺序结构程序 例3 8 将两位压缩BCD码转换成二进制数编程思路 a1a0 BCD a1 10 a0编程说明 待转换的两位压缩BCD码存放于R2 转换结果存回R2 程序流程图如图3 1所示 编程如下 START MOVA R2ANLA 0F0H 取高位BCD码SWAPAMOVB 0AHMVLABMOVR3 AMOVA R2ANLA 0FH 取低位BCD码ADDA R3MOVR2 AEND 3 3 5分支程序设计 例3 9 求符号函数的值1当X 0Y 0当X 0的值 1当X 0编程说明 设变量X存放在40H单元中 函数Y存放在41H单元中 此程序为三分支程序 程序流程图如图3 3所示 编程如下 START MOVA 40HJZCOMPJNBACC 7 POSTMOVA 81H 表示 1SJMPCOMPPOSI MOVA 01H 表示 1COMP MOV41H AEND 例3 10 求单字节有符号二进制数的补码 编程如下 CMPT MOVA 30HJNBACC 7 NCH A 0 不需要转换MOVC ACC 7 保存符号MOV10H CCPLAADDA 1MOVC 10HMOVACC 7 C 恢复符号NCH END 图3 5中 K的最大值一般为128 例3 1 用单片机作四则运算 编程说明 在单片机系统中 设置 四个运算键 这四个运算键的键值分别为0 1 2 3 键值存放在寄存器 2中 当其中一个按键按下时 进行相应的运算 P1口输入被加数 被减数 被乘数或被除数 以及运算结果的低8位或商 P3口输入加数 减数 乘数或除数 以及结果的高8位或余数 键号存放在累加器A中 程序流程图如图3 6所示 参考程序如下 START MOVP1 0FFHMOVP3 0FFHMOVDPTR TABLECLRCMOVA R2SUBBA 04HJNCERRORADDA 0 4H CLRCRLA 正确的散转偏移号 键号 2JMP A DPTRTABLE AJMPPRG0AJMPPRG1AJMPPRG2AJMPPRG3ERROR 错误处理 PRG0 MOVA P1 ADDA P3MOVP1 ACLRAADDCA 00H 进位位放入A中MOVP3 ARETPRG1 MOVA P1CLRCSUBBA P3MOVP1 A CLRARLCA 借位放入A中MOVP3 ARETPRG2 MOVA P1MOVB P3MULABMOVP1 AMOVP3 BRET PRG3 MOVA P1MOVB P3DIVABMOVP1 AMOVP3 BRET 例3 12 已知内存单元有16个二进制无符号数 分别存放在30H 3FH中 试求它们的累加和 并将其和数存放在R4 R5中 编程说明 存放16个二进制无符号数的首地址为30H 此循环程序的循环次数为16次 和数放在R4 R5中 程序流程如图3 8 参考程序如下 START MOVR0 30HMOVR2 10HMOVR4 00HMOVR5 00H LOOP MOVA R5ADDA R0MOVR5 AMOVA 00HADDCA R4MOVR4 AINCR0DJNZR2 LOOPEND 例3 13 将内部数据存贮器30H 4FH单元中的内容传送至外部数据存贮器2000H开始的单元中 解 编程说明 内部数据区首址 R0 30H外部数据区首址 DPTR 2000H循环次数 R2 32H程序流程如图3 9所示 参考程序如下 START MOVR0 30HMOVDPTR 2000HMOVR2 32HLOOP MOVA R0MOVX DPTR AINCR0INCDPTRDJNZR2 LOOPEND 例3 14 试将内部数据存储器中连续存放的N个数据由小到大进行排列 设 数据区首地址存于寄存器R0中 数据个数N存于寄存器R6中 程序流程如图3 10所示 参考程序如下 MOV30H R0 L1 DECR6MOVA R6MOVR3 AMOVR2 AMOVA R0MOVR1 AINCR1 L2 MOVA R0CLRCSUBBA R1JCL3MOVA R0XCHA R1MOV R0 AL3 INCR1DJNZR2 L2INCR0DJNZR3 L1MOVR0 30HEND 3 3 8查表程序设计 例3 15 利用查表的方法编写Y X2 X 0 1 2 9 的程序 编程说明 设变量X的值存放在内存30H单元中 变量Y的值存入内存31H单元 先用远查表指令MOVCA A DPTR编写程序 参考程序1 再用近查表指令MOVCA A PC编写程序 见参考程序2 参考程序1 ORG1000HSTART MOVA 30HMOVDPTR TABLEMOVCA A DPTRMOV31H ATABLE DB0 1 4 9 16DB25 36 49 64 81END 参考程序2 ORG1000HSTART MOVA 30HADDA 02HMOVCA A PCMOV31H ADB0 1 4 9 16DB25 36 49 64 81END 例3 16 将1位十六进制数 转换成相应ASC 码 用计算求解和查表求解 进行比较 1 计算求解 编程说明 设待转换的一位十六进制数存放在40H单元中 转换后的ASC 码仍存放在40H中 编程思路 十六进制数0 9的ASC 为41H 46H 当待转换的数 9时 加30H 既是其对应的ASC 码 当待转换的数 9时 加37H 程序流程如图3 11所示 参考程序如下 ORG0100HMOVA 40HANLA 0FHCLRCSUBBA 0AH JCNEXTADDA 0AHADDA 37HSJMPSAVENEXT ADDA 0AHADDA 30HSAVE MOV40H AEND 2 查表求解 ORG0100HMOVA 40HANLA 0FHADDA 02HMOVCA A PCMOV40H ADB 0 1 2 3 4 5 DB 6 7 8 9 A B DB C D E F END 3 3 9子程序设计1 子程序的调用与返回MCS 51单片机有两条子程序调用指令 ACALLaddr11 LCALLaddr16 一条子程序返回指令RET 2 保存与恢复寄存器内容例如 SUB1 PUSHPSWPUSHAPUSHR6 此处省略了子程序的内容 POPR6POPAPUSHPSW 3 子程序的参数传递主程序在调用子程序时 经常需要传送一些参数 子程序运行完后也经常将一些参数回送给主程序 这叫参数传递 例3 17 编程计算c a2 b2 编程说明 这个问题中 计算某数的平方可以用子程序来实现 两次调用该子程序 并求和便得到所需结果 设a b分别存于内部RAM的30H 31H单元 结果C存于内部RAM的40H单元 参数传递 主程序中 将某数存放到累加器A中 作为子程序的入口参数 子程序中 将所求数的平方值存放在累加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版科技园区廉洁从业自律合作协议
- 二零二五年大理石石材市场调研与分析服务协议
- 二零二五年度旅游服务标准化合同协议
- 2025版南通市区人才公寓租赁管理协议
- 2025版艺术品担保答辩状范本编制合同
- 2025至2030年中国抗菌肽生物兽药行业发展监测及市场发展潜力预测报告
- 二零二五版智能化设备租赁与操作培训合同
- 二零二五年度仓储物流场地租赁协议范本
- 二零二五年度专业二手车买卖及售后服务合作协议
- 二零二五年度土地储备使用权转让合同
- 鼓胀中医护理
- 2024年青海省门源回族自治县事业单位公开招聘村务工作者笔试题带答案
- 设备整厂出售合同协议
- 2025-2030中国高k和ALD和和CVD金属前体行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国缝纫机器人行业市场发展趋势与前景展望战略研究报告
- 2025年4月12日衢州事业单位及市直遴选(选调)笔试真题及答案解析
- 油气仓储物流优化-全面剖析
- 妊娠剧吐护理查房
- 机械设备维护手册
- 广东省五校(朝汕实验、高州中学、石门、湛江一中等)2024-2025学年高三上学期开学联考数学试题(解析版)
- 城市轨道交通列车司机初级工理论习题集
评论
0/150
提交评论