Anda di halaman 1dari 56

1

PROLOGO
Estos apuntes fueron elaborados en un trabajo conjunto entre el M. en C.Ing.
Jos Angel Castillo Castro, M en C. Csar Augusto Leal Chapa, y el M. En C.
Adrin Garca Mederez, profesores de la materia de Electrnica Lgica III (Diseo
con Microprocesadores) que se imparte en las carreras de Ingeniero en Control y
Computacin e Ingeniero en Electrnica y Comunicaciones de la Facultad de
Ingeniera Mecnica Elctrica de la UANL.

El propsito de desarrollar esta apuntes es la de aportar un documento que


contenga los temas mas importantes para la enseanza y aprendizaje de
microprocesadores y los programas de cada tema discutido, que sirva como gua y
apoyo para que el alumno implemente en la prctica los conceptos de
programacin y diseo adquiridos en el saln de clase.
Los

temas

fueron

desarrollados

alrededor

del

Microcontrolador

MC68HC811E2, dispositivo que se trata en el programa de clase, aunque en


algunos captulos los temas son desarrollados en una forma general sin especificar
algn microprocesador en especial, esto con la intencin de que sirvan adems
como una base terica y una consulta bibliogrfica para el aprendizaje de tcnicas
de programacin con cualquier microprocesador.

TABLA DE CONTENIDO

PROLOGO..................................................................................................... 1
INDICE........................................................................................................... 2
RESUMEN..................................................................................................... 4
1.Introduccin ................................................................................................ 5

2. Descripcin del PCBUG11 ........................................................................ 6


2.1 Instalacin del PCBUG11 ......................................................... 7
2.2 Iniciando el PCBUG11 .............................................................. 7
2.3 Descripcin de la Pantalla ........................................................ 8
2.4 Comandos ms utilizados......................................................... 9
2.5 Procedimiento para la prueba de un Programa........................ 11

2.5.1 Ensamblador en lnea, Comando ASM ................................. 11


2.5.2 Lenguaje Ensamblador CROSS ( C16 ................................. 14
3. Modos de Direccionamiento .............................................................. 17
3.1 Modo ................................................................................... 18
3.2 Modo Inmediato ................................................................

19

3.3 Modo Directo ...................................................................... 20


3.4 Modo Extendido................................................................

22

3.5 Modo Indexado .................................................................... 23


3.6 Modo Relativo ...................................................................... 24

4. Estrategias para el Diseo de Programas .......................................

27

4.1 Lazos Iterativos .........................................................................

27

4.2 Serie de Nmeros .....................................................................

31

4.3 Lazos de Retardo de Tiempo...................................................

34

4.4 Tabla de Datos...........................................................................

36

4.4.1 Solucin de Algoritmos Numricos mediante una Tabla de Datos


.................................................................................................... 36
4.4.2 Manipulacin de datos mediante una Tabla ..............

37

4.5 Subrutinas .....................................................................

42

5. Interrupciones .....................................................................................

47

5.1 Reset ...................................................................................... 48


5.2 Interrupciones por Hardware y Software ................................... 49

Conclusiones ............................................................................................... 52
Referencias.................................................................................................. 53
GLOSARIO ................................................................................................ 55

RESUMEN

La enseanza y el aprendizaje del diseo de sistemas electrnicos de tipo


digital basado en microprocesadores requiere de una intensiva aplicacin del
conocimiento terico.

La evaluacin del conocimiento de un alumno, es contundente cuando ste es


capaz de comprobar en la prctica que los programas que desarrolla operan
adecuadamente.

Adems, la forma ms adecuada en que un alumno puede verificar si el


programa que ha desarrollado es correcto, es comprobar su operacin en forma
prctica.

En estos puntes se abordan los temas ms importantes en la enseanza y


aprendizaje de microprocesadores. En el Captulo 2 se describe el Sistema de
Evaluacin PCBUG11, as como los comandos ms comunes y se concluye con la
descripcin paso a paso para la evaluacin de un programa. En el captulo 3 se
ilustran los modos de direccionamiento as como ejemplo sencillos para la
comprobacin de los mismos. Las tcnicas de programacin y estructuras tpicas
de los programas son discutidas ampliamente en el Captulo 4 y Las condiciones
de excepcin del Microprocesador como los son el RESET y las Interrupciones se
detallan en el Captulo 5.

CAPITULO 1
Introduccin

1.1 ANTECEDENTES
Uno de los problemas bsicos en la enseanza de microprocesadores es que
ha sido empleado ampliamente el mtodo tradicional de exposicin descriptiva, con
resultados poco favorables, ya que se desvincula la teora de la aplicacin del
conocimiento.

En algunos casos se intenta apoyar a la discusin terica con modernos


sistemas computarizados de simulacin absoluta, con lo que se aleja ms al
alumno de la aplicacin real que es el objetivo final del entrenamiento en esta rea.

El proceso de enseanza/aprendizaje de microprocesadores debe cubrir cuando


menos las siguientes 3 aspectos fundamentales.

a) Favorecer la comprensin y asimilacin del conocimiento terico.


b) Facilitar el desarrollo de la habilidad abstracta de crear programas.
c) Desarrollar la habilidad psico-motora o manual para probar en la prctica el
programa y un prototipo.

CAPITULO 2
Descripcin del PCBUG11

Objetivo
El objetivo de este tema es el de presentar y describir el Sistema de Evaluacin
PCBUG11 como herramienta de desarrollo de aplicaciones con Microprocesadores.

INTRODUCCION

El PCBUG11 es un Sistema de Evaluacin para los Microcontroladores de la


Familia HC11. Este sistema se compone de 2 partes; un programa que es
ejecutado en una computadora personal en ambiente DOS, que tiene como accin
inicial la de transferir un programa a la memoria del MPU, que es la otra parte del
sistema y consiste en un programa llamado Programa Monitor, estos dos
programas interactan a travs del puerto serie para conformar un sistema de
evaluacin que permite al usuario desarrollar sus programas de prueba o una
aplicacin, mediante comandos que permiten introducir programas y/o datos a los
dispositivos de memoria, a los registros del MPU y a los registros de control de los
dispositivos de entrada/salida, as como el de ejecutar los programas.

2.1 INSTALACIN DEL PCBUG11

Motorola prove este paquete de programas en un disco flexible, el cual se


debe de instalar en el disco duro de la computadora. Opcionalmente se puede
ejecutar desde el disco flexible.

Los pasos para instalarse en el disco duro, son los siguientes:

1.- Insertar el disco flexible en el drive A.


2.- Crear un subdirectorio
md PCBUG11
3.- Abrir el nuevo directorio
cd PCBUG11
4.- Copiar todos los archivos del disco duro.

Copy a:*.* c:

2.2 INICIANDO EL PCBUG11

Para inciar, una vez conectada la tarjeta del microcontrolador a la computadora


a travs de los puertos de comunicacin (COM1, COM2), es necesario ejecutar el
programa PCBUG11, adicional a esto es necesario indicar varios parmetros, tales
como el puerto, la frecuencia del cristal, la versin del MCU, etc.

Si se introduce solamente PCBUG11, se ejecutar un programa previo que


cuestionar al usuario sobre las condiciones del hardware para as establecer los
parmetros adecuados.

Ejemplo.-

Si se emplea un MC68HC811E2, a travs del COM2 con un cristal de 8MHZ.

La opcin ser: PCBUG11 A port=2

Una vez que se han determinado los parmetros, se tiene enseguida la opcin
de ejecutar el programa monitor.
Se recomienda crear un archivo PCBUG.bat que sea ejecutado desde el
directorio raz y que contenga los siguientes comandos:
cd PCBUG11
PCBUGII [Parmetro MCU] [Parmetro puerto] [Parmetro baud]
Para as tener un procedimiento de inicio rpido.

2.3 DESCRIPCIN DE LA PANTALLA


El PCUBG11 muestra a travs del monitor de la computadora el estado de la
electrnica asociada con el MCU (registros, bloques de memoria, vectores, etc.),
adems del resultado de los diferentes comandos, para esto la pantalla del monitor
se divide en varias ventanas:

Para la descripcin de cada pantalla se indica el color con el que se visualizar


cada una de stas, si acaso se cuenta con un monitor a color.

Ventana principal.- Esta ventana ocupa a la mitad ms alta de la pantalla, con


textos en color blanco con fondo azul, despliega el resultado de los comandos y el
contenido de la memoria.

Ventana de registros.- Se encuentra al centro de la pantalla, con los textos en


color blanco o amarillo y con el fondo rojo. Muestra el contenido de los registros del
MPU.
Ventana de estado.- Se encuentra al centro y a la derecha, con textos en blanco
y fondo morado. Muestra el MCU en uso (Al, 811E2, etc.), y el estado del MCU:
ejecutando programa (running), punto de quiebre (break), paso por paso (tracing).

Ventana de comando.- Esta situada en la parte baja izquierda de la pantalla, es


de color negro con textos en blanco. Se usa para introducir y leer los comandos del
PCBUG11. El carcter >> aparecer siempre al inicio de la lnea de comandos.

Existen dos ventanas temporales que aparecern sobrepuestas en la pantalla


principal.
Ventana de error.- Est ventana indica cualquier error o una operacin
incorrecta en las comunicaciones hacia el MCU. Para borrar esta pantalla, se
presiona cualquier tecla o se espera 5 segundos y la pantalla desaparecer por s
misma.

Ventana de ayuda.- Esta ventana muestra ayudas para el uso de los comandos
del PCBUG11.

2.4 COMANDOS MAS UTILIZADOS

Para la evaluacin y/o el desarrollo con un microcontrolador se requieren de


comandos que efecten bsicamente tres acciones:

1.- Introducir en memoria los cdigos de instruccin y/o datos previos.


2.- Visualizar los registros del MPU o alguna memoria para verificar el buen
funcionamiento del programa.
3.- Ejecutar los programas.

10

En esta seccin se describen los comandos que se usan con ms frecuencia,


en la descripcin de cada comando se indica la sintaxis del mismo as como el
ejemplo, adems el PCBUG11 cuenta con una ayuda Comando HELP- en la que
se describe en detalle la totalidad de los comandos.

MD.- Desplegar memoria (Memory Display).- Este comando despliega el


contenido de la memoria, junto con el comando se debe indicar el inicio y el final
del rango de memoria, si solamente se indica la direccin de inicio, el PCBUG11
despliega solo 16 direcciones.

MD [Dir.inicio] [Dir. Final]

Ejemplo:

MD $F800 $F9FF, Despliega el contenido de las direcciones $F800 a $F9FF

MD$1000 Despliega el contenido de la direccin $1000 a la $100F


MM.- Modificar memoria (Memory modify).- Este comando sirve para modificar
el contenido de la memoria .
Sintaxis: MM [Direccin]
Despus de introducir un valor, presione la tecla enter y avanzar a la siguiente
direccin desplegando el contenido de sta. Se puede avanzar o retroceder de
direccin con las teclas de flechas, mostrndose siempre el valor actual de la
direccin seleccionada.
ASM.- Ensamblador (Assembler).- El PCBUG11 proporciona un ensamblador en
lnea que permite introducir los programas usando los mnemnicos.

11

Para activar el ensamblador, se requiere introducir en la lnea de comandos la


direccon de inicio del programa a ensambler, para abandonar la funcin de
ensamblador se presiona la tecla Esc.
ASM [Direccin]
Ejemplo:
ASM $F800

RD.- Despliega Registros (Register Display).- Este comando despliega los


valores actuales de los registros del MPU del usuario.
Sintaxis: RD
RM.- Modifica registro (Register Modify).- Este comando permite modificar
cualquiera de los registros del MPU de usuario.
Sintaxis: RM

2.5 PROCEDIMIENTOS PARA LA PRUEBA DE UN PROGRAMA

En esta seccin se describir el procedimiento para evaluar un programa desde


el momento de introducir los cdigos a la memoria hasta la verificacin de los
resultados.

Para no aumentar el grado de dificultad que implicara la

implementacin de este procedimiento con un programa complicado, se tomar


como ejemplo un algoritmo sencillo que consiste en cargar valores conocidos al
acumulador A y B y despus sumarlos.

Los cdigos de instruccin se pueden introducir ya sea usando el ensamblador


de lnea que provee el PCBUG11 mediante el comando ASM, o bien generando los
cdigos previamente utilizando un Programa Ensamblador, primeramente se
describir el procedimiento si se utiliza el comando ASM.

12

2.5.1 ENSAMBLADOR EN LINEA, COMANDO ASM

- Debido a que le PCBUG11 no deja suficientes localidades de Memoria tipo


RAM para el usuario, el programa se introducir en el EEPROM que se encuentra
en la direccin $F800 a la $FFFF. Una vez dentro del PCBUG11 se debe eliminar
la proteccin contra escritura del EEPROM, esta proteccin se efecta mediante el
registro BPROT ($1035) cuya asignacin de bits es la siguiente:

Reset

b7

b6

b5

b4

b3

b2

b1

b0

PTCON

BPRT3

BPRT2

BPRT1

BPRT0

$1035

Fig.2.1Registro BPROT para proteccin del EEPROM.

Cada bit BPTRx protege a cada uno de los cuatro grupos de 512 bytes del
EEPROM de acuerdo con la siguiente tabla.
BIT

BLOQUE PROTEGIDO

TAMAO DEL BLOQUE

BPTR0

$F800-$F9FF

512 Bytes

BPTR1

$FA00-$FBFF

512 Bytes

BPTR2

$FC00-$FDFF

512 Bytes

BPTR3

$FE00-$FFFF

512 Bytes

Tabla 2.1 Asignacin de bits del registro BPROT para proteccin del EEPROM.

De acuerdo con esta tabla, se escribir un $10 en la $1035 utilizando el


comando MM (modifica memoria), de esta manera se habilitar los 2k Bytes del
EEPROM.
2.-Como siguiente paso se ejecutar el comando EEPROM, cuya funcin es la de
activar un algoritmo de escritura que provee el PCBUG11 que declara a la memoria
tipo EEPROM como memoria de escritura y permite al usuario utilizar a este
dispositivo como si se tratara una memoria tipo RAM.

13

El comando EEPROM se utiliza de la siguiente manera:

>EEPROM (direccin inicial)(direccin final)


y para nuestro ejemplo:

>EEPROM $F800 $FFFF

3.-El siguiente paso es el de introducir los cdigos que conforman el programa


ejemplo. Utilizando el comando ASM:

>ASM $F800(Enter)

Ya dentro de la pantalla principal, se debe de capturar el siguiente listado en


mnemnicos, cuidando siempre que despus del carcter >se debe dejar cuando
menos un espacio.
$F800 >

LDAA

#$5F

carga el acumulador A con $5F en modo


inmediato

$F802 >

LDAB

#$32

carga el acumulador B con $32 en modo


inmediato

$F802 >

ABA

Suma el acumulador A con el acumulador B

Al terminar de capturar oprimir ESC para regresar a la pantalla de comandos.

4.- Una vez capturados los cdigos debe de programarse un punto de quiebre con
el comando BREAK, en este caso en la $F805 que es la siguiente localidad de
memoria a la ltima instruccin del programa.

>BREAK $F805(Enter)

14

5.-Ejecutar el programa con el comando G

>G $F800

6.- Una vez que se ejecute el programa, se observar en la pantalla de estatus


la indicacin de que el MCU se encuentra en estado de BREAK o punto de quiebre.

Para verificar el resultado se ejecutar el comando Desplegar de Registros (RD)


con esto se actualizar la pantalla de registros con los siguientes valores:

PC=$F805

Direccin donde se program el punto de quiebre.

ACCA=$91

Resultado de la suma de $5F + $32

ACCB=$32

Valor que se le asign al acumulador B con la instruccin LDAB

CCR=$68

La suma result un valor negativo N=1, ocurri un medio


acarreo H=1 y la mscara de interrupcin esta puesto por reset X=1

2.5.2 LENGUAJE ENSAMBLADOR CROSS16 (C16)

1.- Cuando los cdigos son generados con un programa ensamblador es


necesario elaborar un archivo fuente que contenga el listado del programa en
mnemnicos es decir en el lenguaje ensamblador, para esto se puede utilizar
cualquier procesador de textos, se recomienda utilizar la utilera de Notes del
programa Sidekick ya que este reside en la memoria de la computadora, hecho que
facilita las posibles correcciones del programa sin necesidad de abandonar el
PCBUG11, a este archivo se le asignara el nombre de SUMA.ASM cuyo contenido
ser el siguiente:
CPU

6811.TBL

;Indicacin del archivo que contiene la tabla


de mnemnicos y su correspondiente cdigo
en lenguaje mquina.

15

HOF

MOT8

;Directivo para indicar el formato del archivo


de salida, en este caso formato S19 para
Mcroprocesadores de Motorola de 8 Bits

ORG

0F800H

;Direccin de inicio del programa.

LDA

#5FH

;carga el acumulador A con $5F en modo


inmediato.

LDAB $32H

;carga el acumulador B con $32 en modo


inmediato.

ABA

;Suma el acumulador A con el acumulador B.

Cabe mencionar que en este ensamblador los nmero en base hexadecimal


se indican con una letra H al final del nmero, a diferencia del ensamblador del
PCBUG11en el que se indica con el carcter $ al inicio del valor hexadecimal,
adems es importante aclarar que en el C16 los valores numricos deben iniciar
con un nmero que podra no ser el caso de un valor base 16, es por eso que en el
directivo ORG la direccin se indica 0F800.

2. El siguiente paso consiste en ensamblar el programa fuente. La funcin de


un programa ensamblador es la de generar a partir del programa fuente un archivo
ejecutable que contiene los cdigos mquina que corresponden al programa a
evaluar.

Dentro el DOS introducir la siguiente lnea de comando:


C:\C16 SUMA.ASM [-L SUMA.LIS][-H SUMA.S19]

Donde:

C16:

Comando para ejecutar el programa ensamblador

CROSS16
SUMA.ASM:

Programa fuente

16

[-L SUMA.LIS]:

Indicacin opcional para generar un archivo tipo texto que


contiene el listado del programa tanto en mnemnicos como en
el lenguaje mquina, este archivo es til para efectos de
documentacin.

[-H SUMA.S19]:

Indicacin para generar el archivo ejecutable, si se omite este


parmetro el ensamblador slo revisar la sintxis del programa
fuente e indicar los errores si stos existen. Las extensin S19
es opcional, aunque se recomienda usarla para recordar el
formato en el que fue ensamblado.

Al terminar el proceso de ensamble se indicar si se detectaron errores en la


sintxis del programa fuente, si no fue as, el programa esta listo para cargarse a la
memoria del MCU.

3.- Antes de cargar el programa es necesario declarar el EEPROM como


memoria de escritura, para esto se debe seguir el procedimiento descrito en el
paso 1 y 2 de la seccin 2.5.1.

4.-Para cargar el programa se utiliza el comando LOADS, cuya funcin es la


de transferir archivos en formato S19 contenidos en disco hacia la memoria del
MCU, ya sea sta del tipo RAM, EPROM o EEPROM, en estas dos ltimas es
necesario ejecutar el comando que activa el algoritmo de escritura correspondiente.

En la lnea de comandos delPCBUG11 introducir lo siguiente:


>LOADS SUMA.S19[Enter]
en la pantalla principal se indicar los bytes transferidos.

5.- Lo que resta del procedimiento de prueba se describe en los pasos 4, 5 y 6 de


la seccin 2.5.1,es decir lo que corresponde a establecer el punto de quiebre o
BREAK, ejecutar el programa y verificar el resultado.

17

CAPITULO 3
Modos de Direccionamiento

OBJETIVO
Apoyar el estudio de los modos de direccionamiento, mediante la
elaboracin de pequeos programas que ejecuten instrucciones en cada modo.

INTRODUCCION

Se le llama modo de direccionamiento a una clasificacin de las


instrucciones de un microprocesador, con respecto al modo en que se relaciona la
instruccin con los registros internos del MPU con los bloques de memoria o con
los dispositivos de entrada-salida.

Para

los

microprocesadores

direccionamiento son:
-

inherente

inmediato

directo

extendido

indexado

relativo

de

la

familia

HC11

los

modos

de

18

3.1 MODO INHERENTE


En este modo la instruccin esta formada por un solo byte, slo el cdigo de
instruccin y 2 bytes para instrucciones relacionadas con el registro ndice Y. En
este modo las instrucciones actan solo con los registros internos del MPU.
EJEMPLO.- 1
Instruccin incrementa el acumulador A
Cdigo de instruccin 4C
Mnemnico INCA
PROGRAMA:
a) Diagrama de fluo

b) Listado

ST

Incrementa el acumulador A
Interrupcin por software

INCA
SWI

c) Estatus
Antes de la ejecucin
ACCA= nn

A + 1A
Despues de la ejecuccin
ACCA= nn+1

FIN

EJEMPLO.- 2
Instruccin incrementa el registro ndice X
Cdigo de instruccin 08
Mnemnico INX
PROGRAMA:

Instruccin incrementa el acumulador A


Cdigo de instruccin 4C
Mnemnico INCA
PROGRAMA:
a) Diagrama de fluo
ST

b) Listado
INX
SWI

Incrementa el Registro Indice X


Interrupcin por software

c) Estatus
Antes de la ejecucin
Ix = nnnn

Ix + 1Ix
Despues de la ejecuccin
FIN

Ix = nnnn+1

19

3.2 MODO INMEDIATO

En este modo la instruccin esta formada por 2 bytes, uno para el cdigo de
instruccin y otro para el operando; para las instrucciones relacionadas con el
registro ndice Y se requieren 3 bytes. El nombre de inmediato significa que el
operando est inmediatamente despus del cdigo de instruccin.

CODIGO DE LA
INSTRUCCIN
OPERANDO
Fig. 3.4 Estructura de una instruccin del modo inmediato

EJEMPLO.- 3
Cargar el acumulador A con el nmero hexadecimal 3
Instruccin carga el acumulador A en modo inmediato
Cdigo de instruccin 86
Mnemnico LDAA
PROGRAMA:
a) Diagrama de flujo

ST

b) Listado

c) Estatus

LDAA #$3 Carga el acumulador A

Antes de la ejecucin

en modo inmediato.

A = nn
Despus de la ejecucin

A 3A

A = 3A

Memoria

86
3A

86
3A

FIN

Fig. 3.5 Programa que carga el acumulador A en modo inmediato.

20

EJEMPLO.- 5
Cargar el registro ndice X con FFFF
Instruccin carga el registro ndice en modo inmediato
Cdigo de instruccin CE
Mnemnico LDX
PROGRAMA:
a) Diagrama de flujo
ST

Ix FFFF

b) Listado

c) Estatus

LDX #$FFFF Carga el registro ndice en

Antes de la ejecucin

SWI

modo inmediato.

del programa

Interrupcin por software

Ix = nnnn

Despus de la ejecuccin
FIN

Ix = FFFF

Fig. 3.6 Programa que carga al registro ndice X en modo inmediato

3.3 MODO DIRECTO

En este modo la instruccin est formada por 2 bytes, uno para el cdigo de
instruccin y otro para indicar la localizacin del operando; para instrucciones
relacionadas con el registro ndice Y se requieren 3 bytes.

CODIGO DE LA
INSTRUCCIN
DIRECCION DEL
OPERANDO
Fig. 3.7 Estructura de una instruccin del modo directo.
Al indicar la direccin del operando solo con un byte, se restringe el uso de
este modo a la parte ms baja de memoria de 0000 a 00FF, es decir, los primeros
256 bytes.

21

EJEMPLO.- 6
Cargar el acumulador A con el contenido de la localidad 0050.
Instruccin carga el acumulador A en modo directo.
Cdigo de instruccin 96
Mnemnico LDAA

EJEMPLO.- 7
PROGRAMA:
a) Diagrama de fluj0

b) Listado

c) Estatus

Memoria

LDAA #$0050;Carga el acumulador A en modo Antes de la ejecucin

ST

A (50)

. SWI

Interrupcin por software

A = nn

0050

Despus
A = OPERANDO

FIN

Fig. 3.8 Programa que carga el acumulador A en modo directo

OPERANDO

OPERANDO

22

3.4 MODO EXTENDIDO

En este modelo la instruccin est formada por 3 bytes, uno para el cdigo
de instruccin y los dos restantes para indicar la direccin del operando; para
instrucciones relacionadas con el registro ndice Y se requieren 4 bytes. El
modo extendido es una extensin del modo directo ya que al usar2 bytes para
indicar la direccin se puede tener acceso a todo el mapa de memoria de 0000 a
FFFF.
a)

b)
FFFF
CODIGO DE
INSTRUCCION
EXTENDIDO

LOCALIZACION
DEL
OPERANDO

2 BYTES
00FF
0000

DIRECTO 0000

Fig. 3.10 a) Estructura de una instruccin del modo extendido


b) Rango de operacin.

EJEMPLO.- 8
Cargar el acumulador A con el contenido de la localidad F800.
Instruccin carga el acumulador A en modo extendido.
Cdigo de instruccin B6
Mnemnico LDAA
PROGRAMA:
a) Diagrama de flujo

b) Listado

c) Estatus

LDAA #$F800 ;Carga el acumulador A

Antes de la ejecucin

ST

en modo ext
SWI

A (F800)

FIN

A = nn

Interrupcin por software


Despus de la ejecuccin
A = OPERANDO

Memoria

F800

OPERANDO

F800
OPERANDO

Fig. 3.11 Programa que carga el acumulador A en modo extendido

23

3.5 MODO INDEXADO


En este modo la instruccin est formada por 2 bytes, uno para indicar el cdigo
de instruccin y el siguiente para indicar un nmero de 8 bits que en forma
automtica se sumara al contenido del registro ndice para formar la direccin del
operando, a este nmero se le llama offset y puede tomar un valor de 00 a FF.
Para instrucciones relacionadas con el Registro Indice Y se requieren de 2 bytes.

CODIGO DE INSTRUCCIN
OFFSET
Fig. 3.13 Estructura de una instruccin del modo indexado
Direccin del operando = ( Ix + OFFSET )

Para usar este modo es necesario haber cargado previamente el registro


ndice con un valor conocido para formar posteriormente la direccin del operando.

EJEMPLO.- 10
Usando el modo indexado, cargar el acumulador A con el contenido de la localidad
0000
Instruccin carga el acumulador A en modo indexado
Cdigo de instruccin A6
Mnemnico LDAA
PROGRAMA:
a) Diagrama de flujo

ST

b) Listado

c) Estatus

memoria

LDAA 0,X Carga el Acumulador A

Cargar previamente el registro ndice con 0000

SWI

Ix = 0000

Interrupcin por software

Antes de la ejecucin

A(Ix + 00)

Ix

0000

A = nn
Despus de la ejecucin

FIN

Ix

0000

A = operando

OPERANDO

0000

0000

OPERANDO

Fig. 3.14 Programa que carga al acumulador A en modo indexado X

24

3.6 MODO RELATIVO


En este modo la instruccin est formada por 2 bytes, uno para el cdigo de
la instruccin y el siguiente para un nmero de 8 bits que indica la cantidad de
lugares de memoria que el MPU tiene que avanzar o retroceder para encontrar el
operando, a este nmero tambin se le llama offset, si es positivo el MPU avanza y
si es negativo retrocede.

CODIGO DE INSTRUCCIN
OFFSET
Fig. 3.16 Estructura de una instruccin de modo relativo.
Las instrucciones en modo relativo se clasifican en condicionadas y no
condicionadas, el concepto de condicionamiento significa para que se ejecute la
instruccin, es necesario que se presente en el registro de cdigo de condicin el
estatus para el cual fue diseada la instruccin, a este tipo de instrucciones se les
llama branch, ramificaciones o bifurcaciones condicionadas, cuando la instruccin
no interroga o prueba el estado de registro de cdigo de condicin es una
instruccin no condicionada.

Con respecto al clculo de offset la mayora de los sistemas de apoyo


(software de apoyo) tienen una rutina para efectuarlo, si se desea hacer
manualmente es necesario calcular la diferencia entre direccin final y la direccin
inicial y recordar que el contador del programa se encuentra un lugar adelante que
el que se esta ejecutando o leyendo, por tal motivo la frmula para calcular el
offset es la sig.: offset = direccin final-(direccin inicial + 2).

EJEMPLO.- 12
Usar la instruccin de branch no condicionado branch always.
Instruccin branch always
Cdigo de instruccin 20

25

Mnemnico BRA
PROGRAMA:
a) Diagrama de flujo

b) Listado
Lazo:

c) Estatus
BRA Lazo ;Brinco incondicionado

st

Al ejecutar el programa
ste se ciclar brincando
la misma direccin de la
instruccin.

bra

Fig. 3.17 Programa ejemplo para verificar el adecuado clculo del Offset.

Para usar una instruccin de tipo condicionada es necesario haber efectuado


una instruccin previa que altere el contenido del registro de cdigo de condicin,
de tal manera que el estado resultante de dicha operacin quede indicada por los
bits de este registro y entonces as usar la instruccin condicionada.

EJEMPLO.- 13
Probar la instruccin branch if carry set
Instruccin ramifica si el bit de acarreo es 1
Cdigo de instruccin 25
Mnemnico BCS
PROCEDIMIENTO:
a)Usar previamente una instruccin que altere el registro de cdigo de condicin
ST
b)Aplicar la instruccin de BCS
Instruccin que altere
al registro de cdigo
de condicin

c)Colocar a las salidas del BRANCH, 2 instrucciones


de SWI interrupcin por software colocadas en
diferentes lugares de memoria, facilitar la comprobacin
de la ejecucin de la instruccin.

BCS
C=1

C=0
FIN

FIN

26

a) Diagrama de flujo
Listado

b) Diagrama de flujo

a) Listado

b)

c) Estatus

ST

ST
En el programa del inciso a)

A FF

LDAA

A FELDAA #$FF

#$FF

INCA

INCA

A + 1 A BCS

FIN

A + 1 BCS
A

FIN

SWI
FIN:

BCS
BCS
C=1

se detendr en el SWI con

SWI

SWI

FIN:

la etiqueta FIN, el programa


del inciso b) se detendr
en la siguiente lnea del BCS

SWI

BCS
C=0
C=1
FIN

C=0
FIN

FIN

FIN

Fig. 3.18 Programa de prueba del modo relativo


PROGRAMAS PROPUESTOS
1.- Usando los modos de direccionamiento directo, extendido e indexado,
disear un programa para cada caso que transfiera el contenido de la localidad 50
a la 51.
2.- Disear un programa para cada caso, que efecte la prueba de las
siguientes instrucciones en modo inherente: ABA, CLRA, CBA, COMA, DECA,
INCA, LSRA, TAB.

27

CAPITULO 4
Estrategias bsicas para el Diseo de Programas

OBJETIVO
El objetivo de este tema es el de apoyar el proceso de aprendizaje de la
programacin
con Microprocesadores revisando una serie de modelos de
programacin que consisten en tcnicas bsicas de manipulacin de datos usando
los recursos que ofrece el microprocesador y que pueden darse solucin a un
conjunto de problemas semejantes.
4.1 PROGRAMAS ITERATIVOS O DE LAZO

Un programa iterativo o de lazo hace que el Microprocesador efecte en forma


repetitiva una secuencia de instrucciones. Los programas de lazo tienen cuando
menos las siguientes cuatro secciones:
1 SECCION DE INICIO, en la que se establecen los valores iniciales de
variables, contadores, indicadores o registros de direccin, etc.

2 SECCION DE PROCESO, donde se efecta la manipulacin de los datos,


esta seccin es la que efecta el trabajo o tarea de lazo.

3 SECCION DE CONTROL DE LAZO, la que actualiza los contadores e


indicadores para efectuar la siguiente iteracin.

28

4 SECCION DE CONCLUSION, la que analiza y almacena los resultados del


programa.
a)
LAZO

LAZO

b)
SECCIN DE
INICIO

SECCIN DE
INICIO

SECCION DE
PROCESO

SECCION DE
CONTROL DE
LAZO

SE HA
COMPLETADO
LA TAREA DEL
LAZO?

NO

SI

SE HA
COMPLETADO
LA TAREA DEL
LAZO?

SECCIN DE
CONCLUSION
SECCIN DE
PROCESO

SECCIN DE
CONCLUSION

FIN
FIN

Fig. 4.1 Diagrama de flujo de programas de lazo, a) lazo tpico,


b) lazo que permite cero iteraciones
EJEMPLO.- 4.1
Tomar el contenido de la localidad 0050 y contar el nmero de bits igual a 1 que
contenga, colocar el resultado en la direccin 0051.

Solucin:
Dado que la cantidad total de bits que contiene una palabra almacenada
contenida en la localidad 0050 es de 8, entonces el nmero de iteraciones que
tendr que verificar el lazo es tambin de 8, por tal motivo habr que establecer un
contador del nmero iteraciones al inicio del programa que se decremente en uno a
cada iteracin, la direccin 51 puede operar como un contador de nmero de bits
igual a uno, para detectar si los bits son igual a uno se puede efectuar un
corrimiento a la derecha, haciendo que el dato se cargue en el bit de acarreo de

29

registro de cdigo de condicin y posteriormente hacer una pregunta mediante un


branch si el bit de acarreo es igual a uno.

INICIO

BORRAR LA DIRECCION 51, CONTADOR DE # DE BITS = 1


CARGAR CON UN 08 EL CONTADOR DE ITERACIONES

LEER DATO DE LA DIRECCION 0050

CORRER EL DATO UNA POSICION A LA DERECHA DE TAL MANERA


QUE SE CARGUE EN EL BIT DE ACARREO DEL REGISTRO DE

PREGUNTAR
SI EL BIT ES
IGUAL A 1
NO

SI
INCREMENTAR EL CONTADOR
DE # DE BITS A 1, 0051

DECREMENTAR
EN
UNO
EL
CONTADOR DE # DE ITERACIONES

PREGUNTAR
SI ES LA
ULTIMA
ITERACION
NO

SI

FIN

Fig. 4.2 Diagrama de flujo de un programa que cuenta los bit con valor 1 de la
direccin 0050

30

b) Diagrama de flujo de detalle

INI
0050

CLR

$0051

LDAB

#$08

LAZO1; LSRA

08B

A(0050)

BCC

LAZO

INC
LAZO;
BNE

$0051
INCB
LAZO1

ALSR

BCC
0051+10051

B-1 B

BNE
0

=0
FIN

FIG. 4.3 Programa que cuenta los bits igual a 1 de la 0050

31

4.2 SERIES DE NUMEROS


Una serie de nmeros es un arreglo continuo de datos numricos de los que
se conoce generalmente la direccin de inicio de la serie y su longitud.
LONGITUD DE
SERIE
INICIO DE LA
SERIE

Para manejar una serie de nmeros se recomienda usar como registro


indicador o apuntador al registro ndice y usar como contador de nmero de
iteraciones el dato de la longitud de la tabla.
EJEMPLO.- 4.2
Efectuar la suma sin acarreo de una serie de nmeros que inicia en la direccin
0050 y cuya longitud se indica en la direccin 004F, colocar el resultado de la suma
en la direccin 004E.
004E

RESULTADO

004F

LONGITUD DE LA SERIE

0050

SERIE

Solucin:
Tomar el dato de la longitud de la serie como el contador de iteraciones,
cargar el registro apuntador o indicador con la direccin de inicio de la serie, leer el
primer dato de la serie en modo indexado, incrementar el indicador y sumar con el
siguiente, as sucesivamente tantas veces como lo permita el contador de
iteraciones, por ltimo colocar el resultado en la direccin 004F.

32

Diagrama de flujo de la idea


INICIO

BORRAR LA DIRECCION 004E


CARGAR EN UN CONTADOR EL DATO
DE LA LONGITUD DE LA SERIE
CARGAR EL APUNTADOR O INDICADOR CON LA
DIRECCION DE INICIO DE LA SERIE

LEER EN MODO INDEXADO EL PRIMER DATO DE


LA SERIE, CARGANDOLO EN UN ACUMULADOR

INCREMENTAR EL INDICADOR O APUNTADOR

SUMAR EN MODO INDEXADO, EL DATO


PREVIAMENTE LEIDO CON EL QUE INDICA
EL APUNTADOR

DECREMENTAR EL CONTADOR DE
LA LONGITUD DE LA SERIE

PREGUNTAR
SI ES EL ULTIMO
DATO DE LA SERIE

CARGAR EL DATO DE LA SUMA


EN LA DIRECCION DE 004E

FIN

33

b) Diagrama de flujo de detalle


INICIO
004E

B 004F

Ix 0050
A (Ix + 00)
Ix + 1 Ix
A + (Ix + 00) A
B-1 B

BNE
A 004E

FIN

c) Listado

CLR

$4E

LDAB

$4F

LDX

#$004F

;inicializa apuntador

LDAA

0,X

;carga primer operando

LAZO:

INX

;incrementa apuntador

ADDA
DECB
BNE
STAA
SWI

0,X

;suma operando
;decrementa longitud
;ltimo operando?
;deposita resultado
;interrupcin por software

LAZO
$4E

;Borra memoria resultado


;carga contador en B

34

4.3 LAZOS DE RETARDO DE TIEMPO


Un lazo de retardo es un programa que efecta como objetivo, la generacin
de un intervalo o retardo de tiempo, y son ampliamente utilizados como parte
fundamental de los programas de entrada/salida.

El retardo de tiempo o intervalo se logra aprovechando el tiempo que


transcurre durante la ejecucin de una instruccin, ejecutndola en forma repetitiva,
tantas veces como sea necesario hasta obtener el retardo deseado.

El tiempo de ejecucin de una instruccin, se obtiene, multiplicando el


nmero de ciclos de mquina empleados para su ejecucin por la duracin del ciclo
de, mquina, suponiendo que cada ciclo de mquina dura un microsegundo.

tcm = Nmeros de ciclos X 1microseg.

EJEMPLO.- 4.3

Programa

de

retardo

usando

un

acumulador

como

contador

decrementandolo continuamente.
Tiempo = [ a + (b + c)*256 + d ]ciclos x tcm

INICIO

Donde:
A FF

a=2 ciclos mquina de la instruccin LDAA en


modo inmediato

A - 1 A

b=2 ciclos mquina de la instruccin DECA en


A=0
SI

modo inherente
NO

FIN

c=3 ciclos mquina de la instruccin BNE en modo


relativo
d=14 ciclos mquina de la instruccin SWI en modo
inherente

35

EJEMPLO.- 4.4

Programa de retardo usando un acumulador y el registro ndice X


INICIO

Tiempo = a+[b+(c+d)*(xxxx)+e+f)*(xx)+g]ciclos* tcm

A XX

Donde:
Ix XXXX

a=2 ciclos mquina de la instruccin LDAA en modo


inmediato

Ix - 1 Ix

b=3 ciclos mquina de la instruccin LDX en modo


inmediato

Ix = 0
SI
A-1A

NO

c=3 ciclos mquina de la instruccin DEX en modo


inherente
d=3 ciclos mquina de la instruccin BNE en modo

A=0
NO

relativo
SI

FIN

e=2 ciclos mquina de la instruccin DECA en modo


inherente

Los programas de retardo anteriormente descritos hacen que el MPU atienda


solamente al programa de retardo, sin embargo cuando el programa de retardo
interacta con o es parte de algn otro programa, se hace necesario entonces que
el MPU atienda a ambos, convirtiendo al programa de retardo de pasivo a activo.
INICIO

ESTABLECE LOS PARAMETROS DEL RETARDO


EJECUTA LA 1 SECCION DEL PROGRAMA
DECREMENTA EL CONTADOR DE RETARDO

SE HA
CUMPLIDO
CON EL RETARDO?
NO
SI
EJECUTA LA SECCION
DEL PROGRAMA QUE
ESPERA

36

b) Diagrama de flujo en detalle

c) Listado

INICIO
LDAA

A FF

LAZO:

A - 1 A

#$FF

DECA

;establece retardo
;decrementa lazo2

BNE

LAZO

;fin de lazo?

SWI

;interrupcin por software

BNE

=0
FIN
b) Diagrama de flujo en detalle

c) Listado

INICIO
LDX

Ix FFFF

#$FFFF

;establece retardo

LAZO

;fin de lazo?

DEX
LAZO:

Ix - 1 Ix

BNE
SWI

;decrementa lazo

;interrupcin por software

BNE

FIN

Para correr el programa, se notara que durante un intervalo de tiempo el MPU


atiende la ejecucin del programa de retardo, al concluir retorna a atender al
usuario.
4.4 TABLAS DE DATOS
Una tabla es una estructura de datos bsica, por lo regular continua, de la cual
se conoce sus direcciones inicial y final y cuyos datos que la componen por lo
general tienen la misma caracterstica es decir la informacin o el parmetro que
representan es similar para todos los datos.

4.4.1 Solucin de Algoritmos Numricos mediante Tabla de Datos

La principal aplicacin de las tablas es como tabulaciones de bsqueda o look


up tables que consisten en tabulaciones absolutas de datos y que son ampliamente

37

utilizadas como opcin a los algoritmos numricos que tradicionalmente dan


solucin a problemas como: conversiones de cdigo, operaciones aritmticas
complejas, linearizacin, interpretacin de variables de entrada, respuesta a
comandos o instrucciones, acceso a archivos, etc.

Una tabla es un mtodo simple de resolver problemas o tomar decisiones, basta


con organizarla adecuadamente para que una variable de entrada o independiente,
encuentre fcilmente la variable dependiente, de salida o equivalente.
DIRECCION

CONTENIDO

VARIABLE INDEPENDIENTE
LLAVE O CLAVE DE ENTRADA
AXB
A
A
CODIGO A
BINARIO
BINARIO
BCD

VARIABLE DEPENDIENTE
RESULTADO O SALIDA

= RESULTADO DE LA MULTIPLICACION
= Log A
= A
= CODIGO B
= DECIMAL
= GRAY
= 7 SEGMENTOS

Una vez cargada la tabla en memoria, su acceso se efecta manipulando un


acumulador en modo indexado. En el ejemplo 4.7 se ilustra un programa para
convertir de cdigo binario a cdigo BCD usando una tabla.

El tiempo de acceso a la tabla se reduce a cargar un acumulador en modo


indexado. A diferencia de un algoritmo o ecuacin que requiere efectuar una serie
de instrucciones, clculos, funciones lgicas, iteraciones, etc.

Una desventaja de las tablas es que ocupan un gran espacio en memoria,


sin embargo en la actualidad la memoria es econmica y compacta.

38

4.4.2 Manipulacin de Datos mediante una Tabla

Cuando se cuenta con una tabla de datos variables, por lo general surge la
necesidad de obtener informacin de sta, tal podra ser calcular el promedio de los
valores, encontrar el nmero mayor, ordenar los valores con algn criterio, etc.
Estas operaciones implican efectuar la misma operacin a todos y cada uno de los
datos de la tabla, por lo que aparece la necesidad de construir un algoritmo tipo
lazo iterativo.

Con respecto a la manipulacin de los datos en una tabla, a menudo es


necesario usar dos indicadores o apuntadores para este caso es muy til contar
con dos registros ndice, tal es el caso de mover un dato de una tabla a otra, se
puede usar un registro para leer el dato y el otro registro ndice para escribir el
dato en la otra tabla.

Ejemplo 4.6 Disear un programa que borre (escriba ceros) en una tabla.
00
00
00
00
00

00

CD00

CBFF

39

a) Diagrama de flujo de la idea

b) Diagrama

INICIO

INICIO

CARGAR EL INDICADOR O
APUNTADOR CON EL INICIO

lxC000
00(lx+00)

BORRAR LA
LOCALIDAD EN MODO

lx-C3FF

ES LA ULTIMA
DIRECCION?
BEQ

NO

SI
FIN

INCREMENTAR EL
INDICADOR

>0
FIN

lx +1 lx

de flujo de detalle

c) Listado
LDX

#$C0rificar previamente el contenido

LAZO1;

CLR

0,X

de las direcciones a borrar.

CPX

#$C3FF

2.- Correr el programa.

BEQ

LAZO

3.- Verificar que la tabla ha sido borrada.

INX

LAZO;

BRA

LAZO1

SWI

LAZO1

Ejemplo 4.7 Disear un programa que por medio de una tabla efecte una
conversin de cdigo binario a BCD.

Procedimiento: El dato binario puede cargarse en el registro ndice y


posteriormente leer en modo indexado el dato de la tabla que a su vez ha sido
cargada previamente con los equivalentes en BCD, para muestra basta con una
tabla de 16 datos.

40

Procedimiento: Establecer la tabla original a partir de la direccin C000, para


este caso de pruebas usar una tabla pequea por ejemplo de 16 datos, por ltimo
establecer el destino de la tabla en la direccin C100.

1 Usar el lx para leer el dato de la tabla original.

2 Usar el ly para escribir la tabla transferida.

C000
1 INICIO
2
3
4
5
6
7
8
9
A
B
C
D
E
C00F
FINAL

C100
DESTINO

TABLA ORIGINAL

41

a) Diagrama de flujo de la idea

b)

Diagrama de flujo en detalle

INICIO

INICIO

CARGAR EL lx CON LA DIRECCION DE INICIO DE LA


TABLA ORIGINAL Y EL ly CON LA DIRECCION DE
DESTINO

lxC000

lyC100

LEER EN MODO INDEXADO EN X EL


DATO DE LA TABLA ORIGINAL Y
ESCRIBIR EN MODO INDEXADO EN y
EL DATO EN LA TABLA DE DESTINO

A (lx+00)

A (ly+00)

lx- C00F

PREGUNTAR SI ES EL
ULTIMO DATO

SI

NO
INCREMENTAR AMBOS
REGISTROS INDICE

FIN

BEQ
V

F
lx+1lx

ly+1ly

FIN

c)Listado
LDX
LDY
LAZO;

LDAA

0,X
STAA
CPX
BEQ
INX
INY
BRA

LAZO;

SWI

#$C000
#$C100
0,X
#$C00F
LAZO

LAZO1

42

PROGRAMAS PROPUESTOS

1 De una serie de nmeros que inicia en la direccin 0050 y cuya longitud se


indica en la direccin 004F, contar la cantidad de nmeros positivos que contiene la
serie, y colocar el resultado en la direccin 004E.

2 De una serie de nmeros que inicia en la direccin 0050 y cuya longitud se


indica en la direccin 004F, contar la cantidad de nmeros positivos, negativos y
cero, contenidos en la serie, y colocar los resultados en las direcciones, 004C
positivos, 004D negativos y 004E cero.

3 De una serie de nmeros que en la direccin 0050 y cuya longitud se indica


en la direccin 004F, separar el nmero mayor y colocarlo en la direccin 004E.

4 De una tabla que inicia en la direccin C000 y finaliza en la direccin C00F,


ordenar las cantidades contenidas en ella en forma ascendente.

4.5 SUBRUTINAS

Una subrutina es un programa que cumple con alguna funcin especfica. Las
subrutinas pueden accesarse o ser llamadas por el programa principal una o tantas
veces como sea necesario. La ventaja inmediata del uso de una subrutina que se
emplea varias veces, es que no es necesario integrarla al programa principal,
logrando as su simplificacin y reduccin de tamao.

Las

instrucciones

asociadas

las

subrutinas

son,

JSR,

JUMP

TO

SUBROUTINE (brinco a subrutina) en modo extendido e indexado, BSR, BRANCH


TO SUBROUTINE (ramificacin a subrutina) en modo relativo y RTS, RETURN
FROM SUBROUTINE (retorno de subrutina) en modo inherente.

43

Cuando el programa principal llama a una subrutina cede el control del


programa a la subrutina hasta realizar su ejecucin y posteriormente retorna el
control al programa principal.

Al ejecutarse las instrucciones de JSR o BSR el contenido del contador del


programa, que indica la siguiente instruccin a ejecutar del programa principal, se
almacena temporalmente en el STACK, posteriormente se carga el contador del
programa con la direccin de la primer instruccin de la subrutina e inicia as su
ejecucin.

Al encontrar el MPU una instruccin de RTS, durante la ejecucin de la


subrutina, recobra el contenido del contador del programa que fuera anteriormente
almacenando en el STACK para continuar con la ejecucin del programa principal.

44
INICIO
STACK

PROGRAMA
PRINCIPAL
______________
______________
______________
______________
______________
______________

JSR
DIR H
DIR L

PC

PCH
PCL

BSR
OFFSET
SUBRUTINA
__________
__________
__________
__________

CONTINUACION
DEL
PROGRAMA
PRINCIPAL
______________
______________
______________
______________
FIN O RECICLA

RTS

STACK

PCH
PCL

Este proceso puede anidarse, es decir una subrutina puede a su vez llamar a
otra subrutina y as sucesivamente, tantas veces como lo permita el tamao del
STACK que almacena el contador del programa para retornar en cada uno de los
casos.
STACK

INICIO
PROGRAMA
PRINCIPAL
__________

PCH
PCL
PCH
PCL

__________
__________
JSR
DIR H
DIR L

PC

CONTINUACION
DEL
PROGRAMA
PRINCIPAL

()
()
A
A

BSR
OFFSET
SUBRUTINA
A
___________
___________
__________
RTS

JSR o BSR
SUBRUTINA
B
___________
___________
__________
RTS

STACK
FIN O RECICLA

PCH
PCL
PCH
PCL

PP
PP
(A)
(A)

45

Al disear una subrutina, es necesario considerar que pudiera usar para su


ejecucin los mismos registros que usa el programa principal, es tambin
recomendable considerar que las subrutinas requieren de informacin previa,
llamada tambin parmetros de la subrutina, y que la subrutina generar resultados
como consecuencia de su ejecucin que tendrn que ser usados por el programa
principal. La siguiente es una estructura tpica para una subrutina.

INICIO

SUBRUTINA

PROGRAMA
PRINCIPAL

a)

PARAMETROS
DE LA
SUBRUTINA

b)

JSR
DIR H

O
OFFSET

c)

DIR L
d)
PC

ALMACENA EL
CONTENIDO DE LOS
REGISTROS
PREVIAMENTE USADOS
POR EL PROGRAMA
PRINCIPAL, ALGUNA
MEMORIA AUXILIAR.
INICIA LA EJECUCION DE
LA SUBRUTINA

CONTINUACION
DEL
PROGRAMA
PRINCIPAL

FIN O RECICLA

PASA LOS RESULTADOS


DE LA SUBRUTINA AL
PROGRAMA PRINCIPAL
RECOBRA DE LA
MEMORIA AUXILIAR EL
CONTENIDO DE
RETORNAR AL
PROGRAMA PRINCIPAL
RTS

46

Ejemplo 4.9 Convertir en una subrutina al programa de retardo de tiempo que


una el acumulador A y el registro ndice X, considerar como parmetro de la
subrutina el valor del acumulador A que determina el nmero de veces que se
ejecutar la seccin de retardo del Ix

INICIO
A XX
lx XXXX

lx -1lx

lx= 0
NO

SI
A -1A

A=0
NO

SI

FIN
PROGRAMA
PRINCIPAL
___________
___________
___________
___________
___________

COMENTARIOS:

a) PARAMETRO, CARGAR EL ACUMULADOR


A CON EL # DE VECES A EJECUTAR LA
RUTINA ANTES DE LLAMARLA.
b) EN LA SECCION DE LA SUBRUTINA
ALMACENAR EL Ix ES UNA MEMORIA
AUXILIAR Y POSTERIORMENTE
RECOBRARLO ANTES DE REGRESAR AL
PROGRAMA PRINCIPAL
c) LA INSTRUCCIN DE SWI SE CAMBIA POR
UN RTS

a)
PARAMETRO

AXX

JSR o BSR
RETARDO

SUBRUTINA
Ix MEMORIA
AUXILIAR
b)

Ix XXXX
CONTINUA
CON EL
PROGRAMA
PRINCIPAL
___________
___________
___________
___________
___________
FIN
O
RECICLA

Ix 1 Ix

Ix = 0
SI

NO

A1 A

A=0
NO

SI
Ix MEMORIA
AUXILIAR

b)
RTS
c)

47

CAPITULO 6
Interrupciones

OBJETIVO
El Objetivo de este tema es el apoyar el estudio de las condiciones de
excepcin como lo es el estado de Reset y las Interrupciones.

INTRODUCCION

Una caractersticas tpica de los microprocesadores usados para el control, es


contar con la capacidad de interrupcin.

El concepto de interrupcin se refiere, a (suspender/detener) la ejecucin


normal de un programa, de manera tal que este pueda continuarse en un momento
posterior.

As una interrupcin permite al MPU atender o realizar alguna otra accin, por
ejemplo ejecutar una rutina llamada de interrupcin, que atienda la presencia
aleatoria de eventos tales como: alarmas, fallas de alimentacin, contabilizacin de
perodos de tiempo, protocolos de intercambio de informacin con perfericos, etc. y
que liberan al programa principal de prestar atencin constante a eventualidades

48

mediante supervisin y al programador de la incertidumbre de perder alguno de


estos eventos.
Las interrupciones se pueden clasificar bsicamente en 4 tipos:

Reset

Interrupcin por hardware no inhibible (no enmascarable/no evitable)

Interrupcin por hardware inhibible (enmascarable/evitable)

Interrupcin por software

+V
RST
XIRQ

MPU
IRQ

Fig. 7.1 Conexin de interruptores externos a un


microprocesador

Al recibir una de estas interrupciones, el MPU carga en forma automtica en el


contador del programa la direccin de inicio de la rutina de interrupcin, a esta
direccin se le d el nombre de vector, y es previamente cargada en ROM en los
bytes ms altos de memoria reservados para este fin.

7.1 RESET

Aunque la activacin de la entrada de RESET provoca una interrupcin de la


ejecucin de un programa, esta entrada no est concebida para la manipulacin de
entradas y salidas, sino para el restablecimiento de loas condiciones iniciales del
programa. Al presentarse el RESET el MPU carga en el contador del programa el

49

contenido de las direcciones FFFE y FFFF vector de RESET, que debe contener la
direccin de inicio de la rutina de establecimiento dando as inicio a esta rutina.

La secuencia de inicio se ilustra en la figura 7.2


RST
ESTABLECE LA BANDERA
DE INTERRUPCION I=1

PC

RST

ESTABLECE LA BANDERA DE
INTERRUPCION I=1

CARGA
CONTADOR

FFFE
FFFF

EL
DEL

INICIA LA RUTINA DE
RESTABLECIMIENTO

INICIA LA RUTINA DE
RESTABLECIMIENTO

PROGRAMA DE APLICACION

Fig. 7.2 Secuencia de RESET


Cuando se trata de una aplicacin especfica, es decir el microprocesador
opernado como un aparato, la rutina de restablecimiento consiste en establecer las
condiciones de inicio, para proseguir despus con la ejecucin del programa de tal
aplicacin o programa principal.

7.2 INTERRUPCIONES POR HARDWARE Y SOFTWARE

Estas interrupciones provocan que el MPU abandonen en forma momentnea el


programa principal atendiendo la rutina de interrupcin correspondiente cuyo inicio
se indica tambin en un par de direcciones llamado Vector de Interrupcin. En una
forma simplificada el diagrama de flujo de la figura 7.3 explica la secuencia de
interrupcin va, interrupcin por hardware no enmascarable y enmascarable as
como la interrupcin por software.

Los registros que se guardan en el STACK, contienen el estatus de operacin


del MPU, durante la ejecucin del programa principal antes de la llegada de una

50

interrupcin. El contador del programa indica la direccin de la siguiente instruccin


a ejecutar una vez regresando de la rutina de interrupcin.

INTERRUPCION
POR HARDWARE

INTERRUPCION
POR SOFTWARE

ES NO
ENMASCARABLE?
NO

SI

ESTA
PUESTA
LA BANDERA DE
INTERRUPCION
SI

NO

CONTINUA CON
EL PROGRAMA
PRINCIPAL

FFF8
FFF9
FFFA
FFFB
FFFC
FFFD
FFFE
FFFF

ALMACENA LOS
REGISTROS DEL
MPU EN EL STACK

ENMASCARABLE
POR
SOFTWARE
NO
ENMASCARABLE

ESTABLECE LA
BANDERA DE
INTERRUPCION

STACK
CC
A
B
Ix H
Ix L
PC H
PC L

CARGA EL VECTOR
DE INTERRUPCION
EN EL CONTADOR
DEL PROGRAMA

RESET

EJECUTA LA
RUTINA DE
INTERRUPCI

Fig. 7.3 Diagrama de flujo de la secuencia de interrupcin

51

La rutina de interrupcin deber concluirse con una instruccin de RTI, Retorno


de Interrupcin, con lo que efecta una secuencia de retorno al programa principal
como se muestra a continuacin.

INTERRUPCIONES
PROGRAMA
PRINCIPAL
RUTINA
REGISTROS
AL STACK

DE
INTERRUPCION

RECOBRA LOS
REGISTROS
DEL STACK
RTI
CONTINUA
CON EL
PROGRAMA
PRINCIPAL
FIN
O
RECICLA

RETORNO

52

CONCLUSIONES Y RECOMENDACIONES

Es esencial que todas las clases de programacin ya sea de superlenguaje o


lenguaje de bajo nivel sean complementadas con extensas sesiones de prctica y
que adems el alumno invierta una buena cantidad de horas fuera del saln de
clases y de su horario de prcticas que le establece la escuela para de esta
manera llegar a un nivel de entendimiento aceptable del tema y tenga la capacidad
de implementar aplicaciones reales.

Para que el proceso de enseanza/aprendizaje de la programacin de


microprocesadores sea lo ms rpida y eficaz posible es recomendable que la
clase se imparta en un saln-laboratorio en donde el alumno compruebe en forma
inmediata los conceptos tericos que recin acaba de adquirir y adems le invierta
por su cuenta suficientes horas para alcanzar el fin que se menciona en el prrafo
anterior.

53

REFERENCIAS

1. Bishop Ron ; Basic Microprocessors and the 6800 ; Copyright 1979 ; Hayden
Book Company inc., 1978.

2. Clements Alan, Microprocessors Systems Design, DWS-Kent Publishing


Company, 1987.

3. Garca Arregui Macario ; Diseo elctrico y electrnico asistido por


computadora OrCAD/SDT ; Ed. Alfaomega, 1992.

4. Kelly-Bootle & Fowler ; 68000, 68010, 68020 ; 1 edicin ; The Waite Grove
inc., 1985.

5. Leal Csar A. ; Fundamentos de diseo digital ; FIME ; 9 edicin, Febrero


1991.

6. Leventhal Lance A. ; 6800 Assembly Language Programming ; Osborne &


Associates inc., 1978.

7. Malvino; Principios de electrnica ; 4 edicin ; McGraw Hill, Febrero 1991.

8. Mano M. Morris, Lgica digital y diseo de computadoras ; 1 edicin ;


Prentice Hall., 1979.

54

9. Motorola ; Microprocessor, microcontroller and peripherial data ; Vol I ; 2


edicin; Motorola inc., 1988.

10. Motorola ; Microprocessoy, microcontroller and peripherial data ; Vol II; 2


edicin; Motorola inc., 1988.

11. Motorola ; Reference Manual M68HC11., 1990.

12. Savant Roden Carpeter ; Diseo electrnico ; 2 edicin ; AddisonWesley Iberoamericana, 1992.

13. Tokheim Roger L. ; Principios digitales ; 3 edicin ; McGraw Hill., 1990.

14. Websters New World ; Diccionary of computer terms ; 3 edicin ; Prentice


Hal., 1988.

55

GLOSARIO

Algoritmo

Descripcin de reglas y procesos completamente definidos


para la solucin de un problema o un programa.

Apuntador del Stack

Registro del MPU utilizado para indicar la direccin


disponible del Stack.

Baud

Unidad de medida de transmisin de datos. Un bit por


segundo.

Bit

Dgito binario, notacin de un nmero en sistema nmerico


binario.

Buffer

Una de memoria para almacenar datos en forma temporal.

Byte

Grupo de 8 bits operado por una computadora como unidad.

Cdigo Mquina

Cdigo en binario que un microprocesador reconoce como


una instruccin.

Comunicacin Asncrona

Mtodo de transmisin de datos que permite enviar datos en


serie en intervalos irregulares precedido cada carcter con un bit
de inicio y seguido de un bit de alto.

Comunicacin Serie

Transmisin de datos en el cual los bits son transferidos uno por


uno.

Comunicacin Sncrona

Transmisin de datos en el cual ambos transmisor y receptor


usan la misma seal de sincronizacin.

56

Diodo Emisor de Luz (LED)

Diodo que al ser polarizado directamente emite luz visible o


invisible

Full duplex

Transmisor de datos en ambos sentidos por lneas


independientes.

GLOSARIO (CONTINUACION)

Lenguaje Ensamblador

Lenguaje de bajo nivel que permite al usuario escribir los


programas usando mnemnicos en lugar de cdigos numricos.

Microcontrolador

Unidad de microcomputo para aplicaciones de control.

Microprocesador

Sistema basado en una unidad lgica aritmtica para


procesamiento de datos y control de otros componentes como
memoria, dispositivos de entrada/salida todo incluido en un solo
circuito integrado.

Mnemnico

Tcnica utilizada para ayudar a la memoria humana. Una


palabra o nombre que es fcil de recordar. Estatutos que se
refieren a las instrucciones de un Microprocesador.

PCBUG11

Sistema monitor de fabricante motorola orientado para


desarrollar y evaluar a los microcontroladores de la familia HC11.

Reset

Stack

Estado de inicio de un microprocesador y sus componentes.

Bloque de memoria RAM en el que el microprocesador


almacena temporalmente sus registros durante la ejecucin de
una subrutina o un programa de interrupcin.