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

📄 1302.asm

📁 万年历程序 从1302中读出的数据放在67H(高两位年)66H(低两位年)65H(月)64H(星期)63H(日) 62H(小时)61H(分钟)60H(秒)57H(农历月)56H(农历日) 显示
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                        ; 万年历程序
;从1302中读出的数据放在67H(高两位年)66H(低两位年)65H(月)64H(星期)63H(日)
 ;; 62H(小时)61H(分钟)60H(秒)57H(农历月)56H(农历日)
 ;; 显示缓冲单元7CH-7BH(4CH-4BH)(年低位),7AH-79H(4AH-49H)月,78H(48H)星期,
;77H-76H(47H-46H)日,75H-74H(45H-44H)小时,73H-72H(43H-42H)分钟,71H-70H(41H-40H)秒 5EH-5DH(55H-54H)农历年,5CH-5BH(53H-52H)农历月,5AH-59H(51H-50H)农历日
 ;;;; 闰月标志为F0,定时器T1为调整时候闪烁用。
 ;1302在设置调整时间后,要改为禁止写入状态,否则在上电复位的时候就发生误写入,使时间值加1分钟
;次程序中的段码表只适用于该特殊的硬件,具体的段码表由具体的硬件决定

                               SCLK  EQU P3.2
                                IO   EQU P3.3
                                RST  EQU P3.4
                                year DATA 66H
                               month DATA 65H
                                week DATA 64H
                                day  DATA 63H
                                hour DATA 62H
                              mintue DATA 61H
                              second DATA 60H
                         DS1302_ADDR DATA 32H
                         DS1302_DATA DATA 31H
                                  ORG 0000H
                                  LJMP  START
                                  ORG 0003H
                                  RETI
                                  ORG 000BH
                                  RETI
                                  ORG 0013H
                                  RETI
                                  ORG 001BH
                                  LJMP INTT1
                                  ORG 0023H
                                  RETI
                                  ORG 002BH
                                  RETI
                              ;;;;;;;;;;;;;;;;;;
                              ;;;;主程序;;;;
                             ;;;;;;;;;;;;;;;;;;;
                START:    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,#90H
                          MOV  DS1302_DATA,#0A6H;1302充电,充电电流1.1MA
                          LCALL  WRITE
              MAIN1:      MOV  DS1302_ADDR,#8DH   ;读出年
                          LCALL  READ
                          MOV   year,DS1302_DATA
                          MOV   DS1302_ADDR,#8BH  ;读出星期
                          LCALL  READ
                          MOV    week ,DS1302_DATA
                          MOV   DS1302_ADDR,#89H   ;读出月
                          LCALL  READ
                          MOV    month,DS1302_DATA
                          MOV    DS1302_ADDR,#87H  ;读出日
                          LCALL  READ
                          MOV    day,DS1302_DATA
                          MOV    DS1302_ADDR,#85H  ;读出小时
                          LCALL   READ
                          MOV     hour,DS1302_DATA
                          MOV    DS1302_ADDR,#83H  ;读出分钟
                          LCALL   READ
                          MOV    mintue,DS1302_DATA
                          MOV    DS1302_ADDR,#81H  ;读出秒
                          LCALL  READ
                          MOV   second,DS1302_DATA
                          MOV   R0,year   ;年分离,送显示缓存
                          LCALL  DIVIDE
                          MOV   7BH,R1
                          MOV   4BH,R1
                          MOV   7CH,R2
                          MOV   4CH,R2
                          MOV   78H,week
                          MOV   48H,week
                          MOV   R0,month  ;月分离,送显示缓存
                          LCALL DIVIDE
                          MOV   79H,R1
                          MOV   49H,R1
                          MOV   7AH,R2
                          MOV   4AH,R2
                          MOV   R0,day   ;日分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    76H,R1
                          MOV    46H,R1
                          MOV    77H,R2
                          MOV    47H,R2
                          MOV    R0,hour ;小时分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    74H,R1
                          MOV    44H,R1
                          MOV    75H,R2
                          MOV    45H,R2
                          MOV    R0,mintue ;分钟分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    72H,R1
                          MOV    42H,R1
                          MOV    73H,R2
                          MOV    43H,R2
                          MOV    R0,second  ;秒分离,送显示缓存
                          LCALL  DIVIDE
                          MOV    70H,R1
                          MOV    40H,R1
                          MOV    71H,R2
                          MOV    41H,R2
                          LCALL DISPLAY
                          LCALL GENGXIAN   ;更新农历程序
                          JNB P1.1,SETG
                          JNB F0,SSS
                          CLR P1.3       ;闰月,则p1.3清零,指示灯亮
                          LJMP MAIN1
                    SSS:  SETB P1.3      ;非闰月,则p1.3置位,指示灯灭
                          LJMP MAIN1
                   ;;;;;;;;;;;;;;;;;
                   ;;公历设置程序;;;
                   ;;;;;;;;;;;;;;;;;
                  SETG :   SETB TR1
                           SETB ET1
                           MOV DS1302_ADDR,#8EH
                           MOV DS1302_DATA,#00H  ;允许写1302
                           LCALL WRITE
                           MOV DS1302_ADDR,#80H
                           MOV DS1302_DATA,#80H  ;1302停止振荡
                           LCALL WRITE
                  GWAIT: LCALL DISPLAY
                           JNB P1.1,GWAIT
                  SETG1: LCALL DISPLAY
                           JNB P1.1,SETG2
                           JNB P1.2,GADDYEAR
                           AJMP SETG1
              GADDYEAR:    MOV R7,66H      ;年加一
                           LCALL ADD1
                           MOV 66H,A
                           CJNE A,#51H, GADDYEAR1
                           MOV 66H,#01H
             GADDYEAR1:    MOV DS1302_ADDR,#8CH ;年值送人1302
                           MOV DS1302_DATA,66H
                           LCALL WRITE
                           MOV R0,66H
                           LCALL DIVIDE  ;年分离送显示缓存
                           MOV 4BH,R1
                           MOV 7BH,R1
                           MOV 4CH,R2
                           MOV 7CH,R2
                  WAITT1:LCALL DISPLAY
                           JNB P1.2,WAITT1
                           AJMP SETG1
                  SETG2: SETB 0AH      ;调月时闪标志
                GWAIT2:  LCALL DISPLAY
                           JNB P1.1,GWAIT2
                  SETG3: LCALL DISPLAY
                           JNB P1.1,SETG4
                           JNB P1.2,GADDMONTH
                           AJMP SETG3
            GADDMONTH:MOV R7,65H     ;月加一
                           LCALL ADD1
                           MOV 65H,A
                           CJNE A,#13H,GADDMONTH1
                           MOV 65H,#01H
         GADDMONTH1:  MOV DS1302_ADDR,#88H  ;月值送人1302
                           MOV DS1302_DATA,65H
                           LCALL WRITE
                           MOV R0,65H
                           LCALL DIVIDE  ;月分离,送显示缓存
                           MOV 79H,R1
                           MOV 49H,R1
                           MOV 7AH,R2
                           MOV 4AH,R2
               WAITT2:  LCALL DISPLAY
                           JNB P1.2,WAITT2
                           AJMP SETG3
                SETG4:   SETB 0BH    ;调日时闪标志
                GWAIT4:  LCALL DISPLAY
                           JNB P1.1,GWAIT4
                SETG5:   LCALL DISPLAY
                           JNB P1.1,SETG6
                           JNB P1.2,GADDDAY
                           AJMP SETG5
             GADDDAY:  MOV R7,63H     ;日加一
                           LCALL ADD1
                           MOV 63H,A
                           CJNE A,#32H,GADDDAY1
                           MOV  63H,#01H
             GADDDAY1: MOV DS1302_ADDR,#86H ;日值送人1302
                           MOV DS1302_DATA,63H
                           LCALL WRITE
                           MOV R0,63H
                           LCALL DIVIDE  ;日分离,送显示缓存
                           MOV 76H,R1
                           MOV 46H,R1
                           MOV 77H,R2
                           MOV 47H,R2
                  WAITT3:LCALL DISPLAY
                           JNB P1.2,WAITT3
                           AJMP SETG5
                SETG6:   SETB 0CH    ;调星期时闪标志
               GWAIT6:   LCALL DISPLAY
                           JNB P1.1,GWAIT6
                SETG7:   LCALL DISPLAY
                           JNB P1.1,SETG8
                           JNB P1.2,GADDWEEK
                           AJMP SETG7
            GADDWEEK:  MOV R7,64H  ;星期加一
                           LCALL ADD1
                           MOV 64H,A
                           CJNE A,#08H,GADDWEEK1
                           MOV  64H,#01H
          GADDWEEK1:  MOV DS1302_ADDR,#8AH
                           MOV DS1302_DATA,64H  ;星期值送人1302
                           LCALL WRITE
                           MOV R0,64H
                           LCALL DIVIDE  ;星期值分离送显示缓存
                           MOV 48H,R1
                           MOV 78H,R1
                  WAITT4:LCALL DISPLAY
                           JNB P1.2,WAITT4
                           AJMP SETG7
                SETG8:   SETB 0DH   ;调小时时闪标志
                GWAIT8:  LCALL DISPLAY
                           JNB P1.1,GWAIT8
                 SETG9:  LCALL DISPLAY
                           JNB P1.1,SETG10
                           JNB P1.2,GADDHOUR
                           AJMP SETG9
            GADDHOUR:  MOV R7,62H  ;小时加一
                           LCALL ADD1
                           MOV 62H,A
                           CJNE A,#24H,GADDHOUR1
                           MOV 62H,#00H
              GADDHOUR1:  MOV DS1302_ADDR,#84H ;小时值送人1302
                           MOV DS1302_DATA,62H
                           LCALL WRITE
                           MOV R0,62H
                           LCALL DIVIDE ;小时值分离送显示缓存
                           MOV 74H,R1
                           MOV 44H,R1
                           MOV 75H,R2
                           MOV 45H,R2
                 WAITT5: LCALL DISPLAY
                           JNB P1.2,WAITT5
                           AJMP SETG9

               SETG10:   SETB 0EH   ;调分时候闪标志
              GWAIT10:   LCALL DISPLAY
                           JNB P1.1,GWAIT10
               SETG11:   LCALL DISPLAY
                           JNB P1.1,SETGOUT
                           JNB P1.2,GADDMINTUE
                           AJMP SETG11
        GADDMINTUE:   MOV R7,61H    ;分钟加一
                           LCALL ADD1
                           MOV 61H,A
                           CJNE A,#60H,GADDMINTUE1
                           MOV 61H,#00H
       GADDMINTUE1:      MOV DS1302_ADDR,#82H ;分钟值送人1302
                           MOV DS1302_DATA,61H
                           LCALL WRITE
                           MOV R0,61H
                           LCALL DIVIDE ;分钟值分离送显示缓存
                           MOV 72H,R1
                           MOV 42H,R1
                           MOV 73H,R2
                           MOV 43H,R2
                 WAITT6: LCALL DISPLAY
                           JNB P1.2,WAITT6
                           AJMP SETG11
              SETGOUT:  LCALL DISPLAY
                           JNB P1.1,SETGOUT
                           LCALL GENGXIAN
                           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 MAIN1

⌨️ 快捷键说明

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