我有个延时函数
/***********************************************/
/*函数名称:delay() */
/*函数功能:延时函数,单次 25us 左右延时 */
/*入口参数:t; */
/*输出参数:无 */
/*调用函数:无 */
/*全局变量:无 */
/*局部变量:t; */
/***********************************************/
void delay(uint t)
{
for (;t>0;t--);
}
DS18B20读数据函数
uchar ds_read(void)
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();
_nop_();
value>>=1;
DQ=0;
_nop_();
_nop_();
_nop_();
_nop_();
DQ=1;
_nop_();
_nop_();
_nop_();
_nop_();
if(DQ)value|=0x80;
delay(6); !!!问题是这部 手册上说延时60微秒即可 可是这个程序 是不是延时6*25=150微秒 所以这个不对??
}
DQ=1;
return(value);
}
加油
充放电数显全套方案,双口快充慢充检测电流电压,两线三线直流电压表,配套三个8尺寸15*8MM带AV电流电压单位专利数码屏,资料QQ2981074992 邮箱同上
决定这种延时时间的因素有两个,一个是指令周期,不同的单片机指令周期不太一样,stc号称的百兆就是周期要比传统51短。还有一个是系统时钟频率,视你的具体情况定。
18b20手册上写要150微秒实际上也没那么特别的严格,时序对了才能行。
最好用设备测一下实际的脉宽。跟标准的时序对比一下。尽一下量接近标准时序。你也可以改变延时。 对比一下效果。看哪个更稳定。