基于单片机多路温度采集系统Word格式.docx

上传人:b****6 文档编号:16983738 上传时间:2022-11-27 格式:DOCX 页数:23 大小:214.81KB
下载 相关 举报
基于单片机多路温度采集系统Word格式.docx_第1页
第1页 / 共23页
基于单片机多路温度采集系统Word格式.docx_第2页
第2页 / 共23页
基于单片机多路温度采集系统Word格式.docx_第3页
第3页 / 共23页
基于单片机多路温度采集系统Word格式.docx_第4页
第4页 / 共23页
基于单片机多路温度采集系统Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于单片机多路温度采集系统Word格式.docx

《基于单片机多路温度采集系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机多路温度采集系统Word格式.docx(23页珍藏版)》请在冰豆网上搜索。

基于单片机多路温度采集系统Word格式.docx

系统结构原理图

图2-2系统原理图

第3节系统的硬件设计

一个温度采集系统,包括被采集信息的采集、转换、显示等环节,在本多路温度采集系统中,包括A/D转换电路的设计,CPU的选型以及包括显示电路,存储器、报警电路、电源电路等设计。

3.1CPU的选用

目前,生产单片机的厂商有很多,尤其是近年来微电子技术、计算机技术的飞速发展,比较著名的有Intel、Philips、Microchip、Motorola、Zilog、Atmel等半导体企业。

在上述著名的半导体企业产品中,尤其在工业测控场合,运用较多的为Intel公司的MCS-51系列,Microchip公司的PIC系列,如果作单路温度测量,恐怕要选择该系列的CPU,但由于本系统涉及的是多路,各路报警的输出信号需要单独输出,而且考虑信号调理电路的切换等还需要不少的控制线,因此该系列的少引脚特点就不适合本设计的需要,因此,本设计还是选用了ATMEL最新的8位单片机AT89S52作为本系统的CPU。

下面简单地介绍一下89S52。

功能特性描述:

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度易失性存储器技术制造,与工业 

80S52产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至 

0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

图3-1 

89C52的引脚 

3.2ADC0809

ADC0809是把采集的模拟量转换成数字量并传送到89C52中。

它是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件并且还是逐次逼近式A/D转换器,可以和单片机直接接口。

3.2.1 

ADC0809的内部逻辑结构

图3-2 

由图3-2可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

3.2.2引脚结构

图3-4ADC0809的引脚

第4节软件编辑思路及流程

4.1软件编辑思路

软件编辑思路:

数字显示----算法----一路采集----一路采集转换及显示---八路采集转换及显示----键盘小子程序----八路循环采集且键盘控制------八路循环采集且键盘控制和报警。

4.2具体软件编程

ORG0000H

AJMPMAIN;

BUF 

EQU 

40H;

显示缓冲区

MOTATA 

EQU 

50H;

AD0809数据存放于此

WH 

48H;

温度上限数据存放区

WL 

58H;

温度下限数据存放区

BUFF1S 

EQU38H;

BUFF1MS 

39H;

BUFF5S 

3AH;

INNAL 

3CH;

ALARMBUF 

EQU33H

BUFFH 

EQU31H;

八路LED报警信号红灯

BUFFL 

32H;

八路LED报警信号绿灯

BACK 

34H;

利用与BUF地址的重复修改路数

CHANNEL 

35H

TEMPBUF 

36H

READ_AD 

BIT 

30H;

是否要读写AD0809的标志位

DISPIN 

31H;

SETWARNBIT 

32H

SOLIDISP 

33H

ENTER 

P1.2

SETH 

SETL 

SETIN 

P1.3

ABYTEIN 

p1.1

ORG0003H

AJMPINT_0;

ORG000BH

LJMPINT_T0

ORG0100H

MAIN:

MOV 

SP, 

#70H 

;

设置堆栈位置

SETB 

初始化标志位

EA 

 

;

开总中断

CLR 

SETWARN 

清除温度设置标志位

当其为0时表示要进行通道数采集

LCALL 

INITWARN 

初始化温度上下限

INIT_2 

初始化2#工作寄存器区

主循环,启动ADC0809,从第一个通道开始读取

LOOP:

JNB 

READ_AD,DIS 

若不读AD0809,则调显示,次标志位也表示1s延时结束

延时已完毕,则计算要显示的温度路数及温度值送缓冲区

WARN 

报警

清楚标志位

READ 

读取一次AD0809

DLY1MS 

此处加1ms的延时,否则数码管会因中断的存在而产生闪动

ADJUST 

调整显示

在此完成键盘检测及显示任务

DIS:

DISPLAY;

KEYCHK 

调键盘检测子程序

CJNE 

A,#0FFH,AKEY 

若有键按下,则跳转

LJMP 

LOOP 

若没有则循环

AKEY:

KEYFUNC;

A,#0FFH,CALLRPD 

验证按下的键是否为数字键,若是则处理输入

不为数字键则返回循环

CALLRPD:

KEYRPD;

SJMP 

LOOP;

*********初始化2#工作寄存器区************

INIT_2:

PUSH 

PSW 

初始化2号工作寄存器区

RS1;

RS0 

选择2号工作寄存器区

R2,#00H 

存放要显示的路数

初始化路显示标志位;

R0,#MOTATA 

R0充当指向MOTATA的指针

POP 

PSW;

RET;

*******调整指针*********

PADJUST:

ONADJUST:

DJNZ 

R2,INADJUST;

返回

INADJUST:

INC 

R0;

ONADJUST;

*************计算并调整显示缓存区的数据*******

ADJUST:

PSW;

保护

R2,#08H,NE08;

GE08:

R2,#00H;

R0,#MOTATA;

SJMPLESS08;

NE08:

JNCGE08;

LESS08:

JB 

SETWARN, 

DISPWARN 

若在设定温度,则也不调整显示

JB 

SOLIDISP, 

ADJEND 

若为固定显示,则跳过调整

DISPIN,DLY_5S 

若有键盘值输入,则延时5秒来暂时固定显示

R0 

调整R0,使其指向下一个要显示的温度值地址

R2 

调整R2

mov 

channel,r2;

ADJEND;

DLY_5S:

BUFF5S,ADJEND;

DISPIN;

ADJEND

DISPWARN:

SETH,DISHIGH 

若在调整上限值则跳转到上限温度显示

SETL,DISLOW 

若在调整下限值则跳转到下限温度显示

若不在调整则显示输入路数的当前检测温度值

DISLOW:

R0,#WL 

将指针调整到温度上限存放区

SJMP 

ADAPT 

跳转到指针调整处

DISHIGH:

MOV 

R0,#WH 

将指针调整到温度下限存放区

ADAPT:

R2,CHANNEL 

调整R2的值为通道数

LCALL 

PADJUST 

指针指向R2

ADJEND:

LOADTEMP 

将当前指针指向数据放到缓冲区

POP 

****************将当前指针指向数据放到缓冲区********

LOADTEMP:

COMPUTE 

调用COMPUTE得到要显示的当前温度值

R1,#BUF;

A,channel;

@R1,A 

将路数送入显示缓冲区

R1 

调整到要显示温度值的缓冲区

SETH,DISPH 

若设定温度上限,则显示H

SETL,DISPL 

若设定温度下限,则显示L

Mov 

a,#10h 

消隐

DISP2

DISPH:

A,#11H

DISPL:

A,#12H

DISP2:

@r1,a;

R1;

A,R5;

ANL 

A,#0FH;

最低位

A,#0F0H;

SWAPA;

次低位,应当在此处添加小数点

A,R4;

MOV 

@R1,A 

次高位

SWAP 

A;

最高位

RET;

*************读取一次0809的内容***********

READ:

R6,#08H 

用中断的方式读取一次AD0809

R0,#MOTATA 

0号工作寄存器区

DPTR,#0FFFEH 

A0作为地址

A,#00H 

表示先检测第一个通道

INNAL,A 

将检测的路数保存

MOVX 

@DPTR,A 

开启ADC0809

SETB 

EX0 

开外部中断0

RET 

若已读取完毕,则返回

**********************显示子程序************

要显示的数据入口为BUF(6位);

1号工作寄存器区

DISPLAY:

压栈保护

RS0;

RS1 

切换工作寄存器区到1

R0,#BUF

R7,#06H

R1,#01H

NEXTDIS:

A,@R0

DPTR,#TABLE

MOVC 

A,@A+DPTR;

取段码

R7,#03H,NODIP;

显示小数点

ANL 

A,#07FH

NODIP:

DPTR,#0FFDCH

MOVX 

送段码

DPTR,#0FFDDH

A,R1

送位码

RL 

A

R1,A

DLY1MS

INC 

R7,NEXTDIS;

RET

**************************延时1ms****************************

DLY1MS:

BUFF1MS,#0F9H

DJNZ 

BUFF1MS,$

RET

*************************按键检查子程序********************

KEYCHK:

查看是否有键按下

@DPTR,A

DPTR,#0FFDEH

A,@DPTR

CPL 

A,#0FH

JNZ 

TEST 

若有键按下则检测,无则返回。

A,#0FFH

TEST:

KEYTEST

BACK,A

DISPLAY

CJNE 

A,BACK,NOKEYD

WAIT:

等待键抬起

WAIT 

若键未抬起,则继续等待

A,BACK;

将检测到的键值送给A

CHKEND

NOKEYD:

MOVA,#0FFH

CHKEND:

**********************按键检测子程序********************

KEYTEST:

R0,#0FEH

R1,#00H

R2,#08H

NEXTL:

A,R0

CPL 

KEYDWN 

看按下的键是否在当前列

R2,GOSCAN 

看是否扫描完毕,若没有则调整继续扫描

TSTEND 

若扫描完毕,则返回。

GOSCAN:

R0,A

R1

NEXTL

KEYDWN:

R3,#00H

LL0:

RRC 

JC 

LL1

R3

LL0

LL1:

A,R3

B,A

A,#8

MUL 

AB

ADD 

A,R1 

A中返回的为按下的键的代码

R

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

当前位置:首页 > 人文社科 > 视频讲堂

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

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