Anda di halaman 1dari 14

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA


MECÁNICA Y ELÉCTRICA UNIDAD
ZACATENCO

MICROPROCESADORES
PROFESOR: BRAVO LEÓN JOSE LUIS

PRÁCTICA 5.
GRUPO: 6CM1

ALUMNA: PAREDES HERNÁNDEZ KARLA


BOLETA: 2014031020

CDMX, A 29 DE MARZO, 2019


OBJETIVO

Objetivo general de la materia: Diseñar y construir una microcomputadora basada en un


microprocesador moderno, para aplicaciones de cómputo, control industrial,
telecomunicaciones e instrumentación digital.
Objetivo particular:
 Utilizar las herramientas de desarrollo de MPLAB IDE.
 Calcular los tiempos de ejecución de programas
 Modificar la frecuencia por la que trabaja el PIC18F4550
 Inserción de puntos de ruptura (breakpoints)
MARCO TEÓRICO

El programa ensamblador es el programa que realiza la traducción de un programa escrito en


ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que las
instrucciones en ensamblador no son más que nemotécnicos de las instrucciones máquina
que ejecuta directamente la CPU.
Un programa en ensamblador está compuesto por líneas, conteniendo cada una de ellas un
comentario, una única instrucción o una directiva.
En lo que sigue se utilizan los símbolos <> para encerrar un identificador o un número que
el programador debe escribir; los símbolos [] encierran elementos opcionales; los símbolos
{} encierran elementos que se puede escribir consecutivamente varias veces; el carácter |
separa elementos opcionales.
La etiqueta etiq es opcional; si existe debe empezar en la primera columna; si no existe debe
haber por lo menos un espacio en blanco antes el código de operación. El comentario también
es opcional.
No todas las instrucciones tienen dos operandos. Las hay con uno solo, e incluso sin ningún
operando.
Ejemplos:
Etiq1 MOVE.W D0,D1 Copiar el contenido de D0 en D1
ADD.W #3,D2
NEG.W D2
BEQ.S Etiq1
NOP

La inserción de puntos de ruptura (conocidos como breakpoints) permite la inspección de la


condición de todos los registros al llegar a cada punto de ruptura.
Un punto de ruptura (o breakpoint), es una marca que se coloca sobre una o varias
instrucciones de un programa, de forma que la simulación se detiene inmediatamente antes
de la misma. De esta forma, colocando un punto de ruptura en una zona conflictiva del
programa, será posible detener su ejecución y examinar el contenido de la memoria y/o de
los registros, para intentar detectar un posible error. Después podrá continuar normalmente
la ejecución.
El simulador permite localizar cuatro puntos de ruptura, es decir, podemos definir cuatro
puntos distintos, numerados del 1 al 4, asociándoles direcciones de memoria que serán
recordadas por el simulador hasta que termine la sesión. Para asociar un punto de ruptura con
una dirección usaremos la orden:
bk <numero_breakpoint> <dirección_memoria>
Si especificamos como dirección la 0, se borrará el punto de ruptura asociado al número
correspondiente; si se omiten ambos argumentos, se mostrarán por pantalla las direcciones
asociadas a todos los puntos de ruptura activos.
Es importante destacar que al asociar un punto de ruptura a una dirección de memoria, no
modifica para nada el contenido de esa dirección, así mismo un punto de ruptura no es
ninguna instrucción especial, simplemente es un vigía puesto por el simulador a petición del
usuario. Después de la parada podremos examinar el contenido de la memoria o los registros
para ver si se han producido los cambios esperados y continuar la ejecución en el punto en
que se había detenido.

Puertos de Entrada/Salida
• Pines de entrada/salida (I/O) de propósito general
• Mediante ellos, el micro PIC puede monitorizar y controlar otros dispositivos.
• Para añadir flexibilidad al micro, muchos de sus pines de entrada/salida están multiplexados
con funciones alternativas.
•Para la mayoría de los puertos, la dirección del pin I/O es controlada por el registro de
dirección de datos, llamado TRIS. TRISX<n> controla la dirección del pin n del puerto X.
• Un 1 en el registro TRIS indica que el pin es entrada. Un 0 indica que es salida.
El registro PORT funciona como un latch para los datos de salida. Cuando el registro PORT
se lee (Ej, MOVF PORTB,W), el micro lee los niveles presentes en los pines de I/O (no en
los latches). Cuando una función está multiplexada en un pin de I/O de proposito general, la
funcionalidad de un pin puede cambiar para acomodarse a los requisitos del módulo
periférico. Por ejemplo, si un micro tiene un conversor A/D, los pines asociados a este
módulo están configurados en un RESET como entradas analógicas para evitar un consumo
de corriente excesivo en el buffer de dicho pin si este estuviera configurado como entrada
digital y el valor de tensión en el pin estuviera a un nivel intermedio.
EQUIPO Y MATERIAL

 Software de desarrollo MPLAB IDE


 Plantilla forma .ASM
 Manual del PIC 18F4550
 Módulo de 7 segmentos

DESARROLLO

1. Se arma el siguiente circuito

foto
2. Subrutinas
2.1 Se elabora el programa en lenguaje ensamblador de una rutina que despliega una
cuenta ascendente en el módulo de 7 segmentos conectado en el puerto D con
intervalos de 500ms.
2.1.1 De acuerdo al siguiente diagrama de flujo, el programa principal el
programa principal debe considerar el empleo de las siguientes subrutinas
a) C_puertos.- encargada de la configuración de puertos
b) T500.- subrutina de retardo de 500ms.

Programa principal:
Hace el llamado a la rutina de configuración de puertos e
incrementa el contenido del PORTD.
Hace el llamado a la rutina T500 y regresa a incrementar el
valor de PORTD.
C_puertos:
Configura el PORTD para 8
líneas de salida inicialmente
en cero.

T500:
Subrutina de retardo; utiliza tres contadores R0, R1,
R2 para realiza una cuenta descendente desde un valor
inicial de 01FFFF hasta 000000
3. Se realiza la codificación del programa:
3.1 Se abre las ventanas para visualizar el registro PORTD, los registros de memoria
y el Stopwatch a una frecuenci de 48MHz

La frecuencia se modificó en la pestaña Debugger, seleccionando Setting


3.2 Se ejecuta paso a paso hasta el llamado de la subrutina T500, el tiempo de
ejecución transcurrido, el número de ciclos mostrados en la ventana Stopwatch
y el tiempo por cada ciclo de instrucción se observan en la tabla 1.

1.25𝑥10−6
Tiempo por ciclo = = 83.333nS
15

Tiempo de ejecución Número de ciclos Tiempo por ciclo

1.25S 15 83.333nS
Tabla 1
3.3 Se coloca un punto de ruptura en la línea GOTO ETIQ1 y se pone en ceros el contador
de tiempo en el Stopwatch.

3.4 Se ejecuta el programa en modo de animación y se observa los registros de memoria R0,
R1, R2 decrementan en cada ciclo.
3.5 Se ejecuta el resto del programa hasta el punto de la ruptura con el comando run, en la
tabla 2 se observa el número de ciclos de instrucción y el tiempo transcurrido.

16.34325𝑥10−3
Tiempo por ciclo = = 83.333nS
196119

Tiempo de ejecución Número de ciclos Tiempo por ciclo


16.34325mS 196119 83.333nS
Tabla 2
3.6 Con base a los datos obtenidos, se calcula el valor para el registro R0 para obtener un
tiempo de 500mS
500𝑥10−3
R0 = 16.34325𝑥10−3 = 30.59 = 31d = 1Fh

3.7 se remplaza el valor calculado y se comprueba el valor obtenido:

El valor obtenido es: T=506.590750mS


4. Comprobación
Se conecta la tarjeta de desarrollo del PIC18F4550 y se transfiere el código.
CONCLUSIONES

En la realización de esta práctica se visualizó el tiempo de ejecución

REFERENCIAS
 https://silvamondrano.wordpress.com/2010/11/29/4-2-3-modos-de-
direccionamiento/
Consultado el 6 de Marzo, 2019

Anda mungkin juga menyukai