| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
哪位高手用過18B20,幫我看看啊,多謝了 | 
  
| 作者:hongjun21 欄目:測控之家 | 
我用的是arm編寫的程序,如下,初始化返回值是0說明初始化成功了,但是最后讀取的值a,b總是0xff,請各位高手指點一下。 #include "config.h" #define DQ 1 << 18 /* P0.18控制 DQ */ uint8 a=0; //溫度值低位 uint8 b=0; //溫度值高位 uint16 TEMP=0; uint32 c=1; //驗證初始化是否成功 //延時t×1u秒程序 void delay1u(uint32 t) { T0TC = 0; T0PR = 0; T0MCR = 0x05; T0MR0 =t*(Fpclk/1000000); /* 1u秒鐘定時 */ T0TCR = 0x01; while((T0IR & 0x01) == 0); T0IR = 0x01; } //初始化函數(shù) uint32 Init_DS18B20(void) { IO0DIR |= DQ; IO0SET = DQ; // delay1u(48); //稍做延時 IO0CLR = DQ; //將DQ拉低 delay1u(480); //精確延時 大于 480us IO0DIR = IO0DIR&(~DQ); //拉高總線輸入 delay1u(64); c = IO0PIN&DQ; //稍做延時后 如果x!=0則初始化失敗 x=0則初始化成功 delay1u(300); return c; } //寫一個字節(jié) void WriteOneChar(uint8 dat) { uint8 i=0; for (i=8; i>0; i--) { IO0DIR |= DQ; //改回輸出 IO0CLR = DQ; delay1u(2); if(dat&0x01) { IO0DIR &= (~DQ);//釋放總線 } else { IO0CLR = DQ; } delay1u(60); IO0DIR &= (~DQ);//改回輸入 delay1u(2); dat>>=1; } } //讀一個字節(jié) uint8 ReadOneChar(void) { uint8 i=0; uint8 dat = 0; for (i=8;i>0;i--) { dat>>=1; IO0DIR |= DQ; //改回輸出 IO0CLR = DQ; // 給脈沖信號 delay1u(2); IO0DIR = IO0DIR&(~DQ); // 拉高總線輸入 delay1u(12); if(IO0PIN&DQ) dat|=0x80; delay1u(60); } return dat; } int main(void) { PINSEL1 &= 0XFFFFFFCF; //設(shè)置P0.18為通用IO while(1) { c = Init_DS18B20(); WriteOneChar(0xCC); // 跳過讀序號列號的操作 WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換 delay1u(2000000); //延時2s c = Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 a=ReadOneChar(); b=ReadOneChar(); TEMP=(b<<4)|(a>>4); } return 0; } 也可回復(fù)至我的信箱:hongjunbj@163.com 再次感謝  | 
  
| 2樓: | >>參與討論 | 
| 作者: mullife 于 2006/7/14 16:43:00 發(fā)布:
         我用過 我現(xiàn)在正在用,不過我是用匯編的。開始也用C,不過還向延時不是很精確(水平有限),用匯編就很順利了,因為他的時序要求很高。所以還是用匯編好。  | 
  |
| 3樓: | >>參與討論 | 
| 作者: again_gyf 于 2006/8/4 18:09:00 發(fā)布:
         把時序搞清楚就可以出來,你可以查看編譯后的時間啊! 把時序搞清楚就可以出來,你可以查看編譯后的時間。  | 
  |
| 4樓: | >>參與討論 | 
| 作者: huang530 于 2006/8/9 8:35:00 發(fā)布:
         我也是用匯編的  | 
  |
| 5樓: | >>參與討論 | 
| 作者: wpfhit 于 2006/8/9 14:56:00 發(fā)布:
         我用C寫的 我用C寫的 但是延時用for語句 讓變量減到零 翻譯成匯編就是djnz  | 
  |
| 6樓: | >>參與討論 | 
| 作者: spwp 于 2006/8/30 16:48:00 發(fā)布:
         哪位高手用過18B20,幫我看看啊,多謝了 嚴(yán)格按照讀寫時序,應(yīng)該問題不大。  | 
  |
| 7樓: | >>參與討論 | 
| 作者: wwg911 于 2006/8/31 8:58:00 發(fā)布:
         時序也不是太嚴(yán)格 只是有個1US應(yīng)該嚴(yán)格保證,有沒有可能被中斷  | 
  |
  | 
    
 
  | 
  
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |