⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.asm

📁 DS18B20的51汇编参考程序 DS18B20的51汇编参考程序
💻 ASM
字号:
DS18B20参考例程  
      以下程序使用Intel8031 CPU, 12MHz 晶体. DS18B20用三线接法, 数据线接至CPU的 P3.0 
      脚,并接一只4.7k电阻接至VCC
      (1).DS18B20-RESET子程序:
      RESET:   
      L0:        CLR    P3.0  ; 长英科技2000/9/27
      MOV        R2,#200
      L1:        NOP         
      DJNZ       R2,L1        ;主机发置位脉冲持续3us﹡200=600us
      SETB       P3.0         ;主机释放总线控制P3.0口改为输入口 
      MOV        R2,#30
      L4:        DJNZ R2,L4   ;DS18B20等待2us﹡30=60us
      CLR        C
      ORL        C,P3.0       ;DS18B20数据线应变低
      JC         L0           ;DS18B20没准备好,重来
      MOV        R6,#80
      L5:        ORL C,P3.0
      JC         L3           ;DS18B20数据线变高,初始化成功
      DJNZ       R6,L5        ;DS18B20数据线低电平状态可持续3us﹡80=240us
      SJMP       L0           ;初始化失败,重来
      L3:        MOV R2,#250
      L2:        DJNZ   R2,L2 ;DS18B20应答过程最少 >  480us
      RET
      (2) 写DS18B20子程序WRITE:
      WRITE: MOV        R3,#8
      WR1:     SETB        P3.0
      MOV      R4,#8
      RRC      A
      CLR      P3.0
      WR2:     DJNZ R4,WR2   ;DS18B20栽数据线变低16us
      MOV      P3.0,C     ;将命令字按位依次送给DS18B20
      MOV      R4,#20
      WR3:     DJNZ R4,WR3   ;保证整个写过程持续60us
               DJNZ R3,WR1   ;送完整个命令字节
               SETB P3.0
               RET
      (3) 读DS18B20子程序READ:
      READ: MOV       R6,#8
      RE1:  CLR       P3.0
            MOV       R4,#6
            NOP                    ;低电平持续2us
            SETB      P3.0         ;P3.0口设为输入口
      RE2:  DJNZ      R4,RE2       ;等待12us
            MOV       C,P3.0       ;主机按位读入DS18B20的数据
            RRC       A            ;数据送入A
            MOV       R5,#30
      RE3:  DJNZ      R5,RE3      ;保证读数据过程持续2us﹡30=60us 
            DJNZ      R6,RE1      ;读完8位
            MOV       TEMP,A      ;将读出值送变量TEMP保存
            SETB      P3.0
            RET
      3. 读DS18B20温度:
      READTEMP : LCALL  RESET     ;复位
      MOV A,#0CCH                 ;发SKIP ROM命令
      LCALL WRITE 
      MOV A,#44H                  ;发开始温度转换命令
      LCALL WRITE
      LCALL DELAY_1000            ;延时 1000 MS
      LCALL RESET                 ;复位
      MOV A,#0CCH                 ;发SKIP ROM命令
      LCALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOV A,#0BEH                 ;发读存储器命令
      LCALL WRITE 
      CALL READ                   ;读出温度值-1
      MOV TEMP1,TEMP
      CALL READ                   ;读出温度值-2
      MOV TEMP2,TEMP
      LCALL RESET                 ;复位
      RET                        ;------完成
      GETWD:LCALL INIT
      MOV A,#0CCH
      LCALL WRITE;发跳过ROM命令
      MOV A,#44H
      LCALL WAITE;发启动转换命令
      LCALL INIT
      MOV A,#0CCH;发跳过ROM命令
      LCALL WRITE
      MOV A,#0BEH;发读存储器命令
      LCALL READ
      MOV WDLSB,A;温度值低位字节送WDLSB
      LCALL READ
      MOV WDMSB,A;温度值高位字节送WDMSB
      4. DS18B20工作原理
        DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
      DS18B20的读写时序如下。
          PROC  WRITE
      WRITE: MOV  R2,#8
          CLR  C
      WR1:  CLR  DQ
          MOV  R7,#6
          DJNZ  R7,$
          RRC  A
          MOV  DQ,C
          MOV  R7,#23
          DJNZ  R7,$
          SETB  DQ
          NOP  
          DJNZ  R2,WR1
          SETB  DQ
          RET
      ;读一个字节,出口:A=读入的字节
          PROC  DREAD    
      DREAD: MOV  R2,#8
      READL: CLR  C
          SETB  DQ                     
          NOP
          NOP
          CLR  DQ
          NOP
          NOP
          NOP
          SETB  DQ   ;产生时间片
          MOV  R7,#7
          DJNZ  R7,$
          MOV  C,DQ
          MOV  R7,#23
          DJNZ  R7,$
          RRC  A
          DJNZ  R2,READL
          RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -