📄 main.lst
字号:
A51 MACRO ASSEMBLER MAIN 10/21/2006 11:30:34 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE main.A51 SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*******************************************************************************
2 ;程序名称:RAM测试
3 ;硬件接法:16KB片外RAM接在0x8000~0xBFFF,MOVC和MOVX都可访问,详见电路图
4 ;运行效果:如果RAM通过测试,则指示灯常亮,否则指示灯不停闪烁
5 ;*******************************************************************************
6
7
8 ;*******************************************************************************
9 ;定义I/O接口
10 ;*******************************************************************************
0091 11 LED BIT P1.1
12
13
14 ;*******************************************************************************
15 ;复位入口
16 ;*******************************************************************************
0000 17 ORG 0x0000
0000 0200C1 18 LJMP main
19
20
0080 21 ORG 0x0080
22
23
24 ;*******************************************************************************
25 ;函数:void Delay(unsigned char t)
26 ;功能:延时0.01s~2.56s
27 ;参数:t = R7
28 ; t>0时,延时(t*0.01)s
29 ; t=0时,延时2.56s
30 ;说明:定时10ms的定时器初值=65536-0.01/(1/(f/12)),其中f为晶振频率
31 ;*******************************************************************************
0080 32 Delay:
0080 758CDC 33 MOV TH0, #0xDC ;设置T0初值(定时10ms)
0083 758A00 34 MOV TL0, #0x00
0086 D28C 35 SETB TR0 ;启动T0
0088 308DFD 36 JNB TF0, $ ;等待T0溢出
008B C28C 37 CLR TR0 ;停止T0
008D C28D 38 CLR TF0 ;清除溢出标志
008F DFEF 39 DJNZ R7, Delay ;循环t次
0091 22 40 RET
41
42
43 ;*******************************************************************************
44 ;宏定义:DJNZ_W
45 ;功能:双字节数自减1,结果不为0跳转
46 ;参数:
47 ; (xh,xl):要操作的数
48 ; Label:跳转目标
49 ;*******************************************************************************
50 DJNZ_W MACRO xh,xl, Label
51 LOCAL next
52 MOV A, xl
53 JNZ next
54 DEC xh
55 next:
56 DEC xl
57 MOV A, xh
58 ORL A, xl
A51 MACRO ASSEMBLER MAIN 10/21/2006 11:30:34 PAGE 2
59 JNZ Label
60 ENDM
61
62
63 ;*******************************************************************************
64 ;函数:void WriteRam(unsigned int addr, unsigned int size, unsigned char c)
65 ;功能:向RAM写入数据
66 ;参数:addr=R6,R7-起始地址
67 ; size=R4,R5-存储单元大小
68 ; c=R3-要写入的数据
69 ;*******************************************************************************
0092 70 WriteRam:
0092 8E83 71 MOV DPH, R6
0094 8F82 72 MOV DPL, R7
0096 73 WriteRam_Loop:
0096 EB 74 MOV A, R3
0097 F0 75 MOVX @DPTR, A
0098 A3 76 INC DPTR
77 DJNZ_W R4,R5, WriteRam_Loop
00A2 22 86 RET
87
88
89 ;*******************************************************************************
90 ;函数:void CheckRam(unsigned int addr, unsigned int size, unsigned char c)
91 ;功能:检查RAM中存储的数据
92 ;参数:addr=R6,R7-起始地址
93 ; size=R4,R5-存储单元大小
94 ; c=R3-核对的数据
95 ;返回:0-失败
96 ; 1-成功
97 ;*******************************************************************************
00A3 98 CheckRam:
00A3 8E83 99 MOV DPH, R6
00A5 8F82 100 MOV DPL, R7
00A7 101 CheckRam_Loop:
00A7 E4 102 CLR A
00A8 93 103 MOVC A, @A+DPTR
00A9 A3 104 INC DPTR
00AA 6B 105 XRL A, R3
00AB 700B 106 JNZ CheckRam_Fail
107 DJNZ_W R4,R5, CheckRam_Loop
00B6 D3 116 SETB C
00B7 22 117 RET
00B8 118 CheckRam_Fail:
00B8 C3 119 CLR C
00B9 22 120 RET
121
122
123 ;*******************************************************************************
124 ;函数:SysInit()
125 ;功能:系统初始化
126 ;*******************************************************************************
00BA 127 SysInit:
00BA 758130 128 MOV SP, #0x30
00BD 758901 129 MOV TMOD, #0x01 ;T0设置在方式1,即16位定时器
00C0 22 130 RET
131
132
133 ;*******************************************************************************
134 ;函数:void main()
135 ;功能:主函数
136 ;*******************************************************************************
00C1 137 main:
00C1 11BA 138 CALL SysInit
139 ;向x8000~0xBFFF写入测试数据0x5A
00C3 7BA5 140 MOV R3, #0xA5
A51 MACRO ASSEMBLER MAIN 10/21/2006 11:30:34 PAGE 3
00C5 7C40 141 MOV R4, #0x40
00C7 7D00 142 MOV R5, #0x00
00C9 7E80 143 MOV R6, #0x80
00CB 7F00 144 MOV R7, #0x00
00CD 1192 145 CALL WriteRam
146 ;检查RAM
00CF 7BA5 147 MOV R3, #0xA5
00D1 7C40 148 MOV R4, #0x40
00D3 7D00 149 MOV R5, #0x00
00D5 7E80 150 MOV R6, #0x80
00D7 7F00 151 MOV R7, #0x00
00D9 11A3 152 CALL CheckRam
00DB 5004 153 JNC Ram_Error
00DD 154 Ram_Ok:
155 ;测试通过,LED常亮
00DD C291 156 CLR LED
00DF 80FE 157 SJMP $
00E1 158 Ram_Error:
159 ;测试失败,LED不停闪烁
00E1 C291 160 CLR LED
00E3 7F1E 161 MOV R7, #30
00E5 1180 162 CALL Delay
00E7 D291 163 SETB LED
00E9 7F1E 164 MOV R7, #30
00EB 1180 165 CALL Delay
00ED 80F2 166 SJMP Ram_Error
167
168
169 ;*******************************************************************************
170 ;程序结束
171 ;*******************************************************************************
172 END
A51 MACRO ASSEMBLER MAIN 10/21/2006 11:30:34 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
??0000 . . . . . . C ADDR 009DH A
??0001 . . . . . . C ADDR 00B1H A
CHECKRAM . . . . . C ADDR 00A3H A
CHECKRAM_FAIL. . . C ADDR 00B8H A
CHECKRAM_LOOP. . . C ADDR 00A7H A
DELAY. . . . . . . C ADDR 0080H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
LED. . . . . . . . B ADDR 0090H.1 A
MAIN . . . . . . . C ADDR 00C1H A
P1 . . . . . . . . D ADDR 0090H A
RAM_ERROR. . . . . C ADDR 00E1H A
RAM_OK . . . . . . C ADDR 00DDH A
SP . . . . . . . . D ADDR 0081H A
SYSINIT. . . . . . C ADDR 00BAH A
TF0. . . . . . . . B ADDR 0088H.5 A
TH0. . . . . . . . D ADDR 008CH A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
WRITERAM . . . . . C ADDR 0092H A
WRITERAM_LOOP. . . C ADDR 0096H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -