Hola compañeros, antes que nada gracias por brindar su tiempo y conocimientos. Les paso a comentar mi problema, estoy migrando de aca poco del CCS a HITECH y he encontrado un atasco, lo que pretendo es que me muestre en el lcd el maximo valor del conversor ingresando +5V por el canal 0 del ADC o sea 1023 no pido mas que eso, a todo esto estoy simulando con proteus lo que con CCS no he tenido ningun problema. (en otra consulta me dijeron que no tenia que fiar de un simulador). El tamaño del buffer esta bien defino como un arreglo de 10 elementos? cuando le doy play en proteus y el programa corre indefinidamente me muestra en el primer ciclo -10240 y en los ciclos siguientes 0. Les adjunto el codigo por si alguien tiene tiempo y me puede dar una mano. Muchas gracias a todos.
Codigo:
#include "htc.h"
#include <lcd.h>
#include <stdlib.h>
__CONFIG(WDTE_OFF&FOSC_INTOSCIO); //desabilito el WDT (ver el .h del micro)
//FOSC_INTOSCIO: INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin
#define _XTAL_FREQ 8000000 //defino frecuencia para usar con delay
void main(void)
{
OSCCON=0b01110000; // Oscilador interno 8MHz
/*Controla los pines */
ADCON1=0b00100100; // bits 7,6: no implementado los lee como 0
// bit 5: 1,los 6 bits mas significativos de ADRESH los toma como 0
// bit 4: no implementado lo lee como 0
// bit 3a0: configuracion del puerto,100:Vref+=VCC,Vref-=VSS,ANO=AN1=AN3=A
/*Configura el conversor AD*/
ADCON0=0b00000001;
// bit 7,6: Clock AD,fosc/2
// bit 5,3: Canal
// bit 2:go/done (ver)
// bit 1: sin implementar
// bit 0: adon=1
int i;
unsigned int valor;
//float valor;
char buffer[10];
lcd_init(); //inicio LCD
lcd_goto(0x00);
lcd_puts("Cargando soft...");
/*PRUEBA DE IMPRIMIR UN CARACTER EN EL LCD*/
for(i=0;i<16;i++)
{
lcd_goto(0x40+i); // select first line
lcd_putch(0xFF); // imprimo caracter en display
__delay_ms(100);
}
__delay_ms(1000);
lcd_init();
lcd_goto(0x00);
lcd_puts("Tension BAT:");
//ADON=1; //enciendo el ADC
__delay_ms(10);
GO_DONE=1; //GO
/* aca va un bucle esperando que el BIT2 GO/DONE se ponga a 0 */
while (GO_DONE!=0)
valor=((ADRESH<<
+(ADRESL)); // es un ocho donde sale la carita
__delay_ms(2000);
/*imprimir el valor*/
itoa(buffer,valor,10); //convierto variable entera a string, 10 es la base=decimal
lcd_goto(0x40);
lcd_puts(buffer); //imprimo string
__delay_ms(2000);
}