multip 16f84

6
UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO MICROPROCESADORES MICROPROCESADORES MICROPROCESADORES MICROPROCESADORES GUIA DE LABORATORIO GUIA DE LABORATORIO GUIA DE LABORATORIO GUIA DE LABORATORIO ECP 1 de 6 I. TEMA : PROCEDIMIENTOS EN EL PIC 16F84A II. OBJETIVOS El estudiante al finalizar la práctica 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 práctica, es necesario: 1. IDE MPLAB versión 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 práctica, 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 programación modular y la reutilización de código. 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 dirección de retorno del programa principal, antes de iniciar la ejecución del modulo invocado y se utiliza para volver al programa principal y continuar la ejecución de la instrucción que sigue a la llamada al procedimiento antes indicado.

Transcript of multip 16f84

Page 1: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIO ECP 1 de 6

I. TEMA : PROCEDIMIENTOS EN EL PIC 16F84A

II. OBJETIVOS El estudiante al finalizar la práctica 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 práctica, es necesario: 1. IDE MPLAB versión 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 práctica, 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 programación modular y la reutilización de código. 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 dirección de retorno del programa principal, antes de iniciar la ejecución del modulo invocado y se utiliza para volver al programa principal y continuar la ejecución de la instrucción que sigue a la llamada al procedimiento antes indicado.

Page 2: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA 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 gráfico que muestra la arquitectura de mencionado micro controlador

Las instrucciones que pone a nuestra disposición el PIC 16F84A, para el manejo de procedimientos se documentan a continuación: INSTRUCCIÓN DE LLAMADA A PROCEDIMIENTOS

CALL Call Subroutine

Sintaxis Operandos Operación Indicadores

call k 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'.

Page 3: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIO ECP 3 de 6

INSTRUCCIONES DE RETORNO DE PROCEDIMIENTO

RETURN Return from Subroutine

Sintaxis Operandos Operación Indicadores

return ninguno TOS => PC Ninguno

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

RETLW Return with Literal in W

Sintaxis Operandos Operación Indicadores

retlw k 0 ≤ k ≤ 255 k => W

TOS => PC 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

Solución

;****************************************************** *

;* 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

Page 4: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIO ECP 4 de 6

;Programa principal

inicio

movlw .5 ; W <-- literal

movwf primerNro ; primerNro <-- W

movwf segundoNro ; segundoNro <-- W

call procAxB ; calcula N*N

movf producto, W ; W <-- N*N

movwf segundoNro ; segundoNro <-- N*N

call procAxB ; calcula N*N*N

goto $

; Procedimiento que multiplica dos números mediante el

; algoritmo : A x B = A + A + A + … + A (B veces)

procAxB

clrf producto ; producto <-- 0

movf primerNro, W ; W <-- primerNro

movwf contador ; contador <- primerNro

movf segundoNro, W ; W <-- segundoNro;

loop

addwf producto, F ; producto <-- producto + W

decfsz contador, F ; contador--

goto loop ; if (contador > 0)

; then goto loop

return ; else return

end

2. Escriba un programa modular que calcule el producto de dos números de 8 bits. La operación de multiplicación deberá implementarse como un módulo Solución

;****************************************************** *

;* 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

Page 5: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIO ECP 5 de 6

producto_l

producto_h

multiplicando_h

ENDC

ORG 0

;Programa principal

inicio

movlw .14 ; W <-- nro1

movwf multiplicando ; multiplicando <-- W

movlw .25 ; W <-- nro2

movwf multiplicador ; multiplicador <-- W

call procMul

goto $

; 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 diferente de cero

movf multiplicador, F ; verificar si multiplicador es cero

btfss STATUS, Z

goto sgte_iteracion ; SI no ENTONCES repetir

return ; SINO terminado

end

Page 6: multip 16f84

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

MICROPROCESADORESMICROPROCESADORESMICROPROCESADORESMICROPROCESADORES

GUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIOGUIA DE LABORATORIO ECP 6 de 6

VII. EJERCICIOS PROPUESTOS

1. Escriba un programa modular que calcule la suma de los N primeros números 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 división de M entre N.

3. Escriba un programa modular que calcule el máximo común divisor de dos números. 4. Escriba un programa modular que determine si el digito más significativo de un

número es igual al digito menos significativo de un segundo número. 5. Escriba un programa modular que calcule la raíz cuadrada entera de un número

entero.

VIII. BIBLIOGRAFIA

BIBLIOGRAFIA BÁSICA

1. Angulo Jose et. al. “Microcontroladores PIC. Diseño práctico 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 técnica del

PIC 16F84

BIBLIOGRAFIA COMPLEMENTARIA 1. http://www.hispavila.com/3ds/chipspic/microspic1.html 2. http://sputnik.epsj23.net/%7Eeserra/elect/pics/pic16f84.html