Vous êtes sur la page 1sur 182

CAPTULO IX: Dispositivos programables

Estudio de memorias EPROM, PLDs y microcontroladores

Memorias EVPROM
Montemos el siguiente circuito.

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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Entradas A3 A2 A1 A0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Salidas D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 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 archivo de grabacin tendr esta forma, en formato estndar.
N de bytes del paquete, en hexadecimal N de paquete, en hexadecimal N de orden del 1er. Byte, dentro del paquete

:100000000001020304050607080910111213141554
Separacin de comienzo del paquete

:00000001FF

Primer byte a grabar

Siguientes bytes

La ltima lnea es fija

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 este 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

Archivo binario
Una vez escritas estas dos filas de datos en el bloc de notas, salvaremos el archivo con extensin .hex. En este 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.

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

Funcionamiento
Iniciar la simulacin y se produce la conversin de binario a BCD.

Dispositivos PLDs
Montar 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 el bloc de notas, de acuerdo al formato que se da en el fichero GAL22V10VIRGEN.TXT. El archivo del ejercicio se llama GAL22V10CONTAPAR_IMPAR

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

Piulsamos 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 Pulsar aqu para
elegir Todos los tipos de ficheros

2 Elegir el fichero
.txt a grabar

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

Fichero elegido

Prueba de funcionamiento
El diseo corresponde a un contador que sigue la secuencia pares o impares, en sistema BCD. (Binario Codificado a Decimal). 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

Utilizaremos el PIC 16F876

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.

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


Pulsaremos sobre Add/Remove Source files

Ventana para aadir fichero


Esto nos lleva a la ventana de la figura, donde elegimos 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.

Pulsamos 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 pulsamos 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 es 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 genera un fichero tipo HEX a partir de un ASM. Este archivo hex 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 es 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 pulsar como en la figura.

Eleccin de editor
Se abre la ventana de seleccin de editores. Elegir 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 iniciar la simulacin. Y para ello lo primero que tenemos que hacer es grabar el micro con el fichero hexadecimal saludo.HEX.

Edicin del micro


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

Escribir aqu la frecuencia de trabajo del micro

Bsqueda fichero .HEX


Pulsar 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
Iniciar la simulacin VSM y veremos 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 frecuencia 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
Repetir paso a paso la explicacin de las diapositivas 24 a 46 . Si todo esta correcto la simulacin VSM se realizar correctamente y se visualizar un contador BCD con una frecuencia 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 ms (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


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

Ventanas para depuracin


Si abrimos el men Debug se nos 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. Abrir el men Debug y pulsar sobre la primera que aparece.

Ventana Simulation Log


Si en la ventana del men Debug pulsamos 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: pulsando y arrastrando sobre la banda azul de ttulo, para mover, y pulsando y arrastrando sobre las esquinas o laterales para modificar tamao.

Ventana de Cdigo Fuente


Cerrar la ventana anterior, que es la que menos necesitamos para analizar el programa. Abrir la ventana del cdigo fuente del programa, pulsando en

Ventana de Cdigo Fuente


Aparece el cdigo fuente del programa.

Edicin de la ventana
Si pulsamos 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
Mantener 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. Prueben estas opciones.

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

Ventana de Registros
Y obtenemos la ventana

Aparece esta ventana si pulsamos secundario dentro de la ventana de registros

donde se aprecian los registros ms utilizados del micro. Piulsando con secundario dentro de la ventana se pueden cambiar colores y letras.

Ventana de Memoria de Datos


Pulsar 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


Pulsando 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. Escribir 48 y aceptar

Al pulsar 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 Pulsando sobre
esta opcin nos mostrar los valores iniciales del banco

aviso anterior hubisemos aceptado, ahora veramos los valores iniciales

2 Nos aparece un aviso


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

Valores iniciales del banco


La opcin habr quedado activada de nuevo aparecen los valores que haba dejado el programa al iniciarse. Ahora podramos seguir con la ejecucin sin tener errores.

Si volvemos a pulsar sobre la opcin

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. Dejar 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 pulsar 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 pulsar la opcin 7, segn la figura.

Ventana de EEPROM de Programa


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

Observemos 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 pulsamos con secundario dentro de la ventana aparecern las opciones de edicin

Edicin de ventana de observacin


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

Pulsar 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 comentarios sobre las variables

Columna para ver el tipo de las variables elegidas

Valor actual de la variable

Hemos aadido una cuadrcula

Edicin de ventana de observacin


Y as quedar minimizada:

Pulsamos 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


Recordemos que las columnas Name y Value siempre aparecen por defecto. Es la visualizacin mnima que se puede desear.
Pulsaremos aqu para aadir esta columna

Pulsaremos aqu para aadir la rejilla

As queda la ventana

Eleccin de registro observable


Pulsar con secundario encima de la ventana de observacin y, en las opciones desplegadas, elegir 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 pulsamos 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 pulsar 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. Pulsar con secundario en la ventana de observacin y elegir 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


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

Eleccin de registro observable


Y pulsamos 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:
pulsar 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.
digitar 5 en la ventana y aceptar

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.

Pulsamos aqu para poner el cursor de bsqueda al inicio

Bsqueda de palabra
Ahora editamos y elegimos la opcin de bsqueda

pulsamos 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

seleccionamos

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

Aqu nos avisa en qu lnea ha encontrado lo que buscamos

Pulsando aqu continuar la bsqueda hacia atrs Pulsando aqu contina la bsqueda hacia adelante

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 pulsar aqu


resultado la detencin en esta lnea

Bsqueda de palabra
Pulsando repetidamente sobre Next iremos viendo las siguientes lneas que cumplen la condicin de bsqueda; si pulsamos 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.
Piulsando 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
detener la simulacin paso a paso y volver a arrancar.
Pulsamos 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


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

Se activan

Piulsamos en la instruccin de la direccin 0h

Icono de ejecucin continua


Pulsar F12 o pulsar el icono de la figura.

Si pulsamos este icono se iniciar la simulacin continua. Aunque nuestro objetivo es simular paso a paso, vamos a pulsar aqu para ver la respuesta a la simulacin continua.

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. Detener e iniciar 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
Pulsando 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.

Pulsando 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.

Pulsando 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 pulsar 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 pulsar sobre el icono del punto de detencin

Y pulsamos aqu

Colocamos el cursor

Borrado de puntos de detencin


Volver a pulsar 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 pulsar 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.

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. Observemos 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


Observar 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 pulsar sobre la instruccin en la que se detuvo la simulacin para que tome color esa direccin. Una cosa es el color, que resalta la ltima accin, y otra el cursor.

Siguiendo con el anlisis


Volver 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

Poner punto aqu

Poner 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 observemos 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 observaemos 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 continua 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. Observemos 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 y sea el nueve. 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 iniciamos la simulacin para poder quitar los puntos de detencin. Borramos, tambin, las huellas de los puntos anteriores. Detener la simulacin y volver a iniciarla. Observemos el comportamiento.

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. Observar 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. Pulsar F12 y observar.

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

Vous aimerez peut-être aussi