综合训练二 温度检测系统设计文档格式.docx
《综合训练二 温度检测系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《综合训练二 温度检测系统设计文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
成绩:
指导教师
日 期
目录
1系统总体设计
1.1系统总体设计思路.......................................4
1.2设计目的...............................................4
1.3设计步骤...............................................4
1.4设计方案...............................................4
2硬件设计
2.1温度检测系统的硬件组成................................4
2.2单片机功能和特点......................................4
2.3A/D模数转换...........................................7
2.4DS18B20温度传感器.....................................8
3软件设计
3.1程序流程图...........................................10
3.2汇编语言程序.........................................11
4结论....................................................15
5参考文献.................................................15
1.1系统总体设计思路:
将DS18B20的温度寄存器与单片机相接,然后单片机没间隔多长时间就读取一下DS18B20的温度寄存器,然后判定一下温度大概的范围,找到满足的范围就跳转相应的程序段,点亮相应的小灯。
1.2设计目的:
利用单片机的8个LED小灯大概显示温度范围
1.31.明晓硬件的功能和原理。
2.设计外部电路。
3.画出程序流程图。
4.设计程序。
5.将程序输入开发板或模拟器进行验证修改。
1.4设计方案:
(1)调用延时子程序,设定读取间隔时间
(2)读取DS18B20的温度寄存器
(3)判断温度范围
(4)跳转到相应的程序段,点亮LED小灯
(5)进行循环显示
2.1温度检测系统的硬件组成:
主要是由单片机、模数转换器、温度传感器三部分组成
2.2各部分的功能:
(1)单片机
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh
Programmable
and
Erasable
Read
Only
Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
它主要负责各个模块的初始化工作;
设置定时器、寄存器的初值;
读取并处理来自温度传感器的信号;
处理按键响应;
控制液晶实时显示等。
AT89C51管脚图
VCC
:
电源
GND:
地
P0
口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,
P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在
flash编程时,P0口也用来接收指令字节;
在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1
口是一个具有内部上拉电阻的
8
位双向
I/O
口,p1
输出缓冲器能驱动
4
个TTL
逻辑电平。
对
端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)
。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)
,具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节
引脚号
第二功能
P1.0
T2(定时器/计数器T2的外部计数输入)
,时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX
@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX
@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号
RST:
复位输入。
ALE/PROG:
地址锁存控制信号。
PSEN:
外部程序存储器选通信号。
EA/VPP:
访问外部程序存储器控制信号。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
(2)模数转换模块:
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
ADC0808是ADC0809的简化版本,功能基本相同。
一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
引脚功能(外部特性)
ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。
各引脚功能如下:
1~5和26~28(IN0~IN7):
8路模拟量输入端。
8、14、15和17~21:
8位数字量输出端。
22(ALE):
地址锁存允许信号,输入,高电平有效。
6(START):
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
7(EOC):
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9(OE):
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
12(VREF(+))和16(VREF(-)):
参考电压输入端
11(Vcc):
主电源输入端。
13(GND):
地。
23~25(ADDA、ADDB、ADDC):
3位地址输入线,用于选通8路模拟输入中的一路
ADC808管脚图
(3)数据采集模块:
传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
其管脚图如图
1.
DS18B20的特性
[9]
(1)适应电压范围更宽,电压范围:
3.0~5.5V,寄生电源方式下可由数据线供。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃。
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.DS18B20内部结构及DS18B20的管脚排列
64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。
不同的器件地址序列号不同。
DS18B20内部结构主要由四部分组成:
64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。
DS18B20的引脚定义:
(1)DQ为数字信号输入/输出端
(2)GND为电源地
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)
3.1主程序流程图:
子程序流程图:
3.2主程序:
TEMPER_LDATA36H;
温度寄存器的低位
TEMPER_HDATA35H;
温度寄存器的高位
TEMPER_NUMDATA60H;
保存温度值
FLAGBIT00H;
器件是否存在的标志位,器件存在由软件置1,否则清0
DQBITP1.0
ORG0000H
AJMPSTART;
/*主程序*/*
ORG0030H
START:
MOVSP,#70H
CALLGET_TEMPER;
读取温度值
CALLTEMPER_COV;
读取转换后的温度值
MOVR0,A
CALLDISP
CALLDELAY
******************/*取得温度子程序*/****************************
GET_TEMPER:
SETBDQ
CALLCHECK;
MOVA,#0CCH;
跳过ROM匹配(当总线上只有一个器件时可跳过读ROM命令)
CALLDSWRITE;
写入命令
MOVA,#44H;
发出温度转换命令
CALLDSWRITE
NOP
CALLCHECK
跳过ROM匹配
CALLDSWRITE
MOVA,#0BEH;
发出读温度命令
CALLDSREAD;
读取温度的低位
MOVR0,#TEMPER_L
MOV@R0,A;
存入TEMPER_L
DECR0;
存入TEMPER_H
MOV@R0,A
RET
*****************************************************************
/*读DS18B20的程序,从DS18B20中读出一个字节的数据*/*
;
****************************************************************
DSREAD:
MOVR2,#8
READ1:
CLRC
SETBDQ
CLRDQ
MOVR3,#01
DJNZR3,$
MOVC,DQ
MOVR3,#23
RRCA
DJNZR2,READ1
/*写DS18B20序子程序*/*
****************************************************************
DSWRITE:
CLRC
WRITE1:
CLRDQ
MOVR3,#6;
延时12US
MOVDQ,C
MOVR3,#23;
46US
DJNZR2,WRITE1
/*温度转换程序*/*
TEMPER_COV:
MOVA,#0F0H
ANLA,TEMPER_L;
舍去温度低位中小数点后的四位温度数值
SWAPA
MOVTEMPER_NUM,A
MOVA,TEMPER_L
JNBACC.3,TEMPER_COV1;
四舍五入去温度值,
INCTEMPER_NUM;
D3为1则加1,为0则舍去
TEMPER_COV1:
MOVA,TEMPER_H;
高位
ANLA,#07H;
温度寄存器的高字节只有后3位有效
ORLA,TEMPER_NUM;
拼装
MOVTEMPER_NUM,A;
保存变换后的温度数据
CALLBIN_BCD
/*检查器件是否存在子程序*/*
CHECK:
CALLDSINIT;
初始化
JBFLAG,CHECK1;
检查标志位判断器件是否存在
AJMPCHECK;
若DS18B20不存在则继续检测
CHECK1:
CALLDELAY1
RET
/*BCD码转换子程序*/*
*****************************************************************
BIN_BCD:
MOVDPTR,#TEMP_TAB
MOVA,TEMPER_NUM
MOVCA,@A+DPTR
/*初始化子程序程序*/;
初始化时序是由总线发出一个复位信号,然后由器件发*
出一个应答信号,表示该器件存在,并准备好开始工作
DSINIT:
SETBDQ
CLRDQ;
总线发一个复位信号
MOVR0,#80H
DJNZR0,$;
延时
SETBDQ;
拉高总线准备检测
MOVR0,#25H;
延时
DJNZR0,$
JNBDQ,INIT2;
检测是否有应答信号,有应答信号跳转
AJMPINIT3;
INIT2:
SETBFLAG;
置标志位,表示DS1820存在
AJMPINIT4
INIT3:
CLRFLAG;
清标志位,表示DS1820不存在
AJMPINIT5
INIT4:
MOVR0,#6BH
INIT5:
SETBDQ;
拉高总线
/*配置程序*/*
RE_CONFIG:
JBFLAG,RE_CONFIG1;
若DS18B20存在,转RE_CONFIG1
RE_CONFIG1:
MOVA,#0CCH;
发SKIPROM命令
MOVA,#4EH;
发写暂存存储器命令
MOVA,#00H;
TH(报警上限)中写入00H
TL(报警下限)中写入00H
MOVA,#7FH;
选择12位温度分辨率
/*显示子程序*/*
DISP:
MOVA,R0;
转换结果低位
ANLA,#0FH
ACALLDSEND;
显示
MOVA,R0
ANLA,#0FH;
转换结果高位
DSEND:
MOVDPTR,#SGTB1
MOVCA,@A+DPTR;
取字符
MOVSBUF,A
JNBTI,$
CLRTI
/*延时程序*/*
DELAY:
MOVR7,#00H
DELAY0:
MOVR6,#00H
DJNZR6,$
DJNZR7,DELAY0
DELAY1:
MOVR7,#20H
DJNZR7,$
4结论
经过必要的信息检索及借鉴,加上对流程图的分析。
联系课上所学的定时/计数和循环内容。
勉强达到设计要求。
本次综合训练主要加深了对单片机汇编语言编程中的延时、循环、判断程序模块的学习,其次也回顾了对单片机引脚的作用。
对于设计心得来说,不要把它想的太过复杂,学会运用流程图,然后用程序模块挨个解决。
由于条件的问题,程序没有进行调试,但对结果有一定的信心。
强调的设计心得就是一定先要画出流程图来,知道哪块用什么!
5参考文献
[1]胡乾彬,单片微型计算机原理与应用第三版[M],武汉:
华中科技大学出版社,2015。
[2]刘乐善,等.微型计算机接口技术及应用[M].武汉:
华中理工大学出版社,1993.
[3]潘新民,等.单片微型计算机实用系统设计[M].北京:
人民邮电出版社,1992.
[4]张毅刚,等.MCS-51单片机应用设计[M].哈尔滨:
哈尔滨工业大学出版社,1990.
[5]李朝青.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,1994.