Bueno gente. Finalmente solucione el problema, y ya puedo simular bien las memorias y estoy direccionando las 4 24LC256 que necesitaba.
Estoy usando el Proteus 7.7 SP2, y cuando ponia las resistencias PULL-UP , se colgaba el micro. Por lo que puse las resistencias comunes RES como pull-up de 4K7 y empezo a funcionar al pelo.
En cuanto al direccionamiento segui el perfecto y asertado consejo de " MLO__ ", de usar los pines A0, A1 y A2, sabia exactamente para que eran, pero no sabia como emplear el direccionamiento en la progragramacion, pero despues de renegar casi una horita, me funciono. Simplemente toque un poco la libreria de la memoria que trae el CCS. Y me quedo asi:
////< libreria modificada 24256mux >
///////////////////////////////////////////////////////////////////////////
//// Library for a 24LC256 serial EEPROM ////
//// ////
//// init_ext_eeprom(); Call before the other functions are used ////
//// ////
//// write_ext_eeprom(command, a, d); Write the byte d to the address a at command memory ////
//// ////
//// d = read_ext_eeprom(command, a); Read the byte d from the address a at command memory ////
//// ////
//// The main program may define eeprom_sda ////
//// and eeprom_scl to override the defaults below. ////
//// ////
///////////////////////////////////////////////////////////////////////////
//// (C) Copyright 1996,2003 Custom Computer Services ////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other ////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission. ////
//// Derivative programs created using this software in object code ////
//// form are not restricted in any way. ////
///////////////////////////////////////////////////////////////////////////
#ifndef EEPROM_SDA
#define EEPROM_SDA PIN_B1
#define EEPROM_SCL PIN_B0
#endif
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)
#define EEPROM_ADDRESS long int
#define EEPROM_SIZE 32768
void init_ext_eeprom()
{
output_float(EEPROM_SCL);
output_float(EEPROM_SDA);
}
void write_ext_eeprom(BYTE command, long int address, BYTE data)
{
short int status;
command = command<<1;
i2c_start();
i2c_write(0xa0|command);
i2c_write(address>>
;
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0|command);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0|command);
}
}
BYTE read_ext_eeprom(BYTE command, long int address) {
BYTE data;
command = command<<1;
i2c_start();
i2c_write(0xa0|command);
i2c_write(address>>
;
i2c_write(address);
i2c_start();
i2c_write(0xa1|command);
data=i2c_read(0);
i2c_stop();
return(data);
}
Simplemente agregue una variable " BYTE command" la cual maneja el direccionamiento, y a las funciones para escribir y leer, le agregue dicha variable como paso de parametro en la declaracion para elegir la memoria que se quiere operar.
Espero que quien tenga la misma duda le sirva esta informacion.
Gracias a todos por aportar y correr a mi ayuda.
Un Saludo.