📄 ds18b20.h
字号:
/*********************************************************************
目 的: 建立18B20操作库
目标系统: 基于任何兼容C51的微处理器
应用软件: Keil C
版 本: Version 2.0
收集时间: 2008-08-08
开发人员: 慧净网上收集整理(感谢能放在网上共享的朋友们,功德无量,有你们,中国会更强大)
说 明: 版权:慧净助学产品(包括程序源码,硬件资源)没有版权,欢迎复制共享,功德无量,为中国自动化与单片事业作一点功劳。部分源码技术资料、软件、来源网络,如有伤害到你的利益请来邮:hjmcu@163.com 我们的助学会员会定期删除,谢谢你的理解与支持。
助学小店:http://shop37031453.taobao.com/
慧净空间:http://hi.baidu.com/hjmcu
助学QQ: 121350852
*********************************************************************/
*********************************************************************/
/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
版本更新记录:
版 本: Version 1.1
圆版时间: 2005-03-25
----------------------------------------------------------------------
入口参数说明:
sbit DS18B20_IO = P1^3;
----------------------------------------------------------------------
待定参数说明:
#define DELAY() {NOP();NOP();NOP();NOP();}
----------------------------------------------------------------------
对外变量说明:
bool DS18B20Err;
----------------------------------------------------------------------
对外函数说明:
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/
#ifndef DS18B20_H
#define DS18B20_H
#include "D:\C51_H\CmmC51.H"
//sbit DS18B20_IO = P1^3;
#define TRUE 1
#define FALSE 0
bool DS18B20Err = FALSE; //DS18B20Err=1:DS18B20错误,DS18B20Err=0:DS18B20正常
#define DELAY() {NOP();NOP();NOP();NOP();}
/*--------------------------------------------------------------------
函数名称:DS18B20复位
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void reset(void)
{
DS18B20_IO=0;
delay50us(12);
DS18B20_IO=1;
}
/*--------------------------------------------------------------------
函数名称:DS18B20检测存在脉冲
函数功能:
注意事项:无
提示说明:无
全局变量:DS18B20Err
返 回:无
--------------------------------------------------------------------*/
void checkPre(void)
{
uint8 i;
//while(DS18B20_IO);
for(i=0;i<100;i++)
{
if(~DS18B20_IO)
break;
}
if(i==100)
{
DS18B20Err=TRUE;
return ; //万一出现DS18B20错误,也不至于出现程序阻塞
}
//while(~DS18B20_IO);
for(i=0;i<100;i++)
{
if(DS18B20_IO)
{
DS18B20Err=FALSE;
return ;
}
}
}
/*--------------------------------------------------------------------
函数名称:DS18B20读一个位
函数功能:
注意事项:外挂11.0592-12M晶振
提示说明:无
输 入:
返 回:一个位
--------------------------------------------------------------------*/
bool readBit(void)
{
bool dat;
DS18B20_IO=0;
DELAY();
DS18B20_IO=1;
DELAY();
DELAY();
dat=DS18B20_IO;
return(dat);
}
/*--------------------------------------------------------------------
函数名称:DS18B20读一个字节
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:一个字节
--------------------------------------------------------------------*/
uint8 readByte(void)
{
uint8 i,j,dat=0;
for(i=1;i<=8;i++)
{
j=readBit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
/*--------------------------------------------------------------------
函数名称:DS18B20写一个字节
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void writeByte(uint8 dat) //reentrant
{
uint8 j;
//uint8 testb; //用 'uint8 testb',Keil c 可能将生成错误的HEX文件
bool testb; //造成仿真正确,而已烧片错误
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb!=0)
{
DS18B20_IO=0;
DELAY();
DELAY();
DS18B20_IO=1;
delay50us(1);
}
else
{
DS18B20_IO=0;
delay50us(1);
DS18B20_IO=1;
DELAY();
DELAY();
}
}
}
/*--------------------------------------------------------------------
函数名称:DS18B20(1个)开始转换
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void DS18B20_startup(void)
{
reset();
checkPre();
delay50us(1);
writeByte(0xcc);
writeByte(0x44);
}
/*--------------------------------------------------------------------
函数名称:DS18B20(n个)开始转换
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
/*
void DS18B20_nStartup(void)
{
}
*/
/*--------------------------------------------------------------------
函数名称:DS18B20(1个)读温度
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:温度
--------------------------------------------------------------------*/
uint8 DS18B20_getTmp(void)
{
sint16 y;
reset();
checkPre();
delay50us(1);
writeByte(0xcc);
writeByte(0xbe);
y=readByte();
y+=readByte()*256;
if(y<0)
y=0xffff-y+1;
y>>=4; //相当于 y/=16;
return (uint8)y;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -