第4章多通道温度检测系统的设计Word文档格式.docx
《第4章多通道温度检测系统的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《第4章多通道温度检测系统的设计Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
(3)A/D转换器ADC0809
ADC0809为八个输入端,八位A/D转换器。
用于8个通道的温度测量。
使用一个型号为WH5-1A10K-B的电位器作为输入电路。
八个电位器分别放置在需要进行温度测试的八个测试点上,作为温度传感器。
(4)LED动态显示电路
本系统采用四个七段码LED动态显示器,其结构和工作方式在第三章已经详细说明。
单通道测试时,最左边的显示器不显示任何信息;
八通道巡回测试时,最左边的显示器用来显示通道号,其它三个显示器用来显示实时温度值。
图4-1八通道温度检测系统逻辑图
第4.3节软件说明及程序设计
软件设计是本文重点,下面详细介绍本系统的程序设计。
4.3.1软件说明
(1)温度值的确定
温度传感器将温度变为电信号后输入到A/D转换器,由A/D转换器将模拟量换成数字量,再通过查表程序即可由温度标准测量值表中确定被测点的温度值。
由于测量环境和测量元器件的影响,在测定温度时,只采集一个数据往往会带来较大的误差。
因此,我们的数据采集子程序设计为一次同时采集16个数据。
如何得到16个数据的测量值,有各种不同的实现办法,通常是采用求平均值的办法来实现。
由于温度是一个缓慢变化的物理量,故同时采集的16个数据虽不尽相同,但离散性不大,只是在一个中间值附近出现较小的波动。
所以,我们可以设计一个排序子程序,将所采集的16个数据按照从小到大的顺序排列好,然后选取位于中间的一个数据作为实际测量值即可,实践证明,这是一种比较简单有效的算法。
(2)ROM分配表
0000H——02FFH:
主程序
0300H——04FFH:
子程序
0500H——058CH:
温度标准测量值表
058DH——0594H:
通道号显示表
(3)RAM分配表
30H——52H:
A/D转换数据采集缓冲区
5AH——5CH:
显示字符存放单元
55H:
被检测的通道号寄存器
56H:
巡回检测方式循环变量寄存器
60H——6FH:
堆栈
(4)I/O口分配表
P0口:
低八位地址/数据总线
P2口:
高八位地址总线
P3口:
P3.3与EOC连接构成查询A/D转换器转换结束信号输入位
(5)扩展I/O地址分配表
78FFH:
A/D模入通道通道0转换启动地址
79FFH:
A/D模入通道通道1转换启动地址
7AFFH:
A/D模入通道通道2转换启动地址
7BFFH:
A/D模入通道通道3转换启动地址
7CFFH:
A/D模入通道通道4转换启动地址
7DFFH:
A/D模入通道通道5转换启动地址
7EFFH:
A/D模入通道通道6转换启动地址
7FFFH:
A/D模入通道通道7转换启动地址
7F00H:
8155的控制/状态命令口地址
7F01H:
8155的A口地址
7F02H:
8155的B口地址
7F03H:
8155的C口地址
4.3.2程序设计思路
(1)键输入程序硬件结构如图4-1所示,键输入程序设计流程图如图4-2所示:
图4-2键输入程序流程图
当PA口工作与方式0输入、PC口工作与AL1方式输入时,方式命令控制字可设为03H。
下面介绍程序控制扫描工作方式的工作过程和键盘扫描子程序:
KEYSCAN:
ACALL
CCSCAN
;
检查有键闭合否
JNZ
INK1
有键按下转至INK1
LCALL
DL2MS
延时2ms
AJMP
KEYSCAN
无键按下跳回KEYSCAN
INK1:
有键按下两次延时
再次确认有无键按下
INK2
有键闭合转至INK2
抖动引起,转KEYSCAN
INK2:
MOV
R2,
#0FEH
扫描第一列
R4,
#00H
R4中放首列的首行键值
COLUM:
DPTR,
#7F01H
8155PA口地址
A,
R2
MOVX
@DPTR,
A
PA口低位即为要查相应列,
INC
DPTR
送出扫描码到PA口
指向8155PC口
@DPTR
回读8155PC口
JB
E0H,
LONE
首行PC0无键按下至LONE
有键按下A中放相应首行号
KCODE
跳转KCODE去计算键值
LONE:
E1H,
NEXT
第二行无键按下转下一列
#04H
有键按下次,号行04H送A
KCODE:
ADD
R4
行号+列号=键值
PUSH
E0H
保护键值
UP:
判断按键是否释放
UP
未释放,等待释放
POP
若起键,则键码送A
RET
NEXT:
准备扫描下一列
R2从FEH~F7H可变
JNB
E3H,
KERR
若扫描过一遍则转至KERR
RL
扫描位左移,并存储至R2
COLUM
进行下一列扫描
KERR:
转KEYSCAN,重复
CCSCAN:
全面查有无键按下
全列置零
指向PC口
回读PC口
CPL
A中是回读取反后情况有1
ANL
#03H
就是有键按下
DL2MS:
R7,
延时2ms子程序
DM0:
R6,
DM1:
DJNZ
DM1
DM0
本例中用延时4ms子程序进行软件消抖;
用计算方法得到键号,即键号=首行键号+列号。
键盘扫描子程序可完成如下几个功能:
判别有无键按下。
其方法为PA口输入全为0,读PC口状态。
若PC0~PC3为全0,则说明无键按下;
若不全为0,则说明有键按下。
消除按键抖动的影响。
其方法为判断有键按下后,用软件延时的方法4ms,再判断键盘状态。
如果任为有键按下状态,则认为有一个确定的键按下,否则当作按键抖动处理。
求按键位置。
根据前面介绍的扫描方法进行逐列置0扫描,最后确定按键的行列值,并通过计算得到按键的键号。
键闭合一次仅进行一次按键的处理。
方法是等待按键释放之后,再进行按键功能的处理。
(2)数据采集
数据采集程序设计在第三章已作了详述,在此参照系统流程图只简要叙述数据采集通道的启动地址地址。
如图4-1所示,P2口的低三位与A/D转换器的八个通道的地址控制线相连,因此,8路模拟输入通道地址为:
78FFH~7FFFH,采集程序设计如前所述。
(3)数据排序程序设计
下面介绍16个数据按照从小到大的图4-3数据排序流程图
顺序排列程序,其中数据缓冲区首址为30H,16个数据分别存放在对应的内存单元30H~3FH中,排序结束后结果任存放在对应的内存单元中,其存放顺序为从小到大排列,流程图如4-3所示。
#0FH
;
设置外围比较次数
START:
设置内围比较次数
R0,
#30H
送缓冲区首址至R0
L1:
@R0
送缓冲区初值至A
R0
指向下一个数
暂存前数
取下一个数
CLR
C
清零进位标志
SUBB
前后数相减
恢复前数
JNC
L2
无借位,则顺序排列
XCH
交换两数
DEC
指向前数地址
交换数据
指针恢复任指向后数单元
L2:
L1
一轮中重复进行比较
START
进行小一轮比较
(4)数字量与温度值的对应关系
在程序设计中是这样来使阻值和温度对应的:
首先将转换的数字量与0FH比较,如小于则显示负溢出,否则将数字量除以3,根据公式N=(VIN-VREF(-))×
256/(VREF-VFER(-)),其转换值大于计算值,为了提高系统的精确度,当数字量不是3的倍数时,将数字量减1,将结果再除以3,以此不断减1,直到所得的数字量是3的倍数为止。
将所得的商与05H比较,如小于则显示负溢出;
所得的商与4BH比较,如大于,则显示正溢出。
05H与4BH之间共71个数,为了与温度值相对应和便于查表,将所得的商减05H,此时的余数与1EH比较,如小于则显示负温度,否则显示正温度。
如果实际转换的数字量为4FH,因其不是3的倍数,将其减1,差为4EH且是3的倍数,商为1AH,大于05H小于4BH,不溢出,将1AH减05H,差为15H,通过查表程序即将15H减去1EH差为-9H(十进制为-9),最后显示的温度为-9℃,若查表程序前所得的数字量为30H,则通过查表后所得的差为1AH(十进制为18),最后显示的温度值为18℃。
(5)显示程序
数据采集程序设计在第三章已作了详述,此处不做详细介绍。
第4.4节系统程序流程图
设计的系统能对八个检测点的温度进行自动检测。
温度测定范围为-30C~+40C,测量精度为士1℃。
工作方式有两种:
单通道测试;
八通道巡回捡测。
图4-4八通道温度检测系统流程图
多通道温度检测系统的系统程序流程图如图4-4所示,从流程图上可以看出单通道检测和多通道巡回检测两种工作流程是分开的,因此在程序设计时也应该分开考虑。
图4-4(续)
附录
系统应用程序清单