;***************************** ;* System Const Definition * ;***************************** IIC_SCL_MASK EQU 1000B ;OR WITH PORTC, PULL SCL HIGH IIC_SCL_LOW EQU 0111B ;AND WITH PORTC,PULL SCL LOW
IIC_SDA_MASK EQU 0100B ;OR WITH PORTC, PULL SDA HIGH IIC_SDA_LOW EQU 1011B ;AND WITH PORTC,PULL SDA LOW
IIC_SDA_INPUT EQU 1011B ;AND WITH PCOUT, SET PORT_SDA INPUT IIC_SDA_OUTPUT EQU 0100B ;OR WITH PCOUT, SET PORT_SDA_OUTPUT
;******************************** ;* System Variable Definition * ;********************************
;Used for EE_RDByte Function ;EE_RDAddressL EQU 33H ; ;EE_RDAddressH EQU 34H ; ;EE_RDDataL EQU 35H ; ;EE_RDDataH EQU 36H ; EE_RDByteTMP EQU 37H ; ;EE_RDByteRTN EQU 38H ;
;Used for EE_WRByte Function ;EE_WRAddressL EQU 33H ; ;EE_WRAddressH EQU 34H ; ;EE_WRDataL EQU 35H ; ;EE_WRDataH EQU 36H ; EE_WRByteTMP EQU 37H ; ;EE_WRByteRTN EQU 38H ;
;USED FOR WRITE AND READ BYTE FUNCTION EE_ADDRESSL EQU 33H ; EE_ADDRESSH EQU 34H ; EE_WRCOMMONRTN EQU 38H ;
TMP1 EQU 31H TMP2 EQU 32H
EE_RDByte: ;LDA IE_BAK ;Recover the IE ;STA IE LDA EE_RDAddressL,00H STA EE_ADDRESSL,00H LDA EE_RDAddressH,00H STA EE_ADDRESSH,00H CALL EE_WRCOMMON STA EE_WRCOMMONRTN,00H BNZ EE_RDBYTE_EEROR ;*********************************************** ;GENERATE START ;*********************************************** ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SDA_LOW ANDIM PORTC,IIC_SCL_LOW ;START ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;1 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;1 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ;*********************************************** ;WRITE ADDR:000 ;*********************************************** ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ;*********************************************** ;READ OPCODE BIT:1 ;*********************************************** ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;1 ;*********************************************** ;RECEIVE ACK BIT ;*********************************************** LDI PCOUT, 1001B ORIM PORTC,IIC_SDA_MASK ULL UP ORIM PORTC,IIC_SCL_MASK
;LDI TMP1,IIC_SDA_MASK ;AND PORTC,00H ;BNZ EE_WRCOMMON_EEROR LDA PORTC, 00H BA2 $-1 LDI PCOUT,1001B LDI PORTC,0001B ;*********************************************** ;READ BYTE ;*********************************************** LDI TMP1,04H EE_RDBYTE_H1:
LDA EE_RDDataH,00H ADDM EE_RDDataH,00H ;LEFT SHIFT ORIM PORTC,IIC_SCL_MASK LDI TMP2,IIC_SDA_MASK AND PORTC,00H BNZ EE_RDBYTE_H2 LDI TMP2,00H ADDM EE_RDDataH,00H ;READ 0 JMP EE_RDBYTE_H3 EE_RDBYTE_H2: LDI TMP2,01H ADDM EE_RDDataH,00H ;READ 1 EE_RDBYTE_H3: ANDIM PORTC,IIC_SCL_LOW ORIM PORTC,IIC_SDA_MASK ULL UP SBIM TMP1,01H BNZ EE_RDBYTE_H1 ;DATAH OVER ;LDI PCOUT,1001B ;LDI PORTC,0001B LDI TMP1,04H EE_RDBYTE_L1: LDA EE_RDDataL,00H ADDM EE_RDDataL,00H ORIM PORTC,IIC_SCL_MASK LDI TMP2,IIC_SDA_MASK AND PORTC,00H BNZ EE_RDBYTE_L2 LDI TMP2,00H ADDM EE_RDDataL,00H JMP EE_RDBYTE_L3 EE_RDBYTE_L2: LDI TMP2,01H ADDM EE_RDDataL,00H EE_RDBYTE_L3: ANDIM PORTC,IIC_SCL_LOW ORIM PORTC,IIC_SDA_MASK ULL UP SBIM TMP1,01H BNZ EE_RDBYTE_L1 ;DATAL OVER
;*********************************************** ;NO ACK ;*********************************************** ;ORIM PCOUT,IIC_SDA_OUTPUT LDI PCOUT, 1101B ORIM PORTC,IIC_SDA_MASK ;PULL UP ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW LDI TMP1,00H STA EE_RDByteRTN,00H JMP EE_RDBYTE_EXIT
EE_RDBYTE_EEROR: ANDIM PORTC,IIC_SCL_LOW ORIM PCOUT,IIC_SDA_OUTPUT LDI TMP1,0FH STA EE_WRByteRTN,00H EE_RDBYTE_EXIT: ;*********************************************** ;GENERATE STOP ;*********************************************** ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ORIM PORTC,IIC_SDA_MASK
;LDA IE ;Protect the IE ;STA IE_BAK ;LDA RomBankTMP,00H ;STA ROMBANK JMP I2C_READ_BYTE_OVER ; RTNI
;*********************** Function ****************************** ;** Name: EE_WRByte ** ;** Description:Read one Byte from EEPROM(24C02) ** ;** Input Para: 271H~270H -- EE_WRAddressH,EE_WRAddressL ** ;** 273H~272H -- EE_WRDataH,EE_WRDataL ** ;** Output Para:EE_WRByteRTN -- /0:Success;0:Failed ** ;** Used Var: EE_WRByteTMP -- temp for Operation ** ;** Used Reg: DPH/DPM/DPL,TBR,INX ** ;***************************************************************** EE_WRByte: ;LDA IE_BAK ;Recover the IE ;STA IE LDI IRQ, 00H LDI IE, 00H LDA EE_WRAddressL,00H STA EE_ADDRESSL,00H LDA EE_WRAddressH,00H STA EE_ADDRESSH,00H CALL EE_WRCOMMON STA EE_WRCOMMONRTN,00H BNZ EE_WRBYTE_EEROR ;*********************************************** ;WRITE DATA(8 BITS) ;*********************************************** LDI TMP1,04H EE_WRBYTE_DATAH1: LDA EE_WRDataH,00H ADDM EE_WRDataH,00H BC EE_WRBYTE_DATAH2 ANDIM PORTC,IIC_SDA_LOW ;0 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW JMP EE_WRBYTE_DATAH3 EE_WRBYTE_DATAH2: ORIM PORTC,IIC_SDA_MASK ;1 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW EE_WRBYTE_DATAH3: SBIM TMP1,01H BNZ EE_WRBYTE_DATAH1 ;DATAH OVER LDI TMP1,04H EE_WRBYTE_DATAL1: LDA EE_WRDataL,00H ADDM EE_WRDataL,00H BC EE_WRBYTE_DATAL2 ANDIM PORTC,IIC_SDA_LOW ;0 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW JMP EE_WRBYTE_DATAL3 EE_WRBYTE_DATAL2: ORIM PORTC,IIC_SDA_MASK ;1 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW EE_WRBYTE_DATAL3: SBIM TMP1,01H BNZ EE_WRBYTE_DATAL1 ;DATAL OVER ;*********************************************** ;RECEIVE ACK BIT ;*********************************************** LDI PCOUT, 1001B ORIM PORTC,IIC_SDA_MASK ;PULL UP ORIM PORTC,IIC_SCL_MASK ;LDI TMP1,IIC_SDA_MASK ;AND PORTC,00H ;BNZ EE_WRCOMMON_EEROR LDA PORTC, 00H BA2 $-1 LDI PCOUT,1101B LDI PORTC,0001B
LDI TMP1,00H STA EE_WRByteRTN,00H JMP EE_WRBYTE_EXIT EE_WRBYTE_EEROR: ANDIM PORTC,IIC_SCL_LOW ORIM PCOUT,IIC_SDA_OUTPUT ;LDI TMP1,0FH LDI EE_WRByteRTN,0FH EE_WRBYTE_EXIT: ;*********************************************** ;GENERATE STOP ;*********************************************** ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ORIM PORTC,IIC_SDA_MASK ;LDA IE ;Protect the IE ;STA IE_BAK ;LDI IRQ, 00H ;LDI IE,0000B ;LDA RomBankTMP,00H ;STA ROMBANK JMP I2C_WRITE_BYTE_OVER ; RTNI ; ; ; EE_WRCOMMON: LDI PCOUT, 0FH ;SOME INITIAL SETTING LDI PULL, 1100B LDI PORTC, 0001B ;VCC, LDI TMP1, 00H LDI TMP2, 00H
ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SDA_LOW ANDIM PORTC,IIC_SCL_LOW ;GENERATE START ;*********************************************** ;WRITE COMMAND:1010 ;*********************************************** ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;1 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ORIM PORTC,IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;1 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ;*********************************************** ;WRITE ADDR:0000 ;*********************************************** ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ;*********************************************** ;WRITE OPCODE BIT:0 ;*********************************************** ANDIM PORTC,IIC_SDA_LOW ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW ;0 ;*********************************************** ;RECEIVE ACK BIT ;*********************************************** ;ANDIM PCOUT,IIC_SDA_INPUT ;ORIM PORTC,IIC_SDA_MASK ;PULL UP LDI PCOUT, 1001B ORIM PORTC, IIC_SDA_MASK ORIM PORTC,IIC_SCL_MASK ;LDI TMP1,IIC_SDA_MASK ;AND PORTC,00H LDA PORTC, 00H BA2 $-1 ;BNZ EE_WRCOMMON_EEROR ;ORIM PCOUT,IIC_SDA_OUTPUT LDI PCOUT, 1101B LDI PORTC,0001B ;ANDIM PORTC,IIC_SCL_LOW ;ORIM PORTC, IIC_SDA_MASK
;*********************************************** ;WRITE ADDRESS(8 BITS) ;*********************************************** LDI TMP1,04H EE_WRCOMMON_ADDRH1: LDA EE_ADDRESSH,00H ADDM EE_ADDRESSH,00H BC EE_WRCOMMON_ADDRH2 ANDIM PORTC,IIC_SDA_LOW ;0 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW JMP EE_WRCOMMON_ADDRH3 EE_WRCOMMON_ADDRH2: ORIM PORTC,IIC_SDA_MASK ;1 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW EE_WRCOMMON_ADDRH3: SBIM TMP1,01H BNZ EE_WRCOMMON_ADDRH1 ;ADDRH OVER LDI TMP1,04H EE_WRCOMMON_ADDRL1: LDA EE_ADDRESSL,00H ADDM EE_ADDRESSL,00H BC EE_WRCOMMON_ADDRL2 ANDIM PORTC,IIC_SDA_LOW ;0 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW JMP EE_WRCOMMON_ADDRL3 EE_WRCOMMON_ADDRL2: ORIM PORTC,IIC_SDA_MASK ;1 ORIM PORTC,IIC_SCL_MASK ANDIM PORTC,IIC_SCL_LOW EE_WRCOMMON_ADDRL3: SBIM TMP1,01H BNZ EE_WRCOMMON_ADDRL1 ;ADDRL OVER ;*********************************************** ;RECEIVE ACK BIT ;*********************************************** ;ANDIM PCOUT,IIC_SDA_INPUT LDI PCOUT, 1001B ORIM PORTC,IIC_SDA_MASK ;PULL UP ORIM PORTC,IIC_SCL_MASK ;LDI TMP1,IIC_SDA_MASK ;AND PORTC,00H ;BNZ EE_WRCOMMON_EEROR LDA PORTC, 00H BA2 $-1 LDI PCOUT,1101B LDI PORTC,0001B ;ANDIM PORTC,IIC_SCL_LOW LDI TMP1,00H STA EE_WRCOMMONRTN,00H RTNI EE_WRCOMMON_EEROR: ;LDI TMP1,0FH LDI EE_WRCOMMONRTN,0FH RTNI
|
|