📄 18b20.c
字号:
/********************************************
*文件名称:18B20.c
*
*摘要:1总线读DS18B20的温度值;
*入口:
*返回:温度(整数部分+1位小数)
*
*版本:V1.0 2008-9-2 13:10:36
*作者:风月无边
*
*********************************************/
#include"Main.h"
static void DelayN20us(unsigned char N) //延时函数delay(1)是10us,此晶振是20M,stc12c5410ad芯片
{
unsigned char i;
for(;N>0;N--) for(i=0;i<60;i++);
}
static void DS18B20Init(void) //初始化温度函数
{
IOTc = 0;
DelayN20us(30);
IOTc = 1;
DelayN20us(30);
}
static void DS18B20WriteData(unsigned char bData)//写字节
{
unsigned char i;
for(i=8; i>0; i--)
{
IOTc = 0;
DelayN20us(1);
IOTc=bData&0x01;
DelayN20us(1);
IOTc = 1;
bData >>= 1;
}
}
static unsigned char DS18B20ReadData(void) //读温度字节
{
unsigned char bTempData;
unsigned char i;
for(i=8; i>0; i--)
{
bTempData >>= 1;
IOTc = 0;
IOTc = 1;
DelayN20us(1);
if(IOTc) bTempData |= 0x80;
else bTempData &= 0x7f;
DelayN20us(1);
IOTc = 1;
}
return(bTempData);
}
static bit s_bitConvertFlag;
void GetTemperature(void) //得到温度函数
{
unsigned char cDataH,cDataL;
EA = 0;
DS18B20Init();
DS18B20WriteData(0xcc); //跳过ROM
if(s_bitConvertFlag)
{
s_bitConvertFlag = 0;
DS18B20WriteData(0xbe); //读数据
cDataL = DS18B20ReadData();
cDataH = DS18B20ReadData();
g_CapData.nTc1 = (cDataH<<4|cDataL>>4)*10+(((cDataL&0x0f)*10)>>4); //整数部分,小数部分1位
g_CapData.nTc2 = 0; //
}
else
{
s_bitConvertFlag = 1;
DS18B20WriteData(0x44); //启动转换
}
EA = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -