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

📄 8733_i2c-master.dt

📁 Elan eKTP8733N单片机开发程序
💻 DT
字号:
;****************************************************************;
; TILTE:       eKTP8733 I2C TRANSMISSION DEMO CODE               ;
; FUNCTION:    eKTP8733 I2C FUNCTION                             ;
; COMPANY:     ELAN MICROELECTRONICS (SZ) LTD.                   ;
;****************************************************************;
; 该范例用eKTP8733读写24C01,可读写单字节或多字节数据. Fc: IRC 4MHz
;-----------------------------------------------------------------
; bank 0
R0          ==      0x00    ; Indirect Address Register
PC          ==      0x02    ; Program Counter & Stack
STATUS      ==      0x03    ;
    C       ==      0       ; Carry flag
    Z       ==      2       ; Zero flag
R4          ==      0x04    ; RAM Select Register
PORT5       ==      0x05    ; PORT5 I/O register
PORT6       ==      0x06    ; PORT6 I/O register
PORT7       ==      0x07    ; PORT7 I/O register
PORT8       ==      0x08    ; PORT8 I/O register
B0RE        ==      0x0E
ISR1        ==      0x0E    ; Interrupt status register 1
    TCIF    ==      4       ; TCC interrupt flag
B0RF        ==      0x0F
ISR2        ==      0x0F    ; Interrupt status register 2
    I2CRIF  ==      7
    I2CTIF  ==      6
; bank 1
IOC5        ==      0x05    ; PORT5 I/O control register
IOC6        ==      0x06    ; PORT6 I/O control register
IOC7        ==      0x07    ; PORT7 I/O control register
IOC8        ==      0x08    ; PORT8 I/O control register
WDTCR       ==      0x0C    ; WDT timer control register
B1RE        ==      0x0E
IMR1        ==      0x0E    ; Interrupt mask register 1
B1RF        ==      0x0F
IMR2        ==      0x0F    ; Interrupt mask register 2
; bank 2
TCCCR       ==      0x05    ; Time Clock/Counter control register
; bank 3
TCC         ==      0x05    ; Time Clock/Counter
COBS1       ==      0x06    ; Code option: Type&IRC calibration register
COBS2       ==      0x07    ; Code option: LVR, Noise, IRC, RCOUT regist
I2CCR2      ==      0x0B    ; I2C status and control register 2
I2CCR1      ==      0x0C    ; I2C status and control register 1
    Strobe  ==      7
    Pend    ==      7
    IMR     ==      6       ; I2C master/slave mode select bit
    ISS     ==      5       ; I2C Fast/Standard mode select bit
    STOP    ==      4       ;
    SAR_EMPTY   ==  3
    ACK     ==      2
    FULL    ==      1
    EMPTY   ==      0
I2CSA       ==      0x0D    ; I2C slave address register
I2CDA       ==      0x0E    ; I2C Device address register
I2CDB       ==      0x0F    ; I2C data buffer
;
BUFFER      ==      0x1F    ; Data buffer
;-----------------------------------------------------------------
        ORG     0x00
        JMP     Main
        ORG     0X12            ; I2C interrupt vector
        LJMP    I2C_INT         ; To I2C interrupt program
        ORG     0x50
;-----------------------------------------------------------------
I2C_INT:
        BANK    0
        JBS     ISR2, I2CRIF
        JMP     NOT_RINT
        BC      ISR2, I2CRIF
        ; User code
        ; ...
NOT_RINT:
        JBS     ISR2, I2CTIF
        JMP     I2C_INT_RET
        BC      ISR2, I2CTIF
        ; User code
        ; ...
I2C_INT_RET:
        RETI
;-----------------------------------------------------------------
Main:
        NOP
        BANK    0
        CLR     PORT5           ; PORT5 output logic "0"
        CLR     PORT6           ; PORT6 output logic "0"
        CLR     PORT7           ; PORT7 output logic "0"
        CLR     PORT8           ; PORT8 output logic "0"
        BANK    1
        CLR     IOC5            ; Set port5 as output pin
        CLR     IOC6            ; Set port6 as output pin
        CLR     IOC7            ; Set port7 as output pin
        CLR     IOC8            ; Set port8 as output pin
        MOV     A, @0x00
        MOV     WDTCR, A        ; Disable WDT
        MOV     A, @0x10
        MOV     IMR1, A         ; Enable TCC interrupt
        MOV     A, @0x00
        MOV     IMR2, A         ; Disable I2C interrupt
        BANK    2
        MOV     A, @0x0D
        MOV     TCCCR, A        ; TCC rate --> 1:256
        BANK    3
        MOV     A, @0x3F        ; Select ekt8733, irc: 1*F
        MOV     COBS1, A
        MOV     A, @0x30        ; Select IRC 4MHz
        MOV     COBS2, A
        CLR     TCC
        BANK    3
        MOV     A, @00110001b   ; I2C clock source select Fm and Enable I2C
        MOV     I2CCR2, A
        BS      I2CCR1, IMR     ; Select master mode
        Bc      I2CCR1, ISS     ; Select standard mode
;-----------------------------------------------------------------
MainStart:
        ;---------------------------------------------------------
        ; Write 8bytes data to 0x00~0x0F address of 24C01
        ;---------------------------------------------------------
        MOV     A, @0x08
        MOV     BUFFER, A
;
        BANK    3
        MOV     A, @10100000b       ; Write command word (Write data)
        MOV     I2CSA, A
        BS      I2CCR1, Strobe
        JBS     I2CCR1, SAR_EMPTY
        JMP     $-1
;
        MOV     A, @0x00            ; Write first address of 24C01
        MOV     I2CDB, A
        BS      I2CCR1, Strobe
        JBS     I2CCR1, EMPTY
        JMP     $-1
;
WriteDataLp:
        MOV     A, BUFFER           ; Write data
        CALL    Data_Tbl
        MOV     I2CDB, A
        BS      I2CCR1, Strobe
        MOV     A, BUFFER
        XOR     A, @0x01
        JBC     status, Z
        BS      I2CCR1, STOP
        JBS     I2CCR1, EMPTY
        JMP     $-1
        DJZ     BUFFER
        JMP     WriteDataLp
        ;
        BANK    0
        CLR     TCC
        JBS     ISR1, TCIF          ; Wait for about 4.096ms to write data
        JMP     $-1
        CLR     ISR1                ; Clear TCC flag
        ;---------------------------------------------------------
        ; Read 8 byte data from 24C01
        ;---------------------------------------------------------
        BANK    3
        MOV     A, @10100000b       ; Write command word (Write data)
        MOV     I2CSA, A
        BS      I2CCR1, Strobe
        JBS     I2CCR1, SAR_EMPTY
        JMP     $-1
;
        MOV     A, @0x00            ; Write first address of 24C01
        MOV     I2CDB, A
        BS      I2CCR1, Strobe
        JBS     I2CCR1, EMPTY
        JMP     $-1
;
        MOV     A, @8
        MOV     BUFFER, A
        MOV     A, @0x10
        MOV     R4, A
        ;
        MOV     A, @10100001b       ; Write command word (Read data)
        MOV     I2CSA, A
        BS      I2CCR1, Strobe
        JBS     I2CCR1, SAR_EMPTY
        JMP     $-1
;
ReadDataLp:
        BS      I2CCR1, Strobe
        MOV     A, BUFFER
        XOR     A, @0x01
        JBC     status, Z
        BS      I2CCR1, STOP
        NOP
        JBS     I2CCR1, FULL
        JMP     $-1
        MOV     A, I2CDB
        MOV     R0, A
        INC     R4
        DJZ     BUFFER
        JMP     ReadDataLp
        BANK    0
        NOP
        NOP
        NOP
        JMP     $
        ;---------------------------------------------------------
Data_Tbl:
        ADD     PC, A
        RET                 ; 0
        RETL    0x07        ; 1
        RETL    0x06        ; 2
        RETL    0x05        ; 3
        RETL    0x04        ; 4
        RETL    0x03        ; 5
        RETL    0x02        ; 6
        RETL    0x01        ; 7
        RETL    0x00        ; 8
        END
;-----------------------------------------------------------------

⌨️ 快捷键说明

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