Autor Tema: Directiva #define  (Leído 2690 veces)

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

Desconectado keydarkman

  • PIC10
  • *
  • Mensajes: 8
Directiva #define
« en: 26 de Junio de 2018, 18:40:49 »
Saludos a todos, una consulta quiero hacer lo siguiente pero me sale error


main.c:

#define PIN RB7

---------------------------------------

unaLibreria.c:

void unafuncion()
{
PIN=0xFF;
}
------------------------------------
unaLibreria.h:

//Prototipo de funcion
void unafuncion();
------------------------------------

desde el main.c quiero definir RB7 como PIN y alterar su valor en unaLibreria.c, como puedo hacer esto, se que puedo poner el #define PIN RB7 en unaLibreria.h pero yo lo quiero poner en main.c, alguna idea porfavor, muchas gracias.

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 209
Re:Directiva #define
« Respuesta #1 en: 26 de Junio de 2018, 19:19:07 »
no decis lo más importante,  el compilador que estás empleando...
justo donde estas entrando,  es una parte non santa (no ansi)  de los diversos compiladores,  y cada uno la trabaja como le piacche.

Desconectado keydarkman

  • PIC10
  • *
  • Mensajes: 8
Re:Directiva #define
« Respuesta #2 en: 26 de Junio de 2018, 19:22:33 »
no decis lo más importante,  el compilador que estás empleando...
justo donde estas entrando,  es una parte non santa (no ansi)  de los diversos compiladores,  y cada uno la trabaja como le piacche.

Mplabx ,XC8

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Directiva #define
« Respuesta #3 en: 26 de Junio de 2018, 21:42:51 »
Asi como usas PORTBbits.RB0 lo necesitas definir asi:


Código: C
  1. #define PIN PORTBbits.RB7

Pero esto es 1 solo bit, asi que asignarle 0xFF no tiene sentido... mejor asi:

Código: C
  1. PIN = 1;
  2. //o
  3. PIN = 0;

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Directiva #define
« Respuesta #4 en: 27 de Junio de 2018, 09:28:07 »
Saludos a todos, una consulta quiero hacer lo siguiente pero me sale error


main.c:

#define PIN RB7

---------------------------------------

unaLibreria.c:

void unafuncion()
{
PIN=0x00;
}
------------------------------------
unaLibreria.h:

//Prototipo de funcion
void unafuncion();
------------------------------------

desde el main.c quiero definir RB7 como PIN y alterar su valor en unaLibreria.c, como puedo hacer esto, se que puedo poner el #define PIN RB7 en unaLibreria.h pero yo lo quiero poner en main.c, alguna idea porfavor, muchas gracias.

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Directiva #define
« Respuesta #5 en: 27 de Junio de 2018, 10:45:08 »
Saludos a todos, una consulta quiero hacer lo siguiente pero me sale error


main.c:

#define PIN RB7

---------------------------------------

unaLibreria.c:

void unafuncion()
{
PIN=0x00;
}
------------------------------------
unaLibreria.h:

//Prototipo de funcion
void unafuncion();
------------------------------------

desde el main.c quiero definir RB7 como PIN y alterar su valor en unaLibreria.c, como puedo hacer esto, se que puedo poner el #define PIN RB7 en unaLibreria.h pero yo lo quiero poner en main.c, alguna idea porfavor, muchas gracias.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:Directiva #define
« Respuesta #6 en: 27 de Junio de 2018, 10:49:37 »
Hola compañero, tienes datos de sobra y te faltan datos.

La definición no está correctamente realizada

#define PIN RB7 no funciona ya que el compilador no entiende que es RB7, lo normal es usar la definición y asignarle un registro como esto
Código: [Seleccionar]
#define PIN TRISBbits.RB7en este define asignamos PIN al registro TRIS que es donde le decimos al compilador si el pin va a ser de entrada o salida

Luego podemos hacer dos cosas o escribimos en el pin para encender o apagar un led, se puede hacer algo así
Código: [Seleccionar]
#define PIN_LED  PORTBits.RB7
O si queremos recibir un dato por el pin se puede hacer algo así
Código: [Seleccionar]
#define PIN_IN LATBbits.LATB7
Ahora una vez definido esto tienes que decir o indicar como se va a comportar el pin si de entrada o salida y luego actuar con el pin, supongamos que quieres encender un led, pues lo primero es configurar el pin

Código: [Seleccionar]
PIN = 0;  //RB7 como salida

PIN_LED = 1; //encendemos el LED del puerto RB7

Listo, espero que me haya explicado bien
« Última modificación: 27 de Junio de 2018, 11:00:11 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Directiva #define
« Respuesta #7 en: 27 de Junio de 2018, 15:19:30 »
Saludos a todos, una consulta quiero hacer lo siguiente pero me sale error

¿ Que error ?.


Citar
desde el main.c quiero definir RB7 como PIN y alterar su valor en unaLibreria.c, como puedo hacer esto, se que puedo poner el #define PIN RB7 en unaLibreria.h pero yo lo quiero poner en main.c, alguna idea porfavor, muchas gracias.

RB7 a palo seco, no parece que te permita referirte a un puerto en XC8. Echando un ojo a la nomenclatura que se usa para ese compilador, deber de ser algo como PORTBbits.RB7 = 0 ó  PORTBbits.RB7 = 1

Si vas a controlar, por ejemplo algo como un Led, es mejor definir la intrucción completa en el define, una para cada estado, lo mismo para los puertos de entrada asignados a un pulsador o similar. Quedaría algo como esto:

Código: C++
  1. #define APAGO_LED1 PORTBbits.RB7 = 0;
  2. #define ENCIENDO_LED1 PORTBbits.RB7 = 1;
  3. #define APAGO_LED2 PORTBbits.RB6 = 0;
  4. #define ENCIENDO_LED2 PORTBbits.RB6 = 1;
  5.  
  6. #define BOTON1_PULSADO PORTBbits.RB0 == 1
  7. #define BOTON2_PULSADO PORTBbits.RB1 == 1
  8.  
  9. main()
  10. {
  11.     TRISB = 0b00000011; // Configuro puerto B
  12.     PORTB = 0b00000000;
  13.  
  14.    if(BOTON1_PULSADO) ENCIENDO_LED1
  15.      else APAGO_LED1
  16.  
  17.    if(BOTON2_PULSADO) ENCIENDO_LED2
  18.      else APAGO_LED2
  19. }




Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Directiva #define
« Respuesta #8 en: 27 de Junio de 2018, 18:47:17 »
Saludos a todos, una consulta quiero hacer lo siguiente pero me sale error

¿ Que error ?.


Citar
desde el main.c quiero definir RB7 como PIN y alterar su valor en unaLibreria.c, como puedo hacer esto, se que puedo poner el #define PIN RB7 en unaLibreria.h pero yo lo quiero poner en main.c, alguna idea porfavor, muchas gracias.

RB7 a palo seco, no parece que te permita referirte a un puerto en XC8. Echando un ojo a la nomenclatura que se usa para ese compilador, deber de ser algo como PORTBbits.RB7 = 0 ó  PORTBbits.RB7 = 1

Si vas a controlar, por ejemplo algo como un Led, es mejor definir la intrucción completa en el define, una para cada estado, lo mismo para los puertos de entrada asignados a un pulsador o similar. Quedaría algo como esto:

Código: C++
  1. #define APAGO_LED1 PORTBbits.RB7 = 0;
  2. #define ENCIENDO_LED1 PORTBbits.RB7 = 1;
  3. #define APAGO_LED2 PORTBbits.RB6 = 0;
  4. #define ENCIENDO_LED2 PORTBbits.RB6 = 1;
  5.  
  6. #define BOTON1_PULSADO PORTBbits.RB0 == 1
  7. #define BOTON2_PULSADO PORTBbits.RB1 == 1
  8.  
  9. main()
  10. {
  11.     TRISB = 0b00000011; // Configuro puerto B
  12.     PORTB = 0b00000000;
  13.  
  14.    if(BOTON1_PULSADO) ENCIENDO_LED1
  15.      else APAGO_LED1
  16.  
  17.    if(BOTON2_PULSADO) ENCIENDO_LED2
  18.      else APAGO_LED2
  19. }
Muchas gracias amigo por tu tiempo pero al parecer no se puede lo que busco, tendré que modificar mi código ya que lo que pretendo hacer va mas alla de unas cuantas líneas de código y explicarlo acá seria muy extenso, y complicado, saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Directiva #define
« Respuesta #9 en: 27 de Junio de 2018, 20:26:38 »
No entiendo nada...

Postea el usuario: keydarkman

Pero responde diciendo gracias : electroipod

O tiene complejo de multiple personalidades, o me perdi en algun punto xD