微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用AT89C51实现模数转换

用AT89C51实现模数转换

时间:02-21 来源:互联网 点击:

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 ; 返回进行下次测量

 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top