📄 wl004.lst
字号:
A51 MACRO ASSEMBLER WL004 11/03/2004 10:51:58 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN wl004.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE wl004.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;/*******************************************************************************
2 ;* *
3 ;* File : wl004.asm *
4 ;* Date : 2004-1-5 *
5 ;* Version : 1.0 *
6 ;* *
7 ;********************************************************************************
8 ;* Description: *
9 ;* LED数码管显示演示程序 *
10 ;* 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 *
11 ;* *
12 ;* *
13 ;* *
14 ;*******************************************************************************/
15 CODE_SEG SEGMENT CODE
16
17 DATA_SEG SEGMENT DATA
18
---- 19 RSEG DATA_SEG
20
0000 21 dis_digit: DS 1
0001 22 dis_index: DS 1
0002 23 dis_buf: DS 8
000A 24 stack: DS 20
25
26 ;===========================================================
27
---- 28 CSEG AT 00000H ; Reset向量
0000 020000 F 29 LJMP MAIN
30
---- 31 CSEG AT 0000BH ; 定时器0中断向量
32
000B 020000 F 33 LJMP TIMER0
34
35
36 ;===========================================================
---- 37 RSEG CODE_SEG
0000 38 MAIN:
0000 758100 F 39 MOV SP,#(stack-1) ; 初始化堆栈指针
0003 7580FF 40 MOV P0,#0FFH ; 初始化I/O口
0006 75A0FF 41 MOV P2,#0FFH
0009 758901 42 MOV TMOD,#01H ; 初始化timer0
000C 758CFC 43 MOV TH0,#0FCH
000F 758A17 44 MOV TL0,#017H
0012 75A882 45 MOV IE,#082H
46
0015 900000 F 47 MOV DPTR, #DIS_CODE ; 设定显示初值
0018 7401 48 MOV A,#1
001A 93 49 MOVC A,@A+DPTR
001B F500 F 50 MOV dis_buf,A
001D 7402 51 MOV A,#2
001F 93 52 MOVC A,@A+DPTR
0020 F500 F 53 MOV dis_buf+01H,A
0022 7403 54 MOV A,#3
0024 93 55 MOVC A,@A+DPTR
0025 F500 F 56 MOV dis_buf+02H,A
0027 7404 57 MOV A,#4
0029 93 58 MOVC A,@A+DPTR
A51 MACRO ASSEMBLER WL004 11/03/2004 10:51:58 PAGE 2
002A F500 F 59 MOV dis_buf+03H,A
002C 7405 60 MOV A,#5
002E 93 61 MOVC A,@A+DPTR
002F F500 F 62 MOV dis_buf+04H,A
0031 7406 63 MOV A,#6
0033 93 64 MOVC A,@A+DPTR
0034 F500 F 65 MOV dis_buf+05H,A
0036 7407 66 MOV A,#7
0038 93 67 MOVC A,@A+DPTR
0039 F500 F 68 MOV dis_buf+06H,A
003B 7408 69 MOV A,#8
003D 93 70 MOVC A,@A+DPTR
003E F500 F 71 MOV dis_buf+07H,A
72
0040 7500FE F 73 MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描
0043 F500 F 74 MOV dis_index,A
75
0045 D28C 76 SETB TR0 ; 启动定时器0,开始动态扫描显示
77
0047 78 MAIN_LP:
79
80 ; 主程序循环,增加其它代码
81
0047 80FE 82 SJMP MAIN_LP
83
84 ; END OF main
85
86
87 ;===========================================================
88
89 USING 0
0049 90 TIMER0:
91 ; 定时器0中断服程序, 用于数码管的动态扫描
92 ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
93 ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
94 ; 选通P2.0口数码管
95 ; DIS_BUF --- 显于缓冲区基地址
96
0049 C0E0 97 PUSH ACC
004B C0D0 98 PUSH PSW
004D C000 99 PUSH AR0
100
004F 758CFC 101 MOV TH0,#0FCH
0052 758A17 102 MOV TL0,#017H
103
0055 75A0FF 104 MOV P2,#0FFH ; 先关闭所有数码管
105
0058 7400 F 106 MOV A,#DIS_BUF ; 获得显示缓冲区基地址
005A 2500 F 107 ADD A,DIS_INDEX ; 获得偏移量
005C F8 108 MOV R0,A ; R0 = 基地址 + 偏移量
005D E6 109 MOV A,@R0 ; 获得显示代码
005E F580 110 MOV P0,A ; 显示代码传送到P0口
111
0060 8500A0 F 112 MOV P2,DIS_DIGIT ;
113
0063 E500 F 114 MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管
0065 23 115 RL A
0066 F500 F 116 MOV DIS_DIGIT,A
117
0068 0500 F 118 INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位
006A 530007 F 119 ANL DIS_INDEX,#0x07 ; 当DIS_INDEX等于8(0000 1000)时, 清0
120
006D D000 121 POP AR0
006F D0D0 122 POP PSW
0071 D0E0 123 POP ACC
124
A51 MACRO ASSEMBLER WL004 11/03/2004 10:51:58 PAGE 3
0073 32 125 RETI
126 ; END OF timer0
127 ;===========================================================
128
---- 129 RSEG CODE_SEG
0074 130 DIS_CODE:
0074 C0 131 DB 0C0H
0075 F9 132 DB 0F9H
0076 A4 133 DB 0A4H
0077 B0 134 DB 0B0H
0078 99 135 DB 099H
0079 92 136 DB 092H
007A 82 137 DB 082H
007B F8 138 DB 0F8H
007C 80 139 DB 080H
007D 90 140 DB 090H
007E FF 141 DB 0FFH
142
143 END
A51 MACRO ASSEMBLER WL004 11/03/2004 10:51:58 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
AR0. . . . . . . . D ADDR 0000H A
CODE_SEG . . . . . C SEG 007FH REL=UNIT
DATA_SEG . . . . . D SEG 001EH REL=UNIT
DIS_BUF. . . . . . D ADDR 0002H R SEG=DATA_SEG
DIS_CODE . . . . . C ADDR 0074H R SEG=CODE_SEG
DIS_DIGIT. . . . . D ADDR 0000H R SEG=DATA_SEG
DIS_INDEX. . . . . D ADDR 0001H R SEG=DATA_SEG
IE . . . . . . . . D ADDR 00A8H A
MAIN . . . . . . . C ADDR 0000H R SEG=CODE_SEG
MAIN_LP. . . . . . C ADDR 0047H R SEG=CODE_SEG
P0 . . . . . . . . D ADDR 0080H A
P2 . . . . . . . . D ADDR 00A0H A
PSW. . . . . . . . D ADDR 00D0H A
SP . . . . . . . . D ADDR 0081H A
STACK. . . . . . . D ADDR 000AH R SEG=DATA_SEG
TH0. . . . . . . . D ADDR 008CH A
TIMER0 . . . . . . C ADDR 0049H R SEG=CODE_SEG
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -