👥 Autores


Jesús Camarena

Tabla de contenido

🔸 Introducción


Los microcontroladores son dispositivos electrónicos que se utilizan para controlar sistemas y procesos en tiempo real. El comportamiento secuencial de los microcontroladores se refiere a su capacidad para ejecutar instrucciones de manera secuencial y en orden predefinido, lo que les permite llevar a cabo tareas complejas y procesar grandes cantidades de información.

📖 Fundamento Teórico


El microcontrolador lee y ejecuta instrucciones secuencialmente, una tras otra, en función de la dirección de memoria de cada instrucción almacenada en su memoria. Utiliza un contador de programa (PC) para apuntar a la siguiente instrucción, incrementándose después de cada ejecución. Cada instrucción consta de un código de operación y operandos que especifican los datos a procesar. El microcontrolador decodifica las operaciones y accede a los operandos en la memoria. Este proceso continúa hasta que el programa alcanza el final de la secuencia de instrucciones.

Untitled

https://developerhelp.microchip.com/xwiki/bin/view/products/mcu-mpu/8-bit-avr/structure/core/

📘 Procesamiento en serie


El procesamiento en serie implica ejecutar tareas o instrucciones en secuencia, una tras otra, en lugar de de forma simultánea como en el procesamiento en paralelo. Este enfoque se emplea en una amplia gama de aplicaciones, desde la automatización industrial hasta los sistemas embebidos y los dispositivos electrónicos. Por ejemplo, en un sistema de control industrial, las tareas se ejecutan en una secuencia predefinida para controlar el funcionamiento de una línea de producción, al igual que en un dispositivo electrónico como un microcontrolador, donde las instrucciones se ejecutan secuencialmente para controlar su comportamiento.

Untitled

📑 Ejemplo


Se busca encender cada uno de los pines de un puerto por ejemplo:

Untitled

Código ejemplo donde solo se ejecuta una vez y no se puede visualizar físicamente

//" ¡No copies y pegues el código, analízalo e inspirate en el! "

/*************************************************************************
 *   Copyright (C) 2024 Jesús Camarena                                   *
 *   [email protected]                                          *
 *   Licencia: Attribution-NonCommercial-ShareAlike 3.0(CC-BY-NC-SA 3.0) *
 *   <https://creativecommons.org/licenses/by-nc-sa/3.0/>                  *
 *                                                                       * 
 *   Ejemplo:                                                            *
 *   Dispositivo: Atmega328p                                             *
 *   Lenguaje: C                                                         *
 *   Rev: 1.0                                                            *
 *                                                     Fecha: 13/02/24   *
 ************************************************************************/

#include <avr/io.h>

int main(void) // Función principal
{           
    // Configuración del puerto D como salida
    DDRD  = 0b11111111; // 0xFF en hexadecimal
    
    // Secuencia de encendido de los pines del puerto D
    PORTD = 0b00000001; // Enciende el pin 0
    PORTD = 0b00000010; // Enciende el pin 1
		//PORTD = 0b00000011;
    // Bucle infinito
    while (1) // Bucle principal
    {
        // El programa permanece aquí de forma indefinida
    }
}
/*****Encabezado*****/
;//Directivas se escriben con un punto al inicio
;//.INCLUDE "m328pdef.inc" //Archivo ya cargado en el sistema
.CSEG    ; Inicia el segmento de código en memoria flash
.ORG $00 ; Establece la dirección de SRAM en hexadecimal 00 

/*****Configuración*****/
; Configuración de registros
            LDI R16, 0b11111111   ; Carga el número binario 11111111 en R16
            OUT DDRD, R16         ; Deposita el valor de R16 en DDRD, configurando todo el puerto D como salida

            LDI R16, 0b00000001   ; Carga el número binario 00000001 en R16
            OUT PORTD, R16        ; Deposita el valor de R16 en PORTD, encendiendo el pin 0

            LDI R16, 0b00000010   ; Carga el número binario 00000010 en R16
            OUT PORTD, R16        ; Deposita el valor de R16 en PORTD, encendiendo el pin 1

/*****Ejecución*****/
start:                       ; Etiqueta donde se ejecuta el programa (bucle)
            RJMP start       ; Salta a la etiqueta 'start' de nuevo, creando un bucle infinito

📘 Procesamiento en paralelo


El procesamiento en paralelo permite ejecutar múltiples tareas simultáneamente, mejorando la eficiencia y velocidad de procesamiento. Se logra mediante el uso de múltiples procesadores, hilos de ejecución o circuitos especializados como FPGAs y GPUs. Es crucial en áreas que requieren gran poder de cómputo, como la simulación de sistemas complejos y la inteligencia artificial, reduciendo el tiempo de procesamiento y mejorando la capacidad de respuesta de los sistemas informáticos.

Untitled

image.png

📄 Procesamiento en serie vs procesamiento en paralelo


🧠 Ejercicios


❗Véase también


✔️ Referencias


👁️‍🗨️ Otros temas