📄 mine.lst
字号:
A51 MACRO ASSEMBLER MINE 06/28/2007 21:40:12 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN mine.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\Keil\C51\BIN\A51.EXE mine.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H
0000 020030 2 LJMP MAIN
000B 3 ORG 000BH ;定时器0溢出中断入口
000B 020064 4 LJMP TIME
0030 5 ORG 0030H
0030 752000 6 MAIN: MOV 20H,#00H ;存毫秒
0033 752100 7 MOV 21H,#00H ;存秒
0036 752200 8 MOV 22H,#00H ;存分
0039 752300 9 MOV 23H,#00H ;存小时
003C 75B802 10 MOV IP,#02H ;IP初始化,将定时器0中断优先级设为高优先级
003F 75A882 11 MOV IE,#82H ;IE初始化,EA=1,ET0=1
0042 758901 12 MOV TMOD,#01H ;设定定时器工作方式,方式1,16位工作方式
0045 758AB0 13 MOV TL0,#0B0H
0048 758C3C 14 MOV TH0,#3CH ;计数初值
004B D28C 15 SETB TR0 ;启动定时
004D 758140 16 MOV SP,#40H ;重设堆栈指针
0050 752400 17 MOV 24H,#00H ;24H中存选择键按下次数
0053 1200A6 18 NEXT: LCALL DISP ;调用显示子程序
0056 1200FB 19 LCALL KEY ;调用按键检测子程序
0059 60F8 20 JZ NEXT ;A=0无键按下,继续检测
005B 12011B 21 LCALL ANKEY ;调用按键处理子程序
005E 020053 22 LJMP NEXT ;重新循环
0061 00 23 NOP
0062 00 24 NOP
0063 00 25 NOP
26
27 ;定时中断处理程序:
0064 C0E0 28 TIME: PUSH ACC ;保护现场
0066 C0D0 29 PUSH PSW
0068 758AB0 30 MOV TL0,#0B0H ;赋定时初值定时50MS
006B 758C3C 31 MOV TH0,#3CH
006E 0520 32 INC 20H ;毫秒加一
0070 E520 33 MOV A,20H
0072 B4142A 34 CJNE A,#20,RETI1 ;50mS*20=1S要循环20次,秒才加一
0075 752000 35 MOV 20H,#00H ;一秒钟时间到
0078 E521 36 MOV A,21H
007A 2401 37 ADD A,#01H ;秒加一
007C D4 38 DA A ;BCD码十进制校准
007D F521 39 MOV 21H,A
007F B43C1D 40 CJNE A,#3CH,RETI1
0082 752100 41 MOV 21H,#00H ;一分钟时间到
0085 E522 42 MOV A,22H
0087 2401 43 ADD A,#01H
0089 D4 44 DA A
008A F522 45 MOV 22H,A
008C B43C10 46 CJNE A,#3CH,RETI1
008F 752200 47 MOV 22H,#00H ;一小时时间到
0092 E523 48 MOV A,23H
0094 2401 49 ADD A,#01H
0096 D4 50 DA A
0097 F523 51 MOV 23H,A
0099 B41803 52 CJNE A,#18H,RETI1
009C 752300 53 MOV 23H,#00H ;到时间达到24小时,清零.
009F D0D0 54 RETI1: POP PSW ;恢复现场
00A1 D0E0 55 POP ACC
00A3 32 56 RETI ;中断返回?
00A4 00 57 NOP
00A5 00 58 NOP
A51 MACRO ASSEMBLER MINE 06/28/2007 21:40:12 PAGE 2
59
60 ;显示子程序
00A6 E521 61 DISP: MOV A,21H ;处理秒21H-->2EH,2FH
00A8 540F 62 ANL A,#0FH
00AA F52F 63 MOV 2FH,A ;秒个位
00AC E521 64 MOV A,21H
00AE 54F0 65 ANL A,#0F0H
00B0 C4 66 SWAP A
00B1 F52E 67 MOV 2EH,A ;秒十位
68
00B3 E522 69 MOV A,22H ;处理分钟22H-->2CH,2DH
00B5 540F 70 ANL A,#0FH
00B7 F52D 71 MOV 2DH,A
00B9 E522 72 MOV A,22H
00BB 54F0 73 ANL A,#0F0H
00BD C4 74 SWAP A
00BE F52C 75 MOV 2CH,A
76
00C0 E523 77 MOV A,23H ;处理小时23H-->2AH,2BH
00C2 540F 78 ANL A,#0FH
00C4 F52B 79 MOV 2BH,A
00C6 E523 80 MOV A,23H
00C8 54F0 81 ANL A,#0F0H
00CA C4 82 SWAP A
00CB F52A 83 MOV 2AH,A
84
00CD 782F 85 MOV R0,#2FH ;显示偏移量,秒个位
00CF 7B06 86 MOV R3,#06H ;要显示六位数
00D1 9000E9 87 MOV DPTR,#TABLE
00D4 7420 88 MOV A,#20H ;00100000, P2.5有效,送秒个位
00D6 F5F0 89 LOOP1: MOV B,A ;B暂存A值
00D8 F5A0 90 MOV P2,a ;P2数码管控制端
00DA E6 91 MOV A,@R0 ;查表,7段译码
00DB 93 92 MOVC A,@A+DPTR
00DC F580 93 MOV P0,a ;送显示
00DE 7A80 94 MOV R2,#80H ;延时
00E0 DAFE 95 DJNZ R2,$
00E2 18 96 DEC R0
00E3 E5F0 97 MOV A,B
00E5 03 98 RR A ;动态显示,数码管控制端循环有效
00E6 DBEE 99 DJNZ R3,LOOP1 ;循环显示
00E8 22 100 RET
101
00E9 287EA262 102 TABLE: db 28h,7eh,0a2h,62h,74h,61h,21h ;不带小数点
00ED 746121
00F0 7A206000 103 DB 7ah,20h,60h,00,00,00,00,00,00
00F4 00000000
00F8 00
00F9 00 104 NOP
00FA 00 105 NOP
106
107 ;按键判断程序 P1.3-P1.5功能键 低电平有效
00FB E590 108 KEY: MOV A,P1
00FD F4 109 CPL A ;低电平有效,取反判断
00FE 5438 110 ANL A,#38H ;00111000判断有无键按下
0100 6016 111 JZ RETX ;A=0无键按下则返回
0102 1201A0 112 LCALL DELAY ;LCALL DISP ;延时
0105 E590 113 MOV A,P1 ;再次判断,以便去抖
0107 F4 114 CPL A
0108 5438 115 ANL A,#38H
010A 600C 116 JZ RETX ;键盘去抖动
010C FE 117 MOV R6,A ;将键值存入R6。
010D 1200A6 118 LOOP2: LCALL DISP ;
0110 E590 119 MOV A,P1
0112 F4 120 CPL A
0113 5438 121 ANL A,#38H
A51 MACRO ASSEMBLER MINE 06/28/2007 21:40:12 PAGE 3
0115 70F6 122 JNZ LOOP2 ;等待键释放
0117 EE 123 MOV A,R6
0118 22 124 RETX: RET
0119 00 125 NOP
011A 00 126 NOP
127
128 ;按键处理子程序
011B C2AF 129 ANKEY: CLR EA ;关中断
011D EE 130 LX: MOV A,R6
011E 20E306 131 JB ACC.3,L1 ;是选择键转L1,选择是小时、分还是秒调整
0121 20E423 132 JB ACC.4,L2 ;是数值增加键转L2
0124 20E574 133 JB ACC.5,L3 ;是确认键转L3
134
0127 E524 135 L1: MOV A,24H
0129 B40303 136 CJNE A,#03H,NEXTT;不为3,继续增加
012C 752400 137 MOV 24H,#00H ;为3清零
012F 0524 138 NEXTT: INC 24H ;累计选择键按下次数
0131 E524 139 MOV A,24H
0133 B40104 140 CJNE A,#01H,LED23 ;不为一,则转
0136 D2B0 141 SETB P3.0 ;为一,点亮秒指示灯
0138 8053 142 JMP L12
013A E524 143 LED23: MOV A,24H
013C B40204 144 CJNE A,#02H,LED3;
013F D2B1 145 SETB P3.1 ;为二,点亮分指示灯
0141 804A 146 JMP L12
0143 D2B4 147 LED3: SETB P3.4 ;点亮小时指示灯
0145 8046 148 JMP L12 ;结束
149
0147 A824 150 L2: MOV R0,24H ;判断是哪一位增加
0149 B80002 151 CJNE R0,#00H,J0 ;R0不为0,转J0
014C 803F 152 JMP L12
153
014E B80113 154 J0: CJNE R0,#01H,MIN ;R0不为一,转
0151 A921 155 MOV R1,21H ;R0为一,处理秒
0153 B93B05 156 CJNE R1,#3BH,J1 ;秒不为59,则加一
0156 752100 157 MOV 21H,#00H ;秒为59,则清零
0159 8032 158 JMP L12
015B E521 159 J1: MOV A,21H
015D 2401 160 ADD A,#01H
015F D4 161 DA A
0160 F521 162 MOV 21H,A
0162 8029 163 JMP L12
164
0164 B80213 165 MIN: CJNE R0,#02H,HOUR ;R0不为2,转
0167 A922 166 MOV R1,22H ;R0为2,处理分
0169 B93B05 167 CJNE R1,#3BH,J2 ;分不为59,则加一
016C 752200 168 MOV 22H,#00H ;分为59,则清零
016F 801C 169 JMP L12
0171 E522 170 J2: MOV A,22H
0173 2401 171 ADD A,#01H
0175 D4 172 DA A
0176 F522 173 MOV 22H,A
0178 8013 174 JMP L12
175
017A A923 176 HOUR: MOV R1,23H ;剩下为处理小时
017C B91705 177 CJNE R1,#17H,J3 ;小时不为23,则加一
017F 752300 178 MOV 23H,#00H ;小时为23,则清零
0182 8009 179 JMP L12
0184 E523 180 J3: MOV A,23H
0186 2401 181 ADD A,#01H
0188 D4 182 DA A
0189 F523 183 MOV 23H,A
018B 8000 184 JMP L12
185
018D 1200A6 186 L12: LCALL DISP
0190 1200A6 187 LCALL DISP
A51 MACRO ASSEMBLER MINE 06/28/2007 21:40:12 PAGE 4
0193 1200FB 188 LCALL KEY ;判断有无键按下
0196 60F5 189 JZ L12
0198 02011D 190 LJMP LX
191
019B D2AF 192 L3: SETB EA ;开中断
019D C224 193 CLR 24H
019F 22 194 RET
195
196 ;延时10mS
01A0 7F14 197 DELAY: MOV R7,#14H ;1周期
01A2 7EFF 198 TM: MOV R6,#0FFH ;1
01A4 DEFE 199 TM1: DJNZ R6,TM1 ;2
01A6 DFFA 200 DJNZ R7,TM ;2
01A8 22 201 RET ;2
202 ;1+[1+(2*255)+2]*20+2=10.263ms
203
204 END
A51 MACRO ASSEMBLER MINE 06/28/2007 21:40:12 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ANKEY. . . . . . . C ADDR 011BH A
B. . . . . . . . . D ADDR 00F0H A
DELAY. . . . . . . C ADDR 01A0H A
DISP . . . . . . . C ADDR 00A6H A
EA . . . . . . . . B ADDR 00A8H.7 A
HOUR . . . . . . . C ADDR 017AH A
IE . . . . . . . . D ADDR 00A8H A
IP . . . . . . . . D ADDR 00B8H A
J0 . . . . . . . . C ADDR 014EH A
J1 . . . . . . . . C ADDR 015BH A
J2 . . . . . . . . C ADDR 0171H A
J3 . . . . . . . . C ADDR 0184H A
KEY. . . . . . . . C ADDR 00FBH A
L1 . . . . . . . . C ADDR 0127H A
L12. . . . . . . . C ADDR 018DH A
L2 . . . . . . . . C ADDR 0147H A
L3 . . . . . . . . C ADDR 019BH A
LED23. . . . . . . C ADDR 013AH A
LED3 . . . . . . . C ADDR 0143H A
LOOP1. . . . . . . C ADDR 00D6H A
LOOP2. . . . . . . C ADDR 010DH A
LX . . . . . . . . C ADDR 011DH A
MAIN . . . . . . . C ADDR 0030H A
MIN. . . . . . . . C ADDR 0164H A
NEXT . . . . . . . C ADDR 0053H A
NEXTT. . . . . . . C ADDR 012FH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PSW. . . . . . . . D ADDR 00D0H A
RETI1. . . . . . . C ADDR 009FH A
RETX . . . . . . . C ADDR 0118H A
SP . . . . . . . . D ADDR 0081H A
TABLE. . . . . . . C ADDR 00E9H A
TH0. . . . . . . . D ADDR 008CH A
TIME . . . . . . . C ADDR 0064H A
TL0. . . . . . . . D ADDR 008AH A
TM . . . . . . . . C ADDR 01A2H A
TM1. . . . . . . . C ADDR 01A4H A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -