Hola a todos, intento dar mis primeros pasos en CCS y pretendo conseguir comunicar dos 16F873 mediante I2C. Lo simulo con proteus pero no consigo nada. No se que tipo de error estoy cometiendo o si es que voy muy perdido. Agradeceria cualquier comentario al respecto. No puede subir los ficheros que pretendía pero os escribo una meustra de lo que hago:
***************************
Master:
**************************
#include <16F873.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT, NOLVP, NOPROTECT
#use i2c(Master,slow,sda=PIN_C4,scl=PIN_C3)
#byte puertaa = 0x05 /* Posici¢n de la puerta A */
#byte puertab = 0x06 /* Posici¢n de la puerta B */
#byte puertac = 0x07 /* Posici¢n de la puerta C */
#byte adcon0=0x1F
#byte adcon1=0x9F
#byte option_reg=0x81
#byte status=0x03
#byte pcon=0x8E
#bit salida=puertac.1
#bit pulsador =puertab.4
void enviar_i2c();
byte reg_general;
byte dato;
#bit marxa=reg_general.0
void main() {
port_b_pullups(TRUE);
set_tris_a(0xF0);
set_tris_b(0xFF);
set_tris_c(0xF8);
reg_general=0x00;
adcon1 = 0x06;
option_reg=0x17;
do{
delay_ms(1000);
if (pulsador==0){
while(pulsador==0){};
if (marxa==0){
marxa=1;
salida=1;
dato=0x01;
enviar_i2c(); //llamemos al slave a1
}
else{
marxa=0;
salida=0;
dato=0x00;
enviar_i2c(); //llamemos al slave a1
}
}
}while(true);
}
void enviar_i2c(){
i2c_start();
i2c_write(0x02);
i2c_write(dato); //digamos que 1 es que encienda la salida 3 (rc1)
i2c_stop();
}
****************************************************
eslave
******************************************
#include <16F873.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT, NOLVP
#use i2c(Slave,Slow,sda=PIN_C4,scl=PIN_C3,address=0x02, force_hw)
#byte puertaa = 0x05 /* Posici¢n de la puerta A */
#byte puertab = 0x06 /* Posici¢n de la puerta B */
#byte puertac = 0x07 /* Posici¢n de la puerta C */
#byte adcon0=0x1F
#byte adcon1=0x9F
#byte option_reg=0x81
#byte status=0x03
#byte pcon=0x8E
#bit led=puertaa.2
#bit salida=puertac.1
#bit polsador =puertab.4
byte lectura1;
#int_SSP
void ssp_interupt() {
led=1;
lectura1=i2c_read();
if (lectura1==1){
salida=1;
}
else{
salida=0;
}
}
void main() {
port_b_pullups(TRUE);
set_tris_a(0xF0);
set_tris_b(0xFF);
set_tris_c(0xF8);
adcon1 = 0x06;
option_reg=0x17;
salida=0;
led=0;
delay_ms(1000);
enable_interrupts(INT_SSP);
enable_interrupts(global);
while(true){}
}