找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4082|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

DS18B20三線轉(zhuǎn)兩線 很簡(jiǎn)單的方法 附單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
利用寄生電容的方法不會(huì)用 就想到了這個(gè)方法  方法很簡(jiǎn)單  加入二極管和電容就可以(如圖)   不開強(qiáng)推電壓在2.4V左右 18B20也能工  開強(qiáng)推后電壓在3.7V左右  我不知道我用的二芯電線多長(zhǎng)  耗電小壓降應(yīng)該沒(méi)多少
讀取溫度前把IO設(shè)置成普通模式   讀取后設(shè)置成強(qiáng)推 快速給電容充電     
制作出來(lái)的實(shí)物圖如下:


電路原理圖如下:

我用的單片機(jī)是STC12C5A60S2 晶振12M   其它單片機(jī)未測(cè)試  估計(jì)也沒(méi)什么問(wèn)題                                       
                                                                                
                                                                    P3M1 EQU 0B1H
                                        P3M0 EQU 0B2H  
                                                
                                            DQ      BIT      P3.5;   18b20                                                                                 
                                                                            TEMPL       DATA  26H                    
                                                                                TEMPH       DATA  27H        
                                                                                                                                                                                       
                                                                                TEMPHC      DATA  2AH
                                        TEMPLC      DATA  2BH
                                                                                TEMP_ZH     DATA  2CH

                                                                                FLAG    EQU      6EH                          ;溫度標(biāo)志位
                  
                    MAIN:                  MOV P3M1,#00000000B;                 全普通
                           MOV P3M0,#00000000B;          全普通                                                                                                     
                                                                            LCALL   RE_TEMP   ; 讀溫度  
                    MOV P3M1,#00000000B;                 P3.5強(qiáng)推 其余普通
          MOV P3M0,#00100000B;                 P3.5強(qiáng)推 其余普通                                                                                             
                                                                                LCALL   CONVER    ; 處理溫度  
                                                                                LCALL   DISPBCD    ; BCD 碼溫度值                                                                                          
                                                                                LCALL   DISPLAY_INT ; 顯示溫度                                                                                                                                                                LJMP MAIN
;***************************************************************     
;溫度讀取                                   
;************************************************************  ***                                 
                                        RE_TEMP:                                                            
                                                                                SETB      DQ                                                              
                                                                                ACALL                  INIT_18B20                                                   
                                                                                JB                          FLAG, ST                                                         
                                                                                RET                                                                  
                                        ST:                                                                  
                                                                                MOV                         A, #0CCH                                                        
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                MOV                          A, #44H                                                         
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                ACALL                  INIT_18B20                                                   
                                                                                MOV                          A, #0CCH                                                        
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                MOV                          A, #0BEH                                                        
                                                                                ACALL                 WRITE_18B20                                                   
                                                                                ACALL                 READ_18B20                                                   
                                                                                RET   
;***************************************************************     
;寫DS18B20                                   
;***************************************************************                                   
                                        WRITE_18B20:                                                         
                                                                                MOV                   R2, #8                                                         
                                                                                CLR                   C                                                               
                                                   WR1:          CLR                   DQ                                                              
                                                                                  MOV R6,#01H        ;        DELAY2US:   ;誤差 0us
                               DL4:            MOV R5,#03H
                                        DJNZ R5,$
                                        DJNZ R6,DL4
                                        RRC                   A                                                               
                                                                                MOV                   DQ, C                                                           
                                                                                 MOV R6,#33H          ;DELAY60US:   ;誤差 0us
                               DL5:            MOV R5,#02H
                                        DJNZ R5,$
                                        DJNZ R6,DL5
                                                                            SETB                  DQ                                                            
                                                                                 MOV R6,#01H;        DELAY2US:   ;誤差 0us
                               DL6:            MOV R5,#03H
                                        DJNZ R5,$
                                        DJNZ R6,DL6
                                                                             DJNZ                  R2, WR1                                                        
                                                                                SETB                  DQ                                                            
                                                                                RET                                                                                                                                                         
;***************************************************************     
;初始化DS18B20                                
;***************************************************************                                
                                        INIT_18B20:                                                         
                                                                                SETB      DQ                                                            
                                                                                MOV R6,#01H;DELAY2US:   ;誤差 0us
                               DL1:            MOV R5,#03H
                                        DJNZ R5,$
                                        DJNZ R6,DL1
                                                                                 CLR                   DQ                                                              
                                                                                 MOV R6,#6FH; DELAY500US:   ;誤差 0us
                               DL2:            MOV R5,#0CH
                                        DJNZ R5,$
                                        DJNZ R6,DL2
                                        SETB                  DQ                                                            
                                                                                MOV R6,#33H;DELAY60US:   ;誤差 0us
                               DL3:                MOV R5,#02H
                                        DJNZ R5,$
                                        DJNZ R6,DL3
                                                                                 NOP;                                                                                                  
                                                                                MOV                   R0, #25H                                                        
                                        T2:                 JNB       DQ, T3                                                         
                                                                                DJNZ      R0, T2                                                         
                                                                                JMP       T4                                                              
                                    T3:                        SETB      FLAG                                                           
                                                                                JMP       T5                                                              
                                        T4:                 CLR       FLAG                                                            
                                                                                JMP       T7                                                              
                                        T5:                 MOV       R0, #117                                                        
                                        T6:                 DJNZ      R0, T6                                                         
                                        T7:                 SETB      DQ   
                                                                            MOV R6,#6FH; DELAY500US:   ;誤差 0us
                               DL11:        MOV R5,#0CH
                                        DJNZ R5,$
                                        DJNZ R6,DL11
                                                          RET                                                                  
                                                                                
;***************************************************************     
;讀DS18B20                                 
;***************************************************************                                                                                          
;從DS18B20中讀出溫度低位、高位和報(bào)警值TH、TL
;存入26H、27H、28H、29H
;============================================================
READ_18B20:  
         MOV R4,#4            ; 將溫度高位和低位從DS18B20中讀出
         MOV R1,#26H          ; 存入26H、27H、28H、29H
RE00:    MOV R2,#8
RE01:    CLR C
       ;  SETB DQ
        ;         MOV R6,#01H;        DELAY2US:   ;誤差 0us
;DL10:         MOV R5,#03H
;         DJNZ R5,$
;         DJNZ R6,DL10
                  CLR DQ         ;讀前總線保持為低
                  MOV R6,#01H;        DELAY2US:   ;誤差 0us
DL7:         MOV R5,#03H
         DJNZ R5,$
         DJNZ R6,DL7
                  SETB DQ        ;開始讀總線釋放
                  MOV R6,#03H;DELAY10US:   ;誤差 0us
DL8:         MOV R5,#08H
         DJNZ R5,$
         DJNZ R6,DL8
                  MOV C,DQ      ;從DS18B20總線讀得一個(gè)BIT
                 MOV R6,#33H;DELAY60US:   ;誤差 0us
DL9:         MOV R5,#02H
         DJNZ R5,$
         DJNZ R6,DL9
                  RRC A                ;把讀得的位值環(huán)移給A
         DJNZ R2,RE01         ;讀下一個(gè)BIT
         MOV @R1,A
         INC R1
         DJNZ R4,RE00
         RET                                                                                          
;***************************************************************     
;溫度轉(zhuǎn)換                                    
;***************************************************************                                
CONVER:                                                              
;  處理溫度 BCD 碼子程序
;****************************************************
CONVTEMP:      MOV  A,TEMPH       ;判溫度是否零下
               ANL  A,#80H
               JZ  TEMPC1         ;溫度零上轉(zhuǎn)
               CLR  C
               MOV  A,TEMPL       ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié))
               CPL  A             ;取反加1
               ADD  A,#01H
               MOV  TEMPL,A
               MOV  A,TEMPH       ;-
               CPL  A
               ADDC  A,#00H
               MOV  TEMPH,A          ;TEMPHC HI =符號(hào)位
               MOV  TEMPHC,#0BH
               SJMP  TEMPC11

TEMPC1:        MOV  TEMPHC,#0AH     ;
TEMPC11:       MOV  A,TEMPHC
               SWAP  A
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH             ;乘0.0625
               MOV  DPTR,#TEMPDOTTAB
               MOVC  A,@A+DPTR
               MOV  TEMPLC,A            ;TEMPLC  LOW=小數(shù)部分 BCD

               MOV  A,TEMPL             ;整數(shù)部分
               ANL  A,#0F0H
               SWAP  A
               MOV  TEMPL,A
               MOV  A,TEMPH
               ANL  A,#0FH
               SWAP  A
               ORL  A,TEMPL
               MOV  TEMP_ZH,A           ;組合后的值存入TEMP_ZH
               LCALL  HEX2BCD1
               MOV  TEMPL,A
               ANL  A,#0F0H
               SWAP  A
               ORL  A,TEMPHC            ;TEMPHC LOW = 十位數(shù) BCD
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH
               SWAP  A                  ;TEMPLC HI = 個(gè)位數(shù) BCD
               ORL  A,TEMPLC
               MOV  TEMPLC,A
               MOV  A,R7
               JZ  TEMPC12
               ANL  A,#0FH
               SWAP  A
               MOV  R7,A
               MOV  A,TEMPHC            ;TEMPHC HI = 百位數(shù) BCD
               ANL  A,#0FH
               ORL  A,R7
               MOV  TEMPHC,A
TEMPC12:       RET
;===========================================================
;顯示區(qū) BCD 碼溫度值刷新子程序
;===========================================================
DISPBCD:      MOV  A,TEMPLC
              ANL  A,#0FH
              MOV  70H,A                 ;小數(shù)位
              MOV  A,TEMPLC
              SWAP  A
              ANL  A,#0FH
              MOV  71H,A                 ;個(gè)位
              MOV  A,TEMPHC
              ANL  A,#0FH
              MOV  72H,A                 ;十位
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,A                 ;百位
              MOV  A,TEMPHC
              ANL  A,#0F0H
              CJNE  A,#010H,DISPBCD0
              SJMP  DISPBCD2
;========================================
DISPBCD0:     MOV  A,TEMPHC
              ANL  A,#0FH
              JNZ  DISPBCD2               ;十位數(shù)是0
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,#0AH            ;符號(hào)位不顯示
              MOV  72H,A               ;十位數(shù)顯示符號(hào)
DISPBCD2:     RET
;***************************************************************     
;顯示溫度整數(shù)部分                                    
;***************************************************************                                                                     
DISPLAY_INT:   
;百位                                                                                 
                                                          MOV A,73H;
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.4
                                                          CALL  XSYS
                                                          SETB P1.4;
;十位
DIST:                                                     MOV A,72H;   
                                              MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.5
                                                          CALL  XSYS
                                                          SETB P1.5;
;個(gè)位
DISY:                                               MOV A,71H;                                          
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.6
                                                          CLR P0.7
                                                          CALL  XSYS
                                                          SETB P0.7;
                                                          SETB P1.6;
;小數(shù)
                                                          MOV A,70H;
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.7
                                                          CALL  XSYS
                                                          SETB P1.7;
                                                                                                                                                                                                                                                         
                        RET                                                                  

;===================================================================
DELAY10MS:                        ;@11.0592MHz
        NOP
        NOP
        NOP
        MOV R0,#87
        MOV R1,#10
NEXT:
        DJNZ R1,NEXT
        DJNZ R0,NEXT
        RET  

;顯示延時(shí)
XSYS:
DELAY200US:   ;誤差 0us
    MOV R6,#0ABH
DLA:
    MOV R5,#02H
    DJNZ R5,$
    DJNZ R6,DLA
    RET

;***************************************************************
;單字節(jié)十六進(jìn)制轉(zhuǎn) BCD
;******************************************************
HEX2BCD1:   MOV  B,#064H         
            DIV  AB               
            MOV  R7,A            
            MOV  A,#0AH
            XCH  A,B
            DIV  AB               
            SWAP  A
            ORL  A,B
            RET
;***************************************************************
; 數(shù)據(jù)查表
;***************************************************************                                       
          TAB:           DB  0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h,0FFH,0BFH; ;共陽(yáng)
                         ;                0         1          2           3        4   5        6        7         8         9         空           -
        
;  小數(shù)部分碼表
;-----------------------------------------------------------
TEMPDOTTAB:  DB   00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
             DB   06H,07H,08H,08H,09H,09H

;====================================================

             END

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161115 發(fā)表于 2020-7-2 14:06 | 只看該作者
感謝樓主無(wú)私的分享,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表