文档介绍:数字温度计221865591
数字温度计221865591
数字温度计221865591
数字温度计
韩哲
【摘要】 本数字式温度计由AT89S1为控制器,通过DS18B20传感器检测并采集信号,把连续信号离散化,然后通过线拉高
ﻩﻩ _nop_(); //等待一个机器周期ﻩ
DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
ﻩﻩ dat>〉=1;
ﻩﻩ _nop_(); //等待一个机器周期ﻩ
DQ = 1; //将数据线"人为”拉高,为单片机检测DS18B20的输出电平作准备
ﻩﻩ for(time=0;time〈2;time++)
; //延时约6us,使主机在15us内采样
ﻩﻩﻩ if(DQ==1)
ﻩﻩﻩ dat|=0x80; //如果读到的数据是1,则将1存入dat
数字温度计221865591
数字温度计221865591
数字温度计221865591
ﻩﻩﻩ else
ﻩﻩﻩdat|=0x00;//如果读到的数据是0,则将0存入dat
ﻩﻩ //将单片机检测到的电平信号DQ存入r[i]ﻩ
ﻩ for(time=0;time〈8;time++)
; //延时3us,两个读时序之间必须有大于1us的恢复期
}ﻩ
ﻩ return(dat); //返回读出的十进制数据
}
/*****************************************************
函数功能:向DS18B20写入一个字节数据
***************************************************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
ﻩ for (i=0; i<8; i++)
{
ﻩﻩ DQ =1; // 先将数据线拉高
ﻩ _nop_();ﻩ //等待一个机器周期
ﻩﻩ DQ=0; //将数据线从高拉低时即启动写时序
DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样ﻩ
ﻩ for(time=0;time<10;time++)
; //延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
ﻩﻩ DQ=1; //释放数据线ﻩﻩ
ﻩﻩ for(time=0;time〈1;time++)
ﻩ ;//延时3us,两个写时序间至少需要1us的恢复期
ﻩﻩ dat>>=1; //将dat中的各二进制位数据右移1位
}
for(time=0;time〈4;time++)
ﻩ