级单片机第四章ppt课件.ppt_第1页
级单片机第四章ppt课件.ppt_第2页
级单片机第四章ppt课件.ppt_第3页
级单片机第四章ppt课件.ppt_第4页
级单片机第四章ppt课件.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1 1 相对转移指令SJMP所能跳转的范围是 A 128 127B 127 127C 32768 32767D 32767 327682 已知SJMPrel pc pc 2 rel 若PC 1000H 目标地址 1052H 则rel A 50HB 30HC 40HD 02H A A 3 指令AJMPaddr11的跳转范围是 假定addr11 B 标号qaz的地址为1030H 执行指令qaz AJMPaddr11后 程序转移到地址 去执行 4 ORG0000HLCALL4000HORG4000HADDA R2执行完LCALLPC 00010B 1160H 4000H 2KB 2 习题5 指令AJMP LJMP SJMP的跳转范围是多少 答 2KB 64KB 128 127 思考 如果知道addrn 和跳转前PC 那么如何求得跳转后的 3 第章汇编语言程序设计 本章内容 SingleChipMicrocomputer 概述 分支程序 循环程序 简单程序 4 本次课重点 1 DB DW BIT伪指令的用法 特别注意与以前学习的微机原理的不同 2 顺序 分支语句 程序的编写和理解 5 源程序目标程序 低级语言 机器语言 汇编 高级语言 机器语言 编译 6 4 1汇编语言的格式与伪指令 一 指令的格式LOOP MOVA R0 将R0的内容送A 标号 操作码第一操作数第二操作数 注释 目的操作数 源操作数 注 蓝色的内容不是必须的 7 源程序ORG0000HLJMPMAINORG0030HMAIN CLRCLOOP MOVA R0ADDCA R1INCR0DJNZR1 LOOPSJMPNEXTNEXT DECR0SJMP END 二 汇编语言格式 地址机器码00002000300030C30031E60032370033080034DAFB00368003003818003980FE 注释 整个程序起始地址 跳向主程序 主程序起始地址 MAIN为程序标号 相对转移 HERE SJMPHERE 结束标记 8 三 伪操作指令 1 ORG汇编起始命令格式 ORG16位地址如 ORG0100H2 END程序结束命令格式 END 3 EQU赋值命令格式 字符名称EQU项 数据 表达式或字符串 说明 字符名称必须以字母开头 9 4 DB定义字节命令格式 DB数据 数据表或字符串说明 1 各项用逗号分开 2 字符串用单引号括起来 3 数据存入ROM指定的空间 如 ORG2000HDB0A3HDB26H 03HDB ABC D 12345 汇编后2000H 200BH单元的内容是 A3H26H03H41H42H43H44H31H32H33H34H35H 10 5 DW定义字命令格式 DW16位数据 数据表说明 1 各项用逗号分开 2 先存放高8位 再存放低8位 3 数据存入ROM指定的空间 如 ORG1500HDW7234H 8AH 10H汇编后1500H 1505H单元的内容是 72H34H00H8AH00H10H 11 6 DS定义存储空间命令格式 DS表达式 常数 说明 汇编时 从指定地址开始保留一定数量的存储空间 如 ORG1000HDS08HDB30H 8AH汇编后 1000H 1007H单元保留 1008H 30H 1009H 8AH 注 DB DW DS只能用于程序存储器 而不能用于数据存储器 12 7 BIT定义位地址符号 位变量 命令格式 字符名BIT位地址如 A1BITP1 0A2BIT02HFLAGRUNBIT08H 13 4 2汇编语言程序设计步骤 1 确定方案和计算方法2 了解应用系统的硬件配置 性能指标 3 建立系统数学模型 确定控制算法和操作步骤 4 画程序流程图 确定程序的流向5 编制源程序 1 合理分配存储器单元和了解I O接口地址 2 按功能设计程序 明确各程序之间的相互关系 3 用注释行说明程序 便于阅读和修改调试和修改 14 4 3汇编语言程序的基本结构及应用举例 程序编写做到 占用存储空间少 运行时间短 程序的编制 调试及排错所需时间短 结构清晰 易读 按结构化程序设计思想 任何复杂程序都可由顺序结构 分支结构 循环结构以上构成 15 16 一 顺序程序举例例1 设在外RAM的60H单元存有1个字节 要求将其分解成两个4位字段 高4位存入原单元的低4位 其低4位存入61H单元的低4位 且要求这两个单元的高4位均为0 试编制完整程序 分析 17 程序 核心指令ANLSWAPORG1000HMODE MOVR0 60HMOVXA R0MOVB AANLA 0F0HSWAPAMOVX R0 AANLB 0FHMOVA BINCR0MOVX R0 AEND 转化低4位并保存 转化高4位并保存 流程图 入口 取数并暂存 出口 思考 如果反过来 将两个单元里 60H 61H 的2个字节的低4位取出 合成一个字节存放 62H 18 程序 核心指令ANLSWAPORG1000HMODE MOVR0 60HMOVXA R0ANLA 0FHSWAPAMOV60H AINCR0MOVXA R0ANLA 0FHADDA 60HINCR0MOVX R0 AEND 19 思考 将外部RAM区7E00H和7E01H的低4位取出拼成一个字 送入7E02H单元中 7E00H中的低4位作字的高半字节 7E01H中的低4位作字的低半字节 20 ORG1000HSTART MOVDPTR 7E00HMOVXA DPTRANLA 0FHSWAPAMOVR1 AINCDPTRMOVXA DPTRANLA 0FHORLA R1 INCDPTRMOVX DPTR ASJMP END 说明 凡是访问外部RAM 必须先建立外部RAM地址指针 并且用MOVX指令访问 21 二 分支结构与分支程序设计 结构 根据不同的条件 进行相应的处理 通常用条件转移指令形成简单分支结构 如 判 A Z或NZ 转移判 CY 1或0 转移判 bit 1或0 转移CJNE比较不相等转移 22 例 设a存放在累加器A中 b存放在寄存器B中 要求按下式计算Y值 并将结果Y存于累加器A中 试编写程序 a b a 0 Y a b a 0 ORG1000HMAIN JBACC 7 MINUSCLRCSUBBA BSJMPDONEMINUS ADDA BDONE SJMP END 本题关键是判a是正数 还是负数 由ACC 7便知 A 0 a b Y N a b 核心指令JBSUBBADD 思考 如果加一个a 0的情况呢 23 a b a 0 Y 0 a 0 a b a 0 ORG1000HMAIN JZDONEJBACC 7 MINUSCLRCSUBBA BSJMPDONEMINUS ADDA BDONE SJMP END A 0 0 Y N a b 核心指令JZJBSUBBADD A 0 a b Y N 24 练习3 求符号函数 1当X 0时Y 0当X 0时 1当X 0时 X为50H单元内容 Y为51H单元内容 ORG0200HXEQU50HYEQU51HSTART MOVA 50H JZCOMMJBACC 7 MINUMOVA 01HSJMPCOMM 1的补码 MINU MOVA 0FFHCOMM MOV51H ASJMP END 25 练习2 找出40H 41H单元中大数并存入42H单元中 26 ORG0100HSTART MOVR0 40HMOVA R0CJNEA 41H COMPCOMP JNCDONEMOVA 41HDONE INCR0INCR0MOV R0 ASJMP END 27 思考 设有两个8位无符号数 存放在外部RAM的1568H 1569H 试用将其中较大的数找出 并存入156AH单元中 ORG1000HMOVDPTR 1568H 设置16位地址指针MOVXA DPTRMOV20H A 暂存INCDPTRMOVXA DPTRINCDPTRCJNEA 20H NEXT 比较大小NEXT JNCLOADMOVA 20HLOAD MOVX DPTR ASJMP END 28 ORG8000HMOVA 40H 取第一个数送ACJNEA 41H COMP 两个数比较COMP JNCDONE 无借位 表明第一个数 第二个数MOVA 41H 有借位 大数 ADONE MOV42H A 将较大的数存入42H单元SJMP END 29 练习1 将内部RAM的50H和51H内容相加 存入52H 程序存放在8000H开始的程序存储区中 30 ORG8000HCLRASTART MOVR0 50HMOVA R0INCR0ADDA R0INCR0MOV R0 ASJMP END 31 ORG8000HMAIN MOVA 50HADDA 51HMOV52H ASJMP END ORG8000HADDREQU50HADDR1EQUADDR 1ADDR2EQUADDR 2MAIN MOVA ADDR 取第一个数据ADDA ADDR1 两个操作数相加MOVADDR2 A 存放结果SJMP END ORG8000HADDREQU50HMAIN MOVR0 ADDR R0指向50H单元MOVA R0 取第一个数INCR0 指向下一个单元ADDA R0 两个操作数相加INCR0MOV R0 A 存放结果SJMP END 32 思考 设有两个8位无符号数 存放在外部RAM的1568H 1569H 试用将其中较大的数找出 并存入156AH单元中 ORG1000HMOVDPTR 1568H 设置16位地址指针MOVXA DPTRMOV20H A 暂存INCDPTRMOVXA DPTRINCDPTRCJNEA 20H NEXT 比较大小NEXT JNCLOADMOVA 20HLOAD MOVX DPTR ASJMP END 33 顺序程序 每条指令只执行一次 分支程序 根据不同条件 会跳过一些指令 而转去执行另一些指令共同点 每条指令至多执行一次 但是 实际中有时要求某程序段多次重复执行 需要采用循环结构 34 循环结构不但使程序简练 而且大大节省存储空间 循环程序包含四部分 初始化部分 循环计数器 变量置初值 循环处理部分 主体 需要重复执行的部分 循环控制部分 修改地址指针 修改变量 检测循环结束条件 循环结束部分 对结果分析 处理 存放结果 35 先处理 后判断 先判断 后处理 36 循环有 单循环 多重循环 循环次数已知 可用计数器控制循环次数 循环次数未知 按问题条件控制循环是否结束 37 1 单循环程序 1 循环次数是已知的程序例1 将从外部RAM3000H开始连续存放的50个单字节数据传送到内部RAM30H单元开始的50个单元中 核心指令 MOVXMOV Ri AINCDJNZ ORG1000HMOVDPTR 3000HMOVR0 30HMOVR1 32H LOOP MOVXA DPTRMOV R0 A INCDPTRINCR0DJNZR1 LOOPSJMP END 38 练习1 工作单元清零 在应用系统程序设计时 有时经常需要将存储器中各部分地址单元作为工作单元 存放程序执行的中间值或执行结果 工作单元清零工作常常放在程序的初始化部分中 设有50个工作单元 其首址为外部存储器8000H单元 则其工作单元清零程序如下 39 CLEAR CLRA MOVDPTR 8000H 工作单元首址送指针 MOVR2 50 置循环次数 CLEAR1 MOVX DPTR A INCDPTR 修改指针 DJNZR2 CLEAR1 控制循环 RET 思考 送连续的自然数呢 送连续的奇数或者偶数呢 40 CLEAR MOVA 0 MOVDPTR 8000H 工作单元首址送指针 MOVR2 50 置循环次数 CLEAR1 MOVX DPTR A INCAINCDPTR 修改指针 DJNZR2 CLEAR1 控制循环 RET 41 CLEAR MOVA 1 偶数的话CLRA MOVDPTR 8000H 工作单元首址送指针 MOVR2 50 置循环次数 CLEAR1 MOVX DPTR A INCAINCAINCDPTR 修改指针 DJNZR2 CLEAR1 控制循环 RET 42 2 循环次数未知的程序例2 编程查找内部RAM的20H单元开始的字符串中第一个 A 解 从首单元开始取数 每取一数判断其是否为 A 即41H 是则结束 ORG1000HMAIN MOVR0 20HMOVA R0 CJNEA 41H NEXTSJMPDONENEXT INCR0SJMPLOOPDONE SJMP END 开始 初始化 修改指针 A 41H 结束 LOOP 核心指令 CJNE 43 编制用软件方法延时50ms的程序软件延时时间与执行指令的时间有关 如果使用12MHz晶振 一个机器周期为1us 计算出执行每一条指令以及一个循环所需要的时间 根据要求的延时时间确定循环次数 如果单循环时间不够长 可以采用多重循环 DEL MOVR7 200DEL1 MOVR6 125DEL2 DJNZR6 DEL2DJNZR7 DEL1这是一个双重循环程序 前2条指令的机器周期数为 后2条指令的机器周期数为 执行内循环所用的机器周期数为123 2 246us 执行外循环所用的机器周期数为 1 1 123 2 2 200 50000us 再加上 执行第一条指令 就是执行整段程序所用的机器周期数 因此这段程序的延时时间 50 001ms DEL MOVR7 200DEL1 MOVR6 123NOPDEL2 DJNZR6 DEL2DJNZR7 DEL1 44 45 练习2设在内部RAM的BLOCK单元开始处有长度为LEN个的无符号数据块 试编一个求和程序 并将和存入内部RAM的SUM单元 设和不超过8位 BLOCKEQU20H LENEQU30H SUMEQU40H START CLRA 清累加器A MOVR2 LEN 数据块长度送R2 MOVR1 BLOCK 数据块首址送R1 LOOP ADDA R1 循环加法 INCR1 修改地址指针 DJNZR2 LOOP 修改计数器并判断 MOVSUM A 存和 RET 46 练习3 对内部RAM50h开始的10个无符号数求和 47 解释 高8位低8位 R3 R4 R0 C A MOVA R4ADDA R0MOVR4 A CLRAADDCA R3MOVR3 A 50h 中是什么 不知道 不能用ADDA 50H 48 源程序 ADD1 MOVR7 10 循环次数n 10MOVR3 0 存放结果的高8位MOVR4 0 存放结果的低8位MOVR0 50H 求和的数据存放在从内部RAM50h开始的 单元中 注意 50h 不知道LOOP MOVA R4 ADDA R0 R4 50H AMOVR4 A 结果送回R4CLRA ADDCA R3 把进位位C加到高8位去MOVR3 AINCR0 为下一轮循环作准备DJNZR7 LOOPSJMP END 49 源程序 ADD1 MOVR7 10 循环次数n 10MOVR3 0 存放结果的高8位MOVR0 50H 求和的数据存放在从内部RAM50h开始的 单元中 注意 50h 不知道CLRA LOOP ADDA R0 R4 50H AJNCNEXTINCR3 把进位位C加到高8位NEXT INCR0 为下一轮循环作准备DJNZR7 LOOPMOVR4 ASJMP END 50 练习4求最大数 目的 找出一组数中的最大数 这组数存放在内部RAM的42H开始的连续单元中 数的个数存放在41H单元中 不超过3DH个 这组数全是8位无符号的二进制数 要求 找出最大数存入40H单元中 51 52 ORG2000HSTART MOVR0 42HMOV40H R0DEC41HLOOP INCR0MOVA R0CJNEA 40H COMPSJMPNEXT COMP JCNEXTMOV40H ANEXT DJNZ41H LOOPSJMP END 思考 求最小数 JNC 53 练习5 求负元素个数 确定一个数据块中负元素 最高位为1 的个数 数据块长度存放在内存单元51H中 不超过2DH个 数据块本身从内存52H单元开始存放 最后将负元素个数存放在50H单元中 ORG0100HMOVR0 52HMOVR2 00HLOOP MOVA R0JNBACC 7 NEXTINCR2 NEXT INCR0DJNZ51H LOOPMOV50H R2SJMP END 思考 求正数 0的个数 JNZ JZNEXTJBACC 7 NEXT 54 练习六 已知外部RAM从2000H开始存放着一批有符号数 数据个数在30H单元中 试编程统计其中正数 零和负数的个数 并将统计的结果分别存放在内部RAM20H 存放零的个数 21H 存放负数的个数 和22H 存放正数的个数 单元中 ORG1000HMOV20H 00HMOV21H 00HMOV22H 00HMOVDPTR 2000H LOOP MOVXA DPTR JZZEROJBACC 7 MINUS INC22HSJMPNEXT MINUS INC21HSJMPNEXT ZERO INC20H NEXT INCDPTR DJNZ30H LOOPSJMP END 55 思考 已知外部RAM从1001H开始存放着一批有符号数 数据个数在1000H单元中 试编程统计其中 10 10 10 31H 10 和32H 10 单元中 ORG1000HMOV30H 00HMOV31H 00HMOV32H 00HMOVDPTR 1000HMOVXA DPTRMOVR7 AINCDPTR MOVXA DPTRCJNEA 0AH GO1 INC31HSJMPNEXT GO1 JCGO2INC30HSJMPNEXT GO2 INC32H DJNZR7 LOOPSJMP END LOOP NEXT 56 练习七 编写一循环程序 求出内部RAM20H单元二进制数中含 1 的个数 并将结果存入21H单元 ORG1000HMOV21H 00HMOVA 20HMOVR7 08H LOOP RLCAJNCNEXTINC21H NEXT DJNZR7 LOOPSJMP END 57 练习八 设有一英文句子 字符串 以ASCII码的形式逐个字符地连续存放在外部RAM2000H开始的单元中 句子以 24H 字符结尾 试编程将字符逐个取出 并送P0输出 直到输出整个句子 ORG1000HMOVDPTR 2000H LO

温馨提示

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

评论

0/150

提交评论