单片机课程设计报告(数字温度计) - 图文 联系客服

发布时间 : 星期二 文章单片机课程设计报告(数字温度计) - 图文更新完毕开始阅读d1028e3e0622192e453610661ed9ad51f01d547f

初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

斜率增加器预置τ1比较低温度系数振荡器计数器 1加 1预置Txτ2= 0高温度系数振荡器计数器 2温度寄存器= 0图3.3.3 DS18B20测温原理图

停止 在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:

(Tz?0.25℃)?(CD-Cs)/CD Ts?3.4 温度传感器接口电路

图3.4.1温度传感器接口电路

4 系统的软件设计

4.1 主程序

/*------------------ 主函数 --------------------*/ void main() { while(1)

{ } }

Convert(); //调用启动温度转换函数 RdTemp(); //调用读取温度值函数

4.2 温度测量

4.2.1 初始化DS18B20

/*--------------- 初始化DS18B20 ----------------*/ void TxReset() { uint i;

DQ=0; //发送复位脉冲 i=100; while(i>0) i--; i=4;

while(i>0) i--; }

4.2.2 等待应答信号

/*-------------- 等待DS18B20应答 ---------------*/ void RxWait() { uint i;

while(DQ); //等待15-60us

while(~DQ); //DS18B20发出存在脉冲60-240us i=4; while(i>0) i--; }

4.2.3 DS18B20读字节

/*---------------- 读取一位数据 ----------------*/ bit RdBit() { uchar i;

//拉低900us

DQ=1; //释放总线

bit b;

DQ = 0; //读开始1us i++;

DQ = 1; //产生读时间隙15us i++; i++;

b = DQ; //读位 i = 8;

while(i>0) i--; //等待60us DQ = 1; //释放总线 return b; }

/*---------------- 读取字节数据 ----------------*/ uchar RdByte() {

uchar i,j,d; d=0;

for(i=0;i<8;i++) //各位由低向高读出DS18B20 { } return d; }

4.2.4 DS18B20写字节

/*---------------- 写入字节数据 ----------------*/ void WrByte(uchar d) { uint i; uchar j; bit btmp;

for(j=0;j<8;j++) //各位由低向高写入DS18B20 {

j=RdBit(); d=(j<<7)|(d>>1);