Duda básica HI-TECH C con PIC 16F877A --> __delay_ms(x)

#1
Estimados, quisiera ver si alguien me pudiese responder una duda.
Realicé un programa, para aprender a utilizar el pic, que realiza un "blinkeo" de dos leds alternadamente (RB1 y RB2). Leyendo manuales resultó con el siguiente código:

#include <htc.h>

__CONFIG(HS);

#define _XTAL_FREQ 20000000

void _delay_ms(unsigned long n);

void main(void)
{
TRISB=0;
while(1)
{
RB1=1;
RB2=0;
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
RB1=0;
RB2=1;
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
__delay_ms(25);
}
}

Por qué utilicé tanto delay? Porque al compilar me arrojaba un warning [1355] "inline delay argument too large" que provocaba un desconocimiento de la función __delay_ms(x).

Mi duda es por qué me aparece este error. Descubrí que el programa me resulta al colocar valores menores a 40 para el delay.

Espero sus consejos y recomendaciones (muy novato) :unsure:

Gracias!!
 
#2
Esas son las limitaciones que tiene esa funcion delay. Acepta solo delays pequeños.
Mejor créate una funcion como la que estabas esbozando. Algo asi.
void delay_ms(unsigned int t)
{
while(t--)
__delay_ms(1);
}
Esta te acepta delays de hasta 65536ms.
 

Temas similares

Arriba