Ayuda con arreglo, o vector en C que se corresponda con puertos.

#1
Hola gente, como andan?
Estoy intentando definir un vector o arreglo en C cuyas posiciones se correspondan con algunos puertos de un pic.

Es decir, el puerto A que tome el valor de vector[0] y a la ves que vector[0] tenga un nombre en particular.

Lo quiero usar para prender y apagar luces y me gustaria poder llamar al vector para poder modificar los estados de todas las luces y poder llamar por separado a cada luz por su adjetivo, ya sea luz1 o luzgarage, en lugar de llamar por su posicion el vector. Espero que se me comprenda.

Basicamente lo que yo intente fue lo siguiente, pero aparentemente no es valido.

Código:
char reles[10];

#define luz1		RC5
#define reles[0]	luz1
y tambien

Código:
char reles[10];

#define luz1		RC5
#define reles[0]	RC5
Bueno eso es todo, si a alguien se le ocurre alguna manera es bienvenida.
Saludos
 
Última edición:
#2
Estoy casi seguro que definir un vector o una variable no es valido:

Código:
#define reles[0]	 RC5
Pero lo que podrias hacer es esto, supongamos que el puerto A y esta compuesto de 8 bits A0-A7, podrias hacer este define:

Código:
#define a0	 0
#define a1	 1
....
Entonces despues cuando quieras encender un led, haces esto:

Código:
...
reles[a0]=1;
reles[a1]=1;
...
Y despues tendras que trasladar eso al puerto A.
 
#3
Que tal si usas Arrays + Enumeraciones

Código:
enum Color{Rojo, Verde};
...
...
LEDs[Rojo] = 1;
LEDs[Verde] = 0;
luego lo pones al puerto.

otra es usando estructuras

Código:
struct Dat{
    boolean Rojo;
    boolean Verde;
    int :6;
}LEDs;
...
...
LEDs.Rojo = 1;
Pero que C estás usando? si es el CCS tiene una manera fácil de decirle que la estructura creada sea los pines de un puerto, de esa manera al modificar algo de una estructura se estará modificando directamente al puerto, ... si vez la librería del LCD, FlexLCD te vas a dar cuenta.

Saludos...
 
#4
Estoy usando el compilador Hi-Tech C18, me parece mejor que ccs ya que es ANSI C
Saludos. Si alguien tiene alguna idea comporbada bienvenida sea..saludos
Gonzalo
 
#5
el puerto A que tome el valor de vector[0] y a la ves que vector[0] tenga un nombre en particular.
Seria así:
Código:
char vector[5];
#define VectorA vector[0]
...
...
PORTA = VectorA;
llamar por separado a cada luz por su adjetivo, ya sea luz1 o luzgarage, en lugar de llamar por su posicion el vector
Recuerda que el arreglo definido es del tipo char (8 bits), así que para usar individualmente cada bit no es tan simple, por ejemplo para encender el bit 0:
Código:
#define Luz1 0
#define vector reles[0]
...
...
vector = 1 << Luz1;
PORTB = vector;
O también hacerlo en una macro.

Pero todo junto, lo veo imposible, tendrías que hacer una estructura e intentar hacer que dicha estructura sea un puerto en especial, entonces cuando modifiques la estructura también lo hará el puerto, ojo que la estructura también puede ser un arreglo o hacer un nuevo tipo con la estructura.
:D Estoy volando un poco, luego veo si hay más opciones...

Saludos.
 
Arriba