Pues es extraño que funcione, ya que como te digo no lo tuve en cuenta, este es el código completo:
#include <pic.h> //Standard Hi-Tec C header file this includes the definition for the generic functions and variables i.e TRISC, PORTC, TXREG
#include "i2c.h" //Defines the I2C functions, this came with the HI-Tec C
/*Setting the config register.
Watchdog Timer Disable
Using Hi Speed Xtal
Low voltage program mode disable
*/
__CONFIG (WDTDIS & HS & LVPDIS);
void putrsUSART(const char *data); //Function prototype, this defines the functions other than the main() function
void main()
{
[b]//[/b]INTCON= 0; //Disable Interrupts
SPBRG = 129; //Set the baudrate for 9600 @ 20 MHz (0x81)
TXSTA = 0x24; //Set the serial port parameters
RCSTA = 0x90; //Set the serial port parameters
PORTC = 0; //Clear PORTC pins
TRISC = 0x80; //
[b] TRISA=0x01;
[/b]
int a, b, c, d; //Variables holds I2C Data
char td[4]; //Char Array to store I2C Data, this will be sent to the Serial port
[b]int ADC_VALUE; /* The value from the analog - digital convertor */
[/b]
/*
Continuosly monitor the I2C bus and read the humidity and temperature data
And send the data to the Serial Port
*/
while(1)
{
<funciones que obtienen a,b,c y d de un bus i2c>
td[0]=a; //Filling the I2C Data into a Char Array
td[1]=b;
td[2]=c;
td[3]=d;
[b]ADCON0=0b1000011;
ADCON1= 0x10;
ADIE = 0; /* Masking the interrupt */
ADIF = 0; /* Resetting the ADC interupt bit */
ADRESL = 0; /* Resetting the ADRES value register */
ADRESH = 0;
GODONE=1; /* Staring the ADC process */
while(GODONE); /* Wait for conversion complete */
{ADC_VALUE = ((ADRESH*5)/255); /* Getting HSB of CCP1, in 8 bit mode only ADRESH in 10 bit mode need the ADRESL to perform the first 8 bits, THE ADRESH perform the 8 last bits*/
} [/b]
putrsUSART(td); //Send the 4 Bytes Char Array to the serial port
for(int t=0;t<4;t++) //Cleaning the data array, so that we can avoid repeating the same data
{
__delay_us(20000);
td[t]=0;
}
}
}
void putrsUSART(const char *data) //Function we use to send the data to the Serial port, const char *data is the Char array
{
do //Check the Char Array until it finishes data
{
while(!(TXSTA & 0x02)); //Check the TXREG is empty
TXREG = *data; //Send the Byte to the TXREG
}
while( *data++ );//Check the Char Array until it finishes data
}
La parte en negrita ha sido lo incluido para el ADC. Hasta ahí todo OK y funciona perfectamente, pero no consigo meter el resultado de la conversión junto con las 4 primeras variables. Además, para más inri, al programa de ordenador me llegan 6 bytes, y descarto los 2 ultimos... que me vendrían de lujo si contuvieran el resultado de la ADC...