欢迎来到天天文库
浏览记录
ID:55279784
大小:348.50 KB
页数:24页
时间:2020-05-08
《项目六 多路测温系统的设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、项目六多路测温系统的设计能力目标1、能够设计字符型液晶显示器的接口电路及驱动程序。2、能够利用数字温度传感器DS18B20设计电子温度计及多路测温系统。任务一用DS18B20设计电子温度计DS18B20是美国DALLAS公司推出的数字温度传感器,传感器及相关的数字转换电路都被集成到了一起,外形如同一只三极管,具有微型化、低功耗、高性能、抗干抗性强等优点;它采用独特的单线接口方式,与单片机连接时,仅需一根口线;由于每片DS18B20均有唯一的产品序列号,所以允许在单总线上挂接数十至上百片数字式传感器,这样可以非常方便地构成多路温度测量系
2、统。一、初识数字温度传感器1、DS18B20的测温范围为-55℃~125℃,12位温度读数,分辨率为1/16℃,温度转换时间最多为750ms,其引脚如图6-1所示:DQ:数据输入输出,也在数据总线供电方式给设备提供电源。VDD:可选的电源电压。DS18B20有两种供电方式:数据总线供电方式和外部供电方式。若采用数据总线供电方式,VDD应接地,这样可省一根线,但测温的时间较长。GND:电源地DS18B20与单片机的连接非常简单,如图6-2所示:GNDDQVDDDALLASDS18S20123图6-2与单片机的连接图6-1DS18B20引
3、脚图2、每片DS18B20均有一个唯一产品序列号,固化在内部的64位激光ROM中,其格式如下:开始8位是是产品的类型编号,接着是每个器件唯一的序号,共48位,最后8位是针对前面56位的CRC校验码,这也是多个DS18B20可以采用一条数据线进行通信的原因,只要单片机用匹配命令即可访问总线上的指定DS18B20。8位CRC校验码48位序列号8位工厂代码MSBLSBMSBLSBMSBLSB3、DS18B20内部有9个字节的暂存器,开始两个暂存器(TMSB、TLSB)存放当前测到的温度值,以16位补码形式表示12位温度读数,分辨率为1/16
4、℃,(内部配置寄存器可以设置温度数据的位数为9、10、11、12,出厂时设置成12位温度读数),高位是温度值的符号扩展,单片机发出温度转换命令后,DS18B20将测得的温度值保存在TMSB、TLSB中,供单片机读取。温度与数字量的关系如表6-1所示:表6-1温度与数字量对应关系表温度值(℃)输出二进制码十六进制表示+125000001111101000007D0H+25.062500000001100100010191H+0.500000000000010000008H000000000000000000000H-0.51111111
5、111111000FFF8H-25.06251111111001101111FE6FH-551111110010010000FC90H二、读写时序DS18B20与单片机之间的数据传送是靠严格的时序来实现的:1、初始化时序(见图6-3)与DS18B20的通信前,首先必须对其初始化,由单片机在t0时刻发出最短为480us的低电平有效的复位脉冲,在t1时刻释放总线并进入接收状态,DS18B20检测到总线变高后,等15到60us,在t2时刻发出低电平有效的存在脉冲响应。初始化DS18B20函数bitreset(void)//初始化DS18B2
6、0{biterr;DQ=0;//在数据线上产生600us的低电平delay15(40);DQ=1;//数据线拉高delay15(4);//延时60userr=DQ;//读取数据线状态,err=0:复位成功delay15(18);//err=1:复位失败return(err);}图6-3初始化时序2、写时序(图6-4)单片机在t0时刻将总线拉至低电平,从t0时刻开始的15us之内应将要写的数据位送到总线上,DS18B20在t0后的15—60us内对总线采样,若为低电平,写入的是0;若为高电平,写入的为1。连续写2位之间的间隙应大于1us
7、。向DS18B20写入一个字节函数voidwrbyte(uchard)//向DS18B20写入一个字节{uchari;dat=d;for(i=8;i>0;i--)//循环写8位(先低位,后高位){DQ=0;//产生15us的负脉冲delay15(1);DQ=dat0;//将当前数据位送数据线dat=dat>>1;//将下一位要写入的数据移到最低位delay15(1);//延时15usDQ=1;//数据线拉高,为写入下一位做准备}}图6-4写时序3、读时序(见图6-5)单片机在t0时刻将总线从高拉至低电平,保持1us后,在t1时刻将总线
8、拉高,释放总线,DS18B20通过保持总线为高发送“1”,将总线拉低发送“0”,并在t2时刻释放总线。单片机必须在t2之前读取总线状态。从DS18B20读取一个字节函数ucharrdbyte(void)//从DS18B2
此文档下载收益归作者所有