基于单片机多路温度采集系统Word格式.docx
- 文档编号:16983738
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:23
- 大小:214.81KB
基于单片机多路温度采集系统Word格式.docx
《基于单片机多路温度采集系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机多路温度采集系统Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
系统结构原理图
图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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 采集 系统