新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STC12C5A60S2控制温度传感器DS18B20 c程序

STC12C5A60S2控制温度传感器DS18B20 c程序

作者:时间:2013-05-11来源:网络收藏

控制 c程序工作频率:12.000MHz
#include"REG51.H"
#include"INTRINS.H" typedefunsignedcharBYTE; sbitDQ=P3^3;//的数据口位P3.3


BYTETPH;//存放温度值的高字节
BYTETPL;//存放温度值的低字节 voidDelayXus(BYTEn);
void_Reset();
voidDS18B20_WriteByte(BYTEdat);
BYTEDS18B20_ReadByte(); voidmain()
{
DS18B20_Reset();//设备复位
DS18B20_WriteByte(0xCC);//跳过ROM命令
DS18B20_WriteByte(0x44);//开始转换命令
while(!DQ);//等待转换完成 DS18B20_Reset();//设备复位
DS18B20_WriteByte(0xCC);//跳过ROM命令
DS18B20_WriteByte(0xBE);//读暂存存储器命令
TPL=DS18B20_ReadByte();//读温度低字节
TPH=DS18B20_ReadByte();//读温度高字节 while(1);
} /**************************************
延时X微秒(@12M)
不同的工作环境,需要调整此函数
此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
**************************************/
voidDelayXus(BYTEn)
{
while(n--)
{
_nop_();
_nop_();
}
} /**************************************
复位DS18B20,并检测设备是否存在
**************************************/
voidDS18B20_Reset()
{
CY=1;
while(CY)
{
DQ=0;//送出低电平复位信号
DelayXus(240);//延时至少480us
DelayXus(240);
DQ=1;//释放数据线
DelayXus(60);//等待60us
CY=DQ;//检测存在脉冲
DelayXus(240);//等待设备释放数据线
DelayXus(180);
}
} /**************************************
从DS18B20读1字节数据
**************************************/
BYTEDS18B20_ReadByte()
{
BYTEi;
BYTEdat=0; for(i=0;i8;i++)//8位计数器
{
dat>>=1;
DQ=0;//开始时间片
DelayXus(1);//延时等待
DQ=1;//准备接收
DelayXus(1);//接收延时
if(DQ)dat|=0x80;//读取数据
DelayXus(60);//等待时间片结束
} returndat;
} /**************************************
向DS18B20写1字节数据
**************************************/
voidDS18B20_WriteByte(BYTEdat)
{
chari; for(i=0;i8;i++)//8位计数器
{
DQ=0;//开始时间片
DelayXus(1);//延时等待
dat>>=1;//送出数据
DQ=CY;
DelayXus(60);//等待时间片结束
DQ=1;//恢复数据线
DelayXus(1);//恢复延时
}
}

传感器相关文章:传感器工作原理


风速传感器相关文章:风速传感器原理
尘埃粒子计数器相关文章:尘埃粒子计数器原理


评论


相关推荐

技术专区

关闭