Autor Tema: duda máscara de bits. ATmega  (Leído 145 veces)

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

Desconectado kotito

  • PIC10
  • *
  • Mensajes: 5
duda máscara de bits. ATmega
« en: 14 de Junio de 2017, 19:18:58 »
Hola.

Tengo un código hecho en c para arduino 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

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 139
Re:duda máscara de bits. ATmega
« Respuesta #1 en: 15 de Junio de 2017, 03:49:07 »
Je je....   Hasta el dia de la fecha me sigue causando urticaria ver los códigos C de programación de los AVR... 
Los programadores de AVR sufren de ésta tendencia hacia la criptografía en aras de "lograr"  un código C Ansi...

Pegale una leida a la siguente página y despejará esas dudas que tenés.

http://efundies.com/avr-port-input-logic/

Tambien te recomiendo leas el PDF de Felixls,  un tutorial de programacion en C de los AVR.  Anda dando vuelta por el foro.

PD:
http://www.avrfreaks.net/forum/tut-c-bit-manipulation-aka-programming-101?page=all
« Última modificación: 15 de Junio de 2017, 03:55:44 por AleSergi »

Desconectado fandiño

  • PIC10
  • *
  • Mensajes: 12
Re:duda máscara de bits. ATmega
« Respuesta #2 en: 24 de Junio de 2017, 22:22:11 »
Je je....   Hasta el dia de la fecha me sigue causando urticaria ver los códigos C de programación de los AVR... 
Los programadores de AVR sufren de ésta tendencia hacia la criptografía en aras de "lograr"  un código C Ansi...

Pegale una leida a la siguente página y despejará esas dudas que tenés.

http://efundies.com/avr-port-input-logic/

Tambien te recomiendo leas el PDF de Felixls,  un tutorial de programacion en C de los AVR.  Anda dando vuelta por el foro.

PD:
http://www.avrfreaks.net/forum/tut-c-bit-manipulation-aka-programming-101?page=all

puede ser, sin embargo el trabajar con los registros directamente ayuda a entender como funciona el microcontrolador. es una buena práctica. cuando era niño odie el lenguaje assembler y el lenguaje c porque me parecían muy feos. siempre decía que basic era lo mejor y que algún día haría un plan para hacer que basic dominara el mundo