单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计

上传人:E**** 文档编号:89354544 上传时间:2019-05-23 格式:PPT 页数:56 大小:561KB
返回 下载 相关 举报
单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计_第1页
第1页 / 共56页
单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计_第2页
第2页 / 共56页
单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计_第3页
第3页 / 共56页
单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计_第4页
第4页 / 共56页
单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计》由会员分享,可在线阅读,更多相关《单片机技术教学做一体化教程 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 万长征 谢利华 魏洪昌 8.单片机汇编程序设计(56页珍藏版)》请在金锄头文库上搜索。

1、8. 单片机汇编程序设计,任务和知识点,任务 基本运算程序设计 码制转换程序设计 检索类程序设计 查表类程序设计 知识点 程序设计的基本要求 程序设计的三大基本结构 模块化设计思想 掌握运算类、跳转类指令等用法,8.1 汇编程序设计概述,程序设计是单片机应用系统设计的重要组成部分,计算机的全部动作都是在程序控制下进行的。,为了编写出能够解决实际问题、功能强大的高质量应用程序,设计者必须在掌握单片机硬件知识基础上,再来学习程序设计的步骤与方法。,8.1.1 汇编语言源程序的设计步骤,汇编语言程序设计的一般步骤为,先分析实际问题,然后给出问题的解题算法,并由此算法画出流程图,再根据流程图写出汇编语

2、言程序。,1、任务分析,首先对单片机应用系统要完成的任务进行分析,明确系统的设计任务、功能要求。同时,对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。,2、确定算法,熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。,3、画出程序流程图,经过任务分析、确定算法后,就可以进行程序的总体构思,确定程序的结构和数据形式,并充分考虑内存工作区及有关端口地址等软件资源分配等要素,然后,根据程序运行过程,画出程序流程图(又称为程序框图)。常用的流程图符号,如图8-1所示。,4、编制汇编源程序,根据流程图,用汇编指令实现流程图中的每一个步骤,编写

3、出源代码。设计者应在掌握程序设计的基本方法和技巧的基础上,注意所编写程序的可读性和正确性,必要时应在程序的适当位置加以注释。,5、仿真调试程序,将编写好的程序在仿真器(通常KEIL软件仿真,也可以使用硬件仿真)上以单步、断点、连续等方式运行程序,测试程序的正确性、效率等。,8.1.2 程序设计的三大基本结构,一般把程序结构分成三种形式,即顺序结构、分支结构和循环结构。,三种基本结构的共同特点:只有一个入口;只有一个出口;结构内的每一部分都有机会被执行到。,在此简单介绍各种程序结构的特点。,1、顺序结构,顺序结构是最简单的程序结构,其特点是按程序编写的顺序依次执行,程序流向不变。它是所有复杂程序

4、的基本组成部分,如图8-2所示。,图 82 顺序结构示意图,2、分支结构,分支结构可根据程序要求,有条件地改变程序执行顺序,选择程序流向,如图8-3所示。,设计分支结构时要注意:(1)建立可供条件转移指令测试的条件;,图 83 分支结构示意图,(2)选用合适的条件转移指令;(3)在转移目的地址处设定标号。,3、循环结构,在实际程序中,某段程序指令需要多次重复执行,我们可将其设计为循环结构程序段,如图8-4所示。,设计循环结构时要注意:(1)建立可供条件转移指令测试的循环标志;(2)选用合适的条件转移指令;(3)在转移目的处设定标号;(4)不能形成死循环。,图 84 循环结构示意图,8.1.3

5、模块化设计,所谓模块化,就是把程序分成若干个模块,每个模块完成一定的子功能,将这些模块有机组合成一个整体,就可以完成复杂功能的程序设计工作。如图8-5所示。,在具体设计各个模块(又称为子程序)时,有若干问题需要加以说明。,1、子程序的调用与返回,首先,我们把调用程序称为主程序,被调用的程序称为子程序。所谓调用子程序,就是暂时中断主程序的执行,而转到子程序的入口地址去执行子程序,子程序可以嵌套调用或多次调用。,子程序的第一个语句必须有一个标号,如SUB1,代表该子程序第一个语句的地址,也称为子程序入口地址,供主程序调用;子程序的最后一句必须是子程序返回指令RET。,2、现场的保护与恢复,子程序经

6、常会用到一些通用单元,如工作寄存器R0R7、累加器A、数据指针DPTR以及PSW等。而这些工作单元在调用它的主程序中也会用到,为此,需要将子程序用到的这些通用单元数据加以保护,称为保护现场。在子程序执行完后需恢复这些单元的内容,称为恢复现场。,通常情况下,保护和恢复现场是在子程序中利用堆栈操作实现的,在子程序的开始部分把子程序中要用到的编程资源都保护起来,返回指令之前恢复现场,这是一种比较规范的方法。如例8-1所示。,【例8-1】在子程序中实现现场保护和现场恢复,3、主程序与子程序之间的参数传递,主程序调用子程序时,主程序和子程序之间存在着参数互相传递的问题。在调用子程序时,主程序应通过某种方

7、式把有关参数(即子程序的入口参数)传给子程序,当子程序执行完毕后,又需要通过某种方式把有关参数(即子程序的出口参数)传给主程序。,在51单片机中,传递一般有以下三种方法:,1)寄存器传递参数;,一般来说,当相互传递的数据较少时,采用寄存器传递方式可以获取较快的传递速度,2)利用堆栈传递参数;,3)利用存储器地址传递参数,当相互传递的数据较多时,宜采用存储器地址或堆栈方式传递参数;,如果是子程序嵌套调用时,最好采用堆栈方式。利用堆栈传递参数,【例8-2】假设a、b均小于10,计算c=a2+b2,其中a事先存在内部RAM的31H单元,b事先存在32H单元,把c存入33H单元。,4、子程序的说明,如

8、上例所示,在子程序的开头以程序注释形式进行说明,内容包括有:,(1)子程序名:提供给主程序调用的名字; (2)子程序功能:简要说明子程序能完成的主要功能; (3)入口参数:主程序需要向子程序提供的参数; (4)出口参数:子程序执行完之后向主程序返回的参数; (5)占用资源:该子程序中使用了那些存储单元、寄存器等。,这些说明是写给程序员看的,供以后使用子程序时参考。,8.2 基本运算程序设计,单片机的一个基本功能就是能进行数学运算和逻辑运算,本节我们来学习加减算数运算和简单逻辑运算的程序设计。,8.2.1 多字节无符号数加法程序设计,【例8-3】将内部RAM30H开始的4个单元中存放的四字节16

9、进制数和内部RAM 40H单元开始的4个单元中存放的四字节16进制数相加,结果存放到40H开始的单元中。,如何直观观察多字节加法的执行过程?或按下CTRL+F5键进入调试状态。Debug 菜单项命令在调试状态与编缉状态相比有明显的变化,原来不能用的命令现在已可以使用了,如图8-6所示。,图 86 DEBUG调试菜单项的编辑状态与调试状态对比示意图,同时,工具栏会多出一个用于运行和调试的工具条, Debug 菜单上的大部份命令可以在此找到对应的快捷按钮。,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范

10、围分析、1串行窗口、内存窗口、性能分析、工具按钮等命令,如8-7图示。,图 87 调试工具栏,学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。,全速运行是指一行指令紧接一行指令执行,中间不停止,这样程序的执行速度很快,并可以看到整个程序段的总体执行效果。,单步执行是每执行一行指令后就暂停,等待命令是否执行下一行指令。,在程序调试时,两种运行方式都要用到。,当例8-3程序进入调试状态后,可以看到源程序窗口的左边出现一个黄色调试箭头,指向源程序的某行指令,如图8-8所示。每按一次F11键,即执行该箭头所指程序行,然后箭头指向下一行,不断按F11键,即可逐步执行程序。,在执行过程中,通过

11、左侧工程窗口观察工作寄存器、堆栈指针、累加器A等通用资源是否发生变化,也可以通过底部的存储器窗口观察存储单元值的变化。,想一想,做一做?,1、请指出ADD(不带进位加法指令)与ADDC(带进位加法指令)的不同之处?,8.2.2 多字节无符号数的减法,【例8-4】设两个N字节的无符号数分别存放在内部RAM以DATA1和DATA2开始的单元中,相减后的结果存入DATA2所在的数据区中。,程序说明如下:,首先,减法指令只有SUBB(带借位减法指令)一种,运算形式为:,其次,本例中使用了DATA1和DATA2这样的符号来代表某一实际存储位置,增加了程序编制的灵活性;,最后,本例采用循环结构,提高编程效

12、率,降低了代码冗余量。,运算与加法指令一样,是从低位字节开始的,故而运算之前,必须将CY位清零;,结合本例,来讲解循环结构程序的编制。,1、循环结构程序组成,从以上循环程序实例中,我们看到循环程序的特点是程序中含有可以重复执行的程序段。循环程序由以下三部分组成:,(1)初始化部分。程序在进入循环处理之前必须先设立初值,例如循环次数计数器、工作寄存器以及其它变量的初始值等,为进入循环做准备。,(2)循环体。循环体也称为循环处理部分,是循环程序的核心。循环体用于处理实际的数据,是重复执行部分。,条件控制循环在循环次数未知的情况下,一般通过设立结束条件来控制循环的结束,例7-1内循环就是用条件A=0

13、来控制循环结束。,(3)循环控制。在重复执行循环体的过程中,不断修改和判别循环变量,直到符合循环结束条件。一般情况下,循环控制有以下几种方式:,计数循环如果循环次数已知,用计数器计数来控制循环次数,这种控制方式用得比较多。循环次数要在初始化部分予置,在控制部分修改,每循环一次计数器内容减1。例8-4属于计数循环控制方式。,开关量与逻辑尺控制循环这种方法经常用在定时、计数、串行通信等过程控制程序设计中,请同学们参阅。,2. 循环程序的基本结构,循环程序通常有两种编制方法:一种是先处理再判断,另一种是先判断后处理。如图8-9所示。,图 89 循环程序设计结构示意图,3. 多重循环结构程序,有些复杂

14、问题,必须采用多重循环的程序结构,即循环程序中包含循环程序或一个大循环中包含多个小循环程序,称为多重循环程序结构,又称循环嵌套。多重循环程序必须注意的是各重循环不能交叉,不能从外循环跳入内循环。,想一想,做一做?,1、采用循环的方法将例8-3来编程,同学们可试一试?,8.2.3 逻辑运算程序设计,【例8-5】编写一程序,实现图8-10所示的逻辑运算电路。其中,X、Y、Z代表输入项,F代表输出项。,图 810 布尔电路图,我们看到图中运用位与、位或、位非,以及位异或等逻辑运算形式;但单片机指令中只指供了与、或、非等位运算指令,故位异或运算必须由与、或、非指令组合而成,公式如 所示。,相关程序代码

15、如下:,想一想,做一做?,1、逻辑运算指令有字节运算和位运算两种形式,为什么本例不能用XRL指令?,8.3 码制转换类程序设计,在计算机内部,任何数据最终都是以二进制形式出现的。但是人们通过外部设备与计算机交换数据采用的常常又是一些别的形式。例如:,标准的编码键盘和标准的CRT显示器使用的都是ASCII码;,人们习惯使用的是十进制,在计算机中表示为BCD码,因此,汇编语言程序设计中经常会碰到代码转换的问题,这里提供了BCD码、ASCII码与二进制数相互转换的基本方法和子程序代码。,8.3.1 BCD码与二进制数的相互转换,1、BCD码转换成二进制数,【例8-6】把累加器A中的BCD码转换成二进

16、制数,结果仍存放在累加器A中。,程序分析如下:,压缩型BCD码是用四位二进制数表示一位十进制数,用一个字节表示2位十进制数的编码形式。因此在累加器A中存放的BCD码数的范围是099,转换成二进制数后是00H63H,所以仍然可以存放在累加器A中。,本例解题方法是将A中的高半字节(十位)乘以10,再加上A的低半个字节(个位)的方法,得到相应的二进制数。编程重点是如何将A中的十位数与个位数分离出来,这就要掌握SWAP指令和ANL指令的用法。,2、二进制数转换为BCD码,【例8-7】将累加器A中的二进制数0FFH内的任一数转换为BCD码(0255),程序分析如下:,BCD码是每4位二进制数表示一位十进制数,本例所要求转换的最大BCD码为255,表示成BCD码需要12位二进制数,超过了一个字节(8位),因此我们把高4位存放在B的低4位,高4位清零;低8位存放在A中。,转换的方法是将A中二进制数除以100、10,所得商即为百、十位数,余数为个位数。,8.3.2 二进制数与ASCII码之间的相互转换,1、ASCII码转换为二进制数,

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

当前位置:首页 > 高等教育 > 大学课件

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