Buenas a todos,
tengo un problemilla con un código que estoy haciendo... el programa lee un valor del ADC y lo envía al puerto serie y a un LCD, y a su vez, cuando recibe algo por el puerto serie, se ejecuta la interrupción del puerto serie, lee el valor y lo muestra por el LCD.
pues resulta que todo funciona bien hasta que le envío un carácter por el puerto serie, que se queda colgado al entrar en la interrución...
![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
este es el código, a ver si alguien me puede echar una mano y ve algún fallo
//Incluimos la libretia del PIC
#include "16F877A.h"
#device adc=10
//Configuramos el reloj a 4MHz
#use delay(clock=4000000)
#include "lcd.c"
//Configuramos los parámetros del puerto RS-232
#use rs232(baud=9600,parity=N,bits=8,stop=1,xmit=PIN_C6,rcv=PIN_C7)//,enable=PIN_D5)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
//Configuramos los fuses adecuados
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,BROWNOUT
#define PULSADOR pin_b6
int keypress=0, dato=0;
void borrar_lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
}
//directiva para interrupción del puerto serie
#int_rda
void rda_isr()
{
dato=1;
}
void config(void)
{
enable_interrupts(INT_RDA); //indicamos que queremos usar la int del serial
enable_interrupts(GLOBAL); //habilitamos las interrupciones
}
//Programa principal
void main(void)
{
int16 valor=0;
float result=0;
set_tris_b(0b01111111); //Configuramos el puerto B de entrada de B0-B6
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
config();
lcd_init();
borrar_lcd();
lcd_gotoxy(1,1);
printf(lcd_putc,"Tension=");
while(TRUE)
{
valor=read_adc();
result=(valor/168.4);
lcd_gotoxy(9,1);
printf(lcd_putc,"%2.2fv \n",result);
delay_ms(100);
printf("%2.2f v \n\r"result);
if(dato==1)
{
keypress=getc();
lcd_gotoxy(1,2);
printf(lcd_putc,"%u",keypress);
dato=0;
}
}
}
supongo que no debo estar configurando bien la interrupción, pero yo no veo el fallo...
espero haberme explicado,
un saludo y gracias...