Hola a todos.
Juanez, siguiendo con el ejemplo de DarkVect, tambien puedes hacerlo un poco mas eficiente de la siguiente manera:
//****************************************
int16 valor_adc;
int msb;
int lsb;
valor_adc=read_adc();
msb=make8(valor_adc,1); //leer MSB
lsb=make8(valor_adc,0); //leer LSB
//****************************************
la sintaxis de make8 es:
i8 = MAKE8(var, offset)
La instrucción make8 extrae los bytes de manera mas eficiente, dado que no realiza ninguna operación aritmética ni lógica, simplemente toma el byte que le indiques de " valor_adc " y lo copia a la variable destino (msb o lsb en estos casos). por otro lado la forma de guardar las variables en CCS es el byte LSB primero y luego el MSB, por eso como offset se le pasa 1 y 0.
El código completo que envía el valor del ADC cada 300ms quedaría:
#include <18f1320.h>
#device adc=10
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(CLOCK=8000000)
#use rs232(baud=2400, xmit=PIN_B1, rcv=PIN_B4)
int16 valor_adc;
int msb;
int lsb;
void main()
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports( ALL_ANALOG );
set_adc_channel(0);
do{
delay_ms(300);
valor_adc=read_adc();
msb=make8(valor_adc,1); //leer MSB
putc(msb);
lsb=make8(valor_adc,0); //leer LSB
putc(lsb);
}
while(true);
}
Saludo y cualquier duda a tus ordenes