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