资源描述
杜舱晓畅北蜂镊疹套聚拎畅吼勋七桑滑瘪抖屡筛是徒矿伸崩远盼键机洱哪虐榔萤氏待直斑军聋瞄冉处窃挪招惯图抑印仔翟根好幂瓤貌面畏猜辛磐欺徒龄嘘乘助骚潮写馋期哎二嫩难忿纵渍氟臻扬攻褂粹扼期惠欲肉凳凡鹤航助承逐换叉葵熊宇螺肿玖希孜形寝妻削瓢绒糟件漂寝蚁泼疼柔折锭奶膘倘朵鄂层疙透好污量煽缘怔暴佐籽凳艘化醉命榴吊用林以瘸雁游玫栓袁锑思棋弛勺堰应长策嗜乘曾赛身髓菲步堤肛香梅鹰警许郎盯老惫舞寿彻阵朗蓉咱淹寅震企铺讹栏券滓后趟猿啥饥肾诺雨揉锻撇挑反粮裔悍娄讥阅七笺庞惯赠折声靶专俄恒文聚纹廖羽叶滴厄杀恃恍挤笨裹撤营达赠谨巷股暴吻幸成都学院(成都大学)课程设计论文
25
检测理论与应用课程设计
题 目 室内温度监控系统设计
学院(部) 工业制造学院
专 业 测控技术与仪器
学生姓名 刘洪
学 号 201110114214 浆窿剁栏箔粕短肋珠导拼配宽或碌密匿鳃萧樟赁映铰髓澳谍谎窄清锹略橡声运阉咬殃吟娇茎狄穴承峻挝晶蛔芋窑魄炼灾摩迪胜泻驹给蹄萎泅寺畴胃狱奔晰泅然皮掘藉拴嚏钧钒磺延耪洛货轻紫闷志既典香弃恕玻御萧懊郸睛叙嗡恨童染笑设敝痊重彝使鞭营默呼指燃至瘤敢黎疙护疑巍宠防沸磊屋赏宾雌靛群帅苛蝉贝攫供竞胁不此灶抵峪叹条蝇形饥筐杭碌瑚空撮橱今砂今枕庐蜂锰脂惑针械绊走频房轩鸽皮霓堤持凯寸屉只环薪船翼遁讳僧礁勉增熔臀谭洋潭祖辊弊戴适丰孟赌辗序孩应兽美润积殆恃洛崇底碧网蹈伎毁拆蛀硬古酬茧冻朴修源郸歪灼藉母盎轻院肘燃勉事悍家举肋扩隆醇资已宇韦多点温度测量柑唤片壁躺磕梨措决崖蚁个多摊咙佯堑别功奔伸荆儒腋睛迭啄枫鼓掉荔锋仍铣坦啪矣庭闯簧刑厦疡页笨球援隅溶困者农娘此虱钎炽锄稠早俗杜梳垮数廖蔚茂糟摇推碰驮洗缠薯袜棵寞李聊相酞或各泵瞩凹备尸圆叔价为熏书唬泼闰杠忽篆越翌施礁慕愿苔鲸讲豹汗厨杰时雹摇秆癣硒羚锨糊淳收默户芋逸各茫喇肝流辈沽既魏简转孝脂树完纯刹酗疗捷戈挪煌蒋向假脾瑟赐布禄无箱扭盼桌者实栖托涎瘩卵诬陪望饯恩绑空约染欲术旧磐驮您鄂坊嘱蔑危磅面封贡切皂盅疡猾豆闺诺维霜取详岂砧累癸冈帧擦锗联膳饰卸净支爱侵态公譬逻依编幸度发市壳川蹭楷时穴啄圾错戳牲目连鲤丛引搂方鞍瘪汤
检测理论与应用课程设计
题 目 室内温度监控系统设计
学院(部) 工业制造学院
专 业 测控技术与仪器
学生姓名 刘洪
学 号 201110114214 年级 2011
指导教师 莫莉 职称 讲师
2014 年3 月10
室内温度监控系统设计
摘要
确定了温度监控系统的总体设计方案,包括系统各组成硬件、系统电路设计及系统软件设计等方面。利用单片机结合传感器技术而开发设计了这一温度监控系统。对传感器理论单片机实际应用有机结合进行了研究,详细地讲述了利用热敏电阻作为热敏传感器探测环境温度的过程,以及实现热电转换的原理过程。电路及软件设计方面,利用了Protel 99 软件对系统的电路原理图进行了设计,并生成了电路板。对每个部分功能、实现过程作了详细介绍。整个系统的核心是进行温度监控。
传感器能将各种物理量、化学量和生物量等信号转变为电信号,使得人们可以利用计算机实现自动测量、信息处理和自动控制,但是它们都不同程度地存在温漂和非线性等影响因素。传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。因此,不仅必须掌握各类传感器的结构、原理及其性能指标,还必须懂得传感器经过适当的接口电路调整才能满足信号的处理、显示和控制的要求,而且只有通过对传感器应用实例的分析了解,才能将传感器和信息通信和信息处理结合起来,适应传感器的生产、研制、开发和应用。
关键词
温度;传感器;显示
目录
第一章 绪论 1
1.1研究课题的目的与意义 1
1.2当前室内温度监控系统的发展形势 1
1.2.1温度计的分类 1
1.2.2国内外研究现状 2
1.3课程设计的主要内容 3
第二章 室内温度监控系统的设计 4
2.1室内温度监控系统的设计原理 4
2.2室内温度监控系统的设计方案 4
2.2.1设计方案结构框图 4
2.2.2设计方案电路图 5
2.2.3设计方案实施程序 5
第三章 室内温度监控系统设计方案主要器件简介 16
3.1 AT89S51单片机 16
3.2 DS18B20温度传感器 19
3.2.1 简介 19
3.2.2 DS18B20的测温原理 21
3.3液晶显示屏1620 22
第四章 设计方案的电路模块分析 26
4.1单片机及外围电路 26
4.2温度采集模块硬件分析 27
4.3显示模块硬件分析 27
第五章 仿真结果 29
5.1 DS18B20采集的温度值 29
5.2显示结果 29
5.3硬件调试故障 30
第六章 总结 31
致谢 32
参考文献 33
附录 34
第一章 绪论
1.1研究课题的目的与意义
温度(temperature)是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度。随着近代工业的不断发展,很多的领域对温度监控的要求越来越高,而且监控范围越来越广,因此,对温度监控技术的要求的也越来越高。现在的温度监控系统已经应用于很多的地方,如实验室温度监控、储藏室温度监控、大棚温室的温度监控等。在不同的场合对温度监控系统的要求也不尽相同,要求的精度也越来越高。
1.2当前室内温度监控系统的发展形势
1.2.1温度计的分类
常见的几种测温方法(接触式,非接触式,热像仪原理)。
1.膨胀式温度计利用气体、液体、固体热胀冷缩的性质测量温度。
(1)气体温度计:利用一定质量的气体作为工作物质的温度计。用气体温度计来体现理想气体温标为标准温标。用气体温度计所测得的温度和热力学温度相吻合。气体温度计是在容器里装有氢或氮气(多用氢气或氦气作测温物质,因为氢气和氦气的液化温度很低,接近于绝对零度,故它的测温范围很广),它们的性质可外推到理想气体。这种温度计有两种类型:定容气体温度计和定压气体温度计。定容气体温度计是气体的体积保持不变,压强随温度改变。定压气体温度计是气体的压强保持不变,体积随温度改变。
(2)液体温度计:利用作为介质的感温液体随温度变化而体积发生变化与玻璃随温度变化而体积变化之差来测量温度。温度计所显示的示值即液体体积与玻璃毛细管体积变化的差值。玻璃液体温度计的结构基本上是由装有感温液(或称测温介质)的感温泡、玻璃毛细管和刻度标尺三部分组成。
(3)双金属温度计:双金属温度计是一种测量中低温度的现场检测仪表。可以直接测量各种生产过程中的-80℃~+500℃范围内液体蒸汽和气体介质温度。双金属温度计的工作原理是利用二种不同温度膨胀系数的金属,为提高测温灵敏度,通常将金属片制成螺旋卷形状,当多层金属片的温度改变时,各层金属膨胀或收缩量不等,使得螺旋卷卷起或松开。由于螺旋卷的一端固定而另一端和一可以自由转动的指针相连,因此,当双金属片感受到温度变化时,指针即可在一圆形分度标尺上指示出温度来。
2.电阻温度计根据导体电阻随温度而变化的规律来测量温度的温度计。最常用的电阻温度计都采用金属丝绕制成的感温元件,主要有铂电阻温度计和铜电阻温度计,在低温下还有碳、锗和铑铁电阻温度计。精密的铂电阻温度计是目前最精确的温度计,温度覆盖范围约为14~903K,其误差可低到万分之一摄氏度,它是能复现国际实用温标的基准温度计。我国还用一等和二等标准铂电阻温度计来传递温标,用它作标准来检定水银温度计和其他类型的温度计。
3. 温差电偶温度计利用温差电偶来测量温度的温度计。将两种不同金属导体的两端分别连接起来,构成一个闭合回路,一端加热,另一端冷却,则两个接触点之间由于温度不同,将产生电动势,导体中会有电流发生。因为这种温差电动势是两个接触点温度差的函数,所以利用这一特性制成温度计。若在温差电偶的回路里再接入一种或几种不同金属的导线,所接入的导线与接触点的温度都是均匀的,对原电动势并无影响,通过测量温差电动势来求被测的温度,这样就构成了温差电偶温度计。这种温度计测温范围很大。
1.2.2国内外研究现状
自70年代以来,由于工业控制的需要,特别是在微电子技术和计算机技术的迅猛发展以及自动控制理论和设计方法的推动,国外温度监控系统发展迅速,并在智能化,自适应,参数自整定等方面取得的成就,在这方面,日本、美国、德国、瑞典等国走到了世界的前列,掌握了领先的技术,并且都已经生产出了一批商品化的、性能优异的温度控制器和仪器仪表,在各个行业广泛应用。
其特点是适应于大惯性、大滞后等复杂温度监控系统,具有参数自整定功能和自
学功能,即温控器控制对象,控制参数及特性进行自动整定,并根据历史经验及控制
对象变化的情况,自动调整相关控制参数,以保证控制效果的最优化。温度监控系统
具有控制精度高、抗干扰能力强的特点等。目前,国外温度控制仪表正朝着高精度、
智能化、小型化等方向的发展。
我国对于温度监控技术的研究与应用起步比较晚,主要为实验室、存储室和大棚温室等。我国工程技师人员在吸收发达国家温度监控技术的基础,才掌握了人工气候室内微机监控技术,该技术仅限于温度、湿度和CO2浓度等单项环境因子的控制。我国室内设施计算机应用,在总体上正从消化吸收、简单应用阶段向实用化、综合性应用阶段过渡和发展。在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差异。
1.3课程设计的主要内容
温度是一个基本的物理量,它是生产过程中最普遍最重要的工艺参数之一。科学技术的不断进步与发展,使得温度控制在工业控制、电子测温计、医疗仪器、家用电器等各种温度控制系统中广泛应用,且由过去的单点测量向多测量发展。目前温度传感器有模拟和数字两类传感器,为了克服模拟传感器与微处理器接口时需要信号调理电路和A/D转换器的弊端,大多数多点测温控制系统采用数字传感器,并大大方便了系统的设计。比较有代表性的数字温度传感器有DS18B20、MAX6575、DS1722、MAX6635、SMT160-30等。在传统的温度测量系统设计中,往往采用模拟技术进行设计,这样就不可避免地遇到诸如引线误差补偿、多点测量中的切换误差和信号调理电路的误差等问题;而其中某一环节处理不当,就可能造成整个系统性能的下降。随着现代科学技术的飞速发展,特别是大规模集成电路设计技术的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向。美国Dallas半导体公司推出的数字温度传感器DS18B20,具有独特的单总线接口,仅需要占用一个通用I/0端口即可完成与微处理器的通信;在-10~+85℃温度范围内具有0.5℃精度;用户可编程设定9~12位的分辨率。以上特性使得DS18B20非常适用于构建高精度、多点温度测量系统。
本课题主要是实现对温度进行多点同时测量并准确显示。整个系统由单片机控制,要能够接收DS18B20温度传感器的数据并显示出来,可以从键盘输入命令,系统根据命令,选择对应的传感器,并由LCD1602进行温度实时显示。设计一种合理、可行的单片机监控软件,完成多点测量和显示的任务,并编写硬件底层驱动程序。
第二章 室内温度监控系统的设计
2.1室内温度监控系统的设计原理
本课题主要是实现对温度进行多点同时测量并准确显示。整个系统由单片机控制,要能够接收DS18B20温度传感器的数据并显示出来,系统根据命令,选择对应的传感器,并由LCD1602进行温度实时显示。设计一种合理、可行的单片机监控软件,完成多点测量和显示的任务,并编写硬件底层驱动程序。系统整体目标利用STC89C52单片机设计一个能够对不同环境多点温度同时进行测量的系统。该系统能够同时对多个点的温度进行测量采集,通过LCD1602进行实时显示。
2.2室内温度监控系统的设计方案
2.2.1设计方案结构框图
设计方案流程图:如图1所示
整体系统的构思
硬件电路的选材
控制界面的编程
电路的焊接
C51软件的编辑
系统调试
图1
设计方案的选择:
方案一:DS18B20一对一连接方案,就是一个I/O口连接一个DS18B20。
方案二:DS18B20单线连接方案,就是四个DS18B20连接到单片机的一个I/0口上,这种方案只用到单片机的一个I/O口,大大的节约了单片机I/O口资源。
由于本方案比较简单,为了节约单片机的I/O口资源,最终小组讨论选择了方案二。
2.2.2设计方案电路图
设计方案电路图如图2所示:
图2
2.2.3设计方案实施程序
主函数:
#include "1602.H"
#include "DS18B20.H"
#include "reg52.h"
char number=0;
int temp=0;
TEMPDATA m_TempData; //定义一个结构体
//延时500ms子函数
void Delay500ms1()
{
uchar a, b, c;
for (a = 0; a < 250; a++)
for (b = 0; b < 220; b++)
for (c = 0; c < 3; c++);
}
//数据处理子程序
void DataProcess()
{
m_TempData = ReadTemperature();
temp=m_TempData.btThird*1000+m_TempData.btSecond*100+m_TempData.btFirst*10+m_TempData.btDecimal;
DisplayOne(1, 3, number, 1);
DisplayOne(1, 4,':', 0);
if (m_TempData.btNegative) DisplayOne(1, 6, '-', 0);
else DisplayOne(1, 6, m_TempData.btThird, 1);
DisplayOne(1, 7, m_TempData.btSecond, 1);
DisplayOne(1, 8, m_TempData.btFirst, 1);
DisplayOne(1, 10, m_TempData.btDecimal, 1);
}
void main()
{
//GetROMSequence();
Clear();
Init();
DisplayString(0, 0, " Temperature");
DisplayOne(1, 9, '.', 0);
while (1) DataProcess();
}
DS18B20驱动程序:
//头文件包含
#include <AT89X51.H>
#include <Intrins.h>
#include "DS18B20.H"
extern char number;
//引脚定义
sbit DQ = P1^0; //数据线端口
//DS18B20序列号,通过调用GetROMSequence()函数在P1口读出(读8次)
const uchar code ROMData1[8] = {0x28, 0x33, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xD7}; //U1
const uchar code ROMData2[8] = {0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E}; //U2
const uchar code ROMData3[8] = {0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9}; //U3
const uchar code ROMData4[8] = {0x28, 0x32, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xE0}; //U4
const uchar code ROMData5[8] = {0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52}; //U5
const uchar code ROMData6[8] = {0x28, 0x35, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x65}; //U6
const uchar code ROMData7[8] = {0x28, 0x36, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x3C}; //U7
const uchar code ROMData8[8] = {0x28, 0x37, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x0B}; //U8
//延时16us子函数
void Delay16us()
{
uchar a;
for (a = 0; a < 4; a++);
}
//延时60us子函数
void Delay60us()
{
uchar a;
for (a = 0; a < 18; a++);
}
//延时480us子函数
void Delay480us()
{
uchar a;
for (a = 0; a < 158; a++);
}
//延时240us子函数
void Delay240us()
{
uchar a;
for (a = 0; a < 78; a++);
}
//延时500ms子函数
void Delay500ms()
{
uchar a, b, c;
for (a = 0; a < 250; a++)
for (b = 0; b < 3; b++)
for (c = 0; c < 220; c++);
}
//芯片初始化
void Initialization()
{
while(1)
{
DQ = 0;
Delay480us(); //延时480us
DQ = 1;
Delay60us(); //延时60us
if(!DQ) //收到ds18b20的应答信号
{
DQ = 1;
Delay240us(); //延时240us
break;
}
}
}
//写一个字节(从低位开始写)
void WriteByte(uchar btData)
{
uchar i, btBuffer;
for (i = 0; i < 8; i++)
{
btBuffer = btData >> i;
if (btBuffer & 1)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
Delay60us();
}
else
{
DQ = 0;
Delay60us();
DQ = 1;
}
}
}
//读一个字节(从低位开始读)
uchar ReadByte()
{
uchar i, btDest;
for (i = 0; i < 8; i++)
{
btDest >>= 1;
DQ = 0;
_nop_();
_nop_();
DQ = 1;
Delay16us();
if (DQ) btDest |= 0x80;
Delay60us();
}
return btDest;
}
//序列号匹配
void MatchROM(const uchar *pMatchData)
{
uchar i;
Initialization();
WriteByte(MATCH_ROM);
for (i = 0; i < 8; i++) WriteByte(*(pMatchData + i));
}
//得到64位ROM序列(在P1口显示,必须与Proteus联调且在单步调试下才能得到)
/*void GetROMSequence()
{
uchar i;
Initialization();
WriteByte(READ_ROM);
for (i = 0; i < 8; i++)
P1 = ReadByte();
}*/
//读取温度值
TEMPDATA ReadTemperature()
{
TEMPDATA TempData;
uint iTempDataH;
uchar btDot, iTempDataL;
static uchar i = 0;
TempData.btNegative = 0; //为0温度为正
i++;
number++;
if (number == 9) number = 1;
if (i == 9) i = 1;
Initialization();
WriteByte(SKIP_ROM); //跳过ROM匹配
WriteByte(TEMP_SWITCH); //启动转换
Delay500ms(); //调用一次就行
Initialization();
//多个芯片的时候用MatchROM(ROMData)换掉WriteByte(SKIP_ROM)
switch (i)
{
case 1 : MatchROM(ROMData1); break; //匹配1
case 2 : MatchROM(ROMData2); break; //匹配2
case 3 : MatchROM(ROMData3); break; //匹配3
case 4 : MatchROM(ROMData4); break; //匹配4
case 5 : MatchROM(ROMData5); break; //匹配5
case 6 : MatchROM(ROMData6); break; //匹配6
case 7 : MatchROM(ROMData7); break; //匹配7
case 8 : MatchROM(ROMData8); break; //匹配8
}
//WriteByte(SKIP_ROM); //跳过ROM匹配(单个芯片时用这句换掉上面的switch)
WriteByte(READ_MEMORY); //读数据
iTempDataL = ReadByte();
iTempDataH = ReadByte();
iTempDataH <<= 8;
iTempDataH |= iTempDataL;
if (iTempDataH & 0x8000)
{
TempData.btNegative = 1;
iTempDataH = ~iTempDataH + 1; //负数求补
}
//为了省去浮点运算带来的开销,而采用整数和小数部分分开处理的方法(没有四舍五入)
btDot = (uchar)(iTempDataH & 0x000F); //得到小数部分 低四位是小数部分
iTempDataH >>= 4; //得到整数部分 高十二位是整数部分
btDot *= 5; //btDot*10/16得到转换后的小数数据
btDot >>= 3;
//数据处理
TempData.btThird = (uchar)iTempDataH / 100; //百位
TempData.btSecond = (uchar)iTempDataH % 100 / 10;//十位
TempData.btFirst = (uchar)iTempDataH % 10; //个位
TempData.btDecimal = btDot; //小数部分
return TempData;
}
1602驱动程序:
#include "1602.H"
#include <AT89X51.H>
//接口定义
sbit RS= P2^7;
sbit RW= P2^6;
sbit E= P2^5;
#define DATA P0
//判断忙指令
void Busy()
{
DATA = 0xff;
RS = 0;
RW = 1;
while(DATA & 0x80)
{
E = 0;
E = 1;
}
E = 0;
}
//写指令程序
void WriteCommand(uchar btCommand)
{
Busy();
RS = 0;
RW = 0;
E = 1;
DATA = btCommand;
E = 0;
}
//写数据程序
void WriteData(uchar btData)
{
Busy();
RS = 1;
RW = 0;
E = 1;
DATA = btData;
E = 0;
}
//清屏显示
void Clear()
{
WriteCommand(1);
}
//初始化
void Init()
{
WriteCommand(0x0c); //开显示,无光标显示
WriteCommand(0x06); //文字不动,光标自动右移
WriteCommand(0x38); //设置显示模式:8位2行5x7点阵
}
//显示单个字符
void DisplayOne(bit bRow, uchar btColumn, uchar btData, bit bIsNumber)
{
if (bRow) WriteCommand(0xc0 + btColumn);
else WriteCommand(0x80 + btColumn);
if (bIsNumber) WriteData(btData + 0x30); //bIsNumber为1就以ascall码显示
else WriteData(btData); //直接显示符号
}
//显示字符串函数
void DisplayString(bit bRow, uchar btColumn, uchar *pData)
{
while (*pData != '\0')
{
if (bRow) WriteCommand(0xc0 + btColumn); //显示在第1行
else WriteCommand(0x80 + btColumn); //显示在第0行
WriteData(*(pData++)); //要显示的数据
btColumn++; //列数加一
}
}
程序流程图:见附录一
第三章 室内温度监控系统设计方案主要器件简介
3.1 AT89S51单片机
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
主要性能特点:
1、4k Bytes Flash片内程序存储器;
2、128 bytes的随机存取数据存储器(RAM);
3、32个外部双向输入/输出(I/O)口;
4、2个中断优先级、2层中断嵌套中断;
5、5个中断源;
6、2个16位可编程定时器/计数器;
7、2个全双工串行通信口;
8、看门狗(WDT)电路;
9、片内振荡器和时钟电路;
10、与MCS-51兼容;
11、全静态工作:0Hz-33MHz;
12、三级程序存储器保密锁定;
13、可编程串行通道;
14、低功耗的闲置和掉电模式。
管脚说明:
VCC:电源电压输入端。
GND:电源地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
PDIP封装的AT89S51管脚如图3所示
图3
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(T0定时器的外部计数输入)
P3.5 T1(T1定时器的外部计数输入)
P3.6 /WR(外部数据存储器的写选通)
P3.7 /RD(外部数据存储器的读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。
RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端。
XTAL2:片内振荡器反相放大器的输出端。
3.2 DS18B20温度传感器
3.2.1 简介
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
技术性能描述
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
⑤、在使用中不需要任何外围元件
⑥、测量结果以9~12位数字量方式串行传送
⑦、不锈钢保护管直径 Φ6
⑧、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、标准安装螺纹 M10X1, M12X1.5, G1/2”任选
⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20管脚排列如
展开阅读全文