;##########################################################
;
; I2C Demo with serial RS232 input/output
;
; used I2C EEPROM AT24C16,
; data from RS232 are stored in the EEPROM up to #13 char
; and stored data are transmited to RS232 up to #13 char
; 
; (C) HELIUM  
; http://helium.webz.cz/
;
; compiled with MetaLink 8051 Cross-Assembler, Version 1.2k
;##########################################################

$MOD51

;XTAL	EQU	24
XTAL	EQU	11

E_adr	EQU	0

	ORG 	0H		;
	jmp	main		;

;##########################################################

 $include(x51_UTL.a51)		; x51_UTL.a51
 $include(I2C.a51)		; I2C library

;##########################################################
;
; MAIN PROGRAM LOOP
;
;##########################################################

main:   clr	EA		; 
	mov	SP, #7		; nastaveni dna zasobniku
	clr	RS0		;
	clr	RS1		; pouzivat Banku Registru 0
	mov	I2C_adr, #0A0h	; device address, for AT24Cxx 0A0h
	clr	I2C_al		; AT24C16,  8bit internal adr.
;	setb	I2C_al		; AT24C64, 16bit internal adr.
	call	SetSerial	;

;----------------------------------------------------------	

loop:	nop			;
	
; smycka zapisu do EEPROM do prijmu ENTER	
;
	mov	DPTR, #E_adr	;
zapisuj:call	RX_ACC		;
	mov	I2C_dat, A	;
;	
	orl	A, #00000011b	; kontrolni blikani na zbytku portu P1
	orl	P1,#11111100b	;
	anl	P1, A		;
;
	clr	A
	call	I2C_wr		;
	jnc	ok_dal		;
	mov	A, #'e'		; detekovana chyba
	call	TX_ACC		;
ok_dal:
	inc	DPTR		;
	mov	A, I2C_dat	;
	cjne	A, #13, zapisuj	;

; pockat 10 ms od posledniho zapisu
	clr	A		;
wloop:	call	I2C_wait	;
	djnz	ACC, wloop	;

; smycka cteni a vyslani z EEPROM do precteni ENTER	
;
	mov	DPTR, #E_adr	;
cti:	clr	A		;
	call	I2C_rd		;
	
	jnc	ok_dal1		;
	mov	A, #'E'		; detekovana chyba
ok_dal1:
	inc	DPTR		;
	call	TX_ACC		;
	cjne	A, #13, cti	;
	
	jmp	loop		;
	
;##########################################################

;==========================================================

;----------------------------------------------------------

	END			; end asm directive