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

📄 正式成功_1.asm

📁 制作一个温度万年历
💻 ASM
📖 第 1 页 / 共 2 页
字号:
               AJMP  GFLASHOUT

GFLASH4:       JB    0DH,GFLASH5
               MOV   6DH,#0AH

               AJMP  GFLASHOUT

GFLASH5:       JB    0EH,GFLASH6
               MOV   6BH,#0AH
               MOV   6AH,#0AH
               AJMP  GFLASHOUT


GFLASH6:
               MOV   69H,#0AH
               MOV   68H,#0AH
               AJMP  GFLASHOUT




    ;*********************************
;*         加1         *
  ;*********************************



ADD1:         MOV     A,R7
              ADD     A,#01H
              DA      A
              RET



    ;*********************************
;*         分离          *
  ;*********************************
  DIVIDE:      MOV     A,R0
               ANL     A,#0FH
               MOV     R1,A
               MOV     A,R0
               SWAP    A
               ANL     A,#0FH
               MOV     R2,A
               RET







   ;*********************************
;*         写1302程序            *
  ;*********************************
    WRITE:  CLR SCLK
            NOP
            SETB RST
            NOP
            MOV A,DS1302_ADDR
            MOV R4,#8
    WRITE1: RRC A                       ;送地址给1302
            NOP
            NOP
            CLR SCLK
            NOP
            NOP
            NOP
            MOV IO,C
            NOP
            NOP
            NOP
            SETB SCLK
            NOP
            NOP
            DJNZ R4,WRITE1
            CLR SCLK
            NOP
            MOV A,DS1302_DATA
            MOV R4,#8
    WRITE2: RRC A
            NOP                        ;送数据给1302
            CLR SCLK
            NOP
            NOP
            MOV IO,C
            NOP
            NOP
            NOP
            SETB SCLK
            NOP
            NOP
            DJNZ R4,WRITE2
            CLR RST
            RET
;*******************************
;*         读1302程序          *
;*******************************
    READ:  CLR SCLK
           NOP
           NOP
           SETB RST
           NOP
           MOV A,DS1302_ADDR
           MOV R4,#8
   READ1:  RRC A
           NOP
           MOV IO,C
           NOP
           NOP
           NOP
           SETB SCLK
           NOP
           NOP
           NOP
          CLR SCLK
          NOP
          NOP
          DJNZ R4,READ1
          MOV R4,#8
  READ2:  CLR SCLK
          NOP
          NOP

          SETB IO

          MOV C,IO
          NOP
          NOP
          NOP
          NOP
          NOP
          RRC A
          NOP
          NOP
          NOP
          NOP
          SETB SCLK
          NOP
          DJNZ R4,READ2
          MOV DS1302_DATA,A
          CLR RST
          RET





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                          子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                       REST DS18B20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITDS1820:      LCALL     DISPLAY
                 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:      ;LCALL     DISPLAY

                 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:     ;LCALL     DISPLAY
                 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
                 LCALL     DISPLAY
                 MOV    A,     #0CCH
                 LCALL  WRITEDS1820
                 MOV    R6,        #34H
                 DJNZ   R6,        $
                 MOV    A,         #44H
                 LCALL  WRITEDS1820
                 MOV    R6,        #34H
                 DJNZ   R6,        $
                 RET



READTEMP1:      LCALL     INITDS1820
                LCALL     DISPLAY
                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      4AH,A
                 MOV      A,TEMPLC
                 SWAP     A
                 ANL      A,#0FH
                 MOV      4BH,A
                 MOV      A,TEMPHC
                 ANL      A,#0FH
                 MOV      4CH,A
                 MOV      A,TEMPHC
                 SWAP     A
                 ANL      A,#0FH
                 MOV      4DH,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      4DH,#0AH
                 MOV      4CH,A

DISPBCD2:        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 7DH,#02H
               MOV 7CH,#00H
               MOV R0,#46H
               MOV R1,#66H
               MOV R2,76H
               MOV R3,#76H
               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,R0
               MOV    R7,A

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


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






PLAY3:         MOV    A,R5
               MOV    P2,A
               LCALL  DL1MS

               MOV    A,R5
               JNB    ACC.7,PLAYOUT
               RL     A
               MOV    R5,A
               LJMP   PLAY1

PLAYOUT:       SETB   P2.7
               RET

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



YS100:    MOV R6,#99
L100:     LCALL YS10
          NOP
          DJNZ R6,L100
          NOP
          NOP
          RET

YS10:     MOV R7,#250
  L1:     DJNZ R7,L1
          RET

SETXIAOSHU:







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 + -