👥 Autores


Jesús Camarena

Tabla de contenido

📙 Introducción


📘 Fundamento Teórico


📄 Operadores de Desplazamiento (bit shifting)

Los operadores de desplazamiento son necesarios cuando se quiere manipular los bits de una manera más dinámica, están representados por los siguientes símbolos:

👁️ Ejemplo:

// Bit shift right
0b0001**110** >> 3 = 0b**000**0001 /* (tres zeros fueron agregados a la izquierda y los
bits de la derecha fueron sacados del numero */ 

// Bit shift left
0b**00**001110 << 2 = 0b001110**00** // dos nuevos bits fueron agregados a la derecha 

//The bit-shift roll
           //76543210 bits
1        = 0b00000001 = 0x01
(1 << 0) = 0b00000001
(1 << 1) = 0b00000010
(1 << 5) = 0b00100000
(1 << 7) = 0b10000000

📄Ejemplo en AVR

/*
 * Ej0.c
 *
 * Created: 06/02/2024 08:38:57 a. m.
 * Author : Jesus Camarena
 */ 

#include <avr/io.h>

int main(void) //setup
{           //76543210
    DDRB  = (1<<5);      //bit 5 es una salida
		PORTB = (1<<PORTB5); //bit 5 (PORTB5) esta encendido
            //0b00100000
    while (1) //loop
    {

    }
}

📄 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

🧠 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)