给#include onewireh sbit DQ = P1^0; 单总线接口 单总线延时函数void Delay_OneWireunsigned int t STC89C52RC whilet--; 通过单总线向DS18B20写一个字节void Write_DS18B20unsigned char dat unsigned char i; fori=0;i8;i++ DQ = 0;
#include "onewire.h"
sbit DQ = P1^0; //单总线接口
//单总线延时函数 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); // 等待t个时钟周期 }
//通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; // 拉低总线 DQ = dat&0x01; // 写入数据的最低位 Delay_OneWire(5); // 延时5个时钟周期 DQ = 1; // 释放总线 dat >>= 1; // 数据右移一位,准备写入下一位 } Delay_OneWire(5); // 延时5个时钟周期 }
//从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0; // 拉低总线
dat >>= 1; // 数据右移一位,准备读取下一位
DQ = 1; // 释放总线
if(DQ)
{
dat |= 0x80; // 如果总线为高电平,则将最高位置1
}
Delay_OneWire(5); // 延时5个时钟周期
}
return dat;
}
//DS18B20设备初始化 bit init_ds18b20(void) { bit initflag = 0;
DQ = 1; // 释放总线
Delay_OneWire(12); // 延时12个时钟周期
DQ = 0; // 拉低总线
Delay_OneWire(80); // 延时80个时钟周期
DQ = 1; // 释放总线
Delay_OneWire(10); // 延时10个时钟周期
initflag = DQ; // 读取总线状态,如果为高电平则初始化失败
Delay_OneWire(5); // 延时5个时钟周期
return initflag;
} 写注释: // 单总线接口 sbit DQ = P1^0;
// 单总线延时函数 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); // 等待t个时钟周期 }
// 通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; // 拉低总线 DQ = dat&0x01; // 写入数据的最低位 Delay_OneWire(5); // 延时5个时钟周期 DQ = 1; // 释放总线 dat >>= 1; // 数据右移一位,准备写入下一位 } Delay_OneWire(5); // 延时5个时钟周期 }
// 从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0; // 拉低总线
dat >>= 1; // 数据右移一位,准备读取下一位
DQ = 1; // 释放总线
if(DQ)
{
dat |= 0x80; // 如果总线为高电平,则将最高位置1
}
Delay_OneWire(5); // 延时5个时钟周期
}
return dat;
}
// DS18B20设备初始化 // 返回值为初始化状态,如果为0则初始化成功,否则失败 bit init_ds18b20(void) { bit initflag = 0;
DQ = 1; // 释放总线
Delay_OneWire(12); // 延时12个时钟周期
DQ = 0; // 拉低总线
Delay_OneWire(80); // 延时80个时钟周期
DQ = 1; // 释放总线
Delay_OneWire(10); // 延时10个时钟周期
initflag = DQ; // 读取总线状态,如果为高电平则初始化失败
Delay_OneWire(5); // 延时5个时钟周期
return initflag;
原文地址: http://www.cveoy.top/t/topic/hyCC 著作权归作者所有。请勿转载和采集!