久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4041|回復: 1
打印 上一主題 下一主題
收起左側

DS18B20三線轉兩線 很簡單的方法 附單片機程序

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


電路原理圖如下:

我用的單片機是STC12C5A60S2 晶振12M   其它單片機未測試  估計也沒什么問題                                       
                                                                                
                                                                    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                          ;溫度標志位
                  
                    MAIN:                  MOV P3M1,#00000000B;                 全普通
                           MOV P3M0,#00000000B;          全普通                                                                                                     
                                                                            LCALL   RE_TEMP   ; 讀溫度  
                    MOV P3M1,#00000000B;                 P3.5強推 其余普通
          MOV P3M0,#00100000B;                 P3.5強推 其余普通                                                                                             
                                                                                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中讀出溫度低位、高位和報警值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總線讀得一個BIT
                 MOV R6,#33H;DELAY60US:   ;誤差 0us
DL9:         MOV R5,#02H
         DJNZ R5,$
         DJNZ R6,DL9
                  RRC A                ;把讀得的位值環移給A
         DJNZ R2,RE01         ;讀下一個BIT
         MOV @R1,A
         INC R1
         DJNZ R4,RE00
         RET                                                                                          
;***************************************************************     
;溫度轉換                                    
;***************************************************************                                
CONVER:                                                              
;  處理溫度 BCD 碼子程序
;****************************************************
CONVTEMP:      MOV  A,TEMPH       ;判溫度是否零下
               ANL  A,#80H
               JZ  TEMPC1         ;溫度零上轉
               CLR  C
               MOV  A,TEMPL       ;二進制數求補(雙字節)
               CPL  A             ;取反加1
               ADD  A,#01H
               MOV  TEMPL,A
               MOV  A,TEMPH       ;-
               CPL  A
               ADDC  A,#00H
               MOV  TEMPH,A          ;TEMPHC HI =符號位
               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=小數部分 BCD

               MOV  A,TEMPL             ;整數部分
               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 = 十位數 BCD
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH
               SWAP  A                  ;TEMPLC HI = 個位數 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 = 百位數 BCD
               ANL  A,#0FH
               ORL  A,R7
               MOV  TEMPHC,A
TEMPC12:       RET
;===========================================================
;顯示區 BCD 碼溫度值刷新子程序
;===========================================================
DISPBCD:      MOV  A,TEMPLC
              ANL  A,#0FH
              MOV  70H,A                 ;小數位
              MOV  A,TEMPLC
              SWAP  A
              ANL  A,#0FH
              MOV  71H,A                 ;個位
              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               ;十位數是0
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,#0AH            ;符號位不顯示
              MOV  72H,A               ;十位數顯示符號
DISPBCD2:     RET
;***************************************************************     
;顯示溫度整數部分                                    
;***************************************************************                                                                     
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;
;個位
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;
;小數
                                                          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  

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

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

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

             END

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:161115 發表于 2020-7-2 14:06 | 只看該作者
感謝樓主無私的分享,學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品在线观看 | 国产成人精品一区二区三区四区 | 日本黄色一级片视频 | 亚洲精品一区二区三区蜜桃久 | 久久久久久国产精品免费免费男同 | 欧美 日韩 国产 成人 在线 91 | 九热在线 | 国产精品一区二区三区在线播放 | 97精品国产 | 欧美一级在线免费观看 | 欧美a∨ | 中文字幕99 | 日韩在线| av一区二区三区 | 国产午夜视频 | 国产精品久久久久久久久久久久午夜片 | 久久成人在线视频 | 国产精品成人一区二区三区 | 国产一区| 亚洲视频在线看 | 视频一区二区三区在线观看 | 亚洲视频观看 | 91在线最新| 成人精品视频在线观看 | 另类视频在线 | www.99re| 欧美一级片在线看 | 狠狠色综合久久丁香婷婷 | 亚洲精品68久久久一区 | 一区二区三区精品在线 | 羞羞的视频免费观看 | 成人毛片在线视频 | 综合久久国产 | 澳门永久av免费网站 | 香蕉久久网 | 色综合网站| 亚洲成色777777在线观看影院 | 国产成人福利在线观看 | 午夜视频网站 | 欧美日本韩国一区二区三区 | 男人天堂99 |