一、开发背景
1.1 设计理论
借此结合课内所学并行输入输出接口,利用8255与8253封装实现一个具有报警功能的水库水位检测器。
1.2 应用场合
水库水位、水雨情监测预警系统方案实现了水库水位、降雨量和现场图像的远程监控,为保障水库适度蓄水和安全度汛提供了准确、及时的现场信息。
二、系统设计目标
2.1 设计目标
设计水库水位监视系统,系统要求始终持续监视水位的高低变化,当水位超过一定阈值时开始报警,使用扬声器播放报警音并点亮报警灯,当水位恢复正常后,系统将不再报警。具体目标如下:
(1) 水位超过最高点90% 时开始报警。可使用滑动变阻器模拟水位信号,使用ADC0809的IN0端监测水位高低。可采用查询法,持续读取水位值,并判断是否超过阈值。
(2) 报警时扬声器发出0.5s 500Hz和0.5s 1kHz交替持续变化的声音,并点亮报警灯;当水位降低而低于阈值时报警声停止并警灯熄灭。利用可编程定时器8253产生音频报警信号,可分别产生500Hz和1kHz频率的信号,并使用0.5s时长信号去选通并控制持续时间。
(3) 利用8255控制ADC0809的A/D转换和报警控制。
2.2 功能模块
主要分为8086最小系统模块,水位模拟模块,水位数据采集模块,方波产生模块,扬声器和报警模块
(1)8086系统模块
使用8086最小系统,并用74HC373作为地址所锁存。
(2)水位模拟模块
水位模拟使用了一个滑动变阻器,可以调控滑动变阻器的接入值模拟水位的变化。
(3)水位数据采集模块
水位数据采集通过ADC0808形成一个启动脉冲,从而达到启动开始转换的目的,观察转换是否完成,如果转换完成,进入下一步;转换完成后将转换的数据送到数据总线上以备CPU获取。
(4)方波产生模块
根据实验二分频实验,使用8253产生方波输出到扬声器,从而发出警报。为实现8255控制的目的,将三个GATE位接到PC4,当PC4输出为1时,启动计数,产生方波;否则,停止计数,不产生方波。
(5)扬声器和报警模块
将8253产生的方波信号接入到扬声器模块。为了扬声器发出0.5s 500Hz和0.5s 1kHz交替持续变化的声音,选择接入一个2输入选通芯片74HC257;计数器0产生的1Hz的方波作为选通信号,计数器1和计数器2产生的1KHz方波和500Hz方波作为输入信号;在1Hz方波为高电平时,接通500Hz信号,在1Hz方波为低电平时,接通1KHz信号;将输出信号经过一个非门后接到三极管,根据三极管的导通与关断使得扬声器工作。
三、设计方案
3.1 系统框图
如图,本系统主要包含四个部分,分别是CPU8086系统、水位模拟、水位数据采集、报警装置。其中,CPU8086采用74HC373作为地址锁存;使用滑动变阻器模拟水位信号;水位数据采集使用ADC0808采样,并将数据送到CPU中进行处理;报警装置包括了扬声器和报警灯,通过8255控制报警灯的亮/灭,通过8255控制8253产生方波信号进而驱动扬声器。各模块经74HC138地址译码,并行I/O接口8255控制,8253产生方波,CPU处理数据及控制外设,从而实现了一个实时水库水位监视系统。
四、系统实现
4.1 硬件与软件设计
(1)8086及地址锁存
如图,该部分由8086与两个74HC373地址锁存器组成,实现对整个工程指令的控制。这在许多工程上是通用的。
下面是该部分功能部件介绍:
如图,74HC373 的输出端 Q0~Q7 可直接与总线相连。当三态允许控制端 OE 为低电平时,Q0~Q7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,Q0~Q7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,Q 随数据 D 而变。当 LE 为低电平时,Q 被锁存在已建立的数据电平。
硬件连接:
选择OE端接地,始终为低电平,LE端与ALE地址锁存允许信号相连。
(2)地址译码
如图4,该部分由74HC138译码器组成。
下面是该部分功能部件介绍:
如图5,74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。
硬件连接:
如图,输入端ABC分别接A0,A3,A4;A15接E1(高电平有效),E2、E3接地。
则有如下效果:A15高电平时可以正常译码,即80XXH。当A0、A3、A4为低电平时,Y0作为片选信号使8255正常工作,即8000H、8002H、8004H、8006H.当A3为高电平时,Y2作为片选信号使8253正常工作,即8008H、800AH、 800CH、800EH。
Y0地址范围:8000H、8002H、8004H、8006H
Y2地址范围:8008H、800AH、800CH、800EH
(3)并行IO接口 8255
如图,该部分由8255组成。
下面是该部分功能部件介绍:
其中,A、B、C端口都可以作为数据口与外设之间交换数据,但C端口的使用比较特殊,除了作为数据端口外,还可以做状态端口、专用联络线和做按位控制用,且C端口被分为高4位和低4位两部分,高4位PC4 ~ PC7与A端口一起组成A组,低4位PC0 ~ PC3与B端口组成B组。
使用0方式:一种无条件的数据传输方式,应用最多,是8255的基本输入/输出方式。
特点:8255做单向数据传送,即一次初始化只能把某个并行端口置成输入或输出
硬件连接:片选信号接Y0,8000H(A口)、8002H(B口)、8004H(C口)、8006H(控制口)。
软件思路:,对8255进行初始化:PA口输出,PB口输入,PC口高八位输出,低八位输入。并在PA输出00H,PB输入水位模拟AD转化后的数据,PC储存状态量。MODE:83H控制字 PD:方式字地址
(4) 报警灯
如图,该部分由三极管与二极管组成。
硬件连接:三极管连入增大电流,增大二极管灯的亮度
软件思路:与扬声器一起,通过PC5高电平实现报警
(5) 水位模拟
如图,该部分由滑动变阻器与电压表组成。
硬件连接:滑动变阻器 :模拟水位的高低,连接VIN作为采样的输入
(6) 水位数据采集
如图10,该部分由ADC0808组成。
下面是该部分功能部件介绍:各引脚功能如下:
(1)IN0-IN7:8 路模拟量输入通道。
(2)D7-D0/OUT7~OUT0:数据输出线,为三态缓冲输出形式。注意:ADC0808的输出引脚序号与实际数据的高低位是相反的,因此如图10反向连接。
(3)ADDA、ADDB、ADDC:三位地址输入线,用于选通 8 路模拟输入中的一路,ADDA为低位地址,ADDC 为高位地址。当 ADDC、ADDB、ADDA为000时,选通IN0通道,输入VIN信号。
(4)ALE:地址锁存允许信号,输入高电平有效,由PA7控制
(5)START:A/D转换启动脉冲输入端,输入一个正脉冲,软件编程使其启动(脉冲上升沿使A/D转换器复位,下降沿启动 A/D 转换),由PA7控制。
(6)EOC:A/D 转换结束信号。启动转换后,系统自动设置 EOC=0当A/D转换结束时,EOC=1。该状态信号由PC0返回作为查询的状态标志。
(7)OE:数据输出允许信号,输入高电平有效。当 A/D 转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。由PC7控制
(8)CLK:时钟脉冲输入端。ADC0808/ADC0809 的内部没有时钟电路,所需时钟信号由外界提供,这里使用频率为 600kHz 的时钟信号。
(9)Vref(+)、Vref(-):基准电压,用来与输入的模拟信号进行比较,作为逐次逼近的基准,其值设为+5V(Vref(+)=+5V,Vref(-)=0V)。
硬件连接:
采样VIN端接IN0,PA0,PA1,PA2置0,选择IN0端输入。
PA7产生脉冲信号,驱动ADC0808,转换完成后EOC变为高电平。
通过读取EOC引脚PC0的状态判断是否转换完成。
转换完成后,通过改变PC7使OE有效,OUT输出至PB有效信息。
28*0.9≈230=0E6H
比较PB与0E6H大小,得出是否报警提醒。
软件思路:如上过程
(7)方波产生
如图12,该部分由8253组成。
下面是该部分功能部件介绍:
工作在3方式,引脚OUT输出的不是一个时钟周期的负脉冲,而是占空比为1:1或近似1:1的方波。当计数值为偶数时,输出在前一半的计数过程中为高电平,在后一半的计数过程中为低电平;为奇数时高电平比低电平宽一个时钟脉冲。从十六根总线拿出两个接A0、A1 ,进行端口寻址:00:通道0、01:通道1、10:通道2、11:控制寄存器
硬件连接:
GATE0,GATE1,GATE2均连接到PC4,达到系统对8253的控制作用,进而间接控制扬声器。为实现8255控制的目的,将三个GATE位接到PC4,当PC4输出为1时,启动计数,产生方波;否则,停止计数,不产生方波。8253的地址范围是8008H、800AH、800CH、800EH。8008H是计数器0地址,800AH是计数器1地址,800CH是计数器2地址,800EH是选择控制字寄存器。时钟接入的是50KHz。
软件思路:将三个计数器设置为方式3,计数初值设置为:
计数器0:C350H(50K/1=50000)
计数器1:0032H(50K/1K=50)
计数器2:0064H,(50K/500=100)
分别产生1Hz、1KHz、500Hz的方波。
(8)扬声器
如图12,该部分由74HC257、示波器、扬声器、非门组成。
下面是该部分功能部件介绍:
74HC257:四2选1数据选择器(三态)
为了扬声器发出0.5s 500Hz和0.5s 1kHz交替持续变化的声音,接入了一个2输入选通芯片74HC257;计数器0产生的1Hz的方波作为选通信号,计数器1和计数器2产生的1KHz方波和500Hz方波作为输入信号;
非门:当三个定时器都不工作,输出默认高电平,1Y输出高电平,导致三极管导通,扬声器工作,影响工作人员的判断。
硬件连接:OUT1和OUT2输入1A/1B进行比较选择,OUT0连接A/B端口作为选通信号。在1Hz方波为高电平时,接通500Hz信号,在1Hz方波为低电平时,接通1KHz信号;使两种频率信号能以1:1的时间比输入扬声器。将输出信号经过一个非门后接到三极管,根据三极管的导通与关断使得扬声器工作。
软件思路:
(9) 附:数据段定义
4.2 流程图
五、系统测试和验证
(1)超水位90%:
二极管亮起,且发出声音,扬声器部分示波器的显示:
(2)水位未超39%:
二极管未亮起,且不发出声音,扬声器部分示波器的显示:
通过两种情况的证明,水库水位监视器的设计任务已完成。