摘要:介绍单片机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所示。
图3中,虚线框内电路靠近水箱,用以检查水位。它与EM78P458之间内a线、b线连接。B线接地,a线接EM78P458ADC模块的第一个模拟通道口(AD0),并外接上拉电阻。K1、K2和K3分别是一限水位、正常水位和上限水位检查开关,它们的通断完全取决于是否被水浸没。如果箱内实际水位低于下限水位点,则K1、K2、K3全部断开,红色指示灯闪烁示警;反之,如果实际水位浸没K1、K2或K3,分别对应红灯、绿灯或黄灯点亮。表5示出了详细的状态说明。R1、R2和R3为限流电阻。如果开关全部闭全,则ab间限值最小,AD0的电位下降,对应ADC的输出为最小值0X3F,如表5所示;反之,当水箱内检测开关全部断开,ADC输出为最大值0XFF。通过ADC输出值可掌握箱内水位情况,并在P50、P51端口上输出高低电平控制电机的正转或反转,从而实施水阀的开或关。P50、P51的初始电位都是低电平,此时电机不动。如果需要加水,在P51输出高电平,P50上保持低电平,此时电机处于正转实施开水阀。4s(秒)后水阀完全被打开,P51恢复低电平,电机停转,此时水箱注水。当箱内水位升高到上限水位点K3时,应该关闭水阀停止注水。这时P51电位不变,而P50输出高电平,电机反转,4s后水阀关闭,P50恢复低电平,电机停转。 如果箱内水位低于下降水位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读取转换结果时,即可了解水箱内的水位,并根据情况控制电机的动作。
下面列出对应ADC操作的汇编语言源程序: 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 ;开中断
BS ADCONR,ADRUN ;启动ADC . . . ADC2:JBC ADCON,ADRUN ;检查AD转换是否结束 JMP ADC2 ;未结束则继续检测 MOV A,ADDATA ;读AD转换结果 . . . 本系统的方案也适用于其它精密测控场合或仪器仪表,其精度可在1%的水平上。 |