Ing. en Sistemas Computacionales Sistemas Programables
Ing. en Sistemas Computacionales Sistemas Programables
Ing. en Sistemas Computacionales Sistemas Programables
En sistemas Computacionales
Sistemas Programables
Practica 1
Uso de subrutinas
Por:
Oppai Dragons:
Maestro:
Javier Silvestre Zavala
23/septiembre/2019
Objetivo
1 programador de PIC
1 microcontrolador PIC 16F84A
1 cristal de cuarzo de 4 MHz
2 capacitores cerámicos de 22pF
1 resistor de 1KΩ
7 resistor de 220Ω
7 LEDS
1 protoboard
Proteus 8 Professional
MPLAB IDE
Sustento teórico
Una subrutina en el lenguaje ensamblador del microcontrolador PIC 16F84A, es un
fragmento de programa que ejecuta alguna tarea concreta que a menudo es repetitiva, y
que para ahorrar memoria y hacer el programa más legible, se hace uso de ellas. Una
subrutina se ejecuta llamándola con la instrucción CALL, siendo necesario poner al final
de ella la instrucción RETURN para que regrese al punto de donde se le llamó después
de ejecutarse.
En el siguiente fragmento de programa se muestra el uso de las subrutinas. Como
podemos ver en la etiqueta INICIO en la segunda instrucción se llama a la subrutina
ESPERA. Por lo tanto, el programa realiza el salto a esa etiqueta y ejecuta el código que
encuentra ahí. Cuando termina de ejecutarse el código de la subrutina se coloca la
instrucción RETURN, que hace que el programa regrese a la tercera línea de la etiqueta
INICIO.
En la fig. se muestra el diagrama de flujo del programa cuyo código se exhibe en el punto
1 del procedimiento de la práctica.
El PIC16F84 es un microcontrolador de 8
bits programable el cual contiene todos
los componentes para poder realizar una
tarea.
Tiene una arquitectura de 8 bits y 18
pines. Consta de:
Procedimiento
Para ejecutar el código, se pasó al programa MPLAB y el diseño del circuito se diseñó en
PROTEUS 8 PROFESSIONAL.
1. El siguiente código fue copiado en el programa MPLAB
.
;
########################################################################
################### ; PRÁCTICA 1. USO DE SUBRUTINAS
;ESTE PROGRAMA MUESTRA EL USO DE SUBRUTINAS. SU FUNCIÓN ES LA
REALIZACIÓN
;DE LA SUMA Y LA RESTA DE DOS VALORES PREVIAMENTE CARGADOS EN EL
PROGRAMA.
;EL VALOR DE LA SUMA Y LA RESTA SE MUESTRAN ALTERNATIVAMENTE
DURANTE UN
;LAPSO DE TIEMPO DE LA MISMA DURACIÓN.
;#######################################################################
####################
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;
########################################################################
################### ; Declaración de variables
;#######################################################################
####################
DATO1 EQU 0CH ;En Dato1 y Dato2 se guardan los valores que ;se sumarán y
restarán
DATO2 EQU 0DH
RET1 EQU 0EH ;Ret 1 y Ret2 son variables usadas para el retardo
RET2 EQU 0FH
;#######################################################################
####################
;
########################################################################
################### ;CONFIGURACIÓN DE LOS PUERTOS
;#######################################################################
####################
ORG 00H
BSF STATUS,RP0 ;Nos cambiamos al banco 1
MOVLW 0X00 ;Cargamos W con 0s
MOVWF TRISB ;Configuramos PORTB como salidas
BCF STATUS,RP0 ;Nos regresamos al banco 0
;
########################################################################
###################
GOTO INICIO
5.1.- Las salidas del PIC de RB0 a RB6 se conectan resistencias de 220 ohm con unos
LEDS. Estos nos mostraron el resultado de la suma y resta.
5.2 Los dos capacitores son conectados a tierra y al cristal de cuarzo, y el cuarzo se
conectan a los pines del oscilador (OSC1 y OSC2) representando la señal de reloj que
entra y sale.
5.3.- Al pin 4 que es la entrada de voltaje se le conecta una resistencia de 1K.
6.- ¿Qué pasaría si no escribimos la línea INCLUDE <P16F84A.INC> en el
programa?, ¿Por qué?
El programa no se ejecutaría, ya que no está reconociendo a que componente darle las
instrucciones, esa línea indica sobre que microcontrolador se está trabajando.
7.- Si no existiera la subrutina de RETARDO, ¿qué resultados arrojaría la
simulación?
El programa se ejecutaría tan rápido que no se mostrarían los resultados, ya que no se
espera a que termine la instrucción cuando ya está ejecutando la otra.
8.- El circuito lo que hace es hacer una suma y una resta y repetidamente alternan los
valores entre una y otra.
El circuito es fácil de realizar, ya que solo es conectar los pines de entrada y salida donde
corresponden, una vez teniendo el circuito funcional en virtual es más fácil pasarlo a
físico. La parte complicada fue pasar el código al editor de texto de MPLAB ya que había
que agregar ciertas líneas para hacer que funcionara correctamente. Hay que hacer las
cosas con cuidado porque por un fallo no se sabe si es por mal funcionamiento del circuito
o si es el fallo es del código.
Actividades complementarias
Realice un programa en lenguaje ensamblador para el microcontrolador PIC 16F84A que
encienda en secuencia tres LEDS conectados en los pines RB0, RB1 y RB2 del puerto B
del microcontrolador. La secuencia será la siguiente: 100, 010, 001, 100, 010, ….. Cada
LED durará encendido cierto tiempo (puede usar la rutina de retardo empleada en el
programa de ejemplo). Escriba el programa correspondiente y repita los pasos 2 a 5 de la
práctica.
Resultados
Conclusión
Al querer pasar el código a MPLAB se tuvieron dificultades primeramente con el tipo de
archivo que se debía de guardar, ya que no lográbamos hacer que leyera el archivo.
Cuando se trataba de ensamblar el programa se marcaban varios errores en el código
que eran líneas de más que se iban a la hora de copiar o líneas que faltaban para que
pudiera funcionar. La primera vez que se logró quemar, no se daban los resultados
esperados en el circuito físico, así que se tuvo que requemar y de esta manera ya
funcionó.
Con está practica se entendió un poco mejor el uso de las subrutinas y las aplicaciones
que estas pueden tomar, así como el uso de la PIC y los usos que está puede dar. Las
subrutinas son importantes para realizar tareas repetitivas que puedan consumir más
memoria de lo que se espera y de esta manera solo mandarlas llamar sin necesidad de
tener que volver a hacer todo el procedimiento que esta conlleva.
Referencias Bibliográficas
• Mano, Morris M y Charles R. Kime (2da. Edicion)
Logic and computer design fundamentals
Prentice Hall.
• Stallings, William
Organización y arquitectura de computadoras
Pearson