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

📄 读18b20序列号.asm

📁 用DS18B20实现多点和单点测温
💻 ASM
字号:
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        LU1 EQU 50H
        LU2 EQU 60H      ;读第二个1820数据不许地址
        SHU BIT P3.0     ;595的输入数据
        CP BIT P3.1      ;595的CP
        LATCH EQU P1.7 ;595放数
        DAT BIT P1.6     ;18B20的数据端
        TH EQU 100       ;高温报警点100
        TL EQU 0         ;低温报警点0
        WDG8  DATA 23H    ;温度高8位
        WDD8  DATA 24H    ;温度低8位
        WDXS1 DATA 33H   ;;用三位温度显示
        WDXS2 DATA 34H
        WDXS3 DATA 35H
        LUXS  DATA 22H    ;;显示路数
        K1 BIT P3.1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ORG 0000H
        LJMP START
        ORG 0030H
START:  LCALL CRAM
        CLR LATCH

MAIN:  LCALL INT       ;初始化
        LCALL RESET
        MOV A,#33H      ;READ ROM
        LCALL WRITE
        MOV R0,#30H
        MOV R3,#08H
RRRRR:  LCALL READ
        MOV @R0,A
        INC R0
        DJNZ R3,RRRRR        
        LJMP  MAIN



        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT:    LCALL RESET     ;初始化
        MOV A,#0CCH     ;跳过ROM
        LCALL WRITE
        MOV A,#4EH      ;写暂存存储器
        LCALL WRITE
        MOV A,#TH       ;高温报警点
        LCALL WRITE
        MOV A,#TL       ;低温报警点
        LCALL WRITE
        MOV A,#7FH      ;取12位精度
        LCALL WRITE

        LCALL RESET ;调用初使化子程序
        MOV A,#0CCH
        LCALL WRITE ;送入跳过ROM命令
        MOV A, #44H
        LCALL WRITE ;送入温度转换命令
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READT:  MOV A,#0BEH
        LCALL WRITE ;送入读温度暂存器命令
        LCALL READ
        MOV 24H,A ;读出温度值低字节存入24H
        LCALL READ
        MOV 23H,A ;读出温度值高字节存入23H
        LCALL RESET
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ :  MOV R6,#08H
   RD1: CLR DAT
        MOV R5,#6
        NOP
        SETB DAT
        DJNZ R5,$   ;延时12us
        MOV C,DAT
        RRC A
        MOV R4,#30  ;延时60us
        DJNZ R4,$
        DJNZ R6,RD1
        SETB DAT
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE:  MOV R6,#8
   WT1: SETB DAT
        MOV R5,#8
        RRC A
        CLR DAT
        DJNZ R5,$    ;延时16us
        MOV DAT,C
        MOV R4,#30   ;延时60us
        DJNZ R4,$
        DJNZ R6,WT1  ;移位8次
        SETB DAT
        RET

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RESET:  CLR DAT
        MOV R7,#250
        DJNZ R7,$     ;保持低电平500us
        SETB DAT
        MOV R7,#30
  RE0:  JNB DAT,RE1
        DJNZ R7,RE0   ;释放等待16~60us
        LJMP RE2
  RE1:  SETB 00H      ; 置标志位,表示DS1820存在
        LJMP RE3
  RE2:  CLR 00H       ; 清标志位,表示DS1820不存在
        LJMP RE4
  RE3:  MOV R7,#240
        DJNZ R7,$
  RE4:  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CRAM:   MOV R7,#60H     ;清内存
        MOV A,#00H
        MOV R1,#23H
 CRAM1: MOV @R1,A
        INC R1
        DJNZ R7,CRAM1
        RET

        END

⌨️ 快捷键说明

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