You are on page 1of 10

ARQUITECTURA Y ORGANIZACIN DE COMPUTADORES

PRCTICA

1
Objetivo
En esta primera prctica se introduce el funcionamiento y estructura de los
microcontroladores, as como el entorno de desarrollo MPLAB IDE y la
estructura bsica de un programa en ensamblador del PIC16F876. Los objetivos
generales que se persiguen son:

Aprender, de forma general, qu es un microcontrolador y conocer el


microcontrolador PIC16F876, que se utilizar para el desarrollo de todas las
prcticas de programacin en ensamblador

Familiarizarse con el repertorio de instrucciones del PIC16F876 y saber


interpretar la informacin que proporciona sobre el mismo el Data Sheet.

Aprender a manejar el entorno MPLAB IDE para la edicin, ensamblado y


depuracin de programas en ensamblador.

Tras la realizacin de la prctica, el alumno habr logrado:


-

Utilizar correctamente las instrucciones MOVF y MOVWF, para transferencia


de datos, y ADDWF, ADDLW, SUBWF, ... para clculos aritmticos.

Definir los diferentes elementos que forman parte de un programa en


ensamblador del PIC (etiquetas, directivas, instrucciones, etc.).

Escribir programas sencillos que calculen expresiones aritmticas.

Verificar el funcionamiento de un programa utilizando el entorno MPLAB IDE


y depurarlo mediante ejecucin paso a paso.

PRCTICA 1

Teora
Introduccin a los microcontroladores
A mediados de 2002 se super la impresionante cifra de 1000 millones de
procesadores utilizados en la fabricacin de computadores. Pero esta
cantidad slo abarca entorno al 2% de los sistemas de computacin; el 98%
restantes son procesadores empotrados (entre los que se encuentran los
microcontroladores).
Un microcontrolador (conocido en ingls por las siglas MCU) es un sistema
electrnico que tiene como finalidad controlar el funcionamiento de ciertos
dispositivos externos, como sensores, teclados, pantallas, interruptores, etc. Est
compuesto por un procesador o ncleo de ejecucin, memoria para
almacenamiento de datos e instrucciones y otros mdulos que permiten la
comunicacin con los dispositivos que ha de controlar, todo ello integrado
dentro de un mismo circuito integrado. La capacidad de procesamiento de
estos sistemas es muy inferior a la de un procesador de propsito general; sin
embargo son muy baratos y tienen un tamao muy reducido, lo que los hace
ideales para ser insertados en multitud de mquinas y equipos, incrementando
sus prestaciones.
Los microcontroladores se programan, al igual que los procesadores de
propsito general, pero "una nica vez". Es decir, a diferencia de los
computadores, los microcontroladores ejecutan una nica aplicacin, que es
la que realiza las acciones necesarias para el control de la mquina donde ha
sido insertado.
Existen ms de medio centenar de prestigiosos fabricantes de
microcontroladores, y cada uno oferta una gran variedad de modelos
potenciando en algunos las capacidades de memoria, en otros la velocidad
de trabajo, en otros la potencia de los recursos auxiliares, etc.
Entre los campos de aplicacin se encuentran: electrodomsticos, electrnica
de consumo, automocin, maquinaria industrial, etc.
La empresa americana Arizona Microchip (www.microchip.com) fabrica los
microcontroladores PIC, que han tenido un extraordinario xito en todo el
mundo. Actualmente es una de las empresas con mayor volumen de venta de
microcontroladores.
Cada
fabricante
microcontroladores:

aporta

los

siguientes

documentos

para

sus

Data Sheet: es el documento ms importante, donde se describe al detalle


la estructura del microcontrolador y las caractersticas de todos los
elementos que lo integran.

ARQUITECTURA Y ORGANIZACIN DE COMPUTADORES

Application notes: documentos que describen aplicaciones llevadas a


cabo utilizando dicho microcontrolador. Pueden incorporan los ficheros de
cdigo ensamblador utilizados para crear la aplicacin.

User Guides: documentos guas para el desarrollo de aplicaciones con los


microcontroladores; suelen explicar el funcionamiento de los entornos y
herramientas de desarrollo (programacin).

El microcontrolador PIC 16F876


El microcontrolador PIC16F876 es un circuito integrado de 28 pines, que
funciona a una frecuencia de reloj de 20 MHz. Incorpora un procesador capaz
de ejecutar 35 instrucciones diferentes, tres tipos de memoria (Flash, RAM,
EEPROM) para datos e instrucciones y numerosos mdulos y registros para
control de los perifricos que se le conecten (temporizadores, contadores,
conversores A/D y D/A, puertos de comunicacin serie y paralelo etc.).

Arquitectura Harvard
Los PIC utilizan la arquitectura Harvard, segn muestra la siguiente figura:

Bus de
direcciones

Memoria
Bus de
de
instrucciones
instrucciones

Unidad de
control

Procesador

Bus de
direcciones
Bus de
datos

Memoria
de
datos

Unidad de
proceso

A diferencia de la arquitectura Von Neumann, la Harvard independiza la


memoria de datos de la de instrucciones, y utiliza un bus dedicado para cada
una de ellas, optimizando las capacidades y la longitud de sus palabras y
permitiendo accesos simultneos a ambas. En particular, el PIC16F876 contiene
una memoria de instrucciones de tipo Flash, de 8K palabras, de 14 bits cada
una; una memoria RAM de datos, formada por 368 bytes y otra EEPROM de
256 bytes (todos los datos son de 1 byte).
Otra caracterstica de este procesador es su arquitectura de 1 direccin, es
decir, arquitectura de acumulador (las instrucciones aritmticas hacen
referencia explcita a un solo operando; el otro se encuentra en el
acumulador), con la particularidad de que puede elegirse en cul de los dos
operandos escribir el resultado.

PRCTICA 1

Incorpora los modos de direccionamiento: inmediato, directo e indirecto de


registro.
Cuenta con varios registros especficos, entre los que se encuentran:

Contador de programa: almacena la direccin de la siguiente instruccin


a ejecutarse

Registro de estado (STATUS): de 8 bits, los ltimos tres almacenan los bits Z
(indica si el resultado es 0), DC (indican si ha habido un acarreo al operar
los 4 bits menos significativos de los datos), y C (indica un acarreo al operar
con los 8 bits del dato)

Lenguaje ensamblador
Entre las instrucciones (35 en total) del lenguaje ensamblador del PIC16F876
podemos encontrar:

aritmtico-lgicas: ADDLW, ADDWF, SUBWF, XORWF

transferencias de datos: MOVF, MOVWF

manipulacin de bits: BCF, BSF

control de flujo: GOTO, BTFSC, RETURN

Todas se codifican con 14 bits y existen cuatro formatos diferentes.

Elementos de un programa en lenguaje ensamblador


Un programa escrito en lenguaje ensamblador puede contener los siguientes
elementos:

Instrucciones: constituyen el ncleo del programa y son traducidas a


lenguaje mquina (binario) durante el proceso de ensamblado. Estn
formadas por un cdigo mnemotcnico que identifica la operacin,
seguido por la especificacin de los operandos.

Directivas: son indicaciones que se introducen en el programa para


controlar el proceso de ensamblado. No se corresponden con ninguna
instruccin del lenguaje mquina y, por lo tanto, no generan cdigo en
binario.

Etiquetas: son un mecanismo que ofrece el lenguaje ensamblador para


facilitar el proceso de creacin de programas. Tienen un valor
numrico, que en mucho casos representa una direccin de memoria.

Macros: son conjuntos de instrucciones que estn agrupadas bajo un


nombre comn (etiqueta). Para ejecutar esas instrucciones basta con
escribir el nombre de la macro en el punto del programa donde se

ARQUITECTURA Y ORGANIZACIN DE COMPUTADORES

desee incluir las instrucciones. De esta manera se simplifica la escritura


del programa.
-

Comentarios: son textos introducidos con el fin de facilitar la lectura y


compresin del programa.

Datos u operandos: suelen ser nombres de registros, literales o


direcciones de memoria.

Elementos de un programa en ensamblador del PIC16F876


Un programa en lenguaje ensamblador del PIC16F876 puede incluir cualquiera
de los elementos anteriormente reseados. Cada lnea del programa puede
considerarse formada por cuatro campos o bloques:
etiqueta cdigo argumentos comentarios
El nico campo obligatorio es el cdigo, que identifica uno de los tres
elementos siguientes: una instruccin del lenguaje del microcontrolador, una
directiva del ensamblador o una macro. Se encuentra siempre separado de la
primera columna por al menos un espacio en blanco o tabulador.
Los argumentos aparecen o no dependiendo del cdigo (algunas
instrucciones, directivas y macros no los requieren). Son siempre un nmero,
representado en cualquier sistema de numeracin de los admitidos. Cada
nmero puede ser sustituido por una etiqueta previamente definida con el
valor de dicho nmero.
Las etiquetas estn formadas por caracteres alfanumricos hasta un
mximo de 32. Tienen siempre un valor numrico. Su uso es opcional, aunque
las utilizaremos habitualmente con el fin de simplificar la escritura y lectura del
cdigo. Adems, mediante las etiquetas se consigue independizar el cdigo
de la zona de memoria particular donde se almacene.
Los comentarios pueden aparecer en cualquier lugar, siempre que vayan
precedidos por el smbolo ;.
Aunque este es el esquema general de las lneas de cdigo, tambin se
permiten lneas en blanco dentro del programa, o lneas formadas nicamente
por comentarios.

INSTRUCCIONES DEL PIC16FF876


Existen en total 35 instrucciones en el lenguaje mquina del PIC16F876, que
pueden ser combinadas para la creacin de programas. La relacin de todas
las instrucciones puede consultarse en el DataSheet del microcontrolador (en
la pgina 138).

PRCTICA 1

DIRECTIVAS DEL MPASM


Estn asociadas al programa ensamblador MPASM. De las numerosas
directivas disponibles, utilizaremos de forma habitual las siguientes:
o

LIST: Con ella habilitamos la creacin de un listado de smbolos


para el procesador que estamos utilizando. Lo usaremos de la
forma LIST p=16F876

INCLUDE: Permite incluir cdigo existente en otro fichero. Lo


usaremos de la forma INCLUDE PIC16F876.INC, para incluir
todas las definiciones relativas a elementos del microcontrolador
que estamos programando.

EQU: Sirve para asignar valores a etiquetas. Lo usaremos de la


forma Etiqueta EQU valor.

ORG: Indica a partir de qu direccin de memoria debe situarse


el cdigo que aparece a continuacin. De momento la
usaremos siempre como ORG 0x05, para que site nuestro
programa a partir de la posicin 5 de la memoria flash.

END: Indica al ensamblador el final del cdigo fuente, donde ha


de finalizar el proceso de ensamblado.

USO DE MAYSCULAS Y MINSCULAS


Son indistinguibles para las directivas e instrucciones (pueden escribirse como
se deseen y sern reconocidas por el ensamblador).
Las etiquetas s deben respetar las maysculas y minsculas utilizadas en su
creacin, tanto las que define el propio usuario como las que se incluyen
mediante el fichero PIC16F876.INC.
Con el fin de facilitar la lectura y compresin de programas, utilizaremos el
siguiente convenio:

los nombres de instrucciones se escribirn siempre en minsculas

los nombres de directivas se escribirn en maysculas

las etiquetas definidas por uno mismo se escribirn en minsculas, pero


comenzando por una letra mayscula (ejemplo: Var). Si el nombre de la
etiqueta est compuesto por dos o ms palabras, o trozos de palabras,
se escribir en maysculas la primera letra de cada palabra (ejemplo:
TiempoRetardo).

En cuanto a la colocacin de los distintos elementos en cada lnea, se


alinearn por columnas (mediante tabulaciones) todos los elementos del
mismo tipo: las etiquetas irn en la primera columna, los cdigos de instruccin

ARQUITECTURA Y ORGANIZACIN DE COMPUTADORES

o directiva en la segunda, los argumentos en una tercera y, finalmente, los


comentarios en la cuarta columna.
EJEMPLO. El siguiente cdigo se corresponde con un programa que suma
dos datos en memoria.

;Suma los datos en las posiciones 20h y 21h de memoria


;y deja el resultado en la posicin 22h de memoria
LIST
ORG

Inicio movf
addwf
movwf
goto

p=16F876
0x05

20h,0
21h,0
22h
Inicio

END

;Define el procesador y habilita listado


;Direccin a partir de la cual se ubican
;las instrucciones siguientes

;Vuelve al comienzo de nuevo


;Fin del programa

Constantes numricas
El ensamblador MPASM soporta los sistemas de numeracin decimal, binario,
octal y hexadecimal. La siguiente tabla muestra la forma de representar los
nmeros segn el sistema de numeracin utilizado.
TIPO
Decimal

Binario
Octal
Hexadecimal

SINTAXIS
D'<cantidad>'
d'<cantidad>'
. <cantidad>
B'<cantidad>'
b'<cantidad>'
O'<cantidad>'
o'<cantidad>'
H'<cantidad>'
h'<cantidad>'
0x<cantidad>
<cantidad>H
<cantidad>h

EJEMPLO
movlw D'109'
movlw d'109'
movlw .109
movlw B'11000101'
movlw b'11000101'
movlw O'155'
movlw o'155'
movlw H'6D'
movlw h'6D'
movlw 0x6D
movlw 6DH
movlw 6Dh

Cada nmero utilizado, independientemente de lo que represente,


puede estar en cualquier sistema de numeracin, y especificado de
cualquiera de las formas recogidas en la anterior tabla.
Es importante tener en cuenta que los nmeros pueden representar
tanto datos como direcciones de datos o direcciones de instrucciones. En
cada caso, el nmero de bits empleado en el PIC16F876 es distinto, y, por
tanto, tambin lo es el rango de datos vlido.

PRCTICA 1

CONSTANTE
Dato
Direccin de instruccin
Direccin de dato

N DE BITS
8
13
9

RANGO
[00h,FFh]
[0000h, 1FFFh]
[000h,1FFh]

El entorno de desarrollo MPLAB IDE


El entorno MPLAB IDE es proporcionado por Arizona Microchip para el
desarrollo de aplicaciones con microcontroladores PIC. Permite escribir
programas, ensamblarlos y depurarlos, para numerosos dispositivos. Su
funcionamiento se describe en el documento MPLAB IDE Users Guide. Tanto
ese manual como el software pueden descargarse a travs de la pgina web
www.microchip.com.
PASOS para la depuracin en MPLAB IDE:
1. Seleccionar el PIC16F876 a travs del men Configure->Select Device
2. Crear un proyecto nuevo a travs del men Project->New (o abrir uno
existente)
3. Editar el cdigo, utilizando la propia herramienta o cualquier editor de
textos. Para editar un fichero seleccionar New del men File. Escribir el
cdigo y salvar con extensin .asm
4. Aadir el fichero creado mediante el men Add Files to project del men
Project
5. Ensamblar mediante la opcin Build All del men Project
6. Una vez ensamblado con xito, vamos a simular para verificar el correcto
funcionamiento del programa. Para simular, seleccionar la opcin
Debugger->Select Tool-> MPLAB Sim
7. Comprobar que el programa est correctamente cargado en memoria
mostrando la memoria de instrucciones a travs del men View->Program
Memory
8. Dar valores a las datos del programa. Para ello, mostrar la memoria de
datos a travs del men View->File Registers. Situar el cursor sobre el byte
de direccin correspondiente a alguno de los datos del programa y
modificar su valor.
9. Ejecutar el programa paso a paso (pulsando F7 o F8) y verificar que
funciona correctamente, es decir, que en la posicin de memoria
correspondiente al resultado aparece el valor esperado.
10. Repetir la ejecucin con diferentes valores para los datos de partida y
comprobar que se genera correctamente el resultado en todos los casos.

ARQUITECTURA Y ORGANIZACIN DE COMPUTADORES

PRCTICA 1. Ejercicios
E1: El microcontrolador PIC16F876
Responde las siguientes preguntas sobre las caractersticas bsicas del
PIC16F876
1) Por qu la memoria de instrucciones es de tipo Flash y no RAM?
2) Cul es el tamao de una instruccin?
3) Cul es el tamao del contador de programa?
4) Con qu nombre se conoce al registro acumulador?
5) Qu instrucciones del PIC16F876 no llevan argumentos?
6) Cules llevan slo uno? Qu representa ese argumento?
7) Cules llevan dos? Qu indica el segundo argumento en estos casos?
8) Qu hace la instruccin goto?

E2: Acciones bsicas en lenguaje ensamblador del


PIC16F876
Escribe una o varias instrucciones en ensamblador del PIC16F876 para realizar
las siguientes acciones bsicas. Supn en todos los casos que Var es una
variable almacenada en la posicin h'020' de memoria, y que las constantes
del ejemplo estn representadas en base decimal.
ACCIN

EJEMPLO

Inicializar una variable a 0

Var = 0

CDIGO ENSAMBLADOR

Inicializar una variable a un valor Var = 7


distinto de 0
Incrementar una variable

Var = Var + 1

Decrementar una variable

Var = Var - 1

Sumarle a una variable un nmero Var = Var + 10


constante
Restarle a una variable un nmero Var = Var - 15
constante

PRCTICA 1

E3: Constantes numricas


Determina para todas las constantes numricas que aparecen en el siguiente
programa si representan un Dato, una Direccin de dato o una Direccin de
instruccin. Cules estn fuera de rango? Qu ocurre con esos datos?
Verifcalo utilizando MPLAB IDE y anota las consecuencias que producen esas
situaciones en compilacin y en ejecucin.
LIST
ORG

p=16F876
0x05

movlw
subwf
movlw
movwf
goto
movf
movwf
goto
END

h'190'
h'021',0
.290
h'022'
0Ch
h'020',0
h'022'
b'0101'

P1: Programacin del PIC16F876.


Escribe un programa en ensamblador del PIC16F876 que permita intercambiar
los datos almacenados en las posiciones 30h y 31h de memoria. Verifica el
funcionamiento del programa utilizando MPLAB IDE.

P2: Depuracin paso a paso.


El siguiente programa debera calcular la expresin matemtica
A = (C + 15) - B
donde A, B y C son variables en memoria, en las posiciones h'020', h'021' y
h'022', respectivamente, y 15 un valor decimal constante. Sin embargo, no
funciona segn lo esperado. Depralo con MPLAB IDE y corrige los errores
hasta conseguir que calcule dicha expresin. Explica cada error que te vas
encontrando.
;Programa EjercicioP2
LIST
ORG
Inicio movf
addwf
subwf
movwf
goto
END

10

p=16F876
0x05
h'022'
15h
h'021'
h'020'
Inicio

You might also like