当前位置:文档之家› 单片机程序设计方法总结.doc

单片机程序设计方法总结.doc

单片机程序设计方法总结
程序设计是单片机开发最重要的工作程序设计就是利用单片机的指令系统根据应用系统即目标产品的要求编写单片机的应用程序其实我们前面已经开始这样做过了这一课我们不是讲如何来设计具体的程序而是教您设计单片机程序的基本方法不过在讲解之前还是有必要先了解一下单片机的程序设计语言这里的语言与我们通常理解的语言是有区别的它指的是为开发单片机而设计的程序语言如果
您没有学过程序设计可能不太明白我给大家简单解释一下您知道微软的VB VC 吗VB VC 就是为
某些工程应用而设计的计算机程序语言通俗地讲它是一种设计工具只不过这种工具是用来设计计
算机程序的要想设计单片机的程序当然也要有这样一种工具说设计语言更确切些单片机的设计
语言基本上有三类:
1 .完全面向机器的机器语言
机器语言就是能被单片机直接识别和执行的语言计算机能识别什么以前我们讲过--是数字0
或1 所以机器语言就是用一连串的0 或1 来表示的数字比如MOV A 40H 用机器语言来表示就是
11100101 0100000 很显然用机器语言来编写单片机的程序不太方便也不好记忆我们必须想办法
用更好的语言来编写单片机的程序于是就有了专门为单片机开发而设计的语言
2. 汇编语言
汇编语言也叫符号化语言它使用助记符来代替二进制的0 和1 比如刚才的MOV A40H 就是汇编语言
指令显然用汇编语言写成的程序比机器语言好学也好记所以单片机的指令普遍采用汇编指令来编写
用汇编语言写成的程序我们就叫它源程序或源代码可是计算机不能识别和执行用汇编语言写成的程
序啊怎么办当然有办法我们可以通过翻译把源代码译成机器语言这个过程就叫做汇编,汇编工作现在
都是由计算机借助汇编程序自动完成的不过在很早以前它是靠手工来做的.
值得注意的是:汇编语言也是面向机器的,它仍是一种低级语言每一类计算机都有它自己的汇
编语言比如51 系列有它的汇编语言;PIC 系列也有它的汇编语言微机也有它自己的汇编语言它
们的指令系统是各不相同的也就是说不同的单片机有不同的指令系统它们之间是不通用的,这就
是为什么世界上有很多单片机类型的缘故了,为了解决这个问题人们想了很多的办法设计了许多的
高级计算机语言而现在最适合单片机编程的要数C 语言.
3 .C 语言—高级单片机语言
C 语言是一种通用的计算机程序设计语言,它既可以用来编写通用计算机的系统程序也可以用
来编写一般的应用程序,由于它具有直接操作计算机硬件的功能所以非常适合用来编写单片机的
程序与其他的计算机高级程序设计语言相比它具有以下的特点:
1 .语言规模小使用简单
在现有的计算机设计程序中C 语言的规模是最小的ANSIC 标准的C 语言一共只有32 个关键字
9 种控制语句然而它的书写形式却比较灵活表达方式简洁使用简单的方法就可以构造出相当复杂
的数据类型和程序结构
2 .可以直接操作计算机硬件
C 语言能够直接访问单片机的物理空间地址KEIL C51 软件中的C51 编译器更具有直接操作51
单片机内部存储器和I/O 口的能力亦可直接访问片内或片外存储器还可以进行各种位操作
3 .表达能力强表达方式灵活
C 语言有丰富的数据结构类型可以采用:整型\实型\字符型\数组类型\指针类型\结构类型
\联合类型\枚举类型等多种数据类型来实现各种复杂数据结构的运算,利用C 语言提供的多种运算符
我们可以组成各种表达式还可以采用多种方法来获得表达式的值从而使程序设计具有更大的灵活性,所以
单片机入门后尽量学习C语言。

二。

单片机程序设计的步骤
单片机的程序设计通常包括根据任务绘制程序流程图编写程序及汇编等几个步骤
绘制流程图
所谓流程图就是用各种符号图形箭头把程序的流向及过程用图形表示出来绘制流程图是
单片机程序编写前最重要的工作通常我们的程序就是根据流程图的指向采用适当的指令来编写的下
面的图形和箭头就是我们绘制流程图用的工具,
绘制流程图时首先画出简单的功能流程图粗框图再对功能流程图进行扩充和具体化即对
存储器标志位等单元做具体的分配和说明把功能图上的每一个粗框图转化为具体的存储器或地址单
元从而绘制出详细的程序流程图即细框图下面举个例子给大家演示一下请看下面的程序主程序
LOOP:SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
LJMP LOOP
子程序
DELAY MOV R7 #250
D1 MOV R6 #250
D2 DJNZ R6 D2
DJNZ R7 D1
RET END。

下面结合按键在实验板上做一下:
ORG 0000H
LJMP START
ORG 30H
START MOV SP #5FH
MOV P1 #0FFH
MOV P3 #0FFH
L1 JNB P3.2 L2;P3.2
JNB P3.3 L3 ;P3.3
LJMP L1
L2 CLR P1.0
LJMP L1
L3 SETB P1.0
LJMP L1
END
2 。

分支结构程序的设计
亮LED1暗LED1
所谓分支结构就是利用条件转移指令使程序执行某一指令后根据所给的条件是否满足来改变
程序执行的顺序也就是本条指令执行完后并不是象顺序结构那样执行下一条指令而是看本条指令
所给的条件是否满足如果满足条件就跳转到其他的指令如果不满足就顺序执行当然也可以是满足
条件顺序执行而不满足条件跳转执行看十五课实验程序中的下面两条
L1 JNB P3.2 L2 ;P3.2 上接有一只按键它按下时P3.2=0
JNB P3.3 L3 ;P3.3 上接有一只按键它按下时P3.3=0
这就是分支结构的程序如果P3.2 为0 就转移反之就顺序执行当然也可以改成P3.2=0
顺序执行而P3.2=1 则转移不过此时的程序就要用JB 指令了在51 系列单片机中可以直接用于
分支程序的指令有JB JNB JC JNC JZ JNZ CJNE JBC 等这几条它们可以完成诸如正负判断
大小判断和溢出判断等等在分支结构的指令设计中大家必须注意.执行一条判断指令只可以形成
两路分支如果要形成多路分支就必须进行多次判断也就是多条指令连续判断下面给大家举两个
例子
A 单分支结构的程序实例
假设有两个数在内部RAM 单元的40H 和41H 中现在要求找出其中较大的一个数并将较大的数
存入40H 中而将较小的一个数存入41H 中根据程序的要求我们先画出程序的流程图
再根据流程图写出程序的源代码如下
MOV A 40H
CLR C
SUBB A 41H
JNC WAIT
MOV A 41H
XCH A 41H
MOV 40H A
WAIT SJMP WAIT
END
程序的原理请大家自行分析一下接下来再举一个多分支结构的实例看下面的程序
MOV A 20H
取数
JZ ZERO ;A=0
转移A=1 顺序执行
JB ACC 7 STORE ;A
为负数转移
ADD A #3 ;A
SJMP STORE
ZERO MOV A #20
STORE MOV 21H A
为正数则加3
自己画一下本例的流程图这里有一条指令给大家解释一下JB ACC.3 STORE ;ACC.3 表示累加器A
中的D3 位这条指令的意思就是看一下累加器中的D3 位是正还是负D3 是什么呢,在这里就是0 20H
的二进制10000000
3 循环结构程序的设计
循环程序是最常用的程序结构形式在单片机的程序设计中有时要碰到一段程序需要重复执行
多次的情况此时就要用到循环结构程序比如前面的实验--LED 灯闪烁程序的子程序DELAY MOV R7 #250 ;1
D1 MOV R6 #250 ;2
D2 DJNZ R6 D2 ;3
DJNZ R7 D1 ;4。

相关主题