




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 4 21 1 第4章80C51的汇编语言程序设计 程序编制的方法和技巧 4 1 源程序的编辑和汇编 4 2 基本程序结构 4 3 子程序及其调用 4 4 简单I O设备的并口直接驱动示例 4 5 2020 4 21 2 单片机应用系统由硬件系统和应用程序构成 汇编语言高级语言 应用程序设计方法 汇编语言 生成的目标程序占内存空间少 运行速度快 具有效率高 实时性强 高级语言 对系统的功能描述与实现简单 程序阅读 修改和移植方便 适合于编写复杂的程序 2020 4 21 3 4 1程序编制的方法和技巧 4 1 1程序编制的步骤 明确任务 功能要求 技术指标运行环境调研 任务分析 将实际问题转化为计算机处理的程序算法算法比较与优化 内存需求与运行速度 算法设计 2020 4 21 4 流程描述 流程图符号 超级循环 框架 2020 4 21 5 强化模块观念 使程序占用空间减少 结构清晰循环初值和结束条件 避免 死机 现象子程序的现场保护 注意栈平衡 寄存器内容 程序模块 主程序模块 各种子程序模块 模块化优点 分块设计 便于阅读 调试方便 4 1 2程序编制的方法和技巧 采用循环和子程序 对中断子程序还有注意保护PSW的内容 2020 4 21 6 4 1 3汇编语言的语句格式 非数字字符开头 后跟字母 数字 等不能用已定义的保留字 指令助记符 伪指令等 后跟英文冒号 Keil的汇编器A51可以识别的语句形式为 标号 即符号地址 标号 指令助记符 操作数1 操作数2 操作数3 注释 指令助记符 是指令功能的英文缩写 2020 4 21 7 数据 二进制 B 十进制 D或省略D 十六进制 H 注意A F开头时要加 0 ASCII码 如 A 1245 符号 符号名 标号或 PC的当前值 表达式 由运算符和数据构成 见表4 1 操作数 注释 英文分号 开头 2020 4 21 8 表4 1 2020 4 21 9 4 2源程序的编辑和汇编 目标程序的产生过程如下图 2020 4 21 10 4 2 1源程序的编辑和汇编 源程序的编辑 ORG0000HLJMPMAINORG0040HMAIN MOVR7 16MOVR0 60HMOVA 55HLOOP MOV R0 AINCR0DJNZR7 LOOPSJMP END 依据汇编语言规则用好伪指令符号不用中文SJMP 用于调试以 ASM存盘 2020 4 21 11 源程序的汇编 汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51 EXE汇编生成 OBJ LIB及 LST 目标程序的连接 OBJ LIB经BL51 EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51 EXE转换为 HEX文件 HEX文件经编程器写入单片机存储器 2020 4 21 12 4 2 2伪指令 伪指令 也叫汇编命令 仅对汇编过程进行指示伪指令无对应的单片机可执行代码 起始地址设定伪指令ORG ORG表达式 表达式通常为十六进制地址 例 ORG8000HSTART MOVA 30H ORG可多次使用 但地址值的顺序要由小到大 结束汇编伪指令END END 该伪指令位于源程序的最后一行 2020 4 21 13 定义字节数据表伪指令DB 定义字数据表伪指令DW 1000H 标号 DB字节数据表 如 ORG1000HDB 2 4 6 8 10 18 1001H 标号 DW字数据表 ORG1400HDATA1 DW324AH 3CH 1400H 1401H 1402H 1403H 大端模式 2020 4 21 14 定义常值为符号名伪指令EQU 符号名EQU常值表达式 LENEQU10SUMEQU21HBLOCKEQU22HCLRAMOVR7 LENMOVR0 BLOCKLOOP ADDA R0INCR0DJNZR7 LOOPMOVSUM A 符号名为 地址常数段名字符串寄存器名位名 比较 标号只能是地址 2020 4 21 15 定义位地址为符号名伪指令BIT 符号名BIT位地址表达式 如 STBITP1 0 将P1 0的位地址赋给符号名STCFBIT0D7H 将位地址为D7H的位定义为符号名 用BIT定义的 符号名 一经定义便不能重新定义和改变其它一些伪指令参见教材表4 2 2020 4 21 16 4 3 1顺序程序 无分支 无循环 4 3基本程序结构 例4 1 片内RAM的21H单元存放一个十进制数据十位的ASCII码 22H单元存放该数据个位的ASCII码 编写程序将该数据转换成压缩BCD码存放在20H单元 2020 4 21 17 ORG0040HSTART MOVA 21H 取十位ASCII码ANLA 0FH 保留低半字节SWAPA 移至高半字节MOV20H A 存于20H单元MOVA 22H 取个位ASCII码ANLA 0FH 保留低半字节ORL20H A 合并到结果单元SJMP END 2020 4 21 18 4 3 2分支程序 单分支 双分支 多分支 例4 2 设变量x以补码的形式存放在片内RAM的30H单元 变量y与x的关系是 当x大于0时 y x 当x 0时 y 20H 当x小于0时 y x 5 编制程序 根据x的大小求y并送回原单元 2020 4 21 19 ORG0040HSTART MOVA 30H 取x至累加器JZNEXT x 0 转NEXTANLA 80H 否 保留符号位JZDONE x 0 转结束MOVA 05H x 0处理ADDA 30HMOV30H A X 05H送YSJMPDONENEXT MOV30H 20H x 0 20H送YDONE SJMPDONEEND 2020 4 21 20 例4 3 根据R7的内容x 转移序号 转向相应的处理程序 设R7内容为0 4 对应的处理程序入口地址分别为PP0 PP4 2020 4 21 21 START MOVR7 3 以转移序号3为例ACALLJPNUMAJMPSTARTJPNUM MOVDPTR TAB 置分支入口地址表首址MOVA R7ADDA R7 乘2 调整偏移量MOVR3 AMOVCA A DPTR 取地址高字节 暂存于R3XCHA R3INCAMOVCA A DPTR 取地址低字节MOVDPL A 处理程序入口地址低8位送DPLMOVDPH R3 处理程序入口地址高8位送DPHCLRAJMP A DPTR 2020 4 21 22 TAB DWPP0DWPP1DWPP2DWPP3DWPP4PP0 MOV30H 0 转移序号为0时 置功能号 0 于30H单元RETPP1 MOV30H 1 转移序号为1时 置功能号 1 于30H单元RETPP2 MOV30H 2 转移序号为2时 置功能号 2 于30H单元RETPP3 MOV30H 3 转移序号为3时 置功能号 3 于30H单元RETPP4 MOV30H 4 转移序号为4时 置功能号 4 于30H单元RET 2020 4 21 23 4 3 3循环程序 2种 先执行 后判断 先判断 后执行 例4 4 将内部RAM的30H至3FH单元初始化为00H MAIN MOVR0 30H 置初值MOVA 00H MOVR7 16 LOOP MOV R0 A 循环处理INCR0 DJNZR7 LOOP 循环修改 判结束SJMP 结束处理 2020 4 21 24 例4 5 将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域 直到发现 字符停止传送 MAIN MOVR0 60H 置初值MOVDPTR 1000HLOOP0 MOVA R0 取数据CJNEA 24H LOOP1 循环结束 SJMPDONE 是LOOP1 MOVX DPTR A 循环处理INCR0 循环修改INCDPTRSJMPLOOP0 继续循环DONE SJMPDONE 结束处理 2020 4 21 25 4 4子程序及其调用 完成通用功能 反复使用的程序设计成子程序 使应用程序结构清晰紧凑 便于阅读和调试 执行要由其它程序来调用 执行完后要返回到调用程序 结构上仍然采用一般程序的3种结构 调用时注意 一是现场的保护和恢复 二是主程序与子程序间的参数传递 2020 4 21 26 4 4 1现场保护与恢复 在主程序中实现 结构灵活 PUSHPSW 保护现场 含当前工作寄存器组号 PUSHACC PUSHB MOVPSW 10H 切换当前工作寄存器组LCALLaddr16 子程序调用 POPB 恢复现场POPACC POPPSW 含当前工作寄存器组切换 2020 4 21 27 在子程序中实现 程序规范 清晰 SUB1 PUSHPSW 保护现场 含当前工作寄存器组号 PUSHACC PUSHB MOVPSW 10H 切换当前工作寄存器组 POPB 恢复现场POPACC POPPSW 内含当前工作寄存器组切换RET 2020 4 21 28 4 4 2参数传递 利用累加器或寄存器 简单 快速 但参数个数不多 例4 6 实现两个8位的十六进制无符号数求和的子程序 SADD MOVA R3 取加数 在R3中 CLRCADDA R4 被加数 在R4中 加AJCPP1MOVR3 00H 结果小于255时 高字节R3内容为00HSJMPPP2PP1 MOVR3 01H 结果大于255时 高字节R3内容为01HPP2 MOVR4 A 结果的低字节在R4中RET 入口 R3 加数 R4 被加数 出口 R3 和的高字节 R4 和的低字节 2020 4 21 29 利用存储器 个数多 用R0或R1及DPTR为参数表指针 例4 7 将内部RAM中两个4字节无符号整数相加 和的高字节由R0指向 数据采用大端模式存储 入口 R0 加数低字节地址 R1 被加数低字节地址 出口 R0 和的高字节起始地址 NADD MOVR7 4 字节数4送计数器CLRC NADD1 MOVA R0 利用指针 取加数低字节ADDCA R1 利用指针 被加数低字节加AMOV R0 A DECR0DECR1DJNZR7 NADD1INCR0 调整指针 指向出口RET 2020 4 21 30 利用堆栈 例4 8 将内部RAM中20H单元中的1个字节十六进制数转换为2位ASCII码 存放在R0指示的两个单元中 入口 预转换数据 低半字节 在栈顶 出口 转换结果 ASCII码 在栈顶 HEASC MOVR1 SP 借用R1为堆栈指针DECR1DECR1 R1指向被转换数据XCHA R1 取被转换数据ANLA 0FH 取一位十六进制数ADDA 2 偏移调整 所加值为MOVC与DB间总字节数MOVCA A PC 查表XCHA R1 1字节指令 存结果于堆栈中RET 1字节指令ASCTAB DB30H 31H 32H 33H 34H 35H 36H 37HDB38H 39H 41H 42H 43H 44H 45H 46H 2020 4 21 31 验证程序段 MAIN MOVA 20H SWAPAPUSHACC 预转换的数据 在低半字节 入栈ACALLHEASCPOPACC 弹出栈顶结果于ACC中MOV R0 A 存转换结果高字节INCR0 修改指针PUSH20H 预转换的数据 在低半字节 入栈ACALLHEASCPOPACC 弹出栈顶结果于ACC中MOV R0 A 存转换结果低字节SJMP 2020 4 21 32 4 4 3常用子程序示例 略 2020 4 21 33 4 5简单I O设备的并口直接驱动示例 4 5 1独立式键盘与LED显示示例 例4 17 数据端与P0口正序连接 编写程序 分别实现功能 上电后数码管显示 P 按下任何键后 显示从 0 开始每隔1秒加1 加至 F 后 数码管显示 P 进入等待按键状态 2020 4 21 34 TEMPEQU30HORG0000HJMPSTARTORG0100HSTART MOVSP 5FHMOVP0 8CH 显示 P MOVP3 0FFHNOKEY MOVA P3CPLAJZNOKEY 无键按下MOVTEMP P3 有键按下CALLD10msMOVA P3CJNEA TEMP NOKEY 去抖MOVR7 16MOVR2 0 LOOP MOVA R2MOVDPTR CODE P0MOVCA A DPTRMOVP0 AINCR2SETBRS0 切换组CALLD 1SCLRRS0DJNZR7 LOOPJMPSTART D 1S 子程序 D10ms 子程序 CODE P0 DB0C0H 0F9H 0A4H 0B0HDB99H 92H 82H 0F8HDB80H 90H 88H 83H DB0C6H 0A1H 86H 8EH 2020 4 21 35 有时为方便走线而采用逆序连接 显示段码要进行调整 CODE P2 DB03H 9FH 25H 0DH 99H 49H 40H 1FHDB01H 09H 11H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度教育产业部分股权收购合同范本
- 2025年进口车买卖合同书
- 2025年健康管理师之健康管理师三级提升训练试卷(A卷)含答案
- 喷枪喷嘴熔射维修工艺考核试卷及答案
- 灌溉系统节水技术维护工艺考核试卷及答案
- 婴幼儿卫生保健知识试题及答案
- 光纤熔接接头可靠性测试工艺考核试卷及答案
- 球体冷挤压规范考核试卷及答案
- 散热工艺考核试卷及答案
- 光缆绞线接头抗振动稳定性工艺考核试卷及答案
- 2024年华能甘肃能源开发有限公司招聘笔试参考题库含答案解析
- 助产士在产时并发症处理中的助产安全
- 单片机的看门狗
- 市场营销(第2版)课件全套 王永贵 第1-17章-市场与市场营销概述及发展-顾客营销学
- 高中数学 人教A版 必修一 《集合与常用逻辑用语》 1.1集合的概念
- 深圳某电厂锅炉维修改造施工组织设计-new(常用版)
- GB/T 4950-2021锌合金牺牲阳极
- GB/T 15171-1994软包装件密封性能试验方法
- 证券从业考试基础模拟卷二(题目+解析)
- 水轮发电机讲义课件
- 信息系统运维服务方案
评论
0/150
提交评论