DS18B20和串口通信的那点事儿笨笨剥壳_第1页
DS18B20和串口通信的那点事儿笨笨剥壳_第2页
DS18B20和串口通信的那点事儿笨笨剥壳_第3页
DS18B20和串口通信的那点事儿笨笨剥壳_第4页
DS18B20和串口通信的那点事儿笨笨剥壳_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

DS18B20和串口通信的那点事儿 笨笨剥壳DS18B20DALLAS感器,能够将温度物理量转化为数字信号,而且每个器件具有唯一的序号,因此能够实现多点测量。它的测量范围为10°C~+85°C可以到达±0.5°C。它只有三个引脚,GND、DQ、VDD,可以直接由数据线本身寄生供电,也可以承受外部供电,使用起来很便利,固然这种便利也是要付出肯定代价的,DS18B20DS18B20操作命令;处理数据。假设程序中有较多的中断,抑或是硬件连接时连线过长,都会造成时序波形的畸变,从而造成测量结果混乱,因此这种状况也使得该芯片的使用受到了肯定的限制。ProteusDQ时序状况:〔480us号0在检测到总15~60us,接着假设初始化成功,0会发出存在脉冲〔低电平,持续s。下边是之前做过的一个温度测量程序的硬件原理图,采集到1688RS232串口发送到上位机,后续的处理就交由上位机编程掌握了。这里值得留意的是DS18B20的DQ口需要接一个上拉电阻,IO20mADS18B20准确的温度转换,I/ODS18B204.7K无法转换温度或温度误差极大。KeilC51123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149#include<regx51.h>#include“intrins.h//_nop_;延时函数用#defineXTAL11059200//CUP晶振频率#definebaudrate9600//通信波特率#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^3//定义DS18B20DQsbitBEEP=P3^7;unsignedcharpresence;unsignedchardata temp_data[2]={0x00,0x00};voidbeep;bitflash=0//显示开关标记voidDelay(unsignedintnum//延时函数while(--num);}ucharInit_DS18B20(void//初始化ds1820DQ=1//DQDelay(8)//稍做延时DQ=0//单片机将DQDelay(90)//准确延时大于480usDQ=1//拉高总线Delay(8);presence=DQ//假设=0则初始化成功=1失败DQ=1;return(presence);//返回信号,0=presence,1=nopresence}ucharReadOneChar(void//读一个字节uchari;ucharvalue=0;{value>>=1;DQ=0;_nop_;_nop_;_nop_;_nop_;//4usDQ=1;_nop_;_nop_;_nop_;_nop_;//4usif(DQ)value|=0x80;Delay(6);//66us}return(value);}voidWriteOneChar(unsignedchardat//写一个字节unsignedchari=0;{DQ=0;Delay(5);DQ=1;dat>>=1;}}voidRead_Temperature(void//读取温度Init_DS18B20;if(presence==1){beep;flash=1;//DS18B20else{WriteOneChar(0xCC)//跳过读序号列号的操作WriteOneChar(0x44)//启动温度转换Init_DS18B20;WriteOneChar(0xCC)//跳过读序号列号的操作WriteOneChar(0xBE)//读取温度存放器temp_data[0]=ReadOneChar//温度低8temp_data[1]=ReadOneChar//温度高8}}voidbeep(void){unsignedchari;{Delay(60);BEEP=!BEEP//BEEP取反}BEEP=1//关闭蜂鸣器}voidinit(void){EA=1//“中断总允许“TMOD=0x20//定时器18位自动重载模式,用于产生波特率TL1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));//定时器0SCON=0x50//设定串行口工作方式PCON&=0x00//波特率不倍增TR1=1//启动定时器1IE=0x00//制止任何中断}//传送十六位的温度数据,低位在前voidsend_char(void){unsignedi=0;while(i<2){SBUF=temp_data[i];while(!TI);//等特数据传送TI=0;//去除数据传送标志i++;}}voidmain(void){ucharreceive;init;while(1){Read_Temperature//读取温度if(flash==0)

温馨提示

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

评论

0/150

提交评论