Ayuda con int AD, lenguaje C

Saludos a todos.

Tengo este problema, hice este programita sencillo pero que no me esta funcionando, lo que hace el programa lee una entrada analoga por RA0, uso interrupciones, luego este valor leido lo envio al LCD uso la libreria "flex_lcd.c" .
El lcd me muesta el mensaje VALOR pero no muestra el valor leido, hasta ahora solo lo estoy simulando en proteus, dejo el codigo para que me ayuden , gracias y saludos.


#include <16f876.h>
#fuses HS,NOWDT,NOPUT
# DEVICE ADC=8 //ADC usa 10 bit
#use delay(clock=20000000) // defino el crystal a utilizar
#use fast_io(C)
#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E PIN_B3
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#include "flex_lcd.c"

#byte port_a= 0x05
#byte port_c= 0x08

int flag_int_ad=0, i=0;

/****************************************************************
/********************* RUTINA DE INTERRUPCION AD ****************/
# INT_AD

void AD_isr(){
flag_int_ad=1;
i=Read_ADC(ADC_READ_ONLY); // lee el valor digital del ADC
}

/****************************************************************
/*********************** PROGRAMA PRINCIPAL ********************/
void main(){

set_tris_a(0x01); /* el pin RA0 como entrada */
set_tris_b(0); /* el portb como salida */
set_tris_c(0); /* el portc como salida */

lcd_init(); /* inicializo en LCD */

enable_interrupts(INT_AD); // hab. int AD
enable_interrupts(GLOBAL); // hab. int global
SETUP_ADC(ADC_CLOCK_INTERNAL); // config para que el a/d funcione con reloj del uC
SETUP_ADC_PORTS(AN0); // RA0 será analógico
SET_ADC_CHANNEL(0); // vamos a usar el canal RA0

lcd_gotoxy(1,1); /* inicia en la primera linea del LCD */
printf(lcd_putc,"Valor"); /* muestra en el LCD */
delay_ms(1);

while(1){
if(flag_int_ad==1){
output_c(i); /* muestro en el portc el valor leido */
lcd_gotoxy(1,2); /* inicia en la segunda linea del LCD */
printf(lcd_putc,i); /* envio al LCD el valor leido */
}
while(flag_int_ad==0){
}
}
}
 
Atrás
Arriba