Hola.
Tengo un código hecho en c del cuál hay unas líneas que no se como interpretarlo.
El código es el siguiente
Hay unas líneas que no se como funcionan, se que son máscaras de bits pero no se como funcionan realmente.
Por ejemplo,
if (!(PINB&(1<<PB1))) ---> si... qué?
EICRA &= ~(_BV(ISC00) | _BV(ISC01)) --> no se que valor se guarda en EICRA
Agradecería toda ayuda
Tengo un código hecho en c del cuál hay unas líneas que no se como interpretarlo.
El código es el siguiente
Código [Seleccionar]
/******************************************************
Programa para gestion de pulsadores por interrupcion ******************************************************/
#include <avr/interrupt.h> /* Tipo bits para acceso a nivel de bit en GCC */
typedef struct{
uint8_t b0:1;
uint8_t b1:1;
uint8_t b2:1;
uint8_t b3:1;
uint8_t b4:1;
uint8_t b5:1;
uint8_t b6:1;
uint8_t b7:1; } bits;
//Definicion de entradas
#define Tecla_SW5 (* (volatile bits *) &PIND).b5
//variables globales unsigned volatile char tecla;
// Rutina de tratamiento de interrupción externa
ISR(INT0_vect) {
if (!(PINB&(1<<PB1))) tecla=0x01;
else if (!(PINB&(1<<PB2))) tecla=0x02;
else if (!(PINB&(1<<PB3))) tecla=0x03;
else if (!(PINB&(1<<PB4))) tecla=0x04;
else tecla=0x05; // Apaga si se pulsan varias teclas
EIFR|=_BV(INT0); //Opcional, Bajamos la bandera de interrupción
}
unsigned char Siete_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x00};
/**********************************************************
Rutina de inicio. (habilita interrupciones y INT EXT) **********************************************************/
void setup() {
DDRC=0xFF; //Puerto C como salida
DDRB=0x00; //Puerto B como entradas
PORTB=0xFF; // Activa pull-up
DDRD=0x00; //Puerto D como entradas
PORTD=0xFF; // Activa pull-up
tecla=0; //Habilita int flanco ascendente
EICRA &= ~(_BV(ISC00) | _BV(ISC01)); // Habilita interrupcion externa en patilla PD2 EIMSK|=_BV(INT0); }
void loop() {
PORTC=~Siete_seg[tecla]; //Codifica para mostrar el digito
if (!Tecla_SW5) tecla=0x00; // Saca un cero
}
Hay unas líneas que no se como funcionan, se que son máscaras de bits pero no se como funcionan realmente.
Por ejemplo,
if (!(PINB&(1<<PB1))) ---> si... qué?
EICRA &= ~(_BV(ISC00) | _BV(ISC01)) --> no se que valor se guarda en EICRA
Agradecería toda ayuda