本节书摘来异步社区《51单片机应用开发从入门到精通》一书中的第1章,第1.1节,作者:张华杰 ,

1.1 单片机开发流程

51单片机应用开发从入门到精通
单片机的开发主要分为硬件开发和软件开发,在系统设计上又有最小系统和扩展系统两种。下面将通过系统硬件设计、软件设计进行开发流程的介绍,并以最小系统及一些典型的扩展系统为例进行简单的说明。

1.1.1 单片机应用系统设计步骤

单片机应用系统是指以单片机为核心,配以一定的外围电路和软件,能实现某种或几种功能的应用系统。它由硬件部分和软件部分组成。一般来说,应用系统所要完成的任务不同,相应的硬件配置和软件配置也就不同。因此,单片机应用系统的设计应包括硬件设计和软件设计两大部分。为保证系统能可靠工作,在软、硬件的设计中,还要考虑其抗干扰能力。

在应用系统的设计中,软件、硬件和抗干扰设计是紧密相关、不可分离的。在有些情况下硬件的任务可由软件来完成(如某些滤波、校准功能等);而在另一些要求系统实时性强、响应速度快的场合,则往往用硬件代替软件来完成某些功能。设计者应根据实际情况,合理地安排软、硬件的比例,选取最佳的设计方案,使系统具有最佳的性能价格比。

设计一个单片机测控系统,一般可分为4个步骤。

 需求分析、方案论证和总体设计阶段
需求分析、方案论证是单片机测控系统设计工作的开始,也是工作的基础。只有经过深入细致的需求分析和周密而科学的方案论证才能使系统设计工作顺利完成。

需求分析的内容主要包括:被测控参数的形式(电量、非电量、模拟量、数字量等)、被测控参数的范围、性能指标、系统功能、工作环境、显示、报警、打印要求等。

方案论证是根据用户要求设计出符合现场条件的软硬件方案,在选择测量结果输出方式上,既要满足用户要求,又要使系统简单、经济、可靠,这是进行方案论证与总体设计一贯坚持的原则。

 器件选择、电路设计制作、数据处理、软件编写阶段
器件选择和电路设计主要根据方案中所确定的指标进行,同时需要考虑器件的电气特性。

数据处理、软件编写是单片机系统实现功能最重要的步骤。首先,设计数据处理的算法,如果是简单的控制可以跳过这一步。然后,设计程序的结构,得到流程图。最后进行程序的编写工作。

 整个系统的设计与性能测定阶段
编制好的程序或焊接好的线路,不能按预计的那样正确工作是常有的事,这就需要查错和调试。查错和调试有时是很费时间的。

调试时,应将硬件和软件分成几部分,逐个部分调试,各部分都调试通过后再进行联调。调试完成后,应在实验室模拟现场条件,对所设计的硬件、软件进行性能测定。

 文件编制阶段
文件不仅是设计工作的结果,而且是以后使用、维修以及进一步再设计的依据。因此,一定要精心编写,描述清楚,使数据及资料齐全。

文件应包括:任务描述;设计的指导思想及设计方案论证;性能测定及现场试用报告与说明;使用指南;软件资料(流程图、子程序使用说明、地址分配、程序清单);硬件资料(电原理图、元件布置图及接线图、接插件引脚图、线路板图、注意事项)。

一个项目定下来后,经过详细调研、方案论证后,就进入正式研制阶段。从总体上来看,设计任务可以分为硬件设计和软件设计,这两者互相结合,不可分离。从时间上来看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要作一些修改。软件设计任务贯彻始终,到中后期基本上都是软件设计任务。

1.1.2 系统硬件设计

单片机应用系统的硬件设计包括3大部分内容:单片机系统的扩展部分设计、各功能模块的设计和工艺设计。

1.单片机系统的扩展部分设计
系统扩展设计包括存储器扩展和接口扩展。存储器的扩展指EPROM、EEPROM和RAM的扩展,接口扩展是指8255、8155、8279以及其他功能器件的扩展。它们都属于单片机系统扩展的内容。

2.各功能模块的设计
如信号测量功能模块、信号控制功能模块、人机对话功能模块、通信功能模块等,根据系统功能要求配置相应的A/D、D/A、键盘、显示器、打印机等外围设备。

为使硬件设计尽可能合理,应重点考虑以下几点:

(1)尽可能采用功能强的芯片,以简化电路。

(2)留有余地。在设计硬件电路时,要考虑到将来修改、扩展方便。

(3)ROM空间。目前EPROM容量越来越大,一般选用2764以上的EPROM,它们都是28脚,要升级很方便。

(4)RAM空间。8031内部RAM不多,当要增强软件数据处理功能时,往往觉得不足。这就要求系统配置外部RAM,如6264、62256等。

(5)I/O端口。在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题是不能单靠软件措施来解决的。如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果硬件设计之初就多设计出一些I/O端口,这问题就会迎刃而解。

(6)A/D和D/A通道。和I/O端口同样的原因,留出一些A/D和D/A通道将来可能会解决大问题。

3.工艺设计
工艺设计包括机箱、面板、配线、接插件等。设计时必须考虑到安装、调试、维修的方便。另外,硬件抗干扰措施也必须在硬件设计时一并考虑进去。

1.1.3 系统软件设计

在进行应用系统的总体设计时,软件设计和硬件设计应综合考虑,同时进行。当系统的电路设计定型后,软件的任务也就明确了。

系统中的应用软件是根据系统功能要求设计的。一般地讲,软件的功能可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量、计算、显示、打印、输出控制等;另一类是监控软件,它专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色。

设计人员在进行程序设计时应从以下几个方面加以考虑:

(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。设计出合理的软件总体结构,使其清晰、简捷,流程合理。

(2)各功能程序实行模块化、子程序化。既便于调试、链接,又便于移植、修改。

(3)在编写应用软件之前,应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,多花些时间来设计程序流程图,就可以节约几倍源程序编辑调试时间。

(4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。其中最关键的是片内RAM分配。对8031来讲,片内RAM指00H~7FH单元,这128个字节的功能不完全相同,分配时应充分发挥其特长,做到物尽其用。例如在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,避免作为他用;20H~2FH这16个字节具有位寻址功能,用来存放各种标志位、逻辑变量、状态变量等;设置堆栈区时应事先估算出子程序和中断嵌套的级数及程序中栈操作指令使用情况,其大小应留有余量。若系统中扩展了RAM存储器,应把使用频率最高的数据缓冲器安排在片内RAM中,以提高处理速度。当RAM资源规划好后,应列出一张RAM资源详细分配表,以备编程查用方便。

(5)注意在程序的有关位置处写上功能注释,提高程序的可读性。

1.1.4 最小应用系统举例

单片机的最小应用系统是单片机最简单的应用,这样的系统虽然不能完成实际的任务,但是已经能够让单片机正常地工作起来。只需要进一步加入外设就能完成一定的任务。下面将以89C51和8031两种单片机为例进行最小系统的介绍。

1.89C51最小应用系统
89C51内部有4KB闪存,芯片本身就是一个最小系统。在能满足系统的性能要求的情况下,可优先考虑采用此种方案。用这种芯片构成的最小系统简单、可靠。用89C5l单片机构成最小应用系统时,只要将单片机接时钟电路和复位电路即可,如图1-1所示。由于集成度的限制,最小应用系统只能用作一些小型的测控单元。

2.8031最小应用系统
8031无片内程序存储器,因此,其最小应用系统必须在片外扩展EPROM。图1-2所示为外接程序存储器的最小应用系统。

片外EPROM或RAM的地址线由P0口(低8位地址线)和P2口(高8位地址线)组成。地址锁存器的锁存信号为ALE。

程序存储器的取指令控制信号为PSEN。当程序存储器只有一片时,可将其片选端直接接地。数据存储器的读/写控制信号为RD、WR,其片选线与译码器输出端相连。

8031芯片必须EA直接接地,其他与89C51最小应用系统一样,也必须有复位及时钟电路。




有单片机可以用java编程的吗 java单片机开发_硬件开发



1.1.5 典型应用系统

在实际应用中,单片机需要在最小应用系统的基础上增加一定的外部设备。外部设备的管理主要通过外部地址进行,这里将介绍地址空间的分配以及总线的驱动。

1.地址空间分配
对于RAM和I/O容量较大的应用系统,主要考虑如何把64KB程序存储器和64KB数据存储器的空间分配给各个芯片,主要有两种方法:线选法和译码器法。

线选法的优点是硬件电路结构简单,但由于所用片选线都是高位地址线,它们的权值较大,地址空间没有充分利用,芯片之间的地址不连续。当芯片所需的片选信号多于可利用的地址线时,常采取全地址译码法。它将低位地址线作为芯片的片内地址(取外部电路中最大的地址线位数),用译码器对高位地址线进行译码,译出的信号作为片选线。一般采用74LS138作地址译码器。图1-3所示是一个全地址译码的系统实例。图中各器件芯片所对应的地址如表1-1所示。


有单片机可以用java编程的吗 java单片机开发_有单片机可以用java编程的吗_02



因为6264是8K字节RAM,所以需要13根低位地址线(A12~A0)进行片内寻址,其他三根高位地址线A15~A13经3-8译码后作为外围芯片的片选线。图中尚剩余三根地址选择线~,可供扩展三片8K字节RAM芯片或三个外围接口电路芯片。

2.总线的驱动
在应用系统中,所有系统扩展的外围芯片都通过总线驱动,外围芯片工作时有一个输入电流,不工作时也有漏电流存在,因此总线只能带动一定数量的电路。MCS-51系列单片机作为数据总线和低8位地址总线的P0口可驱动8个LSTFL电路,而其他口只能驱动4个13TFL电路。当应用系统规模过大时,可能造成负载过重,致使驱动能力不够,系统不能可靠地工作。

(1)总线的驱动扩展

多芯片应用系统,首先要估计总线的负载情况,以确定是否需要对总线的驱动能力进行扩展。图1-4为MCS-51单片机总线驱动扩展原理图。


有单片机可以用java编程的吗 java单片机开发_人工智能_03



地址总线和控制总线的驱动器为单向驱动器,并具有三态输出功能。驱动器有一个控制端,以控制驱动器开通或处于高阻状态。通常,在单片应用系统中没有DMA功能时,地址总线及控制总线可一直处于开通状态,这时控制端接地即可。

常用的单向总线驱动器为74LS244。图1-5为74LS244引脚和逻辑图。8个三态线驱动器分成两组,分别由和来控制。


有单片机可以用java编程的吗 java单片机开发_有单片机可以用java编程的吗_04



数据总线的驱动器应为双向驱动、三态输出,并由两个控制端来控制数据传送方向。如图1-4所示,数据输出允许控制端DBEO有效时,数据总线输入高阻状态,输出为开通状态;数据输入允许控制端DBEI有效时则状态与以上相反。

常用的双向驱动器为74LS245,图1-6为其引脚和逻辑图,16个三态门中每两个三态门组成一路双向驱动。驱动方向由bar{G}、DIR两个控制端控制,bar{G}控制端控制驱动器有效或高阻态,在bar{G}控制端有效(bar{G}=0)时,DIR控制端控制驱动器的驱动方向,DIR = 0时驱动方向为从B至A,DIR = 1则相反。


有单片机可以用java编程的吗 java单片机开发_有单片机可以用java编程的吗_05



MCS-51单片机应用系统总线驱动扩展电路中,P0口的双向驱动采用双向驱动器741S245;P2口的单向驱动器采用74LS244。

对于P0口的双线驱动器74LS245,使overline{G}接地保证芯片一直处于工作状态,而输入/输出的方向控制由单片机的数据存储器的“读”控制引脚(overline{RD})和程序存储器的取指控制引脚(overline{PSEN})通与门控制DIR引脚实现。这种连接方法保证无论是“读”数据存储器中数据(有效)还是从程序存储器中取指令(有效)时,都能保证P0口的输入驱动;除此以外的时间里(overline{RD}和overline{PSEN}均无效)保证P0的输出驱动。

对于P2口,因为只作地址输出口,所以74LS244的驱动门控制端1overline{G}、2overline{G}接地。

上面介绍了如何在总线上扩展驱动器,下面简单介绍一下如何来估算驱动器的驱动能力。

总线驱动器驱动能力是以驱动同类门个数度量的。驱动器驱动能力和驱动器负载性质有关。由于驱动器负载有交流和直流之分,因此总线驱动器驱动能力估算时应同时考虑交流和直流负载两方面的影响。

(1)直流负载下驱动能力的估算

在直流负载下,驱动器驱动能力主要取决于高电平输出时驱动器能提供的最大电流和低电平输出时驱动器所能吸收的最大电流,如图1-7所示。图中,I_{OH}为驱动器在高电平输出时的最大输出电流,I_{IH}为每个同类负载所吸收的电流。I_{OL}为驱动器在低电平输出时的最大吸入电流,I_{IL}为驱动器需要为每个同类门提供的吸入电流。显然,下面两个式子满足时才能使驱动器可靠工作。


有单片机可以用java编程的吗 java单片机开发_单片机_06



若设:I_{OH}=15$mA$,I_{OL}=24$mA$,I_{IH}=0.1$mA$和I_{IL}=0.2$mA$, 则根据上述二式求得N_1=150和N_2=120。因此,驱动器的实际驱动能力应为120个同类门。

(2)交流负载下驱动能力的估算

总线上传送的数据是脉冲型信号,在同类门负载为容性(分布电容造成)时就必须考虑电容的影响。驱动器驱动容性负载时的关系如图1-8所示。若设:C_P为驱动器的最大驱动电容,C_ileft(i=1,2,...,Nright)为每个同类门的分布电容。为了满足同类门电容的交流效应,驱动器负载电路应满足如下关系:


有单片机可以用java编程的吗 java单片机开发_嵌入式_07



若取:C_P=15μF,C_i不大于0.3μF,则根据上式可求得N_3=50。

综上所述,驱动器驱动负载门的能力应从交流和直流负载两方面加以考虑。通常,对于TTL负载,主要应考虑直流负载特性,因为TTL电流大,分布电容小;对于MOS型负载,主要考虑交流特性,因为MOS型负载的输入电流很小,分布电容是不容忽视的。


有单片机可以用java编程的吗 java单片机开发_单片机_08



例如,74LS245驱动器常可驱动100多个74LS系列门电路,若把驱动负载的种种因素也考虑在内,起码也能可靠驱动50个同类门。但为了保险起见,74LS245输出线上一般也能挂接30个左右同类门。因此,驱动器不仅可以减轻主机负担,增强单片机驱动负载的能力,为负载电阻和分布电容提供较大的驱动电流,而且也能够消除驱动器后面负载电路对主机芯片的干扰和影响,较好地保证总线上信号波形的完整性。

(3)总线的负载平衡和上拉电阻的配置

在进行单片机应用系统设计时,都是将I/O芯片挂在相关总线上。进行设计时往往注意负载的数量,不使总线过载,但往往忽视总线负载的平衡问题。

所谓总线负载的平衡,主要发生在数据总线DB上。一般来说,I/O部件的数据都以D0为起点往DB上挂,但由于各种接口部件的数据宽度不一致,就极易造成DB的负载失衡。图1-9所示为有2个8位数据的部件、2个4位数据的部件及1个l位数据的接口。按照图1-9的接线,DB各位的负载显然是不平衡的,D4_~___D7只挂了2个负载,而D0连接的负载数达5个之多。


有单片机可以用java编程的吗 java单片机开发_单片机_09



当总的负载较轻时,这种失衡不会引起太大的问题。但若负载接近总线的驱动能力,就有可能影响总线信号的逻辑电平。以图1-9为例,负载不同的各位数据线上,高低电平的数值有明显差异。如高电平有的达4.3V,而有的只有3.7V。图1-9中I/O5的信号位传送很不可靠,常常发生错误,与负载失衡有密切关系。若将I/O4接数据位D7~D4,将I/O5接数据位D7,这样就能改善总线的不平衡程度,提高系统的可靠性。

除了配置总线驱动器,注意总线负载平衡配置之外,在总线上适当安装上拉电阻也可以提高总线信号传输的可靠性,加上拉电阻给总线带来的好处有以下几点。

① 提高信号电平

提高集成电路输入信号的噪声容限,是提高抗干扰能力的一个重要措施。提高信号的高电平可以提高噪声容限,其方法之一是提高芯片的电源电压,方法之二是在总线输出口配置上拉电阻。以8031单片机P0口数据为例,当不加上拉电阻时,P0.0口输出电流为I,端口的高电平为mu=V_{CC}-IR。当加入上拉电阻后,P0.0口输出电流变为I_1,由于负载恒定,则mu=V_{CC}-I_1R ,μ 将要有所提高。

② 提高总线的抗电磁干扰能力

当总线处于高阻状态时是处于悬高状态,比较容易接受外界的电磁干扰。

例如,当程序存储器的地址空间小于64K字节时,由于受到外界干扰而引起程序乱飞,当乱飞空间超出系统程序存储器的地址空间时,程序存储器全部关断,致使数据总线处于高阻状态。外界的电磁干扰信号就很容易通过数据总线进入CPU,引入虚假的程序指令,对程序运行造成更加严重的破坏。若数据总线上配有上拉电阻,总线具有稳定的高电平,这时的指令仅是“FFH”,相当于“MOV R7,A”指令,这比总线上出现的随机指令所造成的后果要好得多。

③ 抑制静电干扰

当总线的负载是CMOS芯片时,由于CMOS芯片的输入阻抗很高,容易积累静电电荷而形成静电放电干扰,严重时会损坏芯片。若在总线上配置上拉电阻,则降低了芯片的输入阻抗,为静电感应电荷提供泄荷通路,提高了芯片使用的可靠性。

④ 有助于削弱反射波干扰

由于总线负载的输入阻抗往往很高,对于变化速度很快的传输信息,当传输线较长时容易引起反射波干扰。若在总线的终端配置上拉电阻,降低了负载的输入阻抗,可有效抑制反射波干扰。

数据总线配置上拉电阻如图1-10所示。上拉电阻一般取2~10kΩ,典型值为10kΩ。实际应用中负载电阻可选用电阻排,其引脚间距与集成芯片标准间距一致,应用起来十分方便。


有单片机可以用java编程的吗 java单片机开发_有单片机可以用java编程的吗_10



1.1.6 数据采集系统

在任何单片机测控制系统中,都是从尽量快速、准确、完整地获得数字形式的数据开始的,因此,数据采集系统作为沟通模拟域与数字域的必不可少的桥梁起着非常重要的 作用。

数据采集系统一般由信号调理电路、多路切换电路、采样保持电路、A/D、CPU、RAM、EPROM组成。其原理框图如图1-11所示。


有单片机可以用java编程的吗 java单片机开发_单片机_11



1.信号调理电路
信号调理电路是传感器与A/D之间的桥梁,也是测控系统中重要组成部分。信号调理的主要功能是:

(1)目前标准化:正业仪表通常采用0~10mA和4~20mA的信号,为了和A/D的输入形式相适应,经I/V变换成电压信号。

(2)某些测量信号可能是非电压量,如热电阻等,这些非电压量信号必须变为电压信号,还有些信号是弱电压信号,如热电偶信号,必须放大滤波,这些处理包括信号形式的变换、量程调整、环境补偿、线性化等。

(3)某些恶劣条件下,共模电压干扰很强,如共模电压高达220V,不采用隔离的办法无法完成数据采集任务,因此,必须根据现场环境,考虑共模干扰的抑制,甚至采用隔离措施,包括地线隔离、路间隔离等。

综上所述,非电量的转换、信号形式的变换、放大、滤波、共模抑制及隔离等,都是信号调理的主要功能。

信号调理电路包括电桥、放大、滤波、隔离等电路。根据不同的调理对象,采用不同的电路。电桥电路的典型应用之一就是热阻测温。用热电阻测温时,工业设备距离计算机较远,引线将很长,这就容易引进干扰,并在热电阻的电桥中产生长引线误差。解决办法有:采用热电阻温度变换器;智能传感器加通讯方式连接;采用三线制连接方法。

信号放大电路通常由运放承担,运放的选择主要考虑精度要求(失调及失调温漂)、速度要求(带宽和上升率)、幅度要求(工作电压范围及增益)及共模抑制要求。常用于前置放大器的有、LF347(低精度),OP-07、OP-27(中等精度)及ICL7650(高精度)等。

滤波和限幅电路通常采用二极管、稳压管、电容等器件。用二极管和稳压管的限幅方法会产生一定的非线性且灵敏度下降,这可以通过后级增益调整和非线性校正补偿。此外,由于限幅值比最大输入值高,当使用多路开关时,某一路超限可能影响其他路,需选用优质的多路模拟开关,如AD7501。

共模电压的存在对模拟信号的处理有影响,高的共模电压会击穿器件,即使没有损坏器件,也会影响测量精度。隔离是克服共模干扰影响的有效措施。常用的隔离方法有光电隔离或采用隔离放大器等。

2.多路切换电路
通常被检测的物理量有多个,如果每一通道都设有放大、采样保持(S/H)和ADC几个环节就很不经济,而且电路也复杂。采用模拟多路开关就可以使多个通道共用一个放大器、S/H和ADC,采用时间分割法使几个模拟通道轮流接通,这样既经济,又使电路简单。模拟多路开关的选择主要考虑导通电阻的要求、截止电阻的要求和速度要求,常用的模拟多路开关有CD4501、CD4066、AD7501、AD7507等。为了降低截止通道的负载影响,提高开关速度,降低通道串扰,采用多级模拟多路开关来完成通道切换。

3.采样保持电路(S/H)
采样保持电路是为了保证模拟信号高精度转换为数字信号的电路。在模拟数字变换电路中,如果变换期间输入电压是变化的,那么就可能产生错误的数字信号输出。采样保持电路就是将快速变化的模拟信号进行“采样”与“保持”,使模拟信号在ADC转换过程中保持不变。采样保持器的选择要综合考虑捕获时间、孔隙时间、保持时间、下降率等参数。常用的采样保持器有AD582、AD583、13398等。

4.模—数转换(ADC)
ADC是计算机同外界交换信息所必需的接口器件,因为它能将描述自然现象和生产过程的模拟量转换成便于计算机存储和处理的数字量。因此,从某种意义上说,没有ADC的广泛应用,就没有计算机应用技术的发展。选择ADC需主要考虑的指标有分辨率、转换时间、精度、电源、输入电压范围、工作环境、数字输出特性、价格等。

5.基本的单片机系统
基本的单片机系统除了采用前面介绍的外,电可采用片内带有多路转换开关、采样保持电路、ADC的高集成度的单片机。例如可采用Philips公司的8XC552型,也可采用Intel公司的MCS-96单片机(16位)。由于数据采集系统许多单元电路都集成在单片机内,这给硬件设计工作带来了极大的方便。