elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / duda máscara de bits. ATmega en: 15 Junio 2017, 00:16 am
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

Código:
/****************************************************** 
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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines