单片机中使用DS18B20温度传感器C语言程序_第1页
单片机中使用DS18B20温度传感器C语言程序_第2页
单片机中使用DS18B20温度传感器C语言程序_第3页
单片机中使用DS18B20温度传感器C语言程序_第4页
单片机中使用DS18B20温度传感器C语言程序_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

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

文档简介

1、单片机中使用 DS18B20 温度传感器 C 语言程序(参考 1)/*DS18B20 测温程序硬件:AT89S52(1)单线 ds18b20 接 P2.2(2)七段数码管接 P0 口(3)使用外部电源给 ds18b20 供电,没有使用寄生电源软件:KeiuVision3*/#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitds=P2A2;sbitdula=P2A6;sbitwela=P2A7;ucharflag;uinttemp;/参数 temp 一定要声明为 int 型uchar

2、codetable尸0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/不带小数点数字编码ucharcodetable1=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;/*延时函数*/啼小数点数字编码voidTempDelay(ucharus)while(us-);voiddelay(uintcount)/延时子函数uinti;while(count)i=200;while(i0)

3、i-;count-;/*串口初始化,波特率 9600,方式 1*/voidinit_com()TMOD=0 x20;设置定时器 1 为模式 2TH1=0 xfd;/装初值设定波特率TL1=0 xfd;TR1=1;/启动定时器SM0=0;串口通信模式设置SM1=1;/REN=1;/串口允许接收数据PCON=0;波特率不倍频/SMOD=0;波特率不倍频/EA=1;开总中断/ES=1;开串行中断)/*数码管的显示*/voiddisplay(uinttemp)(ucharbai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%100%10;dula=0;P0=t

4、ablebai;/显示百位dula=1;从 0 至 ij1,有个上升沿,解除锁存,显示相应段dula=0;从 1 至 ij0 再次锁存wela=0;P0=0 xfe;wela=1;wela=0;delay;延时约 2msP0=table1shi;/显示十位 dula=1;dula=0;P0=0 xfd;wela=1;wela=0;delay(1);P0=tablege;/显示个位 dula=1;dula=0;P0=0 xfb;wela=1;wela=0;delay(1);/*时序:初始化时序、读时序、写时序。所有时序都是将主机(单片机)作为主设备,单总线器件作为从设备。而每一次命令和数据的传输

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

6、的低电平信号),然后释放总线,(RX)。单线总线由 5K 上拉电阻拉到高电平。探测到 I/O 引脚上的上升沿后DS1820 等待 1560 人然后发出存在脉冲(一个 60240 科 S 勺低电平信号)。具体看 18b20 单线复位脉冲时序和 1-wirepresencedetect的时序图*/voidds_reset(void)ds=1;_nop_();/1usds=0;TempDelay(80);当总线停留在低电平超过 480us,总线上所以器件都将被复位,这里延/进入接收状态VWIREPRESENCEDETECTPflEBEHCEDETECTipQLCW时约 530us 总线停留在低电平超

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

8、延时约 140us_nop_();_nop_();ds=1;再次拉高总线,让总线处于空闲状态/*/原理解释:控制器对 18B20 操作流程:1,复位:首先我们必须对 DS18B20 芯片进行复位,复位就是由控制器(单片机)给 DS18B20 单总线至少 480uS 的低电平信号。当 18B20 接到此复位信号后则会在*/bitds_read_bit(void)读一位bitdat;ds=0;单片机(微处理器)将总线拉低_nop_();读时隙起始于微处理器将总线拉低至少 1usds=1;拉低总线后接着释放总线,让从机 18b20 能够接管总线,输出有效数据_nop_();_nop_();/小延时一

9、下,读取 18b20 上的数据,因为从 ds18b20 上输出的数据在读时间隙”下降沿出现 15us 内有效dat=ds;/主机读从机 18b20 输出的数据,这些数据在读时隙的下降沿出现/15us 内有效return(dat);返回有效数据1560uS 后回发一个芯片的存在脉冲。2,存在脉冲:在复位电平结束之后 1560uS 后接收存在脉冲,存在脉冲为一个经达成了基本的协议,接下来将会是控制器与/*读/写时间隙:DS1820 的数据读写是通过时间隙处理位和命令字来确认信息交换。控制器应该将数据单总线拉高,以便于在60240uS 的低电平信号。至此,通信双方已18B20 间的数据通信。)原理:

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

11、harvalue,i,j;value=0;一定别忘了给初值for(i=0;i8;i+)(j=ds_read_bit();value=(j1);/这一步的说明在一个 word 文档里面?)return(value);返回一个字节的数据)voidds_write_byte(uchardat)/写一个字节(uchari;bitonebit;一定不要忘了,onebit 是一位for(i=1;i1;由低到高传送数据if(onebit)写 1(ds=0;_nop_();_nop_();看时序图,至少延时 1us,才产生写时间隙ds=1;写时间隙开始后的 15 科 s 内允许数据线拉到高电平TempDela

12、y(5);/所有写时间隙必须最少持续 60us)else写 0(ds=0;60 科这里 64usds=1;_nop_();_nop_();)/*DS1&B2DpLhugDm主机(单片机)控制 18B20 完成温度转换要经过三个步骤:每一次读写之前都要 18B20 进行复位操作,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18b20 进行预定的操作。复位要求主 CPU 将数据线下拉 500us,然后释放,当 ds18B20 受到信号后等待 1660us,后发出 60240us 的存在低脉冲,主 CPU 收到此信号表示复位成功STARTQFSLOTSTaRTO

13、fSLOTMASTERWRITE,J0SLOTMASTERWRITESLOTMASTERREADSLOTMASTERREADTSLOT1隔 rXUNETYPELEGENDBLSIT白Mrculling旧日R白白St9rpuPup*/*进行温度转换:先初始化然后跳过 ROM:跳过 64 位 ROM 地址,直接向 ds18B20 发温度转换命令,适合单片工作发送温度转换命令*/voidtem_change()(ds_reset();delay;约 2msds_write_byte(0 xcc);/单线情况下,跳跃 ROM 指令ds_write_byte(0 x44);/温度转换指令/*获得温度:*/uintget_

温馨提示

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

最新文档

评论

0/150

提交评论