单片机水箱控制系统
水箱,广泛应用于宾馆饭店、学校、医院、工矿企业、事业单位、居民住宅、办公大楼,是作为公共生活用水、消防用水和工业用水贮水设施的理想产品。
现实生活中家用太阳能热水器方便、节能、无污染,应用广泛。而太阳能热水器水箱是太阳能热水系统中储存热水的重要部件,直接关系太阳能热水系统的性能和使用寿命。但是由于储水,排水的不当,造成了水资源的浪费,也会造成另外某些不必要的损失。为了减少这些损失,水箱水位的控制成了值得关注的问题。
单片机是现代计算机和电子技术的新兴领域。单片机的单芯片的微小体积和极低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通信产品中,成为现代电子系统中最重要的智能化工具。单片机具有多功能、高性能、低电压、低功耗、低价格的显著特点。所以利用单片机对水箱进行控制可以极大的减少投入,具有很高的经济价值与实用性。利用单片机实现水箱控制,对于提高劳动生产率和产品质量,节约能源等都有着积极意义。
前言
水箱控制在很多领域都有广泛的应用,例如,我们可以根据国内外一些相关文献和现实生活中得知,控制太阳能热水器水箱已成为当今研究的热点。而利用单片机来控制水箱,即节约成本,操作又方便、性能稳定。
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次设计通过对它的学习、应用,以51芯片为核心,辅以必要的电路,设计一个简单的水箱控制系统。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。
第1章 绪论
1.1 单片机的现状与发展趋势
1.1.1 什么是单片机?
随着微电子技术、大规模集成电路技术的发展,可以将CPU,RAM,ROM,定时器/计数器以及输入/输出(I/O)接口电路等主要计算机部件集成在一块集成电路芯片上。这样所组成的芯片级的微型计算机称为单片机微型计算机(single chip microcomputer),直译为单片机或单片微机。虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微机系统的含义。
单片机从功能和形态上来说都是为满足控制领域应用要求的,并且发展到新一代80C51,M68HC05,M68HC11系列单片机时,在其中着力扩展了各种控制功能,如A/D、PWM、PCA计数器捕获/比较逻辑、高速I/O口、WDT等,已突破了微型计算机(microcomputer)的传统内容;所以更准确地反映单片机本质的叫法应是微控制器(microcontroller--MCU),与之相应,则将通用的微型计算机称为微处理器(MPU)。
1.1.2 单片机的历史和现状
单片机即微控制器(MCU)自1976年Intel公司推出MCS-48,迄今已有20多年了。由于MCU具有集成度高、功能高、可靠性高、体积小、功率低、使用方便、价格低廉等一系列优点,目前已渗透到人们工作和生活的各个角落,几乎是“无处不在,无所不为”。MCU的应用领域以从面向工业控制、通信、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通信等广大领域。
尽管目前单片机的品种很多,但其中最具有代表性的当属Intel公司的MCS-51系列单片机。MCS-51是在MCS-48的基础上于20世纪80年代初发展起来的,虽然它仍然是8位的单片机,但其功能有很大的增强,此外它还具有品种全、兼容性强、软/硬件资料丰富的特点;因此应用非常广泛,成为继MCS-48之后最重要的单片机品种,直到现在MCS-51仍不失为单片机中的主流机型。国内尤以Intel公司的MCS-51系列单片机应用最广。由于8为单片机的高性能价格比(如Z8系列的Z8600,80C51系列的80C31,每片仅售价1~1.5$),估计近10年内,8位单片机仍将是单片机中的主流机型。
1.1.3 单片机面临的挑战和未来
在数字化道路上,我国电子设计的发展经历了并将继续经历许多重大的变革与跃。单片机用户面临着三大挑战:通过特性、性能或价格实现终端产品的差异化;通过缩短产品上市时间以补偿在复杂设计上日益增长的投资;力求在不增加成本的前提下达成上述两大目标。这些挑战构成了未来单片机发展的基础,为了体现终端产品的差异化,制造商争先恐后地为其产品增添诸多的新特性。
1.2 系统设计中要注意的问题
在日常生活中,水箱控制是用来调节水箱中水量,减少人力资源浪费。但在实际生活中往往有一些特殊情况,这就要求我们设计的系统能应付这些状况。
在本次设计中主要分两方面来考虑:
(1) 在大多数时间下,水箱控制是处于自动状态,由系统自动控制水箱水位;
(2) 特殊情况,需往要水箱注入一定量水或者抽出一定水,这就要转化为手动状态,由使用者操作控制水箱水位。
1.3 本文主要研究的工作
本文所要研究的课题是基于单片机控制的水箱系统的设计,介绍了对水箱水位控制及报警,实现了水位实时控制。
第2章 系统设计方法与开发平台
2.1 设计方案
实现水位控制的硬件流程框图如下图所示
其工作过程是模拟信号采集部分对水位进行采样,接着把采样的模拟信号送入数模转换器,转换成数字信号,再把数字信号读入处理器,通过给定的处理程序进行处理,得出结果看是要继续加水还是停止加水,同时显示当时状态是处于什么水位。
主要分为电源模块、传感器模块、中央处理器模块等。
2.2 开发平台
2.2.1 keil
keil是目前世界上最好的51单片机的汇编和C语言的开发工具。它支持汇编,C语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真(用mon51协议,需硬件支持)功能。
Keil uVision2是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。
Keil软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keil 来开发您的单片机应用程序 。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
2.2.2 Proteus
Proteus是Labcenter公司出品的电路分析、实物仿真系统。它可仿真各种电路和集成IC,最让我们高兴的是它支持许多型号的单片机的仿真,另外还提供Schematic Drawing与PCB设计功能。它的元件库齐全,使用方便,是不可多得的电子电路设计辅助软件。
2.2.3 Keil与Proteus整合构建虚拟实验室
Proteus是一种低投资的电子设计自动化软件,提供仿真和PCB设计功能,与Keil和MPLAB不同的是Proteus还提供了外设的仿真,只要给出电路图就可以仿真,Proteus还提供了大量元器件库,有RAM、ROM、键盘器、电动机、LED、LCD、AD/DA、部分SPI元件。编译方面支持Keil和MPLAB。
可以在Proteus设计电路图,导入到Keil中进行仿真,这样可以使设计事半功倍。
2.3 器件的选择
系统选择AT89C51为水箱控制系统的CPU、锁存器74LS373和存储器2732。
第3章 硬件系统设计
现实生活中为了方便控制水箱内水位,该系统使用8051制成控制器控制水箱的给水,对于提高劳动生产率和产品质量,节约能源等都有着积极意义。
3. 1 系统主控制器
在系统设计中以单片机为主控制器来控制其他模块的协调工作。
8051单片机每个包括:一个8位的微型处理器CPU;一个256的片内数据存储器RAM;片内程序存储器ROM;四个8位的并行I/O接口P0~P3,每个接口即可以输入也可以输出;两个定时/记数器;五个中断源的中断控制系统;一个UART的串行I/O接口。
3. 2 8051单片机的内部结构
(1) 中央处理器CPU。中央处理器CPU包括运算器和控制器两部分电路。
运算器:用于实现算术和逻辑运算,包括ALU算术逻辑单元、ACC累加器、PSW程序状态寄存器、寄存器B及暂存器1和暂存器2等。
控制器:单片机的指挥中心,协调控制单片机各部门正常工作,包括PC程序计数器、PC增1、指令寄存器、指令译码器及时控制等。
(2) 内部数据存储器。简称“内部RAM” 。
(3) 内部程序存储器。简称“内部ROM” 。
(4) 并行I/O口。8051提供了4个8为的I/O口,分别为P0、P1、P2、P3,实现数据的输入/输出。在系统扩展时,P2和P0口作为地址总线,最大寻址空间大64KB,P0作为数据总线。
(5) 定时器/计数器。8051内部有两个16位定时器/计数器,实现定时和记数功能。
(6) 串行口。8051内部有一个全双工的串行口,可实现数据的串行传送。
(7) 中断控制。8051内部提供5个中断源,可分为两个优先级别处理。
(8) 时钟电路。8051内部的时钟电路,外接石英晶体和微调电容,即可产生时钟脉冲序列。
此外,8051单片机内部还包含一个为处理器,具有较强的处理功能,上述所有部件都是由内部总线连接起来的。
3. 3 信号引脚
8051单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。引脚图如下:
(1) 电源引脚
Vcc(40脚):电源正端,接电源+5V。
Vss(20脚):接地端,接电源负极。
(2) I/O口引线
P0口(39脚~22脚):8位双向I/O口, P0.0~P0.7统称为P0口。当不接外部存储器与不扩展I/O接口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展I/O口时,P0口为地址/数据分时复用口。它分时提供8位双向数据总线。
对于片内含有EPROM的单片机,当EPROM编程时,从P0口输入指令字节,而当检验程序时,则输出指令字节。
P1口(1脚~8脚):8位双向I/O口, P1.0~P1.7统称为P1口,可作为准双向I/O接口使用。对于MCS—52子系列单片机,P1.0和P1.1还有第2功能:P1.0口用作定时器/计数器2的计数脉冲输入端T2;P1.1用作定时器/计数器2的外部控制端T2EX。对于EPROM编程和进行程序校验时,P0口接收输入的低8位地址。
P2口(21脚~28脚):8位双向I/O口,P2.0~P2.7统称为P2口,一般可作为准双向I/O接口。当接有外部程序存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用于高8位地址总线送出高8位地址。对于EPROM编程和进行程序校验时,P2口接收输入的8位地址。
P3口(10脚~17脚):8位双向I/O口,P3.0~P3.7统称为P3口。它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。
(3) 控制线
ALE:地址锁存允许输出。在系统扩展时,用以控制锁存P0口输出的低8位地址,实现低8位地址和数据的分离。此外,ALE输出的脉冲信号频率为晶振频率为1/6,因此它也可以用于外部时钟脉冲使用。
(29脚):片外程序存储器读选通输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期
两次有效,以通过数据总线口读回指令或常数。当访问外部数据存储器期间,
信号将不出现。
:当
为低电平时,CPU只执行片外程序存储器指令,而不管是否有片内程序存储器,当
为高电平时,CPU执行片内程序存储器指令,当PC(程序)的值超过0FFFH(2KB)时,将自动转去执行片外程序存储器指令。对无片内ROM的8031,
必须接低电平。
RST:复位信号。在此引脚持续给出两个机器周期以上的高电平时即可以完成复位,用以完成单片机的初始化操作。
(4) 外接石英晶体引脚
XATL1、XTAL2:当使用芯片内部时钟时,用于外接石英晶体和微调电容;当使用外部时钟时,用于外接时钟信号。
XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHOMS单片机,该引脚作为外部振荡信号的输入端。
XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端。对于CHMOS芯片,该引脚悬空不接。
3. 4 信号引脚的第二功能
8051芯片的引脚数目限定40,而单片机为实现其功能所需的信号数目超过此数,某些引脚必须定义双重功能。下面介绍一些信号引脚的第二功能。
(1) EPROM存储器固化所需的信号
向EPROM程序存储器写入数据而提供的专门编程脉冲和编程电压。
编程脉冲:30脚(ALE/)。当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低
编程电压:31脚(/Vpp)。
为访问外部程序储器控制信号,低电平有效。当
端保持高电平时,单片机访问片内程序存储器4KB(MS—52子系列为8KB)。若超出该范围时,自动转去执行外部程序存储器的程序。当
端保持低电平时,无论片内有无程序存储器,均只访问外部程序存储器。对于片内含有EPROM的单片机,在EPROM编程期间,该引脚用于接21V的编程电源Vpp。
(2) 备用电源引入
备用电源:9脚(RST/Vpd)。
RST/Vpd(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机复位到初始状态。
当VCC发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源Vpd(+5V)为内部RAM供电,以保证RAM中的数据不丢失。
上述引脚的第二功能和第一功能是在单片机的不同工作方式下的信号,因此在使用时不发生矛盾。
(3) P3口的第二功能
P3口的8个引脚都有第二功能,其定义见表
引脚 |
第2功能 |
P3.0 |
RXD(串行口输入端0) |
P3.1 |
TXD(串行口输出端) |
P3.2 |
|
P3.3 |
|
P3.4 |
T0(时器/计数器0计数脉冲端) |
P3.5 |
T1(时器/计数器1数脉冲端) |
P3.6 |
|
P3.7 |
|
P3口线的第二功能是单片机的重要控制信号,在实际使用时应首选第二功能。
综上所述,MCS—51系列单片机的引脚作用可归纳为以下两点:
(1) .单片机功能多,引脚数少,因而许多引脚具有第2功能;
(2) .单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线。
40个引脚可分为与CPU连接的数据线、地址和控制信号以及与外围设备连接的三个端口线。
3. 5 时钟电路
时钟是计算机的 心脏,控制着计算机的工作节奏。MCS-51单片机内有一个由高增益反相放大器组成的振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2。内部方式如图所示:
利用芯片内部反相器和电阻组成的振荡电路,在XTAL1和XTAL2引脚上跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,构成单片机的时钟电路。
3. 6 水箱工作原理
水箱系统是由给水系统和一个水箱控制器两部分组成。
给水系统由两台给水泵机组、水箱和三只浮球开关组成,给水泵组起给水箱供水的作用,浮球开关是通过水位的不同来开关两个给水泵,水位高的时候浮球开关都关闭,给水泵停止供水;水位低时,大约75%时,其中一个开关关闭,由一个给水泵供水,水位低低时,开关都打开,两个给水泵同时供水。结构图如下:
![]() |
水箱的控制器由8051系统构成。为避免电机的起停和电源波动时对电路的影响,输入输出均采用光电隔离。输出通过继电器,控制水泵机组的起停和报警。
![]() |
给水泵控制器主控回路图如下:
自动模式下,当水箱水位低时,起动给水泵机组M1、M2给水,水位上升到90%,停M1。当水箱水位低低(小于50%)时,同时起动M1、M2,当水位上升到50%以上70%以下时,停M2,M1继续运行到水位上升到90%以上才停止工作。
报警控制如下:
当水位高与90%的时候,由传感器经变送器发送信号,LG闭合,系统水位高报警。当水位低于75%的时候,由传感器经变送器发送信号,LD闭合,系统水位低报警。当水位低与50%的时候,由传感器经变送器发送信号,LDD闭合,系统水位低低报警。手动/自动模式转换控制如下:全自动模式下,系统自动判断水位的状况,选择不同的工作状态。
在手动的模式下,两台给水泵的运行控制可由人工自己操作。
主要电路原理图:
特殊脚
本系统采用8051单片机,引脚具体控制如下:
P1口和P3口为输入输出检测信号和控制信号。下面是8051芯片引脚具体分配:
P1.0:水位低低输入信号。(低0 高1)
P1.1:水位低输入信号。(低0 高1)
P1.2:水位高输入信号。(高1,低0)
P1.3:手动与自动转换输入信号。(手动1,自动0)
P1.4:M1起动KM1控制输出信号。(手动1,自动0)
P1.5:M2起动KM1控制输出信号。(手动1,自动0)
P1.6:M1开关状态输入信号。(开0,关1)
P1.7:M2开关状态输入信号。(开0,关1)
P3.0:水位低低报警输出信号。
P3.1:水位低报警输出信号。
P3.2:水位高报警输出信号。
P3.4:手动起动M1输入信号,低电频有效动作。
P3.5:手动起动M2输入信号,低电频有效动作。
P3.6:手动停M1输入信号,低电频有效动作。
P3.7:手动停M2输入信号,低电频有效动作。
第4章 软件系统设计
该系统主要芯片是8051,keil支持其软件的开发,而编程的语言是汇编语言。
软件设计上采用模块化设计,具体可分为如下子模块:主程序、自动模式子程序模块、手动模式子程序模块等。
4.1 主程序模式
在启动时,程序初始化,然后进入选择看是否按自动,没有转自动的话则手动。
主程序:
ORG 0000H
AJMP MAIN
ORG 0060H
MAIN: MOV P1, #FFH
MOV P3,#FFH
JNB P1.3 , AVT
AJMP MEN END
4.2 自动模式
自动模式程序:
AUT: NOP
JNB P1.2 , LG
JB P1.1 LD ,
CLR P3.1
JB P1.0, LDD
CLR P3.0
JNB 3.1 P1.6, Y1
CLR P1.4
Y1:JNB P1.7 ,Y2
CLR P1.5
Y2:ACALL DELAY
AJMP AUT
LDD: JNB P1.6 ,Y3
CLR P1.4
Y3: JB P1.7 Y2
SETB P1.5
AJMP Y2
LG:CLR P3.2
LD:AJMP MAIN
开始运行,如果水位高,报警后返回主程序选择是否手动,若仍自动则停止供水;如果水位低,关M1开M2;如果水位低低报警后打开M1和M2。
手动模式
手动控制子程序
MEN:NOP
JNB P1.1 , MAIN ;
ACALL KEY
CJNE A ,#FOH,NN ;
AJMP MEN
NN:JNB ACC.4 ,HM1
JNB ACC.5, HM2
JNB ACC.6 ,DM1
JNB ACC.7 ,DM2
AJMP MEN
HM1: JNB P1.6 ,MEN
CLR P1.4
AJMP MEN
HM2:JNBP1.7, MEN
CLR P1.5
AJMP MEN
DM1:JB P1.6, MEN
SETB P1.4
AJMP MEN
DM2:JB P1.7, MEN
SETB P1.5
AJMP MEN
RET
手动控制时通过控制键来开关给水泵。
第5章 系统可靠性设计
5.1 干扰产生的原因
工业生产中的干扰一般都是以脉冲的形式进入单片机应用系统的。串入系统的干扰主要有三种来源:
(1)场干扰,通过电磁波辐射串入系统。
(2)输入/输出通道干扰,通过与主机相连的输入/输出通道及与其他主机相连的通道进入。
(3)供电系统干扰,从电源供电电路引入的干。;
在一般情况下,场干扰在强度上远小于其他两个干扰源,而且场干扰可用良好的屏蔽与正确的接地、高频滤波加以解决。因此,在单片机应用系统中,应重点防止输入/输出通道与供电系统的干扰。
5.2 干扰对单片机应用系统的影响
影响应用系统可靠、安全运行的主要因素来自系统内部和外部的各种电磁干扰,以及系统结构设计、元器件安装、加工工艺和外部电磁环境条件等。这些因素对单片机系统造成的干扰后果主要表现在以下几个方面:
1.测量数据误差加大
干扰侵入单片机系统测量单元模拟信号的输入通道,叠加在测量信号上,会使数据采集误差加大,甚至干扰信号淹没测量信号,特别是检测一些微弱信号,如人体的生物电信号。
2.影响单片机RAM存储器和E2PROM等
在单片机系统中,程序及表格、数据存在程序存储器E2ROM或FLASH中,避免了这些数据受干扰破坏。但是,对于片内RAM、外扩RAM、E2PROM中的数据都有可能受到外界干扰而变化。
3.控制系统失灵
单片机输出的控制信号通常依赖于某些条件的状态输入信号和对这些信号的逻辑处理结果。若这些输入的状态信号受到干扰,引入虚假状态信息,将导致输出控制误差加大,甚至控制失灵。
4.程序运行失常
外界的干扰有时导致机器频繁复位而影响程序的正常运行。若外界干扰导致单片机程序计数器PC值的改变,则破坏了程序的正常运行。由于受干扰后的PC值是随机的,程序将执行一系列毫无意义的指令,最后进入“死循环”,这将使输出严重混乱或死机。
5.3 硬件抗干扰技术
1.选择良好的元器件与单片机
硬件抗干扰技术是系统设计时首选的抗干扰措施,它能有效抑制干扰源,阻断干扰传输通道。常用的硬件设计抗干扰措施如下:
(1)现在市场上出售的元器件种类繁多,有些元器件可用但性能不佳,有些元器件极易受到干扰,因此在选择关键元器件如译码器、键盘扫描控制器、RAM等时,最好选用性能稳定的工业级产品。
(2)单片机的选择不光考虑硬件配置、存储容量等,更要选择抗干扰性能较强的单片机。
(3)外时钟是高频的噪声源,对系统的内外都能产生干扰,因此在满足需要的前提下,选用频率低的单片机是明智之举。
2.接地技术
实践证明,单片机系统设备的抗干扰与系统的接地方式有很大关系,接地技术往往是抑制噪音的重要手段。良好的接地可以在很大程度上抑制系统内部噪音耦合,防止外部干扰的侵入,提高系统的抗干扰能力。设备的金属外壳等要安全接地;屏蔽用的导体必须良好接地。
3.屏蔽线与双胶线传输
屏蔽线对静电干扰有强的抑制作用,而双胶线有抵消电磁感应干扰的作用。开关信号检测线和模拟信号检测线可以使用屏蔽双胶线,来抵御静电和电磁感应干扰;特殊的干扰源也可以用屏蔽线连接,屏蔽了干扰源向外施加干扰。
4.隔离技术
信号的隔离目的之一是从电路上把干扰源和易干扰的部分隔离出来,使监控装置与现场仅保持信号联系,但不直接发生电的联系。隔离的实质是把引进的干扰通道切断,从而达到隔离现场干扰的目的。
一般单片机应用系统既有弱电控制系统又有强电控制系统,通常实行弱电和强电隔离,是保证系统工作稳定、设备与操作人员安全的重要措施。常用的隔离方式有光电隔离、变压器隔离、继电器隔离和布线隔离等。
5.优化电路设计
有时候采用屏蔽技术后仍不能满足抑制和防止干扰的要求,可以结合屏蔽技术,采取平衡措施等电路技术。平衡电路技术是指双线电路中的两根导线与连接到这两根导线的所有电路,对地或对其他导线都具有同样的阻抗。其目的在于使两根导线所捡拾到的干扰信号相等。这是的干扰噪声是一个共态信号,可在负载上自行消失。另外,还可采用其他一些电路技术,例如接点网路、整形电路、积分电路和选通电路等。总之,采用电路技术也是抑制和防止干扰的重要措施。
5.4 软件抗干扰措施
单片机本身在指令设计上也有一些抗干扰的考虑。非法指令复位或非法指令中断是当运行程序时遇到非法指令或非法寻址空间能产生复位或中断。单片机应用系统程序是事先写好的,不可能有非法指令或寻址。一定是系统受到干扰,CPU读指令时出错了。
以上提到的是当前广泛使用的单片机应该具有的内部抗干扰措施。在选用单片机时,要检查一下这些性能是否都有,以求设计出可靠性高的系统。
在应用软件设计方面,设计者都有各自的经验。这里要提醒的是最后对不用的ROM要做处理。原则是万一程序落到这里可以自恢复。
5.4.1 开机自检
开机后首先对单片机系统的硬件及软件状态进行检测,一旦发现不正常,就进行相应的处理。开机自检程序通常包括对RAM、ROM、I/O口状态等的检测。
1.检测RAM 检查RAM读写是否正常,实际操作是向RAM单元写“00H”,读出也应为“00H”,再向其写“FFH”,读出也应为“FFH”。如果RAM单元读写出错,应给出RAM出错提示(声光或其它形式),等待处理。
2.检查ROM单元的内容 对ROM单元的检测主要是检查ROM单元的内容的校验和。所谓ROM的校验和是将ROM的内容逐一相加后得到一个数值,该值便称校验和。ROM单元存储的是程序、常数和表格。一旦程序编写完成,ROM中的内容就确定了,其校验和也就是唯一的。若ROM校验和出错,应给出ROM出错提示(声光或其它形式),等待处理。
3.检查I/O口状态 首先确定系统的I/O口在待机状态应处的状态,然后检测单片机的I/O口在待机状态下的状态是否正常(如是否有短路或开路现象等)。若不正常,应给出出错提示(声光或其它形式),等待处理。
4.其它接口电路检测 除了对上述单片机内部资源进行检测外,对系统中的其它接口电路,比如扩展的E2PROM、A/D转换电路等,又如数字测温仪中的555单稳测温电路,均应通过软件进行检测,确定是否有故障。只有各项检查均正常,程序方能继续执行,否则应提示出错。
5.4.2 输出端口刷新
由于单片机的I/O口很容易受到外部信号的干扰,输出口的状态也可能因此而改变。在程序中周期性地添加输出端刷新指令,可以降低干扰对输出口状态的影响。在程序中指定RAM单元存储输出口当时应处的状态,在程序运行过程中根据这些RAM单元的内容去刷新I/O口。
5.4.3 输入多次采样
干扰对单片机的输入,会造成输入信号瞬间采样的误差或误读。要排除干扰的影响,通常采取重复采样、加权平均的方法。比如对于外部电平采样(如按键),采取软件每隔10ms读一次键盘或连续读若干次,每次读出的数据都相同或者采取表决的方法确认输入的键值。又如在用单稳电路检测温度的系统中采取对单稳电路的脉冲宽度计数,然后查表求温度值的方法。为排除干扰的影响,可以采取三次采样求平均值,也可以采取两次采样、差值小于设定值为有效,然后求平均值的方法(又称软件滤波)。总之,对输入信号进行多次采样,其后如何进行处理是要根据具体对象实际处理的效果来优选的,读者可通过实验室调试时施加干扰及现场环境调试时的效果来确定。
第6章 系统检测和调试
当完成了单片机应用系统的硬件、软件以及硬件组装后,便可以进入单片机应用系统的调试阶段。系统调试的目的是为了查出用户系统中硬件设计与软件设计中存在的问题及可能出现的不协调问题,以便修改设计,最终使用户系统正确可靠。系统调试的一般过程如图5-1所示。
图5-1 硬件调试的一般过程
6.1 硬件的调试方法
硬件调试是利用开发环境和基本测试仪器(万用表等),通过执行开发系统有关的命令或运行适当的测试程序,检查硬件系统中存在的故障。一般分为静态调试和动态调试两步进行。
静态调试
在样机加电之前,先用万用表等工具根据硬件逻辑设计详细检查样机线路的正确性,核实对元器件的型号、规格和安装是否符合要求,应特别注意电源系统的检查,以防止电源短路和极性错误,并重点检查系统总线是否存在相互之间短路或与其他信号线的短路。
动态调试
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件间连接错误等的一种硬件检查。
硬件电路调试的一般顺序是:?
① 检查CPU的时钟电路。通过测试ALE信号,如没有ALE信号,则判断是晶体或CPU故障,这称之为“心脏”检查。?
② 检查ABUS/DBUS的分时复用功能的地址锁存是否正常。?
③ 检查I/O地址分配器。一般是由部分译码或全译码电路构成,如是部分译码设计,则排除地址重叠故障。?
④ 对扩展的RAM、ROM进行检查调试。一般先后写入55H、AAH,再读出比较,以此判断是否正常。因为这样RAM、ROM的各位均写入过‘0’、‘1’代码
⑤ 用户级I/O设备调试。如面板、显示、打印、报警等等。
6.2 软件的调试方法
软件的调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。软件调试一般方法是先独立后联机、先分块后组合、先单步后连续。
在软件调试的过程中,先运行某个模块的程序,要注意观察定时器的初值设定,在中断程序中要注意入栈保护等,最终将整个模块连接起来调试。
6.3 系统联调
经过硬件、软件单独调试后,即可进入硬件、软件联合仿真调试阶段,找出硬件、软件之间不相匹配的地方,反复修改和调试。实验室调试工作完成以后,即可组装成机器,移至现场进行运行和进一步调试,并根据运行及调试中的问题反复进行修改。
6.4 现场调试
一般情况下,通过系统联调后,用户系统就可以按照设计目标正常工作了,但是在某些情况下,由于用户系统运行的环境较为复杂,故在实际现场工作之前,环境对系统的影响无法预料,只能通过现场运行调试来发现问题,找出相应的解决方法。
参考文献
【1】 徐煜明,韩雁.单片机原理与接口技术.北京:电子工业出版社,2005.1
【2】 周立功等.单片机实验与实践教程(三).北京:北京航空航天大学出版社,2006.5
【3】 尹勇,李宇.μVision2单片机应用程序开发指南.北京:科学出版社,2004
【4】 林志琦,佟大鹏.基于Proteus的单片机可视化软硬件仿真.北京:北京航空航天大学出版社,2006.9
【5】 周润景,张丽娜.基于Proteus的电路及单片机系统设计与仿真.北京:北京航空航天大学出版社,2006.5
【6】 肖洪兵,李国峰,杨征.80C51嵌入式系统教程.北京:北京航空航天大学出版社,2008.1
【7】 李广第.单片机基础.北京:北京航空航天大学出版社,1999
【8】 赖麒文.8051单片机嵌入式系统应用.北京:科学出版社.2002.7
【9】 王晓君.MCS-51及兼容单片机原理与选型.北京:电子工业出版社.2003.11
【10】 张友德,赵志英.单片微型机原理、应用与实验.复旦大学出版社.2000.11
【11】 马忠梅.单片机的C 语言应用程序设计[M] .北京航空航天大学出版社,1997
附程序主要代码:
主程序:
ORG 0000H
AJMP MAIN
ORG 0060H
MAIN: MOV P1, #FFH ; P1 P3口初始化置1
MOV P3,#FFH
JNB P1.3 , AVT ; 若手动在自动位置,跳到自动模式子程序
AJMP MEN ;否则转到手动模式子程序
END
AUT: NOP(空命令)
JNB P1.2 , LG ;水位高—LG
JB P1.1 LD , ;水位没低---LD
CLR P3.1 ;水位低报警
JB P1.0, LDD ;水位未低低---LDD
CLR P3.0 ;水位低低报警
JNB 3.1 P1.6, Y1 ;M1已启动—Y1
CLR P1.4 ;否则启动M1
Y1:JNB P1.7 ,Y2 ; M2已启动---Y2
CLR P1.5 ;否则启动M2
Y2:ACALL DELAY ;延时1分钟
AJMP AUT ;返回自动模式
LDD: JNB P1.6 ,Y3 ; 单独运行M1(LDD〈水位〈LD)
CLR P1.4
Y3: JB P1.7 Y2
SETB P1.5
AJMP Y2
LG:CLR P3.2 ;水位高报警
LD:AJMP MAIN ;返回主程序
手动控制子程序
MEN:NOP
JNB P1.1 , MAIN ;
ACALL KEY
CJNE A ,#FOH,NN ;
AJMP MEN
NN:JNB ACC.4 ,HM1
JNB ACC.5, HM2
JNB ACC.6 ,DM1
JNB ACC.7 ,DM2
AJMP MEN
HM1: JNB P1.6 ,MEN
CLR P1.4
AJMP MEN
HM2:JNBP1.7, MEN
CLR P1.5
AJMP MEN
DM1:JB P1.6, MEN
SETB P1.4
AJMP MEN
DM2:JB P1.7, MEN
SETB P1.5
AJMP MEN
RET
延时1S主程序
T1M1: MOV R1, #F0H
L4: MOV R2, #08H
L1: MOV R3, #FAH
L2: MOV R4, #FAH
L1: DJNZ R4, L1
DJNZ R3, L2
DJNZ R2, L3
DJNZ R1, L4
RET
延时6ms子程序
T1M3: MOV R4, #12
MM: MOV R5, #248
DJN2 R5, $
DJN2 R4, D3
RET
有无键合子程序:
KEY:ACALL KS1 ;有无闭合
JNZ LK1
ACALL TIM
AJMP KEY ;无键闭合返回
LK1:ACALL TIM
ACALL TIM
ACALL KS1
JNZ LK2
ACALL TIM
AJMP KEY
LK2:RET
KS1:MOV A , P3 ;扫描
ANL A , #FOH ;屏蔽低4位
RET