📄 eeprom.ls1
字号:
440 ; SOURCE LINE # 40
441 ; uchar temp=0;
442 ; SOURCE LINE # 41
443 ;---- Variable 'temp?041' assigned to Register 'R6' ----
0000 E4 444 CLR A
445 ; uchar i=0;
446 ; SOURCE LINE # 42
447 ;---- Variable 'i?042' assigned to Register 'R5' ----
0001 FD 448 MOV R5,A
449 ; temp=spi_write_data;
450 ; SOURCE LINE # 43
A51 MACRO ASSEMBLER EEPROM 08/03/2009 16:57:28 PAGE 8
0002 AE07 451 MOV R6,AR7
452 ;
453 ; for(i=0;i<8;i++) //send 8 bits
454 ; SOURCE LINE # 45
0004 455 ?C0001:
456 ; {
457 ; SOURCE LINE # 46
458 ; X_SCK=0;
459 ; SOURCE LINE # 47
0004 C280 460 CLR X_SCK
461 ;
462 ; if(temp & 0x80)//MSB first
463 ; SOURCE LINE # 49
0006 EE 464 MOV A,R6
0007 30E704 465 JNB ACC.7,?C0004
466 ; X_SI=1;
467 ; SOURCE LINE # 50
000A D286 468 SETB X_SI
000C 8002 469 SJMP ?C0005
000E 470 ?C0004:
471 ; else
472 ; X_SI=0;
473 ; SOURCE LINE # 52
000E C286 474 CLR X_SI
0010 475 ?C0005:
476 ;
477 ; temp=temp<<1;
478 ; SOURCE LINE # 54
0010 EE 479 MOV A,R6
0011 25E0 480 ADD A,ACC
0013 FE 481 MOV R6,A
482 ;
483 ; X_SCK=1;
484 ; SOURCE LINE # 56
0014 D280 485 SETB X_SCK
486 ; }
487 ; SOURCE LINE # 57
0016 0D 488 INC R5
0017 ED 489 MOV A,R5
0018 B408E9 490 CJNE A,#08H,?C0001
491 ;
492 ;
493 ; }
494 ; SOURCE LINE # 60
001B 495 ?C0006:
001B 22 496 RET
497 ; END OF _SPI_WriteByte
498
499 ;
500 ;
501 ;
502 ; /*-------------------------------------------------------
503 ; SPI_ReadByte()
504 ;
505 ; Function: Read a byte of data from the device using
506 ; SPI interface.
507 ; Input: None.
508 ; Output: The data(one byte) been read,as a return value.
509 ; NOTE: Using SPI Mode 3/0
510 ; --------------------------------------------------------*/
511 ; uchar SPI_ReadByte(void)
512
---- 513 RSEG ?PR?SPI_ReadByte?EEPROM
0000 514 SPI_ReadByte:
515 USING 0
516 ; SOURCE LINE # 73
A51 MACRO ASSEMBLER EEPROM 08/03/2009 16:57:28 PAGE 9
517 ; {
518 ; SOURCE LINE # 74
519 ; uchar temp=0;
520 ; SOURCE LINE # 75
521 ;---- Variable 'temp?143' assigned to Register 'R7' ----
0000 E4 522 CLR A
0001 FF 523 MOV R7,A
524 ; uchar i=0;
525 ; SOURCE LINE # 76
526 ;---- Variable 'i?144' assigned to Register 'R6' ----
0002 FE 527 MOV R6,A
528 ; bit bit_in;
529 ;
530 ; temp=0x00;//initialize the data output
531 ; SOURCE LINE # 79
532 ;
533 ; for(i=0;i<8;i++)
534 ; SOURCE LINE # 81
0003 535 ?C0007:
536 ; {
537 ; SOURCE LINE # 82
538 ; X_SCK=1;//Data is output on the SO line by the falling edge of SCK.
539 ; SOURCE LINE # 83
0003 D280 540 SETB X_SCK
541 ; temp=temp << 1;
542 ; SOURCE LINE # 84
0005 EF 543 MOV A,R7
0006 25E0 544 ADD A,ACC
0008 FF 545 MOV R7,A
546 ; X_SCK=0;
547 ; SOURCE LINE # 85
0009 C280 548 CLR X_SCK
549 ; bit_in=X_SO;
550 ; SOURCE LINE # 86
000B A281 551 MOV C,X_SO
000D 9200 F 552 MOV bit_in?145,C
553 ; if(bit_in) temp=temp | 0x01;
554 ; SOURCE LINE # 87
000F 300003 F 555 JNB bit_in?145,?C0009
0012 4401 556 ORL A,#01H
0014 FF 557 MOV R7,A
558 ; }
559 ; SOURCE LINE # 88
0015 560 ?C0009:
0015 0E 561 INC R6
0016 EE 562 MOV A,R6
0017 B408E9 563 CJNE A,#08H,?C0007
001A 564 ?C0008:
565 ; return (temp);
566 ; SOURCE LINE # 89
567 ; }
568 ; SOURCE LINE # 90
001A 569 ?C0011:
001A 22 570 RET
571 ; END OF SPI_ReadByte
572
573 ;
574 ;
575 ;
576 ; /*---------------------------------------------------------
577 ; AT25_GetStatusReg()
578 ;
579 ; Function: Read the Status Register of the AT25XXXA
580 ; Input: None.
581 ; Output: Content of the status register,as a return value.
582 ; -----------------------------------------------------------*/
A51 MACRO ASSEMBLER EEPROM 08/03/2009 16:57:28 PAGE 10
583 ; uchar AT25_GetStatusReg(void)
584
---- 585 RSEG ?PR?AT25_GetStatusReg?EEPROM
0000 586 AT25_GetStatusReg:
587 USING 0
588 ; SOURCE LINE # 101
589 ; {
590 ; SOURCE LINE # 102
591 ; uchar temp;
592 ;
593 ; X_CS=0;
594 ; SOURCE LINE # 105
0000 C291 595 CLR X_CS
596 ;
597 ; SPI_WriteByte(RDSR);
598 ; SOURCE LINE # 107
0002 7F05 599 MOV R7,#05H
0004 120000 F 600 LCALL _SPI_WriteByte
601 ; temp=SPI_ReadByte();
602 ; SOURCE LINE # 108
0007 120000 F 603 LCALL SPI_ReadByte
604 ;---- Variable 'temp?246' assigned to Register 'R7' ----
605 ;
606 ; X_CS=1;
607 ; SOURCE LINE # 110
000A D291 608 SETB X_CS
609 ; return temp;
610 ; SOURCE LINE # 111
611 ; }
612 ; SOURCE LINE # 112
000C 613 ?C0012:
000C 22 614 RET
615 ; END OF AT25_GetStatusReg
616
617 ;
618 ;
619 ; /*---------------------------------------------------------
620 ; AT25_IsReady()
621 ;
622 ; Function: Return 0 if AT25XXXA is busy and 1 if ready.
623 ; -----------------------------------------------------------*/
624 ; bit AT25_IsReady(void)
625
---- 626 RSEG ?PR?AT25_IsReady?EEPROM
0000 627 AT25_IsReady:
628 USING 0
629 ; SOURCE LINE # 120
630 ; {
631 ; SOURCE LINE # 121
632 ;
633 ; if(0x01 & AT25_GetStatusReg()) return 0;
634 ; SOURCE LINE # 123
0000 120000 F 635 LCALL AT25_GetStatusReg
0003 EF 636 MOV A,R7
0004 30E002 637 JNB ACC.0,?C0013
0007 C3 638 CLR C
0008 22 639 RET
0009 640 ?C0013:
641 ; else return 1;
642 ; SOURCE LINE # 124
0009 D3 643 SETB C
644 ; }
645 ; SOURCE LINE # 125
000A 646 ?C0014:
000A 22 647 RET
648 ; END OF AT25_IsReady
A51 MACRO ASSEMBLER EEPROM 08/03/2009 16:57:28 PAGE 11
649
650 ;
651 ;
652 ;
653 ; /*---------------------------------------------------------
654 ; AT25_SetStatusReg()
655 ;
656 ; Function: Set the Status Register of the AT25XXXA
657 ; Input: The Byte of the status register. NOTE: Only
658 ; bit7(WPEN),bit3(BP1) and bit2(BP0) can be changed,
659 ; so this byte should in the form of: x000 xx00
660 ; Output: None.
661 ; -----------------------------------------------------------*/
662 ; void AT25_SetStatusReg(uchar status_data)
663
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -