#include "..\Header\vezerlo.h"
#include <i2c.h>
#include <timers.h>
#include <delays.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define		IOCONA		0x05			// I/O Configuration Reg
#define		IOCONSETA	0b10111000		// IOCON register setting
#define		GPPUA		0x06			// Pull-Up Control Reg
#define		GPIOA		0x09			// General Purpose I/O
#define		OLATA		0x0A

/* Fordítási direktívák    */
#pragma config WDT   = OFF   // Watch Dog Timer bekapcsolása
#pragma config OSC   = HS  // Oscillator 20 Mhz
#pragma	config LVP   = OFF // Low Voltage Program mód kikapcsolása
#pragma config XINST = ON  // Extended mode engedélyezése!

void write(char dev_adr, long mem_adr, char dat);
char read(char dev_adr, long mem_adr);

#pragma code
void main (void)
{   
	Nop(); Nop();

	SSPADD  = 49; //100000=20000000/(4*(SSPADD+1))
    OpenI2C(MASTER, SLEW_OFF);  //open I2C as master
	PIR1    = 0; // Power On Reset
    PIE1    = 0; // a periféria megszakítások tiltása

	ADCON0bits.ADON = 0; // Analóg átalakítás kikapcsolása
	ADCON1 = 0b11111111; // Minden jelet digitálisként kezelünk

	write(0x00, GPPUA     ,1);
	write(0x00, IOCONA    ,0);
	write(0x00, IOCONSETA ,0);

	write(0x00, OLATA     ,1);

   	while(1);
}

void write(char dev_adr, long mem_adr, char dat)
{
	i2c_start();
		DelayFor12TCY();
	i2c_out_byte(0x40 | (dev_adr << 1));
		DelayFor12TCY();
	i2c_nack();
		DelayFor12TCY();
	i2c_out_byte((mem_adr >> 8) & 0xff);
		DelayFor12TCY();
	i2c_nack();
		DelayFor12TCY();
	i2c_out_byte(mem_adr & 0xff);
		DelayFor12TCY();
	i2c_nack();
		DelayFor12TCY();
	i2c_out_byte(dat);
		DelayFor12TCY();
	i2c_nack();
		DelayFor12TCY();
	i2c_stop(); 
	Delay100TCYx(250);
	Delay100TCYx(250);
}

char read(char dev_adr, long mem_adr)
{
	char ch;
	i2c_start();
	i2c_out_byte(0x40 | (dev_adr << 1));
	i2c_nack();
	i2c_out_byte((mem_adr >> 8) & 0xff);
	i2c_nack();
	i2c_out_byte(mem_adr & 0xff);
	i2c_nack();
	i2c_start();
	i2c_out_byte(0x41 | (dev_adr << 1));
	i2c_nack();
	ch = i2c_in_byte();
	i2c_stop();
	return(ch);
}