Autor Tema: Problemas conversion cadena a entero  (Leído 1667 veces)

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

Desconectado dafs

  • PIC10
  • *
  • Mensajes: 2
Problemas conversion cadena a entero
« en: 10 de Octubre de 2012, 12:20:03 »
Hola  :) soy nuevo en este foro y quisiera si se pudiera que echaran una mano , como menciona el nombre del tema tengo problemas a la hora de convertir una cadena a entero, estoy programando en C y las funciones atoi y también strtol no me han funcionado, lo que quiero hacer  es desde un pic enviar el valor que está leyendo el convertidor ADC y enviarlo hacia otro pic para poder usar ese valor posteriormente, no sé si me di a entender  :? , aquí están los códigos

Transmisor
Código: [Seleccionar]
#include <18f4550.h>
#FUSES XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT, NOPUT
#device adc=10
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8) //Comunicacion UART
#include <lcd.c>
#include <stdlib.h>
#include <string.h>

//Variables
int32 q;
char string[8];

//Programa Principal
void main()

   lcd_init();
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   enable_interrupts(global);

   while(TRUE)
   {
   set_adc_channel(0);
   delay_us(20);
   q=read_adc();
   sprintf(string,"%Lu",q);
   PUTS(string);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%s",string);
   }
}//////////////////////////


Receptor
Código: [Seleccionar]
#include <18f4550.h>
#fuses NOWDT, XT, NOPUT, NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)// Comunicaion UART
#include <lcd.c>
#include <stdio.h>
#include <stdlib.h>

int valor;
Unsigned char dato[7];
char *ptr;


//Interrupcion de recepcion Comunicacion UART
#int_rda
rda_isr()
{
 gets(dato);
}


//Programa PrincipalUnsigned
void main()
{
 lcd_init();
 enable_interrupts(global);
 enable_interrupts(int_rda);
   
WHILE(TRUE)

 valor=atoi(dato);
 //=strtol(str,&ptr,10);
 lcd_gotoxy(1,1);
 printf(lcd_putc,"%d",valor);
 lcd_gotoxy(1,2);
 printf(lcd_putc,"\r%s",dato);
}
}
///////////////////////////////


Otros datos es que estoy usando el pic 18f4550 y comunicacion uart
Gracias y espero que me puedan ayudar  :-)

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Problemas conversion cadena a entero
« Respuesta #1 en: 10 de Octubre de 2012, 12:59:20 »
Hola!! Veo un par de errores en tu codigo:
En el transmisor estas convirtiendo un entero de 32 bits (en realidad son 10 bits por el ADC) , y en el receptor lo cambias por uno de 8 bits. Prueba declarar ambos enteros como unsigned int16.
Ademas, estas lineas:
Código: [Seleccionar]
sprintf(string,"%Lu",q);
PUTS(string);
Puedes simplificarlas haciendo:
Código: [Seleccionar]
printf("%lu\n");
Es importante poner el \n al final, porque la funcion gets(), lee caracteres hasta que encuentra un retorno de carro.
Proba con eso y contame como te fue ;)

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado dafs

  • PIC10
  • *
  • Mensajes: 2
Re: Problemas conversion cadena a entero
« Respuesta #2 en: 10 de Octubre de 2012, 13:46:49 »
Hola!! Veo un par de errores en tu codigo:
En el transmisor estas convirtiendo un entero de 32 bits (en realidad son 10 bits por el ADC) , y en el receptor lo cambias por uno de 8 bits. Prueba declarar ambos enteros como unsigned int16.
Ademas, estas lineas:
Código: [Seleccionar]
sprintf(string,"%Lu",q);
PUTS(string);
Puedes simplificarlas haciendo:
Código: [Seleccionar]
printf("%lu\n");
Es importante poner el \n al final, porque la funcion gets(), lee caracteres hasta que encuentra un retorno de carro.
Proba con eso y contame como te fue ;)

Saludos!

Gracias por la pronta respuesta  :P y si tienes razón se puede simplificar así usando el printf aparte ya cambien ambas variables a unsing int16 pero ahora tengo problemas en la recepción por que solo puedo leer el dato si cambio de gets a getch y aparte no me imprime todo el valor sino que aparecen los números uno tras otro en la misma posición en el lcd, aun así el código que puse aquí en el foro  funciona , envía y recibe el dato del ADC del pic ,así lo tenía trabajando pero lo que si no puedo realizar es la conversación del dato recibido a entero porque así lo puedo enviar por SPI a un TLC5615 y obtener un voltaje.

Gracias y espero que me tengan paciencia en el foro porque apenas soy un novato en programación :?