Está en la página 1de 6

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORES
GUIA DE LABORATORIO
ECP 1 de 6

I. TEMA : PROCEDIMIENTOS EN EL PIC 16F84A


II. OBJETIVOS
El estudiante al finalizar la prctica ser capaz de:
1. Explicar el mecanismo de funcionamiento de los procedimientos en el lenguaje
ensamblador del PIC 16F84A.
2. Escribir programas utilizando procedimientos en el lenguaje ensamblador del PIC
16F84A.
III. MATERIALES NECESARIOS
Para el desarrollo de la presente prctica, es necesario:
1. IDE MPLAB versin 8.x o superior.
IV. TRABAJO PREPARATORIO
El estudiante deber:
1. Tener conocimiento de la arquitectura del microcontrolador 16F84A
2. Conocer el uso del IDE MPLAB para el desarrollo de aplicaciones en el lenguaje
ensamblador del microcontrolador 16F84A.
V. MARCO TEORICO
En la presente prctica, estudiaremos la forma en que el PIC 16F84A da soporte a los
procedimientos.
PROCEDIMIENTOS
Un procedimiento es un modulo de software que puede ser referenciado desde otro
programa.
La ventaja de que un procesador soporte procedimientos, es que este permitir la
programacin modular y la reutilizacin de cdigo.
Para que un procesador permita el uso de procedimientos, este debe implementar una
memoria pila, pues esta es la base para implementar las instrucciones de llamada a
procedimientos y el retorno de los procedimientos al programa principal. La memoria
pila se utiliza para almacenar la direccin de retorno del programa principal, antes de
iniciar la ejecucin del modulo invocado y se utiliza para volver al programa principal y
continuar la ejecucin de la instruccin que sigue a la llamada al procedimiento antes
indicado.

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


MICROPROCESADORES
GUIA DE LABORATORIO
ECP 2 de 6

El PIC 16F84A cuenta con una memoria pila de 8 palabras de 13 bits, la cual se
encuentra fuera del espacio de memoria para los programas o los datos como puede
verse en el siguiente grfico que muestra la arquitectura de mencionado micro
controlador

Las instrucciones que pone a nuestra disposicin el PIC 16F84A, para el manejo de
procedimientos se documentan a continuacin:
INSTRUCCIN DE LLAMADA A PROCEDIMIENTOS
CALL
Sintaxis

call k

Call Subroutine
Operandos

Operacin

Indicadores

0 k 2047

PC + 1 => TOS
k => PC[10:0]
PCLATH[4:3] => PC[12:11]

Ninguno

Apila en la cima de la pila 'PC+1', salta incondicionalmente hacia la etiqueta 'k'.

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


MICROPROCESADORES
GUIA DE LABORATORIO
ECP 3 de 6

INSTRUCCIONES DE RETORNO DE PROCEDIMIENTO

RETURN
Sintaxis
return

Return from Subroutine


Operandos

Operacin

Indicadores

ninguno

TOS => PC

Ninguno

Operandos

Operacin

Indicadores

0 k 255

k => W
TOS => PC

Ninguno

Carga la cima de la pila en el contador de programa.

RETLW
Sintaxis
retlw k

Return with Literal in W

Mueve los 8 bits del literal 'k' al registro de trabajo 'W' y retorna de subprograma.

VI. DESARROLLO DE LA PRACTICA


1. Escriba un programa modular que calcule el cubo de un numero entero menor a 6
Solucin
;****************************************************** *
;* Nombre
: apCalcularCubo.asm
*
;* Proposito
: Calcula el cubo de un numero
*
;* Autor
: Edwin Carrasco
*
;* FCreacion
: 08/09/2009
*
;* FModificacion : ------*
;****************************************************** *
LIST P=16f84a
INCLUDE <p16f84a.inc>
CBLOCK 0x0c
primerNro
segundoNro
producto
contador
ENDC
ORG 0

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


MICROPROCESADORES
GUIA DE LABORATORIO
ECP 4 de 6

;Programa principal
inicio
movlw
movwf
movwf
call
movf
movwf
call
goto

.5
primerNro
segundoNro
procAxB
producto, W
segundoNro
procAxB
$

;
;
;
;
;
;
;

W <-- literal
primerNro <-- W
segundoNro <-- W
calcula N*N
W <-- N*N
segundoNro <-- N*N
calcula N*N*N

; Procedimiento que multiplica dos nmeros mediante el


; algoritmo :
A x B = A + A + A + + A (B veces)
procAxB
clrf
movf
movwf
movf

producto
primerNro, W
contador
segundoNro, W

loop
addwf producto, F
decfsz contador, F
goto loop
return
end

;
;
;
;

producto <-- 0
W <-- primerNro
contador <- primerNro
W <-- segundoNro;

;
;
;
;
;

producto <-- producto + W


contador-if (contador > 0)
then goto loop
else return

2. Escriba un programa modular que calcule el producto de dos nmeros de 8 bits. La


operacin de multiplicacin deber implementarse como un mdulo
Solucin
;****************************************************** *
;* Nombre
: multiplicacion.asm
*
;* Proposito
: multiplica dos numeros de 8 bits *
;* Autor
: Edwin Carrasco
*
;* FCreacion
: 22/02/2009
*
;* FModificacion : ------*
;****************************************************** *
LIST P=16f84a
INCLUDE <p16f84a.inc>
CBLOCK 0x0c
multiplicando
multiplicador

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


MICROPROCESADORES
GUIA DE LABORATORIO
ECP 5 de 6

producto_l
producto_h
multiplicando_h
ENDC
ORG 0
;Programa principal
inicio
movlw .14
movwf multiplicando
movlw .25
movwf multiplicador
call procMul
goto $

;
;
;
;

W <-- nro1
multiplicando <-- W
W <-- nro2
multiplicador <-- W

; Procedimiento
procMul
clrf producto_l
; inicializar lsb de producto
clrf producto_h
; inicializar msb de producto
clrf multiplicando_h ; inicializar msb del multiplicando
; Desplazar el multiplicador un bit a la derecha
sgte_iteracion
; MUL_LOOP
bcf STATUS, C
; poner en cero el bit de acarreo
rrf multiplicador, F
; SI Acarreo == 1 ENTONCES sumar multiplicando a producto
btfss STATUS, C
; SI C == 1 ENTONCES sumar
goto sgte_bit
; SINO no hacer nada
movf multiplicando, W
; sumar
addwf producto_l, F
; primero los dos bytes inferiores
btfsc STATUS, C
; SI no hay acarreo ENTONCES
; procesar los bytes altos
incf producto_h, F
; SINO sumar acarreo
movf multiplicando_h, W ; procesar los bytes altos
addwf producto_h, F
; Desplazar el multiplicando una vez a la izquierda
sgte_bit
bcf STATUS, C
; poner en cero el bit de acarreo
rlf multiplicando, F
rlf multiplicando_h, F
; MIENTRAS multiplicador
movf multiplicador, F
btfss STATUS, Z
goto sgte_iteracion
return
end

diferente de cero
; verificar si multiplicador es cero
; SI no ENTONCES repetir
; SINO terminado

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


MICROPROCESADORES
GUIA DE LABORATORIO
ECP 6 de 6

VII. EJERCICIOS PROPUESTOS


1. Escriba un programa modular que calcule la suma de los N primeros nmeros
primos ( 1 + 2 + 3 + 5 + 7 + 9 + 11 + )
2. Escriba un programa modular que utilice dos procedimientos para determinar el
cociente y el resto de la divisin de M entre N.
3. Escriba un programa modular que calcule el mximo comn divisor de dos nmeros.
4. Escriba un programa modular que determine si el digito ms significativo de un
nmero es igual al digito menos significativo de un segundo nmero.
5. Escriba un programa modular que calcule la raz cuadrada entera de un nmero
entero.
VIII. BIBLIOGRAFIA
BIBLIOGRAFIA BSICA
1. Angulo Jose et. al. Microcontroladores PIC. Diseo prctico de aplicaciones.
3ed. McGraw Hill 2003
2. Gardner Niguel. A Beginners Guide To The Microchip PIC. 1ed. Blueprint
Technical Press 1998.
3. Palacios Enrique et. al. Microcontrolador PIC 16F84. Desarrollo de proyectos
2Ed. Alfaomega 2006
4. www.microchip.com Sitio Web del fabricante del PIC 16F84 y del IDE MPLAB
5. http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf - Ficha tcnica del
PIC 16F84
BIBLIOGRAFIA COMPLEMENTARIA
1. http://www.hispavila.com/3ds/chipspic/microspic1.html
2. http://sputnik.epsj23.net/%7Eeserra/elect/pics/pic16f84.html

También podría gustarte