基于MSP430上温度传感器的设计_第1页
基于MSP430上温度传感器的设计_第2页
基于MSP430上温度传感器的设计_第3页
基于MSP430上温度传感器的设计_第4页
基于MSP430上温度传感器的设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于基于MSP430上温度传上温度传 感器的设计感器的设计 第五组第五组 第五组成员 组长:申琪组长:申琪 组员:李明扬组员:李明扬 付涛涛付涛涛 郑珍迪郑珍迪 熊宇龙熊宇龙 温度传感器介绍 图2 DS18B20的引脚 1.GND:地 2.DQ:数字输入输出 3.VDD:可选 的+5V电源 DSl8B20 数字温度计提供9位(二进制)温度读 数指示器件的温度信息经过单线接口送 入 DSl8B20 或从 DSl8B20 送出因此从主机 CPU 到 DSl8B20 仅需一条线(和地线)DSl8B20 的 电源可以由数据线本身提供而不需要外部电源 因为每一个 DSl8B20 在出厂时已经给定了唯 一

2、的序号因此任意多个 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

3、号存贮 器8位全为1否则全为0。0号存贮器用于存放 温度值的补码LSB(最低位)的1表示0.5将存贮 器中的二进制数求补再转换成十进制数并除以 2就得到被测温度(-550125)DSl820 的引脚如 图 2所示。 每只 D518B20 都可以设置成两种供电方式, 即数据总线供电方式和外部供电方式 采取数 据总线供电方式可以节省一根导线 。但完成 温度测量的时间较长采取外部供电方式则多用 一根导线但测量速度较快。 温度传感器与单片机的连接 温度传感器的单总线(1-Wire)与单 片机的P20连接,P20是单片 机的高位地址线A8。P2端口是一个 带内部上拉电阻的8位双向IO, 其输出缓冲级可驱

4、动(吸收或输出电 流)4个TTL逻辑门电路。对该端口 写“1”,可通过内部上拉电阻将其 端口拉至高电平,此时可作为输入 口使用,这是因为内部存在上拉电 阻,某一引脚被外部信号拉低时会 输出一个电流。在访问外部程序存 储器或16位地址的外部数据存储器 时。如执行MOVX DPTR指令,则 表示P2端口送出高8位的地址数据。 在访问8位地址的外部数据存储器 时,可执行MOVX RI指令,P2端口 内容即为特殊功能寄存器(SFR)区 中R2寄存器内容,整个访问期间不 改变。在Flash编程和程序校验时, P2端口也接收高位地址和其他控制 信号。 仿真与实物图 程序代码 DS18B20 温度测量实验

5、/功能:在数码管上显示当前DS18B20 测到的温 度 /小数部分为4 位,温度为负时,最高位显示- /测量范围:-55 +125 #include msp430 x14x.h #define uint unsigned int #define uchar unsigned char #define DQ_OUT P1DIR|=BIT0 #define DQ_IN P1DIR/-,全灭 uchar Bit4=0,0,0,17; /数码管各位显示的数 字 uchar BitCode=0 x0e,0 x0d,0 x0b,0 x07; /数码 管位码初值 /uchar wei=0 x01,0 x02

6、,0 x04,0 x08; 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 /不分频 最高的标称频率 DCOCTL=DCO2+DCO1+DCO0;/DCO 为最高 频率 do IFG1/清除振荡器失效标志 for(uint i=255;i0;i-)

7、; while(IFG1/判断XT2 是否起振 BCSCTL2=SELM1+SELS;/MCLK SMCLK 时 钟源为TX2CLK 不分频 /端口初始化函数 void InitPort(void) P2SEL=0 x00;/P2 口所有引脚设置为一般的IO 口 P4SEL=0 x00;/P4 口所有引脚设置为一般的IO 口 P2DIR=0 xFF;/P2 口所有引脚设置为输出方向 P4DIR=0 xFF;/P4 口所有引脚设置为输出方向 P2OUT=0 x00;/P2 口先输出低电平 P4OUT=0 x0E;/P4 口先输出低电平 /P5SEL/P5. 设7置为一般的IO 口 /P5DIR|

8、=BIT7;/P5.7 设置为输出方向 /P5OUT/P5.7 输出低电平来使能74HC573 来驱动数 码管 /ms 级延时子程序 void DelayMs(uint ms) while(ms-) for(uint i=0;i800;i+); /数码管扫描显示程序 void Display(void) for(uchar i=0;i=1;/位码右移一位/if(BitCode=0 x00) BitCode=0 x0e; DelayMs(3); /延时1ms P2OUT=0 x00; /10us 级延时子程序 void Delayus(uint us) while(us-) _NOP();_NO

9、P();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_

10、NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP()

11、; _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP(); /初始化DS18B20 void DS18B20Init(void) DQ_OUT;/设置为

12、输出方向 DQ_LOW;/拉低总线 Delayus(50); DQ_HIGH;/释放总线 Delayus(6); DQ_IN;/设置为输入方向 else DQ_LOW; Delayus(5); DQ_HIGH; /温度计算程序 void GetT() if(MSB else flag=0; if(flag) /如果为负温度取反加1 MSB=MSB; LSB=LSB+1; t1=MSB4); t2=(LSB /得到温度小数部分并扩大 10000 倍 /计算各位数码管要显示的数值 if(flag) Bit1=16; /如果为负温度则显示- else Bit1=t1/100; Bit2=t1%100

13、/10; Bit3=t1%10; /Bit4=t2/1000; /Bit5=t2%1000/100; /Bit6=t2%100/10; /Bit7=t2%10; while(DQ_DATA);/等待应答信号 while(DQ_DATA);/等待释放总线 /读一个字节 uchar ReadByte(void) uchar i; uchar ReadData=0; for(i=0;i=1; DQ_HIGH; Delayus(1); DQ_IN; if(DQ_DATA) ReadData|=0 x80; Delayus(6); return ReadData; /写一个字节 void WriteBy

14、te(uchar WriteData) uchar i; uchar tmpData; for(i=0;i=1; DQ_OUT; DQ_LOW; if(tmpData) DQ_HIGH; void main() WDTCTL=WDTPW+WDTHOLD;/关闭看门狗 InitClock(); InitPort(); _DINT();/关闭中断 /j=0;l=0; while(1) DS18B20Init(); WriteByte(0 xCC); /跳过ROM 配置 WriteByte(0 x44);/启动温度转换 DS18B20Init(); WriteByte(0 xCC); WriteByte(0 xBE); /读温度寄存器 LSB=ReadByte(); /读温度数据低字节 MSB=ReadByte(); /读温度数据高字节 GetT(); /计算温度 Display(); 实验总结 要做好一个课程设计,就必须做到:在设计程序之前,对 所用单片机的内部结构有一个系统的了解,知道该单片机 有哪些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论