用AT89C51实现模数转换

发布者:悠闲时光最新更新时间:2011-02-21 手机看文章 扫描二维码
随时随地手机看文章

    本期教程通过一个简单的电压测量电路,讲解AT89C2051片内比较器的使用及模数转换主程序的设计,说明利用RC充电规律实现模数转换,取得被测电压近似值的原理。

一、电路构成与功能

    由图1可知,本电路主要由AT89C2051(IC1)、R10、C4等组成,被测电压从P1.1输入,电路通过对C4充电电压与被测电压的比较得到电压值,然后将被测电压值转换为相应的显示代码,送LED1、LED2中显示出来。

二、AT89C2051简介

    AT89C2051与AT89C51相比,除去掉了P0口和P2口,并在P1口的P1.0、P1.1与P3口的P3.6之间嵌入了一个精确的模拟比较器外,其他硬件资源完全相同。AT89C2051具有以下一些标准特性:2K字节的闪速存储器,128字节RAM,15条I/O线,2个16位定时/计数器,5个两级中断源结构,一个全双工串行口,一个精确的模拟比较器,片内振荡器和时钟电路。此外,AT89C2051设有静态逻辑,可以在低到零频率的条件下工作,支持两种软件可选的省电模式:在闲置模式下,CPU停止工作,但RAM、定时器/计数器、串口和中断系统仍在工作;在掉电模式下,保存RAM中的内容并且冻结振荡器,禁止所有其他片内控制单元功能,直到下一个硬件复位为止。

    AT89C2051只有20个引脚。引脚排列及片内比较器连接示意图见图2。由图可知,P1.0与比较器的同相输入端相接,

    P1.1与比较器的反相输入端相接,比较器的输出端在片内与P3.6相接,而P3.6并无片外引脚。因此,AT89C2051的P1口有完整的8条I/O口线的片外引脚,而P3口只有7条I/O线的片外引脚,使其可供片外使用的I/O线为15条。AT89C2051性能同AT89C51一样卓越而结构又十分简单,从而为很多嵌入式控制系统提供了灵活而又廉价的方案,因此,在各种智能化、自动化仪器、仪表及家电中得到广泛应用。

三、数模转换原理

    图3为数模转换电路的简化图。由图可知,比较器IC1的同相输入端P1.0与P1.4之间接有电阻R10,而被测电压是通过P1.1输入至比较器IC1的反相端,这样,当被测电压Ui从P1.1输入并开始测量时,先使P1.4置低电位,C4就会对地放电,使P1.0的电位为零,由于此时P1.1的电位高于P1.0的电位(Ui>0),因此,IC1的输出端P3.6为低电位。进入测量程序,先使P1.4跳高电位,VCC就会通过R9、R10向C4充电,P1.0的电位就会随时间按指数规律上升。当P1.0的电位上升至与P1.1的电位相同或略高一点时,IC1的输出端P3.6就会由低电位跳变为高电位,由此,我们可用程序控制CPU在C4充电的同时,不间断检测P3.6的电位,当P3.6电位发生高跳时,我们就认为P1.0的电压与P1.1的电压相等。由于C4的充电电压是可以通过充电时间的长短来准确计算的,所以,计算出C4的充电压,也就间接地测出了被测电压Ui的值。VCC通过R10(R9和P1.4上拉电阻的影响忽略)向C4充电,C4两端的电压是随时间按指数规律上升的,可根据UC=VCC(1-e-t/RC)求出任一时刻的充电电压值。为了便于理解,我们只在图4所示的充电曲线中选取一小段,将其取直,然后按直线变化规律对模数转换原理加以阐述。由图4可以看出,C4充电曲线的起始部分0~500mV这一段是较陡的,且接近直线,为了使程序设计简单,我们就把OA段看做是直线。这样,当C4自零电位开始充电到充电电压达500mV的这段时间里,充电时间与其两端的电压是成正比的,我们适当地对R10和C4取值,使C4的充电电压每20μs上升10mV,再编制与之相匹配的程序,自C4开始充电起,每隔20μs就检测一次P3.6的电位,并将检测的次数在寄存器中累计下来,直到P3.6的电位发生跳变才停止累计。这样,寄存器中的累计数便与C4两端的充电电压有了对应关系。如果第5次检测时,P3.6的电位由低跳高,说明被测电压是50mV。这样,我们测到P3.6电位跳高后,就停止检测,将寄存器中的数值乘以10mV,就得到了被测电压Ui的电压值,这就实现了模量与数量的转换。

四、显示原理

    在图1中,LED1与LED2的a、b、c、d、e、f、g端分别与IC1P3口的P3.0至P3.7相接(P3.6除外),GND端分别与IC1的P1.2和P1.3相接。显示时,将段选码送P3口,将位选码送P1口,测量值就会在LED1和LED2中显示出来。有关原理及变换过程,前几讲中已有详述。

五、程序设计思想

    系统上电后进行初始化,熄灭数码管LED1和LED2,然后进入测量子程序:执行CLR P1.4,使P1.4呈低电位,C4便通过R10对地放电,调用40ms显示子程序后,C4电荷放尽,P1.0的电位为零,执行MOV R0,#00H,将检测次数累计寄存器R0清零,然后执行SETB P1.4, 使P1.4呈高电位,VCC通过R10对C4充电,经数次空操作,执行INC R0指令,将R0中的内容加1,再执行JNB P3.6,000FH,判断充电电压与被测电压是否相等。如果P3.6电位为低,说明C4的充电电压较被测电压低,程序跳转至000F处,经空操作充电延时后再对P3.6的电位进行检测;如果P3.6的电位为高,说明P1.0的电压与P1.1的电压相等,执行SJMP 0006H,程序立刻返回0006处,使C4放电,并进入显示子程序,对测量数据进行处理,将处理后的数据送数码管显示,然后进行下一次测量。从程序清单中的000FH至0018H空间可以看出,6次空操作及INC R0为单机器周期指令,执行时间皆为2μs,而JNB P3.6,000FH为双机器周期指令,执行时间为4μs,这样,便使每次对P3.6的检测时间间隔为18μs。按图1电路中R10及C4的取值运行上述程序,能使每检测一次P3.6的电位,C4充电电压的上升约10mV。然后进入显示子程序,将R0中的数据经变换后送LED中显示出来,我们就可读出被测电压Ui的值了。模数转换主程序安放在0000H至001AH空间内,数据显示子程序要在001BH处开始安放。显示子程序的主要功能是将数据经译码后得到显示代码,其原理不再赘述。如果对模数转换有较高的精度要求,就要事先根据UC=VCC(1-e-t/RC)计算出多个时刻的对应值,这样,组成充电时间与充电电压值的对应数据表,然后编一段程序,将充电时间,也就是寄存器R0中的数据取出来,经查表比较,取得较精确的充电电压数值,本文旨在说明一下模数转换的基本原理,对此不作详述。

六、主程序清单

地址 机器码 指令 解释

0000 75B000 MOV P3,#00H ; 初始化

0003 7590EF MOV P1, #EFH ; 关显示

0006 C294 CLR P1.4 ; 放电

0008 12001B LCALL 001B ; 调40ms显示子程序

000B 7800 MOV R0,#00H ; 清累计寄存器

000D D294 SETB P1.4 ; 开始充电

000F 00 NOP ; 空操作延时

0010 00 NOP ;

0011 00 NOP ;

0012 00 NOP ;

0013 00 NOP ;

0014 00 NOP ;

0015 08 INC R0 ; 累计检测次数

0016 30B6F6 JNB P3.6,000FH; 低于Ui,再充电比较

0019 80EB SJMP 0006H ; 返回进行下次测量

 

引用地址:用AT89C51实现模数转换

上一篇:单片机串行口的使用与“蓝牙”电测系统
下一篇:用AT89C51实现自设定时间控制

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved