单片机中使用DS18B20温度传感器C语言程序文件_第1页
单片机中使用DS18B20温度传感器C语言程序文件_第2页
单片机中使用DS18B20温度传感器C语言程序文件_第3页
单片机中使用DS18B20温度传感器C语言程序文件_第4页
单片机中使用DS18B20温度传感器C语言程序文件_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机中使用DS18B20温度传感器C语言程序(参考1)未*DS18B20测温程序硬件:AT89S52(1)单线 ds18b20接 P2.2(2)七段数码管接P0 口使用外部电源给 ds18b20供电,没有使用寄生电源软件:Kei uVision 3*/#i nclude reg52.h#i nclude in tri ns.h#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit ds=P2A2;sbit dula=P2A6;sbit wela=P2A7;uchar flag ;uint temp;/参数temp 一定要声

2、明为 int型uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 不带小数点数字编码uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/带小数点数字编码/*延时函数*/void TempDelay (uchar us)while(us-);void delay(ui nt co un t) /延时子函数uint i;while(co unt)i=200;while(

3、i0)i-;coun t-;/*串口初始化,波特率9600,方式1 */void ini t_com()TMOD=0x20; /设置定时器1为模式2TH仁0xfd;/装初值设定波特率TL 1=0xfd;TR 1=1;/启动定时器SMO=O;/串口通信模式设置SM 1=1;/ REN=1;/串口允许接收数据PCON=0;/波特率不倍频/ SMOD=0;/波特率不倍频/ EA=1;/开总中断/ES=1;/开串行中断/*数码管的显示 */void display( uint temp)uchar bai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%100%

4、10;dula=0;PO=tablebai; / 显示百位dula=1;/从0到1,有个上升沿,解除锁存,显示相应段dula=0;/从1至U 0再次锁存wela=O;PO=Oxfe;wela=1;wela=0;delay(1); / 延时约 2msP0=table1shi; / 显示十位dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(1);PO=tablege; / 显示个位dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(1);嗫*时序:初始化时序、读时序、写时序。所有时序都是将主机(单片机)作为主设备,单总 线器件作为从

5、设备。而每一次命令和数据的传输 都是从主机主动启动写时序开始,如果要求单总 线器件回送数据,在进行写命令后,主机需启动 读时序完成数据接收。数据和命令的传输都是低 位在先。初始化时序:复位脉冲 存在脉冲读;1或0时序写;1或0时序只有存在脉冲信号是从 18b20 (从机)发出的,其 它信号都是由主机发出的。*/存在脉冲:让主机(总线)知道从机(18b20)已 经做好了准备。*/*初始化:检测总线控制器发出的复位脉冲和ds18b20的任何通讯都要从初始化开始初始化序列包括一个由总线控制器发出的复位脉冲 和跟在其后由从机发出的存在脉冲。初始化:复位脉冲+存在脉冲具体操作:总线控制器发出(TX) 一

6、个复位脉冲(一个最少保持 480卩s的低电平信号),然后释放总线, 进入接收状态(RX)。单线总线由5K上拉电阻拉到高电平。探测到I/O弓I脚上的上升沿DS1820等待1560卩s然后发出存在脉冲 (一个60240卩的低电平信号)。具体看18b20单线复位脉冲时序和1-wire presenee detect的时序图1-WIRE PRESENCE DETECT*/void ds_reset(void)ds=1;_no p_();/1usds=0;TempDelay(80); /当总线停留在低电平超过480us,总线上所以器件都将被复位,这里延II时约530us总线停留在低电平超过 480卩s,

7、总线上的所有器件都将被复位。_n op_();ds=1;/产生复位脉冲后,微处理器释放总线,让总线处于空闲状态 ,原因查18b20中文资料TempDelay(5); /释放总线后,以便从机18b20通过拉低总线来指示其是否在线,/存在检测高电平时间:1560us , 所以延时44us,进行1-wire preseneedetect (单线存在检测)_n op_();_n op_();_n op_();if(ds=0)flag=1;/detect 18b20 successelseflag=0;/detect 18b20 failTempDelay(20);/存在检测低电平时间:60240us,

8、所以延时约140us_n op_();_n op_();ds=1;/再次拉高总线,让总线处于空闲状态/*/原理解释:控制器对18B20操作流程:1 ,复位:首先我们必须对 DS18B20芯片进行复位,复位就是由控制器(单片给DS18B20单总线至少 480uS的低电平信号。当18B20接到此复位信号后则会在1560uS后回发一个芯片的存在脉冲2 ,存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个 60240uS的低电平信号。至此,通信双方 已经达成了基本的协议,接下来将会是控制器与 18B20间的数据通信 。/*读/写时间隙:DS18

9、20的数据读写是通过时间隙处理位和命令字来确认信息交换。*/bit ds_read_bit(void) / 读一位bit dat;ds=0;/单片机(微处理器)将总线拉低_nop_();II读时隙起始于微处理器将总线拉低至少1usds=1;II拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据_n op_();_nop_();小延时一下,读取18b20上的数据,因为从ds18b20上输出的数据II在读”时间隙”下降沿出现15us内有效dat=ds;II主机读从机18b20输出的数据,这些数据在读时隙的下降沿出现II15us内有效TempDelay(IO); II 所有读时间隙必

10、须 60120us,这里 77usreturn(dat);II返回有效数据原理:图8读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1 ”,如果总线为低电平则表示读出数据“0 ”。每一位的读取之前都由控制器加一个起始信号。注意:如图8所示,必须在读间隙开始的15uS内读取数据位才可以保证通信的正确。在通信时是以 8位“0 ”或“ 1 ”为一个字节,字节的读或写是从高位开始的,即A7到A0.字节的读写顺序也是如图2自上而下的。uch

11、ar ds_read_byte(void ) /读一字节uchar value,i,j;value=0;II 一定别忘了给初值for(i=0;i8;i+)j=ds_read_bit();value=(j1); II 这一步的说明在一个 word 文档里面?return(value);II返回一个字节的数据void ds_write_byte(uchar dat) /写一个字节uchar i;bit o nebit;/ 一定不要忘了 , on ebit 是一位for(i=1;i1; /由低到高传送数据if(onebit)/ 写 1ds=0;_n op_();_nop_();/看时序图,至少延时1

12、us ,才产生写时间隙”ds=1;/写时间隙开始后的15卩内允许数据线拉到高电平TempDelay(5); /所有写时间隙必须最少持续60uselse/ 写 0ds=0;TempDelay(8); /主机要生成一个写0时间隙,必须把数据线拉到低电平并保持至少60卩s,这里64usds=1;_n op_();_n op_();/*STiRTOf SLOT*START OF SLOTMASTER WRITE ,J0 SLOTVfj 1-WJRE BUSGNDMASTER WRITE T,SLOTKSamplesTV?MAKS1BB20 Samples1hlTYPMAX1 f 1530)aBMAST

13、ER READ SLOTMASTER READ T SLOTLINE TYPE LEGENDBus rrastar puJIing 畑* Resstcr pj1 up主机(单片机)控制18B20完成温度转换要经过三个步骤每一次读写之前都要 18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18b20进行预定的操作。复位要求主CPU将数据线下拉500us,然后释放,当ds18B20受到信号后等待1660us ,后发出60240us的存在低脉冲,主CPU收到此信号表示复位成功*/*进行温度转换:先初始化然后跳过ROM :跳过64位ROM地址,直接向ds18B20发温度转换命令,适合单片工作 发送温度转换命令*/void tem_cha nge()ds_reset();delay(1);/ 约 2msds_write_byte(Oxcc); 单线情况下,跳跃ROM指令ds_write_byte(0x44); 温度转换指令/*获得温度:*/uint ge

温馨提示

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

评论

0/150

提交评论