Tarea 1
Tarea 1
ESCUELA: INGENIERÍA
TRABAJO DE INVESTIGACION
C.I. 7.567.320
Septiembre 2023
TRABAJO DE INVESTIGACION ACERCA DE PUERTOS DE ENTRADA Y SALIDA , EN
ESTE CASO DE LOS MICROCONTROLADORES PIC ( 16F84 o 16F877A)
3.- Como se configura un puerto por ejemplo el PORTA ( puerto A) como de SALIDAS digitales , y
el puerto PORTB (A) como ENTRADAS analógicas.
Para configurar PORTA como salidas digitales, se utiliza el registro TRISA y se establece en
'0' el bit correspondiente al pin que se desea configurar como salida. Para configurar
PORTB como entradas analógicas, se utiliza el registro ANSELB y se establece en '1' el bit
correspondiente al pin que se desea configurar como entrada analógica. Además, se debe
establecer en '0' el bit correspondiente en TRISB para habilitar la entrada digital del pin .
4.-Como se configura un puerto por ejemplo el PORTB ( puerto B) como de entradas digitales , y
el puerto PORTA ( A) como entradas analógicas.
Para configurar el PORTB como entradas digitales, se establece en '1' el bit
correspondiente en el registro TRISB. Esto indica que los pines del PORTB se configuran
como entradas. Además, se debe asegurar que los bits correspondientes en el registro
ANSELB estén configurados en '0' para deshabilitar las entradas analógicas en esos pines.
Para configurar el PORTA como entradas analógicas, se establece en '1' el bit
correspondiente en el registro ANSELA. Esto habilita la funcionalidad analógica en los
pines del PORTA. Luego, se deben configurar los bits correspondientes en el registro TRISA
en '1' para habilitar las entradas analógicas y permitir que los pines funcionen como
entradas digitales.
5.-Como se configura un puerto o determinan los Pines de este como Entradas digitales , y
determinados Pines como Salidas digitales.
Para configurar un puerto como entradas o salidas digitales en un microcontrolador PIC,
se debe utilizar el registro TRIS correspondiente al puerto deseado. Para configurar un pin
como entrada digital, se establece el bit correspondiente en '1' en el registro TRIS. Para
configurar un pin como salida digital, se establece el bit correspondiente en '0' en el
registro TRIS. Es importante consultar la hoja de datos del microcontrolador para conocer
los registros específicos y la ubicación de los pines en el puerto que se desea configurar.
Usando un 16F877A.
Para configurar los pines según tus especificaciones en un microcontrolador PIC 16F877A
usando C++, puedes utilizar el siguiente código:
```cpp
#include <xc.h> // Incluir la librería específica del microcontrolador
void setup() {
TRISA = 0b11111110; // Configurar A0 como salida digital y A1 como entrada digital
TRISB = 0b00001100; // Configurar B1 y B2 como salidas digitales, y B4, B5, B6 y B7
como salidas digitales
}
void loop() {
// Aquí puedes agregar el código para realizar las operaciones deseadas en los pines
configurados
}
```
7.-Investigar, desarrollar en su propia redacción.
a.-Desarrolle y conceptualice : Como se lleva a cabo el proceso de Traducción del Lenguaje C++
(Lenguaje de alto nivel) utilizado para realizar la programación por el usuario, al Lenguaje Binario
que será utilizado finalmente para ser cargado al Procesador / Controlador ( Explique de forma
detallada y en redacción propia)
a) El proceso de traducción del lenguaje C++ (lenguaje de alto nivel) al lenguaje binario
utilizado por el procesador/controlador consta de varias etapas. A continuación, se detalla
cada una de ellas:
1. Preprocesamiento: En esta etapa, el preprocesador examina el código fuente en C++ y
realiza varias tareas, como la inclusión de archivos de encabezado (#include), la expansión
de macros y la eliminación de comentarios. El resultado es un código fuente modificado
que será utilizado en las etapas posteriores.
2. Compilación: El compilador toma el código fuente preprocesado y lo traduce a un
código en lenguaje ensamblador específico para la arquitectura del
procesador/controlador objetivo. Durante esta etapa, se realizan análisis léxicos y
sintácticos para verificar la corrección gramatical del código y se generan archivos objeto
(.obj) que contienen instrucciones en lenguaje ensamblador.
3. Ensamblado: El ensamblador toma los archivos objeto generados en la etapa anterior y
los traduce a lenguaje binario entendible por el procesador/controlador. Cada instrucción
en lenguaje ensamblador se convierte en una secuencia de bits que representa una
operación específica que el procesador/controlador puede ejecutar.
4. Vinculación: Si el programa está compuesto por múltiples archivos fuente, es necesario
vincularlos en esta etapa. El vinculador combina los diferentes archivos objeto y resuelve
las referencias cruzadas entre ellos para generar un único archivo ejecutable (.exe) o un
archivo binario final que pueda ser cargado al procesador/controlador.
5. Carga: En esta etapa, el archivo binario final generado en la etapa anterior se transfiere
al procesador/controlador. Esto puede implicar la programación de una memoria flash o
EEPROM en el caso de microcontroladores, o la carga del archivo ejecutable en la
memoria del sistema en el caso de computadoras.
Una vez que el lenguaje binario está cargado en el procesador/controlador, este puede
ejecutar las instrucciones de manera secuencial, realizando las operaciones definidas por
el programa en lenguaje C++. Es importante destacar que este proceso de traducción se
realiza utilizando herramientas como un compilador C++ y un ensamblador específico para
la arquitectura del procesador/controlador objetivo.
b.-Investigue y Explique a que se refiere la Segmentación de Instrucciones: (Pipelining). Con
ejemplos en ASM (Assembly)
b) La segmentación de instrucciones, también conocida como pipelining, es una técnica
utilizada en los procesadores para mejorar la eficiencia y el rendimiento al ejecutar
instrucciones de manera simultánea y en paralelo.
En un procesador con segmentación de instrucciones, el flujo de ejecución se divide en
etapas o segmentos, y cada etapa se encarga de realizar una parte específica del
procesamiento de la instrucción. A medida que una instrucción avanza a través de las
etapas, se permite que nuevas instrucciones ingresen al pipeline y se ejecuten en paralelo.
Las etapas típicas en un pipeline son:
1. Fetch (Obtención): La siguiente instrucción se obtiene desde la memoria principal o la
caché de instrucciones.
2. Decode (Decodificación): La instrucción se decodifica y se determina qué operación
debe realizar.
3. Execute (Ejecución): La operación de la instrucción se lleva a cabo, como realizar una
suma o una operación lógica.
4. Memory Access (Acceso a memoria): Si es necesario, se accede a la memoria para leer o
escribir datos.
5. Write Back (Escritura): El resultado de la operación se escribe en el registro o en la
memoria si es necesario.
Un ejemplo sencillo en lenguaje ensamblador x86 podría ser el siguiente:
```assembly
add eax, ebx
sub ecx, edx
```
En un pipeline de cinco etapas, los pasos para estas dos instrucciones serían:
1. Fetch: Se obtiene la primera instrucción `add eax, ebx` desde la memoria.
2. Decode: La instrucción se decodifica y se identifica como una operación de suma entre
los registros `eax` y `ebx`.
3. Execute: Se realiza la suma de los valores contenidos en `eax` y `ebx`.
4. Memory Access: No es necesario en este caso.
5. Write Back: El resultado de la suma se escribe en el registro `eax`.
Por otro lado, el uso del lenguaje ensamblador también tiene sus ventajas:
1. Control total del hardware: El lenguaje ensamblador permite un control más preciso y
directo sobre el hardware del microcontrolador/microprocesador. Esto puede ser
necesario en situaciones donde se requiera un rendimiento o una optimización específica.
2. Tamaño y eficiencia del código: El código escrito en ensamblador puede ser más
compacto y eficiente en términos de uso de recursos de memoria y velocidad de
ejecución. Esto puede ser crítico en aplicaciones con limitaciones de recursos o en
situaciones donde cada ciclo de reloj cuenta.