多路温度采集系统编程设计课程设计报告Word格式文档下载.docx

上传人:b****5 文档编号:16525243 上传时间:2022-11-24 格式:DOCX 页数:24 大小:98.99KB
下载 相关 举报
多路温度采集系统编程设计课程设计报告Word格式文档下载.docx_第1页
第1页 / 共24页
多路温度采集系统编程设计课程设计报告Word格式文档下载.docx_第2页
第2页 / 共24页
多路温度采集系统编程设计课程设计报告Word格式文档下载.docx_第3页
第3页 / 共24页
多路温度采集系统编程设计课程设计报告Word格式文档下载.docx_第4页
第4页 / 共24页
多路温度采集系统编程设计课程设计报告Word格式文档下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

多路温度采集系统编程设计课程设计报告Word格式文档下载.docx

《多路温度采集系统编程设计课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《多路温度采集系统编程设计课程设计报告Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。

多路温度采集系统编程设计课程设计报告Word格式文档下载.docx

 

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

在许多传统行业中,多路高温度采集系统是不可或缺的。

电厂,石化行业及制药厂等企业生产过程中,普遍存在着需要进行温度测量的场合。

因为温度是生产过程和科学实验中普遍且重要的物理参数。

在工业生产中,为了高效生产,必须对生产过程的主要参数,如温度,压力,速度等进行有效的检测并控制。

其中温度检测在生产过程中占有相当大的比例。

而我们所做的课题正是以8086cpu为核心设计一个温度巡回监测系统(A/D采用ADC0809).系统可实现温度信号的采集,在显示器上显示当前的温度和通道号。

模拟现场六路温度巡回检测,温度范围0-1020摄氏度。

每隔两秒检测一次,每一次检测六路信号,每路信号连续检测五次,并取这五个数据的中值经标度变换后送显示器显示,6路同时显示,每次显示持续两秒。

在采集完某一路信号时,将采集到的信号与给定值比较,如果超出给定范围则进行报警。

该系统主要用于温度检测,是一个状态反馈系统,并非动态控制系统。

他可以利用放大器实现多个点的温度巡回检测,并在屏幕上显示当前的温度值和通道号。

当温度信号改变时,显示的值也随之改变,并且实现当温度超出给定范围时进行报警的功能。

3.2程序设计流程图

Y

N

N

Y

第四章硬件设计

系统的主要功能是实现温度信号的采集,在显示器上显示当前的温度和通道号。

模拟现场六路温度的温度巡回检测,温度范围0-1020摄氏度。

每隔两秒检测一次,经标度变换后送显示器显示,六路同时显示,每次显示持续两秒。

实验步骤如下:

(1)确认从PC机引出的两根扁平电缆已经连接在试验平台上。

(2)编写程序然后编译连接。

(3)参考接线图连接试验线路。

(4)运行参考程序,观察显示器上的通道号和温度值。

(5)改变温度的值观察是否实现报警功能。

4.2硬件接线图

4.3所用到的芯片及其各自功能说明

4.3.1芯片列表

可编程定时器/计数器8254,ADC0809

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的外部管脚图

1haoluwenduú

║1020degree

2haoluwenduú

3haoluwenduú

║0720degree

4haoluwenduú

║0608degree

5haoluwenduú

║0248degree

6haoluwenduú

六路温度都在指定的温度范围内,不产生报警时的结果显示

║0000degreeThetemperatureisbelowthan60degree

程序设计为当温度低于60摄氏度时蜂鸣器报警,并且在屏幕上产生相应的提示

3号炉和4号炉温度低于60摄氏度报警

5.2C语言程序结果

1haoluwendu:

1020degree

2haoluwendu:

3haoluwendu:

688degree

4haoluwendu:

592degree

5haoluwendu:

248degree

6haoluwendu:

804degree

676degree

12degreeThetempetureisbelowthan60degree

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

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

POPBX

POPDX

POPAX

POPCX

MOVAH,1;

判断是否有按键按下

INT16H

JZWAIT1;

无按键则跳回继续等待,有则退出

QUIT:

POPDX;

退出

MOVAX,4C00H;

返回到DOS

中断服务程序,对每个通道均采集一个数据,存进DBUF

ADINTPROCNEAR;

调用子程序

STARTA:

MOVCX,0006H;

设置通道计数器初值

MOVDX,AD0809;

DX指向ADC通道

TRANS2:

CALLNEXT;

调用转换子程序

LOOPTRANS2;

循环采集六路信号

IRET;

自中断返回

ADINTENDP

DALLY1PROCNEAR;

软件延时子程序,用于ADC转换时延时保证转换完成

PUSHCX

MOVCX,4000H

D5:

MOVAX,0600H

D6:

JNZD6

LOOPD5

RET

DALLY1ENDP

DALLY2PROC;

延时子程序,用于8254产生方波时延时,为扬声器发生报警提供信号延时

E0:

MOVCX,10H

E1:

E2:

JNZE2

LOOPE1

DECDL

JNZE0

DALLY2ENDP

ALARMPROC;

报警子程序

MOVDX,OFFSETSTR2;

显示温度低于某一值

MOVAH,9

PUSHDX

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

MOVDL,[DI];

取出演奏相对时间,调用延时子程序

CALLDALLY2

ADDSI,2

INCDI

CMPWORDPTR[SI],0;

判断是否到曲末?

JNEPLAY

退出时设置8254为方式2,OUT0置0

MOVAL,10H

POPDI

POPSI

POPDX

ALARMENDP

NEXTPROC;

信号巡回采集子程序

NEXT1:

MOVSI,OFFSETDBUF;

SI指向WENDU偏移地址

MOVBL,05H;

为采集提供计数依据

NEXT2:

MOVAH,0000H

启动一次转换

CALLDALLY1;

延时保证转换完成

INAL,DX;

读取结果

TRANS:

MOV[SI],AL将采集的5个数据保存

INCSI

DECBL

JNZNEXT2

选中值

MOVCL,04H;

选出五个数中的最大值

MOVBX,SI

C1:

MOVAL,[BX]

CMPAL,[SI]

JAF1

F1:

LOOPC1

MOVAL,00H;

将最大值置零

MOV[BX],AL

MOVCX,04H;

再一次选择五个数的最大值

C2:

JAF2

F2:

LOOPC2

MOVAL,00H;

将新的最大值置零

MOV[BX],AL

第三次选择最大值

C3:

JAF3

F3:

LOOPC3

MOVAL,[BX];

第三次选出的最大值即为原数据的中值

POPCX

SUBAH,AH

MOVSI,AX;

将中值保存到SI寄存器

PUSHDX;

保存通道号

MOVDL,07H;

显示炉号数

SUBDL,CL

ADDDL,30H

MOVAH,02H

MOVDX,OFFSETSTR1;

显示字符串号炉温度

POPAX

POPDX

MOVBL,04H;

将采集的数据进行数值转换

MULBL

SUBDX,DX

MOVCX,1000;

分离出千位数并显示

DIVCX

XCHGAX,DX

MOVCL,100;

分离出百位数并显示

DIVCL

ADDAL,30H

MOVDL,AL

XCHGAL,AH

MOVCL,10;

分离出十位数并显示

ADDAH,30H;

显示个位数

MOVDL,AH

MOVDX,OFFSETSTR3;

显示degree

CMPSI,0FH;

与60摄氏度比较

JAS;

若在指定范围内则继续转换

CALLALARM;

若不在指定范围则报警

S:

MOVDL,0AH;

换行

MOVDL,0DH;

将光标置行首

ADDDL,04H;

DX指向下一个通道

NEXTENDP

CODEENDS

ENDSTART

6.2C语言源程序

#include<

stdio.h>

stdlib.h>

conio.h>

bios.h>

ctype.h>

process.h>

voidkey(void);

//判断是否右键按下,有则退出

voiddelay1(inttime);

//延时函数

voidalarm(void);

//报警函数

voiddelay2(inttime);

//****************根据查看配置信息修改下列符号值*******************

#defineIOY00xE400//8254端口地址

#defineIOY10xE440//ADC0809端口地址

//***

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1