首先要检查DS18B20是否能初始化,否则你以后的读写都没意义。我的初始化程序如下- BOOL InitDS18B20 ()
- {
- BYTE presence=1;
- BYTE tryTimes;
-
- tryTimes = 0;
- while(presence && tryTimes < 3)
- {
- PIN_OUT(AIRTEMP);
- PIN_ON(AIRTEMP);
- tryTimes++;
- tryTimes--;//从高拉倒低
- PIN_OFF(AIRTEMP);
- delay(300); //500 us
- PIN_ON(AIRTEMP);
- delay(20); //34 us
- PIN_IN(AIRTEMP,0);
- presence=PIN_GET(AIRTEMP); //presence=0 复位成功,继续下一步
- tryTimes++;
- }
- delay(300); //延时500 us
- PIN_OUT(AIRTEMP);
- PIN_ON(AIRTEMP);; //拉高电平
-
- // if (presence == 0) { ledFlickTimes = 10; return TRUE; }
- // else {ledFlickTimes = 5; return FALSE; }
- if (presence == 0)
- {
- ifNotDS18B20 = 0;
- MemoryPutByte((WORD)&nvmApplDescriptor.EE_IFNOTDS18B20_far,ifNotDS18B20);
- return TRUE;
- }
- else
- {
- ifNotDS18B20 = 1;
- MemoryPutByte((WORD)&nvmApplDescriptor.EE_IFNOTDS18B20_far,ifNotDS18B20);
- }
- return FALSE;
- }
复制代码
|