单片机程序设计方法

上传人:自*** 文档编号:79027466 上传时间:2019-02-16 格式:DOC 页数:28 大小:55.50KB
返回 下载 相关 举报
单片机程序设计方法_第1页
第1页 / 共28页
单片机程序设计方法_第2页
第2页 / 共28页
单片机程序设计方法_第3页
第3页 / 共28页
单片机程序设计方法_第4页
第4页 / 共28页
单片机程序设计方法_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《单片机程序设计方法》由会员分享,可在线阅读,更多相关《单片机程序设计方法(28页珍藏版)》请在金锄头文库上搜索。

1、第十六课 单片机程序设计方法 程序设计是单片机开发最重要的工作 程序设计就是利用单片机的指令系统 根据应用系统即目标产品的要求编写单片机的应用程序 其实我们前面已经开始这样做过了 这一课我们不是讲如何 来设计具体的程序 而是教您设计单片机程序的基本方法 不过在讲解之前还是有必要先了解一下单片机的程序设计语言一 程序设计语言这里的语言与我们通常理解的语言是有区别的 它指的是为开发单片机而设计的程序语言 如果 您没有学过程序设计可能不太明白 我给大家简单解释一下 您知道微软的 VB VC 吗 VB VC 就是为 某些工程应用而设计的计算机程序语言 通俗地讲 它是一种设计工具 只不过这种工具是用来设

2、计计算机程序的 要想设计单片机的程序当然也要有这样一种工具说设计语言更确切些单片机的设计 语言基本上有三类1 完全面向机器的机器语言机器语言就是能被单片机直接识别和执行的语言 计算机能识别什么 以前我们讲过-是数字 0或 1所以机器语言就是用一连串的 0 或 1 来表示的数字 比如 MOV A 40H 用机器语言 来表示就是 11100101 0100000 很显然 用机器语言来编写单片机的程序不太方便 也不好记忆 我们必须想办法用更好的语言来编写单片机的程序 于是就有了专门为单片机开发而设计的语言2 汇编语言汇编语言也叫符号化语言 它使用助记符来代替二进制的 0 和 1比如 刚才的 MOV

3、A40H 就是汇编语言指令 显然用汇编语言写成的程序比机器语言好学也好记 所以单片机的指令普遍采 用汇编指令来编写 用汇编语言写成的程序我们就叫它源程序或源代码 可是计算机不能识别和执行用 汇编语言写成的程序啊 怎么办 当然有办法 我们可以通过 翻译 把源代码译成机器语言 这个过 程就叫做汇编 汇编工作现在都是由计算机借助汇编程序自动完成的 不过在很早以前 它是靠手工来 做的 道听途说 我也没经历过 呵呵值得注意的是 汇编语言也是面向机器的 它仍是一种低级语言 每一类计算机都有它自己的汇 编语言 比如 51 系列有它的汇编语言 PIC 系列也有它的汇编语言 微机也有它自己的汇编语言 它 们的指

4、令系统是各不相同的 也就是说 不同的单片机有不同的指令系统 它们之间是不通用的 这就 是为什么世界上有很多单片机类型的缘故了 为了解决这个问题 人们想了很多的办法 设计了许多的 高级计算机语言 而现在最适合单片机编程的要数 C 语言3 C 语言高级单片机语言C 语言是一种通用的计算机程序设计语言 它既可以用来编写通用计算机的系统程序 也可以用 来编写一般的应用程序 由于它具有直接操作计算机硬件的功能 所以非常适合用来编写单片机的程序与其他的计算机高级程序设计语言相比 它具有以下的特点1语言规模小 使用简单在现有的计算机设计程序中 C 语言的规模是最小的 ANSIC 标准的 C 语言一共只有 3

5、2 个关键字9 种控制语句 然而它的书写形式却比较灵活 表达方式简洁 使用简单的方法就可以构造出相当复杂 的数据类型和程序结构2可以直接操作计算机硬件C 语言能够直接访问单片机的物理空间地址KEIL C51 软件中的 C51 编译器更具有直接操作 51单片机内部存储器和 I/O 口的能力亦可直接访问片内或片外存储器 还可以进行各种位操作3表达能力强 表达方式灵活C 语言有丰富的数据结构类型 可以采用整型 实型 字符型 数组类型 指针类型 结构类型联合类型 枚举类型等多种数据类型来实现各种复杂数据结构的运算 利用 C 语言提供的多种运算符我们可以组成各种表达式 还可以采用多种方法来获得表达式的值

6、 从而使程序设计具有更大的灵活性 55- 4可进行结构化设计结构化程序是单片机程序设计的组成部分 C 语言中的函数相当于汇编语言中的子程序 KEILC51 的编译器提供了一个函数库 其中包含有许多标准函数 如各种数学函数 标准输入输出函数等此外还可以根据用户需要编制满足某种特殊需要的自定义函数 C 语言程序就是由许多个函数组成的一个函数即相当于一个程序模块 所以 C 语言可以很容易地进行结构化程序设计5可移植性前面我们讲过 由于单片机的结构不同 所以不同类型的单片机就要用不同的汇编语言来编写程序 而 C 语言则不同 它是通过汇编来得到可执行代码的 所以不同的机器上有 80%的代码是公用的 下册

7、中专门来讲解 C 语言的应用及其编程原理不过作为单片机初学者想要学会 C 语言也并不是一件容易的事 因此对于大多数人来说 汇编语 言仍是编写单片机程序的主要语言 我们上册的教程将全部以汇编语言来编写单片机的程序 了解了单 片机编程的设计语言 下面我们来看单片机编程的基本过程和步骤二 单片机程序设计的步骤单片机的程序设计通常包括根据任务绘制程序流程图 编写程序及汇编等几个步骤1 绘制流程图所谓流程图 就是用各种符号 图形 箭头把程序的流向及过程用图形表示出来 绘制流程图是 单片机程序编写前最重要的工作 通常我们的程序就是根据流程图的指向采用适当的指令来编写的 下面的图形和箭头就是我们绘制流程图用

8、的工具图中左边所示绘制流程图时 首先画出简单的功能流程图粗框图再对功能流程图进行扩充和具体化 即对存储器 标志位等单元做具体的分配和说明 把功能图上的每一个粗框图转化为具体的存储器或地址单元 从而绘制出详细的程序流程图 即细框图 下面举个例子给大家演示一下 请看下面的程序主程序LOOP:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP LOOP子程序DELAYMOVR7#250D1MOVR6#250 56- D2 DJNZ R6 D2DJNZ R7 D1RETEND还记得吗 这是我们第四课中做过的 LED 灯闪烁的实验 以前我们曾对程序进行过分析 现在让

9、我们用流程图来把这段程序的主程序部分画出来 看上图的右边部分 这就是程序的流程图 在单片机 的编程过程中 绘制流程图能看清楚程序执行的步骤以及程序的流向 事实上 程序的编写就是根据流 程图的功能完成的 下面我们来把第十五课中的那个程序也用流程图画出来 程序如下ORG 0000HLJMP STARTORG 30HSTART MOV SP #5FHMOVP1#0FFHMOVP3#0FFHL1JNBP3.5 L2P3.5 上接有一只按键它按下时P3.5=0JNBP3.6 L3P3.6 上接有一只按键它按下时P3.6=0LJMP L1L2 CLR P1.0 亮 LED1LJMP L1L3 SETB P

10、1.0 暗 LED1LJMP L1END先不看图 自己画一下 看是不是同我画的一样 在实际的程序设计中 根据框图 采用适当的指令编写出实现流程图的源程序就是我们编写程序的最后工作2 编写程序和汇编程序编写完之后 我们要把它汇编成机器语言 这种机器语言就是十六进制文件 后缀名为*.HEX 文件 以前还要把它转换成二进制文件 后缀名为*.BIN 文件 不过现在的编程器都能直接读入十六进 制文件 就不需要转换了 最后用编程器把程序写入单片机 这些以前都讲过了 这里就不重复了 下 面来讲本课的主题程序设计的方法三 单片机程序设计的方法要想搞清楚程序设计的方法 我们首先要知道单片机到底有哪几类程序 单片

11、机的程序分为结构 57- 在单片机的程序中 既有复杂的程序 也有简单的程序 但不论哪种程序 它们都是由一个个基 本的程序结构组成的 这些基本结构有顺序结构 分支结构和循环结构1顺序结构程序的设计顺序结构的程序一般用来处理比较简单的算术或逻辑问题 它的执行过程是按照程序存储器 PC自动加 1 的顺序执行的 主要用数据传递类指令和数据运算类指令来实现 比如我们前面第六课中的I/O 口输入实验就是典型的顺序结构的程序 试试看 把这个程序的流程图写出来 下面再看一个例子将内部 RAM 中 20H 单元和 30H 单元的无符号数相加 存入 R0高位和 R1低位中先画出流程图根据流程图编写源代码如下MOV

12、 A 20HADD A 30HMOV R0 ACLR AADDC A #00HMOV R0 AMOV A 30HADD A R1MOV R1 ACLR AADDC A R0MOV R0 A这就是顺序结构程序 程序的原理就不分析了 我们接着讲分支结构的程序设计这里说明一点 最近有朋友提出这一课的有些程序看不懂 的确如此 这一课的有几个程序实例 58- 我们从来没有学过 之所以放在这里 原本是为了让大家理解程序设计的方法 举几个示例证明一下没想到反而增加了大家的难度 其实这些示例你不需要刻意的去理解它 只要明白它的设计方法就可以了 因为这一课的主要内容是程序设计的方法 而不是程序执行的原理和结果

13、如果以后有更好的示例 我会修改一下2分支结构程序的设计所谓分支结构就是利用条件转移指令 使程序执行某一指令后 根据所给的条件是否满足来改变 程序执行的顺序 也就是本条指令执行完后 并不是象顺序结构那样执行下一条指令 而是看本条指令 所给的条件是否满足 如果满足条件就跳转到其他的指令 如果不满足就顺序执行 当然也可以是满足 条件顺序执行 而不满足条件跳转执行 看十五课实验程序中的下面两条 这就是分支结构的程序 如果 P3.5 为 0就转移 反之就顺序执行 当然也可以改成 P3.5=0 顺序执行 而 P3.5=1 则转移 不过此时的程序就要用 JB 指令了 在 51 系列单片机中 可以直接用于 分支程序的指令有 JBJNBJCJNCJZJNZCJNE JBC 等这几条 它们可以完成诸如正负判断大小判断和溢出判断等等 在分支结构的指令设计中 大家必须注意 执行一条判断指令只可以形成 两路分支 如果要形成多路分支 就必须进行多次判断 也就是多条指令连续判断 下面给大家举两个 例子A 单分支结构的程序实例假设有两个数在内部 RAM 单元的 40H 和 41H 中 现在要求找出其中较大的一个数 并将较大的数 存入 40H 中 而将较小的一个数存入 41H 中 根据程序的要求 我们先画出程序的流程图

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

当前位置:首页 > 办公文档 > 其它办公文档

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