DS18B20读写时序问题
发布网友
发布时间:2022-04-23 18:40
我来回答
共1个回答
热心网友
时间:2023-10-13 08:28
uchar init_DS18B20()
{
uchar error;
DQ=1;
DQ=0;
delay(81);
DQ=1;
delay(8);
if(DQ==1)
error=1;
else
error=0;
delay(12);
DQ=1;
return error;
}
void write_ds18b20(uchar date)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=date&0x01;
delay(8);
date=date>>1;
}
DQ=1;
}
uchar read_ds18b20()
{
uchar i=0,temp;
for(i=0;i<8;i++)
{
temp=temp>>1;
DQ=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(DQ==1)
temp=temp|0x80;
delay(12);
}
DQ=1;
return temp;
}
void delay(uint t)
{
while(t--);
}
//sbit DQ=P2^7;
不完全是 初始化也很重要 这是时序图的必要程序 希望能帮到你 显示还有算法自己好好研究吧 呵呵 必定自己完成才好 祝你成功 nop_();是调用的函数库文件#include<intrins.h>
一个是1us我记得。