📄 text1.lst
字号:
A51 MACRO ASSEMBLER TEXT1 09/12/2007 13:38:05 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN Text1.OBJ
ASSEMBLER INVOKED BY: F:\keil 软件\C51\BIN\A51.EXE Text1.a51 SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
0000 2 ORG 0000H
0000 020200 3 LJMP MAIN ;转入主程序
000B 4 ORG 000BH
000B 02022A 5 LJMP GT0 ;转入中断T0
0200 6 ORG 0200H
7 ;-------------------------主程序--------------------------;
0200 8 MAIN:
0200 758160 9 MOV SP,#60H ;给堆栈赋初值
0203 758000 10 MOV P0,#00H ;熄灭所有LED灯
0206 900300 11 MOV DPTR,#TAB ;表地址入口
0209 E4 12 CLR A
020A F530 13 MOV 30H,A ;小时清零
020C F531 14 MOV 31H,A ;分钟清零
020E F532 15 MOV 32H,A ;秒清零
0210 7814 16 MOV R0,#20 ;1秒中断次数
0212 758901 17 MOV TMOD,#01H ;T0方式1定时
0215 758C3C 18 MOV TH0,#3CH ;50毫秒初值
0218 758A0B 19 MOV TL0,#0BH
021B D2AF 20 SETB EA ;开中断
021D D2A9 21 SETB ET0 ;允许T0中断
021F D28C 22 SETB TR0 ;启动T0
0221 23 M0:
0221 1202A6 24 LCALL JIAN ;调用按键子程序
0224 120257 25 LCALL XIANSHI ;调用显示子程序
0227 020221 26 LJMP M0
27 ;-----------------------T0中断程序------------------------;
022A 28 GT0:
022A C0E0 29 PUSH ACC
022C 758C3C 30 MOV TH0,#3CH ;重新赋值
022F 758A0B 31 MOV TL0,#0BH
0232 D820 32 DJNZ R0,RET0 ;不够20次返回
0234 7814 33 MOV R0,#20 ;否则重新赋20给R0
0236 0532 34 INC 32H ;秒加一
0238 E532 35 MOV A,32H
023A B43C17 36 CJNE A,#60,RET0 ;比较秒是否到60;不到RET0
023D 753200 37 MOV 32H,#00H ;到60改为0
0240 0531 38 INC 31H ;分钟加一
0242 E531 39 MOV A,31H
0244 B43C0D 40 CJNE A,#60,RET0 ;比较分钟是否到60;不到RET0
0247 753100 41 MOV 31H,#00H ;到60改为0
024A 0530 42 INC 30H ;小时加一
024C E530 43 MOV A,30H
024E B41803 44 CJNE A,#24,RET0 ;比较小时是否到24;不到RET0
0251 753000 45 MOV 30H,#00H ;到24改为0
0254 46 RET0:
0254 D0E0 47 POP ACC
0256 32 48 RETI ;中断返回
49 ;-----------------------显示子程序------------------------;
0257 50 XIANSHI:
0257 E530 51 MOV A,30H ;小时显示程序段
0259 75F00A 52 MOV B,#10 ;把10送入寄存器B中
025C 84 53 DIV AB ;分离小时高低位
025D 93 54 MOVC A,@A+DPTR ;查十位数据表
025E D280 55 SETB P0.0 ;点亮时十位数码管
0260 F5A0 56 MOV P2,A ;送P2口显示
0262 D9FE 57 DJNZ R1,$ ;延时等待
0264 C280 58 CLR P0.0 ;熄灭时十位数码管
A51 MACRO ASSEMBLER TEXT1 09/12/2007 13:38:05 PAGE 2
0266 E5F0 59 MOV A,B ;时个位送入A
0268 93 60 MOVC A,@A+DPTR ;查个位数据表
0269 D281 61 SETB P0.1 ;点亮时个位数码管
026B F5A0 62 MOV P2,A ;送P2口显示
026D D9FE 63 DJNZ R1,$ ;延时等待
026F C281 64 CLR P0.1 ;熄灭时个位数码管
0271 E531 65 MOV A,31H ;分钟显示程序段
0273 75F00A 66 MOV B,#10 ;把10送入寄存器B中
0276 84 67 DIV AB ;分离分钟高低位
0277 93 68 MOVC A,@A+DPTR ;查十位数据表
0278 D282 69 SETB P0.2 ;点亮分十位数码管
027A F5A0 70 MOV P2,A ;送P2口显示
027C D9FE 71 DJNZ R1,$ ;延时等待
027E C282 72 CLR P0.2 ;熄灭分十位数码管
0280 E5F0 73 MOV A,B ;分个位送入A
0282 93 74 MOVC A,@A+DPTR ;查个位数据表
0283 D283 75 SETB P0.3 ;点亮分个位数码管
0285 F5A0 76 MOV P2,A ;送P2口显示
0287 D9FE 77 DJNZ R1,$ ;延时等待
0289 C283 78 CLR P0.3 ;熄灭分个位数码管
028B E532 79 MOV A,32H ;秒显示程序段
028D 75F00A 80 MOV B,#10 ;把10送入寄存器B中
0290 84 81 DIV AB ;分离秒高低位
0291 93 82 MOVC A,@A+DPTR ;查十位数据表
0292 D284 83 SETB P0.4 ;点亮秒十位数码管
0294 F5A0 84 MOV P2,A ;送P2口显示
0296 D9FE 85 DJNZ R1,$ ;延时等待
0298 C284 86 CLR P0.4 ;熄灭秒十位数码管
029A E5F0 87 MOV A,B ;秒个位送入A
029C 93 88 MOVC A,@A+DPTR ;查个位数据表
029D D285 89 SETB P0.5 ;点亮秒个位数码管
029F F5A0 90 MOV P2,A ;送P2口显示
02A1 D9FE 91 DJNZ R1,$ ;延时等待
02A3 C285 92 CLR P0.5 ;熄灭秒个位数码管
02A5 22 93 RET
94 ;-----------------------按键子程序------------------------;
02A6 95 JIAN:
02A6 C0D0 96 PUSH PSW ;保护现场
02A8 C0E0 97 PUSH ACC
02AA 209316 98 JB P1.3,S1 ;查键,改秒钟数,否则转S1
02AD 99 J0:
02AD 1202F7 100 LCALL DEL_10MS ;按键消抖
02B0 120257 101 LCALL XIANSHI ;调显示子程序
02B3 3093F7 102 JNB P1.3,J0 ;按键松开后才加一
02B6 0532 103 INC 32H ;秒加一
02B8 E532 104 MOV A,32H
02BA B43C35 105 CJNE A,#60,RET1 ;秒钟不到60就转RET1
02BD 753200 106 MOV 32H,#00H ;否则清零
02C0 0202F2 107 LJMP RET1
02C3 108 S1:
02C3 209116 109 JB P1.1,M1 ;查键,改分钟数,否则转M1
02C6 110 J1:
02C6 1202F7 111 LCALL DEL_10MS ;按键消抖
02C9 120257 112 LCALL XIANSHI ;调显示子程序
02CC 3091F7 113 JNB P1.1,J1 ;按键松开后才加一
02CF 0531 114 INC 31H ;分加一
02D1 E531 115 MOV A,31H
02D3 B43C1C 116 CJNE A,#60,RET1 ;分钟不到24就转RET1
02D6 753100 117 MOV 31H,#00H ;否则清零
02D9 0202F2 118 LJMP RET1
02DC 119 M1:
02DC 209213 120 JB P1.2,RET1 ;查键,改小时数,否则转RET1
02DF 121 J2:
02DF 1202F7 122 LCALL DEL_10MS ;按键消抖
02E2 120257 123 LCALL XIANSHI ;调显示子程序
A51 MACRO ASSEMBLER TEXT1 09/12/2007 13:38:05 PAGE 3
02E5 3092F7 124 JNB P1.2,J2 ;按键松开后才加一
02E8 0530 125 INC 30H ;时加一
02EA E530 126 MOV A,30H
02EC B41803 127 CJNE A,#24,RET1 ;小时不到24就转RET1
02EF 753000 128 MOV 30H,#00H ;否则清零
02F2 129 RET1:
02F2 D0D0 130 POP PSW ;退出保护
02F4 D0E0 131 POP ACC
02F6 22 132 RET ;返回
133 ;-----------------------延时子程序------------------------;
02F7 134 DEL_10MS:
02F7 7E0A 135 MOV R6,#10
02F9 7FF8 136 L1: MOV R7,#248
02FB DFFE 137 L2: DJNZ R7,L2
02FD DEFA 138 DJNZ R6,L1
02FF 22 139 RET
0300 140 TAB:
0300 3F065B4F 141 DB 3FH,06H,5BH,4FH,66H ;共阴极数码管0-9数字
0304 66
0305 6D7D077F 142 DB 6DH,7DH,07H,7FH,6FH
0309 6F
143 END
A51 MACRO ASSEMBLER TEXT1 09/12/2007 13:38:05 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
DEL_10MS . . . . . C ADDR 02F7H A
EA . . . . . . . . B ADDR 00A8H.7 A
ET0. . . . . . . . B ADDR 00A8H.1 A
GT0. . . . . . . . C ADDR 022AH A
J0 . . . . . . . . C ADDR 02ADH A
J1 . . . . . . . . C ADDR 02C6H A
J2 . . . . . . . . C ADDR 02DFH A
JIAN . . . . . . . C ADDR 02A6H A
L1 . . . . . . . . C ADDR 02F9H A
L2 . . . . . . . . C ADDR 02FBH A
M0 . . . . . . . . C ADDR 0221H A
M1 . . . . . . . . C ADDR 02DCH A
MAIN . . . . . . . C ADDR 0200H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
PSW. . . . . . . . D ADDR 00D0H A
RET0 . . . . . . . C ADDR 0254H A
RET1 . . . . . . . C ADDR 02F2H A
S1 . . . . . . . . C ADDR 02C3H A
SP . . . . . . . . D ADDR 0081H A
TAB. . . . . . . . C ADDR 0300H A
TH0. . . . . . . . D ADDR 008CH A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
XIANSHI. . . . . . C ADDR 0257H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -