📄 定时器3.lst
字号:
A51 MACRO ASSEMBLER 禵蔩芲3 06/02/2007 23:21:22 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 定时器3.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\Keil 51\C51\BIN\A51.EXE 定时器3.ASM SET(COMPACT) DEBUG EP
LOC OBJ LINE SOURCE
0040 1 Timecount EQU 40H;记时一秒循环20次的记数标志
0041 2 FLAG EQU 41H;高低位片选的标志
0042 3 SETFLAG EQU 42H;设置键的标志
0043 4 PreCious EQU 43H;按键的缓冲内容
0044 5 KEYFLAG EQU 44H;按键去抖的参考变量
0045 6 BUF1 EQU 45H;高位显示数字的偏移量
0046 7 BUF0 EQU 46H;低位显示数字的偏移量
8
0000 9 ORG 0000H
0000 0150 10 AJMP START;主程序
11
000B 12 ORG 000BH
000B 214B 13 AJMP TIMEINTTF0;定时器0的中断服务子程序
14
001B 15 ORG 001BH
001B 020110 16 LJMP TIMEINTTF1;定时器1的中断服务子程序
17
0050 18 ORG 0050H
19
0050 754509 20 START:MOV BUF1,#09H
0053 754609 21 MOV BUF0,#09H
0056 754100 22 MOV FLAG,#00H
0059 754000 23 MOV TIMECOUNT,#00H
005C 754200 24 MOV SETFLAG,#00H
005F 75440D 25 MOV KEYFLAG,#0DH
0062 7543FF 26 MOV PreCious,#0FFH
27 ;变量初始化
0065 758911 28 MOV TMOD,#11H ;选择定时器,工作模式
0068 758160 29 MOV SP,#60H
006B 75A800 30 MOV IE,#00H
006E 758BB0 31 MOV TL1,#0B0H
0071 758D3C 32 MOV TH1,#3CH
0074 758AEF 33 MOV TL0,#0EFH
0077 758CCF 34 MOV TH0,#0CFH ;定时器初值
007A D2AF 35 SETB EA
007C D2AB 36 SETB ET1
007E D2A9 37 SETB ET0
0080 D28C 38 SETB TR0
0082 D28E 39 SETB TR1 ;开中断
0084 D2A6 40 SETB P2.6
0086 900179 41 LOOP:MOV DPTR,#BCD ;主循环
0089 120093 42 LCALL BCDDISPLAY ;数码管显示
008C AF43 43 MOV R7,PreCious
008E 1200B7 44 LCALL KEYCHECK ;键盘查询
0091 80F3 45 SJMP LOOP
46
47
0093 48 BCDDISPLAY: ;数码管动态显示子程序
0093 C0D0 49 PUSH PSW
0095 75D018 50 MOV PSW,#18H
0098 E546 51 MOV A,BUF0
009A 93 52 MOVC A,@A+DPTR
009B F8 53 MOV R0,A
009C E545 54 MOV A,BUF1
009E 93 55 MOVC A,@A+DPTR
009F F9 56 MOV R1,A
00A0 E541 57 MOV A,FLAG
00A2 6009 58 JZ C00
A51 MACRO ASSEMBLER 禵蔩芲3 06/02/2007 23:21:22 PAGE 2
00A4 E8 59 MOV A,R0
00A5 F580 60 MOV P0,A
00A7 D2A5 61 SETB P2.5
00A9 C2A4 62 CLR P2.4
00AB 8007 63 SJMP C01 ;显示高位
00AD E9 64 C00:MOV A,R1
00AE F580 65 MOV P0,A
00B0 D2A4 66 SETB P2.4
00B2 C2A5 67 CLR P2.5 ;显示低位
00B4 D0D0 68 C01:POP PSW
00B6 22 69 RET
70
00B7 71 KEYCHECK: ;键盘查询子程序
00B7 BF0E05 72 CJNE R7,#0EH,C011 ;K1是否按下(暂停键)
00BA B28E 73 CPL TR1
00BC 7F00 74 MOV R7,#00H
00BE 22 75 RET
00BF AF43 76 C011:MOV R7,PreCious
00C1 BF0D1E 77 CJNE R7,#0DH,C014 ;K2是否按下(设置键)
00C4 0542 78 INC SETFLAG
00C6 75430F 79 MOV PRECIOUS,#0FH
00C9 7942 80 MOV R1,#SETFLAG
00CB E7 81 MOV A,@R1
00CC 6020 82 JZ C015
00CE B70305 83 CJNE @R1,#03H,C012 ;K2按3次,SETFLAG返回初值
00D1 754200 84 MOV SETFLAG,#00H
00D4 8018 85 SJMP C015
00D6 B70104 86 C012:CJNE @R1,#01H,C013 ;高位显示内容
00D9 7945 87 MOV R1,#BUF1
00DB 8005 88 SJMP C014
00DD B70202 89 C013:CJNE @R1,#02H,C014 ;低位显示内容
00E0 7946 90 MOV R1,#BUF0
00E2 E542 91 C014:MOV A,SETFLAG
00E4 6008 92 JZ C015
00E6 1200EF 93 LCALL TIMESET ;时间设置
00E9 120093 94 LCALL BcdDisplay ;数码管显示
00EC 80D1 95 SJMP C011
00EE 22 96 C015:RET
97
00EF 98 TIMESET: ;时间设置子程序
00EF BF0B0C 99 CJNE R7,#0BH,C031 ;K3是否按下(上)
00F2 07 100 INC @R1 ;显示内容加1
00F3 75430F 101 MOV PRECIOUS,#0FH
00F6 E7 102 MOV A,@R1
00F7 B40A11 103 CJNE A,#0AH,C032 ;加到9返回0
00FA 7700 104 MOV @R1,#00H
00FC 800D 105 SJMP C032
00FE BF070A 106 C031:CJNE R7,#07H,C032 ;K4是否按下(下)
0101 17 107 DEC @R1 ;显示内容减1
0102 75430F 108 MOV PRECIOUS,#0FH
0105 E7 109 MOV A,@R1
0106 B4FF02 110 CJNE A,#0FFH,C032 ;减到0返回9
0109 7709 111 MOV @R1,#09H
010B D2A6 112 C032:SETB P2.6
010D D28E 113 SETB TR1
010F 22 114 RET
115
116
0110 C0D0 117 TIMEINTTF1:PUSH PSW
0112 C0E0 118 PUSH ACC
0114 758BB0 119 MOV TL1,#0B0H
0117 758D3C 120 MOV TH1,#3CH ;重装初值
011A 0540 121 INC TIMECOUNT
011C E540 122 MOV A,TIMECOUNT
011E B41425 123 CJNE A,#14H,C045 ;计时20次,到达1秒钟
0121 754000 124 MOV TIMECOUNT,#00H ;置0,进行下次计时1秒
A51 MACRO ASSEMBLER 禵蔩芲3 06/02/2007 23:21:22 PAGE 3
0124 E542 125 MOV A,SETFLAG
0126 B4001D 126 CJNE A,#00H,C045 ;判断是否在计时状态
0129 E546 127 MOV A,BUF0
012B 6004 128 JZ C043 ;低位减到0,转
012D 1546 129 DEC BUF0 ;时间显示减1秒
012F 8015 130 SJMP C045
0131 E545 131 C043:MOV A,BUF1
0133 6007 132 JZ C044 ;高位也减到0,转
0135 1545 133 DEC BUF1 ;高位减1
0137 754609 134 MOV BUF0,#09H ;低位变9
013A 800A 135 SJMP C045
013C 754600 136 C044:MOV BUF0,#00H
013F 754500 137 MOV BUF1,#00H
0142 C2A6 138 CLR P2.6 ;计时时间到,LED灯亮
0144 C28E 139 CLR TR1 ;计时停止
0146 D0E0 140 C045:POP ACC
0148 D0D0 141 POP PSW
014A 32 142 RETI
143
144
014B C0D0 145 TIMEINTTF0:PUSH PSW
014D C0E0 146 PUSH ACC
014F 75D010 147 MOV PSW,#10H
0152 758AEF 148 MOV TL0,#0efH
0155 758CCF 149 MOV TH0,#0cfH ;重装初值
0158 E541 150 C050:MOV A,FLAG
015A F4 151 CPL A
015B F541 152 MOV FLAG,A
015D E5A0 153 MOV A,P2
015F 540F 154 ANL A,#0FH
0161 FF 155 MOV R7,A
0162 1544 156 DEC KEYFLAG
0164 E544 157 MOV A,KEYFLAG
0166 700C 158 JNZ C052
0168 75440D 159 MOV KEYFLAG,#0DH ;延时判断2次
016B E5A0 160 MOV A,P2
016D 540F 161 ANL A,#0FH
016F 6F 162 XRL A,R7
0170 7002 163 JNZ C052
0172 8F43 164 MOV PreCious,R7 ;按键去抖动
0174 D0E0 165 C052:POP ACC
0176 D0D0 166 POP PSW
0178 32 167 RETI
168
169
0179 C0F9A4B0 170 BCD: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数码管显示代码
017D 999282F8
0181 8090
171 END
A51 MACRO ASSEMBLER 禵蔩芲3 06/02/2007 23:21:22 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
BCD. . . . . . . . C ADDR 0179H A
BCDDISPLAY . . . . C ADDR 0093H A
BUF0 . . . . . . . N NUMB 0046H A
BUF1 . . . . . . . N NUMB 0045H A
C00. . . . . . . . C ADDR 00ADH A
C01. . . . . . . . C ADDR 00B4H A
C011 . . . . . . . C ADDR 00BFH A
C012 . . . . . . . C ADDR 00D6H A
C013 . . . . . . . C ADDR 00DDH A
C014 . . . . . . . C ADDR 00E2H A
C015 . . . . . . . C ADDR 00EEH A
C031 . . . . . . . C ADDR 00FEH A
C032 . . . . . . . C ADDR 010BH A
C043 . . . . . . . C ADDR 0131H A
C044 . . . . . . . C ADDR 013CH A
C045 . . . . . . . C ADDR 0146H A
C050 . . . . . . . C ADDR 0158H A
C052 . . . . . . . C ADDR 0174H A
EA . . . . . . . . B ADDR 00A8H.7 A
ET0. . . . . . . . B ADDR 00A8H.1 A
ET1. . . . . . . . B ADDR 00A8H.3 A
FLAG . . . . . . . N NUMB 0041H A
IE . . . . . . . . D ADDR 00A8H A
KEYCHECK . . . . . C ADDR 00B7H A
KEYFLAG. . . . . . N NUMB 0044H A
LOOP . . . . . . . C ADDR 0086H A
P0 . . . . . . . . D ADDR 0080H A
P2 . . . . . . . . D ADDR 00A0H A
PRECIOUS . . . . . N NUMB 0043H A
PSW. . . . . . . . D ADDR 00D0H A
SETFLAG. . . . . . N NUMB 0042H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0050H A
TH0. . . . . . . . D ADDR 008CH A
TH1. . . . . . . . D ADDR 008DH A
TIMECOUNT. . . . . N NUMB 0040H A
TIMEINTTF0 . . . . C ADDR 014BH A
TIMEINTTF1 . . . . C ADDR 0110H A
TIMESET. . . . . . C ADDR 00EFH A
TL0. . . . . . . . D ADDR 008AH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . B ADDR 0088H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -