You are on page 1of 99

INDICE

INDICE
INTRODUCCION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CAPITULO 1 .- EL MICROCONTROLADOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
4
5

CAPITULO 2 .- LENGUAJES DEL MICROCONTROLADOR. . . . . . . . . . . . . . . . . .

7
7
8
9
11
13
14

CAPITULO 3 .- EL MICROCONTROLADOR 68CH11. . . . . . . . . . . . . . . . . . . . . . . .

15
15
16
18

CAPITULO 4 .- PROGRAMACIN DEL 68HC11. . . . . . . . . . . . . . . . . . . . . . . . . . . .

21
21
24
28
38
40
41
43

CAPITULO 5 .- PUERTOS DEL MC68HC11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

- ENTRADAS Y SALIDAS EN PARALELO. . . . . . . . . . . . . . . . . . . . . . .


- PROTOCOLOS DE COMUNOCACION PARALELO. . . . . . . . . . . . .
- DESCRIPCION GENERAL DEL MPU11. . . . . . . . . . . . . . . . . . . . . . . .
- CONEXIN DEL MINED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- DESCRIPCION DEL MPU11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47
47
51
54
55
56

APENDICES
I - PROBLEMAS CURSO HC11...
II - PROBLEMAS DE APLICACIN...

61
73

1.1 - CONCEPTOS BASICOS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


1.2 - UNIDADES BINARIAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 - NUMEROS NEGATIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1
2.2
2.3
2.4
2.5
2.6

- LENGUAJE DE MAQUINA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- LENGUAJE ENSAMBLADOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- LENGUAJE DE ALTO NIVEL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- ELEMENTOS DEL LENGUAJE ENSAMBLADOR. . . . . . . . . . . . . . . .
- DIRECTIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- TIPOS DE ENSAMBLADORES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1 - ARQUITECTURA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 - MODOS DE OPERACION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 - MEMORIA DEL 68CH11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1
4.2
4.3
4.4
4.5
4.6
4.7

5.1
5.2
5.3
5.4
5.5

- MODELO DE PROGRAMACION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- MODOS DE DIRECCIONAMIENTO. . . . . . . . . . . . . . . . . . . . . . . . . . .
- CONJUNTO DE INSTRUCCIONES. . . . . . . . . . . . . . . . . . . . . . . . . . . .
- TECNICAS DE PROGRAMACIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- EL SISTEMA MONITOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- EL SISTEMA MONITOR SM11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- RUTINAS DE SERVICIO DEL SM11. . . . . . . . . . . . . . . . . . . . . . . . . . . .

INTRODUCCION

MINED
Los sistemas con microprocesador pueden clasificarse
como de aplicacin general (reprogramables) o aplicacin
dedicada (programacin fija). Los sistemas de aplicacin general
son las computadoras clsicas que contienen alguna forma de
almacenamiento masivo en donde se guardan diferentes
programas que el usuario puede ir llamando y en la que puede
adems desarrollar programas en algn lenguaje conforme se
requieran. Los dispositivos de Entrada/Salida conectados a este sistema son para comunicarse
con el usuario.
Los sistemas de aplicacin dedicada por otro lado no se parecen a una computadora
clsica. En estos sistemas los programas se almacenan en memorias ROM o EPROM y rara vez
contienen formas para almacenamiento masivo. Los dispositivos Entrada/Salida no se limitan a
la comunicacin con el usuario sino que tambin monitorean y controlan mecanismos y/o
procesos fsicos.
Las aplicaciones de control dedicado pueden dividirse en: control secuencial, control de
lazo cerrado y adquisicin y proceso de datos. El mas simple es el control secuencial que tiene
que ver con el control y monitoreo de un sistema como una secuencia de eventos. El control de
lazo cerrado consiste en monitorear de cerca la salida de un proceso o dispositivo y actuar sobre
sus entradas para obtener la salida deseada. Estas dos categoras involucran programas fijos que
interactuan directamente con el exterior en los que sus estructuras de datos son pequeas y
simples. La tercer categora (adquisicin y proceso de datos) involucra tambin programas fijos
pero la interface con el mundo exterior y las estructuras de datos se tornan grandes y
complicadas.
En la actualidad la mayora de las aplicaciones de control secuencial y de control de
lazo cerrado pueden ser cubiertas satisfactoriamente por un Microcontrolador, dispositivo que
agrupa al Microprocesador, memorias RAM, EPROM y/o EEPROM, puertos y perifricos en
un solo circuito integrado. Desde luego la cantidad de memoria y puertos es muy limitada y en
ocasiones tambin la capacidad del Microprocesador. No obstante, se estn mejorando da con
da y algunos de estos Microcontroladores tienen ya el poder de una computadora personal de
principios de la dcada pasada por lo que es necesario estar familiarizado con esta nueva
tecnologa.
Las familias de Microcontroladores mas sobresalientes son la INTEL 8048, 8051 y
8096 y MOTOROLA 6801, 6805 y 68HC11. Las nuevas familias de microcontroladores
econmicos tipo RISC como el PIC de MICROCHIP y el AVR de ATMEL han revolucionado
el diseo basado en microcontrolador y desplazado a la mayora de soluciones con otros tipos de
dispositivos lgicos programables.
En las paginas siguientes se da una introduccin a la familia 68HC11 y en particular
del MC68HC711E20 que es una versin con 20 Kb de OTPROM (One Time Programmable
Read Only Memory), 512 bytes de EEPROM y 768 bytes de RAM. Estos apuntes no
pretenden ser un libro de texto ni contienen toda la informacin al respecto. Mas bien son
memorias que introducen los puntos prcticos o ms importantes tratados en cursos
Universitarios o de Capacitacin.

Indice

CAPITULO 1
EL MICROCONTROLADOR
El centro de una computadora es la Unidad Central
Proceso (CPU). El microprocesador es un CPU contenido
en un solo circuito integrado. Un microcomputador se forma
con el microprocesador complementado con memoria de
programa ROM (Read Only Memory), memoria de proceso
RAM (Random Access Memory) y puertos de entrada y
salida.
Un microcontrolador es un simple circuito integrado que incluye muchas de las
funciones encontradas en un sistema microcomputador. Esta formado por un CPU,
memoria y puertos contenidos en una sola pastilla. Actualmente los microcontroladores
pueden ser programados por el usuario grabando en su memoria la serie de instrucciones
que forman un programa de aplicacin.

1.1 CONCEPTOS BASICOS


Un sistema microcomputador esta formado por los mismos bloques funcionales
sin importar de que tamao sea: CPU, dispositivos Entrada/Salida (E/S), memoria de
programa y memoria de datos.
UNIDAD CENTRAL DE PROCESO (CPU). Constituido por el
microprocesador, dispositivo que agrupa miles de elementos lgicos en un circuito
integrado que realiza operaciones lgicas, aritmticas y de control. Es el elemento
operativo del sistema capaz de proveer las salidas adecuadas a un sistema, analizando,
comparando y trabajando lgica y aritmticamente las entradas informativas siguiendo un
proceso ordenado de manera secuencial establecido previamente en la memoria no voltil
(ROM).
MEMORIA DE PROGRAMA (ROM). Memoria de solo lectura que tiene
almacenada una serie de instrucciones fijas segn las cuales opera el sistema. En esta
memoria esta grabado el programa de operaciones especificas para el trabajo del
Microcontrolador en una aplicacin concreta. Esta memoria se programa por el diseador
y su contenido solo puede ser ledo. Existen varios tipos de memorias de programa:

ROM (Read Only Memory). Esta memoria la programa el fabricante en el


momento de su manufactura por lo que se usa solo para altos volmenes de
produccin.
PROM(Programmable Read Only Memory). Memoria ROM que puede ser
programada por el usuario una sola vez.
EPROM(Erasable Programmable Read Only Memory). Es una memoria PROM
que puede ser borrada por el usuario exponindola a luz ultravioleta y que puede
programarse de nuevo.

Indice

CAPITULO 1.- EL MICROCONTROLADOR

OTPROM(One Time Programmable Read Only Memory). Es una


memoria EPROM encapsulada en un paquete econmico de plstico que es
opaco a la luz ultravioleta y que por lo tanto podr ser programada una sola
vez.
EEPROM(Electrically Erasable Programmable Read Only Memory). Memoria
que puede ser programada y borrada por medios elctricos. Es la ms verstil de
las memorias ROM.
FLASH MEMORY. Memoria no voltil que se programa elctricamente como la
EEPROM pero a una velocidad mucho mayor (del orden de 100 veces). Algunos
microcontroladores modernos la incluyen para memoria de programa.

MEMORIA DE DATOS (RAM). El contenido de esta memoria puede ser


grabado y ledo por el CPU. En ella el microprocesador almacena datos de inters
temporal tanto de los programas que efecta como para su propio funcionamiento.
DISPOSITIVOS ENTRADA/SALIDA. Son el medio de comunicacin del
CPU con el mundo exterior. La informacin se alimentada al MCU (microcontrolador) a
travs de dispositivos de entrada. Algunos dispositivos convierten seales analgicas en
seales digitales que el CPU puede entender y manipular. Otros dispositivos convierten la
informacin del mundo real en valores 0 - 5 V a travs de sensores pticos, de
proximidad, microinterruptores, etc. Los dispositivos de salida son controlados por seales
del MCU. Algunos requieren convertir los valores lgicos del MCU a diferentes voltajes y
corrientes necesarios. Algunos ejemplos de dispositivos de salida son: pantallas de cuarzo,
vdeo, relevadores, etc.

1.2 UNIDADES BINARIAS


Un microcontrolador basa su funcionamiento en el sistema binario cuya unidad es
el dgito binario o Bit. De aqu se hacen resaltar grupos de bits llamndolos de alguna
manera especial. As a 4 bits se les conoce como Nible o Nybble y a 8 bits como Byte.
Una unidad de informacin importante en la computadora es la que se conoce
como palabra que se puede definir como el grupo de dgitos binarios que pueden
transferirse entre el CPU y la memoria a la vez. El tamao de palabra es una de las
caractersticas ms importantes de un Microcontrolador ya que indica la capacidad de
transferencia de datos. Los tamaos de palabra ms comunes en microcontroladores son 8
y 16 bits. En estos tamaos se pueden representar nmeros, instrucciones, direcciones,
caracteres o datos dependiendo de como son interpretados.
En el uso de lenguaje ensamblador s a generalizado el uso de la palabra
WORD como la unidad de 16 bits. Por esta razn cuando se utiliza la expresin
palabra se refiere a la agrupacin de 16 bits y no a la caracterstica del microprocesador,
a menos que as se especifique.

MINED 11

Indice

CAPITULO 1.- EL MICROCONTROLADOR

1.3 NUMEROS NEGATIVOS


Dentro del sistema binario un numero negativo se representa como
el complemento a 2 del numero natural. Por ejemplo:
el -3 es 1101
0011 <-1100 <-1101 <--

Numero 3 en binario.
Complemento a 1.
Complemento a 2.

En realidad existen 2 formas de interpretar un numero binario para una cantidad


de bits dada. Por ejemplo en 4 bits se tiene que:

HEX
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

BINARIO

DECIMAL

0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
10
1011
11
1100
12
1101
13
1110
14
1111
15
BINARIO NATURAL
(NUMEROS SIN SIGNO)

HEX
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7

BINARIO

DECIMAL

1000
-8
1001
-7
1010
-6
1011
-5
1100
-4
1101
-3
1110
-2
1111
-1
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
COMPLEMENTO A DOS
(NUMEROS CON SIGNO)

A la tabla izquierda se le conoce como BINARIO NATURAL y es como se


representan los nmeros sin signo. Por otro lado la tabla de la derecha, es la convencin de
2do complemento, en donde el bit ms significativo indica el signo (1 = Negativo y 0 =
Positivo). De aqu que cuando se de una informacin en binario (o Hexadecimal) debe
especificarse si es con signo (complemento a 2) o sin signo (binario natural).
El CPU del Microcontrolador trabaja ambas especificaciones en sus operaciones
aritmticas (suma, resta), siendo idnticos los resultados tanto para el caso de binario
natural como para el de nmeros con signo.
La diferencia entre los dos casos es hecha por la interpretacin del resultado,
utilizando para tal efecto dos bits auxiliares de la unidad aritmtica.
Si los datos se especifican en binario natural el resultado debe interpretarse con el
bit C llamado CARRY (acarreo). Este bit nos indica que se sobrepaso el rango del
MINED 11

Indice 5

CAPITULO 1.- EL MICROCONTROLADOR

binario natural, entendiendo con esto que el resultado es mayor que el


mximo numero representable o menor que cero (en el caso de 4 bits,
mayor que 15 o menor que cero; para 8 bits mayor de 255 o menor que
cero, etc.).
Para el caso en que los datos son nmeros con signo el resultado se interpreta en
conjunto con el bit V, conocido como SOBREFLUJO. Este bit indica que el resultado
sobrepasa la tabla de 2do complemento, es decir en el caso de 4 bits, que es menor de -8 o
mayor de 7 (para 8 bits, menor de -128 o mayor de 127).
Los bits C y V son evaluados por un circuito combinatorio conectado a las
entradas y salidas de la unidad aritmtica. En un proceso de suma estos bits son evaluados
de la siguiente manera:
Para la SUMA:
Se tiene que:

R=X+M
__
__
C = X7 M7 + M7 R7 + X7 R7
__ __ __
V = X7 M7 R7 + X7 M7 R7

Donde:
X7 y M7 - Bits ms significativos de los datos a sumar.
R7 - Bit ms significativo (MSB) del resultado.
De esta forma el mismo proceso de suma puede ser utilizado para los problemas
con signo o sin signo, distinguindose solo por el bit auxiliar que se use en su
interpretacin. Por ejemplo:
NATURAL
OPERACION
6+
0110+
11
1011
17 (1) <-0001

C=1

CON SIGNO
6+
-5
(OK) 1

V=0

NATURAL
5+
4
9 (OK)

C=0

OPERACION CON SIGNO


0101+
5+
0100
4
1001 --> (-7) 9

V=1

Los Microprocesadores y Microcontroladores de ocho bits trabajan con una


informacin de un byte (de aqu la denominacin de 8 bits). Las 256 posibles
combinaciones binarias pueden ser interpretadas de diferentes modos. Por ejemplo, una
misma combinacin de unos y ceros puede representar una cantidad con signo o sin signo,
un carcter ASCII (letras, nmeros, smbolos o controles), o una instruccin para el
microcontrolador.
La interpretacin que se de en un momento dado depende de la lgica del proceso
que se este realizando, y es por lo tanto necesario familiarizarse con los cdigos mas
comnmente usados.

MINED 11

Indice

CAPITULO II
LENGUAJES DEL MICROCONTROLADOR
2.1 EL LENGUAJE DE MAQUINA
El Microcontrolador solo reconoce instrucciones y
datos como patrones binarios. Es decir una instruccin es un
patrn binario que debe estar disponible a la entrada de datos
del CPU en el tiempo preciso a fin de que pueda ser
reconocida adecuadamente.
Un programa para el Microcontrolador es una serie de instrucciones que lo hace
realizar una tarea definida. Entonces un programa es un conjunto de nmeros binarios
(niveles lgicos) y recibe el nombre de LENGUAJE DE MAQUINA o PROGRAMA
OBJETO. Por ejemplo un programa en Lenguaje de Mquina se vera as:
BINARIO

HEXADECIMAL

10110110
00000000
01100000
10111011
00000000
01100001
10110111
00000000
01100010

B6
00
60
BB
00
61
B7
00
62

Como puede apreciarse un numero hexadecimal agrupa directamente a cuatro


dgitos binarios por lo que el lenguaje de mquina se presenta en forma ms corta. Algunas
de las dificultades asociadas con el desarrollo de programas en lenguaje de mquina son:
1. Difciles de entender o depurar.
2. Los programas no describen la tarea que se quiere realizar en algn formato
entendible para el humano.
3. El desarrollo de programas es largo y tedioso.
4. Frecuentemente el programador comete errores difciles de localizar.
Para programar en hexadecimal se necesita un Cargador Hexadecimal
(Hexadecimal Loader). Consiste en un programa que acepta nmeros en hexadecimal, los
convierte a binario y los deposita en memoria. Este programa junto con algunos otros de
utileria (examinar memoria y registros, correr, traza, puntos de prueba, etc.), forman el
sistema operativo ms pequeo conocido como sistema Monitor, Depurador o Evaluador.

Indice

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

2.2 EL LENGUAJE ENSAMBLADOR


Una mejor forma de representar las instrucciones es asignndoles un
nombre llamado mnemnico o mnemotcnico. El mnemnico describe lo que
la instruccin hace en un mnimo de caracteres (tpicamente 4).
El fabricante da un conjunto de mnemnicos que definen a cada una de las
instrucciones del CPU en el microcontrolador. Este nombre esta orientado al humano e
identifica las instrucciones en idioma ingles. En realidad el mnemnico puede ser cualquiera,
inclusive dado por el usuario mismo. Sin embargo, el mnemnico dado por el fabricante es
estndar, por lo que aparece en manuales, libros, artculos, programas y es entendido por
todos los usuarios.
Junto con los mnemnicos el manufacturador asigna nombres a los registros. Al
igual que los nombres de las instrucciones, algunos nombres de registros son obvios
mientras que otros tienen un significado histrico. El programa mostrado anteriormente en
mquina aparecera as en lenguaje ensamblador:
LDA
ADDA
STA

0060H
0061H
0062H

El programa aun esta lejos de ser obvio, pero al menos algunas partes son
comprensibles. Se puede apreciar que en una lnea aparecen instrucciones y datos o
direcciones.
Cuando se tiene un programa en lenguaje ensamblador se necesita traducirlo a
lenguaje de mquina (nmeros hexadecimales o binarios) actividad que se puede realizar
manualmente o que puede ser asignada a una Microcomputadora (o sea a un
Microprocesador). La Microcomputadora nunca se equivoca cuando traduce cdigos.
Siempre sabe cuantos bytes y en que formato los requiere una instruccin. El sistema que
realiza esta tarea se le da el nombre de Ensamblador (assembler). El programa ensamblador
traduce un programa usuario o programa Fuente escrito con mnemnicos, a lenguaje de
mquina o programa Objeto, que el Microcontrolador pueda ejecutar.

PROGRAMA FUENTE
nombre.ASM

PC

Programa OBJETO
nombre.OBJ

El ensamblador, como el cargador hexadecimal, no resuelve todos los problemas de


la programacin. Uno de ellos es la gran diferencia entre el conjunto de instrucciones del
CPU y las tareas que el humano desea que realice. Las instrucciones hacen cosas como
sumar o restar el contenido de dos registros, rotar el acumulador, cargar un nuevo valor al
ndex o modificar el contador de programa. Sin embargo el usuario generalmente desea que
el Microcontrolador realice algo como esperar un comando de teclado, mostrar informacin
en algn display o activar un relevador en el momento preciso. Un programador en lenguaje
ensamblador debe expresar estas tareas en una secuencia de instrucciones. Esta traduccin
es difcil y consume mucho tiempo.
8

MINED 11

Indice

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

Aun ms, quien programe en lenguaje ensamblador debe tener un


conocimiento detallado del Microcontrolador en particular que este
trabajando. Adicionalmente los programas en ensamblador no son portables
es decir, un programa desarrollado para el 68HC11 no funcionar para el 8751, 80186 o el
COP800. Esta deficiencia significa que no es posible correr programas que no hayan sido
desarrollados especficamente para el Microcontrolador en particular que se este usando.

2.3 LENGUAJE DE ALTO NIVEL


La solucin a muchas de las dificultades asociadas con la programacin en lenguaje
ensamblador es usar un lenguaje de Alto Nivel. Estos lenguajes permiten describir las
tareas en forma orientada al problema en vez de orientadas al Microcontrolador. Cada
instruccin en lenguaje de alto nivel realiza una funcin reconocible y corresponde
generalmente a un gran numero de instrucciones en ensamblador. Un interprete o un
compilador traduce el lenguaje de alto nivel a instrucciones de lenguaje de mquina o
programa objeto.
Es claro que en lenguaje de alto nivel, los programas son ms fciles y rpidos de
escribir. Una estimacin comn, indica que un programador puede escribir un programa
diez veces ms rpido en lenguaje de alto nivel, esto sin considerar la definicin del
problema, depuracin o documentacin. As los programadores pueden concentrarse en las
propias tareas y no necesitan saber nada acerca de la arquitectura de la computadora en se
que esta programando.
Las ventajas del lenguaje de alto nivel se sumarizan as:

Fcil de aprender (y de ensear a otros).


Describe convenientemente las tareas que realiza.
Menos consumo de tiempo en la escritura de programas.
Fcil de documentar.
Sintaxis estndar.
Programas portables.
Independencia de la estructura del Microcomputador.

Si todas las ventajas del lenguaje de alto nivel son ciertas, si es posible escribir
programas ms fcil y rpidamente, por qu meterse con el ensamblador?, Quin quiere
preocuparse por registros, cdigos de instruccin, mnemnicos y todas esas cosas?. Bueno,
existen algunas desventajas que se deben tomar en cuenta.
La traduccin de un lenguaje de alto nivel a lenguaje de mquina es ineficiente. La
razn bsica es que la compilacin es un proceso automtico que debe aceptar una gran
cantidad de posibilidades. Un compilador no se da cuenta cuando una variable ya no va a ser
utilizada y puede descartarse, o cuando se debe usar un registro en vez de una localidad de
memoria.
Un programador experimentado puede tener ventaja de reducir el uso de memoria y
el tiempo de ejecucin adaptando el problema al microprocesador en particular, haciendo
uso de trucos especiales.
MINED 11

Indice 9

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

Existe un lenguaje de alto nivel para cada tipo de tarea requerida. Por
ejemplo un lenguaje que expresa los problemas algebraicamente le ser difcil
controlar una impresora, editar una serie de caracteres o monitorear un
sistema de alarma por que el problema no puede ser expresado en notacin algebraica.
Las desventajas del lenguaje de alto nivel se pueden resumir as:

Reglas especiales
Lenguajes comnmente orientados (negocios, matemticas, etc.)
Programas ineficientes. Dificultad para optimizar cdigos y satisfacer
requerimientos de tiempo y memoria.
Incapacidad de usar las caractersticas especiales de una computadora.

En conclusin el nivel de lenguaje a usar depende de la aplicacin en particular y se


puede resumir as:
LENGUAJE DE MAQUINA.
Prcticamente no hay razn para emplear el lenguaje de mquina en aplicacin
alguna dado el tremendo gasto de tiempo y esfuerzo que requiere y el relativo bajo costo de
un ensamblador. La nica razn es que no hubiera mas o por educacin.
LENGUAJE ENSAMBLADOR

Programas chicos y medianos.


Aplicaciones donde el costo de memoria es factor principal.
Aplicaciones de control en tiempo real.
Proceso limitado de datos.
Aplicaciones de gran volumen de produccin.
Aplicaciones que involucren mas Entrada/Salida que computo.

LENGUAJE DE ALTO NIVEL

10

Programas grandes.
Bajo volumen de produccin,
Aplicaciones que involucran mas computo que control Entrada/Salida.
Compatibilidad con aplicaciones similares.

MINED 11

Indice

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

2.4 ELEMENTOS DEL LENGUAJE


ENSAMBLADOR
Como se sabe, Lenguaje Ensamblador es un lenguaje de bajo nivel
formado por los mnemnicos de las instrucciones de mquina de un microprocesador en
particular. Cada lnea escrita en Ensamblador representa una instruccin para el
microprocesador o bien una orden para el proceso de ensamble.
Las DECLARACIONES o INSTRUCCIONES del lenguaje ensamblador estn
divididas en campos (tabla 2.4).
El campo de Mnemnico o campo de operacin es el nico campo que nunca podr
estar vaco. Siempre contendr ya sea un mnemnico de instruccin o un directivo del
ensamblador (tambin llamado pseudo-instruccin).
El campo de operando puede contener direcciones o datos necesarios por el
mnemnico, o puede estar blanco.
El campo de nivel y el de comentario son opcionales. El programador podr asignar
una etiqueta a una instruccin o agregarle un comentario a conveniencia personal para hacer
el programa fcil de leer y usar.
Desde luego, el ensamblador debe de tener alguna manera de indicarle donde un
campo termina y otro comienza. En algunos casos se utiliza un formato fijo en donde se
establecen de que columna a que columna se definen los campos. Sin embargo como esta
forma es un tanto tediosa se usa en su lugar un Formato Libre. Esto se logra empleando
un smbolo especial o DELIMITADOR entre campo y campo. El delimitador mas comn
es el ESPACIO y el TABULADOR.
CAMPO DE
NIVEL

CAMPO DE
MNEMONICO

CAMPO DE
OPERANDO

CAMPO DE
COMENTARIO

INICIO

LDAA
ADDA
STAA
?
.
.
.
RTS
;
.DB
.DB
.DB

VAL1
VAL2
SUMA
?
.
.
.

;Primer dato en A
;Agregar segundo dato
;Resultado
;Siguiente instruccin
.
.
.
;Termina subrutina

0
1
0

;Lugar del 1er. dato


;Lugar de segundo dato
;lugar para resultado

SIGUE
.
.
.
FIN
VAL1
VAL2
SUMA

TABLA 2.1 CAMPOS DEL LENGUAJE ENSAMBLADOR

MINED 11

Indice 11

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

Los delimitadores comnmente usados en Lenguaje Ensamblador del


68HC11 son:
<espacio>
< coma >
<;>

Al iniciar el campo de Mnemnico, de Operando y en ocasiones el


campo de comentario.
Entre operandos en el Campo de operando.
Al inicio del campo de comentario y sobre todo al inicio de una
lnea exclusivamente de comentario.

El campo de Nivel inicia en la primer columna y puede estar en blanco. Si se escribe


una etiqueta el ensamblador la define como equivalente a la direccin del primer byte de la
instruccin. as se podr usar este nivel como dato o direccin en el campo de operando. El
ensamblador reemplaza este nivel con la direccin correspondiente en el momento del
ensamble.
El campo de mnemnico es muy fcil de usar ya que se debe poner el Mnemnico
que el fabricante propuso para la instruccin deseada. Tambin se usa este campo para
instruir al ensamblador a travs de los DIRECTIVOS o pseudo-instrucciones. En cambio el
campo de Operando es un poco mas complejo e incluye la informacin de datos o
direcciones y el modo de direccionamiento a usar. Para la representacin de datos existen
dos formas clsicas mostradas en la Tabla 2.2.

DATO EN
DECIMAL
HEXADECIMAL
BINARIO
OCTAL
ASCII

MOTOROLA
numero
$ numero
% numero
@ numero
carcter

INTEL
numero
numero H
numero B
numero Q
carcter

Tabla 2.2 REPRESENTACION DE DATOS EN ENSAMBLADOR

La representacin de los modos de direccionamiento depende de un


microprocesador en particular y es dada por el fabricante en la especificacin de su conjunto
de instrucciones. No obstante esa definicin es a menudo modificada por algunos
diseadores de ensambladores que la adaptan para facilitar el proceso de ensamble.

12

MINED 11

Indice

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

2.5 D I R E C T I V O S
Son instrucciones que no se traducen a lenguaje de mquina sino que
realizan funciones especiales dentro del proceso de ensamble como por ejemplo asignar un
rea de memoria al programa, definir variables, dar entrada de datos a memoria, etc.
Algunos de los directivos mas comunes son:

.EQU (equate). Define la variable en el campo de nivel con el valor dado en el


campo de operando.

.ORG (Origin). Indica la localidad de Memoria inicial en que se depositar n los


cdigos de mquina producto del ensamble.

.END (Fin). Indica el fin de un programa fuente.

.DB (Data Byte). Permite grabar un byte directamente. Tambin puede encontrarse
como FCB o DATA.

.DW (Data Word). Permite grabar dos bytes directamente. Tambin puede
encontrarse como FDB.

.DRW (Define Reversed Word). Considera el dato de 16 bits y lo graba a la manera


INTEL, primero el menos significativo.

.DL (Define Long). Permite grabar datos de 32 bits.

.RS (Reserve Storage). Reserva tantos bytes de memoria como se indiquen.


Tambin se utiliza RMB o RESERVE.

.TITLE o NAME. Para especificar encabezado en cada pgina.

.EJECT. Incluye un cambio de hoja en el listado

MINED 11

Indice 13

CAPITULO 2.- LENGUAJES DEL MICROCONTROLADOR

2.6 TIPOS DE ENSAMBLADORES


No obstante que la funcin de los ensambladores es la misma existen
distintas formas en su implementacin. A continuacin se describen algunos de los tipos de
ensambladores existentes.
CROSS-ASSEMBLER que corre en una computadora con un Microprocesador
diferente al cdigo que se esta ensamblando.
RESIDENT-ASSEMBLER o SELF-ASSEMBLER es un ensamblador fijo que
corre en la computadora para la cual ensambla programas.
MACRO-ASSEMBLER es un ensamblador que permite definir secuencias de
instrucciones como secuencias MACRO y que soporta el ensamble condicional.
MICRO-ASSEMBLER es usado para escribir los microprogramas que definen el
conjunto de instrucciones de un procesador. La microprogramacin no tiene nada que ver
con la programacin de Microprocesadores.
META-ASSEMBLER es un ensamblador que puede manejar distintos conjuntos
de instrucciones. En este caso el usuario indica el conjunto de instrucciones en particular que
se desea utilizar.
ONE-PASS-ASSEMBLER examina el programa ensamblador solo una vez. Este
ensamblador debe de tener alguna forma para resolver las referencias hacia adelante
(etiquetas no definidas).
TWO-PASS-ASSEMBLER es un ensamblador que examina el lenguaje
ensamblador dos veces. La primera vez define todos los smbolos; la segunda, traduce los
cdigos empleando las referencias ya definidas. La mayora de los ensambladores basados
en microprocesador requieren de dos pasadas.
LINE-ASSEMBLER. Ensamblador en lnea que permite la edicin de una sola
lnea e inmediatamente genera sus cdigos de mquina.

14

MINED 11

Indice

CAPITULO III
EL MICROCONTROLADOR 68HC11
ARQUITECTURA
El Microcontrolador 68HC11 desarrollado por
Motorola en 1984 con tecnologa HCMOS (High-density
Complementary Metal Oxide Semiconductor), combina la
alta velocidad y el tamao reducido con el bajo consumo de
potencia y la alta inmunidad al ruido. Su memoria interna incluye hasta 20 K bytes de
OTPROM, 512 bytes de EEPROM y 768 bytes de RAM.

El 68HC11 incluye los perifricos programables mas importantes. Un convertidor


analgico digital (A/D) de 8 canales y 8 bits de resolucin. Interface de comunicaciones
asincronas (SCI) y perifrico de comunicaciones sncronas (SPI). Un Temporizador de 16
bits con 3 lneas de Input-Capture, y 5 lneas de Output-Compare, adems de una
funcin de interrupcin en tiempo real. Tambin se incluye un subsistema acumuladorpulso de 8 bits que puede contar eventos externos o medir periodos.
Contiene adems un sistema de monitoreo para proteccin contra errores en el
MCU (microcontrolador). Este sistema esta formado primero por un circuito viga COP
(Computer Operating Properly o WATCHDOG) que protege contra fallas de software.
Segundo un circuito monitor de reloj que genera un RESET si el reloj falla o su frecuencia
es muy baja. Por ltimo existe un circuito de deteccin de cdigo ilegal que genera una
interrupcin no enmascarable si se trata de ejecutar un cdigo ilegal.
El 68HC11 incluye el modo WAIT y el modo STOP que permite disminuir el
consumo de energa bajo control de software. Estos modos permiten en especial
aplicaciones en la industria automotriz y en equipos porttiles alimentados por bateras.
En la figura 3.1 se muestra el diagrama bloques del MC68HC711E20. Como
puede apreciarse los subsistemas de entrada y salida estn relacionados con ciertos puertos
o terminales de salida. Tal es el caso del sistema TIMER y el puerto A. Si se usa el
temporizador el puerto A no estar disponible de la misma manera que si se usan las
interfaces seriales el puerto D quedara ocupado.

En el modo de operacin llamado Simple (Single-CHip) el puerto B es


exclusivamente salida mientras que el puerto C puede programarse como entrada o salida
segn se requiera. Existe un modo de operacin llamado Expandido en el que el puerto B
se convierte en lneas de direccin y el puerto C en lneas de datos para decodificar
externamente y poder agregar memoria o puertos al microcontrolador.

Indice

CAPITULO 3.- EL MICROCONTROLADOR 68HC11

XTAL EXTAL

OSC
MODE CONTROL

XIRQ RESET

ITERRUPT
LOGIC

PROM
20 KBYTES
12 KBYTES
PROM

EEPROM 512 BYTES

MC68HC11 CPU

RAM768
512 BYTES
RAM
BYTES
ADDRES/DATA

STROBE AND HANDSHAKE


PARALLEL I/O

SERIAL
PERIPHERICAL
INTERFACE
SPI

SERIAL
COMUNICATION
INTERFACE
SCI

VDD
VSS

VRH
VRL

TxD
RxD

BUS EXPANSION
ADDRES

R/W
AS

PERIODIC INTERRUPT

SISTEMA
TIMER

OC2
OC3
OC4
OC5/IC4/OC1
IC1
IC2
IC3

ACUMULADOR PULSOS
PAI

COP

CLOCK LOGIC

IRQ

STRB
STRA

MODA MODB
(OR) (VSTBY)

A/D CONVERTER

PE7
PE6
PE5
PE4
PE3
PE2
PE1
PE0

PORT E

PD1
PD0

PORT D

PD5
PD4
PD3
PD2

PORT C

STRB/R/W
STRA/AS

CONTROL

AD7/PC7
AD6/PC6
AD5/PC5
AD4/PC4
AD3/PC3
AD2/PC2
AD1/PC1
AD0/PC0

PORT B

A15/PB7
A14/PB6
A13/PB5
A12/PB4
A11/PB3
A10/PB2
A9/PB1
A8/PB0

PA6
PA5
PA4
PA3
PA2
PA1
PA0

PA7

PORT A

CONTROL

Figura 3.1 DIAGRAMA A BLOQUES DEL MC68HC711E20


Todos los registros asociados a los perifricos contenidos en el 68HC11 son
tratados como localidades de memoria. Es decir, los dispositivos Entrada/Salida estn en el
Mapa de memoria de 64 K y se accesan con cualquier instruccin que opere en memoria.
Esto permite una mayor eficiencia del conjunto de instrucciones al no necesitar
instrucciones especficas para los puertos.

3.2.- MODOS DE OPERACIN


El Microcontrolador MC68HC11 puede funcionar de 4 formas distintas o modos
de operacin que son:
SIMPLE. El que se usa normalmente.
EXPANDIDO. Se convierte en arquitectura estndar de P.
INICIALIZACION (bootstrap). Para cargar programa inicial.
PRUEBA ESPECIAL. Usado por el fabricante para probarlo.
El valor lgico de las terminales MODB y MODA (2 y 3) durante el RESET
determinan el modo de operacin (ver tabla 4.1). Una vez que el 68HC11 entra en
operacin las terminales MODB y MODA no tienen ningn efecto sobre el modo de
operacin y se pueden utilizar para otras funciones.
16

MINED 11

Indice

CAPITULO 3.- EL MICROCONTROLADOR 68HC11

MODO SIMPLE. En el modo simple todas las terminales del MCU


estn disponibles como puertos sin disponibilidad de lneas de datos y
direcciones para memoria externa. Este es el modo que justifica la existencia
de los microcontroladores y es el que se usa por excelencia.
MODB

MODA

1
1
0
0

0
1
0
1

MODO DE OPERACION
SIMPLE (SINGLE - CHIP)
EXPANDIDO
BOOTSTRAP
PRUEBA ESPECIAL

TABLA 3.1 MODOS DE OPERACION DEL MC68HC11

MODO EXPANDIDO. El modo expandido convierte algunos puertos en lneas de


datos y direcciones para decodificar externamente y poder agregar memoria y perifricos
externos. Como se puede, apreciar en la figura 3.2 el puerto B entrega lneas de direccin
de la A8 a la A15. El puerto C en cambio trabaja bajo el principio de multiplexaje. Primero
aparece la informacin de direcciones de la A0 a la A7 junto con una seal de AS (address
strobe) y despus las lneas de datos (D0 a D7). Sumando adems una lnea para R/W se
necesitan solo 18 lneas para entregar el BUS completo de 8 bits de datos, 16 bits de
direcciones y dos lneas de control. Las seales de direcciones R/W y AS son activas y
validas para todos los ciclos incluyendo el acceso a localidades de memoria interna.

PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0

A15
A14
A13
A12
A11
A10
A9
A8

PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0

D1
D2
D3
D4
D5
D6
D7
D8

Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8

RS

LE

OE

R/W

A7
A6
A5
A4
A3
A2
A1
A0

WE

MC68HC711E20

D7
D6
D5
D4
D3
D2
D1
D0

FIGURA 3.3 IMPLEMENTACION DEL MODO EXPANDIDO


MINED 11

Indice 17

CAPITULO 3.- EL MICROCONTROLADOR 68HC11

MODO ESPECIAL DE PRUEBA. El modo especial de prueba es


usado primeramente durante las pruebas internas de produccin de Motorola,
no obstante, puede ser usado en algunos casos especiales como para
programar el registro CONFIG, o para emulacin. Este modo elimina varias
protecciones automticas existentes en los modos normales razn por la que existe un
cierto riesgo en el uso de los modos especiales.
Quiz la aplicacin ms prctica sea iniciar de RESET en MODO ESPECIAL DE
PRUEBA para verificar el contenido del registro CONFIG y modificarlo en su caso para
luego cambiar a un modo normal de operacin (CONFIG habilita la EEPROM, el ROM y
el COP).
MODO BOOTSTRAP. Cuando el MCU esta en modo especial bootstrap, se
habilita una pequea cantidad de ROM en las direcciones $BF40 - $BFFF. La ROM
contiene un programa autocargador y vectores especiales de interrupcin y reset. El MCU
busca el vector reset y ejecuta la auto carga. Para usar el programa autocargador, se debe
enviar un $FF al receptor SCI (puerto serial asincrono) a 1200 bauds para E=2MHz.
Entonces se pueden bajar hasta 768 bytes de programa, que son grabados al inicio de la
RAM en la localidad $0000. Estos caracteres hacen eco a travs de la salida serial. Cuando
la carga se termina, el programa brinca a la localidad $0000 y empieza a ejecutar el
cdigo.

3.3 MEMORIA EN EL 68HC11


El MC68HC11 incluye memoria RAM, ROM y EEPROM en el mismo circuito.
La memoria RAM es una memoria esttica de lectura-escritura usada para almacenamiento
de variables e informacin temporal. El MC68HC711E20 tiene 768 bytes de RAM. Otros
miembros de la familia MC68HC11 tienen otra cantidad de bytes de memoria RAM como
el MC68HC711E9 con 512 Bytes (000-1FF).
Tiene adems 20 Kbytes de OTPROM (One Time Programmable ROM) de
usuario. Este PROM es usado para almacenar programas de aplicacin y datos fijos.
Algunos miembros de la familia MC68HC11 tienen esta PROM deshabilitada, y el
programa de usuario deber residir en memorias externas en modo expandido. Por otro
lado miembros como el MC68HC711E9 cuentan con 12 Kbytes.
La ltima memoria en el MC68HC11 es la EEPROM. El MC68HC11E20 incluye
512 bytes de EEPROM. Los datos pueden programarse y borrarse bajo un programa de
control. No se necesita una fuente mayor de los 5V de alimentacin para programar o
borrar la EEPROM.
Esta memoria es comnmente usada para informacin
semipermanente tal como: tablas de calibracin, datos personales o historia de un producto.
La EEPROM puede tambin ser usada como memoria de programa, la naturaleza no
voltil de esta EEPROM soporta programas que pueden ser fcilmente cambiados como en
el caso del desarrollo de aplicaciones.
ROM. El uso primario de la ROM es mantener las instrucciones del programa de
aplicacin del usuario. Desde que se programan estas instrucciones en la unidad
microcontroladora en el momento de su fabricacin (versiones HC11), ya no pueden
18

MINED 11

Indice

CAPITULO 3.- EL MICROCONTROLADOR 68HC11

cambiarse. Un usuario desarrolla el programa de aplicacin y lo depura antes


de ordenar la produccin de MCUs. El usuario pone una orden para
produccin de unidades con el patrn de instrucciones y datos para ser
programados en el ROM del chip. Motorola entonces traslada este patrn a
la mscara fotogrfica para ser usada durante el proceso de obleas de silicio. Motorola
produce entonces un pequeo lote de estas partes y lo regresa al cliente para verificacin
(RVUs).
Afortunadamente el MC68HC711E20 es una versin (HC711) que cuenta con un
EPROM de 20 Kbytes que puede ser programable por el usuario. Esta versin puede
encontrarse en dos encapsulados: en plstico (PLCC) que resulta econmico pero que no
permite el borrado de la memoria por lo que se puede programar una sola vez; y en
cermica (CERQUAD) con una ventana permeable a los rayos ultravioleta con los que se
puede borrar el EPROM. Para programar esta memoria se necesita un circuito especial que
incluye un fuente de 12.25 V.
El programa en ROM puede ser deshabilitado por un bit de control en el registro de
configuracin (CONFIG.). Cuando el programa de la ROM se deshabilita, el espacio que
usa en los 64 Kbyte queda disponible para memoria externa.
El MC68HC711E20 actualmente tiene 3 memorias ROM separadas, los 12 Kbyte
de ROM de usuario, que estn disponibles para programas definidos por el usuario en las
direcciones $D000 a $FFFF, 8 Kbytes de ROM de usuario en las direcciones $9000 a
$AFFF y 192 bytes de ROM separados, del programa ROM autocargador
(BOOTSTRAP). En los modos normales de operacin el ROM autocargador esta
deshabilitado y no usa espacio en los 64 Kbytes del MCU. En el modo especial el ROM
autocargador se habilita en las direcciones $BF40-$BFFF (ver figura 3.4). El vector reset
se localiza entonces en $BFFE-$BFFF.

MAPA DE MEMORIA MC68HC(7)11E20


$0000
EXT

EXT

$1000

0000 768 BYTE RAM


02FF (SEE TABLE)
1000 64 BYTE BLOQUE DE REGISTROS

EXT

EXT

$9000

103F
9000 8 KBYTE OTPROM

EXT

EXT

$B600

AFFF
B600 512 BYTE EEPROM
B7FF

EXT

EXT

B000 BOOT ROM


BFFF

$D000

$FFFF

BFCO

VECTORES EN
BFFF MODO ESPECIAL

D000 12KBYTES ROM OR EPROM*

FFFF

FFCO VECTORES DE
INTERRUPCION
FFFF

SIMPLE

BOOTSTRAP
TEST
EXPANDED

MINED 11

Indice 19

CAPITULO 3.- EL MICROCONTROLADOR 68HC11

RAM. Por definicin, la RAM esta localizada en las primeras 512


localidades (0000-02FF) de los 64 Kbytes del mapa de memoria. En algunos
casos, esta localizacin es buena para la RAM. Las primeras 256 localidades
son accesibles usando el modo de direccionamiento directo, el cual asume el
byte mas significativo de las direcciones como $00. Desde el modo de direccionamiento
directo se pueden direccionar estas localidades con un solo byte en lugar de dos, cada
instruccin ocupa un solo byte de memoria y menos tiempo de ejecucin. Dependiendo de
la aplicacin, la mxima eficiencia puede ser teniendo RAM, registros I/O o ambos en este
espacio de memoria. La posicin de RAM en los 64K es controlada por el registro INIT
(direc. $103D). Los 4 bits mas significativos de INIT (RAM3-RAM0) especifican los 4
bits de direcciones de RAM. En el reset, los bits RAM3-RAM0 se ponen a cero por lo que
la RAM se localiza inicialmente en $0000-$02FF. Si se escribe algn otro valor en el
registro INIT, la RAM puede ser localizada al inicio de alguna pagina de 4k dentro de los
64 Kbytes totales. En modo de operacin normal, el registro INIT esta protegido por lo que
este puede ser cambiando solo dentro de los primeros 64 ciclos de reloj despus del reset.
RAM EN ESPERA (STANDBY). El MC68HC11 puede funcionar en
aplicaciones con alimentacin de batera. Para este caso el HC11 ofrece un consumo de
corriente bajo y modos de operacin de STANDBY. El MCU puede mantener su
informacin durante una interrupcin de energa detectando la perdida de la energa
primaria y cambiando al modo de espera de bajo poder (STOP). Cuando el MCU esta
parado, todos los registros del CPU, control y registros I/O, y todo el contenido de la RAM
permanecen sin cambio hasta que VDD se normalice. La corriente de consumo (IDD) por
el MCU se reduce a unos cuantos microamperes cuando el reloj del MCU se detiene. En
algunos sistemas, pudiera haber otros circuitos alimentados con VDD que no pueden
ponerse fcilmente en un modo de espera de bajo poder. En estos sistemas se puede
desconectar VDD para reducir el consumo del sistema.
Para mantener el contenido de la RAM durante interrupciones muy largas de la
energa principal, se puede conectar una batera a la terminal MODB/VSTBY. La RAM de
la familia MC68HC11 es completamente esttica. La terminal MODB/VSTBY tiene un
interruptor interno que conecta la batera a la RAM solo en caso de falla de alimentacin.
EEPROM. El MC68HC11A8 fue el primer MCU en incluir EEPROM CMOS. La
versin E20 cuenta con 512 bytes de memoria EEPROM que puede ser usada en la misma
manera que la ROM, pero algunas interesantes posibilidades aparecen que no son posibles
con las memorias ROM o RAM. Un ejemplo simple es almacenar un numero de serie
nico en la EEPROM de cada producto terminado. Una vez que la informacin se
programa en la EEPROM, permanece sin cambio aun sin la alimentacin de VDD. A
diferencia de la informacin en la ROM la informacin en la EEPROM puede ser borrada o
reprogramada bajo un programa de control. Puesto que las operaciones de programacin y
borrado de la EEPROM usan un elevador de voltaje dentro del chip a partir de VDD, no se
necesita una fuente de poder especial. Esta memoria se encuentra en las direcciones $B600
a la $B7FF.

20

MINED 11

Indice

CAPITULO IV
PROGRAMACION DEL 68HC11
1.1.- MODELO DE PROGRAMACION
La Unidad Central de Proceso (CPU) del 68HC11
contiene las instrucciones del 6800 y el 6801 con la adicin
de 91 instrucciones mas. Especficamente las caractersticas
de este CPU son:

Dos acumuladores de 8 bits (A y B).


Un acumulador de 16 bits (D).
Dos registros ndice de 16 bits (X y Y).
Un apuntador Stack de 16 bits (S)
Conjunto de instrucciones eficiente con 316 instrucciones.
Aritmtica de 8 y 16 bits.
Multiplicacin de 8 bits.
Divisin entera y fraccional de 16 bits.
Instrucciones de manipulacin y prueba de bits poderosas.
Transferencia e intercambio de registros.

Como el numero de instrucciones es mayor de 256 los cdigos de operacin podrn


ser de uno o dos bytes. En este caso algunas instrucciones son precedidos por un cdigo de
pagina para formar el cdigo de 2 bytes.
En la figura 4.1 se muestra el modelo de programacin del CPU del 68HC11.
Estos registros son parte integral del CPU manejados solo por las instrucciones que los
involucran.
Ntese que el acumulador D es de 16 bits y esta formado por la unin de los
acumuladores A y B que son de 8 bits. Estos tres acumuladores estn ligados con la
ejecucin de operaciones lgicas y aritmticas. El acumulador D representa una gran
ventaja al poder realizar directamente operaciones de 16 bits tales como: Carga,
Almacenamiento, intercambio, corrimiento, suma, resta y comparacin.
Los registros X y Y son de 16 bits y se usan en el modo de direccionamiento
indexado. La informacin contenida en estos registros es normalmente una direccin con la
que podemos localizar un dato directamente o modificado por un offset de 8 bits para
localizar datos en tablas o arreglos de datos. Los registros ndice tambin pueden usarse
como contadores o como registros temporales.
En cualquier caso es preferible el uso del registro X debido a que las
instrucciones con el ndice Y son de cdigo de operacin doble (2 bytes) en tanto que
para X son de solo de un byte.

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

.
7
15

ACUMULADOR A 0 7
ACUMULADOR B
ACUMULADOR DOBLE D

0
0

15

REGISRO INDICE X

15

REGISRO INDICE Y

15

APUNTADOR STACK S

15

CONTADOR DE PROGRAMA PC

CODIGO DE CONDICION

7
S X

N Z

0
V C

DESHABILITAR INST STOP


MASCARA INTERRUPCION EXT.
MEDIO ACARREO (BIT 3 AL 4)
MASCARA INTERRUPCION INTERNA
SIGNO NEGATIVO (BIT MAS SIGNIFIC)
RESULTADO DE OPERACION EN CERO
SOBREFLUJO ARITMET. (OP CON SIGNO)
ACARREO O PRESTAMO
(SIN SIGNO)

FIGURA 4.1 MODELO DE PROGRAMACIN DEL 68HC11

El registro S es usado por el CPU para formar el llamado Stack de Maquina


imprescindible para las subrutinas e interrupciones. Este registro se inicializa normalmente
con la direccin mas alta de RAM en las primeras instrucciones de un programa de
aplicacin. Puede apuntar a cualquier rea de memoria con la condicin de que sea
memoria RAM valida no usada para otra aplicacin. Cada vez que se graba un dato en el
Stack S se decrementa de tal manera que se forma una estructura de datos que crece de
una memoria alta a una mas baja (Pila). En cualquier instante S apunta a la siguiente
localidad libre de la Pila.
El Contador de Programa contiene la direccin de la siguiente instruccin a
ejecutar. En la secuencia de RESET el contador de Programa se inicializa con uno de seis
posibles puntos de entrada dependiendo del modo de operacin y la causa del RESET:
MODO
NORMAL
BOOT O TEST

RST EXTERNO
$FFFE : $FFFF
$BFFE : $BFFF

RST RELOJ
$FFFC : $FFFD
$BFFC : $BFFC

RESET COP
$FFFA : $FFFB
$BFFA : $BFFB

El ltimo registro mostrado en la figura 3.2 es el cdigo de condicin. Este registro


de 8 bits contiene cinco bits aritmticos (C, V, Z, N y H), dos bit de interrupciones (IRQ y
XIRQ) y un bit deshabilitador de STOP. La mayora de las instrucciones afectan a estos
bits conforme se van ejecutando por lo que se debe tener presente sus definiciones que se
dan a continuacin.

Bit 0 (C). Indica un acarreo o prstamo durante una operacin aritmtica de


nmeros sin signo. Tambin se usa como bit de error en las operaciones de multiplicacin y
22

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

divisin. Las instrucciones de rotacin y cambio trabajan a travs del carry


para facilitar el manejo de bits.
Bit 1 (V). Se pone a 1 como consecuencia de una operacin que
cause un sobreflujo aritmtico de complemento a dos. El bit B es para operaciones de
nmeros con signo, lo que C es para nmeros sin signo.
Bit 2 (Z). Se pone a 1 si el resultado de la operacin previa es igual a cero.
Bit 3 (N). Este bit se pone a 1 cuando como resultado de alguna operacin
lgica, aritmtica o de manipulacin de datos el bit mas significativo resulta en 1. En este
caso se dice que el signo del resultado es negativo (si es que se trata de operaciones con
signo).
Bit 4 (I). Acta como enmascarador (deshabilitador) global de todas las
interrupciones enmascarables (del sistema de puertos). Mientras este bit este en 1 el
CPU no aceptara interrupciones dejndolas pendientes hasta que I sea igual a cero. El
RESET pone este bit en uno y solo se pone a cero por medio de instrucciones. Una vez que
se habilita (I=0) y se reconoce alguna interrupcin se pone nuevamente a 1 despus de
guardar el estado de maquina en el stack pero antes de buscar la direccin de entrada de la
interrupcin. Al terminar el servicio de interrupcin se ejecuta normalmente un retorno de
Interrupcin (RTI) que regresa el valor de todos los registros en el momento de la
interrupcin, incluyendo el bit I (=0).
Bit 5 (H). Este bit indica el acarreo del bit 3 al 4 en las operaciones de suma de 8
bits (ADD, ABA y ADC). Esta informacin se usa en la ejecucin de la instruccin DAA
(ajuste BCD).
Bit 6 (X). El bit X deshabilita las interrupciones de la terminal XIRQ. Este bit se
pone a 1 por accin de RESET y puede ponerse a 0 por accin de una instruccin.
Cuando se reconoce una interrupcin XIRQ se guardan los registros en el stack ponindose
luego los bits I y X a 1 para despus buscar la direccin de entrada de la
interrupcin. Una vez terminado el servicio de interrupcin se ejecuta la instruccin RTI
que restaura los valores de todos los registros incluyendo a I y X. El bit X puede ser
puesto a uno por hardware (RESET o XIRQ) y solo podr ponerse a cero por accin de un
TAP (transferencia de A al CC) o de un RTI en los que el bit correspondiente a X
tenga ceros.
Bit 7 (S). Este bit sirve para prevenir la ejecucin de la instruccin de STOP que
pone al MC68HC11 en una condicin de PARO y bajo consumo de potencia. Si estando el
bit S=1 el CPU encuentra la instruccin de STOP, esta se ejecuta como instruccin de No
OPeracin (NOP) continuando el proceso a la siguiente instruccin. El reset pone a 1 el
bit S.

MINED 11

Indice 23

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.2.- MODOS DE DIRECCIONAMIENTO


Una de las caractersticas principales de un CPU es su habilidad
para accesar la memoria. Esta habilidad es dada por los MODOS DE
DIRECCIONAMIENTO. En el estudio de los modos de direccionamiento se utiliza el
termino DIRECCION EFECTIVA (EA del ingles Effective Address), nombre que se le da
a la direccin ltima de la que se obtiene el operando o a la que se enva la informacin, es
decir, la direccin con la que se trabaja efectivamente. La direccin efectiva puede
especificarse en la propia instruccin o puede ser calculada.
En general una instruccin se puede dividir en dos partes: la primera le indica al
CPU que operacin se puede realizar y se le conoce como Cdigo de OPeracion; la
segunda le indica donde se encuentra el operando con el que se va a trabajar dependiendo
del modo de direccionamiento.
Existen por tanto dos grandes grupos de modos de direccionamiento: los que no
necesitan memoria; y los que involucran alguna memoria. Los modos de direccionamiento
bsicos del MC68HC11 son:
Que no involucran memoria:
1. INHERENTE
Los que involucran memoria:
1. INMEDIATO
2. DIRECTO
3. EXTENDIDO
4. INDEXADO
5. RELATIVO

MODO INHERENTE. Este modo no necesita especificacin de operandos ya que


toda la informacin necesaria para la ejecucin de la instruccin se encuentra en el
Mnemnico (o cdigo de operacin). Si necesita operandos estos van implcitos en el
cdigo de operacin y se encuentran dentro del CPU. Ejemplos de instrucciones en
direccionamiento inherente son:
ABA
ABX
DECB
MUL
NEGA
RTS
SWI

24

(sumar el acumulador B al acumulador A)


(sumar el acumulador B al registro ndice X)
(decrementar el acumulador B)
(multiplica A por B en el acumulador D)
(negar A o Multiplicarlo por -1)
(retornar de subrutina)
(interrupcin de software)

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

MODO INMEDIATO. En este modo se especifica un dato como


un numero constante. El dato se encuentra inmediatamente despus del
cdigo de operacin. Se puede ilustrar como sigue:

CODIGO

DIRECCION EFECTIVA

DATO

mmmm
mmmm + 1

En el lenguaje ensamblador estndar del 68HC11 el modo inmediato se especifica


precediendo al operando con el smbolo #. Las instrucciones pueden requerir operandos
inmediatos de 8 o 16 bits. Los operandos de 16 bits se especifican en 2 bytes donde el mas
significativo es el primero en orden de memoria (inverso al formato INTEL). por ejemplo:

CC
12
34
(# significa Inmediato y $ significa Hexadecimal). Esta instruccin puede ser de 2, 3 o
4 bytes: 2 para operaciones de 8 bits; 3 para operaciones de 16 bits y 4 para operaciones
con cdigo de operacin doble:
LDD

#$1234

(CODIGO)

MODO DIRECTO. En este modo el byte que sigue al cdigo de operacin indica
la direccin efectiva considerando el byte mas significativo de la direccin igual a 0. De
esta forma podemos accesar la primera pagina del mapa ($00 a $FF) con instrucciones de
solo 2 bytes. El tiempo de ejecucin de estas instrucciones se reduce al eliminar el acceso
requerido para el byte mas significativo de la direccin. En la mayora de aplicaciones esta
rea de 256 bytes esta ocupada por la memoria RAM. Sin embargo el MC68HC11 puede
ser configurado para combinar los registros internos (de la 00 a la $3F) y la RAM (de la
$40 a la $FF).

mmmm
mmmm + 1

CODIGO
DIR

DIRECCION EFECTIVA

00 : DIR

El acceso a memorias es el modo por default en el lenguaje ensamblador. Si la


localidad indicada en la instruccin es menor de 256 entonces el ensamblador escoge el
modo directo (caso contrario ensambla en modo extendido).

D6
12
Carga en B lo que hay en memoria 12H. Recurdese que el smbolo $ significa
Hexadecimal. Tambin puede usarse el smbolo < para indicar modo directo.
LDAB $12

MINED 11

(CODIGO)

Indice 25

CAPITULO 4.- PROGRAMACIN DEL 68HC11

MODO EXTENDIDO. La direccin efectiva se especifica en 2


bytes a continuacin del cdigo de operacin. Este modo entonces forma
instrucciones de 3 bytes (o 4 si tiene cdigo doble) que pueden accesar a
cualquier localidad del mapa de memoria (64 K.)
mmmm

CODIGO
DIRH
DIRL

mmmm + 1

DIRECCION EFECTIVA

DIRH : DIRL

En lenguaje ensamblador si el operando indicado es mayor de 1 byte o si tiene un


smbolo > entonces se interpreta como extendido. La siguiente instruccin almacena el
contenido de B en la localidad 1004H (puerto B).

STAB $1004

(CODIGO)

F7
10
04

MODO INDEXADO. En este modo la localizacin del operando se basa en el


contenido ya sea del registro ndice X o Y. Despus del cdigo de operacin se da un
offset de 8 bits sin signo. La direccin efectiva se forma entonces sumando este offset al
registro ndice X o Y. Este modo permite accesar localidades en cualquier parte del
mapa de memoria.
Con el modo indexado se pueden realizar accesos dinmicos a memoria con el uso
de la instruccin ABX que suma el contenido del acumulador B al ndice X (tambin
existe ABY). Adicionalmente se pueden lograr formas complejas de localizacin de
operandos con el uso de las instrucciones XGDX o XGDY y el poder de calculo del
acumulador D (16 bits).
Las instrucciones de manipulacin de bits (poner o limpiar bits y brincar si esta
algn bit en 0 o 1) existen solo en modo Directo e Indexado. Aqu el modo indexado es
muy importante ya que permite el uso de esta instruccin en cualquier parte de los 64 K de
memoria mientras que el modo directo trabaja solo en los primeros 256 bytes del mapa.
El formato para el lenguaje ensamblador del modo indexado es n,X o n,Y:

26

LDAA

,X

;DIRECCION EFECTIVA = X

LDD

5,Y

;DIRECCION EFECTIVA = Y + 5

.EQU

CONST,8

;DIRECTIVO DEFINE CONST = 8

ADDD

CONST,X

;DIRECCION EFECTIVA = X + 8

CLR

CONST*2,Y

;DIRECCION EFECTIVA = Y + (8*2)

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

MODO RELATIVO. El modo relativo es exclusivo de las


instrucciones de ramificacin o brinco (BRANCH). Si la condicin de la
instruccin de brinco se cumple entonces el numero que sigue al cdigo de
operacin se considera con signo y se suma al contador de programa lo que
modifica el orden de ejecucin. Si la condicin no se cumple, el CPU contina su secuencia
de ejecucin normal:

AQUI

...
BCC
...
LDAB

....
AQUI
....
....

; PROGRAMA
;TOMA DE DESICION C = 1 ?
; EN FALSO CONTINUA
; BRINCA AQUI EN CONDICION VERDADERA

Debido a que las instrucciones en este modo usan solo un byte de OFFSET
(numero modificador con signo) tienen la capacidad de brincar a +127 o -128 localidades
de un punto dado. Esto limita la capacidad de programacin ya que en algunas ocasiones
ser necesario hacer un brinco intermedio para llegar a una localidad mas all de +127 o 128. En tales casos se tiene que arreglar el programa de tal manera que se utilice la
instruccin JMP (Jump) en modo extendido.

MODOS COMPUESTOS. Existen algunas instrucciones que combinan algunos


de los modos anteriores. Por ejemplo la instruccin BRCLR (BRanch if bit CLeaR) realiza
una funcin AND entre dos operandos DIRECTO e INMEDIATO o INDEXADO e
INMEDIATO y si el resultado es cero realiza un brinco sumando un offset al contador de
programa. Esta instruccin se vera as:
BRCLR

BRCLR

MINED 11

DD,inm,etiqueta
dd
mm
rr

13
CDIGO
DIRECCIN 1er OPERANDO
2do. OPERANDO EN INMEDIATO
OFFSET PARA BRINCAR

ff,X,inm,etiqueta
ff
mm
rr

1E
CDIGO
OFFSET CON RESPECTO A X
2do. OPERANDO EN INMEDIATO
OFFSET PARA BRINCAR A ETIQ.

Indice 27

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3 CONJUNTO DE INSTRUCCIONES


La familia 68HC11 utiliza cdigos de operacin de 8 bits. Cada
cdigo identifica una instruccin en un modo de direccionamiento. En 8 bits
se pueden obtener hasta 256 posibles instrucciones. Como el 68HC11 tiene 316
instrucciones el conjunto de instrucciones esta implementado en 4 mapas de cdigos. Es
decir algunas instrucciones contienen un byte de cdigo adicional llamado PRE-BYTE.
Los codigos con pre-byte estn asociadas principalmente con instrucciones que
utilizan al registro ndice Y. Las instrucciones que no requieren pre-byte residen en la
pagina 1 del conjunto de instrucciones. Las instrucciones que requieren pre-byte residen en
las paginas 2, 3, y 4 del mapa del cdigo de operaciones. Los pre-bytes del mapa de
cdigo de operaciones son $18 para la pagina 2, $1A para la pagina 3,y $CD para la pagina
4. Un cdigo pre-byte se aplica nicamente al cdigo de operacin que le sigue. Esto es se
asume que todas las instrucciones son cdigos de operacin de 1 byte a menos que el
primer byte de la instruccin corresponda a uno de los tres cdigos pre-byte de la pagina 1
del cdigo de operaciones.
Una instruccin completa consiste entonces de un pre-byte (si existe) un Cdigo de
Operacin y cero, uno, dos o tres operandos. Los operandos contienen informacin
necesaria para que el CPU pueda ejecutar la instruccin. Las instrucciones en 68HC11
pueden ser entonces de uno a cinco bytes.
A continuacin se presenta el conjunto de instrucciones dividido en grupos
funcionales. Algunas instrucciones aparecern en mas de un grupo funcional por ejemplo,
transferir el acumulador A al Cdigo de Condicin (CCR) aparece en el grupo de
instrucciones del Cdigo de Condicion y en el subgrupo cargar/almacenar/transferir que
pertenece al grupo de instrucciones de acumuladores y memoria.
Al final de estas memorias se da el resumen del conjunto de instrucciones
disponible en el 68HC11. Consltese tambin el 68HC11 REFERENCE MANUAL en
donde se explica detalladamente su funcionamiento instruccin por instruccin.

28

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3.1 Instrucciones del acumulador y la memoria.


Algunas de estas instrucciones usan dos operandos, un operando es
un acumulador o un registro, a veces el segundo operando es obtenido de la
memoria usando los modos de direccionamiento discutidos antes. Esas instrucciones del
acumulador de memoria pueden dividirse en 6 grupos
1.- Carga, almacenamiento y transferencia.
2.- Operaciones aritmticas
3.- Multiplicar y dividir.
4.- Operaciones lgicas
5.- Prueba de datos y manipulacin de bits
6.- Cambios y rotaciones.

4.3.1.1.- Carga, almacenamiento y transferencias.


Todas las actividades del MCU implican transferencia de datos de memoria o
perifricos al CPU o transferencia de los resultados del CPU a la memoria o a los
dispositivos de entrada y salida. Las instrucciones de carga, almacenamiento y transferencia
se resumen en la siguiente tabla. Existen instrucciones adicionales de carga
almacenamiento y PUSH PULL asociadas con dos registros ndice y los apuntadores.

Funcin
Clear Accumulator A
Clear Accumulator B
Clear Memory Byte
Exchange D with X
Exchange D with Y
Load Accumulator A
Load Accumulator B
Load Double Accumulator D
Pull A from Stack
Pull B from Stack
Push A onto Stack
Push B onto Stack
Store Accumulator A
Store Accumulator B
Store Double Accumulator D
Transfer A to B
Transfer A to CCR
Transfer B to A
Transfer CCR to A

MINED 11

Mnemnico
CLRA
CLRB
CLR
XGDX
EGDY
LDAA
LDAB
LDD
PULA
PULB
PSHA
PSHB
STAA
STAB
STD
TAB
TAP
TBA
TPA

IMM

DIR

EXT

INDX

INDY

INH
X
X
X
X

X
X
X

X
X
X

X
X
X

X
X
X

X
X
X
X
X
X
X

X
X
X

X
X
X

X
X
X

X
X
X

X
X
X
X
X
X
X

Indice 29

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3.1.2.- Operaciones Aritmticas.


Se cuenta con instrucciones de 8 y 16 bits para una gran variedad de
operandos. Debido a que la unidad aritmtica interna soporta tanto 8 como 16
bits se conoce al CPU como Hbrido. Existe tambin una instruccin de ajuste decimal para
realizar sumas en BCD realizando primero una suma binaria y luego un ajuste a decimal.

Funcin
Add Accumulator B to X
Add Accumulator B to Y
Add Accumulators
Add memory to A
Add memory to B
Add memory to D (16bits)
Add with Carry to A
Add with Carry to B
Compare A to B
Compare A to Memory
Compare B to memory
Compare D to memory ( 16bit )
Decimal Adjust A ( for BCD )
Decrement Accumulator A
Decrement Accumulator B
Decrement Memory Byte
Increment Accumulator A
Increment Accumulator B
Increment Memory Byte
Subtract Memory from A
Subtract Memory from B
Subtract Memory from D (16Bit)
Subtract with Carry from A
Subtract with Carry from B
Test for Zero or Minus
Test for Zero or Minus A
Test for Zero or Minus B
Twos complement Accumulator A
Twos complement Accumulator B
Twos Complement Memory Byte

Mnemnico IMM
ABX
ABY
ABA
ADDA
X
ADDB
X
ADDD
X
ADCA
X
ADCB
X
CBA
CMPA
X
CMPB
X
CPD
X
DAA
DECA
DECB
DEC
INCA
INCB
INC
SUBA
X
SUBB
X
SUBD
X
SBCA
X
SBCB
X
TST
TSTA
TSTB
NEGA
NEGB
NEG

DIR

EXT

INDX

INDY

X
X
X
X
X

X
X
X
X
X

X
X
X
X
X

X
X
X
X
X

X
X
X

X
X
X

X
X
X

X
X
X

INH
X
X
X

X
X
X
X

X
X
X

X
X
X
X
X

X
X
X
X
X
X
X

X
X
X
X
X
X
X

X
X
X
X
X
X
X
X
X
X
X

4.3.1.3.- Multiplicacin Y Divisin.


Se cuenta con dos instrucciones de divisin y una de multiplicacin; la
multiplicacin de 8 bits por 8 bits produce un resultado de 16 bits. La divisin de enteros
(IDIV) puede dividir 16 bits entre 16 bits produciendo un resultado de 16 bits y un residuo
de 16 bits. La divisin fraccionaria (FDIV) divide un numerador de 16 bits por un
denominador mas grande de 16 bits produciendo un resultado de 16 bits (Una fraccin
binaria entre cero y 0.99998) y un residuo de 16 bits, esta puede usarse para resolver los
residuos de una divisin de enteros.

30

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

Funcin
Multiply ( A * B => D)
Fractional Divide (D / X => X; r => D)
Integer Divide ( D / X => X ; r => D)

Mnemnico
MUL
FDIV
IDIV

INH
X
X
X

4.3.1.4.- Operaciones logicas.


Este grupo de instrucciones contiene operaciones lgicas booleanas AND, OR, OR
exclusiva, y complemento a unos.
Funcin
AND A with Memory
AND B with Memory
Bit(s) Test A with Memory
Bit(s) Test B with Memory
Ones Complement Memory Byte
Ones Complement A
Ones Complement B
OR A with Memory (Exclusive)
OR B with Memory (Exclusive)
OR A with Memory (Inclusive)
OR B with Memory (Inclusive)

Mnemnico IMM
ANDA
X
ANDB
X
BITA
X
BITB
X
COM
COMA
COMB
EORA
X
EORB
X
ORAA
X
ORAB
X

DIR
X
X
X
X

EXT
X
X
X
X
X

INDX
X
X
X
X
X

INDY
X
X
X
X
X

INH

X
X
X
X
X
X

X
X
X
X

X
X
X
X

X
X
X
X

4.3.1.5.- Prueba De Datos Y Manipulacin De Bits


Este grupo de instrucciones se usa para manejar operandos tan pequeos como un
simple bit, pero estas instrucciones pueden operar con cualquier combinacin de bits dentro
de cualquier locacin de 8 bits en los 64kb de espacio en la memoria. El bit de prueba
(BITA o BITB) conforma una operacin AND dentro del CPU sin alterar los operandos.
Las instrucciones BSET y BCLR leen el operando, manipulan los bits seleccionados dentro
del operando y escriben el resultado de nuevo dentro de la direccin del operando. Se
requiere algo de cuidado cuando se utilizan instrucciones leer/modificar/escribir como las
anteriores cuando se usan en registros de control de entrada/salida porque la localidad
fsica que se lee no siempre es la misma que se escribe.

Funcin
Bit(s) Test A with Memory
Bit(s) Test B with Memory
Clear Bits(s) in Memory
Set Bit(s) in Memory
Branch if Bit(s) Clear
Branch if Bit(s) Set

MINED 11

Mnemnico IMM
BITA
X
BITB
X
BCLR
BSET
BRCLR
BRSET

DIR
X
X
X
X
X
X

EXT
X
X

INDX
X
X
X
X
X
X

INDY
X
X
X
X
X
X

Indice 31

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3.1.6.- Cambios y Rotaciones.


Todas las funciones de rotacin y cambio en el CPU del HC11
involucran el bit de acarreo en el CCR en adicin a los operandos de 8 a 16
bits de la instruccin lo que permite una fcil expansin a operaciones multipalabra. Por lo
tanto tomando en cuenta o borrando el bit de acarreo antes de una instruccin de cambio o
rotacin, el programador puede fcilmente controlar los cambios dentro de las ultimas
cifras del operando. La instruccin del cambio aritmtico (ASR) mantiene el valor original
de MSB del operando, lo que facilita el manejo de nmeros con signo.

Funcin
Arithmetic Shift Left Memory
Arithmetic Shift Left A
Arithmetic Shift Left B
Arithmetic Shift Left Double
Arithmetic Shift Right Memory
Arithmetic Shift Right A
Arithmetic Shift Right B
(Logical Shift Left Memory)
(Logical Shift Left A)
(Logical Shift Left B)
(Logical Shift Left Double)
Logical Shift Right Memory
Logical Shift Right A
Logical Shift Right B
Logical Shift Right D
Rotate Left Memory
Rotate Left A
Rotate Left B
Rotate Right Memory
Rotate Right A
Rotate Right B

Mnemnico IMM
ASL
ASLA
ASLB
ASLD
ASR
ASRA
ASRB
(LSL)
(LSLA)
(LSLB)
(LSLD)
LSR
LSRA
LSRB
LSRD
ROL
ROLA
ROLB
ROR
RORA
RORB

DIR

EXT
X

INDX
X

INDY
X

INH
X
X
X

X
X
X

X
X
X
X

X
X
X
X

X
X
X

X
X
X

4.3.2.- Almacenamiento e instrucciones del registro de ndice


El intercambio D con X (XGDX) y el intercambio D con Y (XGDY)
proporcionan una manera simple de transferir un valor apuntador de un registro ndice de
16 bits al acumulador D, el cual tiene mayor capacidad aritmtica de 16 bits que los
registros ndex de 16 bits. Dado que estos son intercambios bidireccionales el valor original
del acumulador D se guarda en el registro ndex mientras que el apuntador est siendo
manipulado en el acumulador D. Cuando los clculos del apuntador se completan, con
otro intercambio se actualiza el registro ndice y el acumulador D retorna a su valor
anterior.

32

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

Funcin
Add Accumulator B to X
Add Accumulator B to Y
Compare X to Memory (16bit)
Compare Y to Memory (16bit)
Decrement Stack Pointer
Decrement Index Register X
Decrement Index Register Y
Increment Stack Pointer
Increment Index Register X
Increment Index Register Y
Load Index Register X
Load Index Register Y
Load Stack Pointer
Pull X from Stack
Pull Y from Stack
Push X onto Stack
Push Y onto Stack
Store Index Register X
Store Index Register Y
Store Stack pointer
Transfer SP to X
Transfer SP to Y
Transfer X to SP
Transfer Y to SP
Exchange D with X
Exchange D with Y

Mnemnico
ABX
ABY
CPX
CPY
DES
DEX
DEY
INS
INX
INY
LDX
LDY
LDS
PULX
PULY
PSHX
PSHY
STX
STY
STS
TSX
TSY
TXS
TYS
XGDX
XGDY

IMM

X
X

DIR

EXT

INDX

INDY

X
X

X
X

X
X

X
X

INH
X
X

X
X
X
X
X
X
X
X
X

X
X
X

X
X
X

X
X
X

X
X
X
X
X
X
X

X
X
X

X
X
X

X
X
X

X
X
X

X
X
X
X
X
X
X
X
X

Las transferencias entre un registro ndex y el Stack pointer son especiales y se


utilizan cuando se emplea la tcnica modular de Almacenamiento Local. Cuando
transferimos el apuntador Stack a un registro ndex es para permitir acceso de
direccionamiento indexado a la informacin que fue anteriormente guardada en la pila. El
Stack pointer siempre apunta a la prxima localidad libre en la pila. Por esta razn el
apuntador Stack se incrementa en 1 cuando se transfiere al index y se decrementa en uno
cuando es al contrario.

MINED 11

Indice 33

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3.3.- Instrucciones de registro de cdigo de condicin


Estas instrucciones permiten a un programador manipular bits en el CCR.
Funcin
Clear carry Bit
Clear Interrupt Mask Bit
Clear Overflow Bit
Set Carry Bit
Set Interrupt Mask Bit
Set Overflow Bit
Transfer A to CCR
Transfer CCR to A

Mnemnico
CLC
CLI
CLV
SEC
SEI
SEV
TAP
TPA

INH
X
X
X
X
X
X
X
X

Inicialmente puede parecer que debera existir una instruccin set y una clear para
cada uno de los 8 bits en el CCR; sin embargo, solo existen para 3 de los 8 bits (C,I y V) .
Existen buenas razones para no incluir las instrucciones set y clear para los otros 5 bits. Por
ejemplo el bit stop disable (S) es un caso inusual porque este bit esta creado para dejar
fuera a la funcin STOP, para aquellos quienes lo ven como una funcin no deseable en su
aplicacin. Si existieran las instrucciones set y clear para este bit lo hara mas fcil de
habilitar cuando este no fuera requerido o deshabilitarlo cuando este sea requerido. La
instruccin TAP nos proporciona la manera de cambiar el bit (S) pero reduce la
oportunidad de un cambio no deseable a (S).
El half-carry (H) no necesita instrucciones SET o CLEAR porque este bit del
cdigo convencional de condicin se usa solamente en la instruccin DAA para ajustar el
resultado de una suma o resta BCD. Dado que el bit (H) no se usa como un TEST
condicin (condicin de prueba) para cualquier ramificacin no seria til ser capaz de fijar
o limpiar este bit.
Para los bits N y Z podemos utilizar ciertas instrucciones para manipularlos. Una
instruccin de borrar acumulador tal como el CLRB borra el (N) y poe a 1 a (Z). La
instruccin de carga, LDAA #$80, causa que (N) se fije y (Z) se borre. Dado que hay
tantas instrucciones simples que pueden fijar o borrar (N) y (Z), no es necesario tener
instrucciones set y clear (instrucciones para fijar y borrar) para (N) y (Z) en este grupo.

34

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.3.4.- Instrucciones de control de programa


Este grupo de instrucciones, se usan para controlar el flujo de un
programa mas que manipular datos, ha sido dividido en 5 sub-grupos.
1.- BRANCHES (Ramificaciones)
2.-JUMPS(Saltos)
3.-Llamadas a subrutinas y retorno
4.-Manejo de interrupciones
5.-Miscelaneos (varios).

4.34.1.- Branches
Estas instrucciones permiten al CPU hacer decisiones basadas en los contenidos de
los bits del cdigo de condicion. Todos los bloques de decisin en un diagrama de flujo
correspondern a una de las Instrucciones BRANCHES condicionales resumidas en la
tabla siguiente.
Funcin
Branch if Carry Clear
Branch if carry set
Branch if Equal Zero
Branch if Greater Than or Equal
Branch if Greater Than
Branch if Higher
Branch if Hgher or Same (same as BBC)
Branch if Less Than or Equal
Branch if Lower (same as BCS)
Branch if Lower or Same
Branch if Less Than
Branch if Minus
Branch if Not Equal
Branch if Plus
Branch if Bits(s) Clear in Memory Byte
Branch Never
Branch if Bit(s) Set in Memory Byte
Branch if Overflow Clear
Branch if Overflow Set

Mnemnico
BCC
BCS
BEQ
BGE
BGT
BHI
BHS
BLE
BLO
BLS
BLT
BMI
BNE
BPL
BRCLR
BRN
BRSET
BVC
BVS

REL
X

DIR
X

INDX
X

INDY
X

X
X
X

Comments
C=0?
C=1?
Z=1?
Signed >=
Signe >
Unsigned =
Unsigned >=
Signed <=
Unsigned <
Unsignedd <=
Signe <
N=1?
Z=0?
N=0?
Bit Manipualtor
3-cycle NOP
Bit Manipulation
V=0?
V=1?

El rango limitado de los BRANCHES es de (-128/+127) es mas que adecuado para


la mayora pero no todas las situaciones. En casos en donde este rango es demasiado corto
se usa una instruccin JUMP (de salto), para cada BRANCH hay un BRANCH para la
condicin opuesta.
De esta forma es ms simple reemplazar un BRANCH teniendo un destino fuera
de rango con una secuencia consistente del BRANCH opuesto alrededor a un JUMP al
destino fuera de rango por ejemplo.
Si un programa tuviera la siguiente instruccin:
BHI
MINED 11

TINBUK2 unsigned>

Indice 35

CAPITULO 4.- PROGRAMACIN DEL 68HC11

Donde TINBUK2 estuviera fuera del rango de locacin (+128/-127)


se sustituira por la siguiente instruccin:
BLS AROUND unsigned=>
JMP TINBUK2 still go to TINBUK2 IF>
around EQU

4.3.4.2.- Jumps.
La instruccin JUMP permite pasar el control de ejecucin a cualquier direccin en
el mapa de la memoria de 64kb.
Funcin
Jump

Mnemnico
JMP

DIR
X

EXT
X

INDX
X

INDY
X

INH

4.3.4.3.- Llamadas de subrutinas y retornos.


(BSR, JSR, RTS): Estas instrucciones proporcionan una forma fcil de dividir una
tarea de programacin en bloques manejables llamados subrutinas. El CPU automatiza el
proceso de recordar la direccin en el programa principal, donde los procesos deben
resumirse despus de que la subrutina termina. Esta direccin se guarda automticamente
en la pila cuando se llama a la subrutina y se restablece de la pila durante la instruccin
RTS que da fin a la subrutina.
Functions
Brach to Subroutine
Jump to Subroutine
Return from Subroutine

Mnemnico
BSR
JSR
RTS

REL
X

DIR

EXT

INDX

INDV

INH

4.3.4.4.- Manejo de interrupciones


(RTI, SWI, WAI) Este grupo de instrucciones se relaciona con las operaciones de
interrupcin.
Funcin
Return from Interrup
Software Interrupt
Wait for interrupt

Mnemnico
RTI
SWI
WAI

INH
X
X
X

La instruccin de interrupcin de software (SWI) es similar a la instruccin (JSR),


excepto el contenido de los registros de trabajo del CPU que se guardan en el Stack y ese
cede el control a una direccin fija de entrada. La instruccin SWI se usa normalmente para
llamar funciones en un sistema operativo.
Espera para interrupcin (WAI) tiene dos principales propsitos. El (WAI) es
ejecutado para poner el MCU en un estado de espera y reducir el consumo de potencia,
modo (WAIT), hasta que una interrupcin ocurre. El otro uso es para reducir el tiempo de
36

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

interrupcin.
La reduccin de tiempo se logra al adelantar el
tiemporequerido para guardar los registros del CPU en la pila. Cuando la
interrupcin finalmente ocurre, el CPU esta listo para traer el vector
apropiado de modo que la demora asociada con el registro de la pila se
elimina.

4.3.4.5

Miscelaneas (Varios)

(NOP, STOP, TEST) NOP puede ser usado para introducir un pequeo tiempo de
demora en el flujo de un programa, es usualmente til el reunir el requerimiento de tiempo
de los perifricos lentos. Al incorporar instrucciones NOP en los LOOPS se producen
retardos mas largos.

Functions
No Operation (2-cycle delay)
Stop Clocks
Test

Mnemnico
NOP
STOP
TEST

INH
X
X
X

Durante la depuracin es comn reemplazar varias instrucciones con NOP, para


quitar efectivamente una interrupcin no deseada sin tener que volver a arreglar el resto del
programa. Al usar la funcin de modificacin de memoria de un MONITOR, la instruccin
puede ser fcilmente quitada y restaurada para ver el efecto.
Ocasionalmente un programador se encuentra con el problema de sincronizar las
demoras a travs de varios caminos en su programa. En tales casos a veces es til utilizar
una instruccin BRANCH NEVER (BRN) como un tri-ciclo. Tambin es posible
sincronizar el tiempo de ejecucin al escoger variaciones alternas del modo de
direccionamiento, para cambiar el tiempo de ejecucin de una secuencia de instrucciones
sin cambiar las funciones del programa.
STOP.- Es una instruccin inusual porque causa que el oscilador y todos los relojes
del MCU se congelen, este estado de congelacin es llamado el modo stop, y el consumo
de potencia se reduce dramticamente en este modo. La operacin de esta instruccin
tambin es dependiente del bit codigo-condicional (S) porque el modo STOP no es
apropiado para todas las aplicaciones. Si (S)=1, la instruccin STOP es tratada como una
instruccin NOP y el procesamiento continua la prxima instruccin.
La instruccin TEST se usa solamente durante la prueba de fabrica y es tratada
como un cdigo de operacin ilegal en los modos de operacin normal del MCU. Esta
instruccin causa una conducta no usual en el BUS de direccin. (o sea cuenta hacia atras),
la cual previene su uso en cualquier sistema normal.

MINED 11

Indice 37

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.4 TECNICAS MODERNAS DE PROGRAMACIN


El CPU del 68HC11 posee caractersticas que permiten la
programacin con tcnicas modernas tales como: reentrancia, recursin y
modularidad. A continuacin se describen brevemente estos mtodos y su implementacin
en el 68HC11.

4.4.1 PROGRAMACION MODULAR


La programacin modular es un indicador de calidad. Un modulo es una parte de
un programa que puede ser fcilmente desconectado del resto del programa para ser usado
en otra aplicacin o para reemplazarlo por uno mejor. Un modulo es una subrutina que
maneja en forma especial la transferencia de parmetros, transparencia de registros, el
almacenamiento local y el global explicados a continuacin (una subrutina no
necesariamente es un modulo).
TRANSPARENCIA DE REGISTROS. Debido que los registros del
microprocesador son usados dentro del modulo (para operaciones o para almacenamiento
temporal) su uso se hace transparente guardando su contenido en el stack al entrar al
modulo (p.ej. PSHX). Despus que el cuerpo del modulo se ejecuta, se restablecen los
contenidos a los registros almacenados (p.ej. PULX). De esta forma quien hace uso del
modulo puede usar los registros sin temor a que se alteren en el modulo. Esto es el uso de
registros dentro de la subrutina es transparente.
ALMACENAMIENTO LOCAL. En los programas independientes de posicin y
en los modulares es necesario tener una tcnica especial para almacenamiento local. El
almacenamiento local (tambin llamado temporal) es usado para almacenar valores
necesarios solo durante la ejecucin del modulo (y los mdulos llamados por este) y se
elimina antes del retorno. El espacio para almacenamiento temporal debe hacerse en el
stack al inicio del modulo con la instruccin: DES (abrir un lugar en el stack) o PSH?
(meter los registros necesarios). De igual forma este espacio debe eliminarse antes de salir
con la instruccin INS (eliminar un lugar del stack) o PUL? (sacar los registros
necesarios. Cualquier byte en esta rea puede ser accesado por una instruccin que use una
forma indexada inicializando previamente algn ndice (X o Y) con el stack. Por ejemplo:
TSY
LDAA 3,Y

; Apuntar Y al rea de Stack


; Instruccin que trabaja con el cuarto
; Dato del stack. (,Y) (1,Y) (2,Y) (3,Y)

PARAMETROS. Los parmetros pueden ser dados o recibidos del modulo a


travs de los registros del microprocesador si son suficientes, o en su defecto a travs del
stack. A travs de los registros pueden transferirse bytes (en A o B) o palabras de 16 bytes
(en D, X o Y). En el uso de registros es conveniente tener un cierto orden en su asignacin
dependiendo si son datos o direcciones y de que tipo (por ejemplo direcciones siempre en
X, datos de 8 bits en B y de 16 en D). Si los parmetros son dados a travs del stack,
estos deben ser puestos en el mismo antes llamar al modulo (p.ej. PSHX). El modulo esta
escrito entonces para utilizar el stack como apuntador de almacenamiento temporal segn
se requiera (p.ej. ADDA desplazamiento, S). El desplazamiento necesario para trabajar con
los parmetros dentro del modulo, esta dado por la suma del numero de BYTES metidos al
38

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

stack en la entrada del modulo (aislante del modulo), mas dos BYTES de la
direccin de retorno (por la instruccin BSR o JSR) y mas el desplazamiento
de los parmetros al momento de llamar al modulo. Este valor puede ser
calculado a mano, dibujando un mapa del stack y determinando el
desplazamiento de las variables en el modulo.
Las respuestas del modulo reemplazan a los parmetros dados, ya sea en los
registros del microprocesador o en el stack. Si se van a regresar en el stack una mayor
cantidad de parmetros que los que se alimentaron, debe hacerse espacio para ellos en la
rutina llamadora antes de brincar al modulo, (p. ej. si se necesitan 4 BYTES extra para
respuestas se hace con PSHX , PSHX antes de llamar al modulo).

4.4.2 PROGRAMACION REENTRANTE


En sistemas que trabajan con interrupciones es posible que alguna interrupcin
utilice la subrutina que se estaba trabajando en el momento de la interrupcin. En este caso
si el almacenamiento local y global se utiliza de manera arbitraria entonces en la
interrupcin se alteraran estas memorias y al regresar de la interrupcin los resultados de
la primer rutina serian errneos. Por esto es necesario que el almacenamiento local se haga
en distinto lugar cada vez que se entre en el modulo. Esto se logra usando el stack para
transferir parmetros globales, resultados y para hacer el almacenamiento local.

4.4.3 PROGRAMACION RECURSIVA.


La misma tcnica que permite la programacin reentrante, permite tambin la
programacin recursiva. Una subrutina recursiva se define como aquella que se llama as
misma. Estas rutinas son diseadas para simplificar la solucin de ciertos tipos de
problemas que tienen una estructura de datos cuyos elementos pueden ser a su vez otra
estructura o problema por resolver. En estos casos los parmetros pueden ser transferidos a
travs del stack como en el caso de los programas reentrantes (un programa recursivo es
por fuerza un programa reentrante). Un ejemplo muy simple de este tipo de programa se da
en la solucin de un modulo de transmisin serie por medio del Adaptador Interface de
Comunicaciones Asin11 (SM11).

MINED 11

Indice 39

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.5 EL SISTEMA MONITOR


El sistema depurador o Sistema Monitor (SM) es un termino
utilizado para describir al sistema microcomputador mas pequeo. El SM
esta formado por un conjunto de pequeas rutinas cuyo propsito es actuar de
intermediario entre el hardware y el usuario del microcontrolador. Dichas rutinas permiten
al usuario mediante comandos bsicos, revisar y modificar informacin de memoria revisar
y modificar los registros del CPU, grabar y leer informacin de algn dispositivo de
almacenamiento externo y probar programas de aplicacin.
El sistema monitor es proyectado para servir a dos propsitos especficos:
1. Utilizarse como equipo didctico, indispensable en la enseanza de
tcnicas de programacin de microcontroladores.
2. utilizarse como sistema de desarrollo en el diseo de equipos y
sistemas de aplicacin especifica en base a microcontroladores.
Las funciones bsicas de todo monitor son:

EXAMINAR/CAMBIAR MEMORIA.- Nos permite revisar el contenido de


una memoria especifica y cambiar su valor si lo deseamos, contando adems,
con la posibilidad de examinar memoria subsecuentes o anteriores.

EXAMINAR/CAMBIAR REGISTROS.- Permite visualizar el contenido de


los registros del CPU y segn el caso grabarles la informacin deseada.

CORRER O EJECUTAR PROGRAMA.- Transfiere el control de programa


a la direccin deseada. Esto es, le especificamos en donde debe realizar el
primer ciclo de bsqueda.

Algunos sistemas depuradores (debuggers) cuentan con un numero mayor de


funciones especiales que permiten el desarrollo de programas en forma eficiente. Algunas
de estas funciones son:

CALCULO DE OFFSET.
PUNTOS DE PRUEBA O DE RUPTURA (BREAK POINT).
MOVIMIENTO DE BLOQUES DE MEMORIA.
VERIFICACION POR COMPARACION DE BLOQUES DE MEMORIA.
TRAZA (TRACE. Seguimiento del programa instruccin por instruccin.).

A continuacin se describen brevemente los comandos del SISTEMA MONITOR


11 (SM11).

40

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.6 EL SISTEMA MONITOR 11


El SM11 hace posible la prueba y depuracin de programas para el
Microcontrolador MC68HC11. Esta desarrollado con las tcnicas de
programacin que el 68HC11 hace posibles. Posee todas las funciones necesarias para
realizar una depuracin eficiente como se puede apreciar en el resumen mostrado en la
siguiente pgina.
El monitor es controlado por comandos de uno o dos caracteres seguidos o no por
una o mas expresiones. Las expresiones pueden ser <datos> o <direcciones>. En general
un dato deber ser dado por una pareja de nmeros hexadecimales, mientras que las
direcciones pueden ser dadas como una serie de uno a cuatro nmeros hexadecimales. Si se
excede de cuatro dgitos toma como verdaderos a los ltimos cuatro.
Tanto los comandos como las expresiones pueden ser separados por espacios o por
comas. En general la edicin de una lnea correcta esta libre del numero de espacios que se
desee incluir.
Cuando sea necesario especificar un rango de direccin en algn comando, se
puede hacer de dos formas: la primera es especificando la direccin de inicio y fin del
bloque (y cuando sea apropiado el destino); la segunda es especificar la direccin de inicio
y la extensin o longitud del bloque mediante el operador "L".
Por ejemplo el comando para desensamblar un bloque de memoria (de B600H a
B6FFH) puede realizarse de cualquiera de las siguientes formas:
>D B600 B6FF <RET>
>D B600
B6FF <RET>
>D B600,B6FF <RET>
>D B600, B6FF <RET>
>
D B600 , B6FF <RET>
>DB600 , B6FF <RET>
Cualquier error hecho durante la edicin de un comando puede ser corregido
borrando la lnea con la tecla ESC (escape) o corrigiendo el error con el uso del CTRL-H
(Back Space o <= ).
Si se da el retorno <RET> y el monitor detecta un error de sintaxis, no se acepta el
comando y aparece el mensaje "MAL COMANDO" o "PARAMETROS ILEGALES".
Reptase la lnea correctamente.
Existen otros tipos de errores que se dan en la operacin de cada comando y que
sern explicados cuando se describa el comando correspondiente.

MINED 11

Indice 41

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.6.1 RESUMEN DE COMANDOS


Comandos del SISTEMA MONITOR SM11, VERSION 2.0 con una
breve descripcin. Se explican en detalle en el capitulo 2.

NOMBRE
BAUDS
CORRER
DESENSAMBLAR
EXAMINAR
FUNCION
FUNC. BLOQUE
FECHA (DATE)
HORA (TIME)
LEER
MOV. MEMORIA
OPERACION
REGISTROS
PROGRMAR
SUSTITUIR

TRAZA
VERIFICAR

DESCRIPCION
Determina la velocidad de comunicacin.
Transfiere el control del programa a la direccin dada.
Acepta un punto de prueba (Break point).
Desensambla a partir de la direccin dada. Si se da la
direccin de fin muestra un bloque de memoria.
Examinar Bloque de 16 memorias.
Define funciones del usuario.
Ejecuta funciones del usuario.
Llena el bloque con el dato dado.
Muestra la fecha del Real Time Clock.
Muestra la hora del Real Time Clock.
Carga Bytes consecutivos a partir de dir. Usese luego F3 y
nom .ASC para bajar datos de archivo ASCII.
Copia un bloque de memoria.
Operaciones fundamentales en Hexadecimal
muestra el contenido de los registros del microcontrolador.
Permite programar la OTPROM del HC11 un bloque de
datos o de uno en uno.
Examinar o sustituir en Memoria.
Examinar o sustituir en Registro
r = A, B, CC, D, X, Y, S, PC
Ejecuta un programa instruccin por instruccin en la
direccin dada por el contador de programa.
Compara bloques de memoria y reporta discrepancias.

COMANDO
B Baud-Rate
C {Dir}{/P.prueba}
D {Dir}{Dir fin}
E {Dir}{Dir fin}
FX = {Dir Subrutina}
FX {param1}...
FB Inicio, Fin, Dato
KD {dd/mm/aa}
KT {Hora}{hh : mm}
L {Dir}
M Inicio, Fin, Destino
O Dato {+ - * /} Dato
R
P
Inic, fin, dest
PM dir-dest.
SM {Dir}
Sr
T {Cantidad Inst.}
V Inicio, Fin, Destino

4.6.2 AUTOEJECUCION
Una vez que se termina el desarrollo de una aplicacin es comn dejarla en
CONTROL del MPU11. Para que el programa se ejecute automticamente (sin necesidad
de correrlo desde el teclado) el SM11 examina la primer localidad de la EEPROM ($B600)
y si encuentra una instruccin JMP ($7E) brinca a esa localidad sin entrar al interprete de
comandos del Monitor. De esta forma cada que se presione el RESET, o se encienda el
sistema, automticamente se ejecutar la rutina grabada o indicada en EEPROM.
Si el programa de aplicacin tiene un final (como subrutina) entonces retorna al
SM11. Si no tuviera final y se desea entrar en el SM11 entonces oprima alguna tecla
(ENTER o ESPACIO) y djese presionada al mismo tiempo de dar un RESET. Este
procedimiento evita que se realice la autoejecucion.

42

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.7 RUTINAS DE SERVICIO DEL SM11


Las rutinas de servicio son aquellas que siendo parte del sistema
operativo del microcomputador, se pueden utilizar para propsitos
particulares. Estas rutinas facilitan el desarrollo de programas o sistemas enfocados al
propio microcomputador.
En general se incluyen aqu los servicios de comunicacin del microcomputador
con el exterior a travs de dispositivos como: display, vdeo, teclado, comunicaciones serie
paralelo para impresoras, etc. Junto a estas rutinas suelen encontrarse otras que realizan
procesos varios de utileria como son: conversiones ASCII-HEX y Hexadecimal-Decimal,
retardos, operaciones aritmticas, etc.
El monitor SM11 posee una forma sofisticada para hacer uso de sus rutinas de
servicio. Estas rutinas son llamadas por medio de la instruccin SWI (interrupcin de
software) seguida por un byte de cdigo de funcin. As, una llamada a una rutina de
servicio solo llevara dos bytes.
Todos los servicios estn desarrollados para permitir una completa independencia
de direccin (posicin) en su llamado. Por ejemplo para enviar el carcter contenido en
"B" al puerto serial bajo programa se hace de la siguiente manera:
SWI
.DB 0

;Interrupcin de software
;Clave de rutina de servicio.

Las rutinas de servicio que trabajan con parmetros ya sea de entrada o de salida lo
hacen a travs de los registros del CPU. Los registros que no se usen para transferencia de
parmetros son transparentes sobre el llamado de las rutinas "SWI". Esto significa que una
vez terminada la rutina de servicio todos los registros tendrn los mismos valores que antes
de llamar a la rutina, excepto aquellos registros en los que se encuentra alguna respuesta
del servicio. Por ejemplo para recibir informacin de la PC en un programa cclico se
realiza as:
SWI
DB

2AH

;Interrupcin de software
;Cdigo de rutina TECLIN (Input tecla)

Al retornar de esta rutina en "B" estar el cdigo ASCII del carcter enviado de la
PC (00 si no se recibi carcter). Si esta instruccin esta intercalada en un ciclo, entonces
se puede tomar la decisin de salir del ciclo cuando se presione la tecla esperada.

MINED 11

Indice 43

CAPITULO 4.- PROGRAMACIN DEL 68HC11

4.7.1 RESUMEN DE RUTINAS


A continuacin se da una lista de los servicios disponibles en el SM11
Versin 1.2 y en la siguiente seccin se explican en detalle cada uno de ellos. Despus en
la seccin 3.4 se explica como definir rutinas particulares para que sean llamadas como
rutinas de servicio.

CODIGO

NOMBRE

00

OUT

01
02
03
04

SWI1
BS
RETORNOC
ECHO

05

VIDEO

06
07
08
09
0A
0B

CLS
MSGE
ALFA
ERROR
DIV
RETARDO
TECLA

0C
0D
0E
0F
10

DISPB
REGB
IXDISP
ESPACIO
MXDISP

11

BLANK

12

DATO2

13

CHEX

14

DATO4

15

STATER

DESCRIPCION
Enva el carcter contenido en B al vdeo. Si es un retorno de carro ($0D) se
transmite adems un avece de lnea ($0A)
Entrada al SM11 despus de correr un programa de aplicacin
Enva un Back Space (08H) al vdeo usando, la rutina OUT.
Enva un retorno de carro <RET> a vdeo.
Espera la activacin de una tecla, la muestra en vdeo (ECO) y entrega su valor
ASCII en B
Enva un carcter contenido en B al vdeo (Puerto Serial) sin agregar LF al
CR.
Borra la pantalla de vdeo enviando un Form-Feed (0CH).
Manda al vdeo la serie de caracteres que inician en la direccin contenida en
Y y que termina con un ETX (03 Fin de Texto o CTRL-C).
Enva un CTRL-G (07) para emitir un tono audible.
Divisin: D = D / X y residuo en X.
Realiza un retardo de 1 mS por cada unidad contenida en el registro X.
Espera la activacin de una tecla para poner su valor ASCII en el acumulador
B sin eco.
Escribe el numero Hexadecimal escrito en B (0 a F).
Muestra en hexadecimal el contenido de B (00 a FF).
Muestra en Hexadecimal el contenido de X (0000 a FFFF).
Enva un espacio (20H) al vdeo.
Muestra en Hexadecimal el contenido de X y el contenido de la localidad de
memoria correspondiente.
Utilizando a Y como apuntador de una serie de caracteres ASCII, este se
posciciona en el primer carcter distinto de espacio o coma (se usa despus de la
rutina lnea).
Recoge una pareja de nmeros Hexadecimales de una lnea y los pone en B.
Para entrar, en B debe de estar en ASCII el primer dgito y Y debe de apuntar
al segundo.
Convierte el dato ASCII contenido en B a Hexadecimal en cuyo caso sale C=0.
Si el numero no es Hexadecimal sale C=1.
Recoge una serie de uno a cuatro nmeros Hexadecimales y los entrega en X.
Para entrar, en B debe de estar el primer dgito y Y debe de apuntar al
segundo.
Esta rutina maneja los mensajes de error del sistema. En "B"
debe darse el cdigo de mensaje de error, a saber:
1- ? MAL COMANDO
2- PARAM. ILEGALES
3- DATOS ILEGALES
4- MEMORIA INOPERANTE
5- SOBREFLUJO

16

44

DATOMEM

6 - DIV POR CERO


7 - MEM INSUFIC.
8 - FUNCION INDEF
9 - COMANDO INDEF.
10- FALTA PARAM.

11- CODIGO ILEGAL


12- ERROR E/S
13- FUERA DE RENGO
14- INT. DE USUARIO
15- ERROR DEL SIST.

El dato en B se almacena en la localidad apuntada por X. X se incrementa


1 y el carry contiene el bit de error. Si se graba bien el bit C retorna en ceros.
Si no C=1. Si la localidad es de EEPROM se graba correctamente en 10 mS.

MINED 11

Indice

CAPITULO 4.- PROGRAMACIN DEL 68HC11

CODIGO

NOMBRE

18

BLANKD4

19
1A

MUL16
AJUSTE

1B

ADJDIA

1C

ADJDATE

1D
1F

DECIDISP
DATE

20
21

DESPDISP
TIME

28
29
2A

DASCIID
HEXASC
TECLIN

2B
2C
2D

TAB
LINEA
USRSWI1

2E
2F
35
36
37
40

USRSWI2
USRSWI3
HEXBCD
BCDISP
BCDESP
CAPTUR

MINED 11

DESCRIPCION
Recoge una serie de uno a cuatro dgitos Hex. y los pone en X. Al entrar, Y
debe estar al inicio o antes de la serie de datos.
Multiplica "X" por "D" dando el resultado en "X:D"
Si existe RTC ajusta horas y minutos. Recibe en "A" las horas y en "B" mins
(BCD). Segundos y centesimas se ponen a ceros.
Ajusta da de la semana y del mes del RTC. En "A" se debe dar el da de la
semana (1=lunes) y en "B" el da del mes en BCD.
Ajusta el mes y el ao del RTC. Recibe en "A" la terminacin del ao (00-99) y
en "B" el mes en BCD.
Muestra en decimal el contenido de "D" en el mnimo espacio.
Entrega en "B:X" la hora del RTC. En "B" las horas en "X" min. y segundos y
en "A" el da de la semana (1=lunes) todo en BCD
Muestra "D" en decimal en una rea fija de 5 espacios.
Entrega en B:X la hora del RTC. En B la hora en X los min. Y segundos
y en A el da de la semana (1=lunes) todo en BCD.
Muestra los dos caracteres ASCII en D. 1ro. A y luego B.
Convierte el dgito menos significativo de B de Hex a ASCII
Pone en B la tecla activada en ese momento. Si no existe activacin de tecla
B regresa en ceros.
Avanza el cursor de vdeo al siguiente Tab.
Editor de lnea. Al salir Y apunta a la cadena editada.
Ejecuta la rutina de usuario cuya direccin este grabada en las localidades
$130:$131 del rea de RAM.
Ejecuta la rutina de usuario grabada en las localidades $132:$133
Ejecuta la rutina de usuario grabada en las localidades $134:$135
Convierte X de Hex a BCD y lo entrega en B:X
Muestra el contenido de B:X en el espacio mnimo (no ceros)
Muestra B:X sin ceros a la izquierda en 6 espacios fijos.
Se usa despus de Sbr lnea (Cdigo 2C) para analizar y cargar en registros los
parmetros dados en la edicin de la lnea.
-1er Parmetro en X.
-2do Parmetro en ( S ). (En Stak).
-3er Parmetro en Y.

Indice 45

CAPITULO V
5.1 PUERTOS DEL MC68HC11
5.1.1 ENTRADAS Y SALIDAS EN PARALELO
El MC68HC11 tiene un total de 40 puntos de
Entrada/Salida (E/S). Estas lneas pueden usarse como lneas
E/S digitales de propsito general o para al menos una
funcin perifrica especial. En los siguientes prrafos se
explicara el uso de estas lneas como E/S de propsito general.
El manejo de los puertos para propsito general se realiza a travs de las primeras
localidades del bloque de registros de puertos como se muestra en la figura 5.1. Los
registros se muestran en orden de direcciones por ser significativo en caso de accesos en 16
bits. Los bits indicados en "0" son bits no implementados que siempre leen ceros.
Como puede apreciarse las direcciones de manejo de los puertos son $1000 (PA),
$1004 (PB), $1003 (PC), $1008 (PD) y $100A (PE).
$1000

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

$1002

STAF

STAI

CWOM

HNDS

OIN

PLS

EGA

INVB

$1003

PC7

PC6

PC5

PC4

PC3

PC2

PC1

PC0

PORTC

$1004

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

PORTB

$1005

PCL7

PCL6

PCL5

PCL4

PCL3

PCL2

PCL1

PCL0

PORTCL

$1007

DDC7

DDC6

DDC5

DDC4

DDC3

DDC2

DDC1

DDC0

DDRC

$1008

PD5

PD4

PD3

PD2

PD1

PD0

PORTD

$1009

DDD5

DDD4

DDD3

DDD2

DDD1

DDD0

DDRD

$100A

PE7

PE6

PE5

PE4

PE3

PE2

PE1

PE0

PORTE

$1026

DDRA7

PAEN

PAMOD

PEDGE

DDRA3

I4/O5

RTR1

RTR0

PACTL

$1028

SPIE

SPE

DOWN

MSTR

CPOL

CPHA

SPR1

SPRO

SPCR

FIGURA 5.1 REGISTROS Y BITS DE CONTROL E/S

PORTA
PIOC

CAPITULO 5.- DESCRIPCION GENERAL

PUERTO A. Consta de 3 bits de entrada (PA0, PA1 y PA2) 3 bits


de salida (PA4, PA5 y PA6) y dos bits programables como entrada o salida
(PA3 y PA7). En la figura 5.2 se muestra la estructura del puerto A.
Acumulador
de pulsos

68HC11

PAI

7 6 5 4 3 2 1 0

Temporizador
programable

Puerto A
(1000)

OC1
OC2
OC3
OC4
IC4/OC5
IC1
IC2
IC3

PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0

Registro de control del


acumulador de pulsos PACTL = 1026H

DDRA3

0 - BIT PA3 es entrada


1 - BIT PA3 es salida

DDRA7

0 - BIT PA7 es entrada


1 - BIT PA7 es salida

FIGURA 5.2 ESTRUCTURA DEL PUERTO A


Como se muestra en la figura 5.2 el bit 3 y 7 el registro de ConTroL (10026H) del
acumulador de Pulsos sirven para programar de Entrada o Salida a PA3 y PA7
respectivamente. Estos bits se ponen a cero despus de RESET (PA3 y PA7 estn
programados como entradas por default). Si se pone un uno lgico en los bits de PACTL
los bits 3 y/o 7 de PA se convierten en salidas.
Normalmente los bits del puerto A se trabajan desde la direccin $1000. Si uno o
mas de estos bits se inicializan para trabajar con el Sistema de Temporizacin (a travs de
registros especiales) el escribir a la direccin $1000 no afectara a dichos bits.
PUERTO B. El puerto B es simplemente un puerto de salida en la direccin
$1004 (fig 6.3). Escribir en el puerto B afecta las lneas fsicas externas mientras que leerlo
nos da el ltimo valor escrito al mismo puerto. En modo de operacin expandido el puerto
B se pierde ya que se convierte en la parte alta de las lneas de direccin.
Si el bit 4 del registro de Control de Entrada-Salida Paralelo (PIOC $1002) esta en
cero (valor despus de RESET), entonces cada que se escriba un dato al puerto B se genera
un pulso de 2 ciclos de reloj (1 uS) por STRB. En el bit 0 de este mismo registro (PIOC
$1002) se programa si el pulso es positivo o negativo.

48

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

PUERTO B
(1004)

PB7
PB6
PB5
PB4
PB3

68HC11

PB2
PB1
PB0

STRB

7 6 5 4 3 2 1 0

Registro de control de
Entrada/Sallida PIOC = 1002H

STROBE

0 - Pulso activo en 0
1 - pulso activo en 1

HANDSHAKE

0 - MODO SIMPLE

FIGURA 5.3 ESTRUCTURA DEL PUERTO B.

PUERTO C. El puerto C es bidireccional quedando despus de RESET todas sus


lneas como entradas. En el registro DDRC ($1007) se programa bit a bit como Entradas o
Salidas. Escribiendo 1's en DDRC los bits correspondientes del Puerto C ($1003) sern
salidas.
En la figura 5.3.4 se puede apreciar la estructura del puerto C. El registro de
Control de Entrada/Salida Paralelo (PIOC), se utiliza para establecer una amplia variedad
de opciones de manejo del puerto C con lneas de protocolo de comunicacin paralelo
(STRA y STRB). El bit 4 del registro PIOC ($1002) determina si el protocolo es Simple
(0) o compuesto (1). El modo simple se muestra en la figura 5.3.3. Cada que se de un
pulso en STRA el puerto CL (PORTCL $1005) atrapa la informacin existente en las
lneas del puerto C. De aqu que el hecho de leer la direccin $1005 (PORTCL) es captar
la informacin que se atrapo en un instante dado por accin del STRA, mientras que leer el
PORTC ($1003) es ver la informacin que en ese instante existe en las lneas fsicas del
puerto C.
Cuando se recibe un pulso por STRA el bit 7 de PIOC se pone a "1". Este bit (STAF)
indica que se tiene una lectura atrapada en PORTCL. Por lo tanto en un proceso normal se
va luego a leer la informacin de PORTCL. Esta secuencia pone a cero STAF (leer PIOC y
MINED 11

49
Indice

CAPITULO 5.- DESCRIPCION GENERAL

luego PORTCL). Cuando el bit STAF se pone a "1" por accin del STRA se
puede provocar una interrupcin si el bit 6 de PIOC (STAI) esta en "1". Este
bit esta normalmente en "0" por accin del RESET.

68HC11

PORTCL
(1005)

PUERTO C
(1003)

LATCH
PUERTO
C

PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0

CLK

STRA

7 6 5 4 3 2 1 0

Registro de direccion de
datos del puerto C DDRC = 1007H
0 - BIT del puerto c es ENTRADA
1 - BIT del puerto c es SALIDA

7 6 5 4 3 2 1 0

Registro de control de
Entrada/Salida PIOC = 1002H
EDGE STROBE

0 - TRANSICION NEGATIVA
1 - TRANSICION POSITIVA

HNDS

0 - MODO SIMPLE

CWOM

0 - SALIDAS SON CMOS NORMALES


1 - SALIDAS EN DRENADOR ABIERTO

STAI

0 - INTERRRUPCION DESHABILITADA
1 - GENERA INTERRUPCIO SI STAF = 1

STAF

0 - STROBE FLAG. SE PONE A 1 EN


TRANSICION ACTIVA

FIGURA 5.4 ESTRUCTURA DEL PUERTO C

El bit 5 de PIOC (CWOM, portC Wire-Or Mode) trabaja sobre las lneas del
puerto C que se programen como salidas. RESET pone a cero este bit dejndolo en modo
CMOS (entrega ceros y unos). Si se programa a "1" a CWOM entonces las salidas de C
quedaran en drenador abierto (solo establece ceros).

50

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

5.2 PROTOCOLOS DE COMUNICACION


PARALELO
El PUERTO C puede usarse para establecer comunicacin paralelo con
dispositivos externos. El registro de Control de Entrada/Salida Paralelo (PIOC), puede
establecer una amplia variedad de opciones de protocolos paralelo (con STRA y STRB). El
bit 4 del registro PIOC ($1002) determina si el protocolo es Simple (0) o compuesto (1). El
modo compuesto puede ser de Entrada o Salida segn se inicialice el bit 3 de PIOC.

68HC11

PORTCL
(1005)

PUERTO C
(1003)

LATCH
PUERTO
C

PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0

CLK

STRA
STRB

7 6 5 4 3 2 1 0
1 1 1 1 1 1 1 1

7 6 5 4 3 2 1 0
0 1 1 1 0 0

Registro de direccion de
datos del puerto C DDRC = 1007H
Puestos a 1s para salidas
Registro de control de
Entrada/Salida PIOC = 1002H
INVERT STRB

0 - TRANSICION NEGATIVA

EDGE STRA
PLS
= 1OIN = 1 -

1 - TRANSICION POSITIVA
RESPUESTA DE STRB EN PULSO
MODO HANDSHAKE SALIDA

HNDS =

MODO COMPUESTO

0-

CWOM

0 - SALIDAS SON CMOS NORMALES


1 - SALIDAS EN DRENADOR ABIERTO

STAI

0 - INTERRRUPCION DESHABILITADA
1 - GENERA INTERRUPCIO SI STAF = 1

STAF

0 - STROBE FLAG. SE PONE A 1 EN


TRANSICION ACTIVA

FIGURA 5.5 PUERTO "C" CON PROTOCOLO DE SALIDA

La figura 5.3.5 muestra al Puerto C como un puerto de salida con protocolo de


comunicacin. En este caso cuando se escribe un dato al Puerto C se genera un pulso por
STRB (as programado en bit 2 de PIOC). Cuando el dispositivo externo recibe y procesa
esta informacin contesta haciendo llegar un pulso a STRA. En este caso este pulso no es
para atrapar informacin sino para requerir un nuevo dato. Esta transicin en STRA hace
que se ponga a "1" STAF (bit 7 de PIOC) y en su caso que se provoque una interrupcin
de acuerdo al estado del bit 6 de PIOC. El CPU debe entonces leer el registro PIOC para
darse cuenta que STAF esta puesto a "1" y debe entonces escribir un nuevo dato en
PORTCL ($1005) no PORTC ($1003). Esto provoca que nuevamente se genere un pulso
por STRB indicando al dispositivo externo la existencia de un nuevo dato.
MINED 11

51
Indice

CAPITULO 5.- DESCRIPCION GENERAL

Como puede verse el registro PORTCL ($1005) es para el manejo del puerto
C con protocolo de comunicacin. Cualquier escritura o lectura del registro PORTC
($1003) es para el manejo digital de las lneas del Puerto C y no tiene ninguna
influencia sobre las lneas de control STRA y STRB.
En la figura 6.6 se da otro ejemplo del Puerto C ahora en protocolo de entrada. Este ejemplo
esta ajustado como si fuera la recepcin de una impresora (protocolo centronics). En este caso se
inicializa STRA transicin negativa, STRB en nivel activo cero (no pulso como el ejemplo anterior).
La operacin inicia cuando de un dispositivo externo se entregan datos al puerto C y se da un
pulso (o transicin) a STRA. Esta seal provoca que STRB retroalimente con un nivel lgico "1"
indicando que esta en proceso de leer dicha informacin (BUSY). La transicin en STRA tambin
hace que PORTCL tenga disponible el dato recibido y que se "ponga" la bandera STAF. Si el bit STAI
lo autoriza, tambin se genera una interrupcin.
El CPU debe entonces leer el registro PIOC para darse cuenta que tiene datos validos
(STAF=1) y leer luego PORTCL para cargar el dato. Esta secuencia hace que se "limpie" STAF y que
STRB regrese a cero (nivel activo programado en bit 0 de PIOC) indicndole al dispositivo transmisor
que se esta disponible para recibir mas informacin. Adicionalmente si se tiene habilitada la
interrupcin (bit 6) desaparece el origen de la misma.

68HC11

PORTCL
(1005)

PUERTO C
(1003)

LATCH
PUERTO
C

PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0

CLK

STRA
STRB

7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0

7 6 5 4 3 2 1 0
0 1 1 1 0 0

Registro de direccion de
datos del puerto C DDRC = 1007H
Puestos a 0s para entradas
Registro de control de
Entrada/Salida PIOC = 1002H
INVERT STRB
EDGE STRA
PLS
= 0 -

0 - TRANSICION NEGATIVA
1 - TRANSICION POSITIVA
RESPUESTA DE STRB EN NIVEL

OIN =
HNDS =

MODO HANDSHAKE ENTRADA


MODO COMPUESTO

0 0 -

CWOM

0 - SALIDAS SON CMOS NORMALES


1 - SALIDAS EN DRENADOR ABIERTO

STAI

0 - INTERRRUPCION DESHABILITADA
1 - GENERA INTERRUPCIO SI STAF = 1

STAF

0 - STROBE FLAG. SE PONE A 1 EN


TRANSICION ACTIVA

FIGURA 5.6 PUERTO "C" CON PROTOCOLO DE ENTRADA

52

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

PUERTO D. El puerto D consta solo de 6 lneas bidireccionales que pueden


ser usadas para propsito general o para los puertos seriales. Como se muestra en la
figura 5.3.7 dos de estas lneas estan asociadas con la Interface de Comunicacin
Serial (SCI) que es la interface de comunicacin asincrona normalmente usada por
cualquier equipo de computo. Los otros cuatro bits estn asociados con el Interface
Perifrico Serial que es una forma de comunicacin serial sincrona.
En la figura 5.3.7 tambin se muestra el registro DDRD ($1009) en el que se programa el
sentido de trabajo de cada uno de los 6 bits del puerto "D".
Puerto D
(1008)

SPI

/SS
SCK
MOSI
MOSO

PD5
PD4
PD3
PD2

SCI

TXD
RXD

PD1
PD0

68HC11

7 6 5 4 3 2 1 0

Registro de direccion de
datos del puerto D DDRD = 1009H
0 - BIT DEL PUERTO D ES ENTRADA
1 - BIT DEL PUERTO D ES SALIDA

FIGURA 5.7 ESTRUCTURA DEL PUERTO D

PUERTO E. El puerto E se muestra en la siguiente figura. Este puerto es de solo entrada y


puede usarse en cualquier combinacin de entradas tanto analgicas como digitales de propsito
general. En la direccin $100A se leen los bits del puerto E como entradas digitales, an cuando se
estn aplicando como entradas analgicas.

68HC11

CONVERTIDOR
A/D

Puerto E
(100A)

AN7
AN6
AN5
AN4
AN3
AN2
AN1
AN0

PE7
PE6
PE5
PE4
PE3
PE2
PE1
PE0

FIGURA 5.8 ESTRUCTURA DEL PUERTO E

MINED 11

53
Indice

CAPITULO 5.- DESCRIPCION GENERAL

5.3 DESCRIPCION GENERAL DEL MPU11


El sistema MINED (Microcomputador Industrial y Educativo) es la
combinacin del HARDWARE constituido por el MPU11 (Microcontrolador
68HC11) y sus mdulos de Entrada-Salida, con el SOFTWARE denominado (SM11)
Sistema Monitor 11.
Para una aplicacin dada se desarrolla el programa en una PC con un CrossAsembler y se cargan los cdigos al MPU11 a travs del puerto serie para luego ser
ejecutados totalmente o paso por paso observando los cambios provocados en los registros
del C, la memoria o los puertos E/S. Si existen errores pueden ser corregidos en lenguaje
de Mquina o Ensamblador y probados de nuevo. Si se trata del desarrollo de una
aplicacin especifica, el funcionamiento del programa estar en interaccin con el buen
diseo de los circuitos de interface y perifricos necesarios en la aplicacin.
Una vez teniendo el cdigo objeto depurado se puede dejar en la EEPROM o se
puede grabar en la OTPROM (One Time Programable Read Only Memory). Este cdigo
puede auto-ejecutarse cada que se alimente al MPU11 si la primera instruccin en el
EEPROM es un JUMP ($7E). Si el SM11 detecta este cdigo en la localidad $B600, le
transfiere el control automticamente despus de RESET a menos que justo en ese
momento se reciba un dato por el puerto serial.
De la misma forma si se necesita cambiar algn registro con proteccin (64 ciclos
despus de RESET) se puede ejecutar una subrutina de inicializacin con un JMP ($7E) en
la $B603.

La filosofa de desarrollo de aplicaciones con el MINED11 se basa en la tcnica


modular y consiste en ir depurando las subrutinas bsicas en la EEPROM o en la RAM (si
esta disponible) y una vez ya probadas pasarlas a la OTPROM, para seguir depurando
subrutinas o rutinas del siguiente nivel modular. La EEPROM contiene 512 Bytes que
pueden ser grabados hasta 10,000 veces (el proceso de grabado es totalmente transparente
al usuario). Ambas caractersticas son mas que suficientes para el desarrollo de rutinas
modulares.

La OTPROM se programa en la misma tarjeta con algunos comandos del Sistema


Monitor y solo requiere de la aplicacin externa de 12.25 V. (en J7). El rea disponible
para el usuario es de 4 Kbytes, suficientes para aplicaciones muy serias y complejas. Si se
requiere mayor cantidad de memoria seria necesario usar un MC68HC711E20 virgen (sin
SM11) que cuenta con 20 Kbytes. Sin embargo en este caso se necesita un programador
para poder grabar datos inicialmente.

54

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

5.4 CONEXION DEL MINED


Para iniciar una sesin con el sistema MINED se necesita una PC
con puerto Serie y el disco TERMINAL MINED 1195, con DB25 o DB9
segn el puerto serial de la PC que se quiera emplear. De la Fuente de 5 V. apagada
conecte los cables de alimentacin observando la polaridad (el negativo al punto marcado
como GND y el positivo a +5 en el conector de alimentacin. Si se conectara la fuente con
la polaridad inversa el Fusible F1 se daara por la accin de proteccin de D1. Si esto
llegara a ocurrir, conecte la fuente de manera correcta y reemplace el fusible con otro del
mismo valor.
Conecte el cable serie del conector DB9 del MINED11 (J2) al puerto 1 de la PC (o
al #2). Ejectese el programa MINED11 del disco TERMINAL MINED con lo que
aparece una pantalla que en la parte inferior nos da el estado de la Terminal y en la parte
superior las funciones disponibles de este programa TERMINAL. Si el cable serie se
conecto al puerto 2 entonces es necesario usar <F4> para indicar el cambio de puerto
(tambin previamente se puede editar el archivo MINED.CFG en el que se define el puerto
de trabajo). Por ultimo encienda la fuente con lo que deber aparecer un mensaje de
identificacin del Sistema Monitor 11 que se ejecuta en el MPU11. Si este mensaje no
apareciera presione el SW de reset marcado como RST, verifique la alimentacin y la
conexin serial. Tambin verifique las posiciones de los "Jumpers" que inicialmente deben
estar como se aprecia en la Fig.
SERIAL RS232
FUENTE +5V

J5
J6

HC11

HC11

J7

FIGURA 5.9 CONEXION DEL MINED.


Para iniciar el manejo de SM11 (Sistema Monitor 11) tenga a la mano el resumen
de comandos y ejerctelos libremente (Pag.10). Por ejemplo realice lo siguiente:
>R <RET>
>L <RET> <F3>
ARCHIVO: prueba.obj
>C B600 <RET>

MINED 11

(para ver registros del CPU)


(cargar cdigos del disco)
(dar nombre del archivo a cargar)
(correr el programa cargado)

55
Indice

CAPITULO 5.- DESCRIPCION GENERAL

5.5 DESCRIPCION DEL MPU11


La tarjeta MINED MPU11 esta diseada para servir a un gran
numero de aplicaciones tanto industriales como educativas. El alma del
MINED es el MC68HC11 (U1) un microcontrolador de Motorola de 8 bits con
arquitectura interna de 16 bits considerado por muchos diseadores como uno de los
mejores microcontroladores de 8 bits. El MPU11 incluye hasta 20 KB de OTPROM, 512
bytes de EEPROM, 768 bytes de RAM, 38 lneas Entrada/Salida en 5 puertos (del A al E),
temporizador con 4 "Input Capture" y 5 "Output Compare", WATCH DOG, Perifrico de
comunicacin Sincrono e interface de comunicaciones asincronas con acopladores para
comunicacin RS-232 y 8 canales analgicos con referencia de 2.56 V (10 mV = LSBit), o
5.12 V. (20mV = LSBit) .

El 68HC11 utilizado es la versin E20 de 64 terminales (PLCC) que corre a 2


MHz con cristal de 8 MHz (8HC11E20FU2). En los conectores J5 y J6 se programa
mediante Jumpers el modo de trabajo del Microcontrolador de acuerdo a la siguiente tabla:
A
J5
+5

GND
J6

MODO

J6 = MODB

J5 = MODA

SINGLE-CHIP
EXPANDED
BOOTSTRAP
SPECIAL TEST

+5
+5
GND
GND

GND
+5
GND
+5

La forma normal de trabajo del MPU11 es en "SINGLE CHIP". De este modo se


tiene el mximo de puertos disponibles y al momento de inicio entra el Sistema Monitor 11
grabado en la OTPROM interna.
El interface de comunicacin serie asincrona (PD0=Rx y PD1=Tx) realiza el
control y formateo de datos para acoplar el sistema MINED a una lnea de comunicaciones
serie estndar. Para su funcionamiento el Microcontrolador necesita contar con un cristal de
trabajo de 8 MHz para enlazarse a una velocidad de 9600 bauds. Esta velocidad puede ser
cambiada con el comando "Baud".
U2 es un transmisor/receptor RS-232 que esta conectado de un lado al
Microcontrolador y del otro a un conector SIP-4 polarizado con lo que el MINED puede
enlazarse a otros sistemas va RS-232 requiriendo solo de 5 Volts para su funcionamiento.
El formato de comunicacin es de 8 bits de datos, no paridad, 1 bit de paro y velocidad de
9600 bauds programable bajo comando del SM11.
U4 es el MAX704 un circuito micromonitor que realiza funciones de apoyo en el
sistema. Primeramente se encarga de generar la seal de RESET tanto durante el
encendido como cada vez que se presione el interruptor de presin marcado como RST. La
seal de RESET que genera este circuito esta activa por un segundo aproximadamente.
La segunda funcin de este circuito es la de monitorear constantemente el voltaje
de alimentacin de tal forma que cuando el mismo caiga por debajo de los 4.5 V activa la
seal de RESET para prevenir que el CPU realice accesos no deseados durante el corte de
alimentacin. Esto es primordialmente importante si se conecta a la RAM una batera de
56

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

alimentacin para convertirla en no voltil (en la terminal MODB). Cuando


regrese la energa nuevamente mantiene la seal de RESET el tiempo
suficiente para que se estabilice la fuente de energa y la generacin de reloj
en el microcontrolador (un mnimo de 250 mS).
La tercer funcin del MAX704 es la de conmutar el voltaje de alimentacin hacia
U5. Alimenta el voltaje de la fuente si est presente o el voltaje de la batera al fallar la
alimentacin. U5 es el DS1202 un Reloj de Tiempo Real (RTC) que se comunica en
protocolo serial sincrono con el 68HC11 a travs de PA7, PA6 y PA5. El RTC es una
opcin en el MINED 11 y lleva cuenta de segundos, minutos, horas, da (del mes y
semana), meses y aos.
Opcionalmente U3 es una referencia de voltaje de precisin (LM336) que se
alimenta del V+ de U2 (aproximadamente 9 V) para producir (2.56 V o 5.12 V) ajustados
por el potenciometro R7. Esta referencia de voltaje es necesaria si se desea utilizar el
convertidor Analgico/Digital y se aplica a VRH (Voltage Reference Hi).
Los recursos de memoria del microcontrolador no estn disponibles en su totalidad
ya que el Sistema Monitor 11 necesita hacer uso de ellos a excepcin de la EEPROM
cuyos 512 bytes estn totalmente disponibles al usuario. De los 20 Kbytes de OTPROM
casi 8 Kbytes son ocupados por el SM11 ($E000 a $FFFF). Restan 10 Kbytes disponibles
para el usuario (8 Kbytes de la direccin $9000 a la $AFFF y 2 Kbytes de la direccin
$D000 a la $D7FF).
9000

8Kbytes
USUARIO
AFFF
D000

OTPROM DEL

D7FF
D800

MEMORIA

2Kbytes USUARIO
SM11

MC68HC711E20
FF00
FFFF

VECTORES

La ltima pagina del OTPROM esta reservada para almacenar la informacin de


todos los puntos de entrada del sistema. Los vectores del MC68HC11 ($FFC0 al $FFFF)
apuntan hacia diferentes localidades dentro de esta pgina ($FF00 a $FFC0) en donde se
programa un "JUMP" al punto de entrada. Esto se hace con la finalidad de poder
reprogramar los puntos de entrada si as se desea (cambiando "UNOS" por "CEROS" en la
instruccin "JUMP").

MINED 11

57
Indice

CAPITULO 5.- DESCRIPCION GENERAL

Las direcciones de entrada de las diferentes interrupciones del


MC68HC11 estn grabadas y disponibles de la siguiente manera:
INTERRUPCION
INTERFACE COM. ASINCRONA
FIN TRANSFERENCIA SERIAL SINCRONA
TRANSICION ENTRADA DE ACUM. PULSOS
SOBREFLUJO DE ACUMULADOR DE PULSOS
SOBREFLUJO DEL TEMPORIZADOR
CAPTURA (4) O COMPARACION (5)
COMPARACION TIMER SALIDA 4
COMPARACION TIMER SALIDA 3
COMPARACION TIMER SALIDA 2
COMPARACION TIMER SALIDA 1
CAPTURA TIMER ENTRADA 3
CAPTURA TIMER ENTRADA 2
CAPTURA TIMER ENTRADA 1
INTERRUPCION DE TIEMPO REAL
IRQ o PROTOCOLO PARALELO E/S
TERMINAL XIRQ
INTERRUPCIN DE SOFTWARE
TRAMPA DE CDIGO ILEGAL
FALLA DE OPERACIN APROPIADA (COP)
FALLA DE MONITOREO DE RELOJ
RESET.=>B600 si en B600 esta 7E

DIRECCION
239
236
23C
240
243
246
249
24C
250
253
256
259
25C
260
263
266
SM11
SM11
269
26C
SM11

Esta tabla nos da la direccin de ejecucin de cada una de las rutinas especificadas.
Para su uso correcto en tal direccin debe grabarse un instruccin "JUMP" y la direccin
de la rutina de servicio (que estar en rea EEPROM u OTPROM). Por ejemplo si se
desea usar la seccin de INTERRUPCIONES PERIODICAS (interrupcin de tiempo
real) desde lenguaje ensamblador se inicializaria as:
INIT

....
....
LDAA
STAA
LDD
STD
LDAA
STAA
....
....
CLI
RTS

;SUBRUTINA DE INICIALIZACION EN UN SIST.


#$7E
$260
#RTIRQ
$261
#$40
$1024

;CODIGO DE OPERACION DE INST. "JUMP"


;A DIRECCION DE ENTRADA INTERRUP. T. REAL
;DIREC. RUTINA DE SERVICIO DE INTERRUP
;COMPLETAR LA INSTRUCCION: JMP RTIRQ
;HABILITAR INTERRUPCION DE TIEMPO REAL
;
;ALGUNAS OTRAS INICIALIZACIONES
;HABILITAR IRQ EN EL CPU
;FIN SE SUBRUTINA DE INICIALIZACION

Despus de esta inicializacin cuando se genera una interrupcin de tiempo real se


ejecuta la rutina RTIRQ gracias a la instruccin enlace que se programo en la direccin
$160.

58

MINED 11

Indice

CAPITULO 5.- DESCRIPCION GENERAL

De forma similar de los 768 bytes de memoria RAM, el SM11


necesita de una parte. Las localidades totalmente libres para usuario son de
la 0000 a la $022F. Como puede apreciarse en la tabla anterior las
localidades de la $236 a la $26F se usan como puntos de entrada de
diferentes interrupciones. Si no se usan interrupciones entonces estn disponibles tambin
para usuario.
Las localidades de la $130 a la $135 se utilizan como puntos de entrada de
interrupciones de Software y se explican en el capitulo 3, seccin 3.4 (pag. 36).

El mapa de uso de la RAM se muestra a continuacin.

0000
304 BYTES

USUARIO

64 BYTES

PUNTOS DE ENTRADA DE
INTERRUPCIONES DEL
68HC11(USUARIO)

56 BYTES

VARIABLES DEL SM11

40 BYTES

BUFFER DE COMANDOS DEL SM11

48 BYTES

AREA DEL STACK DEL SISTEMA

022F
0230

026F
0270

02A7
02A8

02C7
02C8

02FF

MINED 11

59
Indice

PROBLEMAS CURSO HC11

PROBLEMAS CURSO HC11


(PROBLEMAS ARITMETICOS)
I.1 DESENSAMBLE DE BYTE
PROPSITO: Dividir el contenido de la localidad 0000 en dos secciones de cuatro
bits (algunas veces llamados nibbles o nybbles ) y colocar las secciones en orden en el
registro D. Los cuatro bits mas significativos de la localidad 0000 en el registro A y los
cuatro bits menos significativos de la localidad 0000 en el registro B. Limpie los cuatro
bits mas significativos de ambos bytes.
a.
Resultado:

EJEMPLO:

PROGRAMA:

ORG
LDAB
ANDB
LDAA
LSRA
LSRA
LSRA
LSRA
SWI
FCB

$B600
$00
#$0F
$00

(0000)
D

=
=

3F
030F

;Obtiene el dato
;Desaparece el nibble mas significativo
;Recarga el dato ahora en A.
;Desplaza el bit mas significativo
; a la posicin del menos
; significativo y limpia
; las otras posiciones

Cada ejecucin de LSR desplaza en el acumulador o localidad de memoria, una


posicin a la derecha, as que cuatro LSR son requeridos para desplazar cuatro
posiciones. La instruccin LSR siempre limpia el bit mas significativo de el
acumulador (Tambin llamado desplazamiento lgico), por lo que cuatro LSRA
limpiaran los cuatro bits mas significativos.

MINED 11

61

Indice

PROBLEMAS CURSO HC11

. I.2 SUMA DE 3 DATOS DE 8 BITS

PROPOSITO: Calcular la suma de 3 nmeros dados de 8 bits. Los nmeros se


encuentran en orden subsecuente a partir de la localidad de memoria 0002. Guardar el
resultado de la suma (16 bits) en las localidades de memoria 0000 y 0001 (MSB y LSB).
EJEMPLO:

PROGRAMA:

a.

(0002) = C8
(0003) = FA
(0004) = 96

Resultado:

(0000) = 02
(0001) = 58

ORG
CLRA
LDAB
ADDB
ADCA
ADDB
ADCA
STD
SWI
FCB

$B600
$02
$03
#00
$04
#00
$00

;Inicializa contador de acarreos


;Obtiene primer sumando
;Adiciona con segundo sumando
;Mascara para obtener acarreo (A = A + 0 + C)
;Adicin final con tercer sumando
;Nueva mascara de acarreo
;Resultado final en 16 bits

Existen varias formas de estructurar un programa para un determinado


procesamiento aritmtico, en este caso se recurre a un planteamiento lineal , esto
implica que cada instruccin se ejecuta una sola vez en todo el programa (se prescinde
de brincos, condicionantes, etc). Aunque esta no es la mejor forma de manipular
informacin, constituye un principio bsico para la programacin en ensamblador, en
captulos posteriores se estudiaran otras formas de programacin.

62

MINED
Indice11

PROBLEMAS CURSO HC11

I.3 SUMA BINARIA A 24 BITS


PROPOSITO: Obtener la suma de dos nmeros de 24 bits (3 bytes). El
primer sumando se encuentra posicionado, a partir, de la localidad de memoria 0000
(MSB) y el segundo sumando a partir de la 0003 (MSB). Guardar el resultado (32 bits),
con su MSB en la localidad de memoria 0006.
EJEMPLO:

a.

Resultado:

PROGRAMA:

ORG
LDD
ADDD
STD
LDAA
ADCA
STAA
LDAA
ADCA
STAA
SWI
FCB

0000 = C3
0001 = A7
0002 = 5B

PRIMER SUMANDO
C3A75B16

0003 = B8
0004 = 35
0005 = DF

SEGUNDO SUMANDO
B835DF16

0006
0007
0008
0009

=
=
=
=

$B600
$01
$04
$08
$00
$03
$07
#00
#00
$06

01
7B
DD
3A

RESULTADO
17BDD3A16

;Obtiene los 2 LSB de el sumando 1


;Adiciona con los 2 LSB del sumando 2
;Almacena resultado parcial.
;Obtiene el MSB del sumando 1
;Adiciona con MSB del sumando 2 y carry ant.
;Almacena resultado parcial.
;Limpia registro sin afectar carry anterior.
;De existir, obtiene carry.
;Complemento de el resultado final.

SUMA CON ACARREO.


La instruccin ADCA (add with carry) suma el acarreo del byte anterior con el
valor de la localidad de memoria o el valor inmediato y el acumulador A
(A = A + M + C). ADC es la nica instruccin en la secuencia que afecta la bandera del
acarreo. En particular las instrucciones tales como INC y DEC afectan conteos y
funciones aritmticas sin alterar la bandera del acarreo.

MINED 11

Indice63

PROBLEMAS CURSO HC11

I.4 SUMA BCD


PROPOSITO: Sumar dos nmeros decimales (BCD) de 16 bits. El primer sumando
decimal se encuentra en la direccin de memoria 0000, el segundo sumando se
encuentra en la localidad de memoria 0002. Guardar el resultado (en BCD) a partir de
la direccin 0004.
EJEMPLO:

a.

0000 = 37
0001 = 89
0002 = 64
0003 = 56
Resultado: 0004 = 01
0005 = 02
0006 = 45

PROGRAMA:
ORG
CLRB
LDAA
ADDA
DAA
STAA
LDAA
ADCA
DAA
STAA
ADCB
STAB
SWI
FCB

$B600
$01
$03
$06
$00
$02
$05
#0
$04

;Inicializa contador de acarreo


;Obtiene LSB de el primer sumando
;Adiciona con LSB del segundo sumando
;Ajuste decimal
;Resultado parcial en decenas y unidades
;Obtiene MSB de el primer sumando
;Adicin de MSB del segundo sumando y Carry.
;Nuevo ajuste decimal p/suma decimal del byte MSB.
;Resultado parcial en millares y centenas.
;Mascara para obtener acarreo: B = B + D + C.
;Resultado parcial en decenas de millar.

El cdigo BCD (Decimal Codificado en Binario) se representa nicamente con


informacin decimal, es decir, implica solamente nmeros del 0 a 9; El proceso interno
del microcontrolador realiza sus operaciones en formato hexadecimal, de aqu la
necesidad de utilizar la instruccin de ajuste decimal (DAA) para conversin.

64

MINED
Indice11

PROBLEMAS CURSO HC11

INSTRUCCIN DE AJUSTE DECIMAL.


La instruccin de ajuste decimal (DAA) usa las banderas de acarreo
(C) y medio acarreo (H) para reconocer y cambiar las siguientes situaciones en las
cuales la suma binaria y BCD difieren:
1.- Cuando la suma de 2 dgitos esta entre 10 y 15 incluso. En este caso el 6 deber ser
sumado para dar el resultado correcto, por ejemplo:
0101
(5)
1000
(8)
______
1101
(D) (13 EN BINARIO)
+ 0110
(6)
___________
0001 0011
(BCD 13, el cual es correcto)
2.- Cuando la suma de dos dgitos es 16 o ms. En este caso, el resultado es un dgito
apropiado BCD pero seis menos del que debera de ser, por ejemplo:
1000
1001
_____
0001 0001
+
0110
___________
0001 0111

(8)
(9)
(BCD 11)
(BCD 17, que es el correcto)

Un factor extra de 6 es necesario en ambos casos. Sin embargo el procesador


puede reconocer el caso 1 determinando que la suma no es un dgito BCD, por
ejemplo, esta entre 10 y 15 (o A y F en Hexadecimal).
Por otro lado, el procesador deber revisar el dgito de acarreo (H para el dgito
menor y C para el dgito superior) para reconocer el caso 2, dado que el resultado es
un numero BCD valido. DAA es la nica instruccin que hace uso de la bandera H
(medio acarreo). Ntese que DAA solamente opera en el acumulador A y solamente
trabaja correctamente despus de la instruccin ADDA o ADCA.

PRECISIN BINARIA Y BCD.


El procedimiento de una suma decimal trabaja para nmeros BCD de cualquier
longitud. Dado que cada dgito decimal requiere cuatro bits, doce dgitos de precisin
requieren:
12 * 4 = 48 bits
Que es comparado a 40 bits usando suma binaria. Esto es 6 bytes en lugar de 5
o un incremento del 20%.

MINED 11

Indice65

PROBLEMAS CURSO HC11

I.5 MULTIPLICACIN BINARIA DE 8 POR 16 BITS


PROPSITO: Multiplicar el nmero sin signo de 8 bits en la localidad de
memoria 0000 por el nmero sin signo de 16 bits en la localidad de memoria 0001 y
0002 (byte mas significativo en 0001). Colocar el resultado en las localidades de
memoria 0003, 0004 y 0005 con el MSB en 0003 y el LSB en 0005.
EJEMPLO:
A)
0000 = 03
0001 = 00
0002 = 05
Resultado:

0003 = 00
0004 = 00
0005 = 0F

0005 es multiplicando

00000F es producto

EN DECIMAL: 3 * 5 = 15 .
B)

0000 = 64
0001 = 75
0002 = 30

Resultado:

0003 = 2D
0004 = C8
0005 = C0

7530 es multiplicando

2DC8C0 es producto

EN DECIMAL: 100 * 30,000 = 3,000,000.


PROGRAMA:

66

ORG
LDAA
LDAB
MUL
STD
LDAA
LDAB
MUL
ADDB

$B600
$00
$02

ADCA
STD
SWI
FCB

#0
$03

$04
$00
$01
$04

;Obtiene multiplicador
;Obtiene LSB's del multiplicando
;Multiplica los LSB's
;Guarda el producto parcial
;Obtiene multiplicador
;Obtiene el MSB's del multiplicando
;Multiplica MSB's
;Adiciona LSB's con MSB's del producto
;
parcial previo
;Adiciona el carry con MSB's
;Guarda la suma del producto parcial

MINED
Indice11

PROBLEMAS CURSO HC11

Extendiendo la instruccin MUL para manejar operandos largos


trabaja como multiplicacin de longitud ordinaria. Deber tener cuidado
de ordenar los productos parciales correctamente antes de sumarlos
juntos. Cada producto parcial sucesivo es corregido 8 bits a la izquierda del producto
anterior.
La instruccin ADCA provee una forma conveniente de manejar acarreos que pueden
resultar de la suma parcial de los productos.
Adems de su uso obvio en calculadoras y terminales de venta la multiplicacin es
tambin la llave parcial de los algoritmos de control. La velocidad a la cual un
procesador puede efectuar determinada operacin es determinante para su utilizacin
en el control de procesos, controles adaptables, deteccin de seales y anlisis de
seales.

ARREGLOS MULTIDIMENCIONALES.
Otro uso comn de las multiplicaciones es la colocacin de elementos en
arreglos multidimencionales. Por ejemplo: Si tenemos un arreglo de lectura de sensor,
organizado por un numero de estaciones remotas y un numero de censores,
generalmente referimos la lectura del sensor 7 de la estacin numero 5 como R(5,7).
Donde R es el nombre de un arreglo total. El mtodo usual para almacenar este
arreglo es indicar la direccin R base con R (0,0) y continua R (0,1), R (0,2), etc. Si hay
tres estaciones (0, 1 y 2) y 4 sensores en cada estacin (0, 1, 2 y 3) tenemos la lectura en
la siguientes localidades de memoria:
LOCALIDADES DE MEMORIA
R base
R base
R base
R base
R base
R base
R base
R base
R base
R base
R base
R base

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11

LECTURA
R (0,0)
R (0,1)
R (0,2)
R (0,3)
R (1,0)
R (1,1)
R (1,2)
R (1,3)
R (2,0)
R (2,1)
R (2,2)
R (2,3)

En general si sabemos el numero de la estacin I y el numero del sensor J, la


lectura R, (I, J) se localiza en la direccin:
R base + n por I + J

MINED 11

Indice67

PROBLEMAS CURSO HC11

Donde n es el numero de sensores en cada estacin, por lo tanto


localizar una lectura particular para actualizar, mostrar o efectuar una
operacin aritmtica requiere una multiplicacin.
Por ejemplo: El operador puede requerir un instrumento para imprimir la
lectura corriente del sensor numero 3 en la estacin numero 2, para encontrar esa
lectura el procesador deber calcular la direccin:
R base + 4 * 2 + 3 = base + 11.
Si el arreglo tiene mas dimensiones son necesarias mas multiplicaciones por ejemplo:
podemos organizar los sensores por numero de la estacin colocndolos en la
direccin X y colocndolos en la direccin Y (Cada estacin por lo tanto tiene sensores
en posiciones regulares en una superficie bidireccional). Ahora podemos descubrir
una lectura R (2, 3, 1)la cual se refiere a la lectura del sensor en la estacin numero 2
posicin X numero 3 y posicin y numero 1. Se pueden agregar aun mas dimensiones,
tal como una posicin vertical, tipo de sensor o tiempo de lectura.
Cada posicin aadida significa que el procesador debe efectuar
operaciones para colocar elementos necesarios en la memoria unidimensional.

68

mas

MINED
Indice11

PROBLEMAS CURSO HC11

(*PROBLEMAS CICLICOS)

I.6 SUMA DE n DATOS A 8 BITS


PROPSITO: Calcular la suma de una serie de nmeros de 8 bits. El largo de
la serie esta en la localidad de memoria 0002 y la serie propiamente comienza en la
localidad de memoria 0003. Almacenar la suma en las localidades de memoria 0000 y
0001 (los 8 bits mas significativos en la 0000).
EJEMPLO:
A
(0002) = 03 Contador de nmeros a sumar
(0003) = C8
(0004) = FA
(0005) = 96
Resultado:

(0000) = 02
(0001) = 58

C8 + FA + 96 = 0258

DIAGRAMA DE FLUJO:
INICIA
Sumu = 0
Sum1 = 0
Apuntador = 0003
Contador = (0002)
Sum1 = Sum1 + (Apuntador)
Sumu = Sumu + Carry
Apuntador = Apuntador +1
Cuenta
= Cuenta - 1
No

Cuenta = 0
Si
FIN

PROGRAMA:

OTRO

MINED 11

ORG
CLRA
CLRB
LDX
ADDB
ADCA
INX
DEC
BNE
STD
SWI
FCB

$B600
#03
,X
#00
$02
OTRO
$00

;MSB de la suma = cero


;LSB de la suma = cero
;Apuntador al inicio del arreglo
;Suma = Suma(LSB) + Dato
;Suma = Suma(MSB) y carry
;Apuntador al siguiente elemento
;Es contador de elementos = 0?
;No, OTRO
;Si, Guarda la suma

Indice69

PROBLEMAS CURSO HC11

I.7 SUMA DECIMAL.


PROPSITO: Suma de dos nmeros decimales (BCD) multibyte. La
longitud de los nmeros (en Bytes) esta en la localidad de memoria 0000, los nmeros
en si inician (el primer dgito menos significativo) en la localidad de memoria 0001 y
0011 respectivamente, y la suma reemplazara el numero inicial en la localidad de
memoria 0001.
Start

count
pointer1
pointer2
carry

=
=
=
=

(0000)
0001
0011
0

pointer =
pointer1 + pointer2 + carry
+ DecimalCorrection

pointer1
pointer2
count
No

=
=
=

pointer1 +1
pointer2 +1
count -1

si
count = 0
?
Si
FIN

PROGRAMA:

SUMA

70

ORG
LDAB
LDX
LDY
CLC
LDAA
ADCA
DAA
STAA
INX
INY
DECB
BNE
SWI
FCB

$B600
$00
#$01
#$11
,X
,Y
,X

SUMA

;Longitud de comn de sumandos.


;Obtiene direccin base del primer sumando
;Obtiene direccin base de segundo sumando
;C = 0
;Obtiene byte correspondiente del sumando 1
;Adiciona carry y byte del sumando 2
;Ajuste decimal
;Almacenamiento parcial del resultado
;Incremento de apuntadores
;Es contador de longitud = 0?
;No, SUMA
;Si...

MINED
Indice11

PROBLEMAS CURSO HC11

(*PROBLEMAS DE CONVERSION DE CODIGO)


I.8 CONVERSION DE HEXADECIMAL A ASCII
PROPSITO: Convertir el contenido de la localidad de memoria 0000 a un
carcter ASCII. La localidad de memoria 0000 contiene un dgito hexadecimal (los
cuatro bits mas significativos son cero). Guarde el carcter ASCII en la localidad de
memoria 0001.
EJEMPLO:

A)

(0000) = 0C
Resultado:

B)

(0000) = 06
Resultado:

PROGRAMA:

NUM

(0001) = 43 C

ORG
LDAA
CMPA
BLSNUM
ADDA
ADDA
STAA
SWI
FCB

(0001) = 36 6

$B600
$00
#9
;Si, NUM
#7
#$30
$01

;Elemento a convertir
;Es dato 9 o menor?
;No, Suma de ajuste para valores alfa
;Adicin para conversin a ASCII
;Almacenamiento de dato ASCII

La idea bsica de este programa estriba en sumar a todos los dgitos


hexadecimales un 3016. Esta suma convierte los dgitos del 0 al 9 a su cdigo ASCII
correspondiente. Por otra parte, las letras A a F no se encuentran inmediatamente
despus del dgito 9 en la tabla ASCII, por lo que ser necesario ajustar este bloque por
medio de una suma extra de un 7.
Una rutina como esta, es necesaria en una gran variedad de aplicaciones; Por
ejemplo, programas monitores que deben convertir dgitos hexadecimales a su
equivalente ASCII en orden para desplegar el contenido de las localidades de memoria
en hexadecimal hacia una impresora (ASCII) o un display CRT.

MINED 11

Indice71

PROBLEMAS CURSO HC11

I.9 CONVERSION BCD A BINARIO


PROPSITO: Convertir dos dgitos BCD que se encuentran en la
localidad de memoria 0000 y 0001 respectivamente, a cdigo binario. Guardar el
resultado en la localidad de memoria 0002. El dgito BCD ms significativo se
encuentra en la localidad de memoria 0000.
EJEMPLO:

A)

(0000) = 02
(0001) = 09
Resultado:

(0002) = 1D16 = 2910

B)

(0000) = 07
(0001) = 01
Resultado:

(0002) = 4716 = 7110

PROGRAMA:
ORG
LDAA
LDAB
MUL
ADDB
STAB
SWI
FCB

$B600
$00
#$10

;Obtiene el dgito mas significativo


;Multiplica por 10

$01
$02

;Suma el dgito menos significativo


;Guarda el equivalente binario

La instruccin MUL realiza una multiplicacin sin signo de 8-bits por 8-bits con
los contenidos de los acumuladores A y B respectivamente. Dejando el resultado de 16
bits en el acumulador D (A en la parte mas alta).
En este caso, el resultado no puede ser mayor de 9016 , por lo tanto la parte baja
del acumulador D (que corresponde a B) es relevante.

72

MINED
Indice11

PROBLEMAS CURSO HC11

PROBLEMAS CURSO HC11


(*PROBLEMAS DE APLICACION)
II.1 MANEJADOR DE DISPLAY SIETE SEGMENTOS
PROPSITO: Convertir el contenido de la localidad de memoria 0001 a cdigo de
siete-segmentos. Mostrar el resultado en un display de siete-segmentos conectado al
puerto B. Si el dato no contiene un nico dgito decimal, apagar todos los segmentos.
DATOS: M1Valor a mostrar en display.
RESULTADO: conversin a 7 segmentos en el puerto B.
La figura siguiente ilustra un display de siete-segmentos y la representacin de
este display como cdigo binario. Los segmentos son usualmente asignados a letras
representativas que van de a hasta g como se muestra en la figura. La organizacin
de el cdigo de siete-segmentos es como sigue: El segmento g corresponde al bit 6, el
segmento f corresponde al bit 5, el segmento e al bit 4, etc. Es importante observar
que el bit 7 se mantiene siempre en cero. Las letras que representan a cada segmento es
estndar pero la asignacin de segmentos a posiciones de bit es arbitraria. Adems el
convenio de activacin es como sigue: bit en uno = segmento prendido; bit en cero =
segmento apagado.

Dgito
0
1
2
3
4
5
6
7
8
9

7
0
EJEMPLO:

MINED 11

6
g

Cdigo
0011 1111 (3F)
0000 0110 (06)
0101 1011 (5B)
0100 1111 (4F)
0110 0110 (66)
0110 1101 (6D)
0111 1101 (7D)
0000 0111 (07)
0111 1111 (7F)
0110 1111 (6F)

5
f

4
e

A)

3
d

2
c

1
b

a
f

b
c

0
a

(0001)

03

Indice73

PROBLEMAS CURSO HC11

Resultado:
B)
Resultado:

(0002)

(0001)

28

(0002)

00

4F

HARDWARE:

220 x 7

HC11

PB0
PB1
PB2
PB3
PB4
PB5
PB6

a
b
c
d
e
f
g

CLCULOS:
Las resistencias se pueden calcular a partir de la malla de un segmento con la ley de
R
voltajes Kirchhoff:
VOH
VOH min = VR + VLED

VDD 0.8 = I R + VLED


V 0.8 VLED (5 0.8 2 )V
=
= 220
R = DD
I
10mA

PROGRAMA:
ORG
CLR
LDAB
CMPB
BHI
LDX
ABX
LDAA
STAA
FIN
TABLA

74

SWI
FCB
FCB

$B600
$1004
$01
#9
FIN
#TABLA
,X
$1004

; Inicializa display apagado para dato > 9


; Obtiene dato
; Es dato un dgito decimal?
; No, FIN
; S, puntero X al inicio de TABLA
; X = TABLA + B
; Valor de indexacin en A.
; Escritura de resultado en display (pto.
B)

1
; Retorno al sistema monitor
$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F

MINED
Indice11

PROBLEMAS CURSO HC11

Este programa maneja el algoritmo conocido como "SOLUCION


POR TABLA". Calcula la direccin de memoria en donde se encuentra la
respuesta (dentro de la tabla de siete-segmentos) a partir de la suma de un
ndice (que apunta a la direccin base de la tabla) con el dgito a ser convertido. La
respuesta se encuentra entonces almacenada en la direccin apuntada por el ndice.
La suma del ndice con la variable de entrada se realiza con la instruccin ABX,
donde X se desplazara hasta la direccin efectiva de la respuesta, pero ser necesario
asignar el valor al que apunta esta direccin a un registro cualquiera.
Los cdigos asignados a TABLA se grabaran en orden consecutivo a partir de la
direccin base de tabla, adems es importante notar que estos cdigos estn separados
por comas.
El uso de tablas es simple, rpido, y conveniente en trminos de problemas de
conversin de cdigos.
Los displays de siete-segmentos permiten la visualizacin de dgitos, letras y
otros caracteres, con un mnimo de problemas y una fcil manipulacin.
Obsrvese que se utiliz el puerto B, que es un puerto de slo salidas, para
manejar el display. Por ser un puerto de salidas, ste tiene en su construccin unos
Flip-Flops tipo D que almacenan la ltima informacin escrita, de tal forma que, una
vez concluida la ejecucin del programa, el display seguir mostrando el ltimo dgito
escrito (no ser slo instantneo).
Como los puertos en el HC11 se encuentran mapeados a memoria, estos se
pueden utilizar en las instrucciones como una localidad ms del mapa de memoria.
Obsrvese que el clculo de las resistencias se realiz para una corriente de
10mA/segmento (el valor mximo absoluto en el HC11 es de 25mA) y con una cada
de 2V para el peor de los casos en que la salida alcance el mnimo voltaje en 1 lgico
(VDD 0.8, de especificaciones).

MINED 11

Indice75

PROBLEMAS CURSO HC11

II.2 INTERFACE CENTRONIX (Pto. Paralelo p/ impresoras)


PROPSITO: desarrollar un mdulo (subrutina) que enve el carcter
recibido en el acumulador B a una impresora conectada al puerto C del HC11.
Complementar con una aplicacin que mande un mensaje a la impresora y contine
imprimiendo los caracteres que se vayan escribiendo en el teclado.
Utilice la funcin de comunicacin paralela en el modo de protocolo compuesto de
salidas.
HARDWARE:

TxD
RxD
GND

HC11

PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7

D0
D1
D2
D3
D4
D5
D6
D7

IMPRESORA
STRB
STRA
GND

DS
AKN
GND

Las seales que se requieren para escribir un carcter en la impresora se


aprecian en el siguiente sincrograma:

D0 D7

DS

Datos vlidos

De computadora a impresora

BUSY

AKN

De impresora a computadora

Por esta razn, es que se eligi el de protocolo de comunicacin compuesto de


salida (ver seccin 5.2 de apuntes), ya que es el que ms facilita la sincronizacin de
seales requeridas por la impresora.
Ntese que el utilizar el protocolo compuesto de salida implica configurar el puerto
C como salidas (DDRC = $FF).
Para utilizar el protocolo compuesto de salida se deben configurar los siguientes
bits en el registro PIOC ($1002):
INVB = 0;
EGA = 0;
PLS = 1;
OIN = 1;
HNDS = 1;
CWOM = 0;
STAI = 0;
76

pulso negativo, ya que as lo requiere el DS de la impresora.


STRA esperar la transicin negativa del AKN de la impresora.
La salida de STRB ser de tipo pulso y no de nivel.
Protocolo compuesto ser de salidas.
configura protocolo de comunicacin compuesto.
configura salidas de tipo CMOS y no drenador abierto.
No utilizar interrupciones.
MINED
Indice11

PROBLEMAS CURSO HC11

Por lo tanto, la palabra que se debe escribir es x0011100 ($1C).


DIAGRAMAS DE FLUJO:

INICIO

IMPRIME

X $1000

(7, X) (7, X) or $FF

X $1000

A $1C

(5, X) B

($1002) A
X Cadena

B (0, X)
IMPRIME

Si

(2, X) $80 = 0?
No
X

RTS

XX+1

Si

X < FinCad ?
No

ECHO
IMPRIME

MINED 11

Indice77

PROBLEMAS CURSO HC11

PROGRAMA:
ORG
LDX
BSET
LDAA
STAA
LDX
OtraVez
LDAB
BSR
INX
CPX
BLO
Infinito
SWI
FCB
BSR
BRA
IMPRIME PSHX
LDX
STAB

$B600
#$1000
7,X $FF
#%00011100
$1002
#Cadena
0,X
IMPRIME

Interroga

BRCLR

2,X $80 Interroga

PULX
RTS
FCC
FCB

Hola Mundo
$0D,$0A

Cadena
FinCad

#FinCad
OtraVez
$04
IMPRIME
Infinito
#$1000
5,X

;X = Inicio block de registros


;Configura pto. C como salidas
;Configuraciones de PIOC
;X apunta al inicio de la cadena
;Carga B con caracter actual
;Imprime el caracter contenido en B
;X apunta a siguiente caracter
;X < sgte. dir. despus de ltimo caracter ?
;Si s, se repite
;Llamada a rutina de servicio ECHO...
;lee caracter del teclado y lo deposita en B
;Imprime caracter ledo
;Se repite infinitamente
;Salva X en pila
;X = Inicio block de registros
;Imprime nuevo caracter y limpia STAF
anterior
;Espera
AcKNowLedge (STAF=1) de
impresora
;Recupera X de pila
;Retorna a programa llamador
;Declaracin de la cadena
;ENTER al final de la cadena
;Para calcular longitud de cadena

En el mdulo IMPRIME se implement el concepto de interrogacin de


evento (polled) para esperar la seal AKN de la impresora. Se pudo haber utilizado
interrupcin (interrupt), pero en este programa no es necesario liberar tiempo de
CPU para otros procesos. Obsrvese que la cadena se declar mediante la directiva
FCC escribiendo el mensaje entre comillas; el ensamblador escribir el ASCII de los
caracteres consecutivamente en la memoria a partir de la direccin en que se encuentre
la directiva. Se agrega un Retorno de carro ($0D) y avance de lnea ($0A) al final del
mensaje para que ste sea impreso inmediatamente en caso de utilizar una impresora
que opere en modo Buffereado (no continuo)1. La etiqueta FinCad (sin mnemnicos),
se utiliza slo para obtener la siguiente direccin despus del ltimo carcter del
mensaje.
La captura de pulsaciones del teclado se hace mediante la rutina de servicio ECHO
(ver seccin 4.7 de los apuntes) y el programa se repite infinitamente hasta dar un
RESET.
1

Si se esta usando una impresora laser, al finalizar la escritura de caracteres se debe enviar un Form Feed (ALT + 12) para que los
caracteres que se recibieron sean impresos, de lo contrario, la informacin quedar almacenada en el buffer de la impresora en espera de
un FF.

78

MINED
Indice11

PROBLEMAS CURSO HC11

II.3 MANEJADOR DE DISPLAY MATRIZ DE PUNTOS


PROPSITO: desarrollar un programa que maneje un display matriz de
puntos de 5 x 7 cumpliendo con los siguientes requisitos:
Un mdulo recibir como parmetro, en el acumulador B, un caracter en cdigo
ASCII y actualizar a 5 variables globales con informacin (en cdigo de 5x7) del
caracter recibido.
Habilitar una Interrupcin en Tiempo Real (RTI) que peridicamente lea a estas
variables globales y actualice (multiplexndo las columnas) el caracter mostrado en
el display.
Desarrollar una aplicacin que utilice el mdulo mencionado para mostrar los
caracteres que se vayan pulsando en el teclado. El programa terminar al presionar
ESC.
HARDWARE:
+Vcc
Rb x 5
PC4

1. 2N2

PC3
PC2
PC1

HC11

PC0
C1 C2

Rc x 7
PB0
PB1
PB2
PB3
PB4
PB5
PB6

R1

Filas = ctodos,
Columnas = nodos

Los caracteres sern ledos del teclado mediante la rutina de servicio de


interrupcin TECLA. No existirn conflictos entre la RTI y la instruccin SWI, ya que
aunque sta sea una interrupcin, justo antes de brincar a la rutina de servicio
particular (TECLA en este caso) se hace una restauracin de todo el modelo de
programacin (incluyendo el CC), lo cual rehabilita las interrupciones internas.
En RAM se cargar una tabla generadora de caracteres la cual contendr
informacin de filas activadas por cada columna. Cada 5 localidades se tendr la
MINED 11

Indice79

PROBLEMAS CURSO HC11

informacin correspondiente a un caracter. La direccin de inicio y fin de


la tabla sern calculadas automticamente por el ensamblador; de tal
forma que, en cualquier momento, sta tabla se pueda recortar o crecer
dependiendo de la memoria disponible. Su rango se limit del caracter Espacio a Z
(ASCII $20 a $5A) por razones de almacenamiento, grficamente:

$0100
$0101
$0102
$0103
$0104

x111 1111 ($7F)


x000 1001 ($09)
x001 1001 ($19)
x010 1001 ($29)
x100 0110 ($46)

El mdulo CharASCII ser quien actualice, en las variables globales C1 a C5, el


cdigo de 5x7 del caracter recibido en B. Mediante indexacin, se har referencia a la
tabla generadora de caracteres, la cual por su tamao pudiese generar offsets mayores
de 8 bits a partir de su dir. de inicio; por sta razn, toda operacin realizada para el
clculo del offset se har con una precisin de 16 bits.
La rutina de servicio de interrupcin de la RTI actualizar cada columna en el
display por cada llamada a sta. Esto, de acuerdo a la informacin contenida en las
variables globales C[5:1] y a un APUNTador tambin global que le recordar la ltima
columna que se actualiz.

80

MINED
Indice11

PROBLEMAS CURSO HC11

CLCULOS:
Clculo de las resistencias Rc y Rb:

+Vcc
Rb

VOLPCx
Rc x 7

VOLPB0
VOLPB1
VOLPB2
VOLPB3
VOLPB4
VOLPB5
VOLPB6
Como se puede apreciar, el peor de los casos ocurre cuando todos las filas de una
columna x estn prendidas, en este caso, el transistor (en estado de saturacin)
debe ser capaz de poder suministrar suficiente corriente para todos los LEDs de esa
columna.
Datos:
VCC = 5V
VOL Pxx = 0.4V (max)
VLED 1.5V
ILED 11mA
VCEsat 0.3V
200
El voltaje en el colector es de:
VC = VCC VCEsat = ( 5 0.3)V = 4.7V
y la malla de cada LED tiene la ecuacin:
VC VOL PBx = VLED + VRc

VC VOL PBx = VLED + I LED Rc


Rc =

VC VOL PBx VLED

(4.7 0.4 1.5) V

I LED
11mA
Por otro lado:
I C = 7 I LED = 7 (11mA) = 77mA
MINED 11

= 254.54RC = 270

(en el peor de los casos)

Indice81

PROBLEMAS CURSO HC11

IC
I C 77mA
IB =
=
= 385 A
IB

200
Malla de entrada:
VCC VOL PCx = VBE + VRb
=

VCC VOL PCx = VBE + I b Rb


Rb =

VCC VOL PCx VBE


Ib

(5 0.4 0.7 ) V
385 A

= 10.129K Rb = 10K

Clculo de la periodicidad de la RTI:


Para poder engaar al ojo humano se necesitan aproximadamente 30
actualizaciones / seg. De la imagen que se est multiplexando, el tiempo entre
cada actualizacin es de:
1s
ms
,
= 33.3 actualizacion
T=
30 actualizaciones
pero como no es una columna sino cinco las que se van a multiplexar, ste tiempo
se debe repartir entre todas las columnas; Para que despus de barrerlas todas, al
regresar a la primera, hayan transcurrido no mas de 33.3ms y as la primer columna
(y por ende todas las dems) d la apariencia de no haberse apagado:
33 . 3ms
TITR =
= 6 . 66ms TITR = 4 .10ms
5
4.10ms, ya que no hay problema si las actualizaciones son mas rpidas, de hecho, es
mejor.
Esto significara que los bits RTR[1:0] del registro PACTL ($1026) se deben poner a
ceros. Como coincide con su valor por RESET, se dejan sin configurar.

82

MINED
Indice11

PROBLEMAS CURSO HC11

DIAGRAMAS DE FLUJO:
INIT

INICIO

(GenChar+$[52-20]*5+0) $7F
(GenChar+$[52-20]*5+1) $09
(GenChar+$[52-20]*5+2) $19
(GenChar+$[52-20]*5+3) $29
(GenChar+$[52-20]*5+4) $46

INIT

X $1000
(7, X) (7, X) + $1F
B $1E
(3, X) B
(APUNT) 00
B $20

TECLA

CharASCII
B = $18 ?
No
CharASCII

Si

B $7E
($0260) B
D RTIRQ
($0261) D

FIN

(24, X) (24, X) + $40


I0
RTS

MINED 11

Indice83

PROBLEMAS CURSO HC11

CharASCII

RTIRQ

B $40

($1025) B

C1

B B - $20

ROL $1003
SS+1
B (APUNT)

N=1?

Si

SS+1
BB+1
XD

No
B > $3A ?
No
A5

Si

D (0, X)
($00:$01) D

4?

No
B 00

D (2, X)
DAxB

A $1E
($02:$03) D

($1003) A
B (4, X)

A
($04) B
XS+1
D GenChar
D D + (0, X)

(APUNT) B
A 00

A
XD
B
B (0, X)
X
B B
RTS

($1004) B
84

RTIMINED
Indice11

Si

PROBLEMAS CURSO HC11

PROGRAMA:

C3
C5
APUNT
GenChar

MINED 11

EQU

$00

;Definicin de variables globales:

EQU
EQU
EQU
ORG
RMB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB

$02
$04
$05
$0000
6
$00, $00, $00, $00, $00
$00, $00, $4F, $00, $00
$00, $07, $00, $07, $00
$14, $7F, $14, $7F, $14
$24, $2A, $7F, $2A, $12
$23, $13, $08, $64, $62
$36, $49, $55, $22, $50
$00, $05, $03, $00, $00
$00, $1C, $22, $41, $00
$00, $41, $22, $1C, $00
$14, $08, $3E, $08, $14
$08, $08, $3E, $08, $08
$00, $50, $30, $00, $00
$08, $08, $08, $08, $08
$00, $00, $60, $60, $00
$20, $10, $08, $04, $02
$3E, $51, $49, $45, $3E
$00, $42, $7F, $40, $00
$42, $61, $51, $49, $46
$21, $41, $45, $4B, $31
$18, $14, $12, $7F, $10
$27, $45, $45, $45, $39
$3C, $4A, $49, $49, $30
$01, $71, $09, $05, $03
$36, $49, $49, $49, $36
$06, $49, $49, $29, $1E
$00, $36, $36, $00, $00
$00, $56, $36, $00, $00
$08, $14, $22, $41, $00
$14, $14, $14, $14, $14
$00, $41, $22, $14, $08
$02, $01, $51, $09, $06
$32, $49, $79, $41, $3E
$7E, $11, $11, $11, $7E
$7F, $49, $49, $49, $36
$3E, $41, $41, $41, $22
$7F, $41, $41, $22, $1C
$7F, $49, $49, $49, $41
$7F, $09, $09, $09, $01
$3E, $41, $49, $49, $7A

;Var. globales y tabla generadora de car. en RAM


;Reservar variables globales C[5:1] y APUNT
;SP
;!
;"
;#
;$
;%
;&
;'
;(
;)
;*
;+
;,
;;.
;/
;0
;1
;2
;3
;4
;5
;6
;7
;8
;9
;:
;;
;<
;=
;>
;?
;@
;A
;B
;C
;D
;E
;F
;G

Indice85

PROBLEMAS CURSO HC11

OtraVez

Fin
INIT

86

FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB

$7F, $08, $08, $08, $7F


$00, $41, $7F, $41, $00
$20, $40, $41, $3F, $01
$7F, $08, $14, $22, $41
$7F, $40, $40, $40, $40
$7F, $02, $0C, $02, $7F
$7F, $04, $08, $10, $7F
$3E, $41, $41, $41, $3E
$7F, $09, $09, $09, $06
$3E, $41, $51, $21, $5E
$7F, $09, $19, $29, $46
$46, $49, $49, $49, $31
$01, $01, $7F, $01, $01
$3F, $40, $40, $40, $3F
$1F, $20, $40, $20, $1F
$3F, $40, $38, $40, $3F
$63, $14, $08, $14, $63
$07, $08, $70, $08, $07
$61, $51, $49, $45, $43

;H
;I
;J
;K
;L
;M
;N
;O
;P
;Q
;R
;S
;T
;U
;V
;W
;X
;Y
;Z

ORG
BSR
SWI
FCB
CMPB
BEQ
BSR

$B600
INIT

BRA
SWI
FCB

OtraVez

;Programa en EEPROM
;Inicializacin de la R.T.I.
;Llamada a rutina de servicio $0B
;TECLA (B Tecla pulsada)
;Compara con ESC
;Si se puls el ESC, salir...
;Recibe ASCII en B, convierte a 5x7 y actualiza
globales
;Se repite

;Retorno al sistema monitor

LDX
BSET
LDAB
STAB
CLR
LDAB
BSR
LDAB
STAB
LDD
STD
BSET
CLI
RTS

#$1000
7,X $1F
#$1E
3,X
APUNT
#$20
CharASCII
#$7E
$260
#RTIRQ
$261
$24,X $40

;X = inicio block de registros


;Configura bits PC[4:0] como salidas
;Para encender 1er columna (PC0 0)
;escribindolo al puerto C
;Inicializa apuntador de var. globales
;Para inicializar display apagado (espacio)
;Recibe ASCII en B y actualiza globales
;Cd. Op. de instruccin JMP
;grabado en dir. de entrada de la R.T.I.
;Dir rutina de servicio de interrupcin
;Completa la instruccin JMP RTIRQ
;Habilita R.T.I.
;Habilita IRQ en el CPU

$0B
#$18
Fin
CharASCII

MINED
Indice11

PROBLEMAS CURSO HC11

CharASCII

PSHX
PSHB
PSHA
SUBB
BMI
CMPB
BGT
LDAA
MUL
PSHB
PSHA
TSX
LDD
ADDD
INS
INS
XGDX
LDD
STD
LDD
STD
LDAB
STAB
NoComputa PULA
PULB
PULX
RTS
RTIRQ
LDAB
STAB
SEC
ROL
LDAB
INCB
CMPB
BLS
CLRB
LDAA
STAA
NoTope
STAB
CLRA
XGDX
LDAB
COMB
STAB
RTI

MINED 11

;Salvamento de registros en pila:


#$20
NoComputa
#$3A
NoComputa
#5

#GenChar
0,X

0,X
C1
2,X
C3
4,X
C5

#$40
$1025
$1003
APUNT
#4
NoTope
#$1E
$1003
APUNT

0,X
$1004

;Resta caracteres no imprimibles


;Sale si caracter no imprimible(<$20)
;Caracter pertenece a tabla
;Sale si caracter >'Z' ($5A)
;Cada caracter requiere 5 localidades
;OFFSET*5 puede ser mayor de 8 bits
;Para poder sumar OFFSET*5 + GenChar ...
;en pila
;X apunta a OFFSET*5 en pila
;D = inicio de tabla generadora de caracteres
;D OFFSET*5 + GenChar
;quita A:B de pila (basura ahora)
;X tiene OFFSET final
;Carga 1 y 2 columna de display
;Actualiza C1 y C2
;Carga 3 y 4 columna de display
;Actualiza C3 y C4
;Carga 5 columna de display
;Actualiza C5
;Recuperacin de registros originales

;para borrar la bandera RTIF


;Elimina fuente de la interrupcin
;Para meter un 1 y
;rotar el 0 (transistores PNP) fsicamente
;Recuerda ltima columna actualizada
;Para actualizar siguiente columna
;Checa si se lleg a la ltima columna
;Si todava est dentro de rango, sigue
;De lo contrario, reseteamos:
;Para encender 1er columna (PC0 0)
;Actualiza apuntador
;Para poder hacer la transferencia: X 00:B
;Consulta variable global actual (cdigo 7-filas)
;lgica inversa (filas = ctodos)
;Actualiza columna actual fsicamente

Indice87

PROBLEMAS CURSO HC11

El sistema monitor hace uso del concepto de Pseudo-vectores, es


decir, los vectores de interrupcin definidos por el fabricante se
encuentran redireccionados a localidades RAM, esto con la finalidad de
poder construir (dinmicamente) instrucciones JMP que brinquen a las direcciones
(asignadas por el ensamblador) donde se encuentran las rutinas de servicio que
atendern a la interrupcin. Este concepto le da mayor flexibilidad a un
microcontrolador, ya que as, se puede vincular una interrupcin con rutinas de
servicio que se encuentren en cualquier parte del mapa de memoria, y no tengan que
estar siempre colocadas a partir de direcciones constantes. En la subrutina INIT se
aprecia la implementacin de este concepto: obsrvese que la instruccin JMP se
construye en las direcciones $0260, 261 y 262, esto, ya que es ah donde se encuentra
redireccionado el vector de la Interrupcin de Tiempo Real (R.T.I.).
Ntese que, al estar la tabla generadora de caracteres descargada en RAM, el
programa slo funcionar correctamente mientras no se desenergize la unidad; claro, a
menos que est utilizando la versin de MINED11 con batera de respaldo integrada.

88

MINED
Indice11

PROBLEMAS CURSO HC11

II.4 SUBSISTEMA DE CONVERSIN ANLOGO-DIGITAL


PROPSITO: desarrollar un programa que genere una seal cuadrada por la terminal
PA6 con frecuencia variable de 1kHz a 10kHz. La frecuencia ser controlada mediante
un potencimetro que aplique un voltaje analgico al canal AD0 (terminal PE0) del
subsistema de conversin analgico - digital del HC11.
HARDWARE:
+Vcc
10 k
HC11

PE0
PA6

El voltaje analgico aplicado al canal AD0 ser convertido continuamente a su


equivalente digital, cuyos resultados (de 4 muestras) quedarn depositados en los
registros ADR[4:1]. Para que esto sea as, se deben escribir las siguientes
configuraciones al registro ADCTL ($1030):
SCAN = 1; para conversiones continuas.
MULT = 0;para convertir un slo canal (y no un grupo de cuatro).
CD:CA = 0000; para seleccionar el canal AD0 (PE0 de Pto. E).
a la direccin $1030 se debe escribir un $20.

El valor resultante de la conversin ser interpretado como un retardo ponderado


de tiempo. Este retardo determinar la periodicidad con que la salida por
comparacin OC2 ser vlida. El evento programado ante esta situacin ser el de
conmutar (Toggle) el estado de la terminal PA6 y as generar una seal cuadrada
por la misma. Bajo estas condiciones, se puede observar que el retardo slo
determinar la duracin de un semiciclo de la seal (medio periodo) y como ste
ser el mismo para ambos estados, la seal tendr un ciclo de trabajo del 50%.

La salida por comparacin tendr asociada una interrupcin. La rutina de servicio


de sta ser la responsable de, a parte de eliminar la fuente de la interrupcin,
sumar al registro TOC2 el valor al que ocurrir la prxima comparacin. Este valor
ser el de una variable global que contendr el tiempo de retardo ponderado, y
ser el programa principal quien calcular y actualizar a esta variable.

MINED 11

Indice89

PROBLEMAS CURSO HC11

CLCULOS:
En el siguiente grfico se esboza la generacin de una salida por
comparacin basndose en un sumando:
500ns

por Toggle

PA6
T
Sumando (en ciclos E)

TOC2ant

TOC2nuevo = TOC2ant + Sumando

Si se desea un rango de frecuencias de 1KHz a 10KHz, se tiene que calcular cuntos


ciclos E2 tienen que transcurrir para llegar a la prxima transicin de la seal, es decir:
Tmax
1
para f min = 1KHz , Tmax =
= 1ms
= 0.5ms duracin semiciclo (en t)
1KHz
2
T
1
y f max = 10 KHz , Tmin =
= 01
. ms min = 0.05ms duracin semiciclo (en t)
10 KHz
2
si cada ciclo de la seal de reloj E dura 500ns y el prescaler es igual a 1, entonces:
0.5ms
para f min = 1KHz , # E max =
= 1000 E duracin semiciclo (en ciclos E)
500ns
0.05ms
y f max = 10 KHz , # E min =
= 100 E duracin semiciclo (en ciclos E)
500ns
como se puede apreciar, ambos sumandos caben perfectamente en 16 bits. No importa
si al sumarse al TOC2ant se sobrepasa el mximo nmero representable con 16 bits
($FFFF), ya que el resto de la suma continuar a partir de 0s, igual que lo har el
contador del sistema Timer.
Tambin es importante destacar que, en el peor de los casos, tenemos slo 100 ciclos de
reloj para actualizar el TOC2 antes de que nos alcance el contador maestro. Esta
situacin ya est prevista al hacerse el clculo del sumando (MUL, IDIV, etc.) en
programa principal (y no en servicio de interrupcin).
Por otro lado, el resultado de las conversiones A/D se encontrar en el rango de 0 a
255 y nosotros necesitamos un barrido de 100 a 1000, por lo que ser necesario un
escalaje como el que sigue:
60
1000 100
Sumando = 100 + ADRx
= 100 + ADRx
17

255
2

No se necesita modificar el prescaler que queda por RESET, ya que es el mejor (entre ms ciclos se usen y de
periodos mas cortos, mayor precisin) y por otro lado, s se alcanza a conseguir los nmeros de ciclos
necesarios para ambos rangos de frecuencia con ese prescaler.

90

MINED
Indice11

PROBLEMAS CURSO HC11

DIAGRAMAS DE FLUJO:

INICIO

INIT

Autoejecucin

INIT

B ADR1
A 60
DAxB
X 17
XD/X
DX
D D + 100
($00:$01) D

OC2RQ

B $7E

B $40

($0250) B

($1023) B

X OC2RQ

D ($00:$01)

($0251, 52) X

D D+(TOC2)

X $1000

(TOC2) D

($39,X)
($39, X)+$80

RTI

B $20
($30, X) B
($20,X)
($20, X)+$40
($23,X)
($23, X) $BF
($22,X)
($22, X)+$40
I0
RTS

MINED 11

Indice91

PROBLEMAS CURSO HC11

PROGRAMA:
Sumando EQU
ORG
JMP
AutoRun BSR
Infinito
LDAB
LDAA
MUL
LDX
IDIV (41)
XGDX
ADDD
STD
BRA
INIT
LDAB
STAB
LDX

OC2RQ

STX
LDX
BSET
LDAB
STAB
BSET
BCLR
BSET
CLI
RTS
LDAB
STAB
LDD
ADDD
STD
RTI

$00
$B600
AutoRun
INIT
$1031
#60

;Autoejecucin p/ no necesitar computadora.


;Inicializa convertidor A/D y Output Compare 2
;Lee resultado de ltima conversin analgica
;Escalaje al resultado de la conversin:

#17
#100
Sumando
Infinito
#$7E
$0250
#OC2RQ
$0251
#$1000
$39,X $80
#$20
$30,X
$20,X $40
$23,X $BF
$22,X $40

(2)
(4)
(4)
(6)
(5)

;Variable global (Retardo ponderado de tiempo)

#$40
$1023
Sumando
$1018
$1018

;Resultado de divisin en D
;Actualiza var. global
;Se repite indefinidamente
;Cd. op. de instruccin JMP
;para redireccionar vector de OC2 a nuestra rutina
;Dir. de servicio de rutina asignada por
ensamblador
;Completa instruccin JMP OC2RQ en RAM
;Inicio block de registros
;Enciende convertidor A/D
;Para muestreo continuo del canal AD0
;Configura e inicia las conversiones
;Configura modo TOGGLE en OC2 nicamente
;Limpia alguna interrupcin pendiente de OC2
;Habilita interrupcin para OC2
;Habilita interrupciones internas (subsistemas)
;Para eliminar slo la fuente de interrupcin OC2
;Consulta retardo ponderado actual
;Suma con valor de comparacin anterior en TOC2
;Actualiza valor de siguiente comparacin

Obsrvese que en el peor de los casos en que la comparacin sea vlida justo en
el primer ciclo de la instruccin IDIV (acaparando el control del CPU) y que el retardo
de tiempo ponderado sea en ese momento de 100 ciclos E, consumimos:
40 (restante de IDIV) + 14 (aceptacin de intr.) + 3 (JMP en el vector de intr.) + 3 (JMP hacia
nuestra rutina) + 2 (LDAB inm) + 4 (STAB ext) + 4 (LDD dir) + 6 (ADDD ext) + 5 (STD ext)
= 81

ciclos E, lo que nos da tiempo suficiente para alcanzar a actualizar el registro TOC2
antes de que el contador maestro nos alcance.

92

MINED
Indice11

PROBLEMAS CURSO HC11

II.5 MDULO DE DISPLAY DE CUARZO


PROPSITO: desarrollar un mdulo de manejo de display de cuarzo de
16x2 que reciba un caracter en el acumulador B. El mdulo debe ser capaz de procesar
los siguientes casos:
Retornos de Carro: brincar a la otra lnea y borrarla. Cursor queda en 1er caracter.
BackSpace: retroceder el cursor una posicin y borrar el caracter que se encuentre
ah; si el cursor se encuentra al principio de una lnea, posicionarse
al final de la otra y borrar el ltimo caracter. Cursor queda en la
misma posicin del caracter que se borr.
FormFeed: limpia toda la pantalla.
CANcel: borra toda la lnea donde se encuentre el cursor. Cursor queda en 1er
caracter de la misma lnea.
Caracteres imprimibles: si el cursor se encuentra en el ltimo caracter de una
lnea, se imprime el caracter y el cursor debe brincar al
primer caracter de la otra lnea.
Desarrollar un programa que utilice este mdulo para imprimir los caracteres que se
vayan pulsando en el teclado. El ciclo se debe romper al presionar ESC.
HARDWARE:

+5V

TxD
RxD
GND

HC11

PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7

STRB
PA7

DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7

E
RS
R/W

Vcc

Vee
LCD

10 k

Vss

Para poder utilizar correctamente el mdulo LCD es necesario enviar los siguientes
parmetros de inicializacin:
1. $38: para configurar bus de datos de 8 lneas, 2 lneas en display y caracteres de
5x7.
2. $0F: para encender el display, el cursor, y mostrarlo parpadeando.
3. $01: para limpiar la pantalla.
4. $06: para incremento de cursor (movimiento a la derecha), sin desplazamiento de
display.
Obsrvese que se est utilizando la lnea STRB para generar el pulso de Enable
requerido por el LCD. Debe tener cuidado de que el LCD sea compatible con la seal
MINED 11

Indice93

PROBLEMAS CURSO HC11

STRB (pulso positivo de 2 ciclos de reloj: 1000ns @ fXTAL = 8MHz), ya


que de lo contrario se tendra que implementar una subrutina que
generase la seal requerida por alguna terminal de salida.
El mdulo LCD tiene integrada una memoria RAM y un microcontrolador.
En la memoria RAM se guardan los caracteres que se van escribiendo, y el
microcontrolador se encarga de mostrar en el display la informacin contenida en esta
RAM. La organizacin lgica de la memoria RAM es como sigue:
APUNT
$00

$01

$02

$03

$40

$41

$42

$43

$04

M
$44

...

$0E

$0F

$3F

...

$4E

$4F

$7F

La flecha mostrada simboliza un APUNTador de memoria de datos que


coincide con la posicin del cursor. El display slo muestra una pequea rea de la
memoria RAM (rea sombreada), por esta razn es necesario que al llegar al final de
una lnea se reposicione el cursor al principio de la otra, de no ser as, los caracteres
que se sigan enviando no se visualizarn hasta que se llegue al final del rengln-RAM
y el cursor brinque automticamente a la otra lnea (arreglo de pila circular).
Para detectar cuando se ha alcanzado el final de una lnea, se tendr una imagen
en software (contador global) que represente la posicin actual del cursor, esto es, cada
que se escriba un caracter (o BackSpace) al display, paralelamente se actualizar la
imagen. La lgica del programa consultar el valor de esta imagen para detectar
cuando debe reposicionar el cursor al principio (o al final) de la otra lnea.
Opcionalmente, se puede utilizar la instruccin CGRAM/DDRAM Data Read para
consultar la direccin del APUNTador (posicin cursor), pero esto no es muy
recomendable ya que implica el uso de una lnea extra para controlar la terminal R/W
del LCD, y por otro lado, un control bidireccional del puerto que manejar las lneas
de datos (entradas o salidas).
La instruccin DDRAM Address Set modifica el valor del APUNTador
mediante el operando ADD (bits 0 a 6 de la palabra - instruccin), por lo tanto, se puede
utilizar esta instruccin para posicionar el cursor en cualquier lugar de la pantalla.
Esta instruccin tiene el bit7 en 1, por lo que se suelen referenciar las direcciones de la
pantalla incluyendo a este bit, es decir:
Lnea 1:
Lnea 2:

$80 $8F
$C0 $CF

El valor de la imagen se puede incrementar (envo de carcter) o decrementar


(BackSpace) ciegamente y despus pasar a una etapa de correccin, donde se
detectarn y corregirn los casos en que el cursor haya salido del rea visible.
Grficamente:

94

MINED
Indice11

PROBLEMAS CURSO HC11

$7F

$BF

$80

$81

$82

$83

$C0

$C1

$C2

$C3

$84

$C4

$85

$86

$C5

$C6

$87

$88

$89

$8A

$8B

$8C

$8D

$8E

$8F

$90

$C7

$C8

$C9

$CA

$CB

$CC

$CD

$CE

$CF

$D0

Analizando los casos normales y crticos de la variable imagen:


Valor de la imagen
Envo de...
Antes
Despus
Caracter (incremento)

BackSpace
(decremento)

deseado

$86

$87 (1000 0111)

$87 (1000 0111)

$8F

$90 (1001 0000)

$C0 (1100 0000)

$CF

$D0 (1101 0000) $80 (1000 0000)

$86

$85 (1000 0101)

$80

$7F (0111 1111) $CF (1100 1111)

$C0

$BF (1011 1111) $8F (1000 1111)

$85 (1000 0101)

se pueden observar los siguientes patrones:


Si se trata de un incremento: los bits 7, 5, 3, 2, 1 y 0 permanecen constantes, y el bit
4 se puede utilizar para indicar si los bits 6 y 4 se deben invertir o dejar igual.
Si fue un decremento: los bits 6, 3, 2, 1 y 0 permanecen constantes, mientras los bits
7, 5 y 4 pueden ser alterados. Estos ltimos siempre deben tener 1, 0 y 0
respectivamente.

MINED 11

Indice95

PROBLEMAS CURSO HC11

DIAGRAMA DE FLUJO GENERAL:

LCD

CR ?

Si

Procesar
Retorno

Si

Regresar
Cursor

Si

Borrar
Display

Si

Borrar Lnea
Procesar
Retorno

Si

Imprimir
Caracter

No
BS ?
No
FF ?
No
CAN ?
No
Caracter ?
No

RTS

96

MINED
Indice11

PROBLEMAS CURSO HC11

PROGRAMA:
Imagen

Infinito

Fin
INIT

OtroInit

InitParam
FinInit
RETARDO
Otro1

LCD

SiLin1
MINED 11

EQU
ORG

$00
$B600

;Imagen en software de posicin de cursor

LDX
BSR
BRCLR
LDAB
CMPB
BEQ
BSR
BRA
SWI
FCB

#$1000
INIT
$2E,X $20 Infinito
$2F,X
#27
Fin
LCD
Infinito

;X = Inicio block de registros


;Inicializacin del mdulo LCD
;Espera caracter del SCI
;Lee caracter y limpia bandera RDRF del SCSR
;Caracter recibido = ESC ?

LDAA
STAA
BSET
BCLR
LDY
LDAA
STAA
BSR
INY
CPY
BLO
RTS
FCB

#$80
Imagen
$26,X $80
0,X $80
#InitParam
0,Y
4,X
RETARDO

;Escribe B al LCD inteligentemente


;Retorno al sistema monitor:

#FinInit
OtroInit
$38, $0F, $01, $06

PSHX
#547

;Inicializa cursor en lnea 1, caracter 1


;Configura PA7 como salida (RS de LCD)
;RS = Instruction Input
;Y = dir. parmetros de inicializacin de LCD
;A = parmetro actual
;Escribe dato al LCD (Enable automtico)
;Espera ejecucin de la instruccin
;Y apunta a siguiente parmetro
;Se llego a sgte. parmetro despus del ultimo?
;Si no, sigue enviando parmetros
;Parmetros de inicializacin
;Etiqueta slo para extraer direccin
;Retardo 1.64ms (garantiza instruccin ms
lenta)
;Para retardo de 1.64ms

LDX
DEX
BNE
PULX
RTS

Otro1

PSHA
CMPB
BNE
LDAA
BRSET
LDAA
STAA

;Respaldo de registros modificados


#$0D
;Es un Retorno de Carro?
NoCR
;Si no, sigue consultando qu es?
#$80
;Siempre se posiciona en lnea 1
Imagen $40 SiLin1 ;Deja igual si estaba en lnea 2 (bit6 = 1)
#$C0
;de otra forma, estaba en Lnea1 y pasa a la 2
Imagen
;Actualiza imagen con cursor en otra lnea

Indice97

PROBLEMAS CURSO HC11

NoCR

NoBS

NoFF
SiCANcel

OtroSP

NoCAN

Retornar

98

BRA
CMPB
BNE
DEC
BSET
BCLR
BSR

SiCANcel
#$08
NoBS
Imagen
Imagen %10000000
Imagen %00110000
ACTUALIZA

BSR
BSR
BRA
CMPB
BNE
BCLR
LDAA
STAA
BSR
BRA
CMPB
BNE
BCLR
BSR

ESPACIO
ACTUALIZA
Retornar
#$0C
NoFF
0,X $80
#$01
4,X
RETARDO
Retornar
#$18
NoCAN
Imagen %00001111
ACTUALIZA

LDAA
BSR

#16
ESPACIO

DECA
BNE
BSR
BRA
CMPB
BLO
BSET
STAB

OtroSP
ACTUALIZA
Retornar
#$20
Retornar
0,X $80
4,X

BSR
RETARDO
INC
Imagen
BRCLR Imagen $10
Retornar
LDAA Imagen
EORA #01010000B
STAA Imagen
BSR
ACTUALIZA
PULA

;y luego se borra...
;Es un BackSpace?
;Si no, sigue consultando qu es?
;Decrementa ciegamente la imagen y corrige...
;forzando a 1 el bit7 de imagen y...
;a 0's los bits 5 y 4
;Posiciona cursor fsicamente de acuerdo a
imagen
;Borra caracter enviando un espacio
;Reposiciona cursor
;Es un Form Feed (ALT+12)?
;Si no, sigue consultando qu es?
;RS = Instruction Input
;Cdigo de instruccin Clear Display
;Escribe dato al LCD (Enable automtico)
;Espera ejecucin de la instruccin
;Es un CANcel (ALT+24)?
;Si no, sigue consultando qu es?
;Imagen = 1er caracter, (cualquier lnea)
;Posiciona cursor fsicamente de acuerdo a
imagen
;Para mandar 16 espacios
;Escribe un espacio en posicin de cursor
actual
;Decrementa contador espacios mandados
;Reposiciona cursor al 1er caracter
;Es imprimible (ASCII > 31)?
;Si no, no lo imprime
;RS = Data Input
;Imprime el caracter recibido en B (Enable
auto.)
;40s min. para datos, retardo compatible
;Incrementa ciegamente la Imagen
;Si bit4 = 0, cursor sigui adentro (visible)
;Correccin de posicin cursor:
;Invierte bits 6 y 4
;Reposiciona cursor de acuerdo a Imagen

MINED
Indice11

PROBLEMAS CURSO HC11

RTS
ESPACIO

PSHA
BSET
LDAA
STAA
BSR
PULA
RTS

ACTUALIZA PSHA
BCLR
LDAA
STAA
JSR
PULA
RTS

0,X $80
#$20
4,X
RETARDO

;RS = Data Input


;ASCII del espacio
;Escribe caracter espacio a LCD (Enable auto.)
;40s min. para datos, retardo compatible

0,X $80
Imagen
4,X
RETARDO

;RS = Instruction Input


;Recupera imagen en software
;Posicin cursor = imagen
;Espera ejecucin de la instruccin

Obsrvese que se est utilizando la subrutina ACTUALIZA para posicionar


fsicamente el cursor en la pantalla de acuerdo al valor de la variable global imagen,
sta tendr siempre la ltima posicin de cursor que se deba tener.
La subrutina de RETARDO est calculada para un retardo de tiempo de
1.64ms, que es el tiempo que tarda en ejecutarse la instruccin ms lenta (Clear
Display), con ste valor se cubren los requerimientos de tiempo de todas las
instrucciones del LCD y de la impresin de caracteres (40s).
Opcionalmente, se pudiese consultar la bandera de Busy Flag (BF), la cual corresponde
al bit7 de la palabra leda con la instruccin Busy Flag/Address Read, pero al igual
que en el caso de la instruccin CGRAM/DDRAM Data Read, esto implicara el uso
de una lnea extra para controlar la seal R/W.

MINED 11

Indice99

You might also like