Вы находитесь на странице: 1из 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 Subroutine Operandos Operacin PC + 1 => TOS k => PC[10:0] PCLATH[4:3] => PC[12:11] Indicadores

call k

0 k 2047

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 ninguno Operacin TOS => PC Indicadores Ninguno

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

RETLW Sintaxis retlw k

Return with Literal in W Operandos 0 k 255 Operacin k => W TOS => PC Indicadores Ninguno

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

; ; ; ;

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

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

; ; ; ; ;

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 btfss STATUS, C ; goto sgte_bit ; movf multiplicando, W ; addwf producto_l, F ; btfsc STATUS, C ; ; incf producto_h, F ; movf multiplicando_h, W ; addwf producto_h, F sumar multiplicando a producto SI C == 1 ENTONCES sumar SINO no hacer nada sumar primero los dos bytes inferiores SI no hay acarreo ENTONCES procesar los bytes altos SINO sumar acarreo procesar los bytes altos

; 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

Вам также может понравиться