?? ds18b20.h
字號:
/*********************************************************************
微 雪 電 子 WaveShare http://www.waveShare.net
目 的: 建立DS18B20操作庫
目標系統: 基于任何兼容C51的微處理器
應用軟件: Keil C
版 本: Version 1.0
圓版時間: 2004-08-25
開發人員: SEE
說 明: 若用于商業用途,請保留此段文字或注明代碼來源
深 圳 微 雪 電 子 保 留 所 有 的 版 權
*********************************************************************/
/*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 = P0^1;
#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 + -