7-单片机系统软件设计
把系统程序翻译为机器码
将汇编语言或高级语言编写的系统用程序(源程序)翻译成能直接执行的机器码 (目标程序)的过程称为编译; 编译的过程实质上是对源程序进行对照翻译工作,目前的翻译工作一般是在PC机上 由编译程序来完成的。
B R T
电子系统设计
对系统程序进行排错、调试
常用的排错、调试方法有两种:一是用开发装置与试验样机联机,提供排错、调试 手段;另一种方式是在计算机上对系统程序进行模拟调试; 开发装置一般都提供了丰富的调试功能:单步运行、断点运行、跟踪运行、全速运 行、夭折处理、检查和改变存储器、寄存器和I/O端口状态等; 模拟调试也称为仿真调试,是在计算机上创造一个模拟目标系统的环境,把编写好 的程序在这个环境下运行,进行排错、调试。它不需要任何在线仿真器,也不需要试 验样机,但对于复杂系统的环境模拟存在一定的难度。
B R T
电子系统设计
3.4.8 单片机系统软件设计
单片机应用系统的开发,除了必须注意硬件电路的正确设计与连 接外,更重要的工作是系统软件开发。
1. 软件的作用
在性能指标允许的条件下,有经验的设计者往往采用最简单的硬 件线路加上巧妙的软件处理方法,来简化甚至是完全代替原来由 硬件线路实现的功能;
定时处理的功能的实现
程序中经常需要定时处理的功能,例如键盘的循环扫描过程,按键的软件消抖动, 动态显示的扫描切换,显示的定时刷新,输入信号定时采集,输出信号定时更新等; 为此,可以采用如图 所示方式进行编程。
B R T
电子系统设计
主程序 Flag1 XX 子程序1 初始化
Flag2 YY
子程序2
软件实现全面的抗干扰设计,以提高应用系统的抗干扰能力。
B R T
电子系统设计
3. 软件的开发步骤
编写系统程序
机器语言编程:是通过直接输入十六进制机器码的方法来编程。这种方法在早期的 单片机系统软件开发中曾使用过,目前很少有人采用了; 汇编语言编程:比较麻烦,容易出错,源程序也比较冗长。但有经验的编程者可以 利用汇编语言编写出高效的程序代码; 高级语言编程:是目前普遍使用的一种编程方式,特点是源程序短,不易出错,特 别适合在数值计算及非实时控制中使用,可以方便地编写出大规模的应用软件程序。
Flag1=0;
tm1++; if (tm1>=XX) {Flag1=1; tm1=0;}
Flag2=1? Y 功能子程序2
N
if (Flag2) return; tm2++; if (tm2>=YY) Flag2=1;
tm2=0; Flag2=0; Nhomakorabea其他功能
返回
B R T
电子系统设计
需要注意的是:
应用程序的固化
程序的固化是通过固化设备(编程器)将机器码固化到单片机芯片内部,或固化到 片外的程序存储器中; 在固化了程序的试验样机中运行系统软件,如果运行结果完全满足系统功能要求, 整个软件开发工作就算完成了。
B R T
电子系统设计
4. 软件程序的编写方法
了解待设计系统的硬件环境
这是因为软件是在硬件系统基础上运行的,不了解硬件环境,就无法编写出适用的 软件程序。
2. 软件应具有的特点
一个优秀的系统软件应具有以下特点:
软件结构清晰、简捷、流程合理;
各功能程序实现模块化、子程序化。这样既便于调试、连接,又便于移植、修改;
程序存储区、数据存储区规划合理,既能节约内存容量,又使操作方便; 运行状态实现标志化管理,程序的运行状态、运行结果以及运行要求都设置相应的 状态标志以便于查询。程序的转移、运行、控制都可通过对状态标志的判断来执行;
精简硬件能降低成本、减小体积,有利于减少故障发生,同时还 可降低对电源与冷却系统的要求,增强系统可靠性和灵活性,这 在批量较大的产品设计中尤为如此; 在某些场合,利用软件取代硬件也不是最佳的,尤其是对速度、 频率有严格要求的条件下,就很难甚至无法用软件来实现所要求 的功能。
B R T
电子系统设计
这是把问题向CPU处理方式转化的第一个步骤。
B R T
电子系统设计
确定算法
算法就是力求把复杂的处理过程归纳成适合CPU处理的,尽可能简单的、重复的判 断和处理。
绘制程序流程图
程序流程图是用箭头、线段、框图及菱形图等画法符号绘制的一种图,它能够把程 序内容直接描述出来; 一般是先设计系统流程图,即主程序流程图,确定系统的总体结构和操作控制过程。 接着就可以逐个设计功能模块的流程图,即子程序流程图。
分析要解决的问题
分析问题就是全面理解待设计的问题,要把解决问题所需条件、要求和结果形式等 搞清楚;
对较大问题的程序设计,一般还要用表格、曲线、框图等手段描述问题或问题的特 征过程,以便于对整个问题的讨论和进行程序设计。
建立数学模型
对于较复杂的问题需要建立数学模型,就是把问题数学化、公式化;
Flag1=1? Y 功能子程序1
N
左图是定时中断服务程序,用中断方 式产生1ms或其他适当时间间隔的定时 信号,并在中断服务程序中做尽可能少 的处理,如计数、设置标识位等。
右图是系统主程序,在主程序的主循 环中,可以对各种标志进行判断,符合 条件则做相应处理,并清除相关标志;
1ms定时中断程序
编写程序
程序编制就是按编程语言的语法规定书写通过CPU解决问题的过程; 编制程序应按指令系统语法规则进行,同时还要注意程序的结构要层次简单、清楚、 易读、便于维护。
B R T
电子系统设计
5. 单片机软件编程技巧
软件的编程要做到模块化
凡是会重复用到的功能,或虽然只用到一次,但实现功能所需要的语句较多时,一 般均编写成程序模块(子程序); 这样做的好处是使程序结构清晰、便于理解、方便调试、有利移植。
主循环一次循环时间应小于一次定时时间间隔,并留有一定余量,以免来不及处 理造成定时误差累积; 主程序中需要对中断程序中用到的变量(如tm2)进行修改或判断时,如果存在 主程序处理相关变量时中断服务程序同时发生的可能性,则主程序应先关闭中断, 待处理、判断完成后再打开中断,避免因变量读写冲突而造成不可预知的现象出现。