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

📄 d18b203.asm

📁 北京航空航天大学出版社 单片机与嵌入式系统 图书介绍 (2007年第2期) 通信地址: 北京市海淀区学院路37号 北京航空航天大学出版社 邮编: 1
💻 ASM
字号:
;****************************************************************
;/* 这是DS18B20的汇编程序,  文件名D18B203.ASM                     */
;/* 功能:本程序主要是读出多个DS18B20芯片转换后的温度值,这里用   */
;/*    两个DS18B20芯片。单片机的P1.0接DS18B20的BQ。第1个DS18B20   */
;/*    芯片的温度值放在50H和51H单元(高字节在50H中),第2个DS18B20*/
;/*    芯片的温度值放在52H和53H单元(高字节在52H中)。本程序适合  */
;/*    多个DS18B20 和51单片机的连接,晶振为12MHZ左右。             */
;******************************************************************
DQ   EQU    P1.0
     ORG 0000H
     AJMP MAIN
     ORG 0020H
MAIN:
     MOV SP,#60H
     LCALL GET_TEMP
     SJMP $
GET_TEMP:
     CLR PSW.4
     SETB PSW.3  ;设置工作寄存器当前所在的区域
     CLR EA      ;使用ds1820一定要禁止任何中断产生
     LCALL INT   ;调用初使化子程序
     MOV A,#0CCH
     LCALL WRITE ;送入跳过ROM命令
     MOV A, #44H
     LCALL WRITE ;送入温度转换命令

     LCALL INT   ;温度转换完全,再次初使化ds1820
     MOV A,#55H
     LCALL WRITE ;送入匹配ROM命令
     MOV A,#28H
     LCALL WRITE ;发第1个DS18B20序列号(28H,10H,46H,0E2H,00,00,00,7EH)
     MOV A,#10H
     LCALL WRITE
     MOV A,#46H
     LCALL WRITE
     MOV A,#0E2H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#7EH
     LCALL WRITE
     MOV A,#0BEH
     LCALL WRITE ;送入读温度暂存器命令
     LCALL READ
     MOV 51H,A   ;读出温度值低字节存入51H
     CALL READ
     MOV 50H,A   ;读出谩度值高字节存入50H

     LCALL INT   ;再次初使化ds1820
     MOV A,#55H
     LCALL WRITE ;送入匹配ROM命令
     MOV A,#28H
     LCALL WRITE ;发第2个DS18B20序列号(28H,24H,0C5H,39H,00,00,00,5FH)
     MOV A,#24H
     LCALL WRITE
     MOV A,#0C5H
     LCALL WRITE
     MOV A,#39H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#00H
     LCALL WRITE
     MOV A,#5FH
     LCALL WRITE
     MOV A,#0BEH
     LCALL WRITE ;送入读温度暂存器命令
     LCALL READ
     MOV 53H,A   ;读出温度值低字节存入53H
     CALL READ
     MOV 52H,A   ;读出谩度值高字节存入52H
     SETB EA
     RET

INT:           ;初始化ds1820子程序
    CLR EA
L0: CLR DQ     ;ds1820总线为低复位电平
    MOV R2,#200
L1: CLR DQ
    DJNZ R2,L1 ;总线复位电平保持400us
    SETB DQ    ;释放ds1820总线
    MOV R2,#30
L4: DJNZ R2,L4 ;释放ds1820总线保持60us
    CLR C      ;清存在信号
    ORL C,DQ
    JC L0      ;存在吗?不存在则重新来
    MOV R6,#80
L5: ORL C,DQ
    JC L3
    DJNZ R6,L5
    SJMP L0
L3: MOV R2,#240
L2: DJNZ R2,L2
    RET

WRITE:          ;向ds1820写操作命令子程序
    CLR EA
    MOV R3,#8   ;写入ds1820的bit数,一个字节8个bit
WR1:SETB DQ
    MOV R4,#8
    RRC A       ;把一个字节data(A)分成8个bit环移给 C
    CLR DQ      ;开始写入ds1820总线要处于复位(低)状态
WR2:DJNZ R4,WR2 ;ds1820总线复位保持16us
    MOV DQ,C    ;写入一个bit
    MOV R4,#20
WR3:DJNZ R4,WR3 ;等待40us
    DJNZ R3,WR1 ;写入下一个bit
    SETB DQ     ;重新释放ds1820总线
    RET

READ:
    CLR EA
    MOV R6,#8   ;连续读8个bit
RE1:CLR DQ      ;读前总线保持为低
    MOV R4,#4
    NOP
    SETB DQ     ;开始读总线释放
RE2:DJNZ R4,RE2 ;持续8us
    MOV C,DQ    ;从ds1820总线读得一个bit
    RRC A       ;把读得的位值环移给 A
    MOV R5,#30
RE3:DJNZ R5,RE3 ;持续60us
    DJNZ R6,RE1 ;读下一个bit
    SETB DQ     ;重新释放ds1820总线
    RET
    END

⌨️ 快捷键说明

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