//include basic header definition
#include <p24FJ64GB002.h>
//------------ Configuration WORDS -----------------------//
_CONFIG1(WDTPS_PS1 & FWPSA_PR128 & FWDTEN_OFF & ICS_PGx3 & GWRP_ON & GCP_OFF & JTAGEN_OFF)
_CONFIG2(POSCMOD_NONE & IOL1WAY_OFF & I2C1SEL_PRI & OSCIOFNC_ON & FCKSM_CSDCMD & FNOSC_FRCPLL & PLL96MHZ_ON & PLLDIV_NODIV & IESO_OFF)
_CONFIG3(SOSCSEL_IO & WUTSEL_LEG & WPDIS_WPDIS & WPCFG_WPCFGDIS & WPEND_WPENDMEM )
_CONFIG4(DSWDTPS_DSWDTPS3 & DSWDTOSC_LPRC & RTCOSC_LPRC & DSBOREN_OFF & DSBOREN_OFF )
//------------------------------------------------------------//
//------ Hardware definition -----------//
//#define Button_1 PORTBbits.RB15 //Button 1 conected to RB15 pin
//#define Button_2 PORTBbits.RB14 //Button 2 conected to RB14 pin
// the push button has an external pullup resistor, Normaly Open
#define LED_1 LATBbits.LATB7 //Led 1 conected to RB9
//#define LED_2 LATBbits.LATB5 //Led 2 conected to RB8
//------------------------------------//
//*************************************************************//
//#define USE_AND_OR //used to compatibility,now the compiler use '&'(AND) instead of '|'(OR)
#define FCY 16000000 // FCY = Fosc/2 Fosc=32MHz
#define FSCL 100000 // Frequency Clock Rate in Hz
// 100KHz,400KHz,1MHz.
#define I2C1BRGval ((FCY/FSCL)-(FCY/10000000)-1)
#include<i2c.h>
#include "retardo.h"
#define EEPROM_SIZE 32768
unsigned char ControlByte; //Control Byte
unsigned char Data; //Data Byte
unsigned int ee_address;
//*************************************************************//
int main(void)
{
//----- PORTS & Peripherals Configuration --------------//
AD1PCFG=0xFFFF; // ALL PINS AS DIGITALS
LATA=0; // Latch port
//LATB=0; //
//TRISB=0; // <-------------****????
TRISA=0;
delay_ms(1000);
//******************************************************************
ControlByte = 0xA0; // Control byte 1010(A) 0000(0) wired address A2 A1 A0
Data = 0x81; //1000 0001
CloseI2C1();
Nop();
Nop();
OpenI2C1( I2C_ON,I2C1BRGval);
ee_address=0x7FFE;
//-------------main Program ------------//
while(1){ // (1) infinite loop
StartI2C1(); //Send the Start Bit
IdleI2C1(); //Wait to complete
MasterWriteI2C1(ControlByte);
IdleI2C1(); //Wait to complete
while(I2C1STATbits.TBF); //Wait till device id is transmitted
while(I2C1STATbits.ACKSTAT);
MasterWriteI2C1(ee_address>>8);
IdleI2C1(); //Wait to complete
while(I2C1STATbits.TBF); //Wait till Haddress id is transmitted
while(I2C1STATbits.ACKSTAT);
MasterWriteI2C1(ee_address & 0xFF);
IdleI2C1(); //Wait to complete
while(I2C1STATbits.TBF); //Wait till Laddress is transmitted
while(I2C1STATbits.ACKSTAT);
MasterWriteI2C1(Data);
IdleI2C1(); //Wait to complete
while(I2C1STATbits.TBF); //Wait till data is transmitted
while(I2C1STATbits.ACKSTAT);
StopI2C1(); //Send the Stop condition
IdleI2C1(); //Wait to complete
while(I2C1CONbits.PEN); //Wait till stop sequence is completed
CloseI2C1(); //Disable I2C
while(1); //loop here
} //end while
} //end main.