📄 serial-eeprom-example.lst
字号:
278: 0212 54 F0 anl a, #11110000b
279: 0214 4A orl a, r2
280: 0215 FA mov r2, a
281: 0216 EB mov a, r3
282: 0217 C4 swap a
283: 0218 54 0F anl a, #00001111b
284: 021A FB mov r3, a
285: 021B 22 ret
286:
287: 021C asc2hex: ;carry set if invalid input
288: 021C C3 clr c
289: 021D C0 F0 push b
290: 021F 94 30 subb a, #'0'
291: 0221 F5 F0 mov b, a
292: 0223 94 0A subb a, #10
293: 0225 40 06 jc a2h1
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 7
Line I Addr Code Source
294: 0227 E5 F0 mov a, b
295: 0229 94 07 subb a, #7
296: 022B F5 F0 mov b, a
297: 022D E5 F0 a2h1: mov a, b
298: 022F C3 clr c
299: 0230 54 F0 anl a, #11110000b ;just in case
300: 0232 60 01 jz a2h2
301: 0234 D3 setb c
302: 0235 E5 F0 a2h2: mov a, b
303: 0237 D0 F0 pop b
304: 0239 22 ret
305:
306: ;get 2 digit hex number from serial port
307: ; c = set if ESC pressed, clear otherwise
308: ; psw.5 = set if return w/ no input, clear otherwise
309: 023A ghex:
310: 023A C2 D5 ghex8: clr psw.5
311: 023C ghex8c:
312: 023C 31 57 acall cin ;get first digit
313: 023E 51 7E acall upper
314: 0240 B4 1B 03 cjne a, #27, ghex8f
315: 0243 D3 ghex8d: setb c
316: 0244 E4 clr a
317: 0245 22 ret
318: 0246 B4 0D 05 ghex8f: cjne a, #13, ghex8h
319: 0249 D2 D5 setb psw.5
320: 024B C3 clr c
321: 024C E4 clr a
322: 024D 22 ret
323: 024E FA ghex8h: mov r2, a
324: 024F 51 1C acall asc2hex
325: 0251 40 E9 jc ghex8c
326: 0253 CA xch a, r2 ;r2 will hold hex value of 1st digit
327: 0254 31 5F acall cout
328: 0256 ghex8j:
329: 0256 31 57 acall cin ;get second digit
330: 0258 51 7E acall upper
331: 025A B4 1B 02 cjne a, #27, ghex8k
332: 025D 80 E4 sjmp ghex8d
333: 025F B4 0D 03 ghex8k: cjne a, #13, ghex8m
334: 0262 EA mov a, r2
335: 0263 C3 clr c
336: 0264 22 ret
337: 0265 B4 08 04 ghex8m: cjne a, #8, ghex8p
338: 0268 31 5F ghex8n: acall cout
339: 026A 80 D0 sjmp ghex8c
340: 026C B4 15 02 ghex8p: cjne a, #21, ghex8q
341: 026F 80 F7 sjmp ghex8n
342: 0271 FB ghex8q: mov r3, a
343: 0272 51 1C acall asc2hex
344: 0274 40 E0 jc ghex8j
345: 0276 CB xch a, r3
346: 0277 31 5F acall cout
347: 0279 EA mov a, r2
348: 027A C4 swap a
349: 027B 4B orl a, r3
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 8
Line I Addr Code Source
350: 027C C3 clr c
351: 027D 22 ret
352:
353: 027E upper: ;converts the ascii code in Acc to uppercase, if it is lowercase
354: 027E C0 E0 push acc
355: 0280 C3 clr c
356: 0281 94 61 subb a, #97
357: 0283 40 09 jc upper2 ;is it a lowercase character
358: 0285 94 1A subb a, #26
359: 0287 50 05 jnc upper2
360: 0289 D0 E0 pop acc
361: 028B 24 E0 add a, #224 ;convert to uppercase
362: 028D 22 ret
363: 028E D0 E0 upper2: pop acc ;don't change anything
364: 0290 22 ret
365:
366:
367: 0291 poweron:
368: 0291 75 81 30 MOV SP, #stack
369: 0294 C2 D3 clr psw.3
370: 0296 C2 D4 clr psw.4
371: 0298 75 8D FD mov th1, #baud_const
372: 029B 43 87 80 orl PCON,#10000000b ; set double baud rate
373: 029E 75 89 21 MOV TMOD,#00100001b ; T0=16 bit, T1=8 bit auto reload
374: ; both are timers, software control
375: 02A1 75 98 52 MOV SCON,#01010010b ; Set Serial for mode 1 &
376: ; Enable reception, ti=1, ri=0
377: 02A4 43 88 55 ORL TCON,#01010101b ; Start both timers, both int are
378: ; falling edge trigger
379: 02A7 90 02 AE mov dptr, #welcome
380: 02AA 31 9B acall pstr
381: 02AC 01 0C ajmp main
382:
383: 02AE 53 65 72 69 welcome: db "Serial EEPROM tester",13,10,13,10,0
02B2 61 6C 20 45
02B6 45 50 52 4F
02BA 4D 20 74 65
02BE 73 74 65 72
02C2 0D 0A 0D 0A
02C6 00
384:
385:
386: ;********************************************************
387: ; and here's where all the dirty work is done
388: ;********************************************************
389:
390:
391: 02C7 read: ;r0 is word address to read, data is returned in
392: ;r2 (lsb) and r3 (msb)
393:
394: 02C7 C2 95 clr pre
395: 02C9 D2 90 setb cs
396: 02CB 00 nop
397:
398: 02CC C2 91 clr sk
399: 02CE D2 92 setb di ;the start bit
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 9
Line I Addr Code Source
400: 02D0 D2 91 setb sk
401: 02D2 C2 91 clr sk
402: 02D4 00 nop
403: 02D5 D2 91 setb sk ;another '1'
404: 02D7 C2 91 clr sk
405: 02D9 C2 92 clr di ;and a '0'
406: 02DB D2 91 setb sk
407:
408: 02DD 7C 06 mov r4, #6
409: 02DF E8 mov a, r0
410: 02E0 23 rl a
411: 02E1 23 rl a
412: 02E2 33 read2: rlc a
413: 02E3 C2 91 clr sk
414: 02E5 92 92 mov di, c ;and do each address bit
415: 02E7 D2 91 setb sk
416: 02E9 DC F7 djnz r4, read2
417: 02EB C2 92 clr di
418:
419: 02ED 7C 08 mov r4, #8
420: 02EF E4 clr a
421: 02F0 C2 91 read3: clr sk
422: 02F2 00 nop
423: 02F3 D2 91 setb sk
424: 02F5 A2 93 mov c, do
425: 02F7 33 rlc a
426: 02F8 DC F6 djnz r4, read3
427: 02FA FB mov r3, a
428: 02FB 7C 08 mov r4, #8
429: 02FD E4 clr a
430: 02FE C2 91 read4: clr sk
431: 0300 D2 91 setb sk
432: 0302 A2 93 mov c, do
433: 0304 33 rlc a
434: 0305 DC F7 djnz r4, read4
435: 0307 FA mov r2, a
436: 0308 C2 90 clr cs
437: 030A C2 92 clr di
438: 030C 22 ret
439:
440: ;********************************************************
441:
442: 030D write: ;r0 is word address to write, r2 (lsb) and r3 (msb)
443: 030D C2 95 clr pre
444: 030F D2 94 setb pe
445: 0311 D2 90 setb cs
446: 0313 00 nop
447: 0314 C2 91 clr sk
448: 0316 D2 92 setb di ;the start bit
449: 0318 D2 91 setb sk
450: 031A C2 91 clr sk
451: 031C C2 92 clr di ;a '0'
452: 031E D2 91 setb sk
453: 0320 C2 91 clr sk
454: 0322 D2 92 setb di ;a '1'
455: 0324 D2 91 setb sk
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 10
Line I Addr Code Source
456:
457: 0326 7C 06 mov r4, #6
458: 0328 E8 mov a, r0
459: 0329 23 rl a
460: 032A 23 rl a
461: 032B 33 write2: rlc a
462: 032C C2 91 clr sk
463: 032E 92 92 mov di, c ;and do each address bit
464: 0330 D2 91 setb sk
465: 0332 DC F7 djnz r4, write2
466:
467: 0334 EB mov a, r3
468: 0335 7C 08 mov r4, #8
469: 0337 C2 91 write3: clr sk
470: 0339 33 rlc a
471: 033A 92 92 mov di, c
472: 033C D2 91 setb sk
473: 033E DC F7 djnz r4, write3
474: 0340 EA mov a, r2
475: 0341 7C 08 mov r4, #8
476: 0343 C2 91 write4: clr sk
477: 0345 33 rlc a
478: 0346 92 92 mov di, c
479: 0348 D2 91 setb sk
480: 034A DC F7 djnz r4, write4
481: 034C C2 92 clr di
482: 034E C2 90 clr cs
483: 0350 00 nop
484: 0351 D2 90 setb cs
485: 0353 00 nop
486: 0354 00 nop
487: 0355 A2 93 write5: mov c, do
488: 0357 50 FC jnc write5
489: 0359 00 nop
490: 035A C2 90 clr cs
491: 035C 22 ret
492:
493: ;********************************************************
494:
495: 035D pren: ;enable the protection register (for next cycle)
496: 035D D2 95 setb pre
497: 035F D2 94 setb pe
498: 0361 D2 90 setb cs
499: 0363 00 nop
500: 0364 C2 91 clr sk
501: 0366 D2 92 setb di ;the start bit
502: 0368 D2 91 setb sk
503: 036A C2 91 clr sk
504: 036C C2 92 clr di ;a '0'
505: 036E D2 91 setb sk
506: 0370 C2 91 clr sk
507: 0372 C2 92 clr di ;a '0'
508: 0374 D2 91 setb sk
509: 0376 C2 91 clr sk
510: 0378 D2 92 setb di ;a '1'
511: 037A D2 91 setb sk
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 11
Line I Addr Code Source
512: 037C C2 91 clr sk
513: 037E D2 92 setb di ;a '1'
514: 0380 D2 91 setb sk
515: 0382 C2 91 clr sk
516: 0384 C2 92 clr di ;a '0'
517: 0386 D2 91 setb sk
518: 0388 C2 91 clr sk
519: 038A C2 92 clr di ;a '0'
520: 038C D2 91 setb sk
521: 038E C2 91 clr sk
522: 0390 C2 92 clr di ;a '0'
523: 0392 D2 91 setb sk
524: 0394 C2 91 clr sk
525: 0396 C2 92 clr di ;a '0'
526: 0398 D2 91 setb sk
527: 039A C2 90 clr cs
528: 039C C2 95 clr pre
529: 039E 22 ret
530:
531: ;********************************************************
532:
533: 039F prclear:
534: 039F D2 95 setb pre
535: 03A1 D2 94 setb pe
536: 03A3 D2 90 setb cs
537: 03A5 00 nop
538: 03A6 C2 91 clr sk
539: 03A8 D2 92 setb di ;the start bit
540: 03AA D2 91 setb sk
541: 03AC C2 91 clr sk
542: 03AE D2 92 setb di ;a '1'
543: 03B0 D2 91 setb sk
544: 03B2 C2 91 clr sk
545: 03B4 D2 92 setb di ;a '1'
546: 03B6 D2 91 setb sk
547: 03B8 C2 91 clr sk
548: 03BA D2 92 setb di ;a '1'
549: 03BC D2 91 setb sk
550: 03BE C2 91 clr sk
551: 03C0 D2 92 setb di ;a '1'
552: 03C2 D2 91 setb sk
553: 03C4 C2 91 clr sk
554: 03C6 D2 92 setb di ;a '1'
555: 03C8 D2 91 setb sk
556: 03CA C2 91 clr sk
557: 03CC D2 92 setb di ;a '1'
558: 03CE D2 91 setb sk
559: 03D0 C2 91 clr sk
560: 03D2 D2 92 setb di ;a '1'
561: 03D4 D2 91 setb sk
562: 03D6 C2 91 clr sk
563: 03D8 D2 92 setb di ;a '1'
564: 03DA D2 91 setb sk
565: 03DC C2 92 clr di
566: 03DE C2 90 clr cs
567: 03E0 C2 95 clr pre
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 12
Line I Addr Code Source
568: 03E2 00 nop
569: 03E3 D2 90 setb cs
570: 03E5 00 nop
571: 03E6 00 nop
572: 03E7 A2 93 prclr5: mov c, do
573: 03E9 50 FC jnc prclr5
574: 03EB 00 nop
575: 03EC C2 90 clr cs
576: 03EE 22 ret
577:
578: ;********************************************************
579:
580: 03EF prds: ;permantly fix protect register!!!
581: 03EF D2 95 setb pre
582: 03F1 D2 94 setb pe
583: 03F3 D2 90 setb cs
584: 03F5 00 nop
585: 03F6 C2 91 clr sk
586: 03F8 D2 92 setb di ;the start bit
587: 03FA D2 91 setb sk
588: 03FC C2 91 clr sk
589: 03FE C2 92 clr di ;a '0'
590: 0400 D2 91 setb sk
591: 0402 C2 91 clr sk
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -