微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个函数有问题没?

这个函数有问题没?

时间:10-02 整理:3721RD 点击:
下面的函数是我在一个C51单片机学习视频里看到的,最后几个语句是检测DS1302是否有应答,这里设置的时间是否有点儿短了,在总线转入高电平时单片机只等待了30us就进行检测DQ的电平,而DS1302的说明资料里是“在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲” 。求助!

以下是DS18B20的操作程序
************************************************************************/
sbit DQ=P3^3;
unsigned char time;   //设置全局变量,专门用于严格延时
/*****************************************************
函数功能:将DS18B20传感器初始化,读取应答信号
出口参数:flag
***************************************************/
bit Init_DS18B20(void)
{
bit flag;         //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在
DQ = 1;           //先将数据线拉高
for(time=0;time<2;time++) //略微延时约6微秒
     ;
DQ = 0;           //再将数据线从高拉低,要求保持480~960us
for(time=0;time<200;time++)  //略微延时约600微秒
     ;         //以向DS18B20发出一持续480~960us的低电平复位脉冲
DQ = 1;           //释放数据线(将数据线拉高)
  for(time=0;time<10;time++)
     ;  //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
flag=DQ;          //让单片机检测是否输出了存在脉冲(DQ=0表示存在)      
for(time=0;time<200;time++)  //延时足够长时间,等待存在脉冲输出完毕
      ;
return (flag);    //返回检测成功标志
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top