?? wl005.lst
字號:
A51 MACRO ASSEMBLER WL005 03/29/2005 15:43:00 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN wl005.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE wl005.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************************
2 ;* 標題: 偉納電子ME300B單片機開發系統演示程序 - 按鍵掃描程序 *
3 ;* 文件: wl005.asm *
4 ;* 日期: 2004-1-5 *
5 ;* 版本: 1.0 *
6 ;* 作者: 偉納電子 - Freeman *
7 ;* 郵箱: freeman@willar.com *
8 ;* 網站: http://www.willar.com *
9 ;********************************************************************************
10 ;* 描述: *
11 ;* 按鍵掃描程序 *
12 ;* 按下K1,單燈右移 *
13 ;* 按下K2,單燈左移 *
14 ;* *
15 ;* *
16 ;********************************************************************************
17 ;* 【版權】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
18 ;* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
19 ;********************************************************************************
20
21 CODE_SEG SEGMENT CODE
22 DATA_SEG SEGMENT DATA
23 STACK_SEG SEGMENT IDATA
24
---- 25 RSEG DATA_SEG
0000 26 KEY_S: DS 1
0001 27 KEY_V: DS 1
28
---- 29 RSEG STACK_SEG
0000 30 STACK: DS 20
31
32
0094 33 K1 BIT P1.4 ;
0095 34 K2 BIT P1.5 ;
35
36
---- 37 CSEG AT 0000H
0000 020000 F 38 JMP MAIN
39
40 ;===============================================================================
---- 41 RSEG CODE_SEG
0000 42 MAIN:
0000 758100 F 43 MOV SP,#(STACK-1) ; 設置棧指針
0003 7580FE 44 MOV P0,#0FEH ; 初始點亮LED P00
0006 750003 F 45 MOV KEY_V,#03H ; 初始鍵值
46
0009 47 KEY_CHKSW: ; 循環檢測按鍵是否按下
0009 1100 F 48 ACALL SCAN_KEY ; 輸入按鍵狀態
000B F500 F 49 MOV KEY_S,A
000D 6500 F 50 XRL A,KEY_V ; 檢查按鍵值是否改變
000F 60F8 51 JZ KEY_CHKSW ; 若無鍵被按,則跳回KEY_CHKSW
52
0011 7F0A 53 MOV R7,#10 ; 延時10ms
0013 1100 F 54 ACALL DELAYMS ; 延時去抖
0015 1100 F 55 ACALL SCAN_KEY ; 再次檢查按鍵值
0017 F500 F 56 MOV KEY_S,A
0019 6500 F 57 XRL A,KEY_V
A51 MACRO ASSEMBLER WL005 03/29/2005 15:43:00 PAGE 2
001B 60EC 58 JZ KEY_CHKSW
59
001D 850000 F 60 MOV KEY_V,KEY_S ; 保存按鍵狀態
0020 1100 F 61 ACALL PROC_KEY ;
0022 80E5 62 SJMP KEY_CHKSW
63 ;===============================================================================
0024 64 SCAN_KEY:
65 ; 掃描按鍵
66 ; 傳入參數:無
67 ; 返回值:A --- 按鍵狀態
68
0024 E4 69 CLR A
0025 A294 70 MOV C,K1
0027 92E0 71 MOV ACC.0,C
0029 A295 72 MOV C,K2
002B 92E1 73 MOV ACC.1,C
002D 22 74 RET
75
76 ;===============================================================================
002E 77 PROC_KEY:
78 ; 按鍵處理子程序
79 ; 傳入參數: KEY_V --- 按鍵值
80 ; 返回值: 無
81
002E E500 F 82 MOV A,KEY_V
0030 30E004 83 JNB ACC.0,PROC_K1
0033 30E107 84 JNB ACC.1,PROC_K2
0036 22 85 RET
86
0037 87 PROC_K1: ; 按鍵K1處理程序
0037 E580 88 MOV A,P0 ; 右移
0039 03 89 RR A
003A F580 90 MOV P0,A
003C 22 91 RET
92
003D 93 PROC_K2: ; 按鍵K2處理程序
003D E580 94 MOV A,P0 ; 左移
003F 23 95 RL A
0040 F580 96 MOV P0,A
0042 22 97 RET
98
99 ;===============================================================================
100
0043 101 DELAYMS:
102 ; 延時子程序
103 ; 傳入參數:R7 --- 延時值(MS)
104 ; 返回值:無
105
0043 EF 106 MOV A,R7
0044 6009 107 JZ END_DLYMS
0046 108 DLY_LP1:
0046 7EB9 109 MOV R6,#185
0048 110 DLY_LP2:
0048 00 111 NOP
0049 00 112 NOP
004A 00 113 NOP
004B DEFB 114 DJNZ R6,DLY_LP2
004D DFF7 115 DJNZ R7,DLY_LP1
116
004F 117 END_DLYMS:
004F 22 118 RET
119
120 ; END OF DELAYMS
121
122 END
A51 MACRO ASSEMBLER WL005 03/29/2005 15:43:00 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 0090H.4 A
K2 . . . . . . . . B ADDR 0090H.5 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
P1 . . . . . . . . D ADDR 0090H 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 + -