Está en la página 1de 183

CAPTULO IX: Dispositivos programables

Estudio de memorias EPROM, PLDs y


microcontroladores

Jos Luis Snchez Calero

2007

Memorias EVPROM
Montad el circuito de la figura.

Automatismo
Se trata de realizar un convertidor de binario
a BCD. Con las sondas inyectoras de
entrada conectaremos cdigo binario y en los
visualizadores aparecer cdigo BCD.
Esto quiere decir que una entrada igual a
1100 debe dar una salida igual 0001 0010.
Lo primero que realizaremos ser la tabla de
conversin, que aparece en la siguiente
diapositiva.

Tabla de la verdad
Decimal
A3 A2 A1 A0
0 0 0
1
2 0 0
3 0 0
4 0 1
5 0 1
6 0 1
7 0 1
8 1 0
9 1 0
10 1 0
11 1 0
12 1 1
13 1 1
14 1 1
15 1 1

Entradas
D7 D6 D5 D4
0 0
0
0 0 0 1
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0

Salidas
D3 D2 D1 D0
0 0 0
0
0 0 0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
1
0 0 0
1
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0

0 0 0
0
0 0 0
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
0 0 0
0 0 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1

Tabla de la verdad
Para grabar la EVPROM necesitaremos
crear un fichero binario con la tabla anterior.
Para ello podemos emplear, a falta de otra
herramienta ms cmoda, el bloc de notas.
Y para ello debemos saber cmo se
interpreta un fichero binario estndar tipo
INTEL 8 bits.

Fichero binario estndar


Nuestro fichero de grabacin tendr esta
forma, en formato estndar.
N de paquete,
en hexadecimal

N de bytes
del paquete,
en
hexadecimal

N de orden del
1er. Byte, dentro
del paquete

:100000000001020304050607080910111213141554
Separacin de
comienzo del paquete

:00000001FF
La ltima lnea
es fija

Primer byte
a grabar

Siguientes bytes

Cdigo de
control

Obtencin del CRC


Para obtener el byte de control (CRC) hay
que sumar todos los bytes de la fila, eliminar
el acarreo que se produzca, para tener
siempre un resultado de un byte, y, el
resultado final hay que restarlo de 100h.
En nuestro ejemplo: 10h+00h+00h+00h+00h+
01h+02h+03h+04h+05h+06h+07h+08h+09h+
10h+11h+12h+13h+14h+15h = ACh
100h ACh = 54h

Fichero binario
Una vez escritas estas dos filas de datos en
el bloc de notas, salvaremos el fichero con
extensin .hex. En nuestro ejemplo le
hemos dado el nombre de
EVPROM01.hex

Grabacin de la EVPROM
Para grabar la EVPROM la seleccionamos
y la editamos. Se abrir la ventana de la
figura.

Pinchamos esta carpeta


y buscamos el fichero
.hex a grabar. Despus
aceptamos y ya est
grabada la memoria

Funcionamiento
Arrancad la simulacin y veris cmo se
produce la conversin de binario a BCD.

Dispositivos PLDs
Montad al circuito de la figura.

Dispositivos PLDs
La sonda del reloj est en:

Y as la programamos

Dispositivos PLDs
Vamos a tomar como ejemplo una GAL22V10.
En estos dispositivos podemos crear el fichero
de grabacin en formato de fusin de fusibles
estndar (JEDEC), o en nuestro socorrido
bloc de notas, de acuerdo al formato que se
da en el fichero GAL22V10VIRGEN.TXT.
El fichero del ejercicio se llama
GAL22V10CONTAPAR_IMPAR

Grabacin de la GAL
Al igual que hicimos con la EVPROM,
seleccionamos la GAL y la editamos.

Pinchamos ah para
buscar el fichero de
grabacin

Seleccionar fichero
Es posible que haya que desplegar la ventana
Tipo de ficheros para que aparezcan los
.txt
1
Pinchad aqu para
elegir Todos los tipos
de ficheros

2 Elegid el fichero
.txt a grabar

Grabacin de la GAL
Una vez elegido el fichero, aceptamos... y
grabada la GAL.
Aceptamos

Fichero elegido

Prueba de funcionamiento
El diseo corresponde a un contador que sigue
la secuencia pares o impares, en contaje BCD.
Con la entrada M cambiamos de secuencia,
si la ponemos a 0. Para que siga la secuencia
deseada debe estar a 1. Esto quiere decir
que si ponemos M siempre a 0, como estar
cambiando de secuencia continuamente,
tendremos un contador BCD.
Las entradas de Preset y Reset son sncronas
en la GAL22V10.

Prueba de funcionamiento
Cuando deseemos cambiar la secuencia
llevaremos M a 0. Cuando el contador
haya pasado a la secuencia contraria
volveremos a poner M a 1 para que siga
en la nueva secuencia.

Microcontroladores

Las explicaciones que seguirn se


desarrollan en torno al microcontrolador de
Microchip PIC 16F876, que es el que
estudiamos en el Ciclo Formativo Superior
de DESARROLLO DE PRODUCTOS
ELECTRNICOS.

Circuito base
Diseemos el circuito de la figura.

Propuesta del programa


Una vez confeccionado el esquema del
circuito hay que desarrollar el programa que
lo haga funcionar. En nuestro ejemplo vamos
a realizar un programa que visualice HOLA
en una posicin centrada de la fila superior
de la pantalla LCD.

Herramienta para programa


Para escribir el programa en lenguaje
ensamblador podemos utilizar varias
herramienta, incluso el bloc de notas de
Windows. Nosotros utilizaremos MPLAB de
Microchip.
Lo primero que nos encontramos es un
fichero fuente (Source), al que llamaremos
saludo.asm. La realizacin y comprensin de
este programa corresponde a otra disciplina,
muy alejada del conocimiento de PROTEUS.

Imagen del ensamblador


Aspecto del programa ensamblador en bloc
de notas.

Men Source
Disponiendo del fichero fuente ya podemos
configurar todo el entorno PROTEUS para
que puedan generarse el resto de ficheros
necesarios.
Seleccionemos el men Source.

Aadir o quitar un fichero .asm


Pincharemos sobre Add/Remove Source
files

Ventana para aadir fichero


Esto nos lleva a la ventana de la figura,
donde elegiremos New (fichero nuevo).

Inclusin del fichero fuente


Esto nos lleva a una ventana donde deberemos buscar
nuestro fichero saludo.asm. Una vez abierto, se reflejar en
la ventana correspondiente, como muestra la figura. Si aqu
hubiese otro fichero de una simulacin anterior, mediante el
botn Change podremos cambiar de fichero fuente.

Eleccin de herramienta
La operacin siguiente es decirle a
PROTEUS qu herramienta, de las varias
que lleva, debe utilizar para generar el resto
de ficheros necesarios para simulacin.
Elegiremos MPASM, y aceptaremos.

Pinchamos aqu
para desplegar lista
de herramientas
Se elige sta

Observacin del fichero


A partir de este momento, al desplegar el
menu Source veremos, debajo de las
opciones, el nombre del fichero elegido.

Aqu se ve el nombre del


fichero seleccionado

Abrir el editor
Y si pinchamos sobre l se abre una ventana de edicin
donde podemos retocar o modificar el cdigo ensamblador.

Herramientas para cdigos


El paso siguiente es volver a desplegar el
men Source y escoger la opcin Define
Code Generation Tools

Herramientas para ensamblar


Esta accin nos lleva a una ventana donde
debemos elegir las herramientas de
desarrollo. Aqu volveremos a elegir
MPASM, en la casilla de la figura.

Ruta de Herramientas
Y, aunque PROTEUS ya da la ruta completa
donde se encuentra esa herramienta,
deberemos asegurarnos que el camino es el
que muestra la figura. Si no fuese as,
mediante el botn Browse deberemos
buscar el fichero MPASM.EXE, dentro de la
carpeta Tools, de PROTEUS.

Fichero HEX
En la misma ventana anterior deberemos
asegurarnos que las opciones del apartado
Make Rules estn como en la figura. Aqu
observamos que se obtendr un fichero tipo
HEX a partir de un ASM. Aqul ser el que
grabaremos en el micro.

Cdigo LST
El ltimo apartado de la ventana de
Definicin de Herramientas para Generacin
de Cdigos nos encontramos con la
Extraccin de Datos para Depuracin del
programa. Debe de estar como en la figura.

Fichero para cdigo LST


Si la ruta del fichero MPASMDDX.EXE no
fuese la mostrada, con el botn Browse
podemos buscarlo, dentro de la carpeta
Tools que lleva PROTEUS.

Buscar editor
El paso siguiente es asegurarnos de que el
programa de edicin que empleara
PROTEUS, en caso de retoques o
modificaciones, es el apropiado. Para ello
pinchad como en la figura.

Eleccin de editor
Se abre la ventana de seleccin de editores.
Elegid como en la figura; es lo que sale por
defecto.

Construccin de ficheros
Establecidas las herramientas, slo falta
decirle que nos construya todo. Eso lo
conseguimos con la opcin de la figura.
Hay que asegurarse que estn, en la misma
carpeta que el fichero fuente, todas las
subrutinas que emplee el programa.

Aviso final de construccin


Si la operacin se realiza con normalidad
(sin errores), una ventana como la mostrada
nos lo avisar.

Listado de cdigos generados


Si se hubiesen producido errores
en el proceso, no se generarn los
cdigos necesarios para simular y
habr que buscar la causa de esos
errores.
Los cdigos generados en un
proceso correcto, necesarios para
la simulacin y depuracin, son

Preparando la simulacin
Con los cdigos generados ya podemos
arrancar la simulacin.
Y para ello lo primero que tenemos que
hacer es grabar el micro con el fichero
hexadecimal saludo.HEX.

Edicin del micro


Pinchad sobre el chip, con botn secundario,
para marcarlo. Seguidamente botn primario
para editarlo. Sale la ventana de la figura.

Escribid aqu la frecuencia de


trabajo del micro

Bsqueda fichero .HEX


Pinchad sobre la carpeta de la ventana
Program File: para abrir la bsqueda del
fichero saludo.HEX.

Grabacin del chip programable


Una vez encontrado y abierto, quedar
visible en la ventana anterior.

Ya est grabado el PIC.

Simulacin VSM
Arrancad la simulacin VSM y veris el
circuito as:

Programa a realizar
Vamos a estudiar las herramientas de
depuracin paso a paso analizando un
programa sencillo.
Diseemos el circuito que se muestra en la
figura de la siguiente diapositiva y
realizemos el programa ensamblador para
conseguir una intermitencia de los
visualizadores con cadencia de un segundo.
Este programa se llamar contador.asm.

Circuito a montar
Circuito a montar.

Programa de contador
El programa realiza un contador BCD, que
visualiza el micro en un display de 7
segmentos de ctodo comn.
El fichero del programa se denomina
contador.asm, y puede abrirse con el bloc de
notas.
Con el bloc de notas podemos escribir
cualquier programa para simulacin, con la
nica precaucin de guardarlo con la
extensin .asm.

Generacin de ficheros
Seguid paso a paso la explicacin de las
diapositivas 24 a 46 .
Si todo ha ido perfectamente la simulacin
VSM se realizar correctamente y se
visualizar un contador BCD con una
cadencia de 1 seg.
Pero vamos a realizar el seguimiento del
programa paso a paso, para analizar el
cambio de los diversos bloques internos del
microcontrolador.

Programacin tiempo de paso


Lo primero que debemos programar es el
tiempo de un paso de programa. Si
queremos que cada paso corresponda a una
instruccin deberemos hacer el siguiente
clculo:
Tinstruccin = 4 x Tclock
Tinstruccin = 4 x 250 ns = 1 s
(Para un reloj de 4 MHz)

Programacin tiempo de paso


As pues, procederemos a programar este
tiempo, as:
seleccionamos el
tiempo adecuado a la
duracin de la
instruccin

En este men

Simular paso a paso


Arrancad la simulacin paso a paso
pulsando Ctrl + F12.
Tambin conseguimos el mismo efecto
pinchando sobre el botn de paso a paso.
O mediante Debug > Start/Restart
Debugging.

Ventanas para depuracin


Si desplegis el men Debug se os
mostrarn todas las ventanas de depuracin
disponibles para el seguimiento del
desarrollo del programa.

Explicacin de ventanas para


depuracin
A continuacin vamos a explicar todas las
ventanas de depuracin. Abrid el men
Debug y pinchad sobre la primera que
aparece.

Ventana Simulation Log


Si en la ventana del men Debug pinchis
sobre Simulation Log se abrir la ventana
correspondiente, que aparece en la figura de
la siguiente diapositiva.

Ventana Simulation Log

Y quedar la marca de ventana abierta.


Marca de
activacin

Desplazar y modificar ventana


La primera manipulacin con la ventana es
el desplazamiento y el cambio de
dimensiones.
Estas operaciones se realizan como con
cualquier ventana de windows: pinchando y
arrastrando sobre la banda azul de ttulo,
para mover, y pinchando y arrastrando sobre
las esquinas o laterales para modificar
tamao.

Ventana de Cdigo Fuente


Cerrad la ventana anterior, que es la que
menos necesitamos para analizar el
programa.
Abrid la ventana del cdigo fuente del
programa, pinchando en

Ventana de Cdigo Fuente


Aparece el cdigo fuente del programa.

Edicin de la ventana
Si pinchamos con
secundario sobre
cualquier zona de la
ventana del Cdigo
Fuente se edita y
aparece la ventana
emergente de la figura.

Edicin de la ventana
Al editar la ventana de Cdigo Fuente nos aparecen
tres opciones para ajustar el aspecto de la ventana
a nuestro gusto.
La primera de las tres opciones nos permite mostrar
u ocultar la numeracin de lneas de programa; la
segunda opcin hace lo mismo con las direcciones
de memoria, y la tercera, con los cdigos de
operacin de las instrucciones.
La figura est programada para que se muestre, en
la ventana de Cdigo Fuente, solamente las
direcciones de memoria.

Edicin de la ventana
Si visualizamos las lneas del programa y el
cdigo hexadecimal de las instrucciones, la
programacin de las opciones quedar as:

Edicin de la ventana
Y el aspecto de la ventana de programa ser
ste:

Lneas del
programa

Direcciones
del programa

Cdigo hexadecimal
de las instrucciones

Edicin de la ventana
Dejad visibles las lneas y la direccin.

Edicin de la ventana
En la parte inferior de la ventana de edicin
disponemos de dos opciones que nos
permitirn personalizar las letras y los
colores de la ventana de Cdigo Fuente.
Probad estas opciones.

Ventana de Registros
Para ver la ventana que nos muestra todos
los registros internos del micro, pinchad
sobre la opcin

Ventana de Registros
Y obtenemos la ventana

Aparece esta ventana si


pinchamos secundario
dentro de la ventana de
registros

donde se aprecian los registros ms


utilizados del micro.
Pinchando con secundario dentro de la
ventana se pueden cambiar colores y letras.

Ventana de Memoria de Datos


Pinchad segn la figura, para abrir la
ventana que muestra el contenido de la
memoria de datos del chip.

Ventana de Memoria de Datos


Obtendremos la
ventana de la figura,
donde vemos en
hexadecimal y ASCII
el contenido de la
memoria de datos.
Posando el cursor en
cualquier dato del
mapa nos aparece la
direccin y el
contenido.

Zona de cdigos
ASCII

Edicin de ventana de Memoria de


Datos
Pinchando con
secundario encima
del bloque de la
Memoria de Datos
se despliega una
ventana con varias
opciones muy
interesantes.

Opciones de la ventana de Memoria de


Datos
La primera de las opciones nos permite ir a
una determinada direccin.

Se abre una ventana para escribir


la direccin a l que deseamos ir.
Escribid 48 y aceptad

Al pinchar sobre Goto

Ir a direccin concreta de la
Memoria de Datos
El resultado es que nos lleva a la direccin
48 decimal, que en hexadecimal es la 30.

Visualizacin-ocultacin de datos
La opcin mostrada permite mostrar u ocultar
los datos ASCII de la ventana.
Con la opcin validada
observaremos los datos
del banco en sus cdigos
ASCII

Desactivando la opcin
vemos que en el banco
han desaparecido los
cdigos ASCII del
contenido de la memoria

Resaltar cambios

Valores que han


cambiado

Esta opcin permite


que se resalten los
valores que han
cambiado al
arrancar el
programa

Valores iniciales del banco


3 Si en la ventana de
1 Pinchando sobre
esta opcin nos
mostrar los valores
iniciales del banco

2 Nos aparece un aviso


para que sepamos que
esta opcin se desconecta
despus de la siguiente
simulacin.

aviso anterior
hubisemos aceptado,
ahora veramos los
valores iniciales

Valores iniciales del banco


La opcin habr
quedado activada

Si volvemos a pinchar
sobre la opcin

de nuevo aparecen los valores que


haba dejado el programa al iniciarse.
Ahora podramos seguir con la
ejecucin sin tener errores.

Visualizacin de datos modo byte


Permite elegir que el modo de visualizar los
datos del banco de registros sea por bytes.

Por defecto est en


visualizacin por byte

Aqu se ven los datos


byte a byte

Visualizacin de datos modos texto


Permite elegir que el modo de visualizar los
datos del banco de registros sea en ASCII.

Aqu se ven los datos


en formas de texto

Visualizacin de datos en forma de


palabra de dos bytes

Aqu se ven los datos agrupados en


palabras de dos bytes, empezando
por el LSB

Visualizacin de datos en forma de


palabra de dos bytes

Aqu se ven los datos agrupados en


palabras de dos bytes, empezando
por el MSB

Visualizacin de datos en forma de


doble palabra de dos bytes

Seleccin de visualizacin de
datos en agrupados en doble
palabra de dos bytes cada una,
empezando por el LSB

Y as se vern los datos


segn esta forma

Visualizacin de datos en forma de


doble palabra de dos bytes

Seleccin de visualizacin de
datos en agrupados en doble
palabra de dos bytes cada una,
empezando por el MSB
Y as se vern los datos
segn esta forma. Dejad el
modo Byte para seguir

Formato de visualizacin como datos de


cifras enteras con signo

Y as se vern los datos


segn esta forma

Formato de visualizacin como datos de


cifras enteras sin signo

Y as se vern los datos


segn esta forma

Ventana de EEPROM de Datos


Esta ventana se obtiene al pinchar la opcin
de la figura.

Ventana de EEPROM de Datos


Y esta es la imagen obtenida de los 256
bytes de la EEPROM de datos interna.
Como no se ha grabado nada en ella los
datos permanecen en FFh.

Ventana de EEPROM de Programa


Esta ventana se obtiene al pinchar la opcin
7, segn la figura.

Ventana de EEPROM de Programa


Estas son las instrucciones del programa
(empezando por el LSB)

Observad que las posiciones no grabadas


estn a 1. Por eso, con los 14 bits de la
instruccin la cantidad visualizada sera el
3FFFh, pero empezando por el LSB, FF3Fh

Ventana de EEPROM de Programa


Aspecto de la ventana, visualizando las instrucciones
completas con el byte de menor peso delante.

As es como nosotros leeramos los


cdigos de operacin de las
instrucciones

Ventana de Pila
Seleccionando la opcin 8 se obtiene la
ventana de pila.

Ventana de Pila
Aspecto de la ventana de la Pila interna del
micro. La entrada ltima es la que est
marcada con la flecha. Es a la direccin que
saltar la CPU cuando encuentre una
instruccin de retorno, o donde se grabar la
direccin con un nuevo salto a subrutina.

ltima entrada en
pila

Ventana de observacin
Esta ventana se obtiene al seleccionar la
opcin 2.

Ventana de observacin
Tiene el aspecto de la figura, con un mnimo
de dos columnas de observacin.

Como mnimo tendremos


dos columnas en la
ventana: Name y Value

Nos servir para seleccionar los registros y


variables que deseamos observar durante la
depuracin.

Separacin de columnas
Si llevamos el cursor a la lnea de separacin
entre columnas, cambiar de aspecto y
podemos arrastrar para variar la separacin
entre aqullas.

Edicin de ventana de observacin


Si pinchis con secundario dentro de la ventana
aparecern las opciones de edicin

Edicin de ventana de observacin


Aadid todas las opciones de la ventana
activando las casillas como en la figura.

Pinchad para
validar

Edicin de ventana de observacin


As quedar la ventana de observacin:

Columna para ver


la direccin de
las variables

Columna para
ver el valor de
la variable
antes del
cambio

Columna para ver


el tipo de las
variables elegidas

Columna para
comentarios sobre
las variables

Valor actual
de la variable

Hemos aadido una


cuadrcula

Edicin de ventana de observacin


Y as quedar minimizada:

Pinchamos aqu, o
pulsamos espacio, para
minimizar la ventana

As queda minimizada

Edicin de ventana de observacin


Disponemos de las opciones conocidas para
modificar el aspecto de datos.

Tipo de letras y colores


Tambin aqu podemos cambiar el tipo y
color de letra de la ventana.

Utilidad de la ventana de
observacin
Esta ventana es muy til para extraer aparte
ciertos registros, que son de especial inters
en su observacin.
Vamos a sacar a la ventana tres registros de
todos los posibles observables.

Utilidad de la ventana de
observacin
Esta ventana es muy til para extraer aparte
ciertos registros, que son de especial inters
en su observacin.
Vamos a sacar a la ventana dos registros de
todos los posibles observables.
En primer lugar vamos a dejar la ventana con
tres columnas de observacin, tal y como se
ve en la siguiente diapositiva.

Utilidad de la ventana de
observacin
Recordad que las columnas Name y Value
siempre aparecen por defecto. Es la
visualizacin mnima que se puede desear.
Pincharemos aqu
para aadir esta
columna

Pincharemos
aqu para aadir
la rejilla

As queda
la ventana

Eleccin de registro observable


Pinchad con secundario encima de la
ventana de observacin y, en las opciones
desplegadas, elegid la de la figura.

Eleccin de registro observable


La accin anterior nos lleva a la ventana de
la figura.
Aqu podemos elegir de
entre dos grupos de
registros observables

Conjunto de registros
observables en la
ventana

Eleccin de registro observable


Eleccin del otro grupo de registros.

Eleccin de registro observable


Eleccin del otro grupo de registros.

Eleccin de registro observable


Eleccin del registro PCL.
Aqu seleccionamos el
bloque de Memoria de
Datos de la CPU

Y aqu pinchamos dos


veces para seleccionarlo

Eleccin de registro observable


As nos quedar el registro insertado en la
ventana de observacin.

La direccin del PCL


dentro del banco de
registros internos es la
2hex

Como el programa se
encuentra en el inicio, el PCL
tendr el valor 0. Tenemos el
valor en binario pero podemos
cambiarlo a hexadecimal, si es
ms cmodo

Eleccin de registro observable


Si deseamos borrar o manipular este registro
seleccionado, recordad que hay que pinchar
encima de l con secundario para desplegar
todas las posibilidades. Probadlo y lo dejis
visualizado en valor hexadecimal.
En hexadecimal

Eleccin de registro observable


Ahora vamos a extraer a ventana de
observacin el puerto B, pero siguiendo otra
posibilidad.
Pinchad con secundario en la ventana de
observacin y elegid la opcin de la figura.

Eleccin de registro observable


Desplegando la ventana Memory se puede
elegir el bloque de registros del que extraer.
Aqu podemos elegir
el bloque a tratar

Opciones de
visualizacin
Opciones de
visualizacin

Eleccin de registro observable


Pinchando en la ventana Address se
despliega el conjunto de registros.

Eleccin de registro observable


Y pinchamos sobre PORTB.

Eleccin de registro observable


En la ventana vemos que PORTB posee la direccin 6h y se
va a visualizar en forma de byte y en binario.

Aadimos y
aceptamos

Eleccin de registro observable


Y as queda la ventana de observacin.

Edicin de ventana de cdigo fuente


Volvamos a visualizar el Cdigo Fuente y
editmoslo para que se vea como en la figura.

Bsqueda de lnea de Cdigo


Fuente
La primera opcin activa de que disponemos
es:
Pinchad aqu

Que nos permite ir a una lnea determinada.

Bsqueda de lnea de Cdigo


Fuente
Se abrir la ventana de la figura que nos pide
el nmero de lnea a ir.
Escribid 5 en la
ventana y aceptad

El resultado es que se resaltar la


lnea 5 del programa. Atencin,
que es lnea 5, no direccin 5

Bsqueda de direccin
Si deseamos ir a una determinada
instruccin, tendremos que editar la ventana
del programa y seleccionar la opcin de la
figura.

Bsqueda de direccin
Este es el resultado:

sta s es la
instruccin 5 del
programa, que est
en la direccin 5

Bsqueda de palabra
La siguiente opcin se emplea para localizar una
determinada palabra del texto. Para empezar a
buscar la palabra desde el principio ser necesario
llevar el cursor de la pantalla del programa al inicio.

Pinchamos aqu para


poner el cursor de
bsqueda al inicio

Bsqueda de palabra
Ahora editamos y elegimos la opcin de
bsqueda

Pinchamos en esta opcin

Bsqueda de palabra
Con la accin anterior se abrir una ventana
que nos pedir la palabra a buscar, con
algunas condiciones de bsqueda.
1 Escribimos aqu el
texto que se ve.
Esta opcin dice que va a
buscar cualquier palabra
que contenga exactamente
lo que hemos escrito. Y al
decir exactamente se
tendr en cuenta las
maysculas o minsculas

2 Activamos esta
opcin

Pinchamos

Bsqueda de palabra
El resultado es:

Aqu nos avisa


en qu lnea ha
encontrado lo
que buscamos

Pinchando aqu
contina la bsqueda
hacia adelante

En la lnea 4 ha
encontrado el
trmino contador,
que tiene los
caracteres
exactamente que le
hemos puesto en el
texto de bsqueda.
Observad cmo no
se ha detenido en la
lnea 2, porque la
palabra es la misma
pero la C es
mayscula.

Pinchando aqu
continuar la bsqueda
hacia atrs

Bsqueda de palabra
Si optamos por encontrar una palabra completa deberemos
escribir la palabra deseada y activar la casilla Only Whole
Words? En el ejemplo se ha buscado la palabra contador.

Palabra a buscar.
Ahora slo importa
la palabra, no las
maysculas

2 da como
1 Al pinchar aqu

resultado la
detencin en esta
lnea

Bsqueda de palabra
Pinchando repetidamente sobre Next iremos
viendo las siguientes lneas que cumplen la
condicin de bsqueda; si pinchamos sobre
Previous iremos viendo las lneas anteriores.

Bsqueda de palabra
La ventana de bsqueda memoriza los
trminos introducidos.
En la figura se aprecian varias entradas
empleadas como prueba.

Pinchando aqu se
despliega el listado
de bsquedas
realizadas

Bsqueda de palabra
Si deseamos hacer bsquedas sucesivas
podemos optar por la solucin rpida del
teclado, pulsando Ctrl + G, o mediante la
opcin desplegada

Anlisis de la ejecucin
Vistas las opciones de edicin, vamos a
entrar en el anlisis de la ejecucin del
programa.
Vamos a visualizar en pantalla los siguientes
elementos: el esquema, el cdigo fuente, los
registros internos del micro, la RAM de
registros y la pila.

Anlisis de la ejecucin
Parad la simulacin paso a paso y volvedla a
arrancar.
Pinchamos para
detener

Ctrl+F12 para iniciar paso a paso, o con ratn


el botn de la figura.

Pantalla de ejecucin y anlisis

Pantalla de ejecucin y anlisis


Pinchamos en la primera instruccin del
programa para que se activen los iconos de la
esquina superior derecha.

Se activan

Pinchamos en la
instruccin de la
direccin 0h

Icono de ejecucin continua


Pulsad F12 o pinchad el icono de la figura.

Si pinchamos este icono se


arrancar la simulacin continua.
Aunque nuestro objetivo es
simular paso a paso, vamos a
pinchar aqu para ver la respuesta
a la simulacin continua. Pinchad

Ejecucin paso a paso


El resultado es que desaparecen las ventanas
de cdigo, de los registros y de la pila, y que
el programa se ejecuta en modo continuo.
Esto ya lo conocemos y, por lo tanto, vamos a
volver al modo paso a paso.
Detened e iniciad el paso a paso.

Iconos para paso a paso


Los tres iconos que se emplean en la
simulacin paso a paso se describen a
continuacin.
El de la figura se emplea para que la
simulacin no se detenga en las subrutinas
Pinchando sobre este botn, cuando el programa encuentra una
subrutina la ejecuta rpidamente de forma continua, no se detiene
en ella y la salva. Es muy til para evitar las subrutinas que ya han
sido probadas y no hay duda sobre su correcto funcionamiento

Iconos para paso a paso


El segundo icono permite entrar en las
subrutinas. Sera la simulacin completa paso
a paso.

Pinchando sobre este botn se


ejecutan todas las instrucciones
paso a paso, incluidas las
contenidas en subrutinas

Iconos para paso a paso


El tercer icono permite salir de las subrutinas
unas vez se ha entrado en ellas.

Pinchando sobre este botn se ejecuta rpidamente


lo que quede de subrutina. Es til para probar
subrutinas que provocan que el programa d
muchas vueltas sobre un mismo bucle

Puntos de detencin
Con el icono de la figura podemos colocar
puntos de detencin en las instrucciones que
deseemos.

Cuando el simulador encuentra un punto de


detencin sobre una instruccin, provoca la
detencin del Contador de Programa en esa
instruccin (antes de que se ejecute).

Puntos de detencin
Con esta utilidad podremos hacer que el
programa funcione de forma continua hasta
encontrar el punto de detencin.
Es una forma muy til de depuracin el
ejecutar rpidamente todo lo que est
probado y, nicamente detener el programa
en las zonas de dudas.

Puntos de detencin
Colocaremos un punto de detencin en la
instruccin de la direccin 0006h.
La forma ms rpida es pinchar dos veces
sobre la instruccin de la direccin deseada.
Doble clic sobre la direccin 0006h.
Aparece un punto rojo
sobre esa lnea que
indica punto de
detencin.

Puntos de detencin
Otra forma de colocar el punto es situar el
cursor en la instruccin deseada y pinchar
sobre el icono del punto de detencin

Y pinchamos aqu

Colocamos el
cursor

Borrado de puntos de detencin

Volved a pinchar dos veces sobre la misma lnea.


A desaparecido el relleno del punto pero queda el
contorno. Esto nos indica que el punto se ha
cancelado pero deja la huella de que alguna vez
estuvo ah. Es una ayuda muy til para hacer un
seguimiento de hasta dnde llevamos el control.

Borrado de puntos de detencin


Si volvemos a pinchar dos veces sobre la
misma lnea desparecern el punto y la
huella.
Tambin el borrado puede hacerse con el
icono

Arrancando el anlisis
Con la pantalla del circuito en paso a paso
visible pulsemos F12 para iniciar la
simulacin desde la primera instruccin.
El simulador se detiene en el punto de
detencin que hemos fijado y nos muestra
una cantidad en el display.
Analicemos el programa y lo mostrado por la
simulacin.

Programacin de TRISB
En las dos primeras instrucciones
seleccionamos el banco 1 de registros RAM
de la CPU para, con ello, poder borrar el
registro TRISB que nos programa el puerto B
como ocho lneas de salida. Esto ltimo se
programa en la tercera instruccin.
Si observamos TRISB, en la ventana de
registros internos de la CPU, veremos que
tiene sus ocho lneas a 0. O sea, sea ha
programado correctamente el registro de
direccin del puerto B

Explicacin a la visualizacin
Por qu se ve ese nmero en el display al inicio?
Porque al programar el puerto B como salida, en sus
lneas saldr el contenido del registro PORTB, que
tiene ese valor tras el reset inicial puesto que an no
lo hemos tocado.
Aunque este valor dure muy poco (porque tras unas
pocas instrucciones ya saldr el cero), puede ser
una buena costumbre cargar PORTB con el valor
deseado antes de programar la direccin. Pero todo
esto es meterse en el micro, que no es el objetivo de
este curso.

Programacin de TRISB
En la figura se observan todos los registros
internos de la CPU.

Puerto B
como salida

Variable Conta
En la cuarta y quinta instruccin (direcciones 3 y 4)
se vuelve al banco 0 de registros RAM.
En la instruccin sexta se borra el registro Conta ,
que en la lnea 36 del programa se defini como
registro con direccin 20h.
Observad cmo el registro 20h est a 0. Y no est
resaltado porque tena ese valor por defecto en la
conexin y no ha cambiado.
Variable Conta a cero

Siguiendo con el anlisis


En la instruccin sptima se ha detenido el
programa, por lo tanto no se ha ejecutado esa
instruccin.
Esa instruccin carga el registro de trabajo W con el
valor de la variable Conta. Por la tanto, cuando se
ejecute, pondr a 0 el W.
Para ver si la realiza correctamente aadimos otro
punto de detencin en la instruccin de la lnea 51.

Aadimos punto de
detencin

Siguiendo con el anlisis


Observad que la flecha roja de la izquierda
nos indica que el cursor del programa est
detenido en la instruccin de la direccin 6h.
Aunque hayamos manipulado la pantalla para
colocar otro punto de detencin, y la banda
azul est en otra posicin, el cursor no se
altera, por lo que no hace falta volver a
pinchar sobre la instruccin en la que se
detuvo la simulacin para que se coloree esa
direccin. Una cosa es el coloreado, que
resalta la ltima accin, y otra el cursor.

Siguiendo con el anlisis


Volved a pulsar F12 para continuar con la
ejecucin.
Ahora se ha detenido el programa en el
segundo punto de detencin, por lo que se ha
ejecutado la instruccin de la direccin 6h. El
registro W se ha borrado.

Siguiendo con el anlisis


Vamos a aadir los puntos de detencin que
muestra la figura y ejecutemos la simulacin.
Por aqu va el
programa

Poned punto aqu

Poned punto aqu

Siguiendo con el anlisis


La instruccin de la direccin 8h se ejecutar
rpidamente y el programa se detiene en la
direccin 9h.
La instruccin call COD es una subrutina
que pone en el registro W el cdigo de siete
segmentos correspondiente al valor hexa con
el que entr W.
El cdigo siete segmentos correspondiente al
valor hexa cero, tal y como hemos conectado
el display al puerto B, ser el X0111111.

Siguiendo con el anlisis


Y observad que ese valor es el que tiene en
este momento W, y que sacar, en la prxima
instruccin, por el puerto B.
Cdigo de siete segmentos del
cero hexadecimal

Siguiendo con el anlisis


Y observad que ese valor es el que tiene en
este momento W, y que sacar, en la prxima
instruccin, por el puerto B.
Pulsamos F12 para seguir con la simulacin.
Y ahora se han ejecutado de forma
continuada las instrucciones de las
direcciones 09h, 0Ah y 0Bh. Veamos qu han
hecho cada una de ellas.

Instruccin de la direccin 09h


En la direccin 09h sacamos el valor que
tena el registro de trabajo W por el puerto B.

El valor siete segmentos del cero,


que presentaba W en la
diapositiva 156, ahora lo tiene
PORTB

Instruccin de la direccin 0Ah


En la direccin 0Ah se ejecuta una subrutina
que provoca un retardo de un segundo.
Esto tambin se ha realizado, como ha
podido observarse. Esta subrutina alterar el
valor de algunos registro, entre ellos el W.

Instruccin de la direccin 0Bh


En la direccin 0Bh se ejecuta una instruccin
que provoca el incremento de la variable
Conta.
Observad cmo se ha ejecutado
correctamente.
Conta, que la definimos
como el registro de
direccin 20h, se ha
incrementado, y se
muestra resaltada

Continuacin de simulacin
Y as podramos seguir hasta detectar el
problema en nuestro programa.
Pero modifiquemos el programa para aadir
un error y poder detectarlo.
El error introducido va a provocar que el
nmero siguiente al 3 no sea el 4 no sea el
cero.
A este programa defectuoso le llamaremos
contadorf.asm.

Deteccin de fallo 1
Paremos la simulacin que tenamos en
marcha.
Preparemos el nuevo programa para ser
ensamblado.
De nuevo vamos al men
apropiado para cargar el
programa objeto de anlisis.

Deteccin de fallo 2
En la ventana de la figura podemos ver el
programa que tenamos ensamblado.

Pulsemos aqu para cambiar el


programa contador.asm por el
errneo contador_fallo.asm

Deteccin de fallo 3
Buscamos el programa y lo abrimos.

Deteccin de fallo 4
En la ventana siguiente aceptamos.
Ya se ve el nuevo programa

Aceptamos

Deteccin de fallo 5
En el men Source ya puede verse el nuevo
programa a ensamblar.

Deteccin de fallo 6
Ahora ensamblamos el nuevo programa y, si
todo va bien, ya tenemos todos los ficheros
que necesita Proteus para la simulacin.
Ahora grabaremos el fichero contadorf.HEX
en el micro y arrancamos la simulacin para
poder quitar los puntos de detencin. Borrad,
tambin, las huellas de los puntos anteriores.
Detened la simulacin y volved a iniciarla.
Observad el comportamiento.
El error es que viene el 9 en lugar del 4.

Deteccin de fallo 7
Analizando detenidamente el
comportamiento, podemos deducir que hay
partes que no fallan.
Entonces nos centraremos en detener el
programa en la parte de la decodificacin en
siete segmentos de la cantidad de la variable
Conta. Pondremos un punto de detencin
antes de entrar en la decodificacin y otro
cuando ya ha decodificado y enviado al
puerto B.

Deteccin de fallo 8
Dejaremos los puntos tal y como aparecen en
la figura.
En esta lnea ya tenemos el
valor del contador en BCD y
est a punto de convertirlo en
7 segmentos

En esta lnea ya ha convertido en 7


segmentos el valor BCD y lo ha
visualizado en el display

Deteccin de fallo 9
Comparando los resultados de los dos pasos
en las dos detenciones podremos cercar ms
el problema.
Arranquemos la simulacin e id pulsando F12
hasta que aparezca el 3 en el display.
En este momento deberemos tener la pantalla
de la figura siguiente.

Deteccin de fallo 10

Deteccin de fallo 11
Hasta aqu todo correcto, y estamos a punto
de temporizar el segundo, incrementar
Conta, comprobar si es mayor que nueve
para poner a cero y detenerse antes de
decodificar a 7 segmentos y enviar al display.
Veamos si Conta tiene su valor correcto.

Valor correcto

Deteccin de fallo 12
Pulsemos F12 para que temporice 1 segundo
y realice el resto de instrucciones hasta
detenerse de nuevo.
Todo correcto.
Veamos si la variable Conta se ha
incrementado correctamente para mostrar el
cuatro.
Correcto

Deteccin de fallo 13
Segn el programa que hemos realizado,
antes de entrar en la subrutina COD, el
registro W debe tener el valor BCD para ser
transformado en cdigo de siete segmentos.
Observemos qu valor tiene W.
Correcto: el 4.

Deteccin de fallo 14
Pues volvamos a pulsar F12 para que se
realice la decodificacin y el envo del dato
siete segmentos al puerto B.
Ah tenemos el error. Eso quiere decir que de
la subrutina COD ha salido el dato errneo.
Pues vayamos a analizar los pasos que se
realizan en la subrutina, colocando en ella un
punto de detencin en las instrucciones que
intervienen hasta llegar a la salida con el valor
4.

Deteccin de fallo 15
Puntos aadidos en la subrutina.

Detengamos la simulacin y volvamos a


arrancar.

Deteccin de fallo 16
Dejemos el programa cuando el display
muestra el 3 y se est a punto de entrar en la
subrutina de decodificacin 7 segmentos.
Pulsemos nuevamente F12. Ahora se ha
detenido el simulador en la primera
instruccin de la subrutina. Observa que la
prxima instruccin es sumarle W al
contenido del PCL, que en este momento
tiene la direccin 0011h. Y aqu hay que
explicar cmo trabaja el PCL para entenderlo.

Deteccin de fallo 17
El PCL se incrementa nada ms decodificar la
instruccin, antes de ejecutarla. Eso quiere
decir que cuando vaya a sumar W, el PCL
tendr la direccin 0012h, lo que quiere decir
que el programa continuar en la direccin
0012h + W = 0012h + 4h = 0016h.
Pero asegurmonos que W tiene el valor
correcto y que el programa contina en la
direccin prevista. Pulsad F12 y observad.

Deteccin de fallo 18
Todo correcto: el programa ha saltado a la
direccin 0016h.
Lo que hace la prxima instruccin es
retornar de subrutina pero cargando W con el
valor literal que lleva la instruccin en su
cdigo. Esto significa que al retornar, W
debera salir con el cdigo 7 segmentos del 4.
Ejecutemos la instruccin y observemos.
Ah tenemos el fallo.

Deteccin de fallo 19
Tal y como hemos conectado el display al
puerto B, para que se vea el 4 las lneas del
puerto deberan estar as:
x1100110
Sin embargo el puerto B, y por lo tanto W, no
tienen ese valor; falla el bit de menos peso,
como puede apreciarse en las dos figuras de
la diapositiva siguiente.

Deteccin de fallo 20
El bit de menor peso
debera ser un 0

Falla el LSB, que es el que


provoca el encendido del
segmento superior del display

Deteccin de fallo 21
Repasamos la subrutina y vemos que el valor
con que se carga W para la salida debera ser
01100110
Sin embargo es 0 1 1 0 0 1 1 1
Ah est el error

FINAL
En el prximo captulo se estudian los
dispositivos que provocan detencin en la
simulacin

Jos Luis Snchez Calero

2007

También podría gustarte