Error: _delay_ms no declarado al programar en MPLAB X IDE [cerrado]

-2

Soy nuevo en el mundo de los microcontroladores. ¿Puede alguien ayudarme con esto? Estoy intentando hacer parpadear mi LED en dsPIC33EP512MU810 con el compilador MPLAB X IDE y X16.

Mi código:

#define _XTAL_FREQ 8000000
#include xc.h
#include p33EP512MU810.h
#include libpic30.h
void main() {

TRISBbits.TRISB0 = 0;//RB0 as Output PIN

while(1) {

LATBbits.LATB0=1;  // LED ON
__delay_ms(1000); // 1 Second Delay
 LATBbits.LATB0=0;  // LED OFF
__delay_ms(1000); // 1 Second Delay
} }

En su lugar, ahora muestra una referencia indefinida a '_delay_ms.Ya he incluido los archivos de encabezado para el dispositivo y "xc.h".

He creado el proyecto solo para comprobar si el código funciona o no. Todavía no he hecho las conexiones de hardware necesarias en los pines. ¿Alguien puede dar sugerencias?

Sí. Ya he incluido el archivo de encabezado de antemano. Ahora, no muestra el error anterior. Lo he corregido:

void main() 
{

TRISBbits.TRISB0 = 0;//RB0 as Output PIN

while(1)
  {

    LATBbits.LATB0=1;  // LED ON
    __delay_ms(1000); // 1 Second Delay
     LATBbits.LATB0=0;  // LED OFF
    __delay_ms(1000); // 1 Second Delay
  }
  }

En vez de eso, ahora muestra una referencia indefinida a '_delay_ms.Ya he incluido los archivos de encabezado para el dispositivo y "xc.h". He creado el proyecto solo para verificar si el código funciona o no. Aún no he terminado. las conexiones de hardware necesarias en los pines. ¿Alguien puede dar sugerencias? Gracias

    
pregunta Inquisitive

2 respuestas

3

Utilice PORTBbits.RB0 . RB0 es el nombre del pin, no el nombre de un registro o un bit en un registro.

Hay una macro diferente disponible para acceder directamente a ese bit, que es _RB0 si quieres usar la taquigrafía.

#define _RB0 PORTBbits.RB0

(Creo que esto puede haber sido un cambio entre C24 y XC16).

    
respondido por el Majenko
2

Debe definir la frecuencia de reloj de la siguiente manera:

#define _XTAL_FREQ 8000000UL

o como:

#define FCY 8000000UL

Yo uso la última definición. Prueba con ambos.

Otra cosa: necesita configurar RB0 como pin digital, está configurado como analógico por defecto. Aquí está el código de trabajo completo:

#include <xc.h>

#define FCY 8000000UL
#include <libpic30.h>

int main(void) {

    ANSELBbits.ANSB0 = 0; // RB0 is digital
    LATBbits.LATB0 = 0; // RB0 is low
    TRISBbits.TRISB0 = 0; // RB0 is output

    while(1) {
        LATBbits.LATB0 = 1; // LED ON
        __delay_ms(1000);
        LATBbits.LATB0 = 0; // LED OFF
        __delay_ms(1000);
    }

    return 0;
}
    
respondido por el Marko Gulin

Lea otras preguntas en las etiquetas