EM78P458及其在水位监控中的应用
2006-05-07
摘要:介绍单片机EM78P458内部结构和它的模数转换ADC的操作方法,及其在太阳能热水器水位监控中的应用。文中有ADC操作方法的详细介绍和程序设计。
关键词:单片机EM78P458 模数转换ADC 太阳能热水器 水位监控
EM78P458是台湾EMC公司推出的一款高性能CMOS工艺的8位单片机[1]。它具有运行速度高、功耗极低、抗干扰能力强、程序保密性好等一系列特点,特别是它内部带有1个8位的A/D转换器和2个10位的脉宽调制器PWM1、PWM2[2],使得它在智能化仪器仪表和自动控制领域中获得广泛应用。本文结合作者在工作中积累的经验介绍此款单片机的各项功能,特别是结合太阳能热水器水位监控这一具体实现详细分析了它的模数转换ADC的应用。
一、EM78P458内部结构
EM78P458内部结构如图1所示。
从图1看出,EM78P458内部具有4K×13位的程序存储器PROM和8级堆栈,中央处理器CPU执行内部程序。其指令系统包含58条指令,除跳转指令需要2个指令周期外,其它指令均在1个指令周期(2个时钟周期)内完成。
EM78P458具2有个8位双向I/O端口:PORT5和PORT6。部分端口可设置为上拉、下拉或漏极开路方式。当PORT6为输入时,输入信号的下降沿可将单片机从睡眠状态下唤醒。
电压检测器用于检测电源电压。当电压降到2.0V以下时,单片机被复位,这就免去了外部复位电路。片内电压比较器可对输入端Cin+和Cin-的输入模拟电压进行比较。当输入端Co的信号发生变化时,可将处于睡眠状态下的单片机唤醒。该比较器也可作为运算放大器使用,前提早在Cin-和Co之间外接一个反馈电阻。反馈电阻的大小直接影响到运算放大器的放大量。
EM78P458内部设有看门狗定时器,大大提高了系统的抗干扰能力。
二、EM78P458内部模数转换(ADC)的操作方法
ADC电路包括1个8选1模拟开关、3个控制寄存器、1个数据寄存器、2个运算放大器和1个8位分辨率的逐次逼近式AD转换器,其功能框图如图2所示。
对EM78P458内部ADC的操作是通过对3个控制寄存器的操作来体现的。下面对3个控制寄存器进行介绍。
1.AD转换控制寄存器ADCON
ADCON各位含义如表1所列。
表1 ADCON 寄存器
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | IOCS | ADRUN | ADPD | ADIS2 | ADIS1 | ADIS0 |
该寄存器第6、7位未定义,读出值为0。IOCS位用于选择输入输出寄存器段:为1时选择段1;为0时选择段0。对ADC进行操作时该位必须为0。ADRUN位为ADC运行位;当该位被软件置为1时,AD转换开始;转换结束后该位被硬件清0。ADPD位为低功耗模式位:当该位设置为1时,表示ADC处于工作状态;否则,断开ADC参考电阻,使其进入低功耗状态。ADIS2~ADIS0为8选1模拟开关选择位。模数转换器的模拟通道可以扩充到8个(AD0~AD7),当前转换的究竟是哪一个通道的模拟量由该3位的值决定;而该3位的数值只允许在非转换期间改变。
2.增益控制寄存器GCON
图2所示的ADC功能框图如,通道0和通道4输入的模拟量通过增益放大器OP1、OP2进入8选1模拟开关;而OP1、OP2的使能与否及放大量均由增益控制寄存器GCON控制,如表2所列。表2中OP2E、OP1E为1时,使能对应放大器OP2、OP1;、否则,关闭OP2、OP1。关闭时,对应的模拟信号由旁路进入ADC。当OP2、OP1被使能时,其放大量为2(N=0~5)。具体N值由G42~G40、G02~G00设置。
表2 GCON寄存器
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OP2E | OP1E | G42 | G41 | G40 | G02 | G01 | G00 |
3.比较控制寄存器AD-CMP-CON
AD-CMP-CON寄存器,用于AD转换参考电压、比较器功能的选择和输入模式及转换时钟频率的确定。AD-CMP-CON各位功能如表3所列。
表3 AD-CMP-CON寄存器
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
VREFS | CE | COE | IMS2 | IMS1 | IMS0 | CKR1 | CKR0 |
表3中VREF为参考电压选择位:为1时,参考电压为引脚P53上的电压;否则为内部工作电压。CE为比较器使能位:为1时作比较器使用;否则,作运算放大器使用。IMS2~IMS0为输入模式选择、ADC结构定义位。它与PORT6各引脚特性的关系如表4所列。CKR1~CKR0为ADC时钟分频数。当设置为00时,AD转换频率为fosc/4(这里fosc为单片机时钟频率);设置01时,AD转换频率为fosc/16;设置为10时,AD转换频率为fosc/64;设置为11时,AD转换频率为单片机内部RC振荡频率。
从表4看出,PORT6未用于输入模拟信号的引脚可作为数字I/O口使用。
表4 模拟通道选择表
IMS2IMS0 | P60 | P61 | P62 | P63 | P64 | P65 | P66 | P67 |
000 | A | D | D | D | D | D | D | D |
001 | A | A | D | D | D | D | D | D |
010 | A | A | A | D | D | D | D | D |
011 | A | A | A | A | D | D | D | D |
100 | A | A | A | A | A | D | D | D |
101 | A | A | A | A | A | A | D | D |
110 | A | A | A | A | A | A | A | D |
111 | A | A | A | A | A | A | A | D |
注:“A”代表模拟通道,“D”代表数字I/O引脚
表5 PORT6各引脚功能表
水位状态 | K1 | K2 | K3 | 黄灯 | 绿灯 | 红灯 | VADI/VDD | ADDATA |
高水位 | 闭合 | 闭合 | 闭合 | 点亮 | 熄灭 | 熄灭 | 1/3 | 0X55 |
中水位 | 断开 | 闭合 | 闭合 | 熄灭 | 点亮 | 熄灭 | 1/2 | 0X7F |
低水位 | 断开 | 断开 | 闭合 | 熄灭 | 熄灭 | 点亮 | 3/4 | 0XBF |
超低水位 | 断开 | 断开 | 断开 | 熄灭 | 熄灭 | 闪亮 | 1 | 0XFF |
三、模数转换器在太阳能热水器水位监控系统中的应用
目前的太阳能热水器大都由用户手动加水,给用户带来很大不便。为了解决这个问题,本文提出了一个基于单片机EM78P458的“水位监控系统”。该系统成本低廉,能够自动监测控制太阳能热水器的水箱水位,其原理如图3所示。
如果箱内水位低于下降水位K1而又没有水注入时,红色指示灯将闪烁示警,提醒用户检查是否停水。
另外,只要箱内水位不超过上限水位,用户可按下K4键强行加水。当然一旦超过上限水位,水阀仍然会自动关闭。
四、水位监测系统的程序设计
水位检测系统是利用EM78P458的模数转换功能及I/O引脚控制功能来实现的,其程序流程如图4所示。
首先设置寄存器ADCON为0X00,清零寄存器中IOCS位,选择寄存器0段用以对GCON和AD-CMP-CON操作。同时使8选1模拟开关选择通道AD0。设置寄存器GCON为0X40,实际关闭OP2并打开OP1,且设置OP1增益为1。按着设置AD-CMP-CON寄存器为0x01,选择内部工作电压VDD为参考电压;定义P60端口为模拟电压输入口;P61~P67为数字I/O口;设置fosc/16为转换时钟信号。最后设置ADCON寄存器的ADPD和ADRUN两位为1,开始进行模数转换。当查询寄存器ADCON中的位ADRUN为0时,表示AD转换结束,其转换结果自动存放于寄存器ADDATA中。当EM78P458读取转换结果时,即可了解水箱内的水位,并根据情况控制电机的动作。
ADCONR EQU 0X09 ;ADCON寄存器
GCON EQU 0X09 ;GCON寄存器
ADCONC EQU 0X0A ;AD-CMP-CON寄存器
ADDATA EQU 0X0A ;ADC转换结
;果寄存器
ADRUN EQU 0X04 ;启动位
ADPD EQU 0X03 ;ADC功耗模式位
.
.
.
ADC1:MOV A,@0X08 ;选择寄存器
;段0,并设置P60为模拟通道口
MOV ADCONR,A
MOV A,@0X01 ;选择通道AD0的
;模拟信号进行转换并设置转换
;时钟频率为fosc/16
IOW ADCONC
MOV A,@0X41 ;打开运放OP1并
;设置增益为1
IOW GCON
BS ADCONR,ADPD ;禁止ADC的
;低功耗模式
ENI ;开中断
.
.
.
ADC2:JBC ADCON,ADRUN ;检查AD转换是否结束
JMP ADC2 ;未结束则继续检测
MOV A,ADDATA ;读AD转换结果
.
.
.
本系统的方案也适用于其它精密测控场合或仪器仪表,其精度可在1%的水平上。
- 祛魅固态电池:一文看懂这项大火的技术