DS18B20温控实例.docx

上传人:b****1 文档编号:10403818 上传时间:2023-05-25 格式:DOCX 页数:23 大小:147.54KB
下载 相关 举报
DS18B20温控实例.docx_第1页
第1页 / 共23页
DS18B20温控实例.docx_第2页
第2页 / 共23页
DS18B20温控实例.docx_第3页
第3页 / 共23页
DS18B20温控实例.docx_第4页
第4页 / 共23页
DS18B20温控实例.docx_第5页
第5页 / 共23页
DS18B20温控实例.docx_第6页
第6页 / 共23页
DS18B20温控实例.docx_第7页
第7页 / 共23页
DS18B20温控实例.docx_第8页
第8页 / 共23页
DS18B20温控实例.docx_第9页
第9页 / 共23页
DS18B20温控实例.docx_第10页
第10页 / 共23页
DS18B20温控实例.docx_第11页
第11页 / 共23页
DS18B20温控实例.docx_第12页
第12页 / 共23页
DS18B20温控实例.docx_第13页
第13页 / 共23页
DS18B20温控实例.docx_第14页
第14页 / 共23页
DS18B20温控实例.docx_第15页
第15页 / 共23页
DS18B20温控实例.docx_第16页
第16页 / 共23页
DS18B20温控实例.docx_第17页
第17页 / 共23页
DS18B20温控实例.docx_第18页
第18页 / 共23页
DS18B20温控实例.docx_第19页
第19页 / 共23页
DS18B20温控实例.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DS18B20温控实例.docx

《DS18B20温控实例.docx》由会员分享,可在线阅读,更多相关《DS18B20温控实例.docx(23页珍藏版)》请在冰点文库上搜索。

DS18B20温控实例.docx

DS18B20温控实例

ME300实例-DS18B20温度控制实验(汇编语言源程序)

程序说明:

DS18B20的管脚定义:

1、GND

2、DQ

3、VCC

 DQ   →  P3.3

 K1   →  P1.4

 K2   →  P1.5

 K3   →  P1.6

 K4   →  P1.7

JP2 用跳线帽短接1和2,选用LCD。

温度显示用四位,当温度>=100度时,第四位才显示。

检测 DS18B20 状态:

DS18B20正常显示:

  DS18B20  OK

 TEMP:

  25.8℃ ← 显示实际温度

DS18B20不正常显示:

DS18B20  ERROR

 TEMP:

 ----℃  ← 显示----

这时你要检查DS18B20是否连接好、接对,否则要更换一个新的 DS18B20 芯片。

一、查看温度报警值:

K1 → 进入查看温度报警值状态。

LCD 1602 显示:

  LOOK ALERT CODE

 TH:

028℃ TL:

18℃

TH:

028  高位报警值

TL:

18   低位报警值

K3 → 退出查看温度报警值状态。

二、设定温度报警值:

K2 → 进入设定温度报警值状态。

LCD 1602 显示:

 RESET ALERT CODE

 TH:

028℃ TL:

18℃

K1 :

 设定值加(UP)、减(DOWN)方式选择键(默认为减少)

K2 :

 TH值设定键

K3 :

 TL值设定键

K4 :

 确定键 (退出设定状态)

 K2 或 K3 以减(DOWN)方式设定,当设定数值减到“0”时自动转换为加(UP)方式。

 K2 或 K3 以加(UP)方式设定,当设定数值 TH=120、TL=99 时,设定数值均变为“0”。

K4 → 确定并退出设定温度报警值状态。

将设定的温度报警值自动存入 DS18B20 的 EEROM 中,可永久保存。

每次开机时自动从 DS18B20 的 EEROM 读出温度报警值。

三、报警状态的显示:

1、当实际温度大于 TH 的设定值时,

  LCD1602 显示:

   DS18B20  OK

 TEMP:

  88.8℃ > H

关闭继电器,蜂鸣器响,表示超温。

2、当实际温度小于 TL 的设定值时,

  LCD1602 显示:

   DS18B20  OK

 TEMP:

  18.8℃ < L

蜂鸣器响,表示加热部分出现故障。

3、当实际温度小于 TH 的设定值时,继电器吸合,开始加热。

  加热标记为“!

源程序(汇编语言)

;*  描述:

                                                                       *

;*          DS18B20温度控制1602LCD显示                                          *

;*                                                                              *

;*          使用方法参考readme.txt文档                                          *

;*                                                                              *

;*                                                                              *

          TEMP_ZH   DATA  24H     ;实时温度值存放单元

          TEMPL     DATA  25H     ;

          TEMPH     DATA  26H     ;

          TEMP_TH   DATA  27H     ;高温报警值存放单元

          TEMP_TL   DATA  28H     ;低温报警值存放单元

          TEMPHC    DATA  29H     ;

          TEMPLC    DATA  2AH

          K1     EQU  P1.4

          K2     EQU  P1.5

          K3     EQU  P1.6

          K4     EQU  P1.7

          BEEP   EQU  P3.7

          RELAY  EQU  P1.3

          LCD_X     EQU  2FH      ;LCD 地址变量

          LCD_RS    EQU  P2.0

          LCD_RW    EQU  P2.1

          LCD_EN    EQU  P2.2

          FLAG1     EQU  20H.0    ;DS18B20是否存在标记

          KEY_UD    EQU  20H.1    ;设定 KEY 的UP与DOWN 标记

          DATE_LINEEQU P3.3

;=====================================================

           ORG  0000H

           JMP  MAIN

MAIN:

     MOV  SP,#60H

          MOV  A,#00H

          MOV  R0,#20H       ;将 20H-2FH 单元清零

          MOV  R1,#10H

CLEAR:

    MOV  @R0,A

          INC  R0

          DJNZ  R1,CLEAR

          CALL  SET_LCD

          CALL  RE_18B20

START:

    CALL  RESET          ;18B20复位子程序

          JNB   FLAG1,START1   ;DS1820不存在

          CALL  MENU_OK

          CALL  READ_E2

          CALL  TEMP_BJ        ;显示温度标记

          JMP   START2

START1:

   CALL  MENU_ERROR

          CALL  TEMP_BJ        ;显示温度标记

          JMP  $

START2:

          CALL  RESET

          JNB  FLAG1,START1    ;DS1820不存在

          MOV   A,#0CCH        ; 跳过ROM匹配

          CALL  WRITE

          MOV   A,#44H         ; 发出温度转换命令

          CALL  WRITE

          CALL  RESET

          MOV   A,#0CCH        ; 跳过ROM匹配

          CALL  WRITE

          MOV   A,#0BEH        ; 发出读温度命令

          CALL  WRITE

          CALL  READ

          CALL CONVTEMP

          CALL DISPBCD

          CALL CONV

          CALL TEMP_COMP

          CALL  PROC_KEY       ; 键扫描

   SJMP START2

;-----------------------------------------------------

PROC_KEY:

  JB  K1,PROC_K1    ; 按键K1处理

         CALL  BEEP_BL

         JNB  K1,$

         MOV  DPTR,#M_ALAX1

         MOV  A,#1

         CALL  LCD_PRINT

         CALL  LOOK_ALARM

         JB  K3,$

         CALL  BEEP_BL

         JMP  PROC_K2

PROC_K1:

     ; 按键K2处理

         JB  K2,PROC_END

         CALL  BEEP_BL

         JNB  K2,$

         MOV   DPTR,#RESET_A1

         MOV   A,#1

         CALL  LCD_PRINT

         CALL  SET_ALARM

         CALL  RE_18B20           ;将设定的TH,TL值写入DS18B20内

         CALL  WRITE_E2

PROC_K2:

         CALL  MENU_OK

         CALL  TEMP_BJ

PROC_END:

         RET

;============================================

;设定报警值 TH、TL

;============================================

SET_ALARM:

         ;CALL  RESET_ALARM

         CALL  LOOK_ALARM

AS0:

         JB   K1,AS00

         CALL  BEEP_BL

         JNB  K1,$

         CPL  20H.1            ;UP/DOWN 标记

AS00:

    JB  20H.1,ASZ01       ;20H.1=1,UP

         JMP  ASJ01            ;20H.1=0,DOWN

ASZ01:

   JB  K2,ASZ02          ;TH值调整(增加)

         CALL  BEEP_BL

         INC  TEMP_TH

         MOV  A,TEMP_TH

         CJNE  A,#120,ASZ011

         MOV  TEMP_TH,#0

ASZ011:

  CALL  LOOK_ALARM

         MOV  R5,#10

         CALL  DELAY

         JMP  ASZ01

ASZ02:

   JB  K3,ASZ03          ;TL值调整(增加)

         CALL  BEEP_BL

         INC  TEMP_TL

         MOV  A,TEMP_TL

         CJNE  A,#99,ASZ021

         MOV  TEMP_TL,#00H

ASZ021:

  CALL  LOOK_ALARM    ;

         MOV  R5,#10

         CALL  DELAY

         JMP  ASZ02

ASZ03:

   JB  K4,AS0          ;确定调整 OK

         CALL  BEEP_BL

         JNB  K4,$

         RET

ASJ01:

         JB  K2,ASJ02          ;TH值调整 (减少)

         CALL  BEEP_BL

         DEC   TEMP_TH

         MOV  A,TEMP_TH

         CJNE  A,#0FFH,ASJ011

         JMP  ASJ022

ASJ011:

  CALL  LOOK_ALARM

         MOV  R5,#10

         CALL  DELAY

         JMP  AS0

ASJ02:

   JB  K3,ASJ03         ;TL值调整(减少)

         CALL  BEEP_BL

         DEC  TEMP_TL

         MOV  A,TEMP_TL

         CJNE  A,#0FFH,ASJ021

         JMP  ASJ022

ASJ021:

  CALL  LOOK_ALARM    ;

         MOV  R5,#10

         CALL  DELAY

         JMP  AS0

ASJ022:

  CPL  20H.1

         JMP  ASZ01

ASJ03:

   JMP  ASZ03

         RET

RESET_ALARM:

          MOV  DPTR,#RESET_A1  ;指针指到显示信息区

          MOV  A,#1            ;显示在第一行

          CALL  LCD_PRINT

          RET

RESET_A1:

     DB  "RESET ALERT CODE"

;====================================================

;实际温度值与标记温度值比较子程序

;====================================================

TEMP_COMP:

          MOV  A,TEMP_TH       

          SUBB  A,TEMP_ZH       ;减数>被减数,则

          JC  CHULI1            ;借位标志位C=1,转

          MOV  A,TEMP_ZH

          SUBB  A,TEMP_TL       ;减数>被减数,则

          JC  CHULI2            ;借位标志位C=1,转

          MOV  DPTR,#BJ5

          CALL  TEMP_BJ3

          CLR   RELAY           ;继电器吸合

          RET

 CHULI1:

          MOV  DPTR,#BJ3

          CALL  TEMP_BJ3

          SETB  RELAY           ;继电器关闭

          CALL  BEEP_BL

          RET

 CHULI2:

          MOV  DPTR,#BJ4

          CALL  TEMP_BJ3

          CALL  BEEP_BL

          RET

;-----------------------------------------

TEMP_BJ3:

          MOV  A,#0CEH

          CALL WCOM

          MOV  R1,#0

          MOV  R0,#2

BBJJ3:

    MOV  A,R1

          MOVC A,@A+DPTR

          CALL  WDATA

          INC R1

          DJNZ  R0,BBJJ3

          RET

BJ3:

      DB  ">H"

BJ4:

      DB  "

BJ5:

      DB  " !

"

;==================================================

;显示温度标记子程序

;==================================================

TEMP_BJ:

          MOV  A,#0CBH

          CALL WCOM

          MOV  DPTR,#BJ1  ;指针指到显示消息

          MOV  R1,#0

          MOV  R0,#2

BBJJ1:

    MOV  A,R1

          MOVC A,@A+DPTR

          CALL  WDATA

          INC R1

          DJNZ  R0,BBJJ1

          RET

BJ1:

      DB  00H,"C"

;=================================================

MENU_OK:

          MOV  DPTR,#M_OK1  ;指针指到显示消息

          MOV  A,#1          ;显示在第一行

          CALL  LCD_PRINT

          MOV  DPTR,#M_OK2  ;指针指到显示消息

          MOV  A,#2          ;显示在第一行

          CALL  LCD_PRINT

          RET

M_OK1:

    DB   "   DS18B20 OK   ",0

M_OK2:

    DB   " TEMP:

          ",0

;-----------------------------------------------

MENU_ERROR:

          MOV  DPTR,#M_ERROR1  ;指针指到显示消息1

          MOV  A,#1          ;显示在第一行

          CALL  LCD_PRINT

          MOV  DPTR,#M_ERROR2  ;指针指到显示消息1

          MOV  A,#2          ;显示在第一行

          CALL  LCD_PRINT

          RET

M_ERROR1:

    DB   " DS18B20 ERROR  ",0

M_ERROR2:

    DB   " TEMP:

 ----     ",0

;====================================================

reset:

  setb date_line

        nop

        clr date_line

        mov r0,#6bh         ;主机发出延时复位低脉冲

        mov r1,#04h

tsr1:

   djnz r0,$

        mov r0,#6bh

        djnz r1,tsr1

        setb date_line        ;然后拉高数据线

        nop

        nop

        nop

        mov r0,#32h

tsr2:

   jnb date_line,tsr3   ;等待DS18B20回应

        djnz r0,tsr2

        jmp tsr4             ; 延时

tsr3:

   setb flag1           ; 置标志位,表示DS1820存在

        jmp tsr5

tsr4:

   clr flag1            ; 清标志位,表示DS1820不存在

        jmp tsr7

tsr5:

   mov r0,#06bh

tsr6:

   djnz r0,$            ; 时序要求延时一段时间

tsr7:

   setb date_line

        ret

;=======================================================

RE_18B20:

        JB  FLAG1,RE_18B20A

        RET

RE_18B20A:

        CALL  RESET

        MOV  A,#0CCH       ;跳过ROM匹配

        LCALL  WRITE

        MOV  A,#4EH        ;写暂存寄存器

        LCALL  WRITE

        MOV  A,TEMP_TH     ;TH(报警上限)

        LCALL  WRITE

        MOV  A,TEMP_TL     ;TL(报警下限)

        LCALL  WRITE

        MOV  A,#7FH        ;12位精确度

        LCALL  WRITE

        RET

;------------------------------------------------------------

WRITE_E2:

        CALL  RESET

        MOV  A,#0CCH        ;跳过ROM匹配

        LCALL  WRITE

        MOV  A,#48H         ;把暂存器里的温度报警值拷贝到EEROM

        LCALL  WRITE

        RET

;--------------------------------------------------------------

READ_E2:

        CALL  RESET

        MOV  A,#0CCH        ;跳过ROM匹配

        LCALL  WRITE

        MOV  A,#0B8H        ;把EEROM里的温度报警值拷贝回暂存器

        CALL  WRITE

        RET

;--------------------------------------------------------------

;将自定义字符写入LCD1602的CGRAM中

;--------------------------------------------------------------

S

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2