Este es un ejemplo de I2C del libro Compilador C CCS y simulador PROTEUS para microcontroladores PIC, Eduardo Garcia Breijo.
Cuando compilo el programa me aparecen 100 errores y lo he revisado muchas veces y lo escribí igual que como aparece en el libro.
Agradecería mucho su ayuda, esta es una implementación de mi trabajo final para graduarme.
Cuando compilo el programa me aparecen 100 errores y lo he revisado muchas veces y lo escribí igual que como aparece en el libro.
Agradecería mucho su ayuda, esta es una implementación de mi trabajo final para graduarme.
Código:
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8,parity=N)
#use i2c(Master,sda=PIN_C4,scl=PIN_C3)
#include <lcd.c>
#include "EEPROM_24512.c" //Ficheros driver de los perifericos
#include "RTC_ds1307.c"
#include "TEMP_ds1621.c"
#include "FLOATEE.c"
int dat_in, cnt, hr,min,sec;
int16 address=0;
int dat_serie[7];
float dato;
#int_rda //Interrupcion para el puerto serie
rda_isr()
{
dat_in=getc(); //Lee el puerto serie
printf("\r");
if (dat_in=\'2\') //Si es "2" se visualizan los primeros datos de la EEPROM
{
for(cnt=0;cnt<=6;cnt++) //Lectura de los 7 primeros bytes de la EEPROM
{
dat_serie[cnt]=read_ext_eeprom(cnt);
}
for(cnt=0;cnt<=6;cnt++) //Visualiza los primeros 7 bytes de la EEPROM
{
printf("Byte %u=%3u \r",cnt,dat_serie[cnt]);
}
}
}
void main() {
lcd_init();
enable_interrupts(int_rda);
enable_interrupts(global);
address=0;
printf("Pulsar 1 para leer datos\r"); //Menu para el terminal serie
printf("Pulsar 2 para visualizar datos\r");
while(1) {
if(dat_in==\'1\') //Si es "1" se inicia la lectura y grabado en la EEPROM
{
init_temp(0x01); //Inicializa el DS1621
delay_ms(100);
tiempo(hr,min,sec); //Lee tiempo del DS1307
dato = read_full_temp(0x01); //Lee temperatura del DS1621
WRITE_FLOAT_EXT_EEPROM(address,dato); //Guarda 4 bytes del FLOAT
address=address+4;
WRITE_EXT_EEPROM(address++,hr); //Guarda byte de hora
WRITE_EXT_EEPROM(address++,min); //Guarda byte de minuto
WRITE_EXT_EEPROM(address++,sec); //Guarda byte de segundo
lcd_gotoxy(1,1);
printf(lcd_putc,"Temp=%4.1f C\n",dato); //Visualiza la temperatura
printf(lcd_putc,"%2u:%2u:%2u",hr,min,sec); //Visualiza la hora
if (address==0xffff) address=0; //Cuando se termina la EEPROM vuelve
//al principio
}
}
}
Última edición por un moderador: