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

📄 正式成功.asm

📁 制作一个温度万年历
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************
;*        温度万年历程序         *
;*****************************
;2DH(高两位年)2CH(低两位年)
;7DH~7AH(73H~70H)年位
;2BH(月)
;79H~78H(61H~60H)月
;2AH(日)
;77H~76H(51H~50H)日
;29H(星期)
;6DH(5DH)星期
;28H(小时)
;6BH~6AH(5BH~5AH)时
;27H(分)
;69H~68H(59H~58H)分
;26H(秒)
;67H~66H(57H~56H)秒
;25H~24H(温度)
;4DH~4AH(3DH~3AH)温度
;23H(农历月)
;49H~48H(39H~38H)(农历月)
;22H(农历日)
;47HH~46H(37H~36H)农历日
;显示缓冲单元,,

;闰年标志为F0,定时器T1为调整时候闪烁用
;
;



SCLK  EQU  P3.2
IO    EQU  P3.3
RST   EQU  P3.4
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H

YEARH   DATA 2DH
YEARL   DATA 2CH
MONTH   DATA 2BH
DAY     DATA 2AH
WEEK    DATA 29H
HOUR    DATA 28H
MINUTE  DATA 27H
SECOND  DATA 26H
TEMP_H  DATA 25H
TEMP_L  DATA 24H
NMONTH  DATA 23H
NDAY    DATA 22H

TEMPDIN     BIT      P3.6    ;DS18B20通信端
SPEAKERDIN  BIT      P3.7    ;蜂铃器端口
SET_TIME    BIT      P1.0    ;时间设置
SET_RING    BIT      P1.1    ;闹钟设置
SET_ADD     BIT      P1.2    ;加键设置





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




     BITST      DATA     20H
     TIME1SOK   BIT      BITST.1
     TEMPONEOK  BIT      BITST.2
     TEMPL      DATA     16H
     TEMPH      DATA     17H
     TEMPHC     DATA     18H
     TEMPLC     DATA     19H


    ;************************************
     ;*           中断入口              *
   ;************************************

                 ORG  0000H
                 AJMP START
                 ORG  0003H
                 RETI
                 ORG  000BH
                 RETI
                 ;LJMP T0IT
                 ORG  0013H
                 RETI
                 ORG  001BH
                 LJMP INTT1
                 ORG  0023H
                 RETI
                 ORG  002BH
                 RETI



    ;************************************
     ;*            初始化               *
   ;************************************
                 ORG  100H

    ;************************************
     ;*            存储区初始化               *
   ;************************************
   START:   ;???MOV  SP,#60H

   CLEAR:   MOV  R0,#00H
            MOV  R1,#99H

   CLEAR1:  MOV  @R0,#00H
            INC  R0
            DJNZ R1,CLEAR1


   ;************************************
     ;*            延时1S               *
   ;************************************
DELAY1S:      MOV    R0,#10H
DELAY1S1:     LCALL  YS100
              DJNZ   R0,DELAY1S1



  ;         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     DISPLAY

              LCALL     READTEMP
            ; SETB      TEMPONEOK
             LCALL     DISPLAY
            ; JNB       TIME1SOK,  MAIN
            ; CLR       TIME1SOK
            ; JNB       TEMPONEOK,   MAIN2
            LCALL     READTEMP1
            LCALL     DISPLAY
            LCALL     CONVTEMP
            LCALL     DISPLAY
            LCALL     DISPBCD
               LCALL     DISPLAY

;MAIN2:       LCALL     READTEMP
             ;SETB      TEMPONEOK



   ;************************************
     ;*            1302初始化              *
   ;************************************


            SETB EA
            MOV SCON,#00H    ;串行输出,方式0
            MOV TMOD,#10H    ;计数器1,方式1
            MOV TL1,#00H
            MOV TH1,#00H
            MOV DS1302_ADDR,#8EH
            MOV DS1302_DATA,#00H       ;允许写1302
            LCALL WRITE

            ;MOV DS1302_ADDR,#80H
            ;MOV DS1302_DATA,#00H       ;允许写1302
            ;LCALL WRITE


            MOV DS1302_ADDR,#90H
            MOV DS1302_DATA,#0A6H       ;1302充电,充电电流1.1mA
            LCALL WRITE


 MAIN1:     MOV DS1302_ADDR,#8DH         ;READ OUT YEAR
            LCALL READ
            MOV YEARL,DS1302_DATA
            MOV DS1302_ADDR,#8BH        ;READ OUT WEEK
            LCALL READ
            MOV WEEK,DS1302_DATA
            MOV DS1302_ADDR,#89H          ;READ OUT MONTH
            LCALL READ
            MOV MONTH,DS1302_DATA
            MOV DS1302_ADDR,#87H          ;READ OUT DAY
            LCALL READ
            MOV DAY,DS1302_DATA
            MOV DS1302_ADDR,#85H       ;READ OUT HOUR
            LCALL READ
            MOV HOUR,DS1302_DATA
            MOV DS1302_ADDR,#83H       ;READ OUT MINTUE
            LCALL READ
            MOV MINUTE,DS1302_DATA
            MOV DS1302_ADDR,#81H       ;READ OUT SECOND
            LCALL READ
            MOV SECOND,DS1302_DATA

            MOV     R0,YEARL
            LCALL   DIVIDE
            MOV     7AH,R1
            MOV     70H,R1
            MOV     7BH,R2
            MOV     71H,R2
            MOV     6DH,WEEK
            MOV     5DH,WEEK

            MOV     R0,MONTH
            LCALL   DIVIDE
            MOV     78H,R1
            MOV     60H,R1
            MOV     79H,R2
            MOV     61H,R2

            MOV     R0,DAY
            LCALL   DIVIDE
            MOV     76H,R1
            MOV     50H,R1
            MOV     77H,R2
            MOV     51H,R2

            MOV     R0,HOUR
            LCALL   DIVIDE
            MOV     6AH,R1
            MOV     5AH,R1
            MOV     6BH,R2
            MOV     5BH,R2

            MOV     R0,MINUTE
            LCALL   DIVIDE
            MOV     68H,R1
            MOV     58H,R1
            MOV     69H,R2
            MOV     59H,R2

            MOV     R0,SECOND
            LCALL   DIVIDE
            MOV     66H,R1
            MOV     56H,R1
            MOV     67H,R2
            MOV     57H,R2

            LCALL    DISPLAY

            JNB      SET_TIME ,SETG


            LJMP     MAIN




   ;*********************************
;*         公历           *
  ;*********************************

SETG:       SETB   TR1
            SETB   ET1
            CLR    08H
            CLR    09H
            CLR    0AH
            CLR    0BH
            CLR    0CH
            CLR    0DH
            CLR    0EH
            CLR    0FH


            MOV    DS1302_ADDR,#8EH
            MOV    DS1302_DATA,#00H

            LCALL  WRITE

            MOV    DS1302_ADDR,#80H
            MOV    DS1302_DATA,#80H
            LCALL  WRITE

GWAIT:      LCALL   DISPLAY
            JNB     SET_TIME ,GWAIT

SETG1:      LCALL   DISPLAY
            JNB     SET_TIME ,SETG2
            JNB     SET_ADD,GADDYEAR
            AJMP    SETG1

GADDYEAR:   MOV     R7,2CH
            LCALL   ADD1
            MOV     2CH,A
            CJNE    A,#51H,GADDYEAR1
            MOV     2CH,#01H

GADDYEAR1:  MOV     DS1302_ADDR,#8CH
            MOV     DS1302_DATA,2CH
            LCALL   WRITE
            MOV     R0,2CH
            LCALL   DIVIDE
            MOV     70H,R1
            MOV     7AH,R1
            MOV     71H,R2
            MOV     7BH,R2

WAITT1:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT1
            AJMP    SETG1

SETG2:      SETB    0AH

GWAITT2:    LCALL   DISPLAY
            JNB     SET_TIME ,GWAITT2

SETG3:      LCALL   DISPLAY
            JNB     SET_TIME ,SETG4
            JNB     SET_ADD,GADDMONTH
            AJMP    SETG3

GADDMONTH:  MOV     R7,2BH
            LCALL   ADD1
            MOV     2BH,A
            CJNE    A,#13H,GADDMONTH1
            MOV     2BH,#01H

GADDMONTH1: MOV     DS1302_ADDR,#88H
            MOV     DS1302_DATA,2BH
            LCALL   WRITE
            MOV     R0,2BH
            LCALL   DIVIDE
            MOV     60H,R1
            MOV     78H,R1
            MOV     61H,R2
            MOV     79H,R2

WAITT2:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT2
            AJMP    SETG3

SETG4:      SETB    0BH

GWAIT4:     LCALL   DISPLAY
            JNB     SET_TIME ,GWAIT4

SETG5:      LCALL   DISPLAY
            JNB     SET_TIME ,SETG6
            JNB     SET_ADD,GADDDAY
            AJMP    SETG5



GADDDAY:    MOV     R7,2AH
            LCALL   ADD1
            MOV     2AH,A
            CJNE    A,#32H,GADDDAY1
            MOV     2AH,#01H

GADDDAY1:   MOV     DS1302_ADDR,#86H
            MOV     DS1302_DATA,2AH
            LCALL   WRITE
            MOV     R0,2AH
            LCALL   DIVIDE
            MOV     50H,R1
            MOV     76H,R1
            MOV     51H,R2
            MOV     77H,R2

WAITT3:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT3
            AJMP    SETG5

SETG6:      SETB    0CH

GWAIT6:     LCALL   DISPLAY
            JNB     SET_TIME ,GWAIT6

SETG7:      LCALL   DISPLAY
            JNB     SET_TIME ,SETG8
            JNB     SET_ADD,GADDWEEK
            AJMP    SETG7




GADDWEEK:   MOV     R7,29H
            LCALL   ADD1
            MOV     29H,A
            CJNE    A,#08H,GADDWEEK1
            MOV     29H,#01H

GADDWEEK1:  MOV     DS1302_ADDR,#8AH
            MOV     DS1302_DATA,29H
            LCALL   WRITE
            MOV     R0,29H
            LCALL   DIVIDE
            MOV     5DH,R1
            MOV     6DH,R1


WAITT4:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT4
            AJMP    SETG7

SETG8:      SETB    0DH

GWAIT8:     LCALL   DISPLAY
            JNB     SET_TIME ,GWAIT8

SETG9:      LCALL   DISPLAY
            JNB     SET_TIME ,SETG10
            JNB     SET_ADD,GADDHOUR
            AJMP    SETG9



GADDHOUR:   MOV     R7,28H
            LCALL   ADD1
            MOV     28H,A
            CJNE    A,#24H,GADDHOUR1
            MOV     28H,#00H

GADDHOUR1:  MOV     DS1302_ADDR,#84H
            MOV     DS1302_DATA,28H
            LCALL   WRITE
            MOV     R0,28H
            LCALL   DIVIDE
            MOV     5AH,R1
            MOV     6AH,R1
            MOV     5BH,R2
            MOV     6BH,R2

WAITT5:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT5
            AJMP    SETG9

SETG10:     SETB    0EH

GWAIT10:    LCALL   DISPLAY
            JNB     SET_TIME ,GWAIT10

SETG11:     LCALL   DISPLAY
            JNB     SET_TIME ,SETGOUT
            JNB     SET_ADD,GADDMINUTE
            AJMP    SETG11


GADDMINUTE: MOV     R7,27H
            LCALL   ADD1
            MOV     27H,A
            CJNE    A,#60H,GADDMINUTE1
            MOV     27H,#00H

GADDMINUTE1:MOV     DS1302_ADDR,#82H
            MOV     DS1302_DATA,27H
            LCALL   WRITE
            MOV     R0,27H
            LCALL   DIVIDE
            MOV     58H,R1
            MOV     68H,R1
            MOV     59H,R2
            MOV     69H,R2

WAITT6:     LCALL   DISPLAY
            JNB     SET_ADD,WAITT6
            AJMP    SETG11

SETGOUT:    LCALL   DISPLAY
            JNB     SET_TIME ,SETGOUT
            MOV DS1302_ADDR,#80H
            MOV DS1302_DATA,#00H       ;允许写1302
            LCALL WRITE

            MOV DS1302_ADDR,#8EH
            MOV DS1302_DATA,#80H       ;允许写1302
            LCALL WRITE

            CLR   08H
            CLR   09H
            CLR   0AH
            CLR   0BH
            CLR   0CH
            CLR   0DH
            CLR   0EH
            CLR   0FH

            CLR    ET1
            CLR    TR1


            LJMP    MAIN


    ;*********************************
;*         散动         *
  ;*********************************

INTT1:   PUSH     ACC
         PUSH     PSW

GFLASH:  CPL      0FH
         JB       0FH,GFLASH1
         MOV      7BH,71H
         MOV      7AH,70H
         MOV      79H,61H
         MOV      78H,60H
         MOV      6DH,5DH
         MOV      77H,51H
         MOV      76H,50H
         MOV      6BH,5BH
         MOV      6AH,5AH
         MOV      69H,59H
         MOV      68H,58H
         MOV      67H,57H
         MOV      66H,56H

GFLASHOUT:     POP   PSW
               POP   ACC
               RETI

GFLASH1:       JB    0AH,GFLASH2
               MOV   7BH,#0AH
               MOV   7AH,#0AH
               AJMP  GFLASHOUT

GFLASH2:       JB    0BH,GFLASH3
               MOV   79H,#0AH
               MOV   78H,#0AH
               AJMP  GFLASHOUT


GFLASH3:       JB    0CH,GFLASH4
               MOV   77H,#0AH

⌨️ 快捷键说明

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