I2c serial eeprom Project


Serial eeprom to PIC16F84 interface

This programm send first a data (F0h) to eeprom at address 00FFh and then data from address 00FFh it's read from eeprom and displayed to portB.


Source code file for serial eeprom operations using i2c protocol
;=======eeprom_i2c / Version 1.0====================17/01/03==
;	st24c64w
;	ra0,ra1     sdata,sclock
;	rb0 to rb7
;     internal clock
;     standard crystal 4.000 MHz XT - 1us pe instructiune
;	Program realizat de Ing. Bergthaller Iulian-Alexandru 
;------------------------------------------------------------
	list	p=16f84A;f=inhx8m
_CP_OFF	equ	H'3FFF'	      ;code protect off
_PWRTE_ON	equ	H'3FFF' 		;Power on timer on
_WDT_OFF	equ	H'3FFB'		;watch dog timer off
_XT_OSC		equ	H'3FFD'	;crystal oscillator
	__CONFIG       _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;------------------------------------------------------------
;      cpu init
status	equ	03
porta	      equ	05
portb	      equ	06
count1	equ	0C
count2	equ	0D
count3	equ	0E
transo	equ	0F
count4	equ	10
trisa		equ	85
trisb		equ	86	
#DEFINE sclk	porta,1
#DEFINE sdta	porta,0
;------------------------------------------------------------
;      bit init
rp0	equ	5
devicew	equ	0xA0
devicer	equ	0xA1
;------------------------------------------------------------
	org	0
;
;------------------------------------------------------------
init  bsf	status,rp0  ;switch to bank 1
	movlw	0 ;outputs
      movwf	trisb
	bcf	status,rp0  ;switch back to bank 0
	movlw	0
	movwf	portb	
;***************************************************
start	movlw	0xFF
	movwf	portb 
	call	pause
	call	scrie
	call	pause
weit	nop
	call	lesen
	call	pause
	goto	weit	
;***************************************************
scrie	call	sout; write datas to address adresl+adresh 
	movlw	0x00
	movwf	portb 
	call	alos
	bsf	portb,0
	movlw devicew
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	portb,1
	movlw 0x00
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	portb,2
	movlw 0xFF
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	portb,3
	movlw 0xF0
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	porta,3
	call	ahalt
	call	pause
	bcf	porta,3
	retlw	00
;***************************************************
lesen	call	sout
	movlw	0x00
	movwf	portb 
	call	alos
	bsf	portb,0
	movlw devicew
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	portb,1
	movlw 0x00
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	call	sout
	bcf	portb,7
	bsf	portb,2
	movlw 0xFF
	movwf transo
	call	varsa
	bsf	portb,7
	call	srin
	call	antwt	; antwort aus eeprom
	call	pause
	bcf	portb,7
	bsf	portb,3
	call	sout; current address read
	call	alos
	bsf	porta,2
	movlw devicer
	movwf transo
	call	varsa
	bcf	porta,2
	call	srin
	call	antwt	; antwort aus eeprom
	call	scana	; eeprom lesen
	call	sout
	bsf	porta,3
	call	ahalt
	call	pause
	bcf	porta,3
	retlw	00
;***************************************************
sout	bsf	status,rp0  ;switch to bank 1
	movlw	0 ;outputs
 	movwf	trisa
	bcf	status,rp0  ;switch back to bank 0
	movlw	0
	movwf	porta
	retlw	00
;***************************************************
srin	bsf	status,rp0  ;switch to bank 1
	movlw	01 ;input
 	movwf	trisa; set sda as input
	bcf	status,rp0  ;switch back to bank 0
	retlw	00
;***************************************************
alos	bsf	sdta;	start condition module
	bcf	sclk
	call	pause
	bsf	sclk
	call	pause
	bcf	sdta; comanda start
	call	pause
	bcf	sclk
	call	pause
	retlw	00
;***************************************************
ahalt	bcf	sdta; stop condition module
	call	pause
	bsf	sclk
	call	pause
	bsf	sdta; comanda stop
	call	pause
	bcf	sclk
	call	pause
	retlw	00
;***************************************************
varsa	bcf	sclk
	call	pause
	btfsc transo,7	;bit0(MSB)
	bsf	sdta
	btfss transo,7
	bcf	sdta
	call	pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause	
	btfsc transo,6	;bit1
	bsf	sdta
	btfss transo,6
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,5	;bit2
	bsf	sdta
	btfss transo,5
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,4	;bit3
	bsf	sdta
	btfss transo,4
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,3	;bit4
	bsf	sdta
	btfss transo,3
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,2	;bit5
	bsf	sdta
	btfss transo,2
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,1	;bit6
	bsf	sdta
	btfss transo,1
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	call pause
	btfsc transo,0	;bit7(LSB)
	bsf	sdta
	btfss transo,0
	bcf	sdta
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	retlw	00
;***************************************************
scana	call	pause
	bsf	sclk
	btfsc sdta	;bit0(MSB)
	bsf	portb,7
	btfss sdta
	bcf	portb,7
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit1
	bsf	portb,6
	btfss sdta
	bcf	portb,6
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit2
	bsf	portb,5
	btfss sdta
	bcf	portb,5
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit3
	bsf	portb,4
	btfss sdta
	bcf	portb,4
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit4
	bsf	portb,3
	btfss sdta
	bcf	portb,3
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit5
	bsf	portb,2
	btfss sdta
	bcf	portb,2
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit6
	bsf	portb,1
	btfss sdta
	bcf	portb,1
	bcf	sclk
	call pause
	bsf	sclk
	btfsc sdta	;bit7(LSB)
	bsf	portb,0
	btfss sdta
	bcf	portb,0
	bcf	sclk
	call pause
	bsf	sclk
	call pause
	bcf	sclk
	retlw	00
;***************************************************
antwt	movlw	0x04
	movwf	count4
	bsf	sclk
	call	pause
ackts	btfss	sdta	;sda=0 ?
	goto  eprok 
	decfsz	count4  
	goto  ackts
	call	fails
eprok	bcf	sclk
	retlw	00
;***************************************************
fails	movlw	0
	movwf	portb 
	call	pause
	movlw	0xFF
	movwf	portb 
	call	pause
	movlw	0
	movwf	portb 
	call	pause
	retlw	00
;***************************************************
pause	movlw	0x02
	movwf	count3
d3	movlw	0xF0
	movwf	count1
d1	movlw	0xF0	  
	movwf	count2
d2	decfsz	count2	
	goto 	d2		
	decfsz	count1	
	goto 	d1		
	decfsz	count3    
	goto  d3          
	retlw	00
;------------------------------------------------------------
	end
;============================================================

The hex code can be download from here.

The last version it's now available.
Back to my home page
Last updated January, 2003
© Copyright 2002-2003 Bergthaller Iulian-Alexandru
eXTReMe Tracker