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