📄 cufirst.lst
字号:
006E 74A1 213 CREAD: MOV A,#RDCMD ;LOAD READ COMMAND
214
0070 1115 215 CALL OUTS ;SEND IT
216
0072 1178 217 CALL IN ;READ DATA
218
0074 F9 219 MOV R1,A ;STORE DATA
220
0075 1161 221 CALL STOP ;SEND STOP CONDITION
222
0077 22 223 RET
224
225
226
227
228 ;**********************************************************************
229
230 ; THIS ROUTINE READS IN A BYTE FROM THE EEPROM
231
232 ; and stores it in the accumulator
233
234 ;**********************************************************************
235
236
237
238
0078 7A08 239 IN: MOV R2,#8 ;LOOP COUNT
240
007A D296 241 SETB SDA1 ;SET DATA BIT HIGH FOR INPUT
242
007C C297 243 INLP: CLR SCL1 ;CLOCK LOW
244
007E 00 245 NOP ;NOTE 1
246
007F 00 247 NOP
248
0080 00 249 NOP
250
0081 00 251 NOP
252
253
254
0082 D297 255 SETB SCL1 ;CLOCK HIGH
256
A51 MACRO ASSEMBLER CUFIRST 05/21/2008 02:07:42 PAGE 5
0084 C3 257 CLR C ;CLEAR CARRY
258
0085 309601 259 JNB SDA1,INL1 ;JUMP IF DATA = 0
260
0088 B3 261 CPL C ;SET CARRY IF DATA = 1
262
0089 33 263 INL1: RLC A ;ROTATE DATA INTO ACCUMULATOR
264
008A DAF0 265 DJNZ R2,INLP ;DECREMENT COUNTER
266
008C C297 267 CLR SCL1 ;CLOCK LOW
268
008E 22 269 RET
270
271
272
273
274 ;*********************************************************************
275
276 ; This routine test for WRITE DONE condition
277
278 ; by testing for an ACK.
279
280 ; This routine can be run as soon as a STOP condition
281
282 ; has been generated after the last data byte has been sent
283
284 ; to the EEPROM. The routine loops until an ACK is received from
285
286 ; the EEPROM. No ACK will be received until the EEPROM is done with
287
288 ; the write operation.
289
290 ;*********************************************************************
291
008F 74A0 292 ACKTST: MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
293
0091 7A08 294 MOV R2,#8 ;LOOP COUNT -- EQUAL TO BIT COUNT
295
0093 C296 296 CLR SDA1 ;START CONDITION -- DATA = 0
297
0095 00 298 NOP ;NOTE 1
299
0096 00 300 NOP
301
0097 00 302 NOP
303
304
305
0098 C297 306 CLR SCL1 ;CLOCK = 0
307
009A 33 308 AKTLP: RLC A ;SHIFT BIT
309
009B 5004 310 JNC AKTLS
311
009D D296 312 SETB SDA1 ;DATA = 1
313
009F 8002 314 JMP AKTL1 ;CONTINUE
315
00A1 C296 316 AKTLS: CLR SDA1 ;DATA = 0
317
00A3 D297 318 AKTL1: SETB SCL1 ;CLOCK HI
319
00A5 00 320 NOP ;NOTE 1
321
00A6 00 322 NOP
A51 MACRO ASSEMBLER CUFIRST 05/21/2008 02:07:42 PAGE 6
323
00A7 00 324 NOP
325
326
327
00A8 C297 328 CLR SCL1 ;CLOCK LOW
329
00AA DAEE 330 DJNZ R2,AKTLP ;DECREMENT COUNTER
331
00AC D296 332 SETB SDA1 ;TURN PIN INTO INPUT
333
00AE 00 334 NOP ;NOTE 1
335
336
337
00AF D297 338 SETB SCL1 ;CLOCK ACK
339
00B1 00 340 NOP ;NOTE 1
341
00B2 00 342 NOP
343
00B3 00 344 NOP
345
346
347
00B4 309602 348 JNB SDA1,EXIT ;EXIT IF ACK (WRITE DONE)
349
00B7 80D6 350 JMP ACKTST ;START OVER
351
00B9 C297 352 EXIT: CLR SCL1 ;CLOCK LOW
353
00BB C296 354 CLR SDA1 ;DATA LOW
355
00BD 00 356 NOP ;NOTE 1
357
00BE 00 358 NOP
359
00BF 00 360 NOP
361
362
363
00C0 D297 364 SETB SCL1 ;CLOCK HIGH
365
00C2 00 366 NOP
367
00C3 00 368 NOP
369
00C4 D296 370 SETB SDA1 ;STOP CONDITION
371
00C6 22 372 RET
373
374
375
00C7 376 DELAY_STOP: ;terminating write process
00C7 758901 377 MOV TMOD,#00000001B
00CA 758C50 378 MOV TH0,#50H
00CD 758A00 379 MOV TL0,#00H
00D0 D28C 380 SETB TR0
00D2 381 SAC:
00D2 308DFD 382 JNB TF0,SAC
00D5 C28C 383 CLR TR0
00D7 C28D 384 CLR TF0
00D9 22 385 RET
386
387 END
A51 MACRO ASSEMBLER CUFIRST 05/21/2008 02:07:42 PAGE 7
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACKTST . . . . . . C ADDR 008FH A
AKTL1. . . . . . . C ADDR 00A3H A
AKTLP. . . . . . . C ADDR 009AH A
AKTLS. . . . . . . C ADDR 00A1H A
BITL . . . . . . . C ADDR 004BH A
BITLS. . . . . . . C ADDR 002CH A
CREAD. . . . . . . C ADDR 006EH A
DELAY_STOP . . . . C ADDR 00C7H A
EXIT . . . . . . . C ADDR 00B9H A
HBADD. . . . . . . N NUMB 007EH A
IN . . . . . . . . C ADDR 0078H A
INL1 . . . . . . . C ADDR 0089H A
INLP . . . . . . . C ADDR 007CH A
MAIN . . . . . . . C ADDR 0003H A
MEMORY . . . . . . N NUMB 007FH A
OTL1 . . . . . . . C ADDR 004DH A
OTLP . . . . . . . C ADDR 0044H A
OTSL1. . . . . . . C ADDR 002EH A
OTSLP. . . . . . . C ADDR 0025H A
OUT. . . . . . . . C ADDR 0042H A
OUTS . . . . . . . C ADDR 0015H A
P1 . . . . . . . . D ADDR 0090H A
RDCMD. . . . . . . N NUMB 00A1H A
SAC. . . . . . . . C ADDR 00D2H A
SCL1 . . . . . . . B ADDR 0090H.7 A
SDA1 . . . . . . . B ADDR 0090H.6 A
STOP . . . . . . . C ADDR 0061H 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
WTCMD. . . . . . . N NUMB 00A0H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -