Autor Tema: Como se hace un __delay_ms("variable); en xc8??  (Leído 2405 veces)

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

Desconectado maxluis

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Como se hace un __delay_ms("variable); en xc8??
« 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.


Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Como se hace un __delay_ms("variable); en xc8??
« Respuesta #1 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!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Como se hace un __delay_ms("variable); en xc8??
« Respuesta #2 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

Desconectado maxluis

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: Como se hace un __delay_ms("variable); en xc8??
« Respuesta #3 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.


 

anything