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

📄 main.lst

📁 用51单片机做的时钟
💻 LST
📖 第 1 页 / 共 4 页
字号:
A51 MACRO ASSEMBLER  MAIN                                                                 11/22/2005 10:14:03 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\keil\C51\BIN\A51.EXE main.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;单片机时钟控制程序,使用DS12887时钟芯片,具有掉电保护功能
                       2     ;设计:张更生,时间:2005年11月6日
                       3     ;版本:1。0
                       4     
                       5     ;********************************************************
                       6     ;编译预定义             
  0093                 7             CS      EQU     P1.3
  0040                 8             HOUR    EQU     40H     ;小时
  0041                 9             MUNITE  EQU     41H     ;分钟
  0042                10             SECOND  EQU     42H     ;秒
  0043                11             YEAR    EQU     43H     ;年
  0044                12             MONTH   EQU     44H     ;月
  0045                13             DAY     EQU     45H     ;日
  0046                14             HOLIDAY EQU     46H     ;星期
  003A                15             MS      EQU     3AH     ;MS,MS255共用于定时
  003B                16             MS255   EQU     3BH
  0001                17             KEY_DIR_1       EQU     01H
  0002                18             OVER3S  EQU     02H     ;是否按住按键超过三秒
  0003                19             KEY_DIR EQU     03H     ;是否有按键输出
  003C                20             KEY_VOL EQU     3CH     ;用于存按键值
  003D                21             FLASH_BIT       EQU     3DH
                      22     
                      23     
0000                  24             ORG     0000H
0000 802E             25             SJMP    0030H
000B                  26             ORG     000BH           ;定时器T0中断控制动态显示
000B 020089           27             LJMP    ITP_T0
0030                  28             ORG     0030H
0030                  29     MAIN:   
0030 758160           30             MOV     SP,     #60H    ;INIT_RAM
0033 C2AF             31             CLR     EA
0035 C201             32             CLR     KEY_DIR_1
0037 C203             33             CLR     KEY_DIR
0039 C202             34             CLR     OVER3S
                      35                                     
003B 758901           36             MOV     TMOD,   #01H    ;初始化定时器T0
003E 758CFC           37             MOV     TH0,    #0FCH   ;定时1MS
0041 758A17           38             MOV     TL0,    #17H
0044 853080           39             MOV     P0,     30H
0047 7538FE           40             MOV     38H,    #0FEH
004A 753930           41             MOV     39H,    #30H    ;动态显示缓存指针
004D 75A0FE           42             MOV     P2,     #0FEH
0050 753D00           43             MOV     FLASH_BIT,#00H
0053 D2AF             44             SETB    EA              ;启动定时器1MS中断显示功能
0055 D2A9             45             SETB    ET0
0057 D28C             46             SETB    TR0
                      47     ;********************************************************
                      48     ;DS12887初始化
0059                  49     DS12887:
0059 C28C             50             CLR     TR0
005B C293             51             CLR     CS
005D C080             52             PUSH    P0
005F 7580FF           53             MOV     P0,     #0FFH
                      54     
0062 85A083           55             MOV     DPH,    P2
0065 75820A           56             MOV     DPL,    #0AH
0068 7420             57             MOV     A,      #20H
006A F0               58             MOVX    @DPTR,  A
A51 MACRO ASSEMBLER  MAIN                                                                 11/22/2005 10:14:03 PAGE     2

006B 75820B           59             MOV     DPL,    #0BH
006E 7402             60             MOV     A,      #02H
0070 F0               61             MOVX    @DPTR,  A
0071 758250           62             MOV     DPL,    #50H
0074 7420             63             MOV     A,      #20H
0076 F0               64             MOVX    @DPTR,  A
                      65     
0077 D080             66             POP     P0
0079 D293             67             SETB    CS
007B D28C             68             SETB    TR0
                      69     ;********************************************************
                      70     
007D                  71     LOOP:   
007D 11C5             72             CALL    TIME_DISP       ;调用时间显示子程序
007F 9199             73             CALL    KEYBO           ;调用按键查询
0081 313A             74             CALL    DATE_DISP       ;调用日期显示
0083 31C9             75             CALL    CHANGE_TIME     ;调用时间设置子程序
0085 714F             76             CALL    CHANGE_RING     ;改变打铃设置
0087 80F4             77             SJMP    LOOP
                      78     
                      79     
                      80     
                      81     
                      82     
                      83     
                      84     
                      85     
                      86     
                      87     
                      88     
                      89     
                      90     
                      91     
                      92     
                      93     
                      94     
                      95     
                      96     
                      97     ;***************************************************************************************
                      98     ;***************************************************************************************
                      99     ;定时器一中断子程序
0089 C2AF            100     ITP_T0: CLR     EA
008B C0E0            101             PUSH    ACC
008D A839            102             MOV     R0,     39H
008F 08              103             INC     R0
0090 8839            104             MOV     39H,    R0
0092 B83805          105             CJNE    R0,     #38H,   N_RESET
0095 7830            106             MOV     R0,     #30H    ;如果超出缓存范围,指针重置
0097 753930          107             MOV     39H,    #30H
009A E6              108     N_RESET:MOV     A,      @R0
009B F4              109             CPL     A
009C F580            110             MOV     P0,     A
009E E538            111             MOV     A,      38H
00A0 23              112             RL      A
00A1 F538            113             MOV     38H,    A
00A3 453D            114             ORL     A,      FLASH_BIT
00A5 F5A0            115             MOV     P2,     A
                     116     
00A7 E53A            117             MOV     A,      MS      ;计时(MS,MS255)
00A9 2401            118             ADD     A,      #01H
00AB F53A            119             MOV     MS,     A
00AD E53B            120             MOV     A,      MS255
00AF 3400            121             ADDC    A,      #00H
00B1 F53B            122             MOV     MS255,  A
00B3 E53A            123             MOV     A,      MS
00B5 B4FE02          124             CJNE    A,      #0FEH,  TIP_T0_NEXT
A51 MACRO ASSEMBLER  MAIN                                                                 11/22/2005 10:14:03 PAGE     3

00B8 D200            125             SETB    00H
                     126     
00BA                 127     TIP_T0_NEXT:
00BA 758CFC          128             MOV     TH0,    #0FCH   ;定时1MS
00BD 758A17          129             MOV     TL0,    #17H
00C0 D0E0            130             POP     ACC
00C2 D2AF            131             SETB    EA
00C4 32              132             RETI
                     133     ;*********************************************************
                     134     ;时间显示子程序
00C5                 135     TIME_DISP:
00C5 300063          136             JNB     00H,    TIME_RET
00C8 C200            137             CLR     00H
00CA C28C            138             CLR     TR0
00CC C293            139             CLR     CS
00CE C080            140             PUSH    P0
00D0 7580FF          141             MOV     P0,     #0FFH
                     142     
00D3 85A083          143             MOV     DPH,    P2
00D6 75820A          144             MOV     DPL,    #0AH
00D9 E0              145             MOVX    A,      @DPTR
00DA 20E7E8          146             JB      ACC.7,  TIME_DISP;直到UIP位为0时才能读数据
00DD 758204          147             MOV     DPL,    #04H
00E0 E0              148             MOVX    A,      @DPTR
00E1 F540            149             MOV     HOUR,   A
00E3 758202          150             MOV     DPL,    #02H
00E6 E0              151             MOVX    A,      @DPTR
00E7 F541            152             MOV     MUNITE, A
00E9 758200          153             MOV     DPL,    #00H
00EC E0              154             MOVX    A,      @DPTR
00ED F542            155             MOV     SECOND, A
                     156     
00EF D080            157             POP     P0              ;恢复
00F1 D293            158             SETB    CS
00F3 D28C            159             SETB    TR0
                     160     
00F5 90012C          161             MOV     DPTR,   #TIME_TAB       ;拆字并送往显存
00F8 753240          162             MOV     32H,    #40H    ;显示"-"
00FB 753540          163             MOV     35H,    #40H
00FE E540            164             MOV     A,      HOUR    ;以下产生时的高位
0100 54F0            165             ANL     A,      #0F0H
0102 C4              166             SWAP    A
0103 93              167             MOVC    A,      @A+DPTR
0104 F530            168             MOV     30H,    A
0106 E540            169             MOV     A,      HOUR    ;以下产生时的低位
0108 540F            170             ANL     A,      #0FH
010A 93              171             MOVC    A,      @A+DPTR
010B F531            172             MOV     31H,    A
010D E541            173             MOV     A,      MUNITE  ;以下产生分的高位
010F 54F0            174             ANL     A,      #0F0H
0111 C4              175             SWAP    A
0112 93              176             MOVC    A,      @A+DPTR
0113 F533            177             MOV     33H,    A
0115 E541            178             MOV     A,      MUNITE  ;以下产生分的低位
0117 540F            179             ANL     A,      #0FH
0119 93              180             MOVC    A,      @A+DPTR
011A F534            181             MOV     34H,    A
011C E542            182             MOV     A,      SECOND  ;以下产生秒的高位
011E 54F0            183             ANL     A,      #0F0H
0120 C4              184             SWAP    A
0121 93              185             MOVC    A,      @A+DPTR
0122 F536            186             MOV     36H,    A
0124 E542            187             MOV     A,      SECOND  ;以下产生秒的低位
0126 540F            188             ANL     A,      #0FH
0128 93              189             MOVC    A,      @A+DPTR
0129 F537            190             MOV     37H,    A
A51 MACRO ASSEMBLER  MAIN                                                                 11/22/2005 10:14:03 PAGE     4

                     191     ;       sjmp    $
                     192             
012B 22              193     TIME_RET:RET
012C 3F065B4F        194     TIME_TAB:DB      3FH,    06H,    5BH,    4FH,    66H,    6DH
0130 666D                    
0132 7D077F6F        195             DB      7DH,    07H,    7FH,    6FH,    00H,    78H
0136 0078                    
0138 3140            196             DB      31H,    40H
                     197     
                     198     ;***************************************************************
                     199     ;日期显示子程序
013A                 200     DATE_DISP:
013A 300362          201             JNB     KEY_DIR,DATE_RET2       ;按键确认
013D E53C            202             MOV     A,      KEY_VOL
013F B40164          203             CJNE    A,      #01H,   DATE_RET
0142 C203            204             CLR     KEY_DIR
                     205     
0144 753A00          206             MOV     MS,     #00H    ;对计时器清零
0147 753B00          207             MOV     MS255,  #00H    
                     208     
014A                 209     DATE_DISP1:
014A 300049          210             JNB     00H,    DATE_DIS_NO;每255MS调用一次日期显示
014D C200            211             CLR     00H
014F C28C            212             CLR     TR0
0151 C293            213             CLR     CS
0153 C080            214             PUSH    P0
0155 7580FF          215             MOV     P0,     #0FFH
                     216     
0158 31A7            217             CALL    GET_DATE        ;获取日期数据
                     218     
015A D080            219             POP     P0              ;恢复
015C D293            220             SETB    CS
015E D28C            221             SETB    TR0
                     222     
0160 90012C          223             MOV     DPTR,   #TIME_TAB       ;拆字并送往显存
0163 753240          224             MOV     32H,    #40H    ;显示"-"
0166 753500          225             MOV     35H,    #00H
0169 E544            226             MOV     A,      MONTH   ;以下产生月份的高位
016B 54F0            227             ANL     A,      #0F0H
016D C4              228             SWAP    A
016E 93              229             MOVC    A,      @A+DPTR
016F F530            230             MOV     30H,    A
0171 E544            231             MOV     A,      MONTH   ;以下产生月份的低位
0173 540F            232             ANL     A,      #0FH
0175 93              233             MOVC    A,      @A+DPTR
0176 F531            234             MOV     31H,    A
0178 E545            235             MOV     A,      DAY     ;以下产生日期的高位
017A 54F0            236             ANL     A,      #0F0H
017C C4              237             SWAP    A
017D 93              238             MOVC    A,      @A+DPTR
017E F533            239             MOV     33H,    A

⌨️ 快捷键说明

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