多路温度采集系统编程设计课程设计报告.docx
《多路温度采集系统编程设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《多路温度采集系统编程设计课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
多路温度采集系统编程设计课程设计报告
中南大学
微机应用系统设计与
综合实验设计报告
设计题目多路温度采集系统编程设计
指导老师
设计者
学号
专业班级
设计日期
目录
第一章微机应用系统课程设计的目的意义
1.1设计目的
1.2课程在教学计划中的地位和作用
第二章温度采集系统软硬件设计任务
2.1设计内容及要求
2.2实验设备
2.3课程设计的内容及要求
第三章总体设计方案
3.1设计思想
3.2总体设计流程图
第四章硬件设计
4.1硬件设计概要
4.2硬件设计接线图
4.3所用到的芯片及其各自功能说明
4.3.1芯片列表
4.3.28086的功能简介
4.3.38254的功能简介
4.3.4AD0809的功能简介
第五章实验结果
5.1汇编程序结果
5.2C语言程序结果
第六章源程序代码
6.1汇编程序代码
6.2C语言程序代码
第七章系统的调试与使用
第八章收获、体会
参考文献
第一章微机应用系统课程设计的目的意义
1.1设计目的
《微机原理与接口技术》是一门实践性和实用性都很强的课程,学习的目的在于应用。
本课程设计是配合课堂教学的一个重要的实践教学环节,它能起到巩固课堂和书本上的知识,加强综合能力,提高系统设计水平,启发创新思想的效果。
通过本课程设计希望达到以下目地:
培养资料搜集和汇总的能力。
培养总体设计和方案论证的意识。
提高硬件,软件设计与开发的综合能力。
提高软件和硬件联合调试的能力。
熟练掌握相关测量仪器的使用方法。
掌握相关开发软件,仿真软件的使用方法。
1.2课程在教学计划中的地位和作用
现在计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧跟实际连接。
掌握这方面的知识更重要强调解决实际问题的能力。
该课程设计给我们提供了一个很好的机会,它要求我们结合课堂上和书本中学到的知识去独立设计一个硬件系统,它是我们迈向实践和应用的桥梁,我们学习书本上的知识是一个不断积累的过程,而该课程设计却使得我们能够尽情发挥他们,让我们更了解计算机的结构,工作原理以及软硬件的结合使用,虽然课程设计的时间比较短,但它却在整个教学计划中占据了及其重要的位置。
第二章温度采集系统软硬件设计任务
2.1实验目的
为了实现计算机对生产过程及对象的控制,需要将对象的各种测量参数按照要求转换成数字信号送入计算机。
经计算机运算处理后再再转换成适合于对生产过程进行控制的量。
所以在微机和生产过程之间,必须设置信息的变换和传递通道。
而我们所做的模拟输入通道,主要功能就是随时间变化的模拟输入信号变成数字信号送入计算机,主要有多路转换器,采样保持器和A/D转换器等组成。
本实验通过设计一个微机控制的温度采集系统,旨在使学生能做到以下几点:
1.了解微机控制的温度采集系统软硬件设计原理和方法。
2.进一步掌握定时/计数器、并行接口芯片和中断控制器的工作原理与使用方法。
3.学会利用A/D转换芯片实现信号的A/D转换。
2.2实验设备
l.80X86系列微机一台。
2.微机硬件实验平台。
3.定时/计数器8254
4.ADC0809。
2.3实验内容及要求
(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;
(2)、基于80x86微机接口的控制器硬件电路设计与调试;
(3)、功能要求:
具有报警功能(如:
声、光、电形式),系统可实现6路温度信号的巡回采集检测、各路巡回检测的温度范围0~1020CO(温度信号用电位器可调电压模拟);4、指标要求4CO对应数字量为01H)、每隔2s检测一次,每一路连续检测5次,取其中值,当前温度用4位数显示在计算机显示屏幕上,6路同时显示,每2s刷新一次显示。
显示方式为:
例:
1号炉温度:
0800CO
2号炉温度:
1000CO
3号炉温度:
0700CO
4号炉温度:
0800CO
5号炉温度:
0650CO
6号炉温度:
0870C
第三章总体设计方案
3.1设计思想
在许多传统行业中,多路高温度采集系统是不可或缺的。
电厂,石化行业及制药厂等企业生产过程中,普遍存在着需要进行温度测量的场合。
因为温度是生产过程和科学实验中普遍且重要的物理参数。
在工业生产中,为了高效生产,必须对生产过程的主要参数,如温度,压力,速度等进行有效的检测并控制。
其中温度检测在生产过程中占有相当大的比例。
而我们所做的课题正是以8086cpu为核心设计一个温度巡回监测系统(A/D采用ADC0809).系统可实现温度信号的采集,在显示器上显示当前的温度和通道号。
模拟现场六路温度巡回检测,温度范围0-1020摄氏度。
每隔两秒检测一次,每一次检测六路信号,每路信号连续检测五次,并取这五个数据的中值经标度变换后送显示器显示,6路同时显示,每次显示持续两秒。
在采集完某一路信号时,将采集到的信号与给定值比较,如果超出给定范围则进行报警。
该系统主要用于温度检测,是一个状态反馈系统,并非动态控制系统。
他可以利用放大器实现多个点的温度巡回检测,并在屏幕上显示当前的温度值和通道号。
当温度信号改变时,显示的值也随之改变,并且实现当温度超出给定范围时进行报警的功能。
3.2程序设计流程图
Y
N
N
Y
N
Y
第四章硬件设计
4.1硬件设计概要
系统的主要功能是实现温度信号的采集,在显示器上显示当前的温度和通道号。
模拟现场六路温度的温度巡回检测,温度范围0-1020摄氏度。
每隔两秒检测一次,经标度变换后送显示器显示,六路同时显示,每次显示持续两秒。
实验步骤如下:
(1)确认从PC机引出的两根扁平电缆已经连接在试验平台上。
(2)编写程序然后编译连接。
(3)参考接线图连接试验线路。
(4)运行参考程序,观察显示器上的通道号和温度值。
(5)改变温度的值观察是否实现报警功能。
4.2硬件接线图
4.3所用到的芯片及其各自功能说明
4.3.1芯片列表
可编程定时器/计数器8254,ADC0809
4.3.28086的功能简介
Intel8086CPU是16位微处理器,它采用N—沟道,耗尽型负载的硅栈工艺制造,外型为双列直插式,有40个引脚。
8086CPU有16根数据线和20根地址线,直接寻址空间为1MB。
能够完成微型计算机的基本操作数的读取,指令的执行,中断控制等基本功能。
4.3.38254的功能简介
18254的内部结构
8254采用NMOS工艺制成,有24个引脚,所有输入、输出端均TTL电平兼容,单一电源(Vcc=+5V)供电,最高计数速率为2.6MHz。
它包括3个计数器(即计数器0、1、2)、数据总路线缓冲器、读/写逻辑以及控制寄存器等4个部分。
②8254的外部引脚
图3.38254引脚图
A1、A0:
地址输入线,用来址8254内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。
CLK0、CLK1、CLK2:
时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。
CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。
当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。
GATE0、GATE1、GATE3:
门控输入端,用于外部控制计数器的启动计数和停止计数的操作。
两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。
OUT0、OUT1、OUT2:
计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。
③8254的工作方式
方式0:
减1计数到0,产生中断请求信号。
方式1:
减1计数到0,产生可重复触发的单稳态负脉冲信号。
方式2:
减1计数到1,分频器(速率信号发生器)。
方式3:
减1计数到初值的1/2,方波发生器。
方式4:
减1计数到0,软件触发产生选通负脉冲信号。
方式5:
减1计数到0,硬件触发产生选通负脉冲信号。
④8254方式控制字格式
D7D6
D5D4
D3D2D1
D0
00选计数器0
01选计数器1
10选计数器2
00计数器锁存
01只读写低8位
10先读写高8位
11先读写低8位
再读写高8位
000方式0
001方式1
X10方式2
X11方式3
100方式4
101方式5
0二进制计数
1BCD计数
4.3.4ADC0809的功能简介
ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑,用它可直接输入8个单端的模拟信号,分别进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛,ADC的主要技术指标为
分辨率:
8位单电源:
+5V
总的不可调误差:
1LSB转换时间:
取决于时钟频率
模拟输入范围:
单极性0~5V时钟频率范围:
10KHZ~1280KHZ
ADC0809的外部管脚如下图所示
ADC0809的外部管脚图
第五章实验结果
5.1汇编程序结果
1haoluwenduú║1020degree
2haoluwenduú║1020degree
3haoluwenduú║0720degree
4haoluwenduú║0608degree
5haoluwenduú║0248degree
6haoluwenduú║0248degree
六路温度都在指定的温度范围内,不产生报警时的结果显示
1haoluwenduú║1020degree
2haoluwenduú║1020degree
3haoluwenduú║0000degreeThetemperatureisbelowthan60degree
4haoluwenduú║0000degreeThetemperatureisbelowthan60degree
5haoluwenduú║0248degree
6haoluwenduú║0248degree
程序设计为当温度低于60摄氏度时蜂鸣器报警,并且在屏幕上产生相应的提示
3号炉和4号炉温度低于60摄氏度报警
5.2C语言程序结果
1haoluwendu:
1020degree
2haoluwendu:
1020degree
3haoluwendu:
688degree
4haoluwendu:
592degree
5haoluwendu:
248degree
6haoluwendu:
248degree
六路温度都在指定的温度范围内,不产生报警时的结果显示
1haoluwendu:
1020degree
2haoluwendu:
1020degree
3haoluwendu:
804degree
4haoluwendu:
676degree
5haoluwendu:
12degreeThetempetureisbelowthan60degree
6haoluwendu:
12degreeThetempetureisbelowthan60degree
程序设计为当温度低于60摄氏度时蜂鸣器报警,并且在屏幕上产生相应的提示
3号炉和4号炉温度低于60摄氏度报警
第六章源程序代码
6.1汇编语言程序
;***************根据CHECK配置信息修改下列符号值*******************
IOY0EQU0E400H;片选IOY0对应的端口始地址
IOY1EQU0E440H;片选IOY1对应的端口始地址
;*****************************************************************
MY8254_COUNT0EQUIOY0+00H*4;8254计数器0端口地址
MY8254_COUNT1EQUIOY0+01H*4;8254计数器1端口地址
MY8254_COUNT2EQUIOY0+02H*4;8254计数器2端口地址
MY8254_MODEEQUIOY0+03H*4;8254控制寄存器端口地址
AD0809EQUIOY1+00H;AD0809的端口地址
AD0809_MODEEQUIOY1+08H*4;AD0809的状态口地址
DATASEGMENT;数据段
DBUFDB100DUP(?
);数据区
STR1DB'haoluwendu:
$';显示的字符串
STR2DB'Thetemperatureisbelowthan60degree$';显示提示信息
STR3DB'degree$'
FREQ_LISTDW556,495,556,624,495,416,416,371,495,0;频率表
TIME_LISTDB6,2,4,4,6,2,4,4,12;时间表
DATAENDS
STACK1SEGMENTSTACK'STACK';堆栈段
ST1DB100DUP(?
)
STACK1ENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,STACK1
MOVSS,AX
MOVAX,DATA
MOVDS,AX;DS指向数据区段址
CLD;清方向标志
MOVAX,0000H
MOVES,AX
MOVAL,50H;保存原中断向量入口地址
MOVAH,35H
INT21H
PUSHES
PUSHBX
PUSHDS
MOVAX,SEGADINT;设置中断向量入口地址
MOVDS,AX
MOVDX,OFFSETADINT
MOVAL,50H
MOVAH,25H
INT21H
POPDS
WAIT1:
INT50H;中断调用
PUSHCX;延时
PUSHAX
PUSHDX
PUSHBX
MOVCX,0FFFFH
D1:
MOVAX,0FFFFH
D2:
DECAX
JNZD2
LOOPD1
MOVAH,6:
清屏
MOVAL,0
MOVCX,0
MOVDH,24
MOVDL,79
MOVBH,7
INT10H
MOVAH,2;置光标到页面左上角
MOVDH,0
MOVDL,0
MOVBH,0
INT10H
POPBX
POPDX
POPAX
POPCX
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
QUIT:
POPDX;退出
POPDS
MOVAL,50H
MOVAH,25H
INT21H
MOVAX,4C00H;返回到DOS
INT21H
;中断服务程序,对每个通道均采集一个数据,存进DBUF
ADINTPROCNEAR;调用子程序
STARTA:
MOVCX,0006H;设置通道计数器初值
MOVDX,AD0809;DX指向ADC通道
TRANS2:
CALLNEXT;调用转换子程序
LOOPTRANS2;循环采集六路信号
IRET;自中断返回
ADINTENDP
DALLY1PROCNEAR;软件延时子程序,用于ADC转换时延时保证转换完成
PUSHCX
PUSHAX
MOVCX,4000H
D5:
MOVAX,0600H
D6:
DECAX
JNZD6
LOOPD5
POPAX
POPCX
RET
DALLY1ENDP
DALLY2PROC;延时子程序,用于8254产生方波时延时,为扬声器发生报警提供信号延时
PUSHCX
PUSHAX
E0:
MOVCX,10H
E1:
MOVAX,0FFFFH
E2:
DECAX
JNZE2
LOOPE1
DECDL
JNZE0
POPAX
POPCX
RET
DALLY2ENDP
ALARMPROC;报警子程序
PUSHDX
MOVDX,OFFSETSTR2;显示温度低于某一值
MOVAH,9
INT21H
POPDX
PUSHDX
PUSHAX
PUSHSI
PUSHDI
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;定时器0、方式3
OUTDX,AL
BEGIN:
MOVSI,OFFSETFREQ_LIST;装入频率表起始地址
MOVDI,OFFSETTIME_LIST;装入时间表起始地址
PLAY:
MOVDX,0FH;输入时钟为1.0416667MHz,1.0416667M=0FE502H
MOVAX,0E502H
DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,[DI];取出演奏相对时间,调用延时子程序
CALLDALLY2
ADDSI,2
INCDI
CMPWORDPTR[SI],0;判断是否到曲末?
JNEPLAY
MOVDX,MY8254_MODE;退出时设置8254为方式2,OUT0置0
MOVAL,10H
OUTDX,AL
POPDI
POPSI
POPAX
POPDX
RET
ALARMENDP
NEXTPROC;信号巡回采集子程序
NEXT1:
MOVSI,OFFSETDBUF;SI指向WENDU偏移地址
MOVBL,05H;为采集提供计数依据
NEXT2:
MOVAH,0000H
OUTDX,AL;启动一次转换
CALLDALLY1;延时保证转换完成
INAL,DX;读取结果
TRANS:
MOV[SI],AL将采集的5个数据保存
INCSI
DECBL
JNZNEXT2
PUSHCX;选中值
MOVCL,04H;选出五个数中的最大值
MOVSI,OFFSETDBUF;SI指向WENDU偏移地址
MOVBX,SI
C1:
MOVAL,[BX]
INCSI
CMPAL,[SI]
JAF1
MOVBX,SI
F1:
LOOPC1
MOVAL,00H;将最大值置零
MOV[BX],AL
MOVCX,04H;再一次选择五个数的最大值
MOVSI,OFFSETDBUF;SI指向WENDU偏移地址
MOVBX,SI
C2:
MOVAL,[BX]
INCSI
CMPAL,[SI]
JAF2
MOVBX,SI
F2:
LOOPC2
MOVAL,00H;将新的最大值置零
MOV[BX],AL
MOVCX,04H;第三次选择最大值
MOVSI,OFFSETDBUF;SI指向WENDU偏移地址
MOVBX,SI
C3:
MOVAL,[BX]
INCSI
CMPAL,[SI]
JAF3
MOVBX,SI
F3:
LOOPC3
MOVAL,[BX];第三次选出的最大值即为原数据的中值
POPCX
SUBAH,AH
MOVSI,AX;将中值保存到SI寄存器
PUSHDX;保存通道号
PUSHAX
MOVDL,07H;显示炉号数
SUBDL,CL
ADDDL,30H
MOVAH,02H
INT21H
MOVDX,OFFSETSTR1;显示字符串号炉温度
MOVAH,9
INT21H
POPAX
POPDX
MOVBL,04H;将采集的数据进行数值转换
MULBL
PUSHCX
PUSHDX
SUBDX,DX
MOVCX,1000;分离出千位数并显示
DIVCX
XCHGAX,DX
PUSHAX
ADDDL,30H
MOVAH,02H
INT21H
POPAX
MOVCL,100;分离出百位数并显示
DIVCL
PUSHAX
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPAX
XCHGAL,AH
SUBAH,AH
MOVCL,10;分离出十位数并显示
DIVCL
PUSHAX
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPAX
ADDAH,30H;显示个位数
MOVDL,AH
MOVAH,02H
INT21H
MOVDX,OFFSETSTR3;显示degree
MOVAH,9
INT21H
CMPSI,0FH;与60摄氏度比较
JAS;若在指定范围内则继续转换
CALLALARM;若不在指定范围则报警
S:
MOVDL,0AH;换行
MOVAH,02H
INT21H
MOVDL,0DH;将光标置行首
MOVAH,02H
INT21H
POPDX
POPCX
ADDDL,04H;DX指向下一个通道
RET
NEXTENDP
CODEENDS
ENDSTART
6.2C语言源程序
#include
#include
#include
#include
#include
#include
voidkey(void);//判断是否右键按下,有则退出
voiddelay1(inttime);//延时函数
voidalarm(void);//报警函数
voiddelay2(inttime);//延时函数
//****************根据查看配置信息修改下列符号值*******************
#defineIOY00xE400//8254端口地址
#defineIOY10xE440//ADC0809端口地址
//***