Está en la página 1de 30

36 Microcontrolador 11/3/08 09:48 Página 36

CURSO DE MICROCONTROLADORES
EL MPLAB (I)
MICROCONTROLADORES
Francisco Javier Tortosa Martínez Fernando Remiro Domínguez
Ingeniero de Sistemas Profesor de Sistemas Electrónicos
Indytel Sistemas S.L. IES. Juan de la Cierva
www.microladder.com www.terra.es/personal/fremiro

En el número 178 , ya
publicamos un manual de
usuario del MPLAB en su
versión de 16 bits, pero la
verdad que en podo o mejor
dicho en casi nada se parece
a esta versión de 32 bits con
la que estamos trabajando
ahora. Por lo tanto antes de
seguir analizando otros
microcontroladores de
36
RESISTOR
Microchip, nos hemos
propuesto publicar este
manual de usuario del
MPLAB IDE, tanto para los
nuevos usuarios de los estos
microcontroladores, como
para algunos que son más
expertos, y no le sacan todo
su posible potencial de uso.
Foto 1.- Logotipo del MPLAB

COMO OBTENER EL que hemos descargado está compri- • Cronometra el tiempo de ejecu-
PROGRAMA mido en formato Zip, lo extraemos ción en el simulador o en el emu-
Lo primero que debemos hacer en un subdirectorio y se ejecuta el lador
es obtener el programa que es de archivo MP802_Install. • Visualiza las variables en la ven-
libre disposición y que nos lo ofrece El MPLAB IDE está desarrolla- tana del reloj
la empresa Microbio en su web do bajo el sistema operativo Win- • Permite programar el firmware
www.microchip.com y ya en la dows. Es un entrono para el diseño utilizando diversos programado-
página principal en el apartado de de los microcontroladores PIC y res.
design encontramos un enlace al dsPIC. Con el MPLAB se puede:
MPLAB IDE, pulsamos sobre él y • Crear y revisar código fuente a COMENZANDO CON EL
al final de esta nueva página encon- través de su editor. MPLAB IDE
tramos un enlace de descarga en el • Ensambla, compila y linkar el Una vez instalado el programa,
que pone MPLAB IDE v8.02 Inte- código fuente. se recomienda seguir los siguientes
rim Release Zipped Installation, pul- • Depuración siguiendo el flujo del pasos.
sando con el botón auxiliar del ratón programa en el simulador o 1. Como el path o camino absoluto
lo guardamos en un subdirectorio de emulando en el circuito en tiempo de los ficheros de trabajo del
nuestro disco duro. Como el archivo real. MPLAB no deben exceder de 62
36 Microcontrolador 11/3/08 09:48 Página 37

MICROCONTROLADORES
Figura 1.- Programas que aparecen al abrir el archivo zip de la carpeta MP802. 37
RESISTOR
caracteres, se recomienda crear denomino Trabajo y dentro de PIC, por ejemplo C:Trabajo/
una carpeta en el directorio raiz ella, una carpeta con cada micro- Pic16F876A.
de nuestro disco duro, en mi caso controlador o gran proyecto reali- 2. Para empezar a trabajar con el
yo tengo creada una carpeta que zado con los microcontroladores MPLAB IDE, hacer doble clic

Figura 2.- Pantalla que aparece al ejecutar por primera vez el MPLAB IDE
36 Microcontrolador 11/3/08 09:48 Página 38

en el icono que aparece después


MICROCONTROLADORES
de la autoinstalación o Start>Pro-
grams>Microchip>MPLAB
selecto IDE vx.xx>MPLAB IDE.
Aparecerá una pantalla desplega-
ble como la de la figura 2.
3. Seguidamente seleccionaremos el
dispositivo con el que vamos a
trabajar, para ello se debe selec-
cionar en la barra de herramientas
el menú Configure>Select Device
y seleccionar el microcontrolador
que aparece en la lista de disposi-
tivos, con el que se desea trabajar,
en nuestro caso el PIC16F876A.
Los "Leds" indican que elemen-
tosIDE del MPLAB dan soporte al
dispositivo.
• El Led verde indica soporte total.
• Una luz amarilla indica el apoyo
preliminar es decir que solo permi-
te hacer algunas cosas en particu-
lar para el MPLAB IDE con esta
herramienta y este dispositivo. Se
38
RESISTOR
debe entender que a menudo una
luz amarilla en lugar de verde se
toma para los nuevos dispositivos
Figura 3 .-Cuadro de diálogo de selección de dispositivo.

que necesitan rápidamente un apo-


yo y no da tiempo a desarrollar
todas las funciones.
• Un LED rojo indica que el disposi-
tivo no tiene apoyo para este ele-
mento. El apoyo puede desarrollar-
se posteriormente o ser impropio
para la herramienta, por ejemplo,
los dsPIC que no pueden apoyarse
MPLAB ICE 2000.
4. Para empezar a escribir nuestro
primer programa, debemos selec-
cionar en la barra de menú File>
New o seleccionar el icono con
la misma función.
5. Seguidamente escribimos nuestro
programa, que en este caso con-
siste en leer unos interruptores
que conectamos en el PORTA
(líneas RA0:RA5) y muestra
sobre las líneas RB0:RB5 el valor
leído. El programa puede ser
el que seguidamente se muestra
y que hemos denominado
Ejem_1.asm.
Para salvar el fichero fuente se
selecciona File>Save As…. Aparece
un cuadro de diálogo como el que se
muestra en la figura 6, en el que se Figura 4.- Pantalla para la selección del menú de un nuevo archivo.
36 Microcontrolador 11/3/08 09:48 Página 39

;********************************************************************************************
;Ejem_1.asm

MICROCONTROLADORES
;Ejemplo para simulación Entradas/Salidas en el entrenador
;Sencillo ejemplo de E/S con los PIC 16F87XA
;Leer el estado de los 5 interruptores conectados en las líneas(RA4-RA0) y reflejar el nivel
;lógico de los mismos sobre los leds RB4-RB0 conectados a la puerta B
;ESTE PROGRAMA UTILIZA EL BOOTLOADER COMO PROGRAMA DE CARGA A TRAVÉS DEL PUERETO
SERIE DEL PC
;********************************************************************************************
List p=16F876A ;Tipo de procesador
include "P16F876A.INC" ;Definiciones de registros internos

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF &
_LVP_OFF & _DEBUG_OFF & _CPD_OFF
org 0x00 ;Vector de Reset
goto Inicio

org 0x05 ;Salva el vector de interrupciónx

Inicio bsf STATUS,RP0 ;Selecciona banco 1


movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
movlw b'00111111'
movwf TRISA ;Puerta A se configura como entrada
bcf STATUS,RP0 ;Selecciona banco 0

Bucle movf
movwf
goto
PORTA,W
PORTB
Bucle
;Leer las entradas RA0-RA4
;Reflejar en las salidas
;Bucle sin fin
39
RESISTOR
end

Figura 5.- Circuito sobre el que


se puede probar el programa
Ejem1.asm

solicita el nombre del archivo, Al salvar el programa, el usuario se ven en verde, las instrucciones en
que nosotros hemos llamado verá como cambia el color del texto azul las etiquetas y nombres de
Ejemp1.asm. del fichero fuente, los comentarios registro en rojo tejo.
36 Microcontrolador 11/3/08 09:48 Página 40

MICROCONTROLADORES

40
RESISTOR

Figura 6.- Cuadro de diálogo para guardar el archivo fuente.

6. A la hora de trabajar con el


MPLAB en la escritura de un pro-
grama fuente, no puede ser útil
configurar algunas de las propie-
dades del editor, para lo cual
seleccionamos en la barra de
herramientas Edit>Properties…
en este cuadro de diálogo se reco-
mienda seleccionar la pestaña de
‘ASM’File Types y seleccionar
las opciones que se muestran en
la Figura 7.
En la pestaña de Text se puede
elegir el tipo de letra que al usuario
le parezca más interesante, en dicha
pestaña se pueden observar las

Figura 7.- Cuadro de diálogo de


la pestaña ASM File Types de
editor de opciones del MPLAB
36 Microcontrolador 11/3/08 09:48 Página 41

Figura 8.- Cuadro de diálogo de las opciones de texto y fuentes


opciones del cuadro de diálogo de la de texto, así como los colores que los funcionamiento, tal y como ire-
figura 8. parámetros que indica dicho texto. mos viendo en los próximo
En dicho cuadro se aprecia como 7. Seguidamente se puede ensam- números de la revista.
se puede modificar el tipo y tamaño blar el programa y simular su
36 Microcontrolador 11/3/08 09:48 Página 42
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 42

CURSO DE MICROCONTROLADORES
EL MPLAB (II)
MICROCONTROLADORES
Francisco Javier Tortosa Martínez Fernando Remiro Domínguez
Ingeniero de Sistemas Profesor de Sistemas Electrónicos
Indytel Sistemas S.L. IES. Juan de la Cierva
www.microladder.com www.terra.es/personal/fremiro

42
RESISTOR

Foto 1.- Placas de desarrollo realizadas en el laboratorio de Desarrollo de Productos Electrónicos del IES Juan
de la Cierva de Madrid.
Esta es la segunda entrega del manual del entorno de desarrollo MPLAB IDE, que como
se puede ir comprobando, además de permitirnos escribir el programa en lenguaje
ensamblador o con un compilador de alto nivel, permite realizar la depuración del
programa ya sea utilizando el simulador que lleva incorporado o herramientas como
son el MPLAB ICD2 o los emuladores MPLAB 2000 y MPLAB 4000.
una aplicación (el código fuente, el abrir ventanas para ver y configurar
linkador, etc.) así como varias herra- otros escenarios del IDE.
CREANDO UN NUEVO

Dos de las características del mientas de construcción (build). La manera mejor manera de pre-
PROYECTO

MPLAB IDE son los proyectos y los El workspace contiene la informa- parar un proyecto y su escenario
escenarios (workspaces). ción sobre el dispositivo selecciona- (workspace) asociado es usando el
Un proyecto contiene los archivos do, herramientas de puesta a punto Project Wizard. No obstante cuando
necesitaron para diseñar o construir del programador, además se pueden se trabaja con una aplicación de un
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 43

único archivo en ensamblador, se • Cuando pulsamos Siguiente, apare- la de la figura 4, pulsando sobre
puede usar Quickbuild (Project> ce la ventana de selección de la Browse… elegimos el nombre y
Quickbuild), es decir, ensamblar el herramienta de trabajo. Se puede camino de nuestro proyecto.

MICROCONTROLADORES
código con el ensamblador MPSM y seleccionar una herramienta de Una vez seleccionado el camino
no crear un proyecto. Sin embargo Microchip o de terceras partes. En de nuestro proyecto que tiene la
utilizando un workspace se pueden la ventana de Active Tollsuite solo extensión *.mcp pulsamos sobre
guardar todos los escenarios y salvar aparece la suite de herramientas de siguiente y aparece una ventana
las configuraciones. los lenguajes que trabajan con el como la de la figura 5, en la que nos
dispositivo previamente selecciona- solicitan que seleccionemos los
do. Para ver el resto de herramien- ficheros que integran nuestro proyec-
tas instaladas pulsar sobre la flecha to, en nuestro caso ejem_1.asm , pul-
CREAR UN PROYECTO CON

Para crear un nuevo proyecto con de Active Toolsuite, apareciendo la samos sobre Add>> para añadir el
EL WIZARD

el Wizard una vez que tenemos escri- pantalla de la figura 3. archivo y volvemos a pulsar sobres
to nuestro programa en ensamblador, siguiente, apareciendo la pantalla de
debemos de seguir los siguientes la figura 6.
pasos:
• Seleccionamos Project/Project
Wizard, lo que hará aparecer la pan-
talla de la bienvenida de la
Figura 1.

Figura 3.-pantalla de selección de


la herramienta de programación.
43
Figura 5.- Pantalla de selección
RESISTOR
Si aún no aparece la herramienta de los archivos que integran el
deseada, pulsar sobre el botón “Help proyecto.
My Suite Isn´t Listed!” y aparecerá
un listado de herramientas con una
“X” en rojo indicará si es el caso que
no se ha realizado la instalación o
Figura 1.- Pantalla de bienvenida que el camino ejecutable no es cono-
del Project Wizard. cido por el MPLAB IDE, para asig-
nar o verificar asignaciones de herra-
• Pulsamos sobre Siguiente y en la mientas a los archivos ejecutables,
pantalla de diálogo nos solicita el pulsar sobre el botón en la herra-
microcontrolador con el que quere- mienta para mostrar el camino del
mos trabajar. En este caso seleccio- archivo ejecutable.
namos el PIC16F876A. • Pulsar sobre Siguiente y aparecerá Figura 6.- Pantalla de finali-
una nueva ventana de diálogo como zación del asistente de creación de
proyectos.
Si no se abre la ventan del pro-
yecto, seleccionar View>Project , tal
y como se muestra en la figura 7,
donde se puede apreciar en la parte
superior de la pantalla que aparece el
nombre del Proyecto, en nuestro caso
ejem_1.mcw.
En estos momentos se abrirá una
pantalla con forma de árbol como la
Figura 2.- Selección de micro- de mostrada en la figura 8, en la que
controlador del proyecto. Figura 4 en la raíz aparece el nombre del pro-
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 44

• Si se pulsa el botón derecho sobre


un archivo, aparece la opción de
Remove, que nos permitirá eliminar
MICROCONTROLADORES
archivos del proyecto.
• Otra de las opciones que aparece es
la de Build Options… que no usare-
mos en esta guía didáctica y la por
ultimo aparece la opción de Edit
que al activarla nos presenta el
archivo seleccionado para visuali-
zarlo y que además podremos modi-
ficarlo.

MONTAR O CONSTRUIR

Ahora estamos en condiciones de


EL PROYECTO:

construir el proyecto pulsando el


botón de la barra de herramientas
o seleccionando Project>Build All .
Durante la construcción del pro-
Figura 7.- Solicitud de apertura del fichero a editar. yecto aparecer una barra de progre-
so como la de la figura 9, que se
cerrará cuando haya terminado el
proceso de montaje, si todo ha ido
bien, la barra será de color verde y
44 aparecerá un color rojo en caso con-
trario. También se abrirá la ventana
de salida (Output) como la de la
RESISTOR
figura 10.
Si al final de esta pantalla apare-
ce la frase “BUILD SUCCEDED” se
confirma que el ensamblado se ha
producido con éxito. Por tanto, ya se
está en condiciones de pasar a la
simulación. En esta pantalla pueden
aparecer algunos mensajes de aviso
Message, que llaman la atención
Figura 9.- Barra de progreso del sobre situaciones a tener en cuenta y
montaje o ensamblado del pro- que podrían ocasionar un error en el
grama programa pero que no impiden el

Figura 8.- Ventana de visualiza-


ción del proyecto

yecto y los ficheros que se han añadi-


do posteriormente.
• Si se pulsa sobre uno de los archi-
vos del árbol, este se abrirá automá-
ticamente.
• Si dentro de esta pantalla se pulsa el
botón de la derecha del ratón, apare-
ce la opción de Add Files que acti-
vándola permite agregar más fiche-
ros fuente al proyecto. Figura 10.- Ventana del registro de salida.
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 45

que ha ocurrido un error en el pro-


ceso de ensamblado del programa y
veremos que se ha generado un

MICROCONTROLADORES
fichero de errores que describen
cada uno de ellos. Si hacemos un
doble clic sobre la línea que mues-
tra el error, el cursor saltará directa-
mente a la línea de código donde se
encuentra éste. Una vez subsanados
los errores, volveremos a repetir el
proceso de ensamblado del fichero
fuente para obtener el fichero con
extensión .hex que en nuestro caso
será ejem_1.hex. Este fichero con
extensión *.hex, es el que cargare-
mos en nuestro microprocesador
utilizando la herramienta de graba-
ción de la que dispongamos.
Para ver el fichero ejem_1.hex,
bastará con seleccionar el meni
File>Open y dentro de los tipos de
archivos seleccionar All Files [*.*] y
seleccionamos el archivo ejem_1. hex.
Figura 11.- Pantalla de selección de archivo. Cuando abrimos el archivo se
puede ver que únicamente contine
códigos hexadecimales y que serán
los que se graven posteriormente en
45
el microcontrolador
RESISTOR

SELECCIÓN DE LA
HERRAMIENTA

Para poner a punto los programas,


DE DEPURACIÓN

el MPLAB al pulsar en Debug-


ger>Select Toll nos permite elegir
entre las siguientes opciones, tal y
como se puede ver en la figura 13:
• El simulador MPLAB SIM.
Simula el funcionamiento de
Figura 12.- Contenido del archivo hexadecimal.

correcto ensamblado. En la figura


10 se aprecian los mensajes de las
líneas 21, 22 y 24 en las que se uti-
lizan respectivamente los registros
ADCON1, TRISB y TRISA, que se
encuentran en el banco 1, este men-
saje nos indica que estos registros
no se encuentran en el banco 0, para
que lo comprobemos, ya que en
caso contrario tendríamos proble-
mas en el funcionamiento de nues-
tro programa.
Si al final de la pantalla del
registro de salida, aparece el mensa-
je “BUILD FAILED”, nos indica Figura 13,. Ventana de selección de la herramienta de depuración
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 46

microcontrolador con el software


que se le introduce.
• El MPLAB ICD2 depuración en
MICROCONTROLADORES
circuito. Permite correr el código
en el circuito donde tenemos
conectado nuestro microcontrola-
dor, con todos los periféricos que
utilice y permite realizar Breack
Point en el programa y ver el esta-
do de los registros utilizando el
entorno del MPLAB.
• El emulador en circuito MPLAB
ICE 4000.Emula las grandes
memorias de los PIC18 y los
dsPIC en el hardware. Figura 15.- Cuadro de diálogo de las ventanas de visualización del MPLAB.
El emulador en circuito ICE
2000. Emula un gran número de • Fille Registers
microcontroladores y permite el acce- • Hardware Stack
VENTANAS DE

so a las distintas partes de memoria. Una vez ensamblado el programa, y • Locals


VISUALIZACIÓN

Comprobar en el directorio IDE la seleccionada la herramienta de • Program Memory


lista de dispositivos que lo soportan. depuración, en este caso la de simu- • Special Registers
Una vez elegida la herramienta de lación, podemos visualizar las dis- • Watch
depuración por ejemplo el simulador tintas ventanas que nos darán infor- • Memori Usage Gauge
aparece una nueva barra de herra- mación sobre el estado del micro- • Simulator Trace
mientas como la que se muestra en procesador y sus memorias. Para • Simulator Analiczer
46 la figura 14. ello hacer clic con el ratón sobre
View en la barra de herramientas,
aparece el cuadro de diálogo de la
RESISTOR VENTANA DISASSEMBLY

figura 15. Nos presenta el código máquina y el


LISTING:

Las opciones activas son: archivo fuente, para entrar en ella


Figura 14.- Barra de herramientas de • Disassemby Listing hay que pulsar en View> Disas-
la herramienta de depuración • EEPROM sembly Linsting y se aparece una

Rum: Comienza la ejecución del programa a toda velocidad. En este caso, simulador ejecuta el programa
a toda velocidad hasta que se detenga haciendo clic en el icono de abajo.

Halt: Detiene la ejecución del programa. El programa de ejecución puede seguir paso a paso, a velocidad
opcional o a toda velocidad de nuevo.

Animate: Comienza la ejecución del programa a velocidad opcional. La velocidad de ejecución se fija en
el cuadro de diálogo Debugger/Stettings../Amimations/ Realtime Update.

Step Into: Comienza paso a paso la ejecución del programa. Las instrucciones son ejecutadas una tras otra.
Por otra parte, haciendo clic en este icono permite ejecutar las subrutinas y macros paso a paso.

Step Over: Este icono al igual que el anterior permite realizar la ejecución de las instrucciones de una en
una, pero las subrutinas las ejecuta de golpe, como si fuera un única instrucción.

Step Out: Cuando estamos dentro de una subrutina al pulsar este icono, el programa corre de golpe hasta
que sale de ella y se para poder seguir con la ejecución paso a paso.

Reset: Restablece microcontrolador. Al hacer clic en este icono, el contador de programa se posiciona al
principio del programa y la simulación puede comenzar.
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 47

este momento y con una letra B


encerrada en un circulo rojo los
puntos del ruptura (Breakpoints)
que hemos marcado en la simula-
ción haciendo un doble clic con el
ratón sobre la línea en la que quere-
mos el Breakpoints.
Pulsando sobre el botón contrac-
tual del ratón, aparece una ventan
con las siguientes opciones:
• Set/Remove Breakpoint: nos per-
mite poner o quitar un punto de
ruptura a la línea actualmente
seleccionada.
• Enable/Disable Break: Activa o
Figura 16.- Ventana de visualización Disassembly Listing,
desactiva un punto de ruptura en la
ventan como la de la figura 16, en la tro programa fuente y el programa línea actualmente seleccionada.
que podemos ver que aparece de fuente que escribimos nosotros. • Breakpoints: deshabilita, habilite
izquierda a derecha la posición de Además nos muestra en el caso de o borra todos los puntos de
memoria de programa, el código de estar simulando el funcionamiento ruptura.
hexadecimal de la instrucción, el con una flecha de color verde la • Run To Cursor: Ejecute el pro-
código de la instrucción en ensam- posición en la de memoria a la que grama de situación del cursor
blador, el número de línea de nues- apunta el contador de programa en actual hasta aquí.
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 48

• Set PC at Cursor: Ponga al Con-


tador del Programa (PC) en la en
el valor de la posición que se indi-
MICROCONTROLADORES
ca con el cursor.
• Copy: copia el texto seleccionado
al portapapeles. El texto se selec-
ciona pulsando el botón de la
izquierda del ratón y arrastrando
hasta donde nos interese y en ese
momento soltamos el botón.
• Select All: Selecciona todo el tex-
to de la ventana.
• Output to File: Guarda el conte-
nido de la ventana en un archivo
de texto que podemos indicar des- Figura 17,. Venta del contenido de la memoria E2PROM de usuario.
de aquí.
• Print: Para imprimir el archivo
• Properties: Despliega un cuadro
de diálogo de cómo queremos que
aparezcan escritos los datos de la
ventana de desensamblado.

Seleccionando View>EEPROM apa-


VENTANA EEPROM:

rece una ventana como la que se


48 muestra en la figura 17, en la que se
ve el contenido de la memoria
E2PROM de usuario del microcon-
RESISTOR
trolador con el que estemos
trabajando.
En esta ventana se muestran los
datos de las columnas de la direc-
ción hexadecimal de los datos, el Figura 18.- Ventana que muestra el contenido de la memoria RAM de datos en
contenido de las distintas posicio- formato hexadecimal.
nes de memoria y la representación
en código ASCII de la línea de valores a la E2PROM desde la • Properties: Despliega un cuadro
datos correspondiente. posición que se indique. de diálogo de cómo queremos que
Pulsando sobre el botón contractual • Export Table: Abre el cuadro de aparezcan escritos los datos de
del ratón aparece un menú que nos diálogo para exportar el contenido esta ventana.
permite: de la las posiciones de memoria
• Close: Cerrar esta ventana E2PROM a un archivo de exten-
• Find: Buscar en esta ventana el sión *.MCH. Para visualizar esta ventana se acti-
VENTANA FILE REGISTERS:

texto indicado en el cuadro dialo- • Fill Memory: Abre el cuadro de va View>File Registers. Muestra el
go de esta opción. diálogo que nos permite llenar contenido de todas las posiciones de
• Find Next: Encontrar en esta desde una posición a otra de la memoria RAM del dispositivo
ventana la próxima coincidencia memoria E2PROM con un valor seleccionado, cuando el simulador
del texto indicado en el cuadro de constante, datos que vayan incre- ejecuta una instrucción, comprueba
diálogo anterior. Con <F3> busca mentado o datos aleatorios. el valor del registro correspondien-
hacia delante en la ventana y con • Output to File: abre un cuadro de te y si lo modifica, la ventana se
<Shift>+ <F3> busca hacia atrás diálogo para guardar el contenido actualiza.
en la ventana. del bloque de posiciones de En el formato hexadecimal, que
• Go To: Va a la dirección de memoria que se indique. corresponde con la mostrada en la
memoria indicada en el cuadro de • Print: Para imprimir el contenido figura 18, se pueden ver las siguien-
diálogo. de la ventana. tes columnas de información:
• Import Table: abre el cuadro de • Refresh: Refresca los datos de • Parte alta de la dirección Hexade-
diálogo para importar una tabla de esta ventana. cimal de la memoria, la parte baja
42-49 Microcontroladores:Maqueta Resistor 13/6/08 09:13 Página 49

Hardware y el número de niveles


disponibles y los utilizados por el
punto en el que se encuentra la

MICROCONTROLADORES
simulación del programa.
En la venta se muestra:
• TOS: la parte alta de la pila
(TOS)
• Stack Level: Es el número total de
niveles de pila del dispositivo.
• Stack Return Address. Indica la
dirección a la que retorna el pro-
grama cuando el Contador de Pro-
grama cargue le valor de vuelta de
subrutina o de interrupción. En
Figura 19 Ventan que muestra el contenido de la memora RAM en
esta ventan los valores usados per-
formato simbólico.
manecen sin variar cuando se
se indica en la cabecera de cada de la las posiciones de memoria mueve el puntero de la Pila hacia
una de as columnas. RAM a un archivo de extensión arriba.
• La representación ASCCII de la *.MCH. • Location: Informa sobre la posi-
línea de datos correspondiente. • Fill Memory: Abre el cuadro de ción relativa de una función
En el formato simbólico que diálogo que nos permite llenar Estando en esta venta si se pulsa
corresponde a la figura 19, presenta desde una posición a otra de sobre el botón contractual del ratón,
los registros representados con su memoria RAM con un valor cons- se despliega una ventana que nos
nombre simbólicos y el contenido de tante, datos que vayan incrementa- permite:
los mismos en formato hexadecimal, do o datos aleatorios. • Close: Cerrar la ventana
decimal, binario y ASCII.
Pulsando sobre el botón contrac-
• Output to File: abre un cuadro de
diálogo para guardar el contenido
• Pop Snack: Carga la parte alta de
la Pila en el Contador de Progra-
49
tual del ratón aparece un menú que del bloque de posiciones de ma
RESISTOR
nos permite: memoria que se indique. • Set Top-of-Stack: Pone en la par-
• Close: Cerrar esta ventana • Print: Para imprimir el contenido te alta de la Pila la dirección en la
• Full Memory Update: La actualiza- de la ventana. que se encuentra el cursor.
ción de los registros de esta ventan • Refresh: Refresca los datos de • Output to File: abre un cuadro de
se actualizan después de una parada esta ventana. diálogo para guardar el contenido
solo si se habilitó. Por defecto esta • Properties: Despliega un cuadro del bloque de posiciones de
opción esta habilitada. Si la ventana de diálogo de cómo queremos que memoria que se indique.
está abierta, solo los datos visibles se aparezcan escritos los datos de • Print: Para imprimir el contenido
actualizan, si la ventana está cerrada esta ventana. de la ventana.
no se actualiza ningún dato. • Refresh: Refresca los datos de
• Find: Buscar en esta ventana el tex- esta ventana.
to indicado en el cuadro dialogo de • Properties: Despliega un cuadro
VENTANA HARDWARE

esta opción. Para visualizar esta ventana se acti- de diálogo de cómo queremos que
STACK:

• Find Next: Encontrar en esta venta- va View>Hardware Stack . Nos aparezcan escritos los datos de
na la próxima coincidencia del texto muestra el contenido de la Pila esta ventana.
indicado en el cuadro de diálogo
anterior. Con <F3> busca hacia
delante en la ventana y con <Shift>+
<F3> busca hacia atrás en la venta-
na.
• Go To: Va a la dirección de memo-
ria indicada en el cuadro de diálogo.
• Import Table: abre el cuadro de
diálogo para importar una tabla de
valores a la memoria RAM desde
la posición que se indique.
• Export Table: Abre el cuadro de
diálogo para exportar el contenido Figura 20.- venta de la Pila Hardware.
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:15 Página 50

CURSO DE MICROCONTROLADORES
EL MPLAB (III)
MICROCONTROLADORES
Francisco Javier Tortosa Martínez Fernando Remiro Domínguez
Ingeniero de Sistemas Profesor de Sistemas Electrónicos
Indytel Sistemas S.L. IES. Juan de la Cierva
www.microladder.com www.terra.es/personal/fremiro

50
RESISTOR

Foto 1.- Placas de desarrollo realizadas en el laboratorio de Desarrollo de Productos Electrónicos del IES Juan
de la Cierva de Madrid.
Esta es la tercera entrega de este manual sobre el funcionamiento del MPLAB IDE. En
estos momentos Microchip ha sacado la versión 8.14 de este programa, por lo que ya
anticipamos que todas las referencias que hagamos para el próximo número de
Resistor, se harán sobre esta nueva versión, que puede obtenerse de forma totalmente
gratuita de la web www.microchip.com
asignado a cada etiqueta. Se visualiza ne/Symbolic Only): Poner o quitar
activando View>Program Memory. un punto de ruptura a la línea
VENTANA PROGRAM

En esta ventana se pueden ver las Pulsando sobre el botón contrac- actualmente seleccionada.
MEMORY

posiciones de memoria que ocupa cada tual del ratón, aparece una ventan con • Enable/Disable Break (Machi-
una de las instrucciones, el código de las siguientes opciones: ne/Symbolic Only): Habilita o des-
operación de cada instrucción y la direc- • Close: Cerrar esta ventana habilita un punto de ruptura en la
ción de memoria de programa que se ha • Set/Remove Breakpoint (Machi- línea seleccionada actualmente.
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:15 Página 51

MICROCONTROLADORES
Figura 1.- Ventana de la Memoria de Programa
• Breakpoints: Habilita o deshabilita
todos los puntos de ruptura
• Run To Cursor: Ejecuta el progra-
ma a la situación actual del cursor.
• Set PC at Cursor: Pone el Conta-
dor de Programa (PC) en la posi-
ción actual del cursor.
• Center Debug Location: Indica
posición actual del PC actual en la
ventana
• Cursor Tracks Debug Location:
51
Rastrea el flujo del cursor para
RESISTOR
depurar la dirección.
• Find: Busca en esta ventana el tex-
to indicado en el cuadro dialogo de
esta opción.
• Find Next: Encuentra en esta ven-
tana la próxima coincidencia del
texto indicado en el cuadro de diá-
logo anterior. Con <F3> busca
hacia delante en la ventana y con
<Shift>+ <F3> busca hacia atrás en
la ventana.
• Go To: Va a la dirección de memoria
indicada en el cuadro de diálogo.
• Import Table: abre el cuadro de diá-
logo para importar una tabla de valo-
res a partir de la posición de memo-
ria de programa que se indique.
• Export Table: Abre el cuadro de Figura 2.- Venta de los Registros Especiales.
diálogo para exportar el contenido
de la las posiciones de memoria de • Output to File: abre un cuadro de diálogo de cómo queremos que
programa a un archivo de exten- diálogo para guardar el contenido aparezcan escritos los datos de esta
sión *.MCH. del bloque de posiciones de memo- ventana.
• Fill Memory: Abre el cuadro de ria que se indique.
diálogo que nos permite llenar des- • Print: Para imprimir el contenido
de una posición a otra de memoria de la ventana.
VENTANA DE SPECIAL

de programa con un valor constan- • Refresh: Refresca los datos de esta Esta ventana presenta todos los
REGISTERS

te, datos que vayan incrementado o ventana. registros Especiales SRF indicándonos
datos aleatorios. • Properties: Despliega un cuadro de la posición que ocupa el registro dentro
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:15 Página 52

de la memoria, el nombre del registro y


su contenido en binario, hexadecimal y
ASCII. Se visualiza en View>Special
MICROCONTROLADORES
Function Registers.
Para modificar manualmente uno de
estos registros se debe hacer un doble
clic en la fila del registro correspondien-
te y modificarlo. Esto no es válido para
los puertos que actuen como entrada, en
cuyo caso hay que ir dentro del menú ,
Debugger, la opción Stimulus Controler
como se verá más adelante.
Pulsando sobre el botón contractual
del ratón, aparece una ventan con las
siguientes opciones:
• Go To: Va a la dirección de memoria
indicada en el cuadro de diálogo.
• Import Table: abre el cuadro de diálo-
go para importar una tabla de valores
a partir de la posición de memoria de
programa que se indique.
• Export Table: Abre el cuadro de diá-
logo para exportar el contenido de la
las posiciones de memoria de
programa a un archivo de extensión
52 *.MCH.
• Fill Registers: Abre el cuadro de diá-
logo que nos permite llenar desde un
RESISTOR
registro hasta otro con un valor cons-
tante, datos que vayan incrementado o Figura 3.- Cuadro de diálogo de las propiedades de los Registros de
datos aleatorios. funciones especales.

Figura 4.- Ventana de visualización de Watch.


• Output to File: abre un cuadro de diá- • Refresh: Refresca los datos de esta que hemos indicado al principio de
logo para guardar el contenido del blo- ventana. este epígrafe, de manera que si quere-
que de registros, desde el registro que • Properties: Despliega un cuadro de mos que aparezca la columna Binary
se indique. diálogo de cómo el que se muestra en inmediatamente después de SFR
• Print: Para imprimir el contenido de la la Figura 3. En esta ventana se puede Name, debemos de posicionarnos
ventana. modificar la posición de las columnas sobre el epígrafe Binary del cuadro de
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:15 Página 53

diálogo y pulsando obre Move Up o


Move Down poner dicha columna en
la posición que nos interese. Si pulsa-

MICROCONTROLADORES
mos el botón Hide, la columna desa-
parece de la ventana.

Esta ventan permite supervisar los


VENTANA WATCH

registros de usuario o FSR que haya-


mos seleccionado previamente mien-
tras corre el programa, en esta ventana
se pueden abrir cuatro subventanas
diferentes. Se visualiza en View>
Watch.
Pulsando sobre el botón contractual
del ratón, aparece una ventan con las
siguientes opciones: Figura 6.- Representación de la memoria utilizada en un programa que
• Close: Cerrar esta ventana no corresponde al ejem1.
• Find: Buscar en esta ventana el texto
indicado en el cuadro dialogo de esta • Delete: Borra del Watch el iten que datos se usan actualmente en el proyec-
opción. tengamos seleccionado to. Se visualiza en View>Memori Usa-
• Find Next: Encontrar en esta ventana • Save Watch Tab: Guarda los registros ge Gauge, pero para poder visualizar
la próxima coincidencia del texto indi- y símbolos de la subventana seleccio- los datos se debe lindar el programa por
cado en el cuadro de diálogo anterior. nada en un archivo. ejemplo en nuestro en el caso que esta-
Con <F3> busca hacia delante en la • Load Watch Tab: carga los registros y mos simulado (el programa ejem1) que
ventana y con <Shift>+ <F3> busca
hacia atrás en la ventana.
símbolos de un archivo en la subven-
tana seleccionada.
trabaja con el PIC16F876A, se puede
añadir al proyecto el archivo
53
• Add: Al activar esta opción aparece • Add Watch Tab: añade una nueva C:\Archivos de programa\Microchip\
RESISTOR
un cuadro de diálogo como el de la subventana al Warch, se pueden tener MPASM Suite\LKR\16F876a.lkr.
figura 5, que nos permite añadir un hasta 16.
SRF o un símbolo al Watch. • Rename Watch Tab: Permite dar un
nombre a cada una de las subventas
VENTANA SIMULATOR

• Import Table: Abre el cuadro de diá- Esta ventana nos ayuda a la simula-
TRACE

logo para importar el contenido de la ción del programa. El simulate Trace


los registros o símbolos. toma una “instantánea” de la ejecución
• Export Table: Abre el cuadro de diá- del programa. En el simulador el buffer
logo para exportar el contenido de la de traza o de memoria de traza es útil
las posiciones de memoria de progra- para visualizar un registro a lo largo de
ma a un archivo. la ejecución del programa, de manera
• Output to File: abre un cuadro de diá- que se pueda registrar por donde pasa el
logo para guardar el contenido del programa y después analizarlo. El
bloque de posiciones de memoria que simulador toma datos desde la última
se indique. vez que se pulsó Rum o Animate hasta
• Print: Para imprimir el contenido de que se detiene la simulación del progra-
la ventana. ma, que normalmente será con un Bre-
• Refresh: Refresca los datos de esta akpoint. El buffer de traza es comparti-
ventana. do con el logic analyzer.
• Properties: Despliega un cuadro de Para visualizar la ventana de
diálogo de cómo queremos que apa- memoria de traza hay que seleccionar
rezcan escritos los datos de esta ven- el menú View>Simulate Trace. El
tana. simulador muestra una ventana deno-
minada Trace en la se puede ver cual-
quier variación sobre los registros al
Figura 5.- Cuadro de diálogo ejecutarse el código de instrucción. Esta
VENTANA MEMORI USAGE

para añadir nuevos símbolos al Esta ventana indica la cantidad de ventana tiene las columnas de informa-
GAUGE

Watch. memoria de programa y de memoria de ción siguiente:


50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:15 Página 54

MICROCONTROLADORES

54
RESISTOR

Figura 7.- Ventana de Traza de memoria

• Line: Número de líneas ejecutadas indicado en el cuadro dialogo de esta • Reload: Recarga la memoria de traza
desde que se pulsó Rum por última opción. con los valores que contiene el buffer.
vez. • Find Next: Encontrar en esta ventana • Reset Tie Stamp: Inicializa la imagen
• Addr: Dirección de la memoria de la próxima coincidencia del texto indi- de tiempo condicional del prosecesa-
programa donde se encuentra la ins- cado en el cuadro de diálogo anterior. dor.
trucción Con <F3> busca hacia delante en la • Display Time: En el ventana aparece
• Op: Código de operación numérico de ventana y con <Shift>+ <F3> busca la información del número de ciclos
la instrucción. hacia atrás en la ventana. en segundos o en formato científico.
• Label: Etiqueta de la instrucción si la • Go To: Salte al la opción especificada: • Symboloc Disassembly: En lugar de la
tuviera. • Trigger. Salte a la situación del dirección numérica para SFRs y sím-
• Instruction: Instrucción ejecutada. Trigger. bolos, despliega los nombres de los
• SA: Dirección numérica del registro • Top. Salta a la parte alta de la venta- mismos.
fuente na. • Output to File: abre un cuadro de diá-
• SD: Dato del registro fuente • Bottom. Salte al final de la ventana. logo para guardar el contenido del blo-
• DA: Dirección numerica del registro • Go To Trace Line. Vaya a la línea que de posiciones de memoria que se
destino de la traza especificada en el cuadro indique.
• DD: Dato del registro Destino de diálogo. • Print: Para imprimir el contenido de la
• Cycles: Ciclos máquinas transcurridos. • Go To Source Line. Abra la ventana ventana.
del Archivo y va a la línea de códi- • Refresh: Refresca los datos de esta
Pulsando sobre el botón contractual go de fuente que corresponde a la ventana.
del ratón, aparece una ventan con las línea del rastro seleccionada. • Properties: Despliega un cuadro de
siguientes opciones: • Show Source: Habilita o deshabilita la diálogo de cómo queremos que apa-
• Close: Cerrar esta ventana ventan con el código fuente que apare- rezcan escritos los datos de esta venta-
• Find: Buscar en esta ventana el texto ce debajo de la memoria de traza. na.
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:16 Página 55

microcontrolador seleccionados duran- seleccionar el menú View> Logic


te un período de tiempo. Los datos son Analyzer. Y en este caso para compro-
VENTANA SIMULATOR

La ventana de la figura 8 corresponde a guardados junto con la memoria de tra- bar el funcionamiento del analizador
ANALIZER

un analizador lógico, sobre el que se za y están sincronizados. Para visualizar ejecutaremos en el simulador el siguien-
pueden visualizar todos los pines del la ventana del analizado lógico hay que te código:

;********************************************************************************************
;Contador_binario.asm
;Cuenta en binario, incrementado el PORTB cada 5 us
;********************************************************************************************
List p=16F876A ;Tipo de procesador
include "P16F876A.INC" ;Definiciones de registros internos
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF &
_LVP_OFF & _DEBUG_OFF & _CPD_OFF
CBLOCK 0x20
ENDC
ORG 0x00 ;Vector de Reset
Inicio bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
bcf STATUS,RP0 ;Selecciona banco 0
clrf PORTB
Bucle incf PORTB,F
nop
nop
goto Bucle
end
50-57 Microcontroladores:Maqueta Resistor 22/7/08 09:16 Página 56

máquina, segundos, milisegundos,


microsegundos y nanosegundos.
• Mode: Indica el modo de disparo
MICROCONTROLADORES
seleccionado, es decir, simple o com-
plejo.
En la barra de herramientas se pue-
den seleccionar las siguientes:
• Scroll Axes: Permite deslizarse en el
eje vertical del analizador lógico.
• Zoom Axes: Realiza un Zoom de
zona seleccionada.
• Zoom It All Axes: Realiza un amplia-
ción del la zona de la ventan
• Zoom Out All Axes: Reduce el tama-
ño del contenido de la ventana
• Zom Boox: Activando esta opción,
con ratón se puede marcar un área de
la ventan del analizador lógico para
ampliarla.
Figura 9.- Ventana de diálogo de la selección de canales del analizador • Cursor: Activando el cursor, se puede
lógico. mover arrastrándole con el ratón o
con las teclas de las flechas o con las
Para utilizar el analizador lógico hay • Trigger Now: Activando este teclas de avance y retroceso de pagi-
que seleccionar los canales que se dese- botón, el valor actual del PC se na.
an visualizar, para ello pulsar sobre el pone en la caja de texto. • Copy to Clipboard: Copia la imagen
56 botón de Channels que despliega una
ventana como la de la figura 9, y que
• Trigger Clear: Limpia el valor de dis-
paro y los buffer de datos para una
al portapapeles.
• Save to File: Guarda la pantalla del
dependiendo del microcontrolador pue- nueva captura. Los buffers de datos analizador como una imagen.
RESISTOR
de mostrarnos hasta 64 canales, sobre también se borran si se cierra la venta- • Print: imprime la pantalla como un
los que podremos ver los “0” y “1” y na del analizador lógico. grafico.
los cambios de estados de la simula- • Time Base: La base de tiempos se • Preview: Es una vista previa del
ción. puede seleccionar entre ciclos de documento que se va a imprimir.
Para el ejemplo que nos ocupa
seleccionamos todas las líneas del
PORTB, para ello con el ratón seleccio-
namos RB0 y manteniendo pulsado la
tecla de mayúsculas, seleccionamos
RB7. Seguidamente pulsamos el botón
Add y pasarán los pines seleccionados a
la ventana Selected Signal(s), si se quie-
re eliminar algún canal, solo habrá que
seleccionarlo y pulsar el botón de
Remove.

Los Controles de esta ventana


• Trigger Position: Dispone de tres
botones circulares que permiten espe-
cificar donde ocurrirá el disparo: al
inicio de la captura (Star), en el centro
de captura (Center), o al final de la
captura (End).
• Active PC = :Hay dos métodos de
activar la captura de los datos.
• Trigger PC = value. El valor intro-
ducido en la caja de texto es el Figura 9.- Ventana de diálogo de la selección de canales del analizador
valor de disparo. lógico.
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:35 Página 50

CURSO DE MICROCONTROLADORES
EL MPLAB (IV)
MICROCONTROLADORES
Francisco Javier Tortosa Martínez Fernando Remiro Domínguez
Ingeniero de Sistemas Profesor de Sistemas Electrónicos
Indytel Sistemas S.L. IES. Juan de la Cierva
www.microladder.com www.terra.es/personal/fremiro

50
RESISTOR

Foto 1.- Foto de robot


“Zapatones”, realizado en el
Laboratorio del C.G.S. de
Desarrollo de Productos
Electrónicos del IES Juan de
la Cierva de Madrid.

En esta ocasión nos vamos a centrar en la integración del programa Proteus de


Labcenter Electrónica con el MPLAB. Como podemos ver el programa nos permitirá
realizar la simulación que veníamos realzando con el MPLAB a la vez que generamos
o visualizamos externas al programa del microcontrolador.
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 51

Para depurar los programas el


Bus de datos
VENTANAS DE DEBUGGER

MPLAB dispone de una serie de herra-


mientas que se despliegan dentro de la
8

barra de herramientas de Debug-


Foosc/4 0

ger>Select Tool, tal y como se muestra


RA4/T0CKI Sincronización
1 PSout con el reloj
pin TMR0

en la figura 1.
1 interno
Preescaler 0 PSout
Programable (Retardo de 2 ciclos)
T0SE
El bit T0IF se
3 pone a 1 si hay
overflow
T0CS PS2,PS1,PS0 PSA

Figura 1.- Diagrama de bloques del TMR0

REGISTRO OPTION u OPTION_REG (Dirección 81h,181h)


El Registro de OPTION_REG es un registro que puede ser leído o escrito y que
contiene varios bits de control para configurar la asignación del preescaler al TMR0 o
Figura 1.- ventana de Debugger
al WDT, la interrupción externa, el TMR0 y las resistencias de pull-up del PORTB.

El debugger por Proteus VSM solo


aparecerá si tienes instalado en su orde-
Nota.- Asignar el preescaler como 1: 1 al registro TMR0, asigna el preescaler al

nador la versión 7.1 de este programa,


Watchdog.

que se va haciendo cada vez más popu-


lar en las universidades, centros de for-
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
mación profesional e ingenierías, por lo
que nos parece interesante recalcar
RBPU INTED T0CS T0SE PSA PS2 PS1 PS0
51
como funciona en su integración con el
Bit 7 Bit 0
RESISTOR
MPLAB. Para ello vamos a ilustrar con
un ejemplo de como se trabajaría con
Bit 7: #RBPU: Resistencia de Pull-up en, el PORTB

este entorno. Pero antes de nada debe-


1=Resistencia de Pull-up desactivada

mos decir que Proteus es un programa


0= Resistencia de Pull-up activada
de Labcenter Electronics, cuya web es
bit6 1:INTEDG:, Flanco, de control de interrupciones
http://www.labcenter.co.uk/index.cfm
,en España este producto está comer-
1:Interrupción por flanco ascendente en el pin RB0/INT,

cializado por la empresa Ingeniería


0:Interrupción por flanco: descendente en el pin RB0/INT

Eléctrica Electrónica, cuya pagina web


bit 5: T0SC. Selección del tipo de Reloj para TMR0

es http://www.ieeproteus.com/ .
1 = Los pulsos se introducen a través del, pin RA4/TOCK1
0 = Los Pulsos de reloj internos- Fosc/4
Ejemplo de aplicación: Se trata de
bit 4: T0SE: Tipo de flanco para TMR0
comprobar como funciona el TMR0
del PIC16F877A como contador de
1 = Incremento de TMR0 en cada flanco, descendente por el pin RA4/TOCKI

eventos externos que le llegan a través


0 = Incremento de TMR0 en cada flanco ascendente :por el pin RA4/TOCKI

de la línea RA4 y para ver el estado del


bit 3: PSA:, Asignación del Preescaler

TMR0 presenta el valor de este en el


1 = El preescaler se le asigna al WDT

PORTB. Para ello en nuestro programa


0 = El preescaler se le asigna al TMR0
configuraremos la línea RA4 como
bit 2-0:PS2:PS0: Rango de actuación del preescaler
entrada y todo el PORTB como salida y
en el registro OPTION_REG el bit
T0SC=1 para indicar que los impulsos
PS2 PS1 PS0 Divisor de TMR0 Divisor de WDT

de TMR0 llegarán a través de la línea


0 0 0 1:2 1:1

RA4, T0SE=1 para que se incremente


0 0 1 1:4 1:2

en los flancos de bajada y el PSA=1


0 1 0 1:8 1:4

para asignar el preescaler al WDT y


0 1 1 1:16 1:8

que por lo tanto el TMR0 se incremen-


1 0 0 1:32 1:16

te directamente en cada flanco, que lle-


1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 52

;***********************************************************************************
;Programa...........:Timer0_02
;Plataforma Hardware :Monibot PIC16F877A
;Fecha..............:Septiembre 2008
MICROCONTROLADORES
;Descripción........:Este programa comprueba el funcionamiento del Timer 0 como
;contador de los impulsos aplicados a la línea RA4/T0CKI, donde se ha conectado
;un pulsador. Cada vez que se pulse se incrementa un contador que se visualiza
;los 8 diodos LEDS conectados en las líneas RB0:RB7.
; Como es un incremento por cada impulso aplicado al pin TOCKI no es necesario asignarle
; divisor de frecuencia al TMR0. Por tanto el Prescaler se asigna al Watchdog.
;
; ZONA DE DATOS **********************************************************************
List p=16F877A ;Tipo de procesador
include "P16F877A.INC" ;Definiciones de registros internos

CBLOCK 0x20
ENDC
__config _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _XT_OSC &_WDT_OFF
; ZONA DE CÓDIGOS ********************************************************************
org 0x00 ;Vector de Reset
goto Inicio
org 0x05
Inicio
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
bsf TRISA,4 ;Configura RA4 como entrada
52 clrf
movlw
TRISB
b'00111000'
;Configura el PORTB como Salida
; TMR0 como contador por flanco descendente de
movwf OPTION_REG ; RA4/T0CKI. Prescaler asignado al Watchdog.
bcf STATUS,RP0
RESISTOR
clrf TMR0 ; Inicializa contador.
; La sección "Principal" es de mantenimiento. Solo se dedica a visualizar el Timer 0.
Principal
movf TMR0,W ; Lee el Timer 0.
movwf PORTB
goto Principal
end

gan a la línea RA4. , para ello configu-


ramos el TMR0 como contador de
eventos externos, para que el preescaler
sea de 1:1, se asigna el preescaler al
WDT .Por lo tanto el programa puede
ser el que hemos denominado
Timer0_02.asm.
Lo primero que vamos a hacer es
dibujar el circuito que queremos simu-
lar en el programa ISIS (“Intelligent
Schematic Input System”) de Proteus,
que es programa que realiza la captura
de esquemas. En nuestro caso obtendre-
mos un circuito como el que se muestra
en la Figura 3.
Las características de la señal de
reloj que se conecta a la línea RA4 son
las que se muestran en la figura 4, l.
Figura 3.- Circuito de prueba para el programa TMR0_02.asm. además para que la simulación no de
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 53

problemas, el interruptor de conectado


a la línea RA4 debe permanecer abier-
to, como se ve en el circuito. Como se

MICROCONTROLADORES
puede apreciar el microcontrolador no
hace falta ni conectarle el circuito de
reloj, es decir cristal de cuarzo de la fre-
cuencia de oscilación y condensadores
o una red R-C, ni conectar la señal de
reset a nivel alto para evitar un reset del
microcontrolador, no obstante al editar
las propiedades del PIC16F877A debe-
mos de indicar la frecuencia a la que
deseamos trabaje el microcontrolador y
no le vamos a asignar ningún archivo
de simulación, ya que luego en la inte-
gración con el MPLAB lo tomará. Por
lo tanto, la ventan de propiedades del
microcontrolador queda como se mues-
Figura 4.- Edición de la señal de reloj que inyectamos por la línea RA4. tra en la figura 5.
Por último en la barra de herra-
mientas seleccionamos Debug y activa-
mos la opción Use Remote Debug
Monitor, tal y como se muestra en la
figura 6. Por ultimo salvamos el archi-
vo con el nombre “Entrenador Basico
PIC16F877A“ y cerramos el programa
ISIS de Proteus.
53
Seguidamente abrimos el entorno
RESISTOR
del MPLAB y creamos un proyecto
con el nombre Timer0_02 siguiendo los
pasos que hemos indicado a lo largo de
los artículos anteriores. Y para compro-
bar el funcionamiento del mismo,
seleccionamos la opción Debug-
Figura 5.- Ventan de edición del microcontrolador PIC16F877A. ger>Proteus VSM, esto provoca la

Figura 6.-selección del Use


Remote Debug Monitor del
MPLAB Figura 7.- Pantalla del visor del Proteus VSM en el entorno MPLAB.
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 54

MICROCONTROLADORES
Figura 8.- nueva barra de herramientas después de abrir el esquema de nuestro circuito denominado
“Entrenador Basico para PIC16F877A”.

Figura 9.- Aspecto de la barra de herramientas durante la simulación del funcionamiento del circuito.

54
RESISTOR

Figura 10.- Visualización de los registros internos del microcontrolador, al mismo tiempo que corre el programa
y le llegan señales externas.

apertura de una ventana como la que se ahora en vide inverso aparece el botón tintos o con un fichero el momento de
muestra en la figura 7. que antes era verde y aparece un botón cambio de las señales externas del cir-
Seguidamente, se abre el diseño que rojo que al activarlo genera la parada de cuito.
previamente habíamos guardado para la simulación ( stop simularon). Además Si ahora activamos el botón rojo de
probar el funcionamiento de nuestro aparecen activos los iconos de Rum y Stop Simulation y volvemos al progra-
software. Esto provoca dos cosas, la pri- Animate. Pues bien, si pulsamos sobre ma Proteus y volvemos a abrir nuestro
mera es que se abra el esquema del cir- el botón de Rum, podemos observar circuito, podemos modificar este, por
cuito que habíamos diseñado y la como al correr el programa sobre el cir- ejemplo se sugiere modificar la frecuen-
segunda es que aparezca en la barra de cuito, se modifican el estado de los dio- cia de la señal de reloj a una frecuencia
herramientas un botón como verde cuya dos LEDS conectados al PORTB de de 100 KHz., salvamos el archivo con
función es la de inicio de simulación acuerdo a un contador de 8 bits binarios el mismo nombre y al volver al MPLAB
(start simulations) y otro en video inver- a la frecuencia de 1 Hz. Lo que estamos veremos que el archivo se ha modifica-
so, tal y como puede verse en la viendo es como reacciona nuestro cir- do, si ahora abrimos una venta en
figura 8. cuito y nuestro programa cuando le lle- View>Watch y añadimos los registro
Al pulsar sobre el punto verde, la ga una señal externa, sin necesidad de WREG, PORTA y PORTB, podemos ir
barra de herramientas toma el aspecto habilitar la opción de Debug- ejecutando el programa en modo anima-
que se muestra en la figura 9, donde ger>Estimulus y generar a mano los dis- te o en modo paso a paso (step) y anali-
50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 55

zar como van variando los distintos


registros según corre el programa princi-
pal y según van cambiando las señales
Registro CVRCON (dirección 0x9D)
externas, tal y como se muestra en la
figura 10.
R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

Ejemplo de aplicación: En el
CVREN CVEOE CVRR -- CVR3 CVR2 CVR1 CVR0

siguiente ejemplo vamos a hacer que el


Bit 7 Bit 0

microcontrolador utilice su módulo


bit 7: CVREN: Activación del módulo CVref
comparador para generar una señal en
forma de diente de sierra escalonada y
1 = Alimentación para el módulo CVref en ON

para visualizarlo podremos utilizar el


0 = Alimentación para el módulo CVref en OFF

osciloscopio virtual que incluye Proteus.


El programa se configura el registro
bit 6: CVROE: Salida de la tensión de referencia CVref

CVRCON para que la tensión del módulo


1 = La tensión del módulo CVREF se obtiene también por el pin

CVREF se obtenga también por la línea


RA2/AN2/VREF-

RA2 del microcontrolador y para que el


0 = La tensión del módulo CVREF se se desconecta del pin RA2/AN2/VREF-
rango del escalón sea CVRRSRC/24,
de acuerdo con los parámetros de este
bit 5: CVRR: Selección de rango

registro.
1 = Rango bajo de 0 a 0,75CVRSRC con pasos de CVRSRC/24
En la figura 11 se muestra el diagra-
ma de bloques del módulo generador de
0 = Rango alto de 0 a 0,75CVRSRC con pasos de CVRSRC/32

tensión de referencia CVREF. Básica-


bit 4: No implementado

mente consta de una red resistiva de 16


etapas.
bit 3-0:CVR3:CVR0: Selección de la tensión CVREF de salida 0VR2:VR015

El bit CVREN habilita o no el módu-


Si CVRR=1

lo CVREF desconectándolo de la alimen-


CVREF = ((CR<3:0>)/24)*CVRSRC
tación. El bit CVRR modifica la red
Si CVRR=0
resistiva lo que permite obtener 2 ran-
gos diferentes.
Mediante los bits CVR3:CVR0 se
CVREF =  * (CVRSRC) +(VR3:VR0/32)*(CVRSRC)
55
controla un multiplexor que permite
La tensión de referencia del módulo es la Vdd y Vss general del sistema. La tensión
RESISTOR
determinar la tensión de salida (CVREF)
de salida se puede ajustar en dos rangos de 16 etapas cada uno. El rango se selecciona

según la etapa seleccionada.


mediante el bit CVRR y las etapas mediante un valor de 4 bits (entre 0 y 15) que se

Cuando se produce un Reset en el


aplican a los bits CVR3:CVR0. La ecuación para calcular la tensión de salida CVREF

dispositivo, el módulo CVREF queda


es la siguiente:

desconectado (CVREN=0). También


• Si CVRR=1 (rango bajo)  CVREF = ((CR<3:0>)/24)*CVRSRC

queda desconectada la salida de la ten-


• Si CVRR=0 (rango alto)  CVREF =  * (CVRSRC) +(VR3:VR0/32)*(CVRSRC)
sión CVREF por la línea RA2 (CVROE=0)
y se selecciona el rango alto (CVRR=0).
Si la tensión fuente de referencia CVREF = 5V, en rango de baja resolución es de
En el modo Sep de bajo consumo,
el módulo CVREF sigue activado y el
0.20833V por cada etapa o paso (1/24)*5. La tensión de salida está comprendida entre

registro CVRCON permanece inalterable.


0 y unos 3.124V. En el rango de alta resolución es de 0.150 por cada etapa o paso. La
tensión CVREF de salida está comprendida ahora entre 1,25V y 3.59V.

V
DD

16 Es tados

CVR EN
8R R R R R

8R C VR R

RA2/ AN 2/ VR EF- /C VR EF

C VR OE
C VR 3
Entr ada Mu ltipl exor Anal ogi co 16:1 C VR 2
C om par ador C VR 1
C VR EF C VR 0

Figura 11.-Diagrama de bloques del módulo generado de CVREF


50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 56

;***********************************************************************************************
;Programa: Diente_Sierra_02.asm
;Plataforma Hardware :Monibot PIC16F877A
;Fecha..............:Octubre 2008
;Descripción:Utilizando el módulo generador CVREF, obtenemos una tensión analógica en diente de sierra
;de 16 escalones.La tensión de salida se obtiene por la patilla RA2/CVREF
;***********************************************************************************************
List p=16F877A ;Tipo de procesador
MICROCONTROLADORES
include "P16F877A.INC" ;Incluir definiciones de los registros internos
CBLOCK 0X20
Valor ;Valor para el D/A de salida
ENDC
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF &
_LVP_OFF & _DEBUG_OFF & _CPD_OFF
org 0x00
Inicio
bsf STATUS,RP0
movlw b'00001000' ;Configuta el TMR0 como temporizador y preescaler 1:1
movwf OPTION_REG
bcf STATUS,RP0
Bucle movlw b'00001111'
andwf Valor,W ;Lee el valor para salida
iorlw b'11100000' ;CVREF en ON, CVREF --> RA2,rango bajo,
bsf STATUS,RP0
movwf CVRCON ;Tensión fuente (CVRSRC)=Vdd-Vss, Valor --> CVR3:CVR0
bcf STATUS,RP0
incf Valor,F ;Siguiente valor o etapa de la rampa del diente de sierra
call Retardo_200micros ;Retardo_1ms
goto Bucle
;**********************************************************************************
;Subrrutina de temporización de 200uS utilizando el TMR0
Retardo_200micros
56 bcf INTCON,INTF ;Flag de desbordamoento de TMR0 = 0
movlw .66 ;Valor experimental que hay que cargar en TMR0
movwf TMR0 ;para que la subrruina dure 200 uS
Espera btfss INTCON,T0IF ;Se ha desbordado el TMR0?
RESISTOR
goto Espera ;si no se ha desbordado espera
return ;Si se ha desbordado retorno subrruitna
end ;Fin del programa fuente

Figura 12.- Circuito para comprobar el funcionamiento del programa diente_sierra_02.asm


50-57 Microcontroladores:Maqueta Resistor 17/10/08 11:36 Página 57

Si se desea reducir el consumo en el


modo Sep será necesario desconectar el
módulo CVREF poniendo a “0” el
bit CVREN, lo que desconecta a la red
resistiva.
Este módulo generador de tensión
de referencia CVREF puede trabajar de
forma totalmente independiente del
módulo amparador. Esa tensión de refe-
rencia se puede obtener por la patilla
RA2/ CVREF siempre que se active el bit
CVROE. Es este caso la línea RA2 se pue-
de considerar como señal de salida de
un convertidor D/A de 4 bits (16 eta-
pas). Por lo tanto el programa será el
que hemos denominado Diente_Sierra_
02.asm.
El circuito que capturaremos en Pro-
teus es el que se muestra en la figura 12.
Si seguimos los pasos indicados en
el ejemplo anterior, al simular el funcio-
namiento del programa, aparecerá una
pantalla de osciloscopio como la que se
muestra en la figura 13, en la que se
puede ver perfectamente el funciona-
miento del programa. Figura 13.- Señal obtenida en el osciloscopio virtual de Protesus