?? 24c01.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 + -