📄 定时器6.lst
字号:
0117 C083 191 PUSH DPH
0119 75D008 192 MOV PSW, #08H ;选用寄存器组1
011C C28C 193 CLR TR0 ;暂停计时
011E 74B7 194 MOV A,#0B7H ;中断同步修正
0120 258A 195 ADD A,TL0
0122 F58A 196 MOV TL0,A
0124 743C 197 MOV A,#3CH
0126 258C 198 ADD A,TH0
0128 F58C 199 MOV TH0,A
012A D28C 200 SETB TR0 ;恢复计时
012C 153C 201 DEC TCOUNT ;定时器T0每50 000毫秒溢出一次,则
012E E53C 202 MOV A, TCOUNT ; 溢出10次为0.5秒
0130 7028 203 JNZ OUTT0 ;判断是否到半秒
0132 753C0A 204 MOV TCOUNT, #0AH ;
0135 B297 205 CPL LED4 ; 若到半秒LED取反
0137 309720 206 JNB LED4, OUTT0 ;LED每闪烁一次是一秒
013A 7831 207 MOV R0, #SH ;移入秒位的地址
013C D220 208 SETB IFDEC ;BCD子程序参数,使其做减法
013E 316A 209 ACALL ADDBCD ;调用BCD子程序, 秒减1
0140 BB9917 210 CJNE R3, #99H, OUTT0 ;判断秒要否借位
0143 753105 211 MOV SH, #05H ;要借位则
0146 753009 212 MOV SL, #09H ; 送数据59(否则显示99)
0149 7833 213 MOV R0, #MH ;移入分位的地址
014B 316A 214 ACALL ADDBCD ;分减1
014D BB990A 215 CJNE R3, #99H, OUTT0 ;判断分要否借位
0150 753305 216 MOV MH, #05H
0153 753209 217 MOV ML, #09H
0156 7835 218 MOV R0, #HH
0158 316A 219 ACALL ADDBCD
015A D083 220 OUTT0: POP DPH ;恢复现场
015C D082 221 POP DPL
015E D0D0 222 POP PSW
0160 D0E0 223 POP ACC
0162 D2AF 224 SETB EA
0164 32 225 RETI ;中断返回
0165 00 226 NOP
0166 00 227 NOP
0167 02040D 228 LJMP ERR ;软件陷阱
229 ;
230 ;
231 ;**************************
232 ; BCD子程序(加1或减1 ) ;
233 ;**************************
016A E6 234 ADDBCD: MOV A, @R0 ;移入被操作数的高位
016B 18 235 DEC R0 ;指针减一
016C C4 236 SWAP A
016D 46 237 ORL A, @R0 ;移入被操作数的低位
016E 75F001 238 MOV B, #01H ;B寄存器送立即数#01H
0171 A220 239 MOV C, IFDEC ;若 减法标志位为1,则
0173 92F3 240 MOV B.3, C ;
0175 92F4 241 MOV B.4, C ; B寄存器的值被改为#99H
0177 92F7 242 MOV B.7, C ;
0179 25F0 243 ADD A, B ; 对一个压缩的BCD码加#99H等于对其减一
017B D4 244 DA A ;BCD码调整
017C FB 245 MOV R3, A ;暂存结果
017D 540F 246 ANL A, #0FH ;取低位码
017F F6 247 MOV @R0, A ;存数
0180 EB 248 MOV A, R3 ;取回结果
0181 08 249 INC R0 ;指针加一
0182 C4 250 SWAP A ;交换
0183 540F 251 ANL A, #0FH ;取结果数的高位
0185 F6 252 MOV @R0, A ;存数
0186 22 253 RET
0187 00 254 NOP
0188 00 255 NOP
0189 02040D 256 LJMP ERR ;软件陷阱
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 5
257 ;
258 ;**************
259 ; 加1程序 ;
260 ;**************
018C A83D 261 ADDONE: MOV R0, ADDRES ;移入被加数单元的地址
018E C220 262 CLR IFDEC ;设定BCD子程序做加法
0190 316A 263 ACALL ADDBCD ;调用BCD子程序
0192 C3 264 CLR C ;判断被加数是否大于
0193 EB 265 MOV A, R3 ;最大值"MAX"
0194 B53E00 266 CJNE A, MAX, JGOVER
0197 4004 267 JGOVER: JC ENDADO
0199 E4 268 CLR A ;若大于"MAX",则清零
019A F6 269 MOV @R0, A
019B 18 270 DEC R0
019C F6 271 MOV @R0, A
019D 22 272 ENDADO: RET
019E 00 273 NOP
019F 00 274 NOP
01A0 02040D 275 LJMP ERR ;软件陷阱
276 ;
277 ;******************
278 ; 调时快进程序 ;
279 ;******************
01A3 C239 280 QUICK: CLR LPLMOD ;设定显示方式不闪烁
01A5 C23A 281 CLR HPLMOD
01A7 318C 282 ACALL ADDONE ;调用加1子程序
01A9 8C36 283 MOV L0, R4 ;将工作模式选择数移入显存
01AB 0536 284 INC L0 ;加1转化成显示值
01AD 71D1 285 ACALL KEYDLY ;延时
01AF 71E9 286 ACALL DL100
01B1 30B1EF 287 JNB MKEY, QUICK ;判断键是否松开
01B4 D239 288 SETB LPLMOD ;若松开则恢复闪烁显示方式
01B6 BE0204 289 CJNE R6, #02H, ENDQUK
01B9 D23A 290 SETB HPLMOD
01BB C239 291 CLR LPLMOD
01BD 22 292 ENDQUK: RET
01BE 00 293 NOP
01BF 00 294 NOP
01C0 02040D 295 LJMP ERR ;软件陷阱
296 ;
297 ;
298 ;******************
299 ; 功能菜单程序 ;
300 ;******************
01C3 7E00 301 MENU: MOV R6, #00H ; 初始化; R6 计功能键按键次数
01C5 753D05 302 MOV ADDRES, #05H ; 将 R5 的地址送入,以便于改变 R4 的值
01C8 753E04 303 MOV MAX, #04H ; 定义工作模式选择寄存器R4 的最大值
01CB 753A36 304 MOV DSPLYP, #L0 ;定义显示指针指向显存
01CE D239 305 SETB LPLMOD ;设定低两位数闪烁
01D0 C23A 306 CLR HPLMOD
01D2 8C36 307 MOV L0, R4 ;送显示数据"F-0X"
01D4 0536 308 INC L0
01D6 753700 309 MOV L1, #00H
01D9 75380B 310 MOV L2, #0BH
01DC 753900 311 MOV L3, #00H
01DF D297 312 SETB LED4
313 ;
01E1 711F 314 WAITFK: ACALL DISPLY ;等待F键释放
01E3 30B0FB 315 JNB FKEY, WAITFK
01E6 711F 316 MENU1: ACALL DISPLY
01E8 20B130 317 JB MKEY, JGFKEY ;M键扫描
01EB 71D1 318 ACALL KEYDLY ;延时消抖动
01ED 20B12B 319 JB MKEY, JGFKEY ; 未按下则转F键扫描
01F0 BE0012 320 CJNE R6, #00H, NEXT1 ;
01F3 753000 321 MOV SL, #00H ;若中途改变定时方式,则清除原计时数据
01F6 753100 322 MOV SH, #00H
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 6
01F9 753200 323 MOV ML, #00H
01FC 753300 324 MOV MH, #00H
01FF 753400 325 MOV HL, #00H
0202 753500 326 MOV HH, #00H
0205 7A00 327 NEXT1: MOV R2, #00H ;R2用于判断按键时间是否超过0.5秒
0207 318C 328 NEXT2: ACALL ADDONE ;调用加1程序
0209 8C36 329 MOV L0, R4 ;移入工作方式选择数
020B 0536 330 INC L0
331 ;
020D 711F 332 WAITMK: ACALL DISPLY ;等待M键释放
020F 0A 333 INC R2 ;R2自增一
0210 C3 334 CLR C
0211 BAC800 335 CJNE R2, #0C8H, JGQUIC ;若R2大于等于200则调用快进子程序
0214 4002 336 JGQUIC: JC WATMK1
0216 31A3 337 ACALL QUICK
0218 30B1F2 338 WATMK1: JNB MKEY, WAITMK ; R2小于200则等待M键释放
339 ;
021B 20B0C8 340 JGFKEY: JB FKEY, MENU1 ;功能(F)键扫描
021E 71D1 341 ACALL KEYDLY ;延时消抖动
0220 20B0C3 342 JB FKEY, MENU1 ;键未按下则转修改(M)键扫描
0223 0E 343 INC R6 ;F键按键次数加1
0224 EE 344 MOV A, R6 ;移入按键次数
0225 23 345 RL A ;指针放大
0226 90022A 346 MOV DPTR, #FUNTAB
0229 73 347 JMP @A+DPTR ;根据按键次数跳转到相应的程序段
022A 21E1 348 FUNTAB: AJMP WAITFK
022C 4136 349 AJMP SETLOW
022E 415B 350 AJMP SETHI
0230 417E 351 AJMP ENDMEN
0232 00 352 NOP
0233 00 353 NOP
0234 417E 354 AJMP ENDMEN
355 ;STWKMD: ;工作模式设定,不需另外改变菜单
356 ;
0236 753E60 357 SETLOW: MOV MAX, #60H ;设置低位(秒位或分位)
0239 EC 358 MOV A, R4 ;移入工作模式选择数
023A 23 359 RL A ;指针放大
023B 90023F 360 MOV DPTR, #FTAB1
023E 73 361 JMP @A+DPTR ;根据工作模式选择数跳转到相应的程序段
023F 414B 362 FTAB1: AJMP SETSS
0241 4153 363 AJMP SETM60
0243 414B 364 AJMP SETSS
0245 4153 365 AJMP SETM60
0247 00 366 NOP
0248 00 367 NOP
0249 21E1 368 AJMP WAITFK
024B 753A30 369 SETSS: MOV DSPLYP, #SL ;设定显示区域为MM:SS
024E 753D31 370 MOV ADDRES, #SH
0251 21E1 371 AJMP WAITFK
0253 753A32 372 SETM60: MOV DSPLYP, #ML ; 设定显示区域为HH:MM
0256 753D33 373 MOV ADDRES, #MH
0259 21E1 374 AJMP WAITFK
375 ;
025B C239 376 SETHI: CLR LPLMOD ;设置高位(分位或时位)
025D D23A 377 SETB HPLMOD ;高两位数码管闪烁
025F 753E31 378 MOV MAX, #31H ;最大数为30
0262 EC 379 MOV A, R4 ;移入工作模式选择数
0263 23 380 RL A ;指针放大
0264 900268 381 MOV DPTR, #FTAB2 ;移入表首地址
0267 73 382 JMP @A+DPTR ;根据工作模式选择数跳转到相应的程序段
0268 4174 383 FTAB2: AJMP SETM30
026A 4179 384 AJMP SETHH
026C 4174 385 AJMP SETM30
026E 4179 386 AJMP SETHH
0270 00 387 NOP
0271 00 388 NOP
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 7
0272 21E1 389 AJMP WAITFK ;返回等待键释放
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -