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

📄 ds18b20.txt

📁 温度传感器芯片18B20的操作代码
💻 TXT
字号:
         ORG 0000H
        AJMP MAIN
        FLAG1 EQU 38H;是否检测到DS18B20标志位
        A_BIT equ 20h ;数码管个位数存放内存位置
        B_BIT equ 21h ;数码管十位数存放内存位置
;**************************************
;高位温度值存放在29H单元,低位温度值存放在28H单元
;设置温度分辨率1度
;***************************************
MAIN:   LCALL GET_TEMPER;调用读温度子程序
        MOV A,29H
        MOV C,40H;将28H中的最低位移入C
        RRC A
        MOV C,41H
        RRC A
        MOV C,42H
        RRC A
        MOV C,43H
        RRC A
        MOV 29H,A
        LCALL DISPLAY;调用数码管显示子程序
        LCALL SOUND;调用报警子程序
        AJMP MAIN
;********************************
;DS18B20复位初始化子程序
;**********************************
INIT_1820:
        SETB P2.2
        NOP
        CLR P2.2
;******************************
;主机发出630微秒的复位低脉冲
;******************************
        MOV R1,#3
TSR1:   MOV R0,#107
        DJNZ R0,$
        DJNZ R1,TSR1
        SETB P2.2;然后拉高数据线
        NOP
        NOP
        NOP
        MOV R0,#25H
TSR2:   JNB P2.2,TSR3;等待DS18B20回应
        DJNZ R0,TSR2
        LJMP TSR4 ; 延时
TSR3:   SETB FLAG1 ; 置标志位,表示DS1820存在
        LJMP TSR5
TSR4:   CLR FLAG1 ; 清标志位,表示DS1820不存在
        LJMP TSR7
TSR5:   MOV R0,#117
TSR6:   DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:   SETB P2.2
        RET
;***********************
; 读出转换后的温度值
;***********************
GET_TEMPER:SETB P2.2
           LCALL INIT_1820;先复位DS18B20
           JB FLAG1,TSS2
           RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:      MOV A,#0CCH ; 跳过ROM匹配
           LCALL WRITE_1820
           MOV A,#44H ; 发出温度转换命令
           LCALL WRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
           LCALL DISPLAY
           LCALL INIT_1820;准备读温度前先复位
           MOV A,#0CCH ; 跳过ROM匹配
           LCALL WRITE_1820
           MOV A,#0BEH ; 发出读温度命令
           LCALL WRITE_1820
           LCALL READ_18200; 将读出的的温度值存放到29H/28H单元 
           RET
;*******************************************
;写DS18B20的子程序(有具体的时序要求)
;*******************************************
WRITE_1820:MOV R2,#8;一共8位数据
           CLR C
WR1:       CLR P2.2
           MOV R3,#6
           DJNZ R3,$
           RRC A
           MOV P2.2,C
           MOV R3,#23
           DJNZ R3,$
           SETB P2.2
           NOP
           DJNZ R2,WR1
           SETB P2.2
           RET
;************************************************
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
;************************************************ 
READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
           MOV R1,#29H ; 低位存入29H,高位存入28H
RE00:      MOV R2,#8;数据一共有8位
RE01:      CLR C
           SETB P2.2
           NOP
           NOP
           CLR P2.2
           NOP
           NOP
           NOP
           SETB P2.2
           MOV R3,#9
RE10:      DJNZ R3,RE10
           MOV C,P2.2
           MOV R3,#23
RE20:      DJNZ R3,RE20
           RRC A
           DJNZ R2,RE01
           MOV @R1,A
           DEC R1
           DJNZ R4,RE00
           RET
;*******************************
;当温度超过30度时报警
;*******************************
SOUND:     MOV  A,29H
           CLR  C
           CLR   P1.0
           CJNE  A,#1EH,MM1 ;判断温度转换的值是否等于30度
MM1:       JNC   NEXT1 ;温度大于等于30度时报警
           AJMP   NEXT 
NEXT1:     SETB  P1.0
           
NEXT:      RET
            
DISPLAY:
          MOV A,29H ;将temp中的十六进制数转换成10进制
          MOV B,#10 ;10进制/10=10进制
          DIV  AB
          MOV B_BIT,A ;十位在a
          MOV A_BIT,B ;个位在b
          MOV DPTR,#NUMTAB ;指定查表启始地址
          MOV R6,#4
LOP1:     MOV R5,#250 ;
LOP2:     MOV  A,A_BIT;取个位数
          MOVC A,@A+DPTR ;查个位数的7段代码
          MOV P0,A ;送出个位的7段代码
          CLR P2.7 ;开个位显示
          ACALL D1MS ;显示162微秒
          SETB P2.7;关闭个位显示,防止鬼影
          MOV A,B_BIT ;取十位数
          MOVC A,@A+DPTR ;查十位数的7段代码
          MOV  P0,A ;送出十位的7段代码
          CLR p2.6 ;开十位显示
          ACALL  D1MS ;显示162微秒
          SETB P2.6;关闭十位显示,防止鬼影
         DJNZ  R5,LOP2 ;循环执行250次
          DJNZ R6,LOP1 ;循环执行250X4=1000次
          RET

;2+2X80=162微秒,延时按12MHZ计算
D1MS:
         MOV R7,#80
         DJNZ R7,$
RET



;实验板上的7段数码管0~9数字的共阴显示代码
NUMTAB: DB      3FH
        DB      06H
        DB      5BH
        DB      4FH
        DB      66H
        DB      6DH
        DB      7DH
        DB      07H
        DB      7FH
        DB      6FH

       END 

⌨️ 快捷键说明

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