因为DS18B20 是单总线,按照常规思维,DS18B20 的 DQ 引脚模式是要在输入和推挽输出之间切换的。但是这样太麻烦了,所以我们直接将 DS18B20 的 DQ 引脚模式设置为开漏输出 + 上拉,这样就不用再设置 IO 方向了。开漏输出的时候(=1) 也可以读取外部信号的高低电平。 剩下的就是按照初始化时序编写代码。 void DS18B20...
u8 DS18B20_Read_Bit(void){DS18B20_IO_OUT(); // 设置IO为输出模式DS18B20_DQ_OUT = 1; // 控制数据线为高电平DS18B20_DQ_IN = 0; // 等待数据线变为低电平,表示DS18B20已响应DS18B20_DQ_OUT = 0; // 释放数据线控制权// 稍作延时,确保DS18B20有足够的时间响应return DS18B20_DQ_IN; // 返回读...
产生的上升沿能被DS18B20检测到delay_us(15);//延时15us之后,等待DS18B20发送的低电平信号到达。}//等待DS18B20的回应//返回1:未检测到DS18B20的存在//返回0:存在u8DS18B20_Check(void){u8 retry=0;DS18B20_IO_IN();//总线设置为输入模式
1.硬件原理 下图是我们温度传感器的接入引脚, 3.3V 供电, io 口接 P13 的 GP0( GPIO0 的简称 )。DS18B20 数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式, 磁铁吸附式,不锈钢封装式,型号多种多样,有 LTM8877 ,LTM8874 等等。主要根据应 用场合的不同而改变其外观。封装后的 DS...
因为DS18B20 是单总线,按照常规思维,DS18B20 的 DQ 引脚模式是要在输入和推挽输出之间切换的。但是这样太麻烦了,所以我们直接将 DS18B20 的 DQ 引脚模式设置为开漏输出 + 上拉,这样就不用再设置 IO 方向了。开漏输出的时候(=1) 也可以读取外部信号的高低电平。
Ds18b20IO_IN();//SET PA0 INPUT while (Ds18b20DQ_IN&&retry<200) { retry++; DelayUs(1); }; if(retry>=200)return 1; else retry=0; while (!Ds18b20DQ_IN&&retry<240) { retry++; DelayUs(1); }; if(retry>=240)return 1;
DS18B20默认工作在12位分辨率模式,转换后得到的12位数据,存储在DS18B20的两个8比特的RAM中(最前面的两个字节),二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。或者使用位运...
//DS18B20 IO口输入 #define DS18B20_IN PBin(15) //函数声明 u8 DS18B20_CleckAck(void); u8 DS18B20_CheckDevice(void); void DS18B20_Init(void); u16 DS18B20_ReadTemp(void); u8 DS18B20_ReadByte(void); void DS18B20_WriteByte(u8 cmd); ...
DS18B20_DQ_IN&&retry<240)//继续读取电平,如果IO口是高电平,则是正常的 { retry++; delay_us(1); }; if(retry>=240) {//通讯有误,返回1 return 1; } return 0;//通讯正常,返回0 } //从DS18B20读取一个位 //作用:读取一个位数据,重复调用该函数可以把温湿度数据读出来 //返回值:1/0 u8 ...
但是这样太麻烦了,所以我们直接将 DS18B20 的 DQ 引脚模式设置为开漏输出 + 上拉,这样就不用再设置 IO 方向了。开漏输出的时候(=1) 也可以读取外部信号的高低电平。 剩下的就是按照初始化时序编写代码。 void DS18B20_Rst(void) { DS18B20_DQ_OUT_LOW; //拉低总线并延时750us delay_us(750); DS18B20_DQ...