📄 18b20程序段.c
字号:
// #include <AT89X52.H>
#include <REG52.H>
#include <INTRINS.h>
unsigned char displaybuf[4]={0,0,0,0};
unsigned char readdata[2];
sbit DQ=P2^6; //选P3.7口与DS18B20的数字信号输出端DQ相连
bit resetpulse(void) //DS18B20初始化实现对DS18B20的复位
{ bit pre;
unsigned char i;
DQ=0; //发出复位脉冲,将数据线下拉480μS-960μS
for(i=220;i>0;i--); //(改!!!!!!!!!!!!!!!!!!!!)
DQ=1; //DS18B20等待15μS-60μS
for(i=60;i>0;i--);
pre=DQ;
for(i=150;i>0;i--);
return(pre); // DS18B20返回60μS-240μS存在低脉冲,判断是否准备好接受或发送数据
}
void writecommandtods18b20(unsigned char command) //写时序
{
unsigned char i;
unsigned char j;
for(i=0;i<8;i++)
{
if((command & 0x01)==0) //写0时序
{
DQ=0; //拉低单总线至少60μS,保证DS18B20在15μS-45μS时可以正确地采样I/O总线上的低电平
for(j=35;j>0;j--);
DQ=1;
}
else //写1时序
{
DQ=0; //拉低单总线后,在15us之内就得释放
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
unsigned char readdatafromds18b20(void) //读时序
{
unsigned char i;
unsigned char j;
unsigned char temp;
temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
DQ=0; //单总线拉低后,读时序开始
_nop_();
_nop_();
DQ=1; //停止将数据线拉低,以读取数据
for(j=10;j>0;j--);
if(DQ==1)
{
temp=temp | 0x80;
}
else
{
temp=temp | 0x00;
}
for(j=20;j>0;j--); ////////////////////(改!!!!!!!!!!!!)
}
return(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -