📄 ex05.lst
字号:
A51 MACRO ASSEMBLER EX05 05/22/2005 12:45:23 PAGE 1
MACRO ASSEMBLER A51 V7.03
OBJECT MODULE PLACED IN ex05.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex05.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*******************************************************************************
2 ; Title: 演示程序1 - 按键检测 *
3 ; Name: ex05.asm *
4 ; Date: 2005-5-5 *
5 ; Ver: 1.0 *
*
6 ; web: http://www.mcustudy.com *
7 ;********************************************************************************
8 ;* 描述: *
9 ;* 按键扫描程序 *
10 ;* 按下K1,单灯右移 *
11 ;* 按下K2,单灯左移 *
12 ;* *
13 ;* *
14 ;********************************************************************************
15 CODE_SEG SEGMENT CODE
16 DATA_SEG SEGMENT DATA
17 STACK_SEG SEGMENT IDATA
18
---- 19 RSEG DATA_SEG
0000 20 KEY_S: DS 1
0001 21 KEY_V: DS 1
22
---- 23 RSEG STACK_SEG
0000 24 STACK: DS 20
25
00B2 26 K1 BIT P3.2 ;
00B3 27 K2 BIT P3.3 ;
28
29
---- 30 CSEG AT 0000H
0000 020000 F 31 JMP MAIN
32
33 ;===============================================================================
---- 34 RSEG CODE_SEG
0000 35 MAIN:
0000 758100 F 36 MOV SP,#(STACK-1) ; 设置栈指针
0003 7580FE 37 MOV P0,#0FEH ; 初始LED状态
0006 750003 F 38 MOV KEY_V,#03H ; 初始键值
39
0009 40 KEY_CHKSW: ; 循环检测按键是否按下
0009 1100 F 41 ACALL SCAN_KEY ; 输入按键状态
000B F500 F 42 MOV KEY_S,A
000D 6500 F 43 XRL A,KEY_V ; 检查按键值是否改变
000F 60F8 44 JZ KEY_CHKSW ; 若无键被按,则跳回KEY_CHKSW
45
0011 7F0A 46 MOV R7,#10 ; 延时10ms
0013 1100 F 47 ACALL DELAYMS ; 延时去抖
0015 1100 F 48 ACALL SCAN_KEY ; 再次检查按键值
0017 F500 F 49 MOV KEY_S,A
0019 6500 F 50 XRL A,KEY_V
001B 60EC 51 JZ KEY_CHKSW
52
001D 850000 F 53 MOV KEY_V,KEY_S ; 保存按键状态
0020 1100 F 54 ACALL PROC_KEY ;
0022 80E5 55 SJMP KEY_CHKSW
56 ;===============================================================================
A51 MACRO ASSEMBLER EX05 05/22/2005 12:45:23 PAGE 2
57 ; 扫描按键
58 ; 传入参数:无
59 ; 返回值:A --- 按键状态
0024 60 SCAN_KEY:
0024 E4 61 CLR A
0025 A2B2 62 MOV C,K1
0027 92E0 63 MOV ACC.0,C
0029 A2B3 64 MOV C,K2
002B 92E1 65 MOV ACC.1,C
002D 22 66 RET
67
68 ;===============================================================================
69 ; 按键处理子程序
70 ; 传入参数: KEY_V --- 按键值
71 ; 返回值: 无
72 ;===============================================================================
002E 73 PROC_KEY:
74
002E E500 F 75 MOV A,KEY_V
0030 30E004 76 JNB ACC.0,PROC_K1
0033 30E107 77 JNB ACC.1,PROC_K2
0036 22 78 RET
79
0037 80 PROC_K1: ; 按键K1处理程序
0037 E580 81 MOV A,P0 ; 右移
0039 03 82 RR A
003A F580 83 MOV P0,A
003C 22 84 RET
85
003D 86 PROC_K2: ; 按键K2处理程序
003D E580 87 MOV A,P0 ; 左移
003F 23 88 RL A
0040 F580 89 MOV P0,A
0042 22 90 RET
91
92 ;===============================================================================
93 ; 延时子程序
94 ; 入口参数:R7 --- 延时值(MS)
95 ; 返回值:无
96
0043 97 DELAYMS:
0043 EF 98 MOV A,R7
0044 6009 99 JZ END_DLYMS
0046 100 DLY_LP1:
0046 7EB9 101 MOV R6,#185
0048 102 DLY_LP2:
0048 00 103 NOP
0049 00 104 NOP
004A 00 105 NOP
004B DEFB 106 DJNZ R6,DLY_LP2
004D DFF7 107 DJNZ R7,DLY_LP1
108
004F 109 END_DLYMS:
004F 22 110 RET
111
112 END
A51 MACRO ASSEMBLER EX05 05/22/2005 12:45:23 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
CODE_SEG . . . . . C SEG 0050H REL=UNIT
DATA_SEG . . . . . D SEG 0002H REL=UNIT
DELAYMS. . . . . . C ADDR 0043H R SEG=CODE_SEG
DLY_LP1. . . . . . C ADDR 0046H R SEG=CODE_SEG
DLY_LP2. . . . . . C ADDR 0048H R SEG=CODE_SEG
END_DLYMS. . . . . C ADDR 004FH R SEG=CODE_SEG
K1 . . . . . . . . B ADDR 00B0H.2 A
K2 . . . . . . . . B ADDR 00B0H.3 A
KEY_CHKSW. . . . . C ADDR 0009H R SEG=CODE_SEG
KEY_S. . . . . . . D ADDR 0000H R SEG=DATA_SEG
KEY_V. . . . . . . D ADDR 0001H R SEG=DATA_SEG
MAIN . . . . . . . C ADDR 0000H R SEG=CODE_SEG
P0 . . . . . . . . D ADDR 0080H A
P3 . . . . . . . . D ADDR 00B0H A
PROC_K1. . . . . . C ADDR 0037H R SEG=CODE_SEG
PROC_K2. . . . . . C ADDR 003DH R SEG=CODE_SEG
PROC_KEY . . . . . C ADDR 002EH R SEG=CODE_SEG
SCAN_KEY . . . . . C ADDR 0024H R SEG=CODE_SEG
SP . . . . . . . . D ADDR 0081H A
STACK. . . . . . . I ADDR 0000H R SEG=STACK_SEG
STACK_SEG. . . . . I SEG 0014H REL=UNIT
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -