单片机课程设计报告
图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--; //拉低900us DQ=1; //释放总线
8
单片机课程设计报告
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; bit b;
DQ = 0; //读开始1us i++;
DQ = 1; //产生读时间隙15us i++; i++;
b = DQ; //读位 i = 8;
while(i>0) i--; //等待60us DQ = 1; //释放总线 return b;
9
单片机课程设计报告
}
/*---------------- 读取字节数据 ----------------*/ uchar RdByte() {
uchar i,j,d; d=0;
for(i=0;i<8;i++) //各位由低向高读出DS18B20 {
j=RdBit(); d=(j<<7)|(d>>1); }
return d; }
4.2.4.DS18B20写字节
/*---------------- 写入字节数据 ----------------*/ void WrByte(uchar d) {
uint i; uchar j; bit btmp;
for(j=0;j<8;j++) //各位由低向高写入DS18B20 {
btmp=d&0x01; d=d>>1;
if(btmp) //写1 {
DQ=0; //延时15us i++; i++;
10
单片机课程设计报告
DQ=1; //写1时隙不低于60u i=8;
while(i>0) i--; }
else //写0 {
DQ=0; i=8;
while(i>0) i--; //保持低电平60us到120us DQ=1; //释放总线 i++; i++; } } }
4.2.5.启动温度测量
/*---------------- 启动温度测量----------------*/ void Convert() {
uint i;
Delay(125); //延时1ms TxReset(); //初始化DS18B20 RxWait(); //等待DS18B20答应 Delay(125); //延时
WrByte(0xcc); //跳过ROM命令 WrByte(0x44); //温度转换命令 for(i=0;i<250;i++) //延时1s Display(); }
11

