单片机程序分析报告方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言也叫符号化语言它使用助记符来代替二进制的和比如刚才的
就是汇编语言指令显然用汇编语言写成的程序比机器语言好学也好记所以单片机的指令普遍采用汇编指令来编写用汇编语言写成的程序我们就叫它源程序或源代码可是计算机不能识别和执行用汇编语言写成的程序啊怎么办当然有办法我们可以通过翻译把源代码译成机器语言这个过程就叫做汇编汇编工作现在都是由计算机借助汇编程序自动完成的不过在很早以前它是靠手工来做的道听途说我也没经历过呵呵
存储器标志位等单元做具体的分配和说明把功能图上的每一个粗框图转化为具体的存储器或地址单
元从而绘制出详细的程序流程图即细框图下面举个例子给大家演示一下请看下面的程序
主程序
子程序
还记得吗这是我们第四课中做过的灯闪烁的实验以前我们曾对程序进行过分析现在让我们用流程图来把这段程序的主程序部分画出来看上图的右边部分这就是程序的流程图在单片机的编程过程中绘制流程图能看清楚程序执行的步骤以及程序的流向事实上程序的编写就是根据流程图的功能完成的下面我们来把第十五课中的那个程序也用流程图画出来程序如下
绘制流程图
所谓流程图就是用各种符号图形箭头把程序的流向及过程用图形表示出来绘制流程图是单片机程序编写前最重要的工作通常我们的程序就是根据流程图的指向采用适当的指令来编写的下
面的图形和箭头就是我们绘制流程图用的工具图中左边所示
绘制流程图时首先画出简单的功能流程图粗框图再对功能流程图进行扩充和具体化即对
值得注意的是汇编语言也是面向机器的它仍是一种低级语言每一类计算机都有它自己的汇编语言比如系列有它的汇编语言系列也有它的汇编语言微机也有它自己的汇编语言它们的指令系统是各不相同的也就是说不同的单片机有不同的指令系统它们之间是不通用的这就是为什么世界上有很多单片机类型的缘故了为了解决这个问题人们想了很多的办法设计了许多的高级计算机语言而现在最适合单片机编程的要数语言
联合类型枚举类型等多种数据类型来实现各种复杂数据结构的运算利用语言提供的多种运算符
我们可以组成各种表达式还可以采用多种方法来获得表达式的值从而使程序设计具有更大的灵活性
可进行结构化设计
结构化程序是单片机程序设计的组成部分语言中的函数相当于汇编语言中的子程序
的编译器提供了一个函数库其中包含有许多标准函数如各种数学函数标准输入输出函数等
种控制语句然而它的书写形式却比较灵活表达方式简洁使用简单的方法就可以构造出相当复杂的数据类型和程序结构
可以直接操作计算机硬件
语言能够直接访问单片机的物理空间地址软件中的编译器更具有直接操作
单片机内部存储器和口的能力亦可直接访问片内或片外存储器还可以进行各种位操作
表达能力强表达方式灵活
语言有丰富的数据结构类型可以采用整型实型字符型数组类型指针类型结构类型
单分支结构的程序实例
假设有两个数在内部单元的和中现在要求找出其中较大的一个数并将较大的数存入中而将较小的一个数存入中根据程序的要求我们先画出程序的流程图左图
再根据流程图写出程序的源代码如下
程序的原理请大家自行分析一下接下来再举一个多分支结构的实例看下面的程序
取数
转移顺序执行
为负数
转移
为正数
则加
自己画一下本例的流程图再和上面的右图比较一下看是不是一样这里有一条指令给大家解释一下表示累加器中的位这条指令的意思就是看一下累加器中的
分支结构程序的设计
所谓分支结构就是利用条件转移指令使程序执行某一指令后根据所给的条件是否满足来改变程序执行的顺序也就是本条指令执行完后并不是象顺序结构那样执行下一条指令而是看本条指令所给的条件是否满足如果满足条件就跳转到其他的指令如果不满足就顺序执行当然也可以是满足条件顺序执行而不满足条件跳转执行看十五课实验程序中接有一只按键
它按下时


先不看图自己画一下看是不是同我画的一样在实际的程序设计中根据框图采用适当的
指令编写出实现流程图的源程序就是我们编写程序的最后工作
编写程序和汇编
程序编写完之后我们要把它汇编成机器语言这种机器语言就是十六进制文件后缀名为*文件以前还要把它转换成二进制文件后缀名为*文件不过现在的编程器都能直接读入十六进制文件就不需要转换了最后用编程器把程序写入单片机这些以前都讲过了这里就不重复了下面来讲本课的主题—程序设计的方法
中有时也有这样的情况比如下面的程序
主程序
子程序
这是大家非常熟悉的灯延时程序在这段程序中两次调用到了这段程序为了简化程序的设计我们就把这段程序单独地列了出来这段列出的程序我们就叫它子程序而调
用子程序的程序我们则叫它主程序的程序段在主程序执行时每当要用到子程序时我们就用指令来调用子程序子程序执行完之后必须返回主程序返回就用指令这我们
此外还可以根据用户需要编制满足某种特殊需要的自定义函数语言程序就是由许多个函数组成的
一个函数即相当于一个程序模块所以语言可以很容易地进行结构化程序设计
可移植性
前面我们讲过由于单片机的结构不同所以不同类型的单片机就要用不同的汇编语言来编写程
序而语言则不同它是通过汇编来得到可执行代码的所以不同的机器上有的代码是公用的
不为计数器加
修改地址指针
存放结果
试试看自己把上面两段程序的流程图画出来下面再看一个例子
这是一段约的延时程序现在我们来把它改成下面表格中的程序右边的程序
从这里可以引出一个概念程序的嵌套什么是嵌套比如早上我骑自行车从家里到单位去上班
当走到半路上时太太叫我去孩子学校拿点东西到了学校老师又叫我把学校的一台电脑修一下修好电脑一个朋友又打电话叫我去他那里拿了一本单片机与嵌入式系统杂志完了之后再去上班
这里的语言与我们通常理解的语言是有区别的它指的是为开发单片机而设计的程序语言如果您没有学过程序设计可能不太明白我给大家简单解释一下您知道微软的吗就是为某些工程应用而设计的计算机程序语言通俗地讲它是一种设计工具只不过这种工具是用来设计计
算机程序的要想设计单片机的程序当然也要有这样一种工具说设计语言更确切些单片机的设计语言基本上有三类
程序一用计数器控制的单重循环程序
源程序如下
这段程序的作用是从单元开始存放一个数据块其长度存放在单元中将数据块求和
要求将和存放入单元中和不超过下面再举一个条件控制的循环程序
程序二用条件控制的单重循环程序
设字符串存放在内部的开始的单元中以结束作标志要求计算出该字符串的长度并将其存放在单元中
源程序如下
将地址指针指向单元与比较找到结束
完全面向机器的机器语言
机器语言就是能被单片机直接识别和执行的语言计算机能识别什么以前我们讲过是数字
或所以机器语言就是用一连串的或来表示的数字比如用机器语言来表示就是很显然用机器语言来编写单片机的程序不太方便也不好记忆我
们必须想办法用更好的语言来编写单片机的程序于是就有了专门为单片机开发而设计的语言
汇编语言
也不允许从外循环跳入内循环否则编译时会出错了解了结构化程序的设计下面再来看子程序的设计方法
子程序的设计方法
什么是子程序如何设计子程序要解释这个问题让我们先同样从生活中的一个例子说起请看下面的数学题目***在这道题中我们一般是怎么算的
也许大家都知道一般总是先把代出来然后再用*来计算最后的结果
为什么会这样这是因为在这道题中我们多次用到了这个中间结果在单片机的程序设计
下册中专门来讲解语言的应用及其编程原理
不过作为单片机初学者想要学会语言也并不是一件容易的事因此对于大多数人来说汇编语言仍是编写单片机程序的主要语言我们上册的教程将全部以汇编语言来编写单片机的程序了解了单片机编程的设计语言下面我们来看单片机编程的基本过程和步骤
二单片机程序设计的步骤
单片机的程序设计通常包括根据任务绘制程序流程图编写程序及汇编等几个步骤
以前都讲过了这里不再重复
另外如果子程序执行的过程中还要再次调用其他的子程序这种现象我们就称它为子程序的嵌套看上面右边的图就是一个两层子程序的嵌套结构图
这里有个问题在子程序的执行过程中有时可能要使用到累加器和某些工作寄存器而在调用子程序前这些寄存器中可能已经存放有主程序的中间结果它们在子程序返回后仍要使用这样就需
中的指令就是当或中的值为时就转移
循环结束部分
循环结束后必须返回一般用或指令这里注意以上四个部分中第一和第四部分只能执行一次而第二和第三部分可以执行多次
典型的循环结构程序的流程图可画成如下左图所示也可以将处理部分和控制部分位置对调如右图在循环程序设计中循环控制部分是程序设计的关键环节常用的循环控制方式有计数器控制和
这里说明一点最近有朋友提出这一课的有些程序看不懂的确如此这一课的有几个程序实例
我们从来没有学过之所以放在这里原本是为了让大家理解程序设计的方法举几个示例证明一下
没想到反而增加了大家的难度其实这些示例你不需要刻意的去理解它只要明白它的设计方法就可以
了因为这一课的主要内容是程序设计的方法而不是程序执行的原理和结果如果以后有更好的示例我会修改一下
位是正还是负是什么呢在这里就是的二进制上一课刚讲过不要说又忘了接下来再讲第三种循环结构的程序设计
循环结构程序的设计
循环程序是最常用的程序结构形式在单片机的程序设计中有时要碰到一段程序需要重复执行多次的情况此时就要用到循环结构程序比如第四课中的实验灯闪烁程序的子程序
在这段程序中为了延时需要多次执行指令此时若用循环结构程序就可以大大地简化程序
这就是分支结构的程序如果为就转移反之就顺序执行当然也可以改成顺序执行而则转移不过此时的程序就要用指令了在系列单片机中可以直接用于分支程序的指令有等这几条它们可以完成诸如正负判断
大小判断和溢出判断等等在分支结构的指令设计中大家必须注意执行一条判断指令只可以形成两路分支如果要形成多路分支就必须进行多次判断也就是多条指令连续判断下面给大家举两个例子
初始化部分主要用来设置循环的初始值包括预值数计数器和数据指针的初值比如上例中的
就是预值数初值
循环处理部分
循环处理部分是程序的主体部分也称为程序体通过它可以完成程序处理的任务
循环控制部分
循环控制部分可以控制程序循环的次数并修改预值数或计数器和指针的值检查该循环是否执行了足够的次数如果到了足够的次数就采用条件转移指令或判断指令来控制循环的结束比如上例
语言—高级单片机语言
语言是一种通用的计算机程序设计语言它既可以用来编写通用计算机的系统程序也可以用来编写一般的应用程序由于它具有直接操作计算机硬件的功能所以非常适合用来编写单片机的程序
与其他的计算机高级程序设计语言相比它具有以下的特点
语言规模小使用简单
在现有的计算机设计程序中语言的规模是最小的标准的语言一共只有个关键字
这就是生活中的嵌套在单片机的程序设计中也有类似的现象有时为了达到某个目的往往要在一
段循环程序中再加入另一段循环程序这就是单片机的程序嵌套通常我们把一个循环体中不再包含循环的叫做单重嵌套如果一个循环体中还包括有循环则叫做多重嵌套上面的表格中左边的程序就是单重嵌套而右边的程序则是多重嵌套另外须注意在多重嵌套中不允许各个循环体互相交叉
第十六课单片机程序设计方法
程序设计是单片机开发最重要的工作程序设计就是利用单片机的指令系统根据应用系统即
目标产品的要求编写单片机的应用程序其实我们前面已经开始这样做过了这一课我们不是讲如何来设计具体的程序而是教您设计单片机程序的基本方法不过在讲解之前还是有必要先了解一下单片
机的程序设计语言
一程序设计语言
自动加的顺序执行的主要用数据传递类指令和数据运算类指令来实现比如我们前面第六课中的
口输入实验就是典型的顺序结构的程序试试看把这个程序的流程图写出来下面再看一个例子
将内部中单元和单元的无符号数相加存入高位和低位中
先画出流程图
根据流程图编写源代码如下
这就是顺序结构程序程序的原理就不分析了我们接着讲分支结构的程序设计
条件控制两种计数器控制就是把要循环的次数即预值数放入计数器中程序每循环一次计数器的值就减一直到计数器的内容为零时循环结束一般用指令而条件控制方式常预先不知
道要循环的次数只知道循环的有关条件此时就可以根据给定的条件标志位来判断程序是否继续一般参照分支结构方法中的条件来判别指令并执行下面举几个例子来分别解释一下希望大家能以此类
三单片机程序设计的方法
要想搞清楚程序设计的方法我们首先要知道单片机到底有哪几类程序单片机的程序分为结构
在单片机的程序中既有复杂的程序也有简单的程序但不论哪种程序它们都是由一个个基本的程序结构组成的这些基本结构有顺序结构分支结构和循环结构
顺序结构程序的设计
顺序结构的程序一般用来处理比较简单的算术或逻辑问题它的执行过程是按照程序存储器
相关文档
最新文档