《基于51单片机DS18B20温度采集器(共24页).doc》由会员分享,可在线阅读,更多相关《基于51单片机DS18B20温度采集器(共24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上一 核心器件的基本构成及特性1.1 AT89S51功能特性 89C51是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51基础型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能。89C51内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两
2、级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C51有PDIP(40pin)和PLCC(44pin)两种封装形式。 1.2 AT89S51管脚介绍 AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、并行I/O口(4个8位I/O口)、串行口
3、、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是微处理器(CPU)加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式,以实现不同的功能。AT89C51单片机如图所示。1.1.1引脚功能介绍Vcc(40引脚): 接+5V电源。Vss(20引脚): 接地。XTAL1(19引脚): 片内振荡器反相放大器和时钟发生器电路的输入端。XTAL2(18引脚): 片内震荡器反相放大器的输出端。RST: 复位引脚,高电平有效。EA: 外部程序存储器访问允许控制端。ALE: 低8位地址锁存允许信号端。PSEN:读外部程序存储器的选通信
4、号端。 P0口:8位,漏极开路的双向I/O口。P1口:8位,准双向I/O口,具有内部上拉电阻。P2口:8位,准双向I/O口,具有内部上拉电阻。P3口:8位,准双向I/O口,具有内部上拉电阻。1.1.2微处理器(CPU)AT89C51单片机中有一个8位的微处理器,与通用的微处理器基本相同,同样包括了运算器和控制器两大部分,只是增加了面向控制的处理功能,不仅可处理数据,还可以位变量的处理。1.1.3数据存储器(RAM)数据存储器空间分为片内与片外两部分。当AT89C51单片机的片内RAM不够用时,又给用户提供了在片外可扩展至64KB RAM的能力,以供用户的需求。片内为128个字节,字节地址为00
5、H7FH。片外最多可外扩至64k字节,用来存储程序在运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等,所以称为数据存储器。1.1.4程序存储器(ROM)AT89C51单片机的片内程序存储器为4KB的FLASH存储器,地址范围为0000H0FFFH。有16位地址线,可外扩的程序存储器空间最大为64KB,地址范围为0000HFFFFH。由于受集成度限制,片内只读存储器一般容量较小,如果片内的只读存储器的容量不够,则需用扩展片外的只读存储器,片外最多可外扩至64k字节。1.1.5中断系统具有5个中断源,2级中断优先权。定时器/计数器片内有2个16位的定时器/计数器, 具有四种工作方式(方
6、式0、方式1、方式2、方式3)。串行口1个全双工的串行口,具有四种工作方式。可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,从而使单片机的功能更强且应用更广。1.1.6特殊功能寄存器(SFR)AT89C51单片机共有21个特殊功能寄存器,用于对片内的个功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。由上可见,AT89C51单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的位处理器,它实际上是一个完整的1位微计算机,这个1位微计算机有自己的CPU、位寄存器、I/O口和指令集。1位机在开关决
7、策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集,运算处理方面有明显的长处。MCS-51单片机中8位机和1位机的硬件资源复合在一起,二者相辅相承,它是单片机技术上的一个突破,这也是MCS-51单片机在设计的精美之处,得以在实际生活中得到了广泛的应用。1.3 DS18B20的主要特性这里我们用到温度芯片DS18B20。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式。测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多DS18B20通信,占
8、用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20支持“一线总线”接口,测量温度范围为 -55C+125C,在-10+85C范围内,精度为0.5C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。1.4DS18B20的内容结构(1) DS18B20的内部结构如下图所示。 DS18B20内部结构图DS18B20有4个主要的数据部件:64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。温度灵敏元件。非易失性温度报警触发器TH和TL
9、。可通过软件写入用户报警上下限值。配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DS18B20在0工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如图所示。TMR1R011111 DS18B20配置寄存器结构图其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。配置寄存器与分辨率关系表 :R0R1温度计分辨率/bit最大转换时间/us00993.750110187.510113751112750(
10、2) 高速暂存存储器高速暂存存储器由9个字节组成,其分配如下图所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如图所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。温度低位温度高位THTL配置保留保留保留8位CRCLSB DS18B20存储器映像图MSB温度值格式图DS18B20温度数据表:232221202-12-22-32-4MSBLSBSSSSS262524典型对应的温度值表:温度/二进制表示十六进制表示+
11、125 +25.0625+10.125+0.50-0.5-10.125-25.0625-55 07D0H0191H00A2H0008H0000HFFF8HFF5EHFE6FHFC90H1.5 DS18B20的应用电路DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。硬件连接电路如下图:AT89C51DS18B201#DS18B202#DS18B203#DS18B2020#VCC=5V4.7K1WIRE本系统为多点温度测试。DS18B20采用外部供电方式,理论上可以在一根数据总线上挂256个DS18B20,但时间应用中发现,如果挂接25个以上的DS18B
12、20仍旧有可能产生功耗问题。另外单总线长度也不宜超过80M,否则也会影响到数据的传输。在这种情况下我们可以采用分组的方式,用单片机的多个I/O来驱动多路DS18B20。在实际应用中还可以使用一个MOSFET将I/O口线直接和电源相连,起到上拉的作用。1.6 DS18B20的注意事项对DS18B20的设计,需要注意以下问题(1)对硬件结构简单的单线数字温度传感器DS18B20进行操作,需要用较为复杂的程序完成。编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。尤其在使用DS18B20的高测温分辨力时,对时序及电气特性参数要求更高。(2)有多个测温点时,应考
13、虑系统能实现传感器出错自动指示,进行自动DS18B20序列号和自动排序,以减少调试和维护工作量。(3)测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。DS18B20在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。若VCC脱开未接,传感器只送85.0 的温度值。(4)实际应用时,要注意单线的驱动能力,不能挂接过多的DS18B20,同时还应注意最远接线距离。另外还应根据实际情况选择其接线拓扑结构。二 理论分析及流程图整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了
14、。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。2.1:主电路程序方案主程序调用了4个子程序,分别是数码管显示程序、温度测试程序、中断控制程序、单片机与PC机串口通讯
15、程序。温度测试程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码的显示送数,控制系统的显示部分。中断控制程序:实现循环显示功能。串口通讯程序:实现PC机与单片机通讯。2.2读取温度子程序流程图将各个功能程序以子程序的形式写好,当写主程序的时候,只需要调用子程序,然后在寄存器的分配上作一下调整,消除寄存器冲突和I/O冲突即可。程序应该尽可能多的使用调用指令代替跳转指令。因为跳转指令使得程序难以看懂各程序段之间的结构关系。而调用指令则不同,调用指令使得程序结构清晰,无论是修改还是维护都比较方便。将功能程序段写成子程序的形式,除了方便调用之外,还有一个好处那就是以后写程序的
16、时候如果要用到,就可以直接调用这个单元功能模块。2.3温度转换命令子程序流程图中断控制程序设计:串口通信程序设计:软件流程图如下:单片机程序流程图PC通讯程序流程图三 电路与程序设计3.1读DS18B20 ROM程序/*1ds1820序列号获得*/ ;数码管显示八组(64位)ROM数据A_BIT EQU 35H ; B_BIT EQU 36H ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV SP,#60H CLR EA ;使用ds1820一定要禁止任何中断产生 LCALL INT ;初始化ds1820 MOV A,#33H LCALL WRITE ;送入读ds1
17、820的ROM命令 LCALL READ ;开始读出当前ds1820序列号 MOV 40H,A LCALL READ MOV 41H,A LCALL READ MOV 42H,A LCALL READ MOV 43H,A LCALL READ MOV 44H,A LCALL READ MOV 45H,A LCALL READ MOV 46H,A LCALL READ MOV 47H,A LCALL DISPLAYSETB EASJMP $ DISPLAY: mov r2,#8MOV R4,#0mov r1,#40HLOOP:mov a,r1;将ram中的十六进制数转换成10进制mov b,#1
18、6 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在bmov dptr,#TAB ;指定查表启始地址 clr p2.2;mov r0,#250MOV R3,#10dplop: mov a,a_bit ;取个位数MOVC A,A+DPTR ;查个位数的7段代码setb p2.1;开个位显示clr p2.0;mov p0,a ;送出个位的7段代码acall d1ms acall d1ms ;显示1msmov p0,#0mov a,b_bit ;取十位数MOVC A,A+DPTR ;查十位数的7段代码SETB p2.0;开十位显示clr p2.
19、1;mov p0,a ;送出十位的7段代码 acall d1ms ;显示1msacall d1ms mov p0,#0mov a,R4 ;取十位数MOVC A,A+DPTR ;查十位数的7段代码CLR p2.0;开十位显示clr p2.1;mov p0,a ;送出十位的7段代码 acall d1ms ;显示1msacall d1ms mov p0,#0djnz r0,dplop ;4个100次没完循环djnz r3,dplopINC R1INC R4DJNZ r2,LOOPRET ;*D1MS: MOV R7,#80 ;1MS延时(按12MHZ算)DJNZ R7,$RETTA:DB3FH,06
20、H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7cH,39H,5eH,79H,71HRETINT: ;初始化ds1820子程序 CLR EA L0:CLR P2.3 ;ds1820总线为低复位电平 MOV R2,#200 L1:CLR P2.3DJNZ R2,L1 ;总线复位电平保持400us SETB P2.3 ;释放ds1820总线 MOV R2,#30 L4:DJNZ R2,L4 ;释放ds1820总线保持60us CLR C ;清存在信号 ORL C,P2.3 JC L0 ;存在吗?不存在则重新来 MOV R6,#80 L5:ORL C,P2.3 JC L
21、3 DJNZ R6,L5 SJMP L0 L3:MOV R2,#240 L2:DJNZ R2,L2 RET WRITE: ;向ds1820写操作命令子程序 CLR EA MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit WR1:SETB P2.3 MOV R4,#8 RRC A ;把一个字节data(A)分成8个bit环移给C CLR P2.3 ;开始写入ds1820总线要处于复位(低)状态 WR2:DJNZ R4,WR2 ;ds1820总线复位保持16us MOV P2.3,C ;写入一个bit MOV R4,#20 WR3:DJNZ R4,WR3 ;等待40us DJN
22、Z R3,WR1 ;写入下一个bit SETB P2.3 ;重新释放ds1820总线 RET READ: CLR EA MOV R6,#8 ;连续读8个bit RE1:CLR P2.3 ;读前总线保持为低 MOV R4,#4 NOP SETB P2.3 ;开始读总线释放 RE2:DJNZ R4,RE2 ;持续8us MOV C,P2.3 ;从ds1820总线读得一个bit RRC A ;把读得的位值环移给A MOV R5,#30 RE3:DJNZ R5,RE3 ;持续60us DJNZ R6,RE1 ;读下一个bit SETB P2.3 ;重新释放ds1820总线 RET END3.2温度采集
23、主程序#include #include #define uchar unsigned char#define uint unsigned intuchar data disdata5;uchar code table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code LED_W8 = 0,1,2,3,4,5,6,7;uint tvalue;/温度值uchar tflag;/温度正负标志/*灵活改动*/uchar d=3;/总路数 灵活改动sbit DQ=P23;/数据引脚uchar code str38=0x28
24、,0x96,0x24,0x84,0x03,0x00,0x00,0xC9,0x28,0x83,0x1B,0x1E,0x02,0x00,0x00,0xC3,0x28,0x32,0x51,0x31,0x03,0x00,0x00,0xE6;/ROM序列号0n路/*以上三个量灵活改动*/*ds1820程序*/void delay1ms(uint ms)/延时1毫秒(不够精确的) uint i,j;for(i=0;ims;i+)for(j=0;j100;j+);void delay_18B20(uint i)/延时1微秒while(i-);void ds1820rst()/*ds1820复位*/ ucha
25、r x=0;DQ = 1; /DQ复位delay_18B20(4); /延时DQ = 0; /DQ拉低delay_18B20(100); /精确延时大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*读数据*/ uchar i=0;uchar dat = 0;for (i=0;i=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);return(dat);void ds1820wr(uchar dat)/*写数据*/ uchar i=0; for (i=0; i=1; void b20_M
26、atchrom(uchar a) /匹配ROMchar j;ds1820wr(0x55); /发送匹配ROM命令for(j=0;j8;j+)ds1820wr(straj);/发送18B20的序列号,先发送低字节 read_temp(uchar z)/*读取温度值并转换*/uchar a,b;float tt;ds1820rst(); ds1820wr(0xcc);/读序列号ds1820rst();b20_Matchrom(z); /匹配ROMds1820wr(0x44);/*启动温度转换*/delay1ms(5);ds1820rst(); ds1820wr(0xcc);/读序列号ds1820r
27、st();b20_Matchrom(z); /匹配ROM ds1820wr(0xbe);/*读取温度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvalue0x0fff)tflag=0;else tvalue=tvalue+1;tflag=1; tt=tvalue*0.0625;tvalue=tt*10;return(tvalue);/*l 名称 : ds1820disp(uchar z)l 功能 : 数码管的显示l 输入 : 无l 输出 : 无*/void ds1820disp(z)/温度值显示 int
28、c; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100;/十位数 disdata2=tvalue%100/10;/个位数 disdata3=tvalue%10+0x30;/小数 for(c=0;c200;c+) P0 = tablez; / 路数P2 = LED_W4; /点亮第一位数码管delay1ms(3); P0 = tabledisdata1; / i值的十位数P2 = LED_W6; /点亮第二位数码管delay1ms(3);P0 = tabledisdata2; / i值的个位数P2 = LED_W7; /点亮第三位数码
29、管delay1ms(3); /*主程序*/void main() int z;while(1)for(z=0;zd;z+)read_temp(z);/读取温度ds1820disp(z);/显示 四 及心得体会通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行过而能改,善
30、莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握
31、了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等,通过查询资料,也了解了单片机的构造及原理。我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。回顾起此课程设计,至今我仍感慨颇
32、多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。专心-专注-专业