Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Do you know where to get free sample of using I2C with AT89C52 chips?

Status
Not open for further replies.

Maverickmax

Advanced Member level 1
Joined
Dec 6, 2004
Messages
404
Helped
8
Reputation
16
Reaction score
3
Trophy points
1,298
Activity points
3,689
Hi

Do you know where to get free sample of using I2C with AT89C52 chips?

Maverick Max
 

i2c code for 24c04

AT89C52 doesn't have I2C interface, but you can define any available pins ..
In this example they are P3.6 and P3.7 ..

;RAM LOCATION USED IN THIS MODULE 70H
;THIS IS A WORKING PROGRAM, TESTED ON 24C04 SERIAL MEMORY IC
;THE SAME CODE CAN BE USED FOR OTHER I2C IC'S WITH MODIFICATION.

WTCMD EQU 10100000B ;24C04 WRITE COMMAND
RDCMD EQU 10100001B ;24C04 READ COMMAND
ADDRS EQU 70H

SCL EQU P3.6 ;SERIAL CLOCK PIN
SDA EQU P3.7 ;SERIAL DATA PIN

...

The rest of the code you can find here:
https://www.keil.com/discuss/docs/thread2328.htm

Regards,
IanP
 

i2c ic code

Hi

I understand the codes very well as shown below:

Code:
;RAM LOCATION USED IN THIS MODULE 70H
;THIS IS A WORKING PROGRAM, TESTED ON 24C04 SERIAL MEMORY IC
;THE SAME CODE CAN BE USED FOR OTHER I2C IC'S WITH MODIFICATION.



WTCMD 	EQU 10100000B		;24C04 WRITE COMMAND
RDCMD 	EQU 10100001B		;24C04 READ COMMAND
ADDRS	EQU 70H

SCL 	EQU P3.6		;SERIAL CLOCK PIN
SDA 	EQU P3.7		;SERIAL DATA PIN


	ORG 0000H
	LJMP START

	ORG 0030H
START:
	MOV P1,#01H

	MOV R1,#55H		;
	MOV A,#00		;WRITE THE DATA IN R1 REGISTER INTO
	MOV ADDRS,A		;ADDRESS POINTED BY ADDRS INTO TEH 24C04
	LCALL WRITE		;

	LCALL L_DELAY

	MOV A,#00		;
	MOV ADDRS,A		;READ THE DATA FROM 24C04 FROM THE MEMORY
	LCALL READ		;LOCATION POINTED BY ADDRS AND STORE IN R2
	MOV A,R2		;

	MOV P1,A		;MOVE THE RED BACK DATA ONTO P0

	LCALL L_DELAY

	LJMP START


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;THIS IS USED TO WRITE INTO 24C04
;ARGUMENTS1 --> ADDRS => ADDRESS TO BE WRITTEN INTO,IN 24C04 MEMORY
;ARGUMENTS2 --> R1 ==> DATA TO BE WRITTEN
;RETURN  --> NONE

WRITE:
	MOV A,#WTCMD
	CALL OUTS

	MOV A,ADDRS
	CALL OUT

	MOV A,R1
	CALL OUT

	CALL STOP

	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;THIS SUB ROUTINE IS USED TO READ DATA FROM THE 24C04
;ARGUMENTS --> ADDRS ==> ADDRESS IN 24C04,THE DATA SHOULD BE READ FROM.
;RETURN --> R2(DATA THAT WAS READ)
READ:
	MOV A,#WTCMD
	CALL OUTS

	MOV A,ADDRS
	LCALL OUT

	MOV A,#RDCMD
	LCALL OUTS

	LCALL IN
	MOV R2,A

	LCALL STOP

	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
OUTS:
	MOV B,#8
	SETB SDA
	SETB SCL
	NOP
	CLR SDA
	NOP
	CLR SCL

OSLOOP:
	RLC A
	MOV SDA,C
	SETB SCL
	NOP
	CLR SCL
	DJNZ B,OSLOOP
	SETB SDA
	NOP
	SETB SCL
	NOP
	CLR SCL
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
OUT:
	MOV B,#8
OLOOP:
	RLC A
	MOV SDA,C
	SETB SCL
	NOP
	CLR SCL
	DJNZ B,OLOOP
	SETB SDA
	NOP
	SETB SCL
	NOP
	CLR SCL
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IN:
	MOV B,#8
	SETB SDA
INLOOP:
	CLR SCL
	NOP
	SETB SCL
	MOV C,SDA
	RLC A
	DJNZ B,INLOOP
	CLR SCL
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
STOP:
	CLR SDA
	NOP
	SETB SCL
	NOP
	SETB SDA
	LCALL DLAYms
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DLAYms:
	MOV R6,#150
	MOV B,#00
MS1:	DJNZ B,$	;((2*255)+(2*255)*150
	DJNZ B,$	;=153 MILLI SECONDS
	DJNZ R6,MS1
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
L_DELAY:
	MOV R7,#0AH	;153 MILLISECONDS * 10
LLL:	LCALL DLAYms	;1.53 SECONDS
	DJNZ R7,LLL
	RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	END

A small part of the codes got my attention. According to the datasheet, every 8-bits transmission sent to 24C04 and the Master should receive acknowledgement bit via SDL. Well, please check the line after the DJNZ in the Outs and, Out sections. Why the SDL is set 1 automatically instead of reading the SDL from the 24C04 for acknowledgement?

That goes to the IN section as well.

Maverick Max
 

i2c sample module

I found a library for GCC made for WinAVR, look in avrfreaks. As I remember, it has two versions, hardware and software, selectable via the options in the makefile.

jedihe

Added after 2 minutes:

Well, I have found the url:

h..p://homepage.sunrise.ch/mysunrise/peterfleury/avr-software.html#libs

I used it in a recent project and it worked OK (the hardware version)

jedihe
 

i2c gcc

hi guys
the code from
Maverickmax
works well (i just use the read option)
it's limited to firs 256 bytes

good day

yuv
yaharoni@ 013.net.il
 

24c04 sample code

pls go through this link
h**p://www.keil.com/discuss/docs/thread2328.htm
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top