- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MSP430上温度传感器的的设计
基于MSP430上温度传感器的设计第五组 第五组成员 组长:申琪 组员:李明扬 付涛涛 郑珍迪 熊宇龙 温度传感器介绍 DSl8B20 数字温度计提供9位(二进制)温度读数指示器件的温度信息经过单线接口送 入 DSl8B20 或从 DSl8B20 送出因此从主机 CPU 到 DSl8B20 仅需一条线(和地线)DSl8B20 的电源可以由数据线本身提供而不需要外部电源因为每一个 DSl8B20 在出厂时已经给定了唯一的序号因此任意多个 DSl8B20 可以存放在同一条单线总线上这允许在许多不同的地方放置温度敏感器件 DSl8B20的测量范围从-55到+125增量值为 0.5可在 l s(典型值)内把温度变换成数字。 每个DSl8B20包括一个唯一的64位长的序号,该序号值存放在 DSl8B20 内部的 ROM(只读存贮器)中开始8 位是产品类型编码(DSl8B20 编码均为 10H)接着的 48位是每个器件唯一的序号最后8位是前面56位的CRC(循环冗余校验)码DSl8B20中还有用于贮存测得的温度值的两个8位存贮器 RAM 编号为0号和号1号存贮器存放温度值的符号如果温度为负()则1号存贮器8位全为1否则全为0。0号存贮器用于存放温度值的补码LSB(最低位)的1表示0.5将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度(-550125)DSl820 的引脚如图 2所示。 每只 D518B20 都可以设置成两种供电方式, 即数据总线供电方式和外部供电方式 采取数据总线供电方式可以节省一根导线 。但完成温度测量的时间较长采取外部供电方式则多用一根导线但测量速度较快。 图2 DS18B20的引脚 1.GND:地 2.DQ:数字输入\输出 3.VDD:可选的+5V电源 温度传感器与单片机的连接 温度传感器的单总线(1-Wire)与单片机的P2.0连接,P2.0是单片机的高位地址线A8。P2端口是一个带内部上拉电阻的8位双向I/O,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对该端口写“1”,可通过内部上拉电阻将其端口拉至高电平,此时可作为输入口使用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时。如执行MOVX DPTR指令,则表示P2端口送出高8位的地址数据。在访问8位地址的外部数据存储器时,可执行MOVX RI指令,P2端口内容即为特殊功能寄存器(SFR)区中R2寄存器内容,整个访问期间不改变。在Flash编程和程序校验时,P2端口也接收高位地址和其他控制信号。 仿真与实物图 程序代码 DS18B20 温度测量实验 //功能:在数码管上显示当前DS18B20 测到的温度 //小数部分为4 位,温度为负时,最高位显示- //测量范围:-55℃ ~ +125℃ #include msp430x14x.h #define uint unsigned int #define uchar unsigned char #define DQ_OUT P1DIR|=BIT0 #define DQ_IN P1DIR=~BIT0 #define DQ_LOW P1OUT=~BIT0 #define DQ_HIGH P1OUT|=BIT0 #define DQ_DATA P1INBIT0 //共阳数码管编码表 uint Code[18]={0x3f,0x06,0x5b,0xB4f,//0,1,2,3 0x66,0x6d,0x7d,0x07,//4,5,6,7 0x7f,0x6f,0x77,0x7c,//8,9,A,b 0x39,0x5e,0x79,0x71,//C,d,E,F 0x40,0x00};//-,全灭 uchar Bit[4]={0,0,0,17}; //数码管各位显示的数字 uchar BitCode[]={0x0e,0x0d,0x0b,0x07}; //数码管位码初值 //uchar wei[]={0x01,0x02,0x04,0x08}; uint j=0; uint l=0; uchar MSB; //温度高字节 uchar LSB; //温度低字节 int t1=0; //温度整数部分数值 float t2=0; //温度小数部分数值 uchar flag; //负温度标志 //时钟初始化函数 void InitClock(void){ BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2 开启 LFXT1 工作在低频模式 ACLK //不分频 最高的标称频
文档评论(0)