首先要檢查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 復位成功,繼續(xù)下一步
- 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;
- }
復制代碼
|