联系地址: 湖北省武汉市江夏区藏龙岛九凤街谭湖一路8号
邮编: 443000
电话: +86-027-87052087
手机: +86-13329706647
邮箱: 956693667@qq.com
【绘芯滑轨屏推荐】汽车安全为现代汽车领域重要的课题之一,先进的汽车安全设施是行车安全不可或缺的保障。汽车电子控制装置必须迅速、准确地处理各种信息,并通过电子仪表显示出来,使驾驶员及时了解并掌握汽车的运行状态,妥善处理各种情况。汽车安全包括制动信号、机油压力、水温、燃油存油、蓄电池液面、空气滤清器滤芯等。在生产过程的检测和控制中,对温度参数的测量是非常重要和普遍的。已往温度控制的电路系统很多,有模拟电路构成的、数字电路构成的等,但其电路复杂且控制效果不佳,只能用于一些精度要求较低的场合。要实现高精度的温度自动控制就必须采用单片微机系统,它可以实现温度信号的采集、显示及控制等,是实现温度的采集和处理的一种有效手段。汽车水温监测器主要应用于对汽车水温的监测。将水温安全值从上, 下限予于设定, 也即水温最低值和最高值,在行驶过程中实时地进行监视。机油压力是汽车发动机的重要参数之一。当机油压力过低时,可能损坏发动机,因此在汽车上需要安装油压检测装置,以监测发动机运行过程中的机油压力。机油压力传感器安装在发动机的主油道上,当发动机运行时,压力测量装置检测机油的压力,将压力信号转变为电信号送至信号处理电路,经过电压放大和电流放大,通过信号线将放大后的压力信号连接至单片机,单片机输出信号指示出发动机的机油压力。报警电路中设定的报警电压与输入电压进行比较,当低于报警电压时,报警电路则输出报警信号,并通过报警线点亮报警灯[1]。
实现上述设计要求,采用Intel 公司出品的MCS —51 系列中的8051 单片机来实现。在MCS—51系列里,所有产品都是以8051为核心电路发展起来的。它们具有8051的基本结构和软件特性。8051单片机内部包含了作为微型计算机所必需的基本功能部件,各功能部件相互独立地集成在同一块芯片上。如果把8051中的ROM和EPROM电路移走,就和8031内部电路相同。8051内部CPU是一个字长为二进制8位的中央处理单元,也就是说它对数据的处理是按字节为单元进行的。与微型计算机CPU类似,8051内部也是由运算器(ALU)、控制器(定时控制部件)和专用寄存器组三部分电路构成[2]。
指令是计算机用于控制各功能部件完成某一指定动作的指示和命令。指令通常是按功能来分的。MCS—51单片机按功能可以分为5类:数据传送指令、算术运算指令、逻辑操作和环移指令、控制转移指令和位操作指令等。计算机程序设计语言是计算机能够理解和执行的语言,它随着计算机的诞生而诞生,随着计算机的发展而发展。汇编语言是人们用来替代机器语言进行程序设计的一种语言,由助记符、保留字和伪指令等组成。很容易为人们所识别、记忆和读写,故有时也称为符号语言。采用汇编语言编写的程序称为汇编语言源程序,汇编语言并不独立于具体的机器,是一种非常通用的低级程序设计语言[1]。
1.2 开发意义
汽车状态安全指示主要是对汽车的整车参数、油量、压力等各项性能指标进行检测,以验证其要求的安全规范的符合性,并显示出汽车所处状态。汽车的安全指示的发展与其他实用技术的发展一样经历了一个从简单到复杂的发展历程。随着电子技术,特别是计算机技术的飞速发展, 新的智能检测系统得到了广泛的应用,成为汽车状态安全显示行业的潮流[5]。
新的汽车状态安全指示系统根据以往系统的优点,克服其不足,并综合利用最新的计算机软、硬件及网络技术的发展成果,使其具有自动化程度高、显示速度快、容错度和准确度高、组态灵活、操作使用简单方便等特点。软件编制按功能全面、稳定可靠、操作简单等目标编写设计。通过适当的软硬件分工和精心的软硬件设计,可以引入很多新的优点[9]。
单片机从诞生到现在只有几十年时间,而它却以具有体积小、可靠性好、功能强大、方便灵活等许多优点得到广泛应用。只使用一片单片机,这是当前用得比较多的方式,其应用领域有:测控领域、智能仪表、机电一体化、智能接口等[8]。
在单片机的应用过程中,单片机只是应用系统的一个核心部件,为把单片机系统应用于不同的领域,只掌握单片机的基础知识是远远不够的,要想构成一个完善的系统,还要熟悉传感器,执行机构、硬件接口和软件的设计技巧,这些知识在书本上是学不到的,只有通过实践,才能设计出完善的应用系统。[8]
第二章 系统硬件组成
2.1 系统的连接
本系统使用8051作为控制单元,对来自传感器的信号和开关量进行采集,并把采集到的数据状态显示出来。由单片机作为主机的自动控制系统结构框图如图2-5 所示,外界信号是由热电偶检测输出电信号和来自外界的开关量信号,模拟量经小信号放大器后进行A/D 转换送入计算机,开关量直接进入计算机接口,计算机主机进行数据的采集、比较、运算、存储并输出控制量等,开关控制、状态显示及数码显示等。
图2-5 系统的硬件连接图
当系统工作时,安装于汽车系统中的各传感器分别不断地检测液面系统、油量系统、制动系统、稳定系统参数并将其转化为相应的开关量信号,CPU根据设定的采样周期、时刻采样信号,并读取数字信号,运算处理后,送数码管显示,以便操作人员读取。系统工作之前,单片机必须设定系统的原始参数及系统的初始化[9]。
系统的研制可分为硬件和软件两大部分。对于硬件设计主要以芯片和其它元器件为基础,再加上其他辅助电路,从而研制出一台完整的单片机系统;对于软件设计而言,它主要是在所研制的硬件基础上通过汇编语言等进行程序设计过程。本次设计硬件有单片机、传感器、LED显示器、A/D转换器等,软件设计用汇编语言实现。本次设计主要侧重于软件设计[10]。
2.2 8051单片机
8051是我国目前应用得最多的单片机系列。MCS-51系列单片机是由INTEL公司在1980年推出的8位高档单片机系列,是在中低档系列的基础上发展起来的。采用HMOS工艺,提高了芯片的集成度,与前期的单片机相比在性能上也得到了很大的提高。在机构上它扩充了ROM与RAM,增加了乘、除、减等指令运算,增加了串行通信口及中断源,其主要特点如下:
(1) 扩大了内部程序存储器(ROM)和内部数据存储器(RAM)的容量。
(2) 具有布尔代数运算能力。
(3) 具有32条双向可被独立寻址的I/O口。
(4) 具有5—6条中断源,可分为两个中断优先级。
(5) 具有丰富的指令系统。
(6) 具有全双工传输信号UART。
(7) 片内具有时钟振荡电路。
(8) 烧写工艺上采用可一次性烧写的内含ROM或可重复烧写的EPROM。
中断是CPU和外设之间交换信息的一种方式。在引入中断技术之后,解决了CPU和外设之间的速度匹配问题,提高了CPU的工作效率和计算机处理故障的能力。
本次软件设计中使用的是单片机汇编语言,其中中断是个关键技术,在对外部数据采集处理中多次用到[2]。
2.3 传感器
传感器是控制和获取外界信息的重要手段。也是单片机前向通道的关键部件。如果没有传感器对原始被测参量准确可靠的捕捉和转换,单片机对任何被控对象的监控都将无法实现。目前,传感器没有统一的分类。按输出量分类有模拟式传感器和数字式传感器。按类型分类有分立式传感器、模拟集成传感器和智能传感器。模拟式传感器输出的是随外界变化的模拟量信号。其特点是输出响应速度快和MPU(微处理器)接口较复杂。数字式传感器输出的是数字量,同模拟输出相比,他的输出速度响应较慢。本次信号采集过程中要用到温度、压力、液面等传感器[5]。
2.4 A/D转换器
在计算机实时监控和智能控制仪表等应用系统中,常常会遇到从时间到数值都连续变化的物理量,这种连续变化的物理量叫做模拟量,如温度、压力、流量、速度等。与此对应的电信号称为模拟电信号,显然,模拟电信号需要转换成离散的数字信号,才能送给计算机处理。实现模拟量变换为数字量的器件称为A/D转换器。A/D 转换器采用8 位A/D转换器,ADC0809将温度信号的模拟量转换为数字量。ADC0809为CMOS集成电路,属于逐位比较型的转换器分辨率为8位,转换时间为100US,数据输出端内部具有三态锁存器,可与单片机的数据总线直接连接,而且具有8路模拟开关,可直接连接8 路模拟量输入,并可程控选择对其中一个模拟量进行转换,控制时可选择多个采样点进行计算。它与单片机的接口简单,直接输入01 口,使用方便。本次所设计的信号转换用的ADC0809来实现[5]。
2.5 显示器
显示器用2位LEC数码管显示(也可采用液晶显示)温度。串行数据由单片机的RXD和TXD 串行口输出,至74LS164或CD4015 转换为并行数据,再经译码、驱动电路驱动数字显示器。采用Intel 公司出品的MCS —51 系列中的8051 单片机来实现。LED显示块有发光二极管显示字段组成,有七段和八段之分。这种显示块有共阳极和共阴极两种。八段LED显示器的原理是通过同名管脚上所加的电平高低来控制发光二极管是否点亮来显示不同字型的。七段LED字型码只有七个发光二极管,所以字型码为一个字节。七段LED的字型码如表2-4:
表2—4 LED数码管字型码
显示字符 |
共阳极字型码 |
共阴极字型码 |
显示字符 |
共阳极字型码 |
共阴极字型码 |
0 |
3FH |
C0H |
C |
39H |
C6H |
1 |
06H |
F9H |
d |
5EH |
A1H |
2 |
5BH |
A4H |
E |
79H |
86H |
3 |
4FH |
B0H |
F |
71H |
8EH |
4 |
66H |
99H |
P |
73H |
8CH |
5 |
6DH |
92H |
U |
3EH |
C1H |
续表2-4 LED数码管字型码
显示字符 |
共阳极字型码 |
共阴极字型码 |
显示字符 |
共阳极字型码 |
共阴极字型码 |
6 |
7DH |
82H |
|- |
31H |
CEH |
7 |
07H |
F8H |
y |
6EH |
91H |
8 |
7FH |
80H |
H |
76H |
89H |
9 |
6FH |
90H |
L |
38H |
C7H |
A |
77H |
88H |
灭 |
00H |
FFH |
b |
7CH |
83H |
|
|
|
在本次设计中,温度值显示用两位LED数码显示来实现,汽车的水温通过传感器采集,处理后输入到单片机,单片机再把采集的数据输出给数码管。温度值设定为0—100度
2.6 单片机指令结构
指令是计算机用于控制各功能部件完成某一指定动作的指示的语句。指令不同,各功能部件所完成的动作也不一样,指令实现的功能也不相同。因此,根据题目要求,选用不同功能的指令有序组合就构成了程序。计算机执行不同的程序就可完成不同的运算任务。单片机用汇编语言来编程,汇编语言是用助记符来表示的面向机器的程序设计语言,每个助记符都有相应的机器码,也就是说汇编语言是机器语言的符号表示。因此,对于编程者而言,用汇编语言编写的程序比用机器语言编写的程序简洁,而且便于记忆、修改和调试。同时由于它依赖于机器的指令系统,所以执行速度仍然很快,特别适合于实时控制等响应速度要求比较高的场合[10]。
2.6.1指令的表示形式
指令的表示形式是识别指令的标志,也是人们用它来编写和阅读程序的基础。通常指令有二进制、十六进制和助记符等三种形式,指令的这三种表示形式各有各的用处,是人们学习、掌握和使用好计算机的重要手段[10]。
指令的二进制形式是一种可以直接为计算机识别和执行的形式,古又称为指令的机器码或汇编语言源程序的目标代码。指令的二进制形式具有难读、难写、难记和难修改等缺点,因此人们通常不同它来编写程序。指令的十六进制形式虽然读写方便,但仍不易为人们识别和修改,通常也不被用来编写程序,只是在某些场合才被用来作为输入程序的一种辅助手段。指令的助记符形式又称为指令的汇编符形式或汇编语句形式,是一种由英文单词或缩写字符形式表征指令功能的形式。这种形式不仅易为人们识别和读写,而且记忆和交流极为方便,常常为人们用来进行程序设计,但编好后和修改后的程序必须通过人工或机器把他们翻译成机器码形式才能为计算机执行[5]。
2.6.2指令格式
指令格式是指令码的结构形式。通常,指令可以分为操作码和操作数两部分。其中,操作码用于指示机器执行何种操作,如运算操作、数据传送操作还是数据位操作等;第一操作数地址用于指示两个操作数的第一操作数在内存中的地址;第二操作数用于指示两个操作数中的第二操作数在内存中的地址;结果操作数地址指操作数的运算结果在内存中的地址,而下一条指令地址告诉单片机读取下一条指令的地址。这种指令格式的指令码太长,严重一向了指令的执行速度。因此,在MCS-51系列单片机的指令中采用了地址压缩的方法,把上面的四个地址压缩成一个,所以MCS-51系列单片机指令又称为单地址指令[1]。
2.6.3指令功能
通常指令功能是按功能来分类的。MCS-51单片机按功能可以分为五类:数据传输指令、算术运算指令、逻辑操作指令、控制转移指令和位操作指令等书记传输指令共有28条,主要用于单片机内RAM和特殊功能寄存器SFR之间传送数据,也可以用于单片机内和片外存储器之间传送数据[1]。
算术运算指令共有24条,用于对两个操作数进行加、减、乘、除运算。在两个操作数中,一个应存放在累加器A中,另一个可以存放在某个寄存器或RAM中,也可以存放在指令码的第二字节和第三字节中。该类指令执行完成后,运算结果便可保留在累加器A中,而运算中产生的进位标志、寄偶标志和溢出标志均保留在PSW中。逻辑运算指令用于对两个操作数进行逻辑乘、逻辑加、逻辑取反和相与相或等操作。通常,大多数指令也需要两个操作数中的一个预先放入寄存器A中,而逻辑运算后结果也在累加器A 中[4]。
第三章 系统软件设计
在系统设计之前,我们都会先进行软件规划。
3.1 系统的软件规划
软件设计包括拟订程序的总体方案、画出程序流程图、编制具体程序以及程序检查和修改等。
3.1.1 程序的总体设计
程序总体设计是指从系统高度考虑程序结构、数据形式和程序功能的实现方法和手段。程序总体设计包括拟订总体设计方案、确定算法和绘制程序流程图等。
在拟订总体设计方案时,由于一个实际的单片机控制系统的功能复杂、信息量大和程序较长,这就要求设计者在进行设计时能选择合适的程序设计方法。常用的程序设计方法有模块化程序设计;自顶向下逐步求精程序设计和结构化程序设计三种。模块化程序设计思想是要把一个复杂应用程序按整体功能划分为若干相对独立的程序模块,各模块可以单独设计、编程、调试和差错,然后装配起来连调,最终成为一个有实用价值的程序。自顶向下逐步求精程序设计要求先从系统一个的主干程序开始,集中力量解决全局问题,然后层层细化逐步求精,最终完成一个复杂程序的设计。结构化程序设计是一种理想的程序设计方法,它是控制程序的复杂程度,使程序上下文与执行流程保持一致。不论采用何种设计方法,设计者均应根据系统的总体任务和控制对象的数学模型画出程序的总体框图,以描述程序的总体结构[10]。
在总体框架的基础上,设计者还应结合数学模型确立各子程序任务的具体算法和步骤,并演化程序和计算机能处理的形式,然后画出子模块的所有流程图。
3.1.2 程序大概的编制
在程序流程图绘制完后,整个程序的轮廓和思路已十分清楚。设计者就可统筹考虑和安排有些带有全局性的问题。例如:程序地址空间分配、工作寄存器安排、数据结构、端口地址和输入/输出格式,等等。因此,只要编程者既熟悉所选单片机内部结构、功能、指令系统,又能掌握一定的程序设计方法和技巧,那么依照程序流程图来编出具体程序就不会困难了。
3.1.3 程序的检查和修改
一个实际的应用程序编好后,往往会有不少潜在隐患和错误,这是不足为奇的。但如果对这些隐患和错误不加排除和修改就很容易产生并发症,使得本来很好的程序陷入不可收拾的地步。因此,源程序编号后在上机调试前进行静态检查是十分必要的。对编好的程序进行静态检查往往会加快整个程序的调试进程,静态检查采用自上而下的方法进行。如果发现错误应及时加以修改[10]。
3.1.4 程序调试
系统调试分为分块调试和系统联调两个阶段。程序分块调试常在单片机开发装置上进行。在程序的分块调试中,可以根据所调试的入口参量或变量的初值编制一个特殊的程序段,并连同被调程序功能模块一起汇编成目标代码,装入单片机开发装置后观察运行结果是否正确。如果执行结果和预想的不一样,可以采用设置断点办法找出并改正错误。如果程序运行结果和预想的一致,说明该程序已调试完毕就可撤消特殊程序段[9]。
系统联调可以在所研制成的硬件系统上进行,其任务是要把已调好的各程序功能模块按照总体设计要求连成一个完整程序。在系统联调中可能会有某些支路上的程序功能模块因受条件制约而不具备得到相应输入参数。这时,调试人员应创造条件进行模拟调试。每当调试好一个程序,功能块就会把它连到主程序机构的指定位置上,直到最后一个程序功能块被挂上,全部调试工作就完成了。
程序上机调试完成后,还要进行在线仿真测试,然后进行一段时间的试运行。只有试运行,程序才会暴露出它的问题和不足之处。在程序试运行阶段,设计者应当观测它能否经受实际环境考验,还要对系统进行检测和实验,以验证程序功能是否满足设计要求,是否达到预期效果。系统经过一段时间的考机和试运行后,就可投入正式运行。在正式运行中还要建立一套健全的维护制度,以确定系统的正常工作[7]。
3.2 主要软件设计
(1)主程序:完成定时器T0、T1和8255的初始化;开放CPU、T0、T1中断;循环调用数据采集和显示程序,等待定时中断。
(2)定时器中断0服务程序:计数,每隔15秒调用温度检测子程序;
(3)定时器中断1服务程序:计数,每隔2秒更换显示缓冲地址指针;
(4)A/D转换;
(5)数值转换;
(6)温度检测子程序:选择通道,进行A/D转换,三路循环检测一遍,将转换结果处理后,送显示缓冲区;
(7)数字滤波;
(8)开关量采集程序;
3.2.1主程序框图如图3.2.1
![]() |
图3.2.1
该程序首先对系统初始化,如定时器T0、T1、8255、通道号等,设置该程序每隔200MS对系统温度采集一次,每隔15S数码管显示重新显示,数据采集后调用信号处理程序,比如转换、滤波等。而其他五路如液压、燃油存油、滤清器等由五路开关量采集经过硬件处理后直接输入单片机,单片机直接处理开关量后把相关状态输出到显示装置如二极管,显示所处状态。
INO EQU 7FF8H
IN1 EQU 7FF9H
IN2 EQU 7FFAH
8255A EQU BFFCH
8255B EQU BFFDH
8255K EQU BFFFH
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0
ORG 001BH
LJMP T1
ORG 0100H
MAIN:CLR EA
MOV DPTR, #8255K ;8255初始化,基本输入输出方式
MOV A, #80H
MOV @DPTR,A
MOV TMOD,#11H ;T0、T1初始化,工作方式1
MOV TH0,#3CH ;置时间常数,T0和T1定时100MS
MOV TL0,#0B0H
MOV 70H,#96H ;T0中断次数计数单元
MOV 71H,#14H ;T1中断次数计数单元
MOV R1,#00H
MOV R2,#00H
MOV R0,#60H
INIDISP:MOV @R0,#00H ;显示缓冲单元清零
INC R0
CJNE R0,#6CH,INIDISP
MOV 64H,#01H ;通道号的显示缓冲单元
MOV 68H,#02H
MOV SP,#40H
MOV R7,#60H
SETB ET0
SETB ET1
SETB EA ;开中断
SETB TR0 ; 启动定时器
SETB TR1
MC: MOV R7,73H
LJMP MAIN5 ;调用五路开关量采集程序
ACALL DISP ;调显示子程序
AJMP MC
定时器0中断服务程序框图
重置T1时间常数
如图3.2.2:
![]() |
N
调温度检测子程序
![]() |
图3.2.2
定时器0中断服务程序如下:
T0: MOV TH0,#3CH;重置时间常数
MOV TLO,#0B0H
DJNZ 70H,FH0
MOV 70H,#96H
PUSH 0E0H
PUSH 03H
ACALL DTCT
POP 03H
POP 0E0H
FH0: RETI
定时器1中断服务程序如下:
T1: MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ 71H,FH1 ;定时2S
MOV 71H,#14H ;重装计数值
INC R2
CJNE R2,#03H,CAL
MOV R1,#00H
CAL: CJNE R2,#00H,CNL1 ;修改显示缓冲区首地址
MOV 73H,#60H
SJMP FH1
CNL1: CJNE R2,#01H,CNL2
MOV 73H,#64H
SJMP FH1
CNL2: MOV 73H,#68H
FH1:RET1 ;返回
3.2.2 A/D 转换程序
该程序通过CPU 通道地址的写操作,发出A/D 转换启动脉冲,启动以后CPU 通过P3. 3 查询A/D 转换是否结束,一旦结束CPU 通过对通道地址的读操作读取数值,值得注意的是在ADC0809 启动后,从A/D 转换时序可知EOC 约在启动脉冲之后10μs才变为低电平,所以程序发出启动脉冲稍加延时才转入对P3. 3 端的查询。流程图见3.2.3程序见附录A。[7]
N
Y
将A/D值转换为温度值
![]() |
图3.2.3
3.2.3 数值转换程序
由于热敏电阻的阻值与温度不成线性关系,所以采用了查表法进行转换,为此事先把每一个温度值对应着一个A/D 输出值(十进制数)。并把这对照公式存储在8051 的内部程序存储器中,设采用的热敏电阻式温度传感器在0—100内,温度与电压表现为良好的线性关系,表达式为:T=210-2*VT
上式中ADC0809的基准电压为5V,所以P0口对应的电压值为:VT=P0/256*5V
对应的温度值为T=210-2*P0/256*5V=210-(10*P0)/256
计算时,取其整数部分:
T=210-[(10*P0)/256] [1]
该程序见附录B
3.2.4 温度显示程序
点阵式液晶显示模块是一个智能化的器件,其所有的显示功能都是由指令实现的,显示模块共有11条指令,指令编码请阅参考文献。液晶模块也要经过初始化后才能正常工作。为便于主程序调用,先编制发送一条指令的子程序( I2SEND)和发送一个显示符的子程序(D2SEND) ,及判忙子程序(WAIT) 。判忙子程序必不可少,用于检查在写入下一个指令之前忙标志(BF) 是否为0。若BF = 0 ,可以接收下一条指令;若BF = 1 ,指示系统内部正在操作,不能接收下一条指令,要继续等待。以下接合硬件接口(4 位数据的传送方式) ,给出前二个子程序的源程序把存于累加器A 中的二—十进制数表示的温度值分解成相应的“个位数”与“十位数”,且分别存于寄存器R3 和R4 中. 为了CD4511 同时驱动两个数码管,将温度值的“个位”和“十位”轮流送显示的时间间隔为2ms. 要使每一温度值显示达6 秒,可让温度值的个位及十位数轮流显示1500 次,这样就能清楚地在数码管上读取被测物的温度值[3]。
在该系统设计中送“个位数”或“十位数”后,需调用2 ms 的延时子程序,而显示一个温度值后应轮流显示6 秒的循环程序,程序设计较容易实现. 该设计系统电路简单、成本低、灵敏度高、软件可靠性高,只要一开机就能进行监测被测物体的温度. 稍对程序和硬件加以修改就可做成不同测量范围的数字温度计. 温度传感器可做成不同的形状,运用到不同的场合中去,因而该系统具有非常大的适用性[4]。
程序见附录C
3.2.5 温度参数数字滤波处理
在微机应用系统的输入信号中,一般都含有种种噪声和干扰,他们主要来自被测信号本身、传感器或者外界的干扰。为了提高信号的可靠性,减小虚假信息的影响,可采用软件方法实现数字滤波。数字滤波程序,就是通过一定的计算或判断来提高信噪比。[4] 采样次数为5次以上时,排序就没有这样简单了,可采用几种常规的排序算法,如冒泡算法。中值滤波对于去掉由于偶然因素引起的波动或采样器不稳定而造成的脉动干扰比较有效。若变量变化比较缓慢,采用中值滤波效果比较好,但对于快速变化的过程的参数(如流量)则不适宜采用。除上述两种外,还有算术平均值滤波和滑动平均值滤波,算术平均值滤波法是按输入的N个采样数据,取其平均值作为输入信号。滑动平均值法采用队列作为测量数据存储器[3]。
数字滤波的方法有很多,可以根据不同的测量参数进行选择。下面介绍几种常用的数字滤波方法和程序:
1. 程序判断滤波
程序判断滤波是根据经验,确定出两次采样输入信号可能出现的最大偏差,若超过此偏差,则表明该输入信号是干扰信号,应该除去,由上次采样值作为本次采样值;若小于偏差值,则表明没有受干扰,本次采样有效。可以从实际经验出发,定出一个最大可能变化范围,每次采样后都和上次的有效采样值进行比较,如果变化幅度不超过经验值,则本次采样有效,否则,本次采样值应视为干扰而丢掉,以上次的采样值为准。为了加快判断的速度,将经验值取反后以立即数的身份编入程序中,然后用于采样值相加运算来取代比较算法。例如:设相邻两次采样值最大变化范围不超过#2H,#2H取反后为#FDH。当前有效的采样值放在31H单元,上次采样值有效存放在30H单元。程序见附录D[2]。
2. 中值滤波
所谓中值滤波是对一参数连续采样N次(一般为奇数),然后把N次的采样值从小到大或从大到小顺序排序,再取中间值做为本次采样值。盖算法的采样次数常为3次或5次。对于缓慢的参数,有时的增加次数,如15次,对于变化比较激烈的参数,此法不宜采用。现以采样3次,3次采样值分别存放在R2、R3、R4中,本程序运行之后,将三个数据从小到大顺序排队,依然存放在R2、R3、R4中,中值在R3中。程序见附录D[]。
3.2.6 五个开关量数据采集显示
把五路数据输入端采集的数据通过单片机系统后,显示出在LED显示器上。 五路开关量分别是制动信号、机油压力、液面、燃油存油、空气滤芯器滤芯,这五路信号在硬件连接中经过采集,变成高低电平两个信号,无须模数转换,输入到单片机,单片机采集信号后,如发现某个信号电位不正常,根据不同地址输入调用不同的显示程序,不同地址的发光二极管就会发光,提醒驾驶者,详细的程序内容见附录E[10]。
第四章 软件加密抗干扰技术
4.1软件加密技术
对单片机系列产品,系统加密是保护知识产权不受侵犯的很关键技术,如何简单有效的对系统加密,是很多人一直在研究、探索的问题。但无论技术怎样千变万化,总的来说,这些方法可以分为两大类:即硬件加密和软件加密。
采用软件加密,不需要改变硬件电路,不需要增加成本,而且简单易行,下面介绍几种方法[4]。
(1) 在程序模块之间插入一些加密字节。加密字节一般位于下一模块之前的一个或两个字节。采用这种方法,一般反汇编程序无法正确反汇编出系统的实际运行程序。
设插入一个加密字节的程序段为:
0320 22 GMR1:RET
0321 75 DB 75H
0322 E0 GMR2:MOVX A,@DPTR
0323 F574 MOV 74H,A
0325 22 RET
若对以上程序段进行反汇编,将得到:
0320 22 GMR1A: RET
0321 75E0F5 MOV E0H,#0F5H
0324 7422 MOV A,#22H
(2) 用返回指令取代跳转指令,使用这种加密方法,将使某些可跟踪PC的反汇编程序无能为力。现举例如下:
设未加密程序为:
100 44 JMP 204H
加密修改后程序为:
100 C7 GMR3:MOV A,PSW
101 17 INC A
102 D7 MOV PSW,A
103 5307 ANL A,#07H
105 A0 MOV R0,A
106 60 ADD A,R0
107 A0 MOV R0,A
108 B004 MOV @R0,#04H
10A 18 INC R0
10B B002 MOV @R0,#20H
10D 22 RET
(3) 采用某些单片机特有的指令对软件进行加密[2]。
在MCS-51系列单片机中,使用JMP @A+DPTR 指令来代替AJMP、LJMP、SJMP等指令。如:设未加密的源程序为:
---------------------
0021 8100 GRR4:AJMP 0400H
----------------------
加密后改为:
-------------------------
0021 E4 GMR4A:CLR A
0022 900400 MOV DPTR,#0400H
0025 72 JMP @A+DPTR
---------------------------
4.2 单片机抗干扰
抗干扰设计始终是微机应用系统的重要内容。干扰对微机系统的作用可分为三个部分。第一是输入系统,它使模拟信号失真,数字信号出错;第二是输入系统,使各输出系统信号混乱;第三个部位是微机系统的内核,使三总线的数字信号错乱,从而引发一系列的后果。CPU得到错误的数据信息,使运算操作数失真,导致结果出错,并将这个错误一直传递下,形成一系列错误。一般来说第一、第二部位的干扰均可通过硬件抗干扰和数字滤波加以解决,这在许多专著中均有成熟的设计方案。本文以MCS-51单片机为例着重讨论当干扰出现在CPU内核时的软件对策[3]。
<1>指令冗余技术 单片机指令分析
从MCS-51指令分析中,我们不难发现所有指令均不超过三个字节,而且多为单字节指令。当CPU受到干扰程序弹飞到某个单字节指令上时,便自己自动纳入正轨;当弹飞到某个双字节指令上时,有可能落到其操作数上,从而将操作数当操作码运行,程序继续出错;当程序弹飞到某个三字节指令时,因他们有两个操作数,继续出错的机会就更大。
针对以上的分析,我们可采用下面的方法使弹飞的程序尽快纳入正轨:
(1) 尽量采用单字节指令编写软件;
(2) 可在双字节指令和三字节指令之后插入两个单字节的NOP空指令,可保护其后的指令不被拆散。因为弹飞的程序即使落到操作数上,由于两个空指令的存在,不会将其后的其他指令当操作数执行,从而使程序入轨;
(3) 为提高程序的运行效率,常在一些对程序流向起决定作用的指令前插入两个NOP指令,可保证弹飞的程序迅速入轨。如:RET、RET1、LCALL、LJMP、JZ等。
<2>软件陷阱技术
指令冗余是弹飞程序入轨是有条件的。首先弹飞程序必须落入非程序区,其次必须执行到冗余指令。当弹飞到非程序区(如EPROM未使用的空间)程序中的表格区时,第一个条件即不满足;当弹飞的程序在未碰到冗余指令之前,已形成了一个死循环,这时第二个条件不满足。对付前面一种情况的措施是设立软件陷阱,对后一种情况采取的软件措施是软件WAITCHDOG[8]。
用一条引导指令,强行将捕获的程序引向一个指定的地址,在那里有一般专门对程序出错进行处理的程序。如果出错处理程序标号为ERR,则软件陷阱可有下面三条指令构成:
NOP
NOP
LJMP ERR
1、 软件陷阱的安排
(1) 未使用的中断向量区
在未使用的中断向量区布上陷阱,当干扰使未使用的中断开放时,就能及时扑提到错误的中断。
(2)未使用的大片EPROM空间
现在使用的EPROM一般为2764、27128、或PSDXXX芯片,很少有将其全部用完。此区布满陷阱,可使弹飞落入此区的程序自动入轨。
(2) (3)表格区
由于表格内容与检索值有一一对应关系。在表格中间安排陷阱将破坏其连续性和对应关系,一般是在表格的最后安排陷阱。
(3) (4)程序区
程序区我们不能任意安排陷阱,否则正常执行的程序也会被转走。但在这些程序区的指令串之间常有一些断裂点,正常执行的程序到此便不会往下执行,而是按指令跳转。如LJMP、AJMP、RET、RET1等。当弹飞的程序刚好落到断裂点的操作数上,则程序会越过断裂点,继续往前冲,在这种地方安排陷阱后,就能有效扑捉到他,而又不会影响正常执行的程序。由于软件陷阱安排在正常的程序执行不到的地方,故不影响程序的执行效率。
<3>软件WATCHDOG系统
当程序弹飞到一个临时构成的系统循环中时,冗余指令和软件陷阱无能为力。要使系统重新工作,一般是人工复位和硬件“看门狗”。人工复位不及时,对控制系统是不允许的,硬件“看门狗”需占用一定的硬件资源。为简化硬件电路,这里介绍一种软件WATCHDOG系统。
要使程序离开掉进的死循环,只有比这个死循环更高级的中断子程序才能夺走CPU的控制权。为此可用一个定时器来做WATCHDOG,将它的溢出中断设定为高级中断,系统中的其它中断均为低级中断。例T0定时约为131MS,晶振选6MHZ,其初始化程序为:
MOV TMOD,#01H ;设T0为16位定时器
SETB ET0 ;允许T0中断
SETB PT0 ; 设置T0为高级中断
MOV TH0,#0 ; 置定时器初值
MOV TL0,#24H
SETB TR0 ;启动T0
SETB EA
WATCHDOG启动后,系统工作程序必须经常初始化TH0、TL0,且每两次之间的时间间隔不得大于131MS。如用MOV TH0,#0;MOV TL0,#24H来实现,这两条指令安放原则和硬件WATCHDOG相同。当程序掉入死循环后,131MS之内即可引起T0溢出,产生高级中断,从而退出死循环。T0中断可直接转向出错处理程序,在中断向量区安放一条LJMP ERR即可。由它来完成各种善后工作,并用软件方法使系统完全复位[4]。
第五章 结论
随着微机技术的不断发展,计算机检测技术在汽车上的应用将越来越广泛和深入,技术也将日新月异,不断发展和完善。汽车状态安全显示正朝着综合系统方向发展,自动化程度更高、技术更完备、集成化更高、功能更全、使用更方便、可靠性更高、价格更低等方向发展[7]。
在本文中,首先介绍了汽车安全显示行业的发展状况课题背景和对汽车进行检测的开发意义。然后介绍了主要的硬件组成,比如单片机、传感器、A/D转换器等,通过对硬件的认识,对系统有了更深的了解,同时介绍了系统的硬件连接,单片机的汇编语言,包括它的表示形式,格式和功能等。之后介绍了汇编语言的主要形式,因为这次设计主要是侧重于软件设计,所以软件技术是关键,通过对软件语言的认识,就可以结合硬件对系统有了更深的认识,开始了软件的总体规划,软件规划采用模块化设计思想,把系统的设计分成几个模块来完成,通过先后设计的几个软件子程序,比如数值滤波程序、A/D转换程序、数据采集、温度显示程序等,结合主程序就完成了基本的程序设计。在软件规划中还介绍了软件修改和调试。本文还对程序进行了加密技术,同时为了排除与抑制测控系统中的干扰信号,我们从软件的角度进行了抗干扰能力设计的数据处理[8]。
实验表明,使用本设计方案能有效地把汽车各个状态显示出来,该方案比较简单,实时性较强,对于操作者能有效及时采取措施有很好的帮助。并且耗材少,价格比较低廉。在实际运行中能节约能源,提高工作效率。通过把温度传感器作成不同的形状来适合不同的场合,因此该方案具有很好的通用性,可应用到其他的温度、压力、液面等数据采集上去及领域。该系统通过采用抗干扰技术,安全性能比较到位。另外,本文中的程序及流程图,对于其他方面的单片机应用也是很有用的。本产品是以单片机技术为核心,以通信技术为载体,以产品为对象,数据传输技术、数值转换技术、数码显示技术、报警技术甚至传感器技术等先进技术和具体对象相结合后的更新换代产品。软件设计往往是技术密集,投资强度大,高度分散,不断创新的知识密集型系统,反映了当代最新技术的先进水平[7]。
参考文献
[1] 胡汉才.单片机原理与接口技术[M] . 北京: 清华大学出版社 ,2001 .
[2] 李 鸿.单片机原理及应用[M]. 长沙:湖南大学出版社,2005.
[3] 吴一帆,罗可.数据库安全问题[J] .长沙电力学院学报(自然科学版) 1999.
[4] 吴一帆,卜胜贤.交叉路口信号灯的模糊控制[J].湖南轻工业高等专科学校学报 1999.
[5] 吴建中,顾大强.便携式数据采集处理系统[J] .《机电工程》, 2002 年第19 卷第1 期.
[6] 朱大奇 单片机的软件抗干扰设计[J] . 《电测与仪表》,第 34卷第380期.
[7] 陆子明,徐长根.单片机设计与应用基础教程[M] .北京:国防工业出版社 ,2005.
[8] 雎丙东,魏泽鼎.单片机应用技术与实例[M] .北京:电子工业出版社,2004.
[9] 南金瑞,刘波澜.汽车单片机及车载总线技术[M] .北京:北京理工大学出版社,2005.
[10] 秦莲,殷肖川.汇编语言程序设计实训教程[M] .北京:清华大学出版社,2005.
[11] 何立民.MCS-51系列单片机应用系统设计[M] .北京:北航出版社,2001.
[12] Nilsson J,Bern Hardson. Analysis of Real-time Control Systems with Time Delays[C]. IEEE Conference on Decision and Control,Japan,1996.
[13] B.Murovec ,S.Kocijancic. Educational data acquisition system with USB interface. eurocon Ljubljana,slovenia ,2003.
致 谢
我做的毕业设计是一个单片机结合实际(汽车)的综合工作,由于以前对汽车的各个部分系统不太了解,通过这次设计时老师对我的指点和对书本的推荐,是我对汽车和单片机编程有了新的认识。我主要是设计软件的,遇到的问题比较多,但在老师的指导和同学们的互相帮助下,终于完成了本次设计,在此,向他们表达诚挚的谢意。
首先感谢指导老师,林老师是教我们单片机的老师,他课讲的好、事情做得比较多、工作忙,但仍然关心我们的设计工作,每个星期定时给我们解答问题,并介绍了些书籍,设计中提供了宝贵的意见,在软件设计的关键阶段,每天给我们提出见解,纠正错误。在此,我向林老师表达诚挚的谢意。
同时,各位同学的相互帮助是很重要的,还有学校领导和樊绍胜老师等提供了免费的实验室以及实验室老师的辛苦工作,感谢他们对我设计工作的帮助。
附 录
附录A A/D转换程序
ATOD: MOV DPTR ,#6300H ;指向数据缓存区
MOV R0,#00H
MOVX @R0,A ;启动A/D转换
SETB P1.0 ;置P1。0为输入
DLY30: ;延时30MS子程序
MOV TMOD,#10H ;设置定时器工作方式
MOV TL1,#0B0H; ;设置定时器1的初值
MOV TH1,#3CH
CLR 07H ;定时时间到标志清零
MOV R0,#0FAH ;设置益处次数
SETB TR1; 开定时器1
ORL IE,#88H;设置中断允许
JB 07H,TBEEN ;查询定时时间到标志
AJMP TNOT;定时未到处理程序
IT11: CLR TR1 ;关闭定时器1
DJNZ R1,GOON1;益处记数
CLR ABH
SETB 07H ;设置定时时间到标志
RET1
GOON1: MOV TL1,#0B0H;设置定时器1初值
MOV TH1,#3CH;
SETB TR1; 开定时器
RET
ACALL XJM ; 调数值转换子程序
附录B 数值转换程序
XJM: MOV A,P0
MOV B,#10H ;转换为温度值,忽略小数部分
MUL AB ; (B)=[(10*P0)/256]
MOV A,#210
CLR C
SUBB A,B
MOV B,#10 ;转换为BCD压缩码
DIV AB
SWAP A
ADD A,B; 把转换后的结果送入累加器A
RET
附录C 温度显示程序
分解“个位数”和“十位数”子程序段
MOV R0 ,A
ANL A , # 0FH ; 取低四位值
ORL A , # 0E0H
MOV R3 ,A ; 送个位数字到R3 中
MOV A ,R0
RR A ; 右移四位(高低四位交换位置)
RR A
RR A
RR A
ANL A , # 0FH
ORL A , # 0D0H
MOV R4 ,A ; 送十位数字到R4 中
附录D 温度参数数字滤波处理
程序判断滤波
FILT1: MOV 30H,31H :采样系列迭代
ACALL LOAD ;采样新值
MOV 31H,A ;暂存新值
CLR C
SUBB A,30H ;求与上次采样值差
JNC FILT11
CPL A ;小于0则求绝对值,既求补
INC A
FILT11: ADD A,#0FDH ;新采样值与超限量相加,超否?
JNC FILT12 ;不超,则本次有效
MOV 31H,30H ;超,则以上次为准
FILT12: RET
中值滤波
FILT2: MOV A,R2
CLR C
SUBB A,R3
JC FILT21
MOV A,R2
XCH A,R3
MOV R2,A
FILT21: MOV A,R3
CLR C
SUBB A,R4
JC FILT22
MOV A,R4
XCH A,R3
XCH A,R4
CLR C
SUBB A,R2
JNC FILT22
MOV A,R2
MOV R3,A
附录E 五路开关量采程序
MAIN5:MOV R2,#00H
MOV R3,#00H
MOV R4,#40H
LOOP1: MOV A,5FF8H ;从机油液位开关采集信号
CJNE A,#01H,LOOP 2;如果机油液位开关输入低电平,则没 问题
LCALL F1 ;如果输入高电平,则调用显示程序,机油灯亮
LJMP LOOP 1
LOOP 2:MOV A,5FF9H; 从燃油液位开关采集信号
CJNE A,#01H,LOOP 3;如果燃油油液位开关输入低电平,则不显示
LCALL F2;如果输入高电平,则调用显示程序,燃油灯亮
LJMP LOOP 2
LOOP 3:MOV A,5FFAH; 从制动信号开关采集信号
CJNE A,#01H,LOOP 4;
LCALL F3;
LJMP LOOP 3
LOOP 4:MOV A,5FFBH;从空气滤清集剂开关采集信号
CJNE A,#01H,LOOP 5
LCALL F4;
LJMP LOOP 4
LOOP 5: MOV A,5FFCH;从车辆稳定性开关采集信号
CJNE A,#01H,MAIN
LCALL F5
LJMP LOOP 5
F1: MOV 20H,#01H ;从20H口输出高电平,点亮机油液位灯
RET ;返回
F2: MOV 21H,#01H;从21H口输出高电平,点亮燃油液位灯
RET ;返回
F3: MOV 22H,#01H;点亮制动信号
RET;
F4: MOV 23H,#01H;点亮空气滤清剂
RET
F5: MOV 24H,#01H;点亮车辆稳定性
RET
附录F 硬件连接图
专业设计制作滑屏,互动滑轨屏,滑轨屏,推拉屏等数字展厅解决方案,联系QQ956693667,13329706647「绘芯科技」