Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
01/10/07 02:51
Read: times


 
#130553 - My Code
Responding to: ???'s previous message
Pull-up resistors are 4.7Kohm and microcontroller is AT89S52.

$MOD51
	ORG 00H
SCL	EQU P2.0
SDA	EQU P2.1
VERI	EQU 30H
	MOV IE,#00H
	MOV DPL,#10H			;DATA will be written to 0010H
	MOV VERI,#0FH			;DATA is 0FH
	ACALL EEPROM_WRITE		;GOTO Write operation
	NOP
	ACALL EEPROM_READ		;GOTO Read operation
	MOV P1,VERI
GO:	NOP
	AJMP GO

EEPROM_WRITE:
	LCALL I2C_START			;I2C Start will be given
	LCALL EE_ADD_WR			;Device selection will be done with R/W=0
	JB PSW.5,EEPROM_WRITE
	
	MOV A,DPH			;
	LCALL I2C_WRITE			;
	LCALL ACK			;
	JB PSW.5,EEPROM_WRITE		;
					;Address is being written
	MOV A,DPL			;
	LCALL I2C_WRITE			;
	LCALL ACK			;
	JB PSW.5,EEPROM_WRITE		;
	
	MOV A,VERI
	LCALL I2C_WRITE
	LCALL ACK			;DATA is being written to 0010H location
	JB PSW.5,EEPROM_WRITE
	LCALL I2C_STOP
	LCALL WAIT
	RET

EEPROM_READ:
	LCALL I2C_START			;Start command
	LCALL EE_ADD_WR			;Device selection will be done with R/W=0
	JB PSW.5,EEPROM_READ
	
	MOV A,DPH			;
	LCALL I2C_WRITE			;
	LCALL ACK			;
	JB PSW.5,EEPROM_READ		;
					;Address location which will be read is being specified 
	MOV A,DPL			;
	LCALL I2C_WRITE			;
	LCALL ACK			;
	JB PSW.5,EEPROM_READ		;
	
	LCALL I2C_START			;RepeatedStart
	LCALL EE_ADD_RD			;Device selection will be done with R/W=1
	LCALL I2C_READ			;DATA is being read to ACC.
	LCALL NO_ACK			;NoACK will be given by Master
	LCALL I2C_STOP
	LCALL WAIT
	RET

EE_ADD_WR:
	MOV A,#0A0H
	LCALL I2C_WRITE
	LCALL ACK
	RET
EE_ADD_RD:
	MOV A,#0A1H
	LCALL I2C_WRITE
	LCALL ACK
	RET

I2C_WRITE:
	MOV R7,#8D
	CLR C
LOOP:	RLC A
	MOV SDA,C
	LCALL CLOCK
	DJNZ R7,LOOP
	RET
I2C_READ:
	MOV R7,#8D
LOOP2:	SETB SDA
	SETB SCL
	NOP
	NOP
	MOV C,SDA
	RLC A
	CLR SCL
	NOP
	NOP
	DJNZ R7,LOOP2
	MOV VERI,A
	RET

I2C_START:
	SETB SCL
	SETB SDA
	NOP
	CLR SDA
	NOP
	CLR SCL
	RET
I2C_STOP:
	SETB SCL
	CLR SDA
	NOP
	SETB SDA
	NOP
	CLR SCL
	RET

ACK:
	CLR SCL
	SETB SCL
	NOP
	JNB SDA,GO_ON
	SETB PSW.5
	CLR SCL
	RET
GO_ON:	CLR SCL
	RET
NO_ACK:
	CLR SCL
	SETB SDA
	SETB SCL
	NOP
	CLR SCL
	CLR SDA
	RET
CLOCK:
	SETB SCL
	NOP
	NOP
	CLR SCL
	RET
WAIT:
	MOV B,#20d			;
LOOP3:	MOV R1,#0FFH			;
LOOP4:	NOP				;
	DJNZ R1,LOOP4			;Approximately 5mS time delay for write operation of
	DJNZ B,LOOP3			;ATMEL24C32A
	RET				;
END


List of 13 messages in thread
TopicAuthorDate
I2C clock freq.            01/01/70 00:00      
   Incorrect            01/01/70 00:00      
   release SDA bit            01/01/70 00:00      
      My Code            01/01/70 00:00      
         bingo! I guessed it!            01/01/70 00:00      
            No Change...            01/01/70 00:00      
               Please can you comment your code            01/01/70 00:00      
               Define Bad            01/01/70 00:00      
                  Why?            01/01/70 00:00      
                     'scope            01/01/70 00:00      
                     'scope            01/01/70 00:00      
                        New Image            01/01/70 00:00      
                           look at the I2C document...            01/01/70 00:00      

Back to Subject List