TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: leriokfive en 08 de Marzo de 2019, 06:41:36
-
Hola que tal buenos días, tengo un problema con un programa de conversion analogico a digital y transferencia por rs232 y recibir datos, mi problema es el siguiente cuando corro el programa solo enviando datos, el microcontrolador se comporta normal, pero si agrego el comando "getc()" y corro el programa en proteus, no me imprime ningun dato, espero me puedan ayudar, les dejo abajo el codigo fuente, y de antemano gracias.
"este es el codigo cuando imprime lo que deseo"
#INCLUDE <18f4550.h>
#device adc=10
#USE DELAY(CLOCK=20MHZ)
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP,CPUDIV2,PLL1
#use rs232(UART1,baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#BYTE PORTA= 5
long bits; //Variable almacena los bits
float tem; //Almacena la temperatura
void main()
{
set_tris_a(0b00000001); //Pongo el RA0 como entrada
setup_adc_ports(all_analog); //Pongo todo el puerto a analogo
setup_adc(adc_clock_internal); //Selecciono reloj interno para conversion
While(1)
{
set_adc_channel(0); //Selecciono el canal 0 (RA0)
delay_ms(1); //llamo retardo de 1 ms
bits=read_adc(); //Guarde el dato del LM en tempe
tem=bits*0.4882; //Conversion de bits a temperatura
printf("%2.1f \r\n",tem);
delay_ms(200);
}
}
"aqui al agregar "getc() y asignarlo a la variable f" con estas dos lineas me deja de imprimir el valor
#INCLUDE <18f4550.h>
#device adc=10
#USE DELAY(CLOCK=20MHZ)
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP,CPUDIV2,PLL1
#use rs232(UART1,baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#BYTE PORTA= 5
long bits; //Variable almacena los bits
float tem; //Almacena la temperatura
char f;
void main()
{
set_tris_a(0b00000001); //Pongo el RA0 como entrada
setup_adc_ports(all_analog); //Pongo todo el puerto a analogo
setup_adc(adc_clock_internal); //Selecciono reloj interno para conversion
While(1)
{
getc();
f=getc();
set_adc_channel(0); //Selecciono el canal 0 (RA0)
delay_ms(1); //llamo retardo de 1 ms
bits=read_adc(); //Guarde el dato del LM en tempe
tem=bits*0.4882; //Conversion de bits a temperatura
printf("%2.1f \r\n",tem);
delay_ms(200);
}
}
-
getc es bloqueante, es decir se queda esperando ahi hasta que llegue algun caracter. Segun tu codigo, espera 2 caracteres antes de comenzar a leer y enviar..
Para eso tenes la funcin kbhit() que te indica si tenes algun dato o no. Usala en un if.