multip 16f84
-
Upload
martha-adiela-cardona-pulgarin -
Category
Documents
-
view
90 -
download
5
Transcript of 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.
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'.
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
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
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
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