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

📄 温度万年历_1.asm

📁 制作一个温度万年历
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                       DS18B20温度计
; 采用4位共阳LED显示器显示测温值,显示精度0.1度,测温范围-55--+125度
;  用AT89C2051单片机,12M晶振,设计 日期2007.11.20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; P0口输出7段P1.0~a,P2口控制P2.0~com1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;                      常数定义
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

     TIMEL      EQU     0E0H
     TIMEH      EQU     0B1H
     TEMPHEAD   EQU     36H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                      工作内存定义
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     BITST      DATA     20H
     TIME1SOK   BIT      BITST.1
     TEMPONEOK  BIT      BITST.2
     TEMPL      DATA     26H
     TEMPH      DATA     27H
     TEMPHC     DATA     28H
     TEMPLC     DATA     29H



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                       引脚定义
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     TEMPDIN     BIT      P3.6    ;DS18B20通信端

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                       中间向量区
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ORG        0000H
      LJMP       START

      ORG        000BH
      LJMP       T0IT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                        系统初始化
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
           ORG   100H
START:     MOV     SP,    #60H
CLSMEM:    MOV     R0,    #20H
           MOV     R1,    #60H
CLSMEM1:   MOV     @R0,   #00H
           INC     R0
           DJNZ    R1,  CLSMEM1
           MOV     TMOD,       #00100001B
           MOV     TH0,        #TIMEL
           MOV     TL0,        #TIMEH
           SJMP    INIT

ERROR:    NOP
          LJMP     START
          NOP


INIT:     NOP
          SETB  ET0
          SETB  TR0
          SETB  EA
          MOV   PSW,    #00H
          CLR   TEMPONEOK
          LJMP  MAIN


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                       定时器0中断服务程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T0IT:      PUSH       PSW
           MOV        PSW,    #10H
           MOV        TH0,    #TIMEH
           MOV        TL0,    #TIMEL
           INC        R7
           CJNE       R7,     #32H,  T0IT1
           MOV        R7,     #00H
           SETB       TIME1SOK

T0IT1:     POP          PSW
           RETI



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                         主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MAIN:        LCALL     DISP1
             JNB       TIME1SOK,  MAIN
             CLR       TIME1SOK
             JNB       TEMPONEOK,   MAIN2
             LCALL     READTEMP1
             LCALL     CONVTEMP
             LCALL     DISPBCD
             LCALL     DISPLAY

MAIN2:       LCALL     READTEMP
             SETB      TEMPONEOK
             LJMP      MAIN


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                          子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                       REST DS18B20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITDS1820:      SETB    TEMPDIN
                 NOP
                 NOP
                 CLR    TEMPDIN
                 MOV    R6,    #0A0H
                 DJNZ   R6,    $
                 MOV    R6,    #0A0H
                 DJNZ   R6,    $
                 SETB   TEMPDIN
                 MOV    R6,    #32H
                 DJNZ   R6,    $
                 MOV    R6,    #3CH

LOOP1820:        MOV    C,      TEMPDIN
                 JC               INITDS1820OUT
                 DJNZ   R6,       LOOP1820
                 MOV    R6,       #064H
                 DJNZ   R6,       $
                 SJMP   INITDS1820
                 RET

INITDS1820OUT:    SETB   TEMPDIN
                 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;        读DS18B20的程序,从中读出一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READDS1820:      MOV    R7,   #08H
                 SETB   TEMPDIN
                 NOP
                 NOP

READDS1820LOOP:  CLR    TEMPDIN
                 NOP
                 NOP
                 NOP
                 SETB   TEMPDIN
                 MOV    R6,    #07H
                 DJNZ   R6,    $
                 MOV    C,  TEMPDIN
                 MOV    R6,    #3CH
                 DJNZ   R6,    $
                 RRC    A
                 SETB   TEMPDIN
                 DJNZ   R7,    READDS1820LOOP
                 MOV    R6,    #3CH
                 DJNZ   R6,    $
                 RET


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            写DS18B20的 程序,从中写一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITEDS1820:     MOV     R7,   #08H
                 SETB    TEMPDIN
                 NOP
                 NOP

WRITEDS1820LOP:  CLR    TEMPDIN
                 MOV    R6 ,  #07H
                 DJNZ   R6,$
                 RRC    A
                 MOV    TEMPDIN,        C
                 MOV    R6,          #34H
                 DJNZ   R6,$
                 SETB   TEMPDIN
                 DJNZ   R7,    WRITEDS1820LOP
                 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;          READ TEMP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READTEMP:
                 LCALL  INITDS1820
                 MOV    A,     #0CCH
                 LCALL  WRITEDS1820
                 MOV    R6,        #34H
                 DJNZ   R6,        $
                 MOV    A,         #44H
                 LCALL  WRITEDS1820
                 MOV    R6,        #34H
                 DJNZ   R6,        $
                 RET



READTEMP1:      LCALL     INITDS1820
                MOV       A,#0CCH
                LCALL     WRITEDS1820
                MOV       R6,#34H
                DJNZ      R6,$
                MOV       A,#0BEH
                LCALL     WRITEDS1820
                MOV       R6,#34H
                DJNZ      R6,$
                MOV       R5,#09H
                MOV       R0,#TEMPHEAD
                MOV       B,#00H

READTEMP2:      LCALL     READDS1820
                MOV       @R0,A
                INC       R0

READTEMP21:     LCALL     CRC8CAL
                DJNZ      R5,READTEMP2
                MOV       A,B
                JNZ       READTEMPOUT
                MOV       A,TEMPHEAD+0
                MOV       TEMPL,A
                MOV       A,TEMPHEAD+1
                MOV       TEMPH,A

READTEMPOUT:    RET




;********************************
;处理温度BCD码子程序
;********************************

CONVTEMP:        MOV      A,TEMPH
                 ANL      A,#80H
                 JZ       TEMPC1
                 CLR      C
                 MOV      A,TEMPL
                 CPL      A
                 ADD      A,#01H
                 MOV      TEMPL,A
                 MOV      A,TEMPH
                 CPL      A
                 ADDC     A,#00H
                 MOV      TEMPH,A
                 MOV      TEMPHC,#0BH
                 SJMP     TEMPC11

TEMPC1:          MOV      TEMPHC,#0AH

TEMPC11:         MOV      A,TEMPHC
                 SWAP     A
                 MOV      TEMPHC,A
                 MOV      A,TEMPL
                 ANL      A,#0FH
                 MOV      DPTR,#TEMPDOTTAB
                 MOVC     A,@A+DPTR
                 MOV      TEMPLC,A

                 MOV      A,TEMPL
                 ANL      A,#0F0H
                 SWAP     A
                 MOV      TEMPL,A
                 MOV      A,TEMPH
                 ANL      A,#0FH
                 SWAP     A
                 ORL      A,TEMPL
                 LCALL    HEX2BCD1
                 MOV      TEMPL,A
                 ANL      A,#0F0H
                 SWAP     A
                 ORL      A,TEMPHC
                 MOV      TEMPHC,A
                 MOV      A,TEMPL
                 ANL      A,#0FH
                 SWAP     A
                 ORL      A,TEMPLC
                 MOV      TEMPLC,A
                 MOV      A,R7
                 JZ       TEMPC12
                 ANL      A,#0FH
                 SWAP     A
                 MOV      R7,A
                 MOV      A,TEMPHC
                 ANL      A,#0FH
                 ORL      A,R7
                 MOV      TEMPHC,A

TEMPC12:         RET





;********************************
;小数部分码表
;********************************

TEMPDOTTAB:      DB       00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
                 DB       06H,07H,08H,08H,09H,09H




;********************************
;显示区BCD码温度值刷新子程序
;********************************


DISPBCD:         MOV      A,TEMPLC
                 ANL      A,#0FH
                 MOV      70H,A
                 MOV      A,TEMPLC
                 SWAP     A
                 ANL      A,#0FH
                 MOV      71H,A
                 MOV      A,TEMPHC
                 ANL      A,#0FH
                 MOV      72H,A
                 MOV      A,TEMPHC
                 SWAP     A
                 ANL      A,#0FH
                 MOV      73H,A
                 MOV      A,TEMPHC
                 ANL      A,#0F0H
                 CJNE     A,#010H,DISPBCD0
                 SJMP     DISPBCD2

DISPBCD0:        MOV      A,TEMPHC
                 ANL      A,#0FH
                 JNZ      DISPBCD2
                 MOV      A,TEMPHC
                 SWAP     A
                 ANL      A,#0FH
                 MOV      73H,#0AH
                 MOV      72H,A

DISPBCD2:        RET







DL1MS:           MOV       R6,#14H
    DL1:         MOV       R7,#19H
       DL2:      DJNZ      R7,DL2
                 DJNZ      R6,DL1
                 RET










;********************************
;单字节十六进制转BCD
;********************************
HEX2BCD1:        MOV       B,#064H
                 DIV       AB
                 MOV       R7,A
                 MOV       A,#0AH
                 XCH       A,B
                 DIV       AB
                 SWAP      A
                 ORL       A,B
                 RET



;********************************
;Calulate CRC-8Values.
;X^8+X^5+x^4+1
;********************************

CRC8CAL:         PUSH      ACC
                 MOV       R7,#08H

CRC8LOOP1:       XRL       A,B
                 RRC       A
                 MOV       A,B
                 JNC       CRC8LOOP2
                 XRL       A,#18H

CRC8LOOP2:       RRC       A
                 MOV       B,A
                 POP       ACC
                 RR        A
                 PUSH      ACC
                 DJNZ      R7,CRC8LOOP1
                 POP       ACC
                 RET
















DISPLAY:       MOV 7EH,#02H
               MOV 7DH,#00H
               MOV R0,#76H
               MOV R1,#70H
               MOV R2,79H
               MOV R3,#79H
               MOV R5,#0FEH


PLAY1:         MOV    A,#0FFH
               MOV    P2,A

               MOV    A,@R0
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI


               MOV    A,@R1
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI

               MOV    A,R2
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI

               INC    R0
               INC    R1
               INC    R3

               MOV    A,R3
               SETB   PSW.4
               MOV    R0,A
               MOV    A,@R0

               CLR    PSW.4
               MOV    R2,A
               MOV    A,R0

               CJNE   A,#78H,PLAY2
               MOV    R0,#50H

PLAY2:         CJNE A,#54H,PLAY3
               MOV    R0,#78H

PLAY3:         MOV    A,R5
               MOV    P2,A
               LCALL  DL1MS
               MOV    A,R5
               JNB    ACC.6,PLAYOUT
               RL     A
               MOV    R5,A
               LJMP   PLAY1

PLAYOUT:       SETB   P2.6
               RET

DL1MS:        MOV         R6,#14H
DL1:          MOV         R7,#19H
DL2:          DJNZ        R7,DL2
              DJNZ        R6,DL1
              RET











TAB1:  ;DB       0C0H,0F9H,0A4H,0B0H
      ; DB       99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
       DB 03H,9FH,25H,0DH,99H
       DB 49H,41H,1FH,01H,09H,0FFH


       END

⌨️ 快捷键说明

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