Tabla de contenido

📙 Introducción


📘 Fundamento Teórico


📄 Bitwise logical operators (bit a bit)

Las compuertas lógicas más comunes se encuentran disponibles en el lenguaje C y estas hacen su función lógica bit a bit

//Not bitwise
dato =  0b1001;
dato = ~0b1001;
RES  =  0b0110;
//OR Bitwise
dato =  0b10010101 
      | 0b11110000;
dato =  0b11110101;
//AND Bitwise
dato =  0b10010101 
      & 0b11110000;
dato =  0b10010000;
//XOR Bitwise
dato =  0b10010101 
      ^ 0b11110000;
dato =  0b01100101;

📄Mascaras de bit (bit masking)

Las mascaras de bit son necesarias en el momento que se quiere manipular un solo bit de todo el registro al usar PORTD = (1 << PORTD0); estas encendiendo solo el bit 0 y apagando todos los demás, para evitar esto se utilizan las siguientes operadores lógicos bit a bit (bitwise)

Compuerta_OR_1.1.gif

Mascara con compuerta OR “S1” siempre es “1” sin importar el valor de “A”

Compuerta_OR_2.gif

Mascara con compuerta OR “S2” depende el valor de la entrada “B”

Compuerta_AND_2.gif

Mascara con compuerta AND “S4” siempre es “0” sin importar el valor de “D”

Compuerta_AND_1.gif

Mascara con compuerta AND “S3” depende el valor de la entrada “C”

7 6 5 4 3 2 1 0
PORTX X X X X X X X X
OR 1 1 1 1 0 0 0
Resultado 1 1 1 1 X X X X

PORTX = XXXXXXXX -> PORTX = PORTX | 0b11110000;PORTX = 1111XXXX

7 6 5 4 3 2 1 0
PORTX X X X X X X X X
AND & 1 1 1 1 0 0 0 0
Resultado X X X X 0 0 0 0

PORTX = XXXXXXX -> PORTX = PORTX & 0b11110000;PORTX = XXXX0000

7 6 5 4 3 2 1 0
PORTX 1 1 0 0 0 0 1 1
XOR ^ 1 1 1 1 0 0 0 0
Resultado 0 0 1 1 0 0 1 1

PORTX = PORTX ^ 0b11110000;PORTX = 00110011

Ejemplo en AVR

//leds_init 
                          //(1<<0)
//0bXXXXXXX = 0bXXXXXXX | 0b0000001 = 0bXXXXXX1
 Arduino UNO/NANO
 PD0 -> RX
 PD1 -> TX
         //76543210
 DDRD  = 0b001000**00;**
 DDRD  = 0bXX1XXXXX;
 DDRD  = DDRD | (0b00100000**);**
 DDRD  |= (0b00100000**);**
 DDRD  |= (1<<5**); //set a bit**
 
 Arduino UNO/NANO
 PB6 -> XTAL
 PB7 -> XTAL
 //Declarar el bit 4 del puerto B como entrada
        //765**4**3210
 DDRB = 0b**00**000000;
 DDRB = 0bXX0XXXXX;
 DDRB = DDRB & (0b11101111);
 DDRB &= (0b11101111); -> (1<<5) = 0b00100000
 DDRB &= ~(1<<5); //clear a bit

🧠 Ejercicios


❗Véase también


✔️ Referencias


👁️‍🗨️ Otros temas


📚 Tabla de contenido

🗓️ Semana 4 - 📗 Fundamentos de Programación para Microcontroladores

Diagramas de Flujo y Pseudocódigos

Introducción Lenguaje C para microcontroladores

Introducción Lenguaje Assembler para microcontroladores

Ejecución secuencial de instrucciones en un Microcontrolador

Retardos de tiempo

Operadores de desplazamiento (bit shifting)

Práctica N.º02 - Gestión Secuencial de Salidas

🗓️ Semana 5 - 📗 Lectura de entradas y estructuras condicionales

Macros y etiquetas de texto

Operadores lógicos (bit a bit)

Creación y Uso de Funciones en Microcontroladores

Configuración de entradas y puerto paralelo

Sentencias condicionales con operadores lógicos

Práctica N.º03 - Decodificación de Entradas Binarias

🗓️ Semana 6 - 📗 Estructuras iterativas

Tipos de Display

Control de display 7 segmentos

Custom port

Manejo de Arreglos de Datos

Estructuras iterativas en C

Actividad Fundamental N.º02 - Análisis de arquitectura de microprocesadores

🗓️ Semana 7 - 📗Motores de DC y asesorías de medio curso

Sentencias condicionales y lectura de entradas (1)


📚Programa Académico


Índice programa académico

📕 Fase 1. Introducción a los Microcontroladores y Microprocesadores

📗 Fase 2. Puertos de Entrada y Salida

📙 Fase 3. Periféricos externos

📘 Fase 4. Periféricos internos

📔 Producto integrador de aprendizaje