第4章80C51的汇编语言程序设计概要.ppt_第1页
第4章80C51的汇编语言程序设计概要.ppt_第2页
第4章80C51的汇编语言程序设计概要.ppt_第3页
第4章80C51的汇编语言程序设计概要.ppt_第4页
第4章80C51的汇编语言程序设计概要.ppt_第5页
免费预览已结束,剩余34页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 20 2 第4章80C51的汇编语言程序设计 程序编制的方法和技巧 4 1 源程序的编辑和汇编 4 2 基本程序结构 4 3 子程序及其调用 4 4 简单I O设备的并口直接驱动示例 4 5 2020 4 20 3 单片机应用系统由硬件系统和应用程序构成 汇编语言高级语言 应用程序设计方法 汇编语言 生成的目标程序占内存空间少 运行速度快 具有效率高 实时性强 高级语言 对系统的功能描述与实现简单 程序阅读 修改和移植方便 适合于编写复杂的程序 2020 4 20 4 4 1程序编制的方法和技巧 4 1 1程序编制的步骤 明确任务 功能要求 技术指标运行环境调研 任务分析 将实际问题转化为计算机处理的程序算法算法比较与优化 内存需求与运行速度 算法设计 2020 4 20 5 流程描述 流程图符号 循环 框架 2020 4 20 6 强化模块观念 使程序占用空间减少 结构清晰循环初值和结束条件 避免 死机 现象子程序的现场保护 注意栈平衡 寄存器内容 程序模块 主程序模块 各种子程序模块 模块化优点 分块设计 便于阅读 调试方便 4 1 2程序编制的方法和技巧 采用循环和子程序 对中断子程序还有注意保护PSW的内容 2020 4 20 7 4 1 3汇编语言的语句格式 非数字字符开头 后跟字母 数字 等不能用已定义的保留字 指令助记符 伪指令等 后跟英文冒号 Keil 或其它 汇编器A51可以识别的语句形式为 标号 即符号地址 标号 指令助记符 操作数1 操作数2 操作数3 注释 指令助记符 是指令功能的英文缩写 2020 4 20 8 数据 二进制 B 十进制 D或省略D 十六进制 H 注意A F开头时要加 0 ASCII码 如 A 1245 符号 符号名 标号或 PC的当前值 表达式 由运算符和数据构成 操作数 注释 英文分号 开头 2020 4 20 9 4 2源程序的编辑和汇编 目标程序的产生过程如下图 2020 4 20 10 4 2 1源程序的编辑和汇编 源程序的编辑 ORG0000HLJMPMAINORG0040HMAIN MOVR7 16MOVR0 60HMOVA 55HLOOP MOV R0 AINCR0DJNZR7 LOOPSJMP END 依据汇编语言规则用好伪指令符号不用中文SJMP 用于调试以 ASM存盘 2020 4 20 11 源程序的汇编 汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51 EXE汇编生成 OBJ LIB及 LST 目标程序的连接 OBJ LIB经BL51 EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51 EXE转换为 HEX文件 HEX文件经编程器写入单片机存储器 2020 4 20 12 4 2 2伪指令 伪指令 也叫汇编命令 仅对汇编过程进行指示伪指令无对应的单片机可执行代码 起始地址设定伪指令ORG ORG表达式 表达式通常为十六进制地址 例 ORG8000HSTART MOVA 30H ORG可多次使用 但地址值的顺序要由小到大 结束汇编伪指令END END 该伪指令位于源程序的最后一行 2020 4 20 13 定义字节数据表伪指令DB 定义字数据表伪指令DW 1000H 标号 DB字节数据表 如 ORG1000HDB 2 4 6 8 10 18 1001H 标号 DW字数据表 ORG1400HDATA1 DW324AH 3CH 1400H 1401H 1402H 1403H 2020 4 20 14 定义常值为符号名伪指令EQU 符号名EQU常值表达式 LENEQU10SUMEQU21HBLOCKEQU22HCLRAMOVR7 LENMOVR0 BLOCKLOOP ADDA R0INCR0DJNZR7 LOOPMOVSUM A 符号名为 地址常数字符串寄存器名 比较 标号只能是地址 2020 4 20 15 定义位地址为符号名伪指令BIT 符号名BIT位地址表达式 如 STBITP1 0 将P1 0的位地址赋给符号名STCFBIT0D7H 将位地址为D7H的位定义为符号名 用BIT定义的 符号名 一经定义便不能重新定义和改变其它一些伪指令参见教材 2020 4 20 16 4 3基本程序结构 一般不影响标志寄存器PSW的状态 传送类指令有两大类一般传送 MOV 特殊传送 如 MOVCMOVXPUSH POPXCH XCHDSWAP 2020 4 20 17 4 3 1顺序程序 无分支 无循环 4 3基本程序结构 例4 1 片内RAM的21H单元存放一个十进制数据十位的ASCII码 22H单元存放该数据个位的ASCII码 编写程序将该数据转换成压缩BCD码存放在20H单元 2020 4 20 18 ORG0040HSTART MOVA 21H 取十位ASCII码ANLA 0FH 保留低半字节SWAPA 移至高半字节MOV20H A 存于20H单元MOVA 22H 取个位ASCII码ANLA 0FH 保留低半字节ORL20H A 合并到结果单元SJMP END 2020 4 20 19 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 20 20 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 20 21 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 20 22 例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 20 23 4 4子程序及其调用 完成通用功能 反复使用的程序设计成子程序 使应用程序结构清晰紧凑 便于阅读和调试 执行要由其它程序来调用 执行完后要返回到调用程序 结构上仍然采用一般程序的3种结构 调用时注意 一是现场的保护和恢复 二是主程序与子程序间的参数传递 2020 4 20 24 4 4 1现场保护与恢复 在主程序中实现 结构灵活 PUSHPSW 保护现场 含当前工作寄存器组号 PUSHACC PUSHB MOVPSW 10H 切换当前工作寄存器组LCALLaddr16 子程序调用 POPB 恢复现场POPACC POPPSW 含当前工作寄存器组切换 2020 4 20 25 在子程序中实现 程序规范 清晰 SUB1 PUSHPSW 保护现场 含当前工作寄存器组号 PUSHACC PUSHB MOVPSW 10H 切换当前工作寄存器组 POPB 恢复现场POPACC POPPSW 内含当前工作寄存器组切换RET 2020 4 20 26 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 20 27 利用存储器 个数多 用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 20 28 4 4 3常用子程序示例 8位二进制数转换成BCD码 功能 0 FFH范围内的二进制数转换为BCD码 0 255 入口 A 为二进制数 出口 R0 为十位数和个位数地址指针 压缩的BCD码 BINBCD1 MOVB 100DIVAB A 百位数MOV R0 A 存入RAMINCR0MOVA 10XCHA BDIVAB A 十位数 B 个位数SWAPAADDA B 合成到 A MOV R0 A 存入RAMRET 2020 4 20 29 功能 查最大数 片内RAM中存放一批数据 查找出最大值并存放于首地址中 设R0中存首地址 R2中存放字节数 程序框图如图 2020 4 20 30 BIGNUM MOVR2 n n为要比较的数据字节数MOVA R0 存首地址指针MOVR1 ADECR2 MOVA R1LOOP MOVR3 ADECR1CLRCSUBBA R1 两个数比较JNCLOOP1 C 0 A中的数大 跳LOOP1MOVA R1 C 1 则大数送ASJMPLOOP2LOOP1 MOVA R3LOOP2 DJNZR2 LOOP 是否比较结束 MOV R0 A 存最大数RET 2020 4 20 31 功能 比较大小 比较内部RAM21H22H中两个无符号的大小把大数存入31H中 小数存入32H中 若两数相等时 则将内部RAM位127为1 程序如下 COMP MOVA 21H 取一个比较的数CJNEA 22H BIG 若不相等则转移 对CY有影响 SETB127BIG JCLESS 若 21H 22H 则转移MOV31H AMOV32H 22HRETLESS MOV32H AMOV31H 22HRET 2020 4 20 32 功能 多字节无符号数的减法 入口参数 DATA1 被减数的低位地址 DATA2 减数的低位地址 N字节相减 出口参数 DATA2 差数低位地址 MSUB MOVR0 DATA1 置被减数MOVR1 DATA2 置减数MOVR7 N 置字节数CLRC 清进位位LOOP MOVA R0SUBBA R1 求差MOV R1 A 存结果INCR0 修改指针INCR1DJNZR7 LOOP 循环判断RET 2020 4 20 33 4 5简单I O设备的并口直接驱动示例 4 5 1独立式键盘与LED显示示例 例4 17 数据端与P0口正序连接 编写程序 分别实现功能 上电后数码管显示 P 按下任何键后 显示从 0 开始每隔1秒加1 加至 F 后 数码管显示 P 进入等待按键状态 2020 4 20 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 20 35 有时为方便走线而采用逆序连接 显示段码要进行调整 CODE P2 DB03H 9FH 25H 0DH 99H 49H 40H 1FHDB01H 09H 11H 0C1H 63H 85H 61H 71H CODE P0 DB0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8HDB80H 90H 88H 83H 0C6H 0A1H 86H 8EH 试比较 2020 4 20 36 4 5 2矩阵式键盘与LED显示示例 步骤 判有无键按下 判按下哪个键 依键号进入相应程序 2020 4 20 37 判有无键按下行线接输入口 列线接输出口 置所有列线为低电平 然后读行线状态 若行线均为高电平 则没有键按下 若行线状态不全为高电平 则可断定有键按下 判按下哪个键先让C0列为低电平 其余列线为高电平 读行线状态 如行线状态不全为 1 则说明所按键在该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论