📄 main.lst
字号:
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 + -