Tabla de contenido
<aside> 💡 Entre mas legible es el código mayor es su nivel
</aside>
Es una buena práctica colocar nombres a cada uno de los sensores y actuadores conectados a las entradas y salidas del microcontrolador, con el motivo de mejorar la legibilidad del código esto se puede realizar utilizando constantes por medio de #define
<aside> ℹ️ Es recomendable escribirlas en MAYÚSCULAS
</aside>
/*--pothole_case_naming--*/
#define LEDS_DDRX DDRD
#define LEDS_PORTX PORTD
#define LEDS_1 PORTD1
#define BUTTONS_PINX PINB
//0 a 255
const uint8_t LED_0 = PORTB1;
//-126 a 127
const int8_t SWITCH_0 = PIND0;
/*--camelCase or CamelCase--*/
#define LedsDdrx DDRD
#define LedsPortx PORTD
#define Led1 PORTD1
#define ButtonsPinx PINB
const uint8_t Led0 = PORTB1;
const uint8_t Switch0 = PIND0;
Las macros en programación de microcontroladores son secuencias de instrucciones predefinidas que se utilizan para tareas específicas, definidas mediante la directiva "#define" en C. Eliminan la repetición de código al asignar una secuencia de instrucciones a una palabra clave o símbolo.
Su uso simplifica la escritura de código y reduce la memoria requerida. Además, permiten la optimización del código, ya que el compilador puede expandirlas en el lugar donde se llaman, ahorrando tiempo de ejecución y memoria.
Por ejemplo, en la programación de AVR, se utiliza la macro _BV()
para realizar desplazamientos de bits, simplificando la lectura del código. Sin embargo, una desventaja es que pueden no ser compatibles con otros microcontroladores fuera de la familia AVR, requiriendo su redefinición para su compilación.
<aside> ℹ️ Ver otros ejemplos de macros
</aside>
//--Colocar un bit en 1 sin MACRO
PORTD = 0b00000001; // Carga el numero 0b000000001 al PORTD
PORTD = (1 << 0); // Coloca un 1 en la posicion 0 del registro PORTD
PORTD = (1 << PORTD0); // Coloca un 1 en la posicion PORTD0 del registro PORTD
//--Colocar un bit en 1 con MACRO
PORTD = _BV(0); // Coloca un 1 en la posicion 0 del registro PORTD
PORTD = _BV(PORTD0); // Coloca un 1 en la posicion PORTD0 del registro PORTD
//--SET A BIT--//
PORTX = PORTX | 0b00000001;// Hace una OR entre el PORTX y el numero 0b000000001
//-Colocar un bit en 1 sin afectar a los otros bits
PORTX = PORTX | (1 << PORTX0);
//-Reducido i++ / i = i + 1;
PORTX |= (1 << PORTX0);
//-Macro AVR
PORTX |= _BV(PORTX0);
//--CLEAR A BIT--//
PORTX = PORTX & ~0b0000001;// Hace una AND entre el PORTX y el numero negado
PORTX = PORTX & 0b1111110;//Equivalencia ya negada
//-Colocar un bit en 0 sin afectar a los otros bits
PORTX = PORTX & ~(1 << PORTX1);
//-Reducido
PORTX &= ~(1 << PORTX1);
//-Macro AVR
PORTX &= ~_BV(PORTX1);
//--TOGGLE A BIT--//
PORTX = PORTX ^ 0b00000001;// Hace una AND entre el PORTX y el numero negado
//-Cambia el valor del bit sin afectar a los otros bits
PORTX = PORTX ^ (1 << PORTX1);
//-Reducido
PORTX ^= (1 << PORTX1);
//-Macro AVR
PORTX ^= _BV(PORTX1);
//Etiqueta
LEDS_PORTX |= (1<<LEDS_0)
#define LEDS_0_ON LEDS_PORTX |= (1<<LEDS_0)
#define LEDS_0_OFF LEDS_PORTX &= ~(1<<LEDS_0)
<aside> ⚠️ En lugar de utilizar macros, se recomienda utilizar funciones, plantillas o constantes en lenguaje C++. Estas alternativas son más seguras y fáciles de mantener, y también ofrecen más flexibilidad en términos de gestión de tipos y modularidad del código.
</aside>
📚 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
Sentencias condicionales y lectura de entradas (1)