|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
為什么檢測不到DS18b20 |
| 作者:sealove518 欄目:工控天地 |
大家好,這是我的一個DS18B20.html">DS18B20測溫的程序,每個T0中斷到來,都讓進(jìn)行一次測溫并顯示.可是為什么檢測不到它的存在那?郁悶>>>我的晶振12M,還望大俠指點 代碼如下: T0_INT: PUSH PSW PUSH ACC CLR TF0 ;*************** Init DS18B20 ***************** LCALL INIT_1820 ;初始化 JB FLAG1,DSExist ;看是否存在 LCALL DSNExist ;不存在 JMP T0_END DSExist: LCALL RE_CONFIG ;寫暫存器 LCALL GET_TEMP ;得到溫度 ........... .......... ; DS18B20初始化程序 ;//*****************************************// INIT_1820: SETB DQ NOP CLR DQ MOV R0,#0FAH TSR1: DJNZ R0,TSR1 ; 延時500us,雙周期 SETB DQ ;釋放總線 MOV R0,#10H ;在63us內(nèi)檢測是否存在 TSR2: JNB DQ,TSR3 DJNZ R0,TSR2 ;在**us內(nèi)檢測是否DS1820存在 LJMP TSR4 ;延時 TSR3: SETB FLAG1 ;置標(biāo)志位,表示DS1820存在 LJMP TSR5 TSR4: CLR FLAG1 ;清標(biāo)志位,表示DS1820不存在 LJMP TSR7 TSR5: MOV R0,#06BH ;延時 TSR6: DJNZ R0,TSR6; 延時 TSR7: SETB DQ RET ;//*****************************************// ; 重新寫DS18B20暫存存儲器設(shè)定值 ;//*****************************************// RE_CONFIG: MOV A,#0CCH; 發(fā)SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH; 發(fā)寫暫存存儲器命令 LCALL WRITE_1820 MOV A,#00H; TH(報警上限)中寫入00H LCALL WRITE_1820 MOV A,#00H; TL(報警下限)中寫入00H LCALL WRITE_1820 MOV A,#7FH; 選擇12位溫度分辨率 LCALL WRITE_1820 RET ;//*****************************************// ; 讀出轉(zhuǎn)換后的溫度值 ;//*****************************************// GET_TEMP: MOV A,#44H; 發(fā)出溫度轉(zhuǎn)換命令 LCALL WRITE_1820 LCALL INIT_1820 MOV A,#0CCH; 跳過ROM匹配 LCALL WRITE_1820 MOV A,#0BEH; 發(fā)出讀溫度命令 LCALL WRITE_1820 LCALL READ_18200 MOV TEMPER_NUM,A;將讀出的溫度數(shù)據(jù)保存 RET ;//*****************************************// ; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù) ;//*****************************************// READ_18200: MOV R4,#2; 將溫度高位和低位從DS18B20中讀出 MOV R1,#36H; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00: MOV R2,#8 RE01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 ;延時 DJNZ R3,$ MOV C,DQ MOV R3,#23 ;延時 DJNZ R3,$ RRC A ;移到A中 DJNZ R2,RE01 MOV @R1,A ;保存溫度值 DEC R1 DJNZ R4,RE00 ;保存下一個高字節(jié) RET ;//*****************************************// ; 寫DS18B20的程序 ;//*****************************************// WRITE_1820: MOV R2,#8 CLR C W1: CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,W1 SETB DQ RET ;****************顯示1.2.3.4表示DS1820不存在********************* DSNExist: LCALL DLY500 MOV P1,#0FFH LCALL DLY1S LCALL WR123 MOV P1,#0FFH LCALL DLY1S |
| 2樓: | >>參與討論 |
| 作者: sealove518 于 2006/10/17 23:48:00 發(fā)布:
頂一下 沒有人能幫幫我么 |
|
| 3樓: | >>參與討論 |
| 作者: xugtong 于 2006/11/7 14:58:00 發(fā)布:
中斷有問題 對18B20操作時要關(guān)閉中斷的. |
|
| 4樓: | >>參與討論 |
| 作者: sealove518 于 2006/11/14 13:20:00 發(fā)布:
謝謝 我試試看 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |