3 程序设计
3.1 程序设计方案
此次程序设计采用的是延时法。主程序设计的总方案见图11设计框图。
图11 方案设计框图
3.2 程序介绍
3.2.1 初始化程序
如上文介绍本次设计选择通道IN0,8路模拟选择通道A,B,C分别接3位低位地址Q0,Q1,Q2即P0.0,P0.1,P0.2,而地址锁存允许信号ALE由P2.0控制,则8路模拟通道的地址为FEF8H--FEFFH。 3.2.2 A/D转换程序
转换框图如图12所示
图12 A/D转换框图
11
3.2.3 延时法程序
软件延时法是指用软件延时等待一次A/D转换结束。延时时间取决于计算和调试而获得的ADC完成一次转换所需要的时间。
延时法程序设计流程框图如图13所示 延时法程序清单见附录D
图13 延时程序流程框图
12
4 仿真及误差分析
4.1 Proteus仿真图
图14 Proteus仿真原理图
4.1.1 原理图说明
此电路的工作原理是:模拟电压信号通过变阻器RV1分压后由ADC0809的IN0通道进入,经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89S52芯片的P1口,AT89S52负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.1、P2.2、P2.3、P2.4产生位选信号控制数码管的亮灭。此外,AT89S52还控制ADC0809的工作。接到ADC0809的CLOCK,P2.0发正脉冲启动A/D转换。 补充说明:Proteus里面没有ADC0809的封装模式,因此选用ADC0808代替,两者没有本质区别,ADC0808是ADC0809的简化版,主要的不同点是0808的转换输出D0-D7与常用的输出端高低位是相反的,即0809的最低位是D0,0808的最低位为out7。类似的,软件里面没有AT89S52的封装,则选用的AT89C52实现其功能。
13
4.2 误差分析
4.2.1 设计结果显示
仿真结果如图15所示
图15 启动显示P
图16 输入0V显示0V
图17 输入2.75V显示2.73 V
图18 输入3.85V显示3.83
图19 输入4.55V显示4.53V
14
硬件实物结果如图20和图21所示
图20 系统复位后显示“P”
图21 实物数码管显示电压
4.2.2 误差分析
数码管显示与电压表电压对比如表三
表三 数码管显示电压与实测电压对比
数码管显示电压 0.00 2.73 5.83 4.53
电压表所测电压 0.00 2.75 3.85 4.55
误差 0.00 0.02 0.02 0.02
由于单片机AT89S52为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般有0.02V的误差。
15