👥 Autores


Jesús Camarena


Tabla de contenido

🔸 Introducción

📘Fundamento Teórico


📖 Texto para definir nombres de pines


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

📑 Ejemplo etiquetas:

/*--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;

📖 Macros más utilizadas para AVR en C


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>

📑 Ejemplo:

//--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>

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