📄 up51s004.lst
字号:
A51 MACRO ASSEMBLER UP51S004 01/04/2005 16:18:30 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN up51s004.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE up51s004.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;/*******************************************************************************
2 ;* *
3 ;* File : uP51s004.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 ;* Description: *
12 ;* LED数码管显示演示程序 *
13 ;* 在8个LED数码管上依次显示1,2,3,4 *
14 ;* *
15 ;* *
16 ;* *
17 ;*******************************************************************************/
18 CODE_SEG SEGMENT CODE
19
20 DATA_SEG SEGMENT DATA
21
---- 22 RSEG DATA_SEG
23
0000 24 dis_digit: DS 1
0001 25 dis_index: DS 1
0002 26 dis_buf: DS 4
0006 27 stack: DS 20
28
29 ;===========================================================
30
---- 31 CSEG AT 00000H ; Reset向量
0000 020000 F 32 LJMP MAIN
33
---- 34 CSEG AT 0000BH ; 定时器0中断向量
35
000B 020000 F 36 LJMP TIMER0
37
38
39 ;===========================================================
---- 40 RSEG CODE_SEG
0000 41 MAIN:
0000 758100 F 42 MOV SP,#(stack-1) ; 初始化堆栈指针
0003 7580FF 43 MOV P0,#0FFH ; 初始化I/O口
0006 75A0FF 44 MOV P2,#0FFH
0009 758901 45 MOV TMOD,#01H ; 初始化timer0
000C 758CFC 46 MOV TH0,#0FCH
000F 758A17 47 MOV TL0,#017H
0012 75A882 48 MOV IE,#082H
49
0015 900000 F 50 MOV DPTR, #DIS_CODE ; 设定显示初值
0018 7402 51 MOV A,#2
001A 93 52 MOVC A,@A+DPTR
001B F500 F 53 MOV dis_buf,A
001D 7403 54 MOV A,#3
001F 93 55 MOVC A,@A+DPTR
0020 F500 F 56 MOV dis_buf+01H,A
0022 7404 57 MOV A,#4
0024 93 58 MOVC A,@A+DPTR
A51 MACRO ASSEMBLER UP51S004 01/04/2005 16:18:30 PAGE 2
0025 F500 F 59 MOV dis_buf+02H,A
0027 7401 60 MOV A,#1
0029 93 61 MOVC A,@A+DPTR
002A F500 F 62 MOV dis_buf+03H,A
002C 740A 63 MOV A,#10
002E 93 64 MOVC A,@A+DPTR
65
002F 7500FE F 66 MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描
0032 F500 F 67 MOV dis_index,A
68
0034 D28C 69 SETB TR0 ; 启动定时器0,开始动态扫描显示
70
0036 71 MAIN_LP:
72
73 ; 主程序循环,增加其它代码
74
0036 80FE 75 SJMP MAIN_LP
76
77 ; END OF main
78
79
80 ;===========================================================
81
82 USING 0
0038 83 TIMER0:
84 ; 定时器0中断服程序, 用于数码管的动态扫描
85 ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
86 ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
87 ; 选通P2.0口数码管
88 ; DIS_BUF --- 显于缓冲区基地址
89
0038 C0E0 90 PUSH ACC
003A C0D0 91 PUSH PSW
003C C000 92 PUSH AR0
93
003E 758CFC 94 MOV TH0,#0FCH
0041 758A17 95 MOV TL0,#017H
96
0044 75A0FF 97 MOV P2,#0FFH ; 先关闭所有数码管
98
0047 7400 F 99 MOV A,#DIS_BUF ; 获得显示缓冲区基地址
0049 2500 F 100 ADD A,DIS_INDEX ; 获得偏移量
004B F8 101 MOV R0,A ; R0 = 基地址 + 偏移量
004C E6 102 MOV A,@R0 ; 获得显示代码
004D F580 103 MOV P0,A ; 显示代码传送到P0口
104
004F 8500A0 F 105 MOV P2,DIS_DIGIT ;
106
0052 E500 F 107 MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管
0054 23 108 RL A
0055 F500 F 109 MOV DIS_DIGIT,A
110
0057 0500 F 111 INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位
0059 530003 F 112 ANL DIS_INDEX,#0x03 ; 当DIS_INDEX等于8(0000 1000)时, 清0
113
005C D000 114 POP AR0
005E D0D0 115 POP PSW
0060 D0E0 116 POP ACC
117
0062 32 118 RETI
119 ; END OF timer0
120 ;===========================================================
121
---- 122 RSEG CODE_SEG
0063 123 DIS_CODE:
0063 C0 124 DB 0C0H ;1
A51 MACRO ASSEMBLER UP51S004 01/04/2005 16:18:30 PAGE 3
0064 F9 125 DB 0F9H ;2
0065 A4 126 DB 0A4H ;3
0066 B0 127 DB 0B0H ;4
0067 99 128 DB 099H ;4
0068 92 129 DB 092H ;5
0069 82 130 DB 082H ;6
006A F8 131 DB 0F8H ;7
006B 80 132 DB 080H ;8
006C 90 133 DB 090H ;9
006D FF 134 DB 0FFH ;off
135
136 END
A51 MACRO ASSEMBLER UP51S004 01/04/2005 16:18:30 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 006EH REL=UNIT
DATA_SEG . . . . . D SEG 001AH REL=UNIT
DIS_BUF. . . . . . D ADDR 0002H R SEG=DATA_SEG
DIS_CODE . . . . . C ADDR 0063H 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 0036H 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 0006H R SEG=DATA_SEG
TH0. . . . . . . . D ADDR 008CH A
TIMER0 . . . . . . C ADDR 0038H 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 + -