ds1820b运行代码
时间: 2024-06-23 11:01:28 浏览: 141
DS1820B是一种数字温度传感器,它可以通过单总线接口和微控制器进行通信。下面是DS1820B的运行代码,主要包括初始化和读取温度两个部分:
初始化代码:
1. 初始化总线
2. 发送跳过ROM指令
3. 发送启动温度转换指令
读取温度代码:
1. 发送读取温度指令
2. 接收温度数据
3. 进行CRC校验
4. 将温度数据转换为实际温度值
相关代码如下(C语言):
初始化代码:
```c
#include <reg51.h>
sbit DQ = P2^3; //单总线引脚
void DelayUs(unsigned int us)
{
while(us--);
}
void DelayMs(unsigned int ms)
{
while(ms--)
{
DelayUs(1000);
}
}
unsigned char Init_DS1820B()
{
unsigned char dat;
DQ = 1; //总线拉高
DelayUs(5);
DQ = 0; //总线拉低
DelayUs(500); //延时480-960us
DQ = 1; //总线拉高
DelayUs(30);
dat = DQ; //读取总线状态
DelayUs(470); //延时60-240us
return dat;
}
void Write_DS1820B(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
DQ = 0; //总线拉低
DelayUs(5);
DQ = dat & 0x01; //发送数据
DelayUs(60);
DQ = 1; //总线拉高
dat >>= 1;
DelayUs(5);
}
}
unsigned char Read_DS1820B()
{
unsigned char i, dat=0;
for(i=0; i<8; i++)
{
DQ = 0; //总线拉低
DelayUs(5);
DQ = 1; //总线拉高
DelayUs(5);
dat >>= 1;
if(DQ) dat |= 0x80; //读取数据
DelayUs(60);
}
return dat;
}
void Start_Convert()
{
Init_DS1820B();
Write_DS1820B(0xCC); //跳过ROM指令
Write_DS1820B(0x44); //启动温度转换指令
}
```
读取温度代码:
```c
float Read_Temperature()
{
unsigned char TL, TH, Tl, Th, crc, i;
float temp;
Init_DS1820B();
Write_DS1820B(0xCC); //跳过ROM指令
Write_DS1820B(0xBE); //读取温度指令
TL = Read_DS1820B(); //读取温度低字节
TH = Read_DS1820B(); //读取温度高字节
crc = Read_DS1820B(); //读取CRC校验值
Tl = TL >> 4;
Th = TH >> 4;
temp = Th;
temp *= 16;
temp += Tl;
for(i=0; i<4; i++)
{
TL <<= 1;
if(TH & 0x01) TL |= 0x01;
TH >>= 1;
}
if(crc == (TL & 0x0F)) return temp/2; //校验通过,返回实际温度值
else return -999; //校验失败,返回错误码
}
```
阅读全文