单片机原理与应用_第4章_程序设计

上传人:xmg****18 文档编号:117157054 上传时间:2019-11-18 格式:PPT 页数:42 大小:938KB
返回 下载 相关 举报
单片机原理与应用_第4章_程序设计_第1页
第1页 / 共42页
单片机原理与应用_第4章_程序设计_第2页
第2页 / 共42页
单片机原理与应用_第4章_程序设计_第3页
第3页 / 共42页
单片机原理与应用_第4章_程序设计_第4页
第4页 / 共42页
单片机原理与应用_第4章_程序设计_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《单片机原理与应用_第4章_程序设计》由会员分享,可在线阅读,更多相关《单片机原理与应用_第4章_程序设计(42页珍藏版)》请在金锄头文库上搜索。

1、单片机原理与应用 北京交通大学电子信息工程学院自动化系北京交通大学电子信息工程学院自动化系 20172017年年1 1月月 北京交通大学 2 第第4 4章章 汇编语言程序设计汇编语言程序设计 本章要点 汇编语言语句格式 汇编语言程序设计 程序设计举例 北京交通大学 3 一、指令格式 标号:用于指示指令的地址。 由1-8个字符组成,且第一个字符必须是字母 操作数: 可使用二(B结尾)、十(D结尾或省略)、 十六(H结尾)进制数和字符串(加“ ”) 注释:为不可执行部分,对程序加以说明 二、伪指令格式 4-1 汇编语言语句格式 标号:助记符 操作数1,操作数2 ;注释 伪指令是不可执行的指令,其功

2、能是为汇编程序提供信息 北京交通大学 4 常用伪指令有: 1.编起始地址命令:ORG 格式: ORG 地址 功能:规定程序的起始地址,省略时起始地 址从0000H开始 2.汇编终止命令:END 格式: END 表达式 功能:源程序汇编终止。在主程序模块中含 有“表达式” 给出程序的起始地址,在其它模块(子程序 )中表达式可省略。 北京交通大学 5 3.赋值命令:EQU 格式:字符名称 EQU 表达式 功能:将表达式的值赋给字符名称。 表达式可以是常数、地址、标号和表达式。 说明:赋值之后的字符名称可以在程序中使用 例如: A1 EQU 20H B1 EQU A1 C1 EQU 40H+10H

3、. . MOV A,# A1 BAC: ADD A,C1 北京交通大学 6 (2)格式: 标号: DW 字数据项 功能:从指定地址(即标号)开始,在程序 存储器中定义16位字数据。高8位数据在 低地址单元,低8位数据在高地址单元。 TAB1 1BH 41H FEH 80H TAB2 30H 2AH 00H 34H 低 高 例如: ORG 1000H TAB1:DB 1BH,A,-2,128 TAB2:DW 302AH,34H 存储格式: 4.定义数据命令:DB、DW (1)格式:标号: DB 字节数据项表 功能:从指定地址(即标号)开始,在程序存储器 中定义字节数据 北京交通大学 7 5.存储

4、区命令:DS 例如: ORG 2000H TAB:DS 05H 6.位定义命令:BIT 例如: HULED BIT P1.0 格式: 标号: DS 表达式 功能:从指定地址(即标号)开始,保留指定数目(表达式的值) 的字节单元作为存储区,供程序运行使用(用于程序存储器) 格式:字符名称 BIT 位地址 功能:将位地址赋给字符名称。位地址为绝对地址或符号地址 北京交通大学 8 分支程序设计分支程序设计 一、分支程序的基本结构 一般情况下,程序按顺序方式执行,但 根据实际需要也可改变程序的执行顺序, 称为分支程序。 分支程序是根据给出的条件满足与否 执行不同的走向,基本结构分为单分支、 双分支和多

5、分支程序。 北京交通大学 9 1. 单分支结构 单分支结构如图 41 所示。给出的条件满足 ,则执行程序段 A,然后执行该指令下面的指令; 若条件满不足,则不执行程序段 A,而是执行该指 令下面的指令。 A 条件 B A 下一指令 Y N 条件 YN 图 4 - 1 图 4 - 2 北京交通大学 10 2.双分支结构 双分支结构如图 4 - 2 所示。给出的条件满足 ,则执行程序段 A,否则执行程序段 B。 3.多分支结构 多分支结构如图 4 - 3 所示。首先将分支按号 进行排列,然后按序号的值来实现多分支选择。 0分支 1分支n-1分支n分支 K=K= 0 1 n-1 n . 图 4 -

6、3 北京交通大学 11 二、分支程序设计举例 在MCS-51 汇编语言分支程序设计中, 通常是通过条件转移指令来实现分支选择。 例 4-1 设:两个 8 位无符号数分别存放在外 部RAM 40H和41H单元中,将找出较大数存放 在42H单元中。 源程序如下: 比较两个数大小 北京交通大学 12 ORG 1000H CLR C ;CY0 MOV DPTR,#0040H ;置数据指针 MOVX A,DPTR ;取第一个数 MOV R3,A ;第一个数暂存于R3 INC DPTR ;修改指针 MOVX A,DPTR ;取第二个数 SUBB A,R3 ;两数比较 JNC BIG2 ;第二个数大 XCH

7、 A,R3 ;第一个数大 SJMP BIG1 BIG2: MOVX A,DPTR BIG1: INC DPTR ;修改指针 MOVX DPTR,A ;存放大数 END 北京交通大学 13 例 4-2 设:R7的内容为0-N,对应处理程序的入口地址 分别是Proc0 -ProcN。 分析:(1)程序中把每个处理程序的入口地址 (Proc0 - ProcN)置于以TAB为首址的地址表内 (2) 根据给出的分支序号(序号乘以2), 由查表指令“MOVC”取出相应分支入口地址置于 DPTR中,将累加器清零后,执行JMP A+DPTR指令, 转向相应处理程序。 (3)本程序可实现多达 128 个分支选择

8、,程 序可分布在 64KB 存储区域内。 根据R7的内容转向相应的处理程序 北京交通大学 14 源程序: ORG 2000H MOV DPTR ,#TAB ;置分支入口地址表首址 MOV A,R7 ;分支转移序号送A ADD A,R7 ;分支转移序号乘以2 MOV R3,A ;暂存入R3 MOVC A,A+DPTR ;程序入口地址高8位暂存R3 XCH A,R3 INC A MOVC A,A+DPTR ;程序入口地址低8位送入DPL MOV DPL,A MOV DPH,R3 ;程序入口地址高8位送入DPH CLR A ;清累加器 JMP A+DPTR ;转向处理程序 TAB: DW Proc0

9、 DW Proc1 DW ProcN 北京交通大学 15 直接跳转: 假设累加器A中内容为0-4, 编程实现根据累加器A的内容实现不同的处理 START:MOV R0,A ;将A送R0 ADD A,R0 ;A(A)2 ADD A,R0 ;A(A)3 MOV DPTR,#TABLE ;转移表首地址送DPTR JMP A+DPTR ;散转相应分支入口 TABLE:LJMP FZ0 (3字节);转向应分0的处理入口 LJMP FZ1 ;转向应分1的处理入口 LJMP FZ2 ;转向应分2的处理入口 LJMP FZ3 ;转向应分3的处理入口 LJMP FZ4 ;转向应分4的处理入口 北京交通大学 16

10、 循环程序设计循环程序设计 一、循环程序的基本结构 在基本设计中,控制一部分指令重复执 行若干次,用简短的程序完成大量的处理任 务,这种按某种控制规律重复执行的程序, 称为循环程序。 1. 先执行后判断结构 此结构如图4-4所示。特点是一进入循环 ,先执行循环处理部分,然后根据循环控制 条件判断是否结束循环,若不结束,则继续 执行循环操作;若结束,退出循环。 北京交通大学 17 入口 置循环初值 循环处理 修改循环参数 修改循环参数 循环处理 退出循环 退出循环 循环控制 循环控制 置循环初值 结束 继续 入口 结束 继续 图 4-4 图 4-5 北京交通大学 18 2. 先判断后执行结构 此

11、结构如图4-5所示。特点是一进入循环先判 断循环控制条件是否结束循环,若结束,退出循 环,否则继续执行循环操作。 循环程序由以下四个基本组成部分. (1)置循环初值。设置循环开始的初始值,为 循环做准备。如设计数器,工作单元初值。 (2)循环处理。循环程序中重复执行的内容。 (3)循环修改。修改循环参数,为执行下一次 循环做准备。 (4)循环控制。判断是否结束循环 北京交通大学 19 二、 循环程序设计举例 1. 循环次数已知的情况 通常采用“计数法”来控制循环,选择 “先执行,后判断”循环结构。 例 4-3 多个单字节数求和 设:10 个字节的无符号数据依次存放 在内部 RAM 40H开始的

12、单元中,所求结果 存放在 R3、R2中。 本例循环次数已知,采用计数法控制循环 北京交通大学 20 源程序如下: ORG 8000H MOV R0,#40H ;置数据指针 MOV R7,#10 ;置计数器初值 MOV R3,#0 ;结果单元清零 MOV R2,#0 ; LOOP1: MOV A,R2 ;取加数 ADD A,R0 ;求和 MOV R2,A ;存结果低 8 位 JNC LOOP2 ;无进位,转LOOP2 INC R3 ;有进位,结果高 8 位加1 LOOP2: INC R0 ;修改指针 DJNZ R7,LOOP1 ;未完,继续 END 北京交通大学 21 2.循环次数未知的情况 在

13、有些问题中,循环次数事先无法确定,但循 环执行次数与问题中的某些条件有关, 而且这些 条件可以测试到,在这种情况下宜选择“先判断, 后执行”的循环结构。 例4-5 把内部 RAM 中起始地址为 data 的数 据串传送到外部 RAM 中起始地址为 buf的 存储区域内,直到发现“$”字符,停止传送 本例结束条件为找到“$”停止传送。 源程序如下: 北京交通大学 22 ORG 8000H MOV R0,#DATA ;置源数据区首地址 MOV DPTR,#BUF ;置目的数据区首地址 LOOP0:MOV A,R0 ;取数据 CJNE A,#24H,LOOP1 ;判断是否为$字符 SJMP LOOP

14、2 ;是$, 转结束 LOOP1: MOVX DPTR,A ;不是$, 执行传送 INC R0 ;修改源地址 INC DPTR ;修改目的地址 SJMP LOOP0 ;传送下一个数据 LOOP2: END 北京交通大学 23 设计20ms延时程序 例:12MHz晶振时,一个机器周期为lS,执行一 条“DJNZ”指令的时间为2S, 20ms = 2S10000 由于8位的计数值最大为256,这时可用双重 循环方法 20ms = 2S100100, 延时20ms程序如下的: 延时程序与51指令执行时间有很大的关系 北京交通大学 24 Mov-1ns DJNZ2ns 内 1+2*100 外1+(内延

15、时+2)*100 D20MS:MOV R4,#100 ;20ms=2S100100 ; 外循环初值=100 DY1:MOV R3,#100 ;内循环初值=100 DY2:DJNZ R3,DY2 ;1002=200=0.2ms DJNZ R4,DY1 ;0.2100=20ms RET 北京交通大学 25 子程序设计子程序设计 子程序的主要特点是:在执行过程中需要由 其它程序来调用,执行完毕又需要把执行流程返 回到调用该子程序的程序中。子程序执行过程如 图 46 所示。 在子程序调用过程中须解决 CALL 子程序 RET 子程序 图 46 以下两个方面的问题: 程序之间的调用与返回; 调用程序与被调用程序之间的参数传送 北京交通大学 26 一、调用与返回指令 1.调用指令 (1)绝对调用指令(2字节指令) 功能:保护断点: 建立子程序入口: 注:ACALL调用范围为2KB。 子程序入口地址 格式:ACALL addr11 PC (PC)+2 ;取指令,断点入栈。 SP

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号