Hola, con XC8 yo le di la vuelta con el siguiente código:
Archivo custom_delay.c
/* -----------------------------------------------------------------------------
* 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
#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