基于51单片机的多路温度采集控制系统设计Word格式.docx
《基于51单片机的多路温度采集控制系统设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的多路温度采集控制系统设计Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
6个子程序为定时/计数器0中断服务程序、温度采集及模数转换子程序ADCON、温度计算子程序CALCU、驱动控制子程序
DRVCON、十进制转换子程序METRICCON及数码管显示子程序DISP。
(1)主程序
主程序进行系统初始化操作,主要是进行定时/计数器的初始化。
(2)定时/计数器0中断服务程序
应用定时计数器0中断的目的是进行定时采样,消除数码管温度显示的闪烁现象,用
户可以根据实际环境温度变化率进行采样时间调整。
每当定时时间到,调用温度采集机模数
转换子程序ADCON,得到一个温度样本,并将其转换为数字量,传送给89C51单片机,
然后在调用温度计算子程序CALCU,驱动控制子程序DRVCON,十进制转换子程序
MERTRICCON,温度数码显示子程序DISP。
(3)温度采集及模数转换子程序ADCON
该子程序进行温度采样并将其转换为8位数字量传送给89C51的P0口。
采样得到的
温度数据存放在片内RAM的20H单元中。
(4)温度计算子程序CALCU
根据热敏电阻的分度值和电路参数计算出出一张温度表,存放在DATATAB数据表中,
由于篇幅关系,本程序只给出0-49C的温度数据。
一个温度有两个字节组成,前一字节为
温度值,后一字节为该温度所对应的热敏电阻上的电压的数字量。
根据采样值,通过查表及
比较的方法计算出当前的温度值,并将其存入片内RAM的21H单元。
采用查表法计算温
度值时为了克服热敏电阻的阻值一一温度特性曲线的非线性,提高测量精度。
(5)驱动控制子程序DRVCON
该子程序调节温度,当温度高于上限温度时(本程序设为30C),P1.0输出驱动控制
信号,驱动外设工作降温;
当温度下降到下限温度时(本程序设为25C),P1.0停止输出,
温度上升,周而复始;
工作状态有LED1-LED4指示。
(6)十进制转换子程序METRICCON
将存放于内部RAM21H单元的当前温度值得二进制数形式转换为十进制数(BCD码)
形式,以便输出显示,转换结果存放在片内RAM的32H单元(百位)、31H(十位)、30H单元(个位)。
(7)数码显示子程序DISP
该子程序利用89C51串口的方式0串行移位寄存器工作方式,将片内RAM的30H、31H、32H单元的BCD码查表转换为七段码后由RXD端串行发出去,然后经74LS164串
并转换,将七段值传送给数码管,以十进制形式显示出当前温度值。
根据以上分析画出的部分程序设计流程图如图1-0至图1-4所示。
图1-0部分程序设计流程图的设计框架
图1-1主程序流程图
图1-3温度采样及模数转换子程序流程图
3、具体内容
(1)温度控制器电器原理图设计
按以上分析及相关知识设计出的温度控制器电路原理图如图1-5所示。
+5V
R2
R1
输出控制
1
LED1
2
绿LED2
3
4
5
R3红LED3
R4黄LED4
200—
15
14
31
29
10
11
P1.0
P0.0
P1.1
P0.1
P1.2
P0.2
P1.3
P0.3
P1.4
P0.4
P1.5
P0.5
P1.6
P0.6
P1.7
P0.7
IC1
RST
P2.0
AT89C51
P2.1
T1
P2.2
T0
P2.3
P2.4
EA/Vp
P2.5
P
P2.6
PSEN
P2.7
RXD
RD
~38~
~37~
36
8
35
18
34
19
33
20
32
21
25
22
24
23
3917
26
27
28
17
IC3A74LS029
222
严•~6
LS
74
)2
X2la^ix
T
6
TO
N
LE
A
12一1
30
470x21
2345
74LS164
K.R
B
IC6
IC5
D0
D1
D2
D3
D4
D5
D6
D7
C
OE
ALE
SC
VR(+)
12
7EOC
10CLK
VR(-)
IC2
ADC0809
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
501912
467
liniii
010
0000
IC7
16
h
28~
IC8
在图1-5所示的电路中,热敏电阻的连接如图1-6所示。
图1-6热敏电阻的连接
本设计所使用的热敏电阻的分度表及ADC0809转换后的电压数字量见附表1-1所示
转换后的电压数字量的计算方法为:
热敏电阻与R8并并联后的总电阻:
R=(Rt*R8)/(Rt+R8)
R与R7串联电路中R的分压值(即输入ADC0809的模拟量):
V=5R/(R+R7)
5V被分成256等分(8位量化),则每份的电压值:
△=5/256
输入的模拟量电压经8位量化后的数字量:
D=V/△
例如,热敏电阻在温度为20C时的阻值为62.254千欧,则根据上述方法计算出的电压数
字量为169,注意在计算中R7用实测值19.6千欧代入进入计算。
在实际做该电路时,可根据自己所选择的热敏电阻的分度表计相关电路参数,按上述方
法计算出ADC0809转换后的各温度对应的电压数字量。
程序中的温度数据表构成:
1个温度数据占2个字节,前一字为温度值,后一个字节
为该温度下热敏电阻上的模拟电压转换成德8位数字量。
如在20C时,热敏电阻对应的电
压数字量为169,则20,169组成一个温度为20C的温度数据。
按这样方法组成的0-49C的温度数据表如下:
DATATAB:
DB0,194,1,193,2,192,3,191,4,190
DB5,
189,
6,
188,
7,
187,
8,
186,9,
185
DB10:
184,
11,
182,
12,
181,
13,
180,14,
178
DB15
177
16
175
17,
174,
18,
173,19,
171
DB20
169
21
168
22,
166,
23,
165,24,
163
DB25
161
26
159
27,
158,
28,
156,29
154
DB30
152
31
150
32,
149,
33,
147,34,
145
DB35
143
36
141
37,
139,
38,
147,39,
135
DB40,
133,
41,
131,
42,
129,
43,
127,44,
125
DB45,
123,
46,
121,
47,
118,
48,
116,49,
114
在温度采样机模数转换子程序中,采样得到的当前温度下热敏电阻上的数字电压存于
20H单元,在温度计算子程序中通过查表的方法从表中的第一个温度(0C)下热敏电阻上
的数字电压开始,依次取出各温度下热敏电阻上的十字电压,与与存于20H单元的当前温
度下热敏电阻上的的数字电压比较,如小于当前温度的数字电压,则在取出下一温度的数字
电压与当前温度的数字电压比较;
直到大于或等于当前的温度数字电压,比较结束。
如大于
则取出前一温度作为当前温度存于21H单元,如等于则将该温度作为但前温度存于20H单元。
这种温度计算方法,避免了温度特性曲线的非线性对温度计算精确性的影响,计算出的
温度非常精确。
(3)温度控制程序设计
在本设计中,晶体振荡器频率为6MHz,TO定时时间为100ms,TO工作于方式1,
则T0的初值为:
X=(最大计数值M—定时时间t/及其周期Tm)=216-100ms/2us=15536=3CB0H
按以上任务分析设计出的源程序如下:
ORG0000H;
跳转到主程序
LJMPMAIN;
ORG000BH;
LJMPT0INT;
跳转至U
T0中断服务程序;
主程序
ORG0100H;
MANMOVR1,#10;
T0100马上定时溢出计数寄存器R1赋初值10
MOVP1,#0FFH;
所有指示灯火
MOVSP,#60H;