Tabla de contenido
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
/*
* 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
{
}
}
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
~
(alt + 126) el operador NOT bitwise se encarga de negar todo los bits del registro o dato//Not bitwise
dato = 0b1001;
dato = ~0b1001;
RES = 0b0110;
|
(alt + 124) el operador OR bitwise se encarga de hacer una comparación de bits, si el dato o la or tiene un “1” regresa un “1” como resultado, regresa un “0” como resultado cuando todos son 0//OR Bitwise
dato = 0b10010101
| 0b11110000;
dato = 0b11110101;
AND &
(alt + 38) el operador AND bitwise se encarga de hacer una comparación de bits, si el dato o la or tiene un “1” regresa un “1” como resultado, regresa un “0” como resultado cuando todos son 0
XOR ^
(alt + 94) el operador EXOR bitwise se encarga de regresar un “1” si es que uno de los dos bits son 1
//AND Bitwise
dato = 0b10010101
& 0b11110000;
dato = 0b10010000;
//XOR Bitwise
dato = 0b10010101
^ 0b11110000;
dato = 0b01100101;
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)
Mascara con compuerta OR “S1” siempre es “1” sin importar el valor de “A”
Mascara con compuerta OR “S2” depende el valor de la entrada “B”
Mascara con compuerta AND “S4” siempre es “0” sin importar el valor de “D”
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
📚 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
Operadores de desplazamiento (bit shifting)
Práctica N.º02 - Gestión Secuencial de Salidas
🗓️ Semana 5 - 📗 Lectura de entradas y estructuras condicionales
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
Control de display 7 segmentos
Actividad Fundamental N.º02 - Análisis de arquitectura de microprocesadores
🗓️ Semana 7 - 📗Motores de DC y asesorías de medio curso