📄 24c02-asm.lst
字号:
A51 MACRO ASSEMBLER 24C02_ASM 03/03/2008 13:35:36 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 24C02-ASM.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 24C02-ASM.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2
00B5 3 SDA BIT P3.5 ;定义24C02数据线
00B4 4 SCL BIT P3.4 ;定义24C02时钟线
5 ;-----------------------------------------------------
0000 6 ORG 0000H
0000 0130 7 AJMP MAIN
0030 8 ORG 0030H
9 ;-----------------------------------------------------
0030 10 MAIN:
0030 758160 11 MOV SP,#60H
0033 7580FF 12 MOV P0,#0FFH
0036 113C 13 ACALL WRITE_DATA
0038 14 M_LOOP:
0038 114F 15 ACALL READ_DATA
003A 80FC 16 JMP M_LOOP
17 ;-----------------------------------------------------
18 ;写N字节数据子程序
19 ;查表写数据入24C02
20 ;-----------------------------------------------------
003C 21 WRITE_DATA:
003C 7800 22 MOV R0,#00H ;数据写入首地址
003E 7948 23 MOV R1,#72 ;共写入72个字节的数据
0040 9000FD 24 MOV DPTR,#TAB ;查表
0043 25 WR_LOOP:
0043 E4 26 CLR A
0044 93 27 MOVC A,@A+DPTR
0045 F5F0 28 MOV B,A
0047 120063 29 LCALL WRITE_BYTE ;将查表结果写入24C02
004A 08 30 INC R0 ;地址+1
004B A3 31 INC DPTR ;数据指针+1
004C D9F5 32 DJNZ R1,WR_LOOP ;72个数写入完毕?
004E 22 33 RET
34
35 ;-----------------------------------------------------
36 ;读N字节数据子程序
37 ;从24C02读出数据,送P0口显示
38 ;-----------------------------------------------------
39
004F 40 READ_DATA:
004F 7800 41 MOV R0,#00H ;设定读取的初始地址
0051 7948 42 MOV R1,#72 ;设定读取个数
0053 43 RE_LOOP:
0053 12007D 44 LCALL READ_BYTE ;读EEPROM
0056 11E0 45 CALL STOP
0058 08 46 INC R0 ;地址+1
0059 F580 47 MOV P0,A ;将结果输出到P0显示
005B 7C3C 48 MOV R4,#60 ;延时约300ms
005D 1200F2 49 LCALL DELAY_5MS
0060 D9F1 50 DJNZ R1,RE_LOOP
0062 22 51 RET
52
53 ;----------------------------------------------------
54 ;写操作子程序
55 ;输入参数: R0---要写入的地址,B---要写入的数据
56 ;----------------------------------------------------
0063 57 WRITE_BYTE:
0063 11D2 58 CALL START
A51 MACRO ASSEMBLER 24C02_ASM 03/03/2008 13:35:36 PAGE 2
59
0065 74A0 60 MOV A,#0A0H
0067 11AE 61 CALL SENDBYTE
0069 11BE 62 CALL WAITACK
63
006B E8 64 MOV A,R0
006C 11AE 65 CALL SENDBYTE
006E 11BE 66 CALL WAITACK
67
0070 E5F0 68 MOV A,B
0072 11AE 69 CALL SENDBYTE
0074 11BE 70 CALL WAITACK
0076 11E0 71 CALL STOP
72
0078 7C01 73 MOV R4,#1 ;每写入1个字节,延时若干MS
007A 11F2 74 CALL DELAY_5MS
007C 22 75 RET
76 ;----------------------------------------------------
77 ;读操作子程序
78 ;输入参数:R0---要读的字节地址,
79 ;输出参数: A---结果
80 ;----------------------------------------------------
007D 81 READ_BYTE:
007D 11D2 82 CALL START
007F 74A0 83 MOV A,#0A0H
0081 11AE 84 CALL SENDBYTE
0083 11BE 85 CALL WAITACK
86
0085 E8 87 MOV A,R0
0086 11AE 88 CALL SENDBYTE
0088 11BE 89 CALL WAITACK
90
008A 11D2 91 CALL START
008C 74A1 92 MOV A,#0A1H
008E 11AE 93 CALL SENDBYTE
0090 11BE 94 CALL WAITACK
0092 1195 95 CALL RCVBYTE
0094 22 96 RET
97 ;-----------------------------------------------------
98 ;从IIC总线上接收一个字节数据
99 ;出口参数:A---接收数据存放在A中
100 ;-----------------------------------------------------
0095 101 RCVBYTE:
0095 7F08 102 MOV R7,#08 ;一个字节共接收8位数据
0097 E4 103 CLR A
0098 D2B5 104 SETB SDA ;释放SDA数据线
009A 105 R_BYTE:
009A C2B4 106 CLR SCL
009C 00 107 NOP
009D 00 108 NOP
009E 00 109 NOP
009F 00 110 NOP
00A0 D2B4 111 SETB SCL ;启动一个时钟周期,读总线
00A2 00 112 NOP
00A3 00 113 NOP
00A4 00 114 NOP
00A5 00 115 NOP
00A6 A2B5 116 MOV C,SDA ;将SDA状态读入C
00A8 33 117 RLC A ;结果移入A
00A9 D2B5 118 SETB SDA ;释放SDA数据线
00AB DFED 119 DJNZ R7,R_BYTE ;判断8位数据是否接收完全?
00AD 22 120 RET
121 ;----------------------------------------------------
122 ;向IIC总线发送一个字节数据
123 ;入口参数:A---待发送数据存放在A中
124 ;----------------------------------------------------
A51 MACRO ASSEMBLER 24C02_ASM 03/03/2008 13:35:36 PAGE 3
00AE 125 SENDBYTE:
00AE 7F08 126 MOV R7,#08
00B0 127 S_BYTE:
00B0 33 128 RLC A
00B1 92B5 129 MOV SDA,C
00B3 D2B4 130 SETB SCL
00B5 00 131 NOP
00B6 00 132 NOP
00B7 00 133 NOP
00B8 00 134 NOP
00B9 C2B4 135 CLR SCL
00BB DFF3 136 DJNZ R7,S_BYTE ;8位发送完毕?
00BD 22 137 RET
138 ;-----------------------------------------------------
139 ;等待应答信号
140 ;等待从机返回一个响应信号
141 ;-----------------------------------------------------
00BE 142 WAITACK:
00BE C2B4 143 CLR SCL
00C0 D2B5 144 SETB SDA ;释放SDA信号线
00C2 00 145 NOP
00C3 00 146 NOP
00C4 D2B4 147 SETB SCL
00C6 00 148 NOP
00C7 00 149 NOP
00C8 00 150 NOP
00C9 A2B5 151 MOV C,SDA
00CB 40F1 152 JC WAITACK ;SDA为低电平,返回了响应信号
00CD C2B5 153 CLR SDA
00CF C2B4 154 CLR SCL
00D1 22 155 RET
156 ;----------------------------------------------------
157 ;启动信号子程序
158 ;----------------------------------------------------
00D2 159 START:
00D2 D2B5 160 SETB SDA
00D4 D2B4 161 SETB SCL
00D6 00 162 NOP
00D7 C2B5 163 CLR SDA
00D9 00 164 NOP
00DA 00 165 NOP
00DB 00 166 NOP
00DC 00 167 NOP
00DD C2B4 168 CLR SCL
00DF 22 169 RET
170 ;----------------------------------------------------
171 ;停止信号子程序
172 ;----------------------------------------------------
00E0 173 STOP:
00E0 C2B5 174 CLR SDA
00E2 00 175 NOP
00E3 D2B4 176 SETB SCL
00E5 00 177 NOP
00E6 00 178 NOP
00E7 00 179 NOP
00E8 00 180 NOP
00E9 D2B5 181 SETB SDA
00EB 00 182 NOP
00EC 00 183 NOP
00ED C2B4 184 CLR SCL
00EF C2B5 185 CLR SDA
00F1 22 186 RET
187 ;----------------------------------------------------
188 ;延时5MS子程序
189 ;输入参数:R4---R4*5MS
190 ;输出参数: 无
A51 MACRO ASSEMBLER 24C02_ASM 03/03/2008 13:35:36 PAGE 4
191 ;影响资源: R4,R5,R6等
192 ;----------------------------------------------------
00F2 193 DELAY_5MS:
00F2 7E0A 194 MOV R6,#10
00F4 195 DE_LP:
00F4 7DFA 196 MOV R5,#250
00F6 DDFE 197 DJNZ R5,$
00F8 DEFA 198 DJNZ R6,DE_LP
00FA DCF6 199 DJNZ R4,DELAY_5MS
00FC 22 200 RET
201 ;----------------------------------------------------
00FD 202 TAB:
00FD FEFDFBF7 203 DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
0101 EFDFBF7F
0105 BFDFEFF7 204 DB 0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,0FFH
0109 FBFDFEFF
010D FEFCF8F0 205 DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
0111 E0C08000
0115 80C0E0F0 206 DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
0119 F8FCFEFF
011D FCF9F3E7 207 DB 0FCH,0F9H,0F3H,0E7H,0CFH,09FH,03FH
0121 CF9F3F
0124 9FCFE7F3 208 DB 09FH,0CFH,0E7H,0F3H,0F9H,0FCH,0FFH
0128 F9FCFF
012B E7DBBD7E 209 DB 0E7H,0DBH,0BDH,07EH,0BDH,0DBH,0E7H,0FFH
012F BDDBE7FF
0133 E7C38100 210 DB 0E7H,0C3H,081H,000H,081H,0C3H,0E7H,0FFH
0137 81C3E7FF
013B AA5518FF 211 DB 0AAH,055H,018H,0FFH,0F0H,00FH
013F F00F
0141 00FF00FF 212 DB 000H,0FFH,000H,0FFH
213 ;-----------------------------------------------------
214 END
A51 MACRO ASSEMBLER 24C02_ASM 03/03/2008 13:35:36 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
DELAY_5MS. . . . . C ADDR 00F2H A
DE_LP. . . . . . . C ADDR 00F4H A
MAIN . . . . . . . C ADDR 0030H A
M_LOOP . . . . . . C ADDR 0038H A
P0 . . . . . . . . D ADDR 0080H A
P3 . . . . . . . . D ADDR 00B0H A
RCVBYTE. . . . . . C ADDR 0095H A
READ_BYTE. . . . . C ADDR 007DH A
READ_DATA. . . . . C ADDR 004FH A
RE_LOOP. . . . . . C ADDR 0053H A
R_BYTE . . . . . . C ADDR 009AH A
SCL. . . . . . . . B ADDR 00B0H.4 A
SDA. . . . . . . . B ADDR 00B0H.5 A
SENDBYTE . . . . . C ADDR 00AEH A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 00D2H A
STOP . . . . . . . C ADDR 00E0H A
S_BYTE . . . . . . C ADDR 00B0H A
TAB. . . . . . . . C ADDR 00FDH A
WAITACK. . . . . . C ADDR 00BEH A
WRITE_BYTE . . . . C ADDR 0063H A
WRITE_DATA . . . . C ADDR 003CH A
WR_LOOP. . . . . . C ADDR 0043H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -