写入的命令我肯定是写了,但是我通过调试的感觉好像18b20并没有采集或者正确采集到写入给它的命令,因为即使屏蔽掉温度转换命令,上电后直接读寄存器读出来的全是1,而不是85度对应的二进制代码。但是之前实现过功能了,没有做什么改动啊 ,时序也是按照datasheet要求弄得。写入失败的话还是可能是什么原因?这是我的写入命令的程序 麻烦你看看时间有什么问题?
for(i=0;i<8;i++)
{
DELAY_US(2);
b=dat & 0x01; //取最低位开始写入
dat>>=1;
if(b)
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO2=1; //配置为输出
EDIS;
GpioDataRegs.GPASET.bit.GPIO2=1; //置为1
DELAY_US(5);
GpioDataRegs.GPACLEAR.bit.GPIO2=1; //置为低电平0,开始写时序
DELAY_US(3);//delay(2); //1us以上
//GpioDataRegs.GPASET.bit.GPIO2=1;
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO2=0; //释放总线
EDIS;
DELAY_US(80);//delay(20);
}
else
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO2=1; //配置为输出
EDIS;
GpioDataRegs.GPASET.bit.GPIO2=1; //置为1
DELAY_US(5);
GpioDataRegs.GPACLEAR.bit.GPIO2=1; //置为低电平0,开始写时序
DELAY_US(80);//delay(100);
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO2=0; //释放总线
EDIS;
DELAY_US(2);//delay(2);
}
} //for循环结束括号
|