用AT89C51实现模数转换
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 ; 返回进行下次测量
单片机 51单片机 MCU 单片机视频教程 单片机开发 ARM单片机 AVR单片机 PIC单片机 Atmel stm32 单片机学习 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)