Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROPROCESADORES
GUIA DE LABORATORIO
ECP 1 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
RETURN
Sintaxis
return
Operacin
Indicadores
ninguno
TOS => PC
Ninguno
Operandos
Operacin
Indicadores
0 k 255
k => W
TOS => PC
Ninguno
RETLW
Sintaxis
retlw k
Mueve los 8 bits del literal 'k' al registro de trabajo 'W' y retorna de subprograma.
;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
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_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