ds18b20.asm

来自「DS18B20的源程序,很好用的」· 汇编 代码 · 共 78 行

ASM
78
字号
DAT     EQU     P1.0

ORG     00H
JMP     GETWD

;--------------------------------------------------------------
INIT:   CLR     EA
INI10:  SETB    DAT
        MOV     R2,#200
INI11:  CLR     DAT
        DJNZ    R2,INI11    ;主机发复位脉冲持续3×200US
        SETB    DAT         ;主机释放总路线,口线改为输入
        MOV     R2,#30
INI12:  DJNZ    R2,INI12    ;等待2×30US
        CLR     C
        ORL     C,DAT       ;数据线变低
        JC      INI10       ;未准备好,重新初始化
        MOV     R6,#80
INI13:  ORL     C,DAT
        JC      INI14       ;数据线变高,初始化成功
        DJNZ    R6,INI13    ;数据线变低,可持续3×80US
        SJMP    INI10       ;初始化失败,重来
INI14:  MOV     R2,#240
INI15:  DJNZ    R2,INI15    ;应答时间最少2×240US
        RET

;--------------------------------------------------------------
WRITE:  CLR     EA
        MOV     R3,#8       ;循环8次,写一个字节
WR11:   SETB    DAT
        MOV     R4,#8
        RRC     A           ;写入位从A中移到CY
        CLR     DAT
WR12:   DJNZ    R4,WR12     ;等待16US
        MOV     DAT,C       ;命令字按位依次送给DS18B20
        MOV     R4,#20
WR13:   DJNZ    R4,WR13     ;保证写过程持续60US
        DJNZ    R3,WR11     ;示送完一个字节继续
        SETB    DAT
        RET

;--------------------------------------------------------------
READ:   CLR     EA
        MOV     R6,#8       ;循环8次,读一个字节
RD11:   CLR     DAT
        MOV     R4,#4
        NOP                 ;低电平持续2US
        SETB    DAT         ;口线设过输入
RD12:   DJNZ    R4,RD12     ;等待8US
        MOV     C,DAT       ;主机按位依次读入DS18B20的数据
        RRC     A           ;读取的数据移入A
        MOV     R5,#30
RD13:   DJNZ    R5,RD13     ;保证读过程持续60US
        DJNZ    R6,RD11     ;读完一个字节的数据,存入A中
        SETB    DAT
        RET

;-------------------------------------------------------------
GETWD:  LCALL   INIT
        MOV     A,#0CCH
        LCALL   WRITE       ;发跳过ROM命令
        MOV     A,#44H
        LCALL   WRITE       ;发启动转换命令
        LCALL   INIT
        MOV     A,#0CCH
        LCALL   WRITE
        MOV     A,#0BEH     ;发读存储器命令
        LCALL   WRITE
        LCALL   READ
        MOV     50h,A     ;温度低位字节送入WDLSB
        LCALL   READ
        MOV     51h,A     ;温度高位字节送入WDMSB
        JMP     GETWD




⌨️ 快捷键说明

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