新闻  |   论坛  |   博客  |   在线研讨会
环境温度湿度测控
tvb2058 | 2007-09-14 10:46:01    阅读:2104   发布文章

 

简易显示的,可以参考这个,2051一片。
DS18B20程序由21ICBBS上的某位同志提供的。在精华区有,作者名字忘记了
注意,毕业设计还是要自己做哦。

参考程序:
扫描显示,采用DS18B20
湿度采用TLC549转换的,模拟信号输入。

TEMPER_L        EQU    36H
TEMPER_H        EQU    35H
TEMPER_NUM      EQU    40H
FLAG1           BIT    20H
DQ              BIT    p3.2
        ORG 0
MAIN:  LCALL GET_TEMPER
        LCALL TEMPER_COV
        lcall shidu
        SJMP  MAIN
;-----
延迟2毫秒-----
DL2MS:  PUSH 3AH
        PUSH 3BH
        MOV 3AH,#5
DL20MS1:MOV 3BH,#200
DL20MS2:DJNZ 3BH,DL20MS2
        DJNZ 3AH,DL20MS1
        POP 3BH
        POP 3AH
        RET
;//
延时
1S
DL1S:   mov 3ah,#2
  aa:   mov 3bh,#50

  CC:    LCALL disp
         lcall disp1

        djnz 3bh,cc
        djnz 3ah,aa
        RET

; DS18B20
初始化程序

;//*****************************************//
INIT_1820:
    SETB   DQ
    NOP
    CLR    DQ
    MOV    R0,#06BH
TSR1:
    DJNZ   R0,TSR1        ;
延时
    SETB   DQ
    MOV    R0,#25H
TSR2:
    JNB    DQ,TSR3
    DJNZ   R0,TSR2
    LJMP   TSR4            ;
延时
TSR3:
    SETB   FLAG1            ;
置标志位,表示DS1820存在
    LJMP   TSR5
TSR4:
    CLR    FLAG1            ;
清标志位,表示DS1820不存在
    LJMP   TSR7
TSR5:
    MOV    R0,#06BH
TSR6:
    DJNZ   R0,TSR6        ;
延时
TSR7:
    SETB   DQ
    RET
;//*****************************************//

;
读出转换后的温度值
;//*****************************************//
GET_TEMPER:
    SETB   DQ            ;
定时入口
    LCALL  INIT_1820
    JB     FLAG1,TSS2
    RET                ;
DS18B20不存在则返回
TSS2:
    MOV    A,#0CCH        ;
跳过ROM匹配
    LCALL  WRITE_1820
    MOV    A,#44H        ;
发出温度转换命令
    LCALL  WRITE_1820
    LCALL  DL1S
    LCALL  INIT_1820
    MOV    A,#0CCH        ;
跳过ROM匹配
    LCALL  WRITE_1820
    MOV    A,#0BEH        ;
发出读温度命令
    LCALL  WRITE_1820
    LCALL  READ_18200
    RET
;//*****************************************//

;
DS18B20的程序
;//*****************************************//
WRITE_1820:
    MOV    R2,#8
    CLR    C
WR1:
    CLR    DQ
    MOV    R3,#6
    DJNZ   R3,$
    RRC    A
    MOV    DQ,C
    MOV    R3,#23
    DJNZ   R3,$
    SETB   DQ
    NOP
    DJNZ   R2,WR1
    SETB   DQ
    RET
;//*****************************************//
;
DS18B20的程序,DS18B20中读出两个字节的温度数据
;//*****************************************//
READ_18200:
    MOV    R4,#2            ;
将温度高位和低位从DS18B20中读出
    MOV    R1,#36H        ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
    MOV    R2,#8
RE01:
    CLR    C
    SETB   DQ
    NOP
    NOP
    CLR    DQ
    NOP
    NOP
    NOP
    SETB   DQ
    MOV    R3,#7
    DJNZ   R3,$
    MOV    C,DQ
    MOV    R3,#23
    DJNZ   R3,$
    RRC    A
    DJNZ   R2,RE01
    MOV    @R1,A
    DEC    R1
    DJNZ   R4,RE00
    RET
;//*****************************************//
;
将从DS18B20中读出的温度数据进行转换

;//*****************************************//
TEMPER_COV:
    mov a,temper_l
    swap a
    anl a,#0fh
    mov r0,a
    mov a,temper_h
    anl a,#0fh
    swap a
    ADD a,r0
    mov r2,#0
    mov r3,a
    lcall ibtd2
    mov a,r6
    mov temper_num,a ;
保存整数位温度到40
    mov a,temper_l
    anl a,#0fh
    mov b,#0ah
    mul ab
    mov r2,#0
    mov r3,#0
    mov r4,b
    mov r5,a
    mov r6,#0
    mov r7,#10H
    lcall ndiv1
    mov a,r5
       mov r2,#0
      mov r3,a
    lcall ibtd2
       mov a,r6
       mov 41h,a
         RET
;
双字节十六进制转换成三字节BCD码整数

;十六进制R2,R3->R4,R5,R6
;R2?
IBTD2:  CLR A
        MOV R4,A
        MOV R5,A
        MOV R6,A
        MOV R7,#16
LOOP: CLR C
        MOV A,R3
        RLC A
        MOV R3,A
        MOV A,R2
        RLC A
        MOV R2,A

        MOV A,R6
        ADDC A,R6
        DA A
        MOV R6,A
        MOV A,R5
        ADDC A,R5
        DA A
        MOV R5,A
        MOV A,R4
        ADDC A,R4
        DA A
        MOV R4,A
        DJNZ R7,LOOP
        RET

;/
显示程序
DISp:MOV A,41H
     MOV DPTR,#TAB
     MOVC A,@A+DPTR
     CLR P3.7
     CLR P3.0
     SETB P3.1
     MOV P1,A
     LCALL DL2MS
     MOV A,TEMPER_NUM
     ANL A,#0FH
     MOV DPTR,#TAB1

     MOVC A,@A+DPTR
     setb  P3.7
     clr  P3.0
     clr P3.1
     MOV P1,A
     LCALL DL2MS
     MOV A,TEMPER_NUM
     SWAP A
     ANL A,#0FH
     MOV DPTR,#TAB
     MOVc A,@A+DPTR
     CLR P3.1
     CLR P3.0
     CLR P3.7
     MOV P1,A
     LCALL DL2MS
     RET

ndiv1:mov a,r3
        clr a
        subb a,r7
        mov a,r2
        subb a,r6
        jnc ndve1
        mov b,#16
   ndvl1:clr c
         mov a,r5
         rlc a
         mov r5,a
         mov a,r4
         rlc a
         mov r4,a
         mov a,r3
         rlc a
         mov r3,a
         xch a,r2
         rlc a
         xch a,r2
         mov f0,c
         clr c
         subb a,r7
         mov r1,a
         mov a,r2
         subb a,r6
         jb f0,ndvm1
         jc ndvd1
    ndvm1:mov r2,a
          mov a,r1
          mov r3,a
          inc r5
    ndvd1:djnz b,ndvl1
          clr f0
          ret
    ndve1:setb f0
          ret
TAB1:DB 80H,0E3H,44H,41H,23H,11H,10H,0C3H,00H,01H
TAB:DB  88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H
shidu:
      setb p3.3
      clr p3.4
      mov r0,#0
      clr p3.3
      nop
loop1:setb p3.4
      mov c,p3.5
      rlc a
      clr p3.4
      inc r0
      cjne r0,#8,loop1
      mov r0,#0
      setb p3.3
shidu1: setb p3.3
      clr p3.4
      mov r0,#0
     clr p3.3
      nop
loop2:setb p3.4
      mov c,p3.5
      rlc a
      clr p3.4
      inc r0
      cjne r0,#8,loop2
      mov r0,#0
     setb p3.3

      mov b,#2
      mul ab
      mov r2,b
      mov r3,a
      mov r6,#0
      mov r7,#4
      lcall muld

      mov a,r4
      mov r2,a
      mov a,r5
      mov r3,a
      mov r6,#0
      mov r7,#0fah
      lcall nsub1


      mov r2,#0
      mov r3,#0
      mov r6,#0
      mov r7,#0bh
      lcall ndiv1
      mov a,r3
      subb a,#6
      jc xx
      inc r5
xx:mov a,r4
   mov r2,a
   mov a,r5
   mov r3,a
   lcall ibtd2
    mov 30h,r5
    mov 31h,r6
     ret

MULD:    MOV    A,R3    ;
计算R3R7
    MOV    B,R7
    MUL    AB
    MOV    R4,B    ;
暂存部分积

    MOV    R5,A
    MOV    A,R3    ;
计算R3R6
    MOV    B,R6
    MUL    AB
    ADD    A,R4    ;
累加部分积

    MOV    R4,A
    CLR    A
    ADDC    A,B
    MOV    R3,A
    MOV    A,R2    ;
计算R2R7
    MOV    B,R7
    MUL    AB
    ADD    A,R4    ;
累加部分积

    MOV    R4,A
    MOV    A,R3
    ADDC    A,B
    MOV    R3,A
    CLR    A
    RLC    A
    XCH    A,R2    ;
计算R2R6
    MOV    B,R6
    MUL    AB
    ADD    A,R3
    MOV    R3,A
    MOV    A,R2
    ADDC    A,B
    MOV    R2,A
    RET
nsub1:mov a,r3
      clr c
      subb a,r7
      mov r5,a
      mov a,r2
      subb a,r6
      mov r4,a
      ret

disp1:
       MOV A,31H
       ANL A,#0FH
       CLR P3.7
       CLR P3.1
       SETB P3.0
       MOV DPTR,#TAB
       MOVc A,@A+DPTR
       MOV P1,A
       LCALL Dl2ms
       MOV A,31H
       ANL A,#0F0H
       SWAP A
       SETB P3.7
       SETB P3.1
       CLR P3.0
       MOV DPTR,#TAB
       MOVc A,@A+DPTR
       MOV P1,A
       LCALL dl2ms
       RET

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客