#define PIN_RB0 PORTBbits.RB0void mi funcion ( PIN_RB0);encoder1 = vIniciarEncoder(&PORTB,0);uint8_t puerto = Encoder_t->port |= Encoder_t->mask;pero no me funciona, tampoco sé si el registro PORTB se puede meter en una variable como he hecho, la verdad que se me escapa de mis conocimiento pero me gustaría aprender a manejar esto que lo veo muy útil.#define PIN_RB0 PORTBbits.RB0estamos pasando a la estructura encoder1 el dato del puerto y pin a trabajar por separado, ósea le decimos PORTB por el pin 0.
Donde me estoy trabando ahora es en cómo puedo unir esos dos datos para que sea PORTBbits.RB0.
static struct RotaryEncoder EncoderList[MAX_NUMBER_ENCODERS];
static uint8_t TotalEncoders = 0;
_RotaryEncoder EncoderInit(int8_t *port1, int8_t *port2, int8_t pin1, int8_t pin2, int8_t limite){
// Se superaron la cantidad de Encoders establecidos
if(TotalEncoders >= MAX_NUMBER_ENCODERS )
return 0;
uint8_t indexActual = TotalEncoders;
TotalEncoders++;
EncoderList[indexActual].canal_A = port1;
EncoderList[indexActual].canal_B = port1;
EncoderList[indexActual].mask_A = (1<<pin1);
EncoderList[indexActual].mask_B = (1<<pin2);
EncoderList[indexActual].limit = limite;
return &EncoderList[indexActual]; // Retorna el puerto o puertos y pines que vams a usar
}uint8_t Encoder_Scan(_RotaryEncoder data){
static uint8_t encoder_tick = 0;
static BIT cycle = 0;
static BIT gd = 0; //Variable local
static BIT gi = 0; //Variable local
if((*data->canal_A & data->mask_A) == 1){
gd = 1;
}
if((*data->canal_B & data->mask_B) == 1){
gd = 0;
}
return encoder_tick;
}*data->canal_X & data->mask_X == 1
if(((*data->canal_A & data->mask_A) != 0) && ((*data->canal_B & data->mask_B) != 1){
}
if((*data->canal_C & data->mask_C) == 0){
}
Este pin va a siempre uno, y cuando se activa es cuando baja a 0pin1 = 0b00000001;
pin2 = 0b00000010;
pin3 = 0b00000100;
if((*data->canal_A & mask_A) == pin1); //si queremos usar el pin 0
if((*data->canal_B & mask_B) == pin2); //si queremos usar el pin 1
if((*data->canal_C & mask_C) == pin3); //si queremos usar el pin 3pin1 = 0b00000001;
pin2 = 0b00000010;
pin3 = 0b00000100;
if((*data->canal_A & mask_A) == pin1); //si queremos usar el pin 0
if((*data->canal_B & mask_B) == pin2); //si queremos usar el pin 1
if((*data->canal_C & mask_C) == pin3); //si queremos usar el pin 3