
Marcel Nahir Samur
PreguntaBuenos días!
Estoy teniendo un problema con la función __delay_ms. Cada que intento ingresar 1000 como valor, me dice que el argumento es muy grande:
main.c:20: error: (1355) inline delay argument too large
Por lo cual he debido crear una función con un bucle for para palear este problema:
#include <xc.h> #include <pic18.h> #include "pic18f4550Configs.h" #define _XTAL_FREQ 8000000 void delayMs ( int x) // Parche para problema con __delay_ms { for ( int i = 0 ; i < x ; i++) { __delay_ms(10); } } void main(void) { TRISB0 = 0; // TRIS se usa para definir si un pin va a ser entrada o salida (0 output / 1 input) while (1) { LATB0 = 1; delayMs(100); LATB0 = 0; delayMs(100); } return; }
¿Alguien ha tenido un problema similar? ¿Como pudieron solucionarlo?
Gracias!

Marcel Nahir Samur
Gracias Omar! La primer solución es que se e¿me había ocurido, la segunda la probaré!
Gracias por la ayuda

Omar Daniel Centeno
¡Hola!
Al parecer no se admiten valores grandes para el delay(). Una solución a esto es utilizar ciclos
for
for (int i=0; i<=10; i++) __delay_ms(100);
Otra forma de solucionarlo es la siguiente:
#define delay_us(x) { unsigned char us; \ us = (x)/(12000000/FOSC)|1; \ while(--us != 0) continue; } void delay_ms(unsigned int ms) { unsigned char i; do { i = 4; do { delay_us(250); } while(--i); } while(--ms);