Autor Tema: Recibir datos de puerto serial  (Leído 1865 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado leriokfive

  • PIC10
  • *
  • Mensajes: 2
Recibir datos de puerto serial
« 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);
   
 
       
   }
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir datos de puerto serial
« Respuesta #1 en: 08 de Marzo de 2019, 07:23:24 »
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.


 

anything