Espero que puedas imaginar el proceso de obtener una instrucción de la dirección de memoria señalada por el Contador del programa y ponerla en el Registro de instrucciones. Desde el registro de instrucciones, se alimentan varios campos para decodificar y registrar bancos.
Suponga que la instrucción 0x1234 significa AGREGAR R3, R4. El valor 12 es el código operativo, que se alimenta a un decodificador que genera un conjunto de habilitaciones. La decodificación puede ser tan simple como una ROM. Los 3 y 4 se alimentan a las dos direcciones de lectura del banco de registro, lo que hace que R3 y R4 se seleccionen de él. La ALU se habilita en modo de suma para que el contenido de estos dos registros se alimente a la ALU de modo que, a su debido tiempo, la suma aparezca en su salida. Mientras tanto, el valor 3 se coloca en un pestillo de retención, junto con un bit de habilitación de escritura. Esto significa que en el siguiente reloj, la salida de la ALU se escribirá en el banco de registro en la ubicación 3. Mientras todo esto está sucediendo, la PC se alimenta a un incrementador, que se retroalimenta, para que la PC avanza por uno.
Ahora suponga que 0x2143 significa SALTO 0x43. El decodificador deja el ALU y se registra en paz. En cambio, apaga el incrementador y lo reemplaza por los bits inferiores de la instrucción. Esto significa que, en lugar de que la PC pase a la siguiente ubicación, se reemplaza por el destino del salto. Por supuesto, es fácil hacer que esta conversión esté condicionada a algún resultado retenido de una operación ALU anterior.
- ¿Cuáles son las habilidades necesarias para ser un ingeniero de firmware exitoso?
- ¿Cuál es el sistema integrado más barato?
- ¿Por qué preferimos un ciclo while en sistemas embebidos?
- ¿Cuáles son los pasos necesarios para desarrollar firmware integrado?
- ¿Cómo debo comenzar con la programación del microcontrolador 8051? ¿Alguien puede dirigirme a programas 8051 simples?
La tercera operación que necesita es cargar / almacenar. En lugar de alimentar el contenido del registro a la ALU, los alimenta al bus de direcciones y luego configura la dirección de escritura diferida exactamente como la adición, excepto que la fuente de datos es el bus de datos y no la salida de ALU, y tiene carga. Para almacenar, simplemente alimente un registro al bus de direcciones y otro al bus de datos, y fuerce un ciclo wrie en el bus.
Con carga, almacenamiento, aritmética y salto condicional, tiene todo lo que necesita para programar. Lejos te vas