📄 up51s005.lst
字号:
A51 MACRO ASSEMBLER UP51S005 12/12/2004 22:35:46 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN up51s005.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE up51s005.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;/*******************************************************************************
2 ;* *
3 ;* File : uP51s005.asm *
4 ;* Date : 2004-9-5 *
5 ;* Version : 1.0 *
6 ;* *
7 ;* Author : kevin kevin@dz51.com *
8 ;* Company : Http://www.dz51.com *
9 ;* *
10 ;********************************************************************************
11 ;* Descriptoon: *
12 ;* 按键演示程序 *
13 ;* 按下AN1,单灯右移 *
14 ;* 按下AN2,单灯左移 *
15 ;* *
16 ;********************************************************************************
17
18 CODE_SEG SEGMENT CODE
19 DATA_SEG SEGMENT DATA
20 STACK_SEG SEGMENT IDATA
0030 21 leddata data 30H
22
23
---- 24 RSEG DATA_SEG
0000 25 KEY_S: DS 1
0001 26 KEY_V: DS 1
27
---- 28 RSEG STACK_SEG
0000 29 STACK: DS 20
30
31
00B2 32 AN1 BIT P3.2 ;
00B3 33 AN2 BIT P3.3 ;
34
35
---- 36 CSEG AT 0000H
0000 020000 F 37 JMP MAIN
38
39 ;===============================================================================
---- 40 RSEG CODE_SEG
0000 41 MAIN:
0000 758100 F 42 MOV SP,#(STACK-1) ; 设置栈指针
0003 7530FE 43 MOV leddata,#0FEH ; 初始点亮LED P00
0006 853080 44 MOV P0,leddata ; 初始点亮LED P00
0009 750003 F 45 MOV KEY_V,#03H ; 初始键值
46
000C 47 KEY_CHKSW: ; 循环检测按键是否按下
000C 1100 F 48 ACALL SCAN_KEY ; 输入按键状态
000E F500 F 49 MOV KEY_S,A
0010 6500 F 50 XRL A,KEY_V ; 检查按键值是否改变
0012 60F8 51 JZ KEY_CHKSW ; 若无键被按,则跳回KEY_CHKSW
52
0014 7F0A 53 MOV R7,#10 ; 延时10ms
0016 1100 F 54 ACALL DELAYMS ; 延时去抖
0018 1100 F 55 ACALL SCAN_KEY ; 再次检查按键值
001A F500 F 56 MOV KEY_S,A
001C 6500 F 57 XRL A,KEY_V
A51 MACRO ASSEMBLER UP51S005 12/12/2004 22:35:46 PAGE 2
001E 60EC 58 JZ KEY_CHKSW
59
0020 850000 F 60 MOV KEY_V,KEY_S ; 保存按键状态
0023 1100 F 61 ACALL PROC_KEY ;
0025 80E5 62 SJMP KEY_CHKSW
63 ;===============================================================================
0027 64 SCAN_KEY:
65 ; 扫描按键
66 ; 传入参数:无
67 ; 返回值:A --- 按键状态
68
0027 E4 69 CLR A
0028 A2B2 70 MOV C,AN1
002A 92E0 71 MOV ACC.0,C
002C A2B3 72 MOV C,AN2
002E 92E1 73 MOV ACC.1,C
0030 22 74 RET
75
76 ;===============================================================================
0031 77 PROC_KEY:
78 ; 按键处理子程序
79 ; 传入参数: KEY_V --- 按键值
80 ; 返回值: 无
81
0031 E500 F 82 MOV A,KEY_V
0033 30E004 83 JNB ACC.0,PROC_AN1
0036 30E10A 84 JNB ACC.1,PROC_AN2
0039 22 85 RET
86
003A 87 PROC_AN1: ; 按键AN1处理程序
003A E530 88 MOV A,leddata ; 右移
003C 03 89 RR A
003D F530 90 MOV leddata,A
003F 853080 91 MOV P0,leddata
0042 22 92 RET
93
0043 94 PROC_AN2: ; 按键AN2处理程序
0043 E530 95 MOV A,leddata ; 左移
0045 23 96 RL A
0046 F530 97 MOV leddata,A
0048 853080 98 MOV P0,leddata
004B 22 99 RET
100
101 ;===============================================================================
102
004C 103 DELAYMS:
104 ; 延时子程序
105 ; 传入参数:R7 --- 延时值(MS)
106 ; 返回值:无
107
004C EF 108 MOV A,R7
004D 6009 109 JZ END_DLYMS
004F 110 DLY_LP1:
004F 7EB9 111 MOV R6,#185
0051 112 DLY_LP2:
0051 00 113 NOP
0052 00 114 NOP
0053 00 115 NOP
0054 DEFB 116 DJNZ R6,DLY_LP2
0056 DFF7 117 DJNZ R7,DLY_LP1
118
0058 119 END_DLYMS:
0058 22 120 RET
121
122 ; END OF DELAYMS
123
A51 MACRO ASSEMBLER UP51S005 12/12/2004 22:35:46 PAGE 3
124 END
A51 MACRO ASSEMBLER UP51S005 12/12/2004 22:35:46 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
AN1. . . . . . . . B ADDR 00B0H.2 A
AN2. . . . . . . . B ADDR 00B0H.3 A
CODE_SEG . . . . . C SEG 0059H REL=UNIT
DATA_SEG . . . . . D SEG 0002H REL=UNIT
DELAYMS. . . . . . C ADDR 004CH R SEG=CODE_SEG
DLY_LP1. . . . . . C ADDR 004FH R SEG=CODE_SEG
DLY_LP2. . . . . . C ADDR 0051H R SEG=CODE_SEG
END_DLYMS. . . . . C ADDR 0058H R SEG=CODE_SEG
KEY_CHKSW. . . . . C ADDR 000CH R SEG=CODE_SEG
KEY_S. . . . . . . D ADDR 0000H R SEG=DATA_SEG
KEY_V. . . . . . . D ADDR 0001H R SEG=DATA_SEG
LEDDATA. . . . . . D ADDR 0030H A
MAIN . . . . . . . C ADDR 0000H R SEG=CODE_SEG
P0 . . . . . . . . D ADDR 0080H A
P3 . . . . . . . . D ADDR 00B0H A
PROC_AN1 . . . . . C ADDR 003AH R SEG=CODE_SEG
PROC_AN2 . . . . . C ADDR 0043H R SEG=CODE_SEG
PROC_KEY . . . . . C ADDR 0031H R SEG=CODE_SEG
SCAN_KEY . . . . . C ADDR 0027H 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 + -