




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理与应用PrinciplesandApplicationsofMicro controller 汽车与交通工程学院 Email chenlinlin Tel主讲 陈林林 聊城大学 第4章MCS 51汇编语言程序设计基础 程序设计的步骤和伪指令 源程序 目标代码 编辑和汇编的基本概念 顺序程序 分支程序 循环程序 子程序的设计 算术运算和数码转制程序设计 本章主要内容 4 1汇编语言程序设计基础 4 2顺序程序设计 4 3分支程序设计 4 4循环程序设计 4 5子程序设计 4 6算术运算和数码转制程序设计 4 1汇编语言程序设计基础 1 机器语言 4 1 1程序设计语言简介 2 汇编语言 用二进制编码表示每条指令 计算机能够直接执行用机器语言编出的机器码程序 不同种类的计算机 由于其内部结构不完全相同 它的机器码指令也不一定相同 符号化的机器语言 它用一些容易理解和记忆的符号代替机器码指令 又称为助记符语言 助记符指令与机器码指令一一对应 不同结构的计算机 汇编指令不相同 4 1 1程序设计语言简介 汇编语言和特点 对比机器码 汇编语言克服了机器语言的缺点 方便了用户记忆指令和编写程序 但用汇编语言编写的源程序需用汇编程序 翻译 成机器码后方可执行 采用汇编语言编写程序 可以直接访问和操作单片机中的寄存器及存储器单元 对数据的处理表述的非常具体 因此 在计算机实时测试和控制领域中得到了广泛应用 接近自然语言和数学语言的算法语言 具有直观 通用等特点 不象机器语言和汇编语言编写程序需要完全了解CPU硬件结构 且程序不能移植 3 高级语言 4 1 2汇编语言程序设计步骤 1 分析问题 确定算法程序设计中最重要的一步 设计人员必须认真 仔细地考虑系统需要解决的各种问题以及将来系统功能的进一步扩展 明确知道程序要解决的问题和接收 处理 发送的数据范围以及使用什么样的算法 2 画流程图流程图是用各种图形 符号 有向线段来直观地表示程序执行的步骤和顺序 它可使人们通过流程图的基本线索 对全局有完整的了解 4 1 2汇编语言程序设计步骤 4 调试 测试程序调试是利用仿真器等开发工具 采用单步 设断点 连续运行等方法排除程序中的错误 完善程序的功能 3 编写汇编语言源程序根据流程图用汇编语言指令实现流程图的每一个步骤 从而编写出汇编语言的源程序 4 1 3伪指令 1 汇编起始伪指令ORG 格式 ORG16位地址功能 规定该指令后面的源程序汇编后所产生的目标程序存放的起始地址 例4 1ORG2000HMAIN MOVA 50H 2 汇编结束伪指令END 格式 END功能 通知汇编程序结束汇编 汇编时遇到END指令 则结束所有汇编工作 而END之后的所有指令将不予处理 4 1 3伪指令 3 赋值伪指令EQU 格式 字符名称EQU赋值项功能 把该伪指令右边的值赋项给左边用户定义的符号 例4 3COUNTEQU64HMOVA COUNT A 64H 注意 使用EQU伪指令时 必须先赋值 后使用 故该指令通常放在程序开头 而赋值后的 字符 其值在整个程序中不改变 并可多次使用 4 1 3伪指令 4 定义数据字节伪指令DB 格式 标号 DB字节数据表功能 从指定的地址单元开始 定义若干个字节的数据或ASCII码字符 例4 4ORG2000HTAB DB99H 00H 01H 02H 03H 04HSTR DB ABC 以上伪指令经汇编后在程序储存器中的2000H 2008H单元的内容为 99H 00H 01H 02H 03H 04H 41H 42H 43H 4 1 3伪指令 5 定义数据字节伪指令DW 格式 标号 DW16位数据表功能 从指定的地址单元开始 定义若干个字数据 16位 例4 5ORG2000HTAB DW1234H 50H CD 以上伪指令经汇编后 程序存储器中的2000H 2005H单元的内容为 12H 34H 00H 50H 43H 44H 4 1 3伪指令 6 数据地址赋值伪指令DATA 格式 标号DATA表达式功能 把由表达式指定的数据地址或代码地址赋予规定的标号 DATA伪指令的功能和EQU伪指令相似 但DATA伪指令所定义的符号可先使用后定义 在程序中它常用来定义数据地址 该语句一般放在程序的开头和末尾 4 1 3伪指令 7 定义存储区伪指令DS 格式 标号 DS表达式功能 从指定的地址单元开始 保留由表达式指定的若干字节空间 以备程序使用 例4 6ORG2000HDS05DB11H 22H 33H 以上伪指令经汇编后从2000H单元开始 保留5个字节的存储单元 从2005H单元开始连续存放11H 22H 33H代码 4 1 3伪指令 8 位地址赋值伪指令BIT 格式 字符名称BIT位地址功能 把位地址赋予规定的字符名称 常用于定义位符号地址 例4 7AABITP1 7BBBITP1 6汇编后P1 7和P1 6 位地址 赋给变量AA和BB 在程序中就可以把AA和BB作为位地址使用 上面介绍了MCS 51单片机汇编语言中常用的伪指令 在编写汇编语言源程序时 必须严格按照汇编语言的规范书写 4 2顺序程序设计 顺序程序 又称简单程序 是一种最简单 最基本的程序 程序按编写的顺序从第一条指令开始执行 直到最后一条指令为止 计算机是按指令在存储器中存放的先后次序来顺序执行程序的 它会在PC控制下顺序执行 这种程序虽然简单 但它是构成复杂程序的基础 例4 9将两个半字节数合并成一个一字节数 设内部RAM的40H 41H单元中分别存放着8位二进制数 要求取出两个单元中的低半字节 合并成一个字节后 存42H单元 ORG0000HSTART MOVR1 40HMOVA R1ANLA 0FHSWAPAINCR1XCHA R1ANLA 0FHORLA R1INCR1MOV R1 ARETEND 4 2顺序程序设计 例4 10拆字程序 将40H单元中的内容拆开后分别送41H 42H单元中 ORG0000HSTART MOVR1 40HMOVA R1MOVB A 暂存B中ANLA 0FH 取第一个半字节INCR1MOV R1 A 存放第一个半字节MOVA BSWAPAANLA 0FH 取第二个半字节INCR1MOV R1 A 存放第二个半字节END 4 2顺序程序设计 4 3分支程序设计 4 3分支程序设计 例4 11两个无符号数比较大小设两个连续外部RAM单元ST1和ST2中存放无符号的二进制数 找出其中的大数存入ST3单元中 用减法指令SUBB来比较两数的大小 执行该指令前 先把进位位清零 通过借位 CY 的状态判断两数的大小 设两个数X和Y 当X Y时 CY 0 X Y CY 1 用减法指令比较大小 会破坏累加器中的内容 故作减法前先保存累加器中的内容 执行JNC指令后 形成了分支 执行SJMP指令后 实现程序的转移 ORG8000HST1EQU8040HSTART1 CLRCMOVDPTR ST1MOVXA DPTRMOVR2 AINCDPTRMOVXA DTPRSUBBA R2JNCBIG1XCHA R2BIG0 INCDPTRMOVX DPTR A 4 3分支程序设计 SJMP BIG1 MOVXA DPTRSJMPBIG0END 例4 12将ASCII码表的ASCII码转换为十六进制数 如果ASCII码不能转换成十六进制数 用户标志位置1 由ASCII码表可知 30H 39H为0 9的ASCII码 41H 46H为A F的ASCII码 在这一范围内的ASCII码减30H或37H就可以获得对应的十六进制数 设ASCII码放在累加器A中 转换结果放回A中 流程图如右图所示 4 3分支程序设计 4 3分支程序设计 ORG0000HSTART CLRCSUBBA 30HJCNASCCJNEA 0AH MMMM JCASCSUBBA 07HCJNEA 0AH NNNN JCNASCCJNEA 10H LLLL JCASCNASC SETBF0ASC RETEND 4 4循环程序设计 在程序设计中 只有简单程序和分支程序是不够的 因为简单程序 每条指令只执行一次 而分支程序则根据条件的不同 会跳过一些指令 执行另一些指令 它们的特点是 每一条指令至多执行一次 在处理实际事务时 有时会遇到多次重复处理的问题 用循环程序的方法来解决就比较合适 循环程序中的某些指令可以反复执行多次 采用循环程序 使程序缩短 节省存储单元 重复次数越多 循环程序的优越性就越明显 但是并不节省程序的执行时间 由于要有循环准备 结束判断等指令 循环程序执行速度要比简单程序稍慢些 4 4 1循环程序结构 1 循环程序的组成 初始化部分 为循环程序做准备 如设置循环次数计数器的初值 地址指针置初值 为循环变量赋初值等 处理部分 为反复执行的程序段 是循环程序的实体 修改部分 每执行一次循环体后 对指针做一次修改 使指针指向下一数据所在位置 为进入下一轮处理做准备 控制部分 根据循环次数计数器的状态或循环条件 检查循环能否继续执行 若循环次数已达到或循环条件不满足 应控制退出循环 否则继续循环 通常处理 修改 控制部分又称为循环体 结束部分 分析及存放执行结果 4 4 1循环程序结构 2 循环程序的结构 先进入处理部分 再控制循环 即至少执行一次循环体 先控制循环 后进入处理部分 即先根据判断结果 控制循环的执行与否 有时可以不进入循环体就退出循环程序 4 4 2循环程序设计 1 单循环程序 循环次数已知的循环程序例4 14工作单元清零 将40H为起点的8个单元清0 注 此程序的前2 4句为设定循环初值 5 7句为循环体 ORG0000HCLEAR CLRAMOVR0 40HMOVR7 08LOOP MOV R0 AINCR0DJNZR7 LOOPEND 4 4 2循环程序设计 1 单循环程序 循环次数已知的循环程序例4 14工作单元清零 将外部2000H开始的50个RAM单元清零 注 本例中循环次数已知 用R2作循环次数计数器 用DJNZ指令修改计数器值 并控制循环的结束与否 ORG0000HMOVDPTR 2000HCLEAR CLRAMOVR2 32HLOOP MOVX DPTR AINCDPTRDJNZR2 LOOPEND 4 4 2循环程序设计 循环次数未知的循环程序例4 17测试字符串长度设有一串字符依次存放在从50H单元开始的连续单元中 该字符串以回车符为结束标志 测得的字符串长度存入R2中 ORG0000HCONT MOVR2 00HMOVR0 50HNT CJNE R0 0DH LPRETLP INCR0INCR2SJMPNTEND待测字符以ASCII码形式存放在RAM中 回车符的ASCII码为0DH 程序中用一条 CJNE R0 0DH LP 指令实现字符比较及控制循环任务的结束 4 4 2循环程序设计 2 多循环程序 例4 18试编写延时程序 延时程序与MCS 51执行指令的时间有关 如果使用6MHz晶振 一个机器周期为2 s 计算出执行一条指令以至一个循环所需要的时间 给出相应的循环次数 便能达到延时的目的 DEL MOVR5 100DEL0 MOVR6 200DEL1 MOVR7 248NOPDEL2 DJNZR7 DEL2 DJNZR6 DEL1 DJNZR5 DEL0 RET 4 4 2循环程序设计 它是一个三重循环程序 利用程序嵌套的方法对时间进行延迟是程序设计中常用的方法 使用多重循环程序时 必须注意以下几点 1 循环嵌套 必须层次分明 不允许产生内外层循环交叉 2 外循环可以一层层向内循环进入 结束时由里往外一层层退出 3 内循环体可以直接转入外循环体 实现一个循环由多个条件控制的循环结构方式 4 5子程序设计 在实际程序中 常常会多次进行一些相同的计算和操作 如数制转换 函数式计算等 如果每次都从头开始编制一段程序 不仅麻烦 而且浪费存储空间 因此对一些常用的程序段 以子程序的形式 事先存放在存储器的某一区域 当主程序在运行过程中 需要用子程序时 只要执行调用子程序的指令 使程序转至子程序 子程序处理完毕 返回主程序 继续进行以后的操作 调用子程序有几个优点 1 避免对相同程序段的重复编制 2 简化程序的逻辑结构 同时也便于程序调试 3 节省存储器空间 MCS 51指令系统中 提供了两条调用子程序指令ACALL LCAL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中数学垂直于弦的直径 课件人教版数学九年级上册
- 新解读《GB-T 14592-2014钼圆片》
- 人版八年级英语(上册)期末复习知识点总结
- DB6108-T 69-2023 马铃薯黑痣病防控技术规范
- 老年人防灾减灾知识培训课件
- 老年人轮椅使用课件
- 老年人科学戒烟知识培训课件
- 重卡充电知识培训课件
- 《英语写作2》课程介绍与教学大纲
- 老年人测血压课件卡通
- 早教托育合伙人合同协议
- 2025至2030年中国视频监控系统行业市场运行态势及投资战略研究报告
- AIGC艺术设计 课件 第8章 AIGC艺术设计的思考与展望
- 物业财务基础知识培训课件
- 九上语文第2课《周总理你在哪里》课件
- 增值税留抵退税培训课件
- 车辆安全隐患排查台账表
- 人教版(2024)八年级上册英语Unit 1 Happy Holiday教案
- 大模型概念、技术与应用实践 课件 第6章 智能体
- 小学三年级秋季第一学期家长会
- 民用航空飞机电子系统技术
评论
0/150
提交评论