Ω,带入①式得到U=0.366V。
为了输入单片机MCS-51的电压为0-5V,应该设计运算放大器的放大倍数为A?5V?13.50.366V,为了留有一定的余量和现有电阻大小,选择运算放大器的倍
数为12倍。
采集电压范围为0V-4.392V。
最终我们,我们为了防止AD输入阻抗不够大,而对采集电路的电压造成影响,从而对电压采集造成误差。所以采用两级运放。第一级为查分比例运算电路,放大倍数为4被。后面一级为比例运算放大电路,放大倍数为3倍。最终放大倍数为12倍。运算放大电路的电路电阻匹配为
A1?R6R4?4,且R4=R5,R6=R7——————③
我们取,R4=R5=20K,R6=R7=80K;
A2??R11?R8?R8?3——————④
我们取,R8=12K,R11=24K;且为匹配电阻,R12=8K; 原理图如下
图八 主电路原理图
3.6 外部储存器模块
本系统扩展32K ROM, RAM,分别用了四片2764和6264,其P2.7,P2.6,P2.5通过3-8译码器,编译成Y0-Y7,作为片选信号。其余地址线作为连接8K的13根地址线。
Eg. U8:0x0000-0x1fff U9:0x2000-0x3fff
U10:0x4000-0x5fff U11:0x6000-0x7fff 原理图如下
图九 外部储存器的连接原理图
第四章 软件部分
4.1主程序的设计
设计思路: 主程序主要执行LCD显示和键盘的扫描,AD的采集在外部中断中执行,采样数据处理以及LCD显示数据的更新均在定时器中断中完成。主程序开始时首先定义相关的指针,并对定时器T0,外部中断INT0,ADC0809进行初始化设置。ADC0809转换完成时,单片机将收到低电平,所以将INT0设为下降沿触发。题目要求每隔1s更新一次显示温度,这里选用定时方式1,方式1
的最大定时时间为:Tmax=216×1us=65.536ms
这里每次溢出时设为50ms,每溢出20次进行一次数据更新。 重装值的计算公式为:TC=216-50ms/1us=15536=3CB0H
51单片机的中断优先级默认为,INT0高于T0,当在定时器中断执行数据处理程序时应避免外部中断的打断,因此设为TO中断为高优先级。 循环,等待中断。 流程图:
主程序定义相关指针T0,INT0,及ADC0809初始化开CPU中断LCD温度显示键盘扫描
图十 主程序流程图
4.2 定时器中断程序的设计
设计思路: 定时中断函数主要进行采样数据的处理以及温度的转换。为了减小
误差,取最近十次的采样值相加求取平均值,然后转换为相应的温度。求平均值时,16位的除法操作比较困难,对于高八位可以看做是n个255,用高八位乘以25.5,即除以10之后的值,在与低八位除以10之后的数据相加,就是最后的平均值。对于ADC0809来说,它的采集电压范围为0-5V,电路设计时留有余量,参考值为4.09V,因此采集的最大值为208。进行温度转换时,-20℃对应0,70℃对应208,按照对应关系可以用查表进行。查出相应温度后转为十位、个位BCD码,为后面的LCD显示做准备。
定时中断函数保护现场最近十次采样值求平均值时的代码:
DATA_Explose: PUSH ACC PUSH DPL PUSH DPH
/*把寄存器切换到1区*/ CLR RS1 SETB RS0 CLR A
MOV R4,#00H MOV R5,#00H MOV R3,#10 CLR C
MOV R1,#32H LOOP_ADD: ADDC A,@R1 JC ADD_High_8 SJMP ADD_Continue ADD_High_8:
求平均值温度转换将各位BCD码存相应地址返回主函数
定时器流程图
图十一
相关推荐: