⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c01.asm

📁 给香港公司做的出口欧洲的电子称项目全部源代码 CPU:KS57C2308 RANGE:(0 -150KG)/d = 0.1kg
💻 ASM
字号:
;MODULE:   24C01.ASM                   ;
;FUNCTION: READ/ WRITE DATA FROM/TO 24C01
;**************************************;
;USER EEPROM MAP:                      ;
;   USE TO SAVE USER INFO SUCH AS AGE/SEX AND HEIGHT ( TOTAL 2 BYTES )
; USER_NUM    ADDRESS                  ;
;    1       10H ~ 17H                 ;
;    2       18H ~ 1FH                 ;
;    3       20H ~ 27H                 ;
;    4       28H ~ 2FH                 ;
;    5       30H ~ 37H                 ;
;    6       38H ~ 3FH                 ;
;    7       40H ~ 47H                 ;
;    8       48H ~ 4FH                 ;
;    9       50H ~ 57H                 ;
;    10      58H ~ 5FH                 ;
;-----------------------               ;
;00H ~ 0FH : USE TO SAVE LAST_WEIGHT,CNT10 AND CNT21 ( TOTAL 6 BYTES! )
;-----------------------               ;
DEVICE_WR:       EQU   0A0H            ; USE FOR WRITE 24C01
DEVICE_RD:       EQU   0A1H            ; USE FOR READ  24C01
;SCL:            BIT   P3.2            ; 24C01 PIN6
;SDA:            BIT   P3.3            ; 24C01 PIN5
;                                      ;
;**************************************;
SET_SDA_OUTPUT:  MACRO                 ;
        SMB      15                    ;
        LD       EA,#7FH               ; 0111 1111
        LD       PMG1,EA               ; SDA IS OUTPUT PIN
        ENDM                           ;
                                       ;
SET_SDA_INPUT:   MACRO                 ;
        SMB      15                    ;
        LD       EA,#77H               ; 0111 0111
        LD       PMG1,EA               ; SDA IS INPUT PIN
        ENDM                           ;
;**************************************;

;****************************************************************************;
;                                 WRITE 24C01                                ;
;****************************************************************************;
;FUNCTION:  WRITE BYTES TO 24C01       ;
;R:[TRX_BUF] [HL] [WX] [EA]            ;
;INPUT: [EEP_NUM],[CPU_RAM_ADDR] [EEP_RAM_ADDR]
;HL: BUFFER ADDRESS POINT              ;
;WX: BYTE CNT                          ;
;                                      ;
WRITE_EEP:                             ;
;START I2C                             ;
        CALL     START_I2C             ;
;TRANSMIT DEVICE ADDRESS               ;
        LD       EA,#DEVICE_WR         ;
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ;
;TRANSMIT WORD ADDRESS                 ;
        LD       EA,EEP_RAM_ADDR       ;
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ;
;BEGIN TO WRITE DATA                   ;
        LD       A,EEP_NUM             ;
        LD       W,A                   ;
        LD       EA,CPU_RAM_ADDR       ;
        LD       HL,EA                 ;
WRITE_EEP_01:                          ;
        LD       EA,@HL                ;
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ;
        INCS     HL                    ;
        INCS     HL                    ; HL + = 2
        NOP                            ;
        DECS     W                     ; EEP_NUM --
        JPS      WRITE_EEP_01          ;
        CALL     STOP_I2C              ;
        LD       EA,#02H               ;
        JP       DELAY_3MS             ;
;**************************************;

;****************************************************************************;
;                                 READ  24C01                                ;
;****************************************************************************;
;FUNCTION: READ BYTES FROM 24C01       ;
;R:[TRX_BUF][HL][WX][EA]               ;
;INPUT:[EEP_NUM],[CPU_RAM_ADDR] [EEP_RAM_ADDR]
; HL: BUFFER ADDRESS POINT             ;
; WX: BYTE CNT                         ;
;**USE RANDOM READ MODE TO READ 24C01 *;
READ_EEP:                              ;
;START I2C                             ;
        CALL     START_I2C             ;
;WRITE DEVICE ADDRESS                  ;
        LD       EA,#DEVICE_WR         ;
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ; 0A0H ---> EEP
;WRITE WORD ADDRESS                    ;
        LD       EA,EEP_RAM_ADDR       ;
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ;
;RESTART I2C AGAIN                     ;
        CALL     START_I2C             ;
;WRITE DEVICE ADDRESS                  ;
        LD       EA,#DEVICE_RD         ; 0A1 ---> EEP
        LD       TRX_BUF,EA            ;
        CALL     TX_ABYTE              ;
;BEGIN TO READ DATA                    ;
        LD       EA,CPU_RAM_ADDR       ;
        LD       HL,EA                 ;
        LD       A,EEP_NUM             ;
        LD       W,A                   ;
READ_EEP_01:                           ;
        CALL     RX_ABYTE              ;
        LD       EA,TRX_BUF            ;
        LD       @HL,EA                ;
        INCS     HL                    ; POINT TO NEXT LOCATION
        INCS     HL                    ; HL + = 2
        NOP                            ;
        DECS     W                     ; EEP_NUM --, READ OVER ?
        JPS      READ_EEP_02           ; NO. SEND ACK SIGNAL
        JPS      READ_EEP_03           ; YES DON'T SEND ACK SIGNAL
READ_EEP_02:                           ;
        CALL     TX_ACK                ; CPU SEND A ACK TO 24C01
        JPS      READ_EEP_01           ;
READ_EEP_03:                           ;
        SET_SDA_OUTPUT                 ; STOP I2C
        NOP                            ;
        NOP                            ;
        NOP                            ;
        BITS     SDA                   ;
        BITR     SCL                   ;
        NOP                            ;
        NOP                            ;
        NOP                            ;
        BITS     SCL                   ;
        CALL     STOP_I2C              ;
        LD       EA,#01H               ;
        JP       DELAY_3MS             ;
;**************************************;

;***************************************************************************;
;                                START_I2C                                  ;
;***************************************************************************;
START_I2C:                ;                        ;
        SET_SDA_OUTPUT    ;                        ;
        NOP               ;  SCL 哪哪哪哪目        ;
        BITS     SDA      ;               

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -