📄 sz612.lst
字号:
A51 MACRO ASSEMBLER SZ612 06/13/2008 10:49:14 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN SZ612.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE SZ612.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
0093 2 LED1 BIT p1.3 ;4位数码管选通引脚
0094 3 LED2 BIT p1.4
0096 4 LED3 BIT p1.6
0097 5 LED4 BIT p1.7
0095 6 LED2DZ BIT P1.5 ;小数点
7
00B0 8 LS164_AB BIT p3.0 ;74LS164数据线
00B1 9 LS164_CLK BIT p3.1 ;74LS164时钟线
10
00B5 11 KEY1 BIT p3.5 ;按键1
00B7 12 KEY2 BIT p3.7 ;按键2
0040 13 DISPFLAG EQU 40H ;显示标识
14
0020 15 DISPBUF EQU 20H
16
0090 17 BEEP BIT p1.0
18
0030 19 MSCNT EQU 30H ;中断次数
20
0031 21 SECONDBUF EQU 31H
0032 22 MINUTEBUF EQU 32H
0033 23 HOURBUF EQU 33H
0034 24 MONTHBUF EQU 34H
25 ;DAYDUB EQU 35H
26
0000 27 ORG 0000h
0000 2100 28 JMP START
000B 29 ORG 000Bh
000B 212C 30 JMP TIMER0
0100 31 ORG 0100H
32
33
0100 34 START:
0100 758150 35 MOV SP,#50H
0103 C295 36 CLR LED2DZ
0105 37 CLRDISPBUF: ; 清显示缓冲区
0105 7A0F 38 MOV R2,#0FH
0107 7821 39 MOV R0,#DISPBUF+1
0109 40 CLRDISPBUFLOOP:
0109 7600 41 MOV @R0,#0H
010B 08 42 INC R0
010C DAFB 43 DJNZ R2,CLRDISPBUFLOOP
44
010E 754000 45 MOV DISPFLAG,#0 ;初始时显示"时,分"
46
0111 C2B0 47 CLR LS164_AB
0113 C2B1 48 CLR LS164_CLK
49
0115 758901 50 MOV TMOD,#01H ; 方式1
51
0118 758C0B 52 MOV TH0,#0BH ;初值
011B 758ADC 53 MOV TL0,#0DCH
54
011E 753016 55 MOV MSCNT,#16H
0121 D2AF 56 SETB EA
0123 D2A9 57 SETB ET0
0125 D28C 58 SETB TR0
A51 MACRO ASSEMBLER SZ612 06/13/2008 10:49:14 PAGE 2
59
0127 60 LOOP:
0127 1201C8 61 LCALL DISP
012A 2127 62 AJMP LOOP
012C 63 TIMER0:
012C C0D0 64 PUSH PSW
012E C0E0 65 PUSH ACC
0130 D2D3 66 SETB PSW.3
0132 758C0B 67 MOV TH0,#0BH
0135 758ADC 68 MOV TL0,#0DCH
0138 E530 69 MOV A,MSCNT
013A 14 70 DEC A
013B F530 71 MOV MSCNT,A
013D 7031 72 JNZ RET1
73 ; 微调
013F C2AF 74 CLR EA
0141 758C0B 75 MOV TH0,#0BH
0144 758ADC 76 MOV TL0,#0DCH
0147 D2AF 77 SETB EA
0149 753010 78 MOV MSCNT,#16
79
80 ; 秒走
014C E531 81 MOV A, SECONDBUF
014E B43B15 82 CJNE A, #59,SADD1
0151 753100 83 MOV SECONDBUF, #0
84 ; 分走
0154 E532 85 MOV A, MINUTEBUF
0156 B43B11 86 CJNE A, #59,MADD1
0159 753200 87 MOV MINUTEBUF, #0
88 ; 小时走
015C E533 89 MOV A, HOURBUF
015E B4170D 90 CJNE A, #23,HADD1
0161 753300 91 MOV HOURBUF, #0
92
93 ; MOV A, DAYBUF
94 ; CJNE A, #31,HADD1
95 ; MOV DAYBUF, #0
96
0164 2170 97 AJMP RET1
0166 98 SADD1: ; 秒加1
0166 0531 99 INC SECONDBUF
0168 2170 100 AJMP RET1
016A 101 MADD1: ; 分加1
016A 0532 102 INC MINUTEBUF
016C 2170 103 AJMP RET1
016E 104 HADD1: ; 小时加1
016E 0533 105 INC HOURBUF
106
0170 107 RET1:
0170 120184 108 LCALL KEYINPUT
109
0173 D0E0 110 POP ACC
0175 D0D0 111 POP PSW
0177 32 112 RETI
113
114 ; 74LS164芯片工作原理程序
0178 115 Send74LS164:
0178 7908 116 MOV R1,#8
017A 117 Send2LS164_Loop:
017A 33 118 RLC A
017B 92B0 119 MOV LS164_AB,C
017D D2B1 120 SETB LS164_CLK
017F C2B1 121 CLR LS164_CLK
0181 D9F7 122 DJNZ r1,Send2LS164_Loop
0183 22 123 RET
124
A51 MACRO ASSEMBLER SZ612 06/13/2008 10:49:14 PAGE 3
0184 125 KEYINPUT:
0184 20D540 126 JB F0,KEYRET
0187 20B51E 127 K1: JB KEY1,K2
018A 120356 128 LCALL DELAY10MS
018D 20B518 129 JB KEY1,K2
0190 120356 130 LCALL DELAY10MS
0193 E540 131 MOV A,DISPFLAG
0195 2403 132 ADD A,#3
0197 F540 133 MOV DISPFLAG,A
0199 D2D5 134 SETB F0
019B 135 WAIT:
019B 30B5FD 136 JNB KEY1,WAIT
019E C2D5 137 CLR F0
01A0 B40F24 138 CJNE A,#0FH,KEYRET
01A3 754000 139 MOV DISPFLAG,#0
01A6 801F 140 JMP KEYRET
141
142
143
144
145 ; CJNE A,#0,IF12
146 ;ADDFLAG: ; DISPFLAG 加
147
148 ; CJNE A,#0FH,KEYRET
149 ; MOV DISPFLAG,#0
150
151 ;IF12: ;判断 DISPFLAG 是否= 1,2
152 ; MOV R4,A
153 ; ANL A,#0FEH ; 1
154 ; JZ KEYRET
155 ; MOV A,R4
156 ; ANL A,#0FDH ; 2
157 ; JZ KEYRET
158 ; MOV A,R4
159 ; JMP ADDFLAG
160
161
01A8 20B71C 162 K2: JB KEY2,KEYRET
01AB 120356 163 LCALL DELAY10MS
01AE 20B716 164 JB KEY2,KEYRET
01B1 120356 165 LCALL DELAY10MS
166
01B4 E540 167 MOV A,DISPFLAG
168
01B6 169 MONADD1: ; 月加1
01B6 B4030E 170 CJNE A,#3,DAYADD1
01B9 AE34 171 MOV R6, MONTHBUF
01BB BE0C05 172 CJNE R6,#12,MONADD
01BE 753400 173 MOV MONTHBUF,#0
01C1 21C7 174 AJMP KEYRET
01C3 175 MONADD:
01C3 0534 176 INC MONTHBUF
01C5 21C7 177 AJMP KEYRET
178
179
180 ; INC MONTHBUF
181 ; AJMP KEYRET
182
183 ; MOV R5,DISPBUF+7
184 ; INC R5
185 ; MOV DISPBUF+7,R5
186 ; CJNE R5,#9,KEYRET
187 ; MOV R5,#0
188 ; MOV DISPBUF+7,R5
189 ; MOV R6,DISPBUF+8
190 ; INC R6
A51 MACRO ASSEMBLER SZ612 06/13/2008 10:49:14 PAGE 4
191 ; MOV DISPBUF+8,R6
192 ; CJNE R6,#3,KEYRET
193 ; MOV R6,#0
194 ; MOV DISPBUF+8,R6
195
01C7 196 DAYADD1: ; 日加1
197 ; CJNE A,#6,HOURADD1
198 ;
199 ; JMP KEYRET
200 ;HOURADD1: ; 小时加1
201 ; CJNE A,#9,MINADD1
202 ; JMP KEYRET
203 ;MINADD1: ; 分钟加1
204 ; CJNE A,#0CH,K2X
205 ; JMP KEYRET
206
207
208 ;K2X: ; 显示日期和秒
209 ; ADD A,#1
210 ; MOV DISPFLAG,A
211 ; CJNE A,#3,KEYRET
212 ; MOV DISPFLAG,#0
01C7 213 KEYRET:
214
01C7 22 215 RET
216
217 ;显示程序
01C8 218 DISP:
01C8 7940 219 MOV R1,#DISPFLAG
01CA 1202EB 220 LCALL UPDATEDISPBUF
221 ;初始显示 "时间"
01CD B7003A 222 KF0: CJNE @R1,#0,KF1
223
01D0 7821 224 MOV R0,#DISPBUF+1
01D2 12033C 225 LCALL GET_LED234
01D5 120178 226 LCALL Send74LS164
01D8 120333 227 LCALL SELECT_LED4
01DB 120348 228 LCALL DELAY20MS
229
01DE 7822 230 MOV R0,#DISPBUF+2
01E0 12033C 231 LCALL GET_LED234
01E3 120178 232 LCALL Send74LS164
01E6 12032A 233 LCALL SELECT_LED3
01E9 120348 234 LCALL DELAY20MS
235
01EC 7823 236 MOV R0,#DISPBUF+3
01EE 12033C 237 LCALL GET_LED234
01F1 120178 238 LCALL Send74LS164
01F4 120321 239 LCALL SELECT_LED2
01F7 120348 240 LCALL DELAY20MS
241
01FA 7824 242 MOV R0,#DISPBUF+4
01FC 120342 243 LCALL GET_LED1
01FF 120178 244 LCALL Send74LS164
0202 120318 245 LCALL SELECT_LED1
0205 120348 246 LCALL DELAY20MS
0208 41EA 247 AJMP KFRET
248 ;显示 "日期"
020A B7013A 249 KF1: CJNE @R1,#1,KF2
250
020D 7825 251 MOV R0,#DISPBUF+5
020F 12033C 252 LCALL GET_LED234
0212 120178 253 LCALL Send74LS164
0215 120333 254 LCALL SELECT_LED4
0218 120348 255 LCALL DELAY20MS
256
A51 MACRO ASSEMBLER SZ612 06/13/2008 10:49:14 PAGE 5
021B 7826 257 MOV R0,#DISPBUF+6
021D 12033C 258 LCALL GET_LED234
0220 120178 259 LCALL Send74LS164
0223 12032A 260 LCALL SELECT_LED3
0226 120348 261 LCALL DELAY20MS
262
0229 7827 263 MOV R0,#DISPBUF+7
022B 12033C 264 LCALL GET_LED234
022E 120178 265 LCALL Send74LS164
0231 120321 266 LCALL SELECT_LED2
0234 120348 267 LCALL DELAY20MS
268
0237 7828 269 MOV R0,#DISPBUF+8
0239 120342 270 LCALL GET_LED1
023C 120178 271 LCALL Send74LS164
023F 120318 272 LCALL SELECT_LED1
0242 120348 273 LCALL DELAY20MS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -