TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: maxluis en 11 de Junio de 2014, 00:36:26

Título: Como se hace un __delay_ms("variable); en xc8??
Publicado por: maxluis en 11 de Junio de 2014, 00:36:26
Estimados Quiero hacer un pulso para mover un servo, sacarlo por un pin de salida:  una variable = 950 + Valor analogo;
                                                                                                             __delay_us("una Variable");  // de esta forma me da error al compilar
                                                                                                             __delay_us(950);    // No me da error.
como se hace para solucionar este problema???? en XC8 en el ccs funciona.

ayudadme plis.
Saludos.
Maxluis.

Título: Re: Como se hace un __delay_ms("variable); en xc8??
Publicado por: Miquel_S en 11 de Junio de 2014, 03:16:10
Hola maxluis, si mal no recuerdo lei en el apartado de XC8 del subforo lenguaje C para microcontroladores PIC que no es posible de la manera que
lo planteas.
Saludos!
Título: Re: Como se hace un __delay_ms("variable); en xc8??
Publicado por: migsantiago en 14 de Junio de 2014, 21:17:55
Hola, con XC8 yo le di la vuelta con el siguiente código:

Archivo custom_delay.c

Código: [Seleccionar]
/* -----------------------------------------------------------------------------
 * Headers
 * -------------------------------------------------------------------------- */
#include "custom_delay.h"
#include "main.h"

/* -----------------------------------------------------------------------------
 * Function definitions
 * -------------------------------------------------------------------------- */

/**
 * Refer to custom_delay.h for details
 */
void Cust_Delay(uint24_t ms)
{
   while(ms > 10)
   {
      __delay_ms(10);
      ms -= 10;
   }
   while(ms)
   {
      __delay_ms(1);
      --ms;
   }
}

Archivo custom_delay.h

Código: [Seleccionar]
#ifndef CUSTOM_DELAY_H
#define CUSTOM_DELAY_H

#ifdef __cplusplus
extern "C" {
#endif

/* -----------------------------------------------------------------------------
 * Headers
 * -------------------------------------------------------------------------- */
#include "pic18.h"
#include "typedefs.h"

/* -----------------------------------------------------------------------------
 * Prototypes
 * -------------------------------------------------------------------------- */

/**
 * Work around function for __delay_ms()
 * @note __delay_ms won't accept variables, only constants!
 * @param ms to wait
 */
void Cust_Delay(uint24_t ms);

#ifdef __cplusplus
}
#endif

#endif /* CUSTOM_DELAY_H */


Basta con que elimines el include del typedefs y agregus un typedef para uint24_t que es un entero sin signo de 24 bits.

Ponle uno de 16 si gustas, te dará 65535ms.

Saludos
Título: Re: Como se hace un __delay_ms("variable); en xc8??
Publicado por: maxluis en 16 de Junio de 2014, 23:42:08
Estimado Migsantiago: Gracias por responder, estudiaré lo que me ha indicado Ud. Para ver si me es útil en lo que quiero hacer..desde ya gracias ..
maxluis.