TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: polimetro en 03 de Mayo de 2013, 23:19:57
-
HOla amigos, tengo un problema
Estoy utilizando un microcontrolador pic16f818 el cual se dedica a tomar muestras analogicas ,
convertirlas a digitales y enviarlas a un pc mediante un max232
El envio PIC a PC funciona muy bien
Utilizando este codigo
printf("%ld\r\n", Variable_int16_a_enviar);
ya que un
putc(Variable_int16_a_enviar);
Daba errores,
MIRA AQUI(Eso lo consulte en ESTE HILO del foro) (http://www.todopic.com.ar/foros/index.php?topic=40439.0)
El problema viene cuando quiero que el pic reciba los datos
En primer lugar que las primeras lineas de configuracion de RS232 estan bien
#use rs232(baud=1200, xmit=pin_b6, rcv=pin_b7)
Con el pic16f876 lo hacia mediante la interrupcion RDA
Por ejemplo:/******************************************************************************/
/************* FUNCIÓN INTERRUPCIÓN POR RECEPCIÓN DE DATOS *******************/
#int_RDA //Interrupción por recepción de datos
void RDA_isr(){
valor=getc(); //En "valor" el dato recibido via RS232
printf(lcd_putc, "\fRecibido %d ", valor); //Se muestra en pantalla información recibida
delay_ms(500);
}
/******************************************************************************/Pero debido a caracteristicas del proyecto , tengo que hacerlo con el 16f818 el cual no tiene interrupcion por RDA al
parecer...
Por lo cual trate de hacer que mirase getc(); dentro del while principal ...
resumiendo algo asi
void main () { // algo simple...
while(1){
PORTB=getc();
delay_ms(500);
}
}
Pero no funciona!
Y resumiendo, puedo enviar datos del Pic A la PC pero no puedo recibir ni un dato enviado desde el PC hasta el PIC
Podeis ayudarmee???
Muchas gracias
-
No recuerdo si ese micro tiene rs232 por hardware, pero para saber si tienes datos en el buffer usa la función kbhit y si tienes datos entonces usas el getc
-
Lo siento pero no te he entendido.
Tambien he provado el mismo metodo con el 16f877 y tampoco funciona
-
Porque no pones toda la función main(), ya que puede ser un problema de configuración de la interrupción o de algún modulo que interfiere en el protocolo rs232.