Subido por roman46

DL 3155M24HC11 GT

Anuncio
Always leading the pack
SISTEMAS PROGRAMABLE
Laboratorio Time
DL3155M24HC11
DL3155M24HC11
SISTEMAS PROGRAMABLES
2
DL3155M24HC11
INDICE
GUIA TEORICA:
UNIDAD
1.
Fundamentos de microcomputadoras.
2.
Arquitectura del microprocesador.
3.
Conjunto de instrucciones.
4.
Operaciones con la pila.
5.
Operaciones de entrada y salida.
6.
Programación de la tarjeta DL3155M24HC11.
3
DL3155M24HC11
4
DL3155M24HC11
UNIDAD 1
FUNDAMENTOS DE
MICROCOMPUTADORAS
5
DL3155M24HC11
CONTENIDO
1.1 INTRODUCCIÓN
1.2 TÉRMINO MICROCONTROLADOR
1.3 FUNCIONAMIENTO DEL MICROCONTROLADOR
6
DL3155M24HC11
1.1 INTRODUCCION
Un microprocesador es un circuito electrónico muy complejo responsable de las operaciones
aritméticas y lógicas programadas en una microcomputadora. Esta constituido de cientos de
miles de transistores microscópicos encapsulados dentro de un delgado trozo(chip) de silicio
que no es mayor de algunos milímetros cuadrados. Dicho trozo, está alambrado en un circuito
integrado (chip) normalmente de 40 o más interconexiones entre el CI y el chip.
Los miles de transistores que componen el microprocesador están configurados para formar
diferentes clases de circuitos dentro del chip. Desde el punto de vista, aprendizaje para la
operación del microprocesador, los circuitos más importantes son los registros, contadores y
decodificadores. En esta unidad, usted aprenderá como esos circuitos trabajan juntos para
llevar a cabo tareas simples, pero útiles.
Además de los circuitos estándar, característicos de los microprocesadores, el MC68HC11 que
usted aprenderá a programar, contiene otros circuitos. Se incluye internamente Memoria de
Sólo Lectura (ROM), Memoria de Acceso Aleatorio (RAM), Memoria de Sólo Lectura
Programable y Borrable Eléctricamente (EEPROM), una Interface Periférica Serial (SPI), una
Interface de Comunicaciones Serie (SCI), un Convertidor Analógico-Digital (A/D), Sistema de
Temporización(timer´s) y algunos otros usados principalmente en aplicaciones de interface.
7
DL3155M24HC11
1.2 EL TERMINO MICROCONTROLADOR
Un microprocesador es un dispositivo lógico que es usado en sistemas electrónicos digitales.
Pero, previamente estableceremos una diferencia entre microprocesador y microcontrolador(de
acuerdo a sus características podemos decir que también es llamado una
microcomputadora).
La unidad microprocesadora o CPU, es un elemento lógico complejo que lleva a cabo
operaciones aritmético/lógicas y de control. Comúnmente esta encapsulado en un solo circuito
integrado CI.
Un microcontrolador contiene un microprocesador, además de otros circuitos, tales como
dispositivos de memoria para almacenamiento de información, adaptadores de interface para
conectarse a señales externas y un reloj que actúa como temporizador maestro del sistema.
La figura 1-1 muestra un microcontrolador(recuerde que se menciono que tambien es llamada,
una microcomputadora) con los dispositivos basicos he interconectados entre internamente,
aplicandosele solo una señal de reloj.
Reloj
Unidad
Microprocesadora
memoria
memoria
Interfaz
microcomputadora
I/O
Dispositivo de
entrada/salida
Fig. 1-1. Arquitectura básica de un Microcontrolador(microcomputadora).
La microcomputadora está integrada por los componentes ubicados dentro de la línea
punteada. El chip MC68HC11 usado en este curso, contiene esas características en un solo
chip de modo que se hace referencia a una unidad microcomputadora o CPU.
Todo lo situado fuera de la línea punteada en la figura 1-1 se considera como la parte que
permite la interfaz con señales de entrada y salida externas, todas las microcomputadoras
deben tener algún medio de comunicarse así. La información recibida por la
microcomputadora, que procede de señales externas, se le conoce como datos de
entrada(input data). La información transmitida al exterior se considera como datos de
salida(output data). La información puede llegar de dispositivos semejantes a lectoras de cinta
de papel, transductores de varios tipos, switches mecánicos, teclados o aún de otras
computadoras.
8
DL3155M24HC11
Concepto De Programa Almacenado
Una microcomputadora es capaz de llevar a cabo muchas instrucciones distintas. Puede sumar
y restar números, llevar a cabo operaciones lógicas, etc. Puede leer información desde un
dispositivo de entrada y transmitir información a un dispositivo de salida. De hecho, depende
del microprocesador usado, el numero de instrucciones que el micro puede ejecutar pueden ser
100 o más según sea el caso. Más aún para conformar operaciones mucho más complejas se
puede combinar dos o más operaciones individuales.
La compuadora solo recibe instrucciones y las ejecuta. Se esclarece la aplicación y se le dan
las operaciones y el orden en que va a llevarlas a cabo. Dichas operaciones se les llama:
instrucciones. Las más comunes son la de suma, sustracción, cargar registro índice, almacenar
acumulador, de paro, etc., etc.
Un grupo de instrucciones que permiten a la computadora efectuar una tarea específica, se
llama programa. Y es el programador quién escribe dichas instrucciones.. Generalmente, la
longitud de un programa es proporcional a la complejidad de la tarea que la computadora debe
efectuar. Un programa para sumar una lista de números requiere sólo una docena de
instrucciones. Por otro lado, un programa para controlar todos los semáforos de una ciudad
chica puede requerir miles de instrucciones.
Una computadora es frecuentemente comparada con una calculadora, donde se le dice qué
hacer desde el teclado. Aún calculadoras baratas pueden efectuar algunas operaciones
comparables con instrucciones de computadora. Oprimiendo las teclas correctas, usted puede
instruir a la calculadora para sumar, restar, multiplicar, dividir y limpiar la pantalla. Con la
calculadora, usted puede sumar una lista de números tan rápidamente como pueda introducir
los números y las instrucciones. En donde, la operación está limitada por la velocidad y
precisión del operador.
Desde el principio, los diseñadores de computadoras reconocieron que es el operador que en
ocasiones hace lento el proceso de cómputo. Para solucionar esto fue desarrollado el concepto
de programa almacenado. Usando esta aproximación, el programa es almacenado en la
memoria de la computadora. Supongamos por ejemplo, que se tienen 20 números que serán
manipulados por un programa que consta de 100 instrucciones. Supongamos ahora que se
generarán 10 respuestas en el proceso.
Antes que inicie cualquier proceso, el programa de 100 instrucciones más los 20 números son
cargados en memoria. Seguidamente, se apartan 10 localidades de memoria reservadas para
las respuestas. Sólo entonces se permite que la computadora ejecute el programa. El tiempo
de ejecución puede ser menor a un milisegundo. Compare este tiempo con el que podría tomar
introducir manualmente las instrucciones y los números, uno a la vez mientras la computadora
está corriendo. Esta operación automática es una característica que distingue a la computadora
de la simple y no programable calculadora.
Palabras de Computadora
En terminología de computadoras, una palabra es un grupo de dígitos binarios que pueden
ocupar una localidad de almacenamiento. Aunque la palabra está formada por dígitos
9
DL3155M24HC11
individuales, la computadora los maneja como una unidad. Así, la palabra es la unidad de
información fundamental usada por la computadora.
Una palabra puede ser un número binario que es manejado como dato o puede ser una
instrucción que dice a la computadora qué operación llevar a cabo. Puede ser un carácter
ASCII representando una letra del alfabeto. Finalmente, una palabra puede ser una dirección
que dice a la computadora dónde localizar un dato.
Longitud de Palabra
Una de las más importantes características de cualquier microprocesador es qué la longitud de
palabra pueda manejarse, esto se refiere a la longitud en bits de la unidad fundamental de
información.
Aunque actualmente existen muchos microprocesadores de 16 y 32 bits, una longitud de
palabra muy común continúa siendo de 8 bits. En esas unidades, los números, direcciones,
instrucciones y datos son representados por números binarios de 8 bits. El número binario más
pequeño es 0000 00002 o 0016; el mayor es 1111 11112 o FF1 6. En decimal, este rango es
desde 0 hasta 25510. Así, un número binario de 8 bits puede tener uno de 256 10 valores.
Una palabra de 8 bits puede especificar números positivos entre 0 y 25510. O, si la palabra de 8
bits es una instrucción, puede especificar 25610 posibles operaciones. Es también posible que
la palabra de 8 bits represente un carácter ASCII. En éste caso puede ser una letra del
alfabeto, signo de puntuación o numero. Como se puede ver, la palabra de 8 bits puede
representar cosas diferentes, dependiendo de cómo es interpretada. El programador debe
asegurarse de que un carácter ASCII o número binario no sea interpretado como una
instrucción.
Aunque la longitud de palabra de 8 bits es muy popular, se emplean cada vez con mayor
frecuencia las de 16 y 32 bits y, eventualmente, la de 4 bits por el bajo costo del dispositivo.
También en los nuevos microcontroladores de tipo RISC, se emplean longitudes de 12 y 14
bits. Las longitudes mayores permiten trabajar con números grandes usando una sola palabra.
Por ejemplo, una palabra de 16 bits puede representar números hasta 6553610. Sin embargo,
esta capacidad agrega mayor complejidad al microprocesador. De cualquier modo,
restringiremos nuestra discusión a las unidades de 8 bits.
Debe ser puntualizado que la longitud de palabra de 8 bits no significa no poder manejar mas
que números debajo de 25610. Pero en caso de ser necesario, se deberán usar dos o más
palabras para representar números grandes.
La palabra de 8 bits define el tamaño de muchos componentes diferentes en el sistema
microprocesador. Por ejemplo, muchos registros importantes tendrán 8 bits de capacidad.
La memoria deberá ser capaz de mantener números grandes con palabras de 8 bits; y el bus
empleado para transferir palabras de datos consistirá en conductores paralelos de 8.
Aun los microprocesadores de 16 bits usan segmentos de datos de 8 bits, en muchas
aplicaciones; como ejemplo, las entradas de teleimpresores frecuentemente consisten de
caracteres ASCII de 8 bits. Para distinguir esos segmentos de 8 bits de información, de los de
16 bits o mayores, hay un termino de uso general: el byte, que es un grupo de 8 bits, manejado
10
DL3155M24HC11
como una sola unidad. Así, en los microprocesadores de 8 bits, una palabra consiste de un
byte, en tanto que en los de 16 bits, consiste en 2 bytes. La figura 1-2 ilustra estos puntos.
Fig. 1-2 Palabras y bytes
La figura 1-2 también muestra como están numerados los bits que componen la palabra de
computadora. El bit menos significativo (LSB) esta a la derecha, mientras que el bit más
significativo (MSB) a la izquierda. En la palabra de 8 bits, estos se numeran del 0 al 7, de
derecha a izquierda; en la palabra de 16 bits, la numeración va del 0 al 15, en el mismo
sentido. Los 8 bits de la derecha son llamados byte de orden bajo y los de la izquierda byte de
orden alto.
11
DL3155M24HC11
1.3 FUNCINAMIENTO DEL MICROCONTROLADOR
El microprocesador puede tener una docena o más de registros que varían en tamaño desde 1
bit hasta 16 bits. Puede tener docenas de instrucciones, muchas de las cuales pueden
implementarse de diferentes maneras. Puede tener buses de datos, direcciones y control. En
suma, el microprocesador puede parecer desde afuera, complicado para programarse por ser
un micro desarrollado.
Un diagrama de bloques de una microcomputadora básica se muestra en la figura 1-3, la cual
muestra un microprocesador, la memoria y la circuitería de E/S. Por simplicidad, ignoraremos
los circuitos de E/S en ésta unidad. Podemos hacer esto suponiendo que el programa y los
datos se hallan en memoria y que los resultados se mantendrán en registros o en memoria. Al
final de este curso, se esclarecerá el movimiento de datos externos desde o hacia el micro,
dichos procedimientos se estudiarán en una de las ultimas unidades. Esto nos permitirá
concentrarnos en el microprocesador y la memoria.
Fig. 1-3. La Microcomputadora Básica
12
DL3155M24HC11
La unidad Microprocesadora
La unidad microprocesadora es mostrada en detalle en la figura 1-4. Por simplicidad, sólo se
incluyen los principales registros y circuitos. En nuestra unidad elemental, muchos de los
contadores, registros y buses son de 8 bits, por lo que pueden acomodar palabras de ese
tamaño.
CLOCK
AND
CONTROL
LINES
Fig. 1-4. Un microprocesador Elemental
13
DL3155M24HC11
Uno de los circuitos más importantes en el procesador es la unidad lógica-aritmética (ALU). Su
propósito es llevar a cabo operaciones lógicas o aritméticas sobre los datos que le son
entregados. La ALU tiene dos entradas principales. Una viene desde un registro llamado
acumulador, y la otra viene desde el registro de datos. La ALU puede sumar los dos datos de
entrada juntos, o puede restar una de la otra. También puede llevar a cabo algunas
operaciones lógicas, las cuales discutiremos en unidades posteriores. La operación que ejecute
la ALU está determinada por señales en las varias líneas de control.
Generalmente, la ALU recibe dos números binarios de 8 bits desde el acumulador y el registro
de datos como se ilustra en la figura 1-5A. Ya que se ejecuta alguna operación sobre estas
palabras de datos, las dos entradas se llaman operandos.
Fig. 1-5. Unidad Lógica Aritmética
14
DL3155M24HC11
Los dos operandos pueden ser sumados, restados o comparados en alguna forma, y el
resultado de la operación vuelto a almacenar en el acumulador. Por ejemplo, suponga que se
van a sumar dos números (7 y 9). Antes que los números puedan ser sumados, un operando
(9) es colocado en el acumulador, el otro (7) es colocado en el registro de datos. Se activa la
línea de control correspondiente para implementar la operación de suma. La ALU suma los dos
números, enviando su suma (1610) a la salida. La figura 1-5B muestra el proceso; la suma es
almacenada en el acumulador, reemplazando el operando que originalmente se hallaba ahí.
Nótese que todos los números están en forma binaria.
El acumulador es el más útil de los registros. Durante las operaciones aritméticas y lógicas
lleva a cabo una función dual. Antes de la operación, guarda uno de los operandos. Después
de la operación, guarda la suma resultante, diferencia o respuesta lógica. El acumulador recibe
algunas instrucciones en cada microprocesador. Por ejemplo, la instrucción “cargar
acumulador” causa que el contenido de alguna localidad específica de memoria sea transferida
al acumulador. La instrucción “almacenar acumulador” causa que el contenido del acumulador
sea almacenado en alguna localidad específica de memoria.
El registro de datos es una localidad temporal de almacenamiento para los datos que van o
vienen sobre el bus de datos. Por ejemplo, guarda una instrucción mientras es decodificada.
También, guarda un byte de datos mientras la palabra es almacenada en memoria.
La MPU también contiene algunos otros registros y circuitos importantes: el registro de
direcciones, el contador de programa, el decodificador de instrucciones y el controladorsecuencial. Estos son mostrados en la figura 1-4.
El registro de direcciones es otra localidad de almacenamiento temporal. Guarda la dirección
de la localidad de memoria o dispositivo de E/S que es usada en la operación que se está
llevando a cabo.
El contador de programa controla la secuencia en la que las instrucciones serán ejecutadas en
un programa. Normalmente, hace esto contando en secuencia 0, 1, 2, 3, etc.
En un instante dado, la cuenta indica la localidad en memoria de la que debe tomarse el
siguiente byte de información.
El decodificador de instrucciones. Después que una instrucción es sacada de la memoria y
colocada en el registro de datos, la instrucción es decodificada por éste circuito. El
decodificador examina el código de 8 bits y decide que operación debe ser llevada a cabo.
El controlador-secuenciador produce una variedad de señales de control para ejecutar la
instrucción. Ya que cada instrucción es diferente, se produce una combinación diferente de
señales de control para cada instrucción. Este circuito determina la secuencia de eventos,
necesaria para completar la operación descrita por la instrucción.
Más tarde verá como estos circuitos trabajan juntos para ejecutar programas simples. Primero,
demos en vistazo a la memoria de nuestra microcomputadora.
15
DL3155M24HC11
MEMORIA
Un diagrama simplificado de memoria lectura/escritura de 256 palabras a 8 bits, que se usa
nuestra microcomputadora hipotética se muestra en la figura 1-6. La memoria consiste de 25610
localidades, cada una de las cuales puede almacenar una palabra de 8 bits. Este tamaño de
memoria es referido frecuentemente como 256 X 8. Una memoria de lectura/escritura es
aquella en la que los datos pueden ser escritos y leídos con igual facilidad.
Fig. 1-6. Memoria de Acceso Aleatorio
(RAM)
Dos buses y un número de líneas de control conectan la memoria con la unidad del
microprocesador. El bus de direcciones puede contener un número binario de 8 bits, que puede
especificarse como 25610 localidades, desde la MPU al decodificador de direcciones de
memoria. Cada localidad tiene asignado un número único llamado dirección. La primera
localidad tiene la dirección 0. La última localidad tiene la dirección 25510, 1111 1111 en binario
o FF en hexadecimal. Una localidad específica es seleccionada colocando su dirección de 8
bits en el bus de direcciones. El decodificador de direcciones, después de decodificar el
número de 8 bits, selecciona la localidad de memoria apropiada.
La memoria también recibe una señal de control de la MPU. Esta señal dice a la memoria que
operación llevar a cabo. Una señal READ indica que la localidad seleccionada será leída. Esto
implica que el número de 8 bits contenido en la localidad seleccionada debe ser colocado en el
bus de datos, donde puede ser transferido a la MPU.
16
DL3155M24HC11
El procedimiento se ilustra en la figura 1-7. Considere que la MPU va a leer el contenido de la
localidad de memoria 0416. Suponga que el número almacenado ahí es 9716.
Primero, la MPU coloca la dirección 0416 en el bus de dirección. El decodificador reconoce la
dirección y selecciona la localidad de memoria apropiada. Segundo, la MPU envía una señal
READ a la memoria, indicándole que el contenido de la localidad seleccionada esta siendo
colocado en el bus de datos. Tercero, la memoria responde colocando el número 971 6 en el bus
de datos. La MPU puede entonces tomar el número y usarlo como sea necesario.
Fig. 1-7. Leyendo desde memoria
Debe señalarse que el proceso de lectura de memoria no altera el contenido de la localidad
leída. Esto es, el número 9716 permanece en la localidad de memoria 04 después de la
operación de lectura. Esta característica se conoce como lectura no destructiva (NDRO). Es un
rasgo importante puesto que permite leer el dato cuanto sea necesario.
La MPU también puede llevar a cabo la operación de escritura, WRITE. Este procedimiento se
ilustra en la figura 1-8. Durante esta operación, una palabra de datos es tomada del bus de
datos y colocada en la localidad seleccionada. Por ejemplo, veamos como la MPU almacena el
número 5216 en la localidad 03. Primero, la MPU coloca la dirección 03 en el bus de
direcciones. El decodificador responde seleccionando la localidad de memoria 03. Segundo, la
MPU coloca el número 5216 en el bus de datos. Tercero, la MPU envía la señal WRITE.
17
DL3155M24HC11
La memoria responde almacenando el número presente en el bus de datos en la localidad
seleccionada. Esto es, 5216 es almacenado en la localidad 03. El contenido previo se pierde al
haber sobre-escritura.
Fig. 1-8. Escribiendo en memoria
El nombre aceptado para éste tipo de memoria es el de Memoria de Acceso Aleatorio (RAM).
“Acceso Aleatorio” significa que todas las localidades de la memoria son igualmente accesibles.
Sin embargo, en años recientes, la RAM ha llegado a ser memoria de acceso aleatorio de
lectura/escritura. Como usted verá más adelante, hay otro tipo de memoria llamado memoria de
sólo lectura (ROM). También es accesible aleatoriamente, pero no tiene la capacidad de
escritura. De esta manera es llamada ROM, pero nunca RAM.
Secuencia de Búsqueda – Ejecución
Cuando la microcomputadora ejecuta un programa, este lleva una secuencia fundamental que
es repetida una y otra vez. Recuerde que un programa consiste de instrucciones que dicen a la
microcomputadora que operaciones efectuar exactamente. Estas instrucciones deben ser
almacenadas ordenadamente en la memoria. Deben ser extraídas de la memoria, una cada
vez, por la MPU. Entonces pueden ser ejecutadas.
La operación de la microcomputadora puede ser dividida en dos fases, como se muestra en la
Figura 1-9. Cuando se enciende el microprocesador entra a la fase de búsqueda. Durante esta
fase, una instrucción es tomada de la memoria y decodificada por la MPU.
Una vez que la instrucción es decodificada, la MPU conmuta a la fase de ejecución. En esta
fase, la MPU efectúa la operación indicada por la instrucción.
18
DL3155M24HC11
Fig. 1-9. Secuencia de busqueda-ejecución
La fase de búsqueda siempre consiste en la misma serie de operaciones. Por ello siempre
toma el mismo lapso de tiempo. Sin embargo, la fase de ejecución puede consistir de
diferentes secuencias de eventos, dependiendo de que tipo de instrucción se ejecuta. Así, la
fase de ejecución puede variar considerablemente de una instrucción a otra.
UN PROGRAMA DE MUESTRA.
Ahora que usted tiene una idea general de los registros y circuitos que se encuentran en una
microcomputadora, examinaremos cómo trabajan juntos, para ejecutar un programa sencillo.
Aquí estamos interesados sobre todo en la forma en que la microcomputadora opera; por lo
tanto, el programa será muy trivial.
Veamos como la computadora resuelve un problema como 7 + 10 =?. Aunque esto puede
parecer un problema increíblemente fácil, la computadora por si sola aún con todos sus
recursos, no tiene podrá resolverlo.
Antes que usted pueda escribir un programa debe saber que instrucciones están disponibles
entre usted y la computadora. Cada microprocesador tiene un conjunto de instrucciones.
Suponga que después de examinar dicho conjunto, usted decide que son necesarias tres
instrucciones para resolver el problema. Esas tres instrucciones y una descripción de qué
hacen se ilustran en la Figura 1-10.
NOMBRE
Cargar
acumulador
MNEMONICOS
OPCODE
LDA
1000 01102 o 8616
Add
ADD
1000 10112 o 8B16
Stop
STOP
1100 11112 o CF16
DESCRIPCION
Cargar el contenido de la siguiente
localidad de memoria en el acumulador
Sumar el contenido de la siguiente
localidad de memoria al contenido del
acumulador. Deja el resultado en el
acumulador
Detiene todas las operaciones
Fig. 1-10. Instrucciones usadas para el programa ejemplo.
La primera columna de la tabla, nos da el nombre de la instrucción. Cuando escribimos
programas, no es conveniente incluir el nombre completo. Por esta razón, cada instrucción
tiene una abreviatura o ayuda a la memoria llamada mnemónico. Los mnemónicos se dan en
la segunda columna. La tercera columna es la de códigos de operación u opcodes. Este es el
19
DL3155M24HC11
número binario que la computadora y el programador usan para representar la instrucción. El
opcode se da tanto en forma binaria como en hexadecimal. La columna final describe
exactamente que operación es llevada a cabo cuando se ejecuta la instrucción. El tener
presente esta tabla, será muy útil ya que empleará estas instrucciones una y otra vez.
Suponga que desea sumar 7 a 1010 y dejar la suma en el acumulador. El programa es muy
elemental. Primero debe cargar 7 en el acumulador con la instrucción LDA. Enseguida, sumará
1010 al acumulador usando la instrucción ADD. Finalmente, detendrá la computadora con la
instrucción STOP.
Usando los mnemónicos y la representación decimal de los números a sumar, el programa se
verá así:
LDA 7
ADD 10
STOP
La microcomputadora no puede entender mnemónicos o números decimales, solo interpreta
números binarios. Así, debe escribir el programa como una secuencia de números binarios.
Puede hacer esto reemplazando cada mnemónico por su correspondiente opcode y cada
número decimal por su contra parte binaria.
Entonces:
LDA 7
se convierte en
1000 0110
opcode de la
Figura 1-10
0000 0111
representación
binaria de 7
ADD 10 se convierte en
1000 1011
opcode de la
Figura 1-10
0000 1010
representación
binaria de 1010
Y:
Finalmente,
STOP
se convierte en
1100 1111
opcode de la
Figura 1-10
Note que el programa consiste de tres instrucciones. Las primeras dos instrucciones tienen dos
partes: un opcode de 8 bits seguido de un operando de 8 bits. Los operandos son los números
que serán sumados (7 y 1010).
Recuerde que el microprocesador y la memoria trabajan con palabras de 8 bits o bytes. Puesto
que las dos primeras instrucciones consisten de 16 bits de información, deben ser divididas en
dos bytes de 8 bits antes de ser almacenadas en memoria. De esta manera, cuando el
programa es almacenado en memoria, se ve así:
1a. Instrucción
2a. Instrucción
1000 0110
0000 0111
1000 1011
0000 1010
Opcode de LDA
Operando (7)
Opcode de ADD
Operando (1010)
20
DL3155M24HC11
3a. Instrucción
1100 1111 Opcode de STOP
Se requieren cinco bytes de memoria. Puede almacenar estos cinco bytes de programa en
cualquier lugar de la memoria que desee. Suponiendo que los almacena en las primeras cinco
localidades, la memoria se vería como lo muestra la Figura 1-11.
Fig. 1-11. El programa en Memoria
Note que cada localidad de memoria tiene dos números binarios asociados consigo. Uno es su
dirección, el otro, su contenido. La dirección es fija. Se establece cuando se construye la
microcomputadora. Sin embargo, el contenido cambia cada vez que se almacenan nuevos
datos.
21
DL3155M24HC11
UNIDAD 2
ARQUITECTURA DEL
MICROCONTROLADOR
22
DL3155M24HC11
CONTENIDO
2.1 ARQUITECTURA DE MICROPROCESADORES
2.2 ARQUITECTURA DEL MC68HC11
2.3 MODELO DE PROGRAMACION DEL MC68HC11
2.4 DIAGRAMA A BLOQUES DEL MC68HC11
23
DL3155M24HC11
2.1 ARQUITECTURA DE MICROPROCESADORES
En el lenguaje coloquial de las computadoras, la palabra arquitectura se usa para describir el
estilo de construcción de la computadora, su tamaño y arreglo de registros, su configuración de
buses, etc.
La arquitectura de nuestro microprocesador hipotético se muestra por última vez en la Figura 21 Usted debe familiarizarse con esta arquitectura.
Fig. 2-1. Arquitectura del microprocesador hipotético
24
DL3155M24HC11
La única razón para mostrarle los detalles del modelo es darle una idea de lo que se halla en el
interior del circuito integrado. En un microprocesador moderno, la estructura interna es
frecuentemente tan compleja que al intentar analizarlo tan de cerca, nos llenaría en detalles,
creando confusión. Por esta razón, un modelo de programación se usa cuando se hace una
introducción a un microprocesador por vez primera. En el modelo de programación el énfasis va
más allá. Cualquier registro o circuito que no pueda ser controlado directamente por el
programador, simplemente se ignora. Por ejemplo, considere el registro de datos. No hay
instrucciones que den al programador control directo sobre ese registro. Esto es, no hay
instrucciones como Cargar el Registro de Datos, Almacenar el Registro de Datos, etc. Toda la
actividad del registro de datos, es controlada estrictamente por la MPU. Así, el programador
puede ignorar la existencia del registro. Ocurre lo mismo para el registro de direcciones, el
decodificador de instrucciones, el controlador-secuenciador, etc. Por lo tanto, el modelo de
programación de nuestra MPU hipotético puede representarse como en la Figura 2-2. Este
diagrama simple es suficiente para muchas aplicaciones de programación ya que muestra
todos los registros que pueden ser controlados directamente por el programa.
7
0
ACUMULADOR
7
0
CONTADOR DE PROGRAMA
N Z
V C
REGISTROS CODIGO DE CONDICIÓN
Fig. 2-2. Modelo de programación del MPU hipotético
Por definición, una microcontrolador consiste de una Unidad Central de Proceso (CPU),
Memoria de Solo Lectura (ROM), y circuitos de control y temporización. Puesto que el chip
MC68HC11 contiene estos y otros circuitos y características, será referido técnicamente como
la microcomputadora o MPU. Esto es así porque estamos interesados principalmente en la
programación de la CPU de la microcomputadora.
El 68HC11 es un miembro de la familia de microprocesadores MC6800, Motorola que comenzó
en 1974 con la introducción del MC6800. Otros miembros de esta familia incluyen a los
microprocesadores MC6801 y MC6808, además de otros. Una ventaja del concepto de “familia”
de chips, es que muchas de las instrucciones usadas para programar uno de los micros pueden
usarse para programar otros de la familia. En este sentido se dice que el 68HC11 es totalmente
compatible con los otros miembros de la familia. Por ello comparte similitudes de diseño y la
habilidad de entender y ejecutar instrucciones del conjunto de instrucciones de la familia 6800.
Como resultado de esta compatibilidad entre miembros de la familia, un programa en lenguaje
ensamblador escrito para otro microprocesador, correrá casi sin problemas en el MC68HC11; lo
que nos indica que las principales diferencias entre los miembros de la familia tienen que ver
más con el hardware. Esto incluye a los circuitos de soporte interconstruidos, como relojes,
temporizadores, memoria RAM, memoria ROM, memoria EEPROM, y otros circuitos de soporte
para la CPU. La CPU del 68HC11 es básicamente una extensión del diseño de la CPU
MC6800/6801. Además de la posibilidad de ejecutar las 71 instrucciones del MC6800, el
68HC11 tiene un mapa “paginado” de opcodes con un total de 91 nuevos opcodes. Finalmente,
puesto que muchos términos y conceptos que aprenderá se aplican a otros microprocesadores,
25
DL3155M24HC11
el aprendizaje de este material lo habilitará para entender y trabajar con una variedad de
microprocesadores de 8 bits, además del 68HC11.
2.2 ARQUITECTURA DEL MC68HC11
Los 68HC11 son fabricados por Motorola y se diseñan para atender las necesidades
particulares del un sistema y para aplicaciones especializadas de los mercados. Las
aplicaciones de sistemas con microprocesadores requieren un microprocesador que es
expandible y tiene una capacidad de direccionamiento relativamente grande. Por otro lado, las
aplicaciones especializadas (automóviles, aparatos, etc.) requieren un dispositivo single-chip
autónomo que contiene en su interior CPU, memoria, y capacidades de I/O. Dicho dispositivo
se llama a menudo un microprocesador single-chip.
Como usted está a punto de descubrir, los 68HC11 pueden configurarse de dos maneras
diferentes para los dos posibles mercados de aplicaciones. Alternativamente, los 68HC11
pueden configurarse en un modo del single-chip, donde actúa como un microprocesador simple
que usa su propia memoria interna limitada y capacidades de I/O. Ahora, hechemos un vistazo
más a detalle de este dispositivo flexible.
Estructura de chip y características internas
Un diagrama a bloques de la estructura del 68HC11 se muestra en la figura 2-3. Como usted
puede ver, hay varias funciones integradas en el dispositivo. Las funciones interiores del chip le
darán una preparación para el estudio extenso, a lo largo de éste viaje.
Fig. 2-3
Estructura de hardware interna en el 68HC11
CPU
6800
CONVERTIDOR
A/D
RAM
256 x 8
68HC11
I/O
PARALELO
CLOCK
ROM
8k x 8
I/O
SERIAL
EEPROM
512 x 8
TIMER
PROGRAMAB
LE
26
DL3155M24HC11
EL CPU
Los 68HC11 contiene una versión mejorada de los 6800 Motorola. Los registros del CPU se
muestran en Figura 2-4.
7
A
0
7
B
0
15
D
0
Acumulador de 8 bit, A y B,
Acumulador D
15
IX
0
Registro Indice X
15
IY
0
Registro Indice Y
15
SP
0
Apuntador de Pila (Stack Pointer)
15
PC
0
7
Contador de Programa (Program
Counter)
0
S X H I N Z V C
Registro de código de condición.
Acarreo
Sobreflujo
Zero
Negativo
Mascara de
interrupción- IRQ
Medio acarreo o
semiacarreo
Mascara de interrupción
XIRQ
STOP deshabilitado
Fig. 2-4
Los registros del CPU 68HC11
EL RELOJ INTERNO
El 68HC11 emplea un circuito del reloj interno que opera por un cristal externo. El circuito de
reloj interno divide la frecuencia del cristal externa entre cuatro, para obtener la frecuencia de
reloj. Los 68HC11 pueden operarse arriba de 2.1 MHz usando un cristal de 8.4 MHz.
27
DL3155M24HC11
RAM INTERNA
La RAM interna del 68HC11 es 256 bytes. Esta RAM empieza en la dirección 000016 y se
extiende a la dirección 00FF16.
ROM INTERNA
La ROM interna de 12K byte es una programación mascarable, localizada en las direcciones
E00016 a FFFF16. Por supuesto, dado que la ROM es no mascarable, ud debe proporcionar un
programa hacia el chip del fabricante para ser mascarado dentro de la ROM.
EPROM INTERNA
Recuerde que la memoria EEROM es principalmente de lectura. Es decir, puede ser de
escritura y lectura bajo un control de programa. Además, EEROM es no-volátil, siendo atractiva
para usarse al final de un programa largo en el almacenamiento de los datos. Los 68HC11
contienen 512 bytes de EEROM interna localizados en la dirección B60016 a B7FF16. La
información puede escribirse hacia y leída desde la EPROM vía un registro de control interno
especial llamado el registro PPROG.
I/O PARALELO
El 68HC11 proporciona 38 líneas I/O paralelas para interfaces externas, dependiendo de su
modo de operación. La mayoría de estas líneas pueden programarse como entradas o salidas,
por un registro interno asociado, dirección datos. Muchas de las líneas paralelas I/O, también
sirven como una función dual para dar otras características de I/O.
I/O SERIE
Las I/O serie es comunicación y transferencia de datos, un bit en un momento, contra I/O
paralelo qué involucra comunicación datos de multi-bit. Brevemente, hay dos tipos de
comunicaciones serie: asíncrono y síncrono. El 68HC11 tienen internamente la capacidad para
dar ambos tipos de comunicación I/O serie. La sección I/O serie asíncrona del chip 68HC11 se
llama la Interface de Comunicaciones Serie, o SCI. La sección I/O serie síncrona se llama la
Interface Periférica Serie, o SPI.
EL TIMER INTERNO PROGRAMABLE
Los timers programables se utilizan para dar retardos de tiempo, generar señales y pulsos de
control, mide tiempos entre eventos externos, y mide la duración de pulsos externos, sólo para
mencionar algunas de sus aplicaciones.
EL CONVERTIDOR DE A/D INTERNO
El mundo real es analógico, de tal modo que si se desea sensar y controlar los eventos que en
él existen, debe convertirse la señal analógica a señal digital, y entregarla al MPU. Éste es el
trabajo de un convertidor analógico a digital, o A/D. El 68HC11 incluye un convertidor de A/D de
28
DL3155M24HC11
8 canales que pueden usarse para convertir ocho señales analógicas separadas en un valor
digital de 8-bit y procesar por el MPU.
LAS LÍNEAS DE LA CONEXIÓN DEL 68HC11
Para interconectar el microprocesador a los circuitos de soporte o dispositivos externos, es
importante estar familiarizado con la asignación de los pines, las líneas del control, etc. Por ello,
antes de iniciar los comentarios al respecto, necesitamos esta al tanto de las opciones de
configuración generales. El 68HC11 es un dispositivo muy complejo. Primeramente, existen dos
modos de que puede configurarse, como: single-chip o multiplexado. Cuando esta en su modo
de single-chip(chip sencillo), el 68HC11 es un microprocesador completamente autónomo, con
su propio componentes internos como el CPU, memoria y capacidades I/O. Configurado así, en
modo single-chip, es sumamente ventajoso cuando se emplea para las aplicaciones dedicadas
o especializadas, como en instrumentación, y automóviles, sólo para mencionar unos. De
hecho, algunos los fabricantes del automóvil incorporan el modo de single-chip del 68HC11, en
sus productos. Cuando se configura en su modo de single-chip, no hay datos externos o bus de
direcciones disponible, por consiguiente, usted no puede conectar un dispositivo periférico
como un A/D al 68HC11. Solo puede usar las capacidades interiores del dispositivo.
Cuando el 68HC11 se configuran en su modo multiplexado, la configuración de sus pines se
cambia para proporcionar un bus de datos externo de 8-bits y un bus de direcciones de 16-bits.
Como resultado, usted puede interconectar memoria externa y dispositivos periféricos I/O al
68HC11 en este modo.
La figura 2-5 muestras un diagrama funcional de los pines del 68HC11 cuando se configura en
su modo multiplexado. La figura 2-5, muestra la versión del 68HC11 en su paquete cuadrado, o
quad de 52-pines. Hay también otra versión de que es un paquete de doble línea o DIP de 48pines. Observe el punto u orificio, marcado al centro del dispositivo. Esta marca se usa para
localizar el pin 1. De este punto, el pin numerando desde el pin 1 al pin 52, se ubica en sentido
contrario a las manecillas del reloj.
Pin 1, es etiquetado como Vss. Éste es el pin de tierra.
Pines 2 y 3 se etiquetan como MODB y MODA, respectivamente. Estos dos pines se usan para
configurar el 68HC11 en su modo operación durante un operación reset. La lógica aplicada a
estos pins configura el chip de acuerdo a la tabla siguiente:
Tabla 1-1
Configuración del modo de operación
MOD B
1
1
MOD A
0
1
Modo Seleccionado
Single-chip
Multiplexado
29
DL3155M24HC11
LINEAS
DEL
CONVERTIDOR
LINEAS DEL A/D
BUS DE DATOS
Y PARTE BAJA
DEL BUS DE
DIRECCIONES
PARTE SUPERIOR
DEL BUS DE
DIRECCIONES
MC 68HC11
52-FN
I/O
SERIE Y PARALELO
TIMER PROGRAMABLE
Y I/O PARALELO
Fig. 2-5
Pines del 68HC11 asignados en configuración modo multiplexado.
Pin 4 se etiqueta AS, correspondiendo a Address Strobe. La línea AS es una línea de salida
que indica que el 68HC11 han generado una dirección en el bus de direcciones. Cuando la
línea de AS es alta, una dirección dentro del bus de direcciones está presente. Cuando AS es
bajo, los datos están en el bus de datos. Usted averiguará brevemente que el 68HC11
multiplexa medio bus de direcciones y el bus de datos en los mismos ocho pines. El uso
primario para la línea AS, es separar, o demultiplexar, las señales de dirección y datos.
Pin 5 se etiqueta como E que simboliza línea de Enable. Ésta es una línea de salida que genera
una señal de reloj necesario para temporizar el sistema. Esto es requerido en todos los circuitos
para sincronizar la transferencia de datos entre el MPU, la memoria y los dispositivos periféricos
I/0.
Pin 6 la línea Read/Write (R/W), indica a la memoria o los dispositivos periféricos sí el MPU
está en modo lectura o escritura. Una operación de lectura se indica un "1" en esta línea. En
este modo, el MPU lee datos desde la memoria o desde un dispositivo de entrada. Una
operación de escritura es indicada por un "0" en la línea R/W. En este modo, el MPU manda
datos a memoria o a un dispositivo de salida.
Los próximos dos Pines (7 y 8) se etiqueta EXTAL y XTAL, respectivamente. Aquí es donde ud
debe conectar el cristal para generar la frecuencia de reloj interna E. Un oscilador de cristal,
típico, se muestra en la figura 2-6A. Note que la frecuencia de cristal debe ser cuatro veces la
30
DL3155M24HC11
frecuencia de reloj E deseada (4 x E). El diagrama en la figura 2-6B muestra cómo usted puede
usar un circuito oscilador externo para generar una señal de reloj E. La salida del oscilador
debe ser compatible a CMOS y debe aplicarse a la línea de EXTAL al pin 7. La frecuencia de
reloj E, será la frecuencia de oscilador entre cuatro. Con este método de generación, la señal
de reloj se utiliza y la línea de XTAL a la izquierda, en el pin 8, no es conectada.
CRISTAL
4XE
OSCILADOR
EXTERNO
4XE
SIN CONEXIÓN
Fig. 2-6
(A) Cristal conectado al 68HC11
(B) Conexión de un oscilador externo
Pins 9 -16 son multiplexados para servir con un propósito dual:
§ Cuando la línea AS es alta, los pines 9-16 generan las ocho líneas de dirección más
bajas (A0 - A7), del bus de direcciones externo.
§ Cuando la línea AS es baja, los pines 9-16 generan las ocho líneas de datos (D0 - D7)
del bus de datos externo.
Así, el bus de datos y la mitad más baja del bus de direcciones son multiplexados en estas
ocho líneas, se ahorra el número total de pines requerido para el chip. Por supuesto, la
información de datos y direcciones debe separarse, o demultiplexarse, externamente para
interconectarlos en orden al 68HC11.
La línea de 2%S%T (pin 17) se usa para restablecer e iniciar el MPU cuando el sistema es
inicialmente energizado o en el momento que se desee inicializar el sistema, Cuando esta línea
va a su nivel lógico "0", el MPU inicia la secuencia de reset. Recuerde que el vector reset es
recuperado desde las direcciones FFFE16 y FFFF16. Este vector se carga dentro del contador de
programa para que la primera instrucción de la rutina de reset sea buscada desde esa
dirección. Esta capacidad se usa para dirigir el MPU al inicio del programa monitor o de control.
31
DL3155M24HC11
La línea 8)21 pin 18 es básicamente línea de entrada de interrupción no mascarable. Un nivel
lógico 0 aplicado a esta línea, causa que el MPU atienda al vector de interrupción nomascarable en las direcciones FFF416 y FFF516. El vector localizado en estas direcciones está
cargado en el contador del programa para que el MPU inicie la ejecución con la primera
instrucción de la rutina servicio de interrupción. No olvide que una instrucción RTI debe
aparecer al final de la rutina de servicio para volver al MPU, al lugar donde ocurrió la
interrupción.
La línea )21 pin 19 es línea de petición de interrupción mascarable. Recuerde que esta
interrupción se ignora, si la bandera I del registro código de condición (CCR) es 1. Cuando una
señal activa aparece en esta línea, el MPU primero verifica que la bandera I en el CCR sea 1.
Si es así, la interrupción es ignorada. Si la bandera I está limpia(0), el MPU recibe el vector de
interrupción I21 desde las direcciones FFF216-FFF316 y lo cargan dentro del contador de
programa. La ejecución empieza entonces con la primera instrucción de la rutina servicio de
interrupción. Después use una instrucción RTI al final de la rutina, para regresar a donde la
interrupción fue generada. Un punto final sobre I21: puede configurarse como una interrupción
para sensar flanco o nivel (level or edge). Después de restablecerse, el pin I21 se configura
automáticamente como interrupción para sensar el nivel activo bajo. Así, un nivel lógico "0"
aplicado al pin 19 comienza la secuencia de la interrupción. Además, el pin de )21 puede ser
configurado por software como interrupción de flanco negativo disparado. En este modo, un
flanco de alto-a-bajo aplicado al pin 19 comienza la secuencia de interrupción. Esta opción
puede ser seleccionada configurando el bit 5 del Registro interno Option en la dirección
hexadecimal 003916 . Usted encontrará durante sus experimentos que hay aplicaciones tanto
para interrupciones por niveles o por flancos.
Pins 20-25 proporcionan I/O serie y paralelo hacia y desde el 68HC11.
Pin 26 es etiquetado como VDD . Esto es donde la fuente de energía a +5V DC se conecta.
Pins 27-34 provee como propósito general las I/O paralelo y la característica de un timer
interno.
Las 8 líneas superiores del bus de direcciones (A8 - A15) se generan vía los pins 35 - 42. La
línea de dirección A15, se da en el pin 35, A14 en el pin 36, y así sucesivamente, finalizando
con la línea de dirección A8 en el pin 42. Recuerde que las 8 líneas bajas del bus de datos (A0 A7) son multiplexadas con el bus de datos sobre los pines 9-16, respectivamente.
Pins 43 - 50 proporcionan acceso a un convertidor analógico a digital interno. Pueden aplicarse
ocho señales analógicas separadas a esta línea para su conversión interna a un valor digital de
8-bits.
Finalmente, las líneas VRL y VRH en los pins 51 y 52, respectivamente, son usadas para aplicar
un voltaje de la referencia externo para el uso del convertidor analógico-a-digital interno.
Tiempo de instrucción
Antes de continuar, discutiremos la relación de temporización entre las diversas señales del bus
y de control. Esta discusión inicia con lo más básico en una relación de temporizando: la
temporización por una sola instrucción.
32
DL3155M24HC11
Para ilustrar esto, se describirán los eventos significativos realizados durante la
búsqueda(fetch) y ejecución de la instrucción LDAA #(inmediato), que es una instrucción de 2bytes. El primer byte es el código de instrucción (8616). El segundo byte es el número que será
cargado al acumulador A. Esta instrucción requiere dos ciclos MPU. Durante el primer ciclo, el
código de instrucción es buscado y decodificado. Durante el segundo ciclo, el operando es
recuperado de la memoria y colocado al acumulador A.
Los eventos correspondientes se ilustran en Figura 2-7. Note que los eventos ocurren en el
flanco del pulso de reloj E. Asuma entonces que en la prioridad al tiempo 1 el contador del
programa contiene la dirección de la instrucción LDAA #.
1.09
Microsegundo
s
1.09
Microsegundo
s
Ciclo del MPU
(FETCH,
Búsqueda)
Ciclo del MPU
(EJECUCIÓN)
Fig. 2-7
Temporización de la instrucción LDAA#
Al tiempo 1, la dirección es transferida desde el contador de programa al bus de dirección a
través del registro dirección de memoria. Note que esto ocurre en el filo de caída de la señal E.
Las líneas AS y R/W no están en lógica 1, y deben cambiar a ésta lógica. Un estado lógico 1
en AS indica que una dirección está siendo colocada en el bus de direcciones. El estado lógico
1 en R/W indica a que el MPU desea leer el byte en la dirección indicada.
Al tiempo 2, es el borde de subida del reloj E. En este momento, el contador de programa será
incrementado en uno, a la dirección del siguiente byte en memoria. Sin embargo, este no
cambiará la dirección sobre el bus de dirección. Recuerde que la dirección actual es
conservada dentro del registro dirección de memoria. Así, la dirección de salida aun esta en el
primer byte de la instrucción LDAA #.
Los eventos que ocurren durante el reloj E, comienzan desde dentro del propio MPU. Además,
la señal de reloj E es vista por los circuitos periféricos tal y como el MPU. Así, la RAM, ROM,
etc., son controlados por el reloj E.
El filo de elevación, del reloj E en el tiempo 2, también forza a la memoria a colocar el dato
desde la dirección indicada hacia el bus de datos. Recuerde que este es el código de operación
para la instrucción LDAA #, o 86 16. Observe que la dirección ha tenido estabilidad desde el
tiempo 1 al tiempo 2.
Al tiempo 3 en el borde de caída de la señal, el MPU acepta el byte desde el bus de datos. El
bus de datos tiene estabilidad de tiempo 2 a tiempo 3. El MPU transfiere este byte (8616) al
registro instrucción. Allí, se decodifica e interpreta como el código de operación LDAA #. Esto le
33
DL3155M24HC11
dice al MPU que el próximo byte en memoria, es el operando que será cargado al acumulador
A.
Esto completa el primer ciclo del MPU. Durante este ciclo, el código de operación fue
simplemente leído desde la memoria y decodificado. Esto corresponde a la fase de búsqueda
para nuestro MPU. Observe que un ciclo MPU corresponde a un ciclo del reloj. Ahora veamos
lo que ocurre durante el segundo ciclo, o fase de ejecución de la instrucción.
Al tiempo 3, la dirección del operando también es transferido desde el contador de programa al
bus de direcciones. Al tiempo 4, el contador de programa se incrementa en uno en anticipación
de la siguiente fase de búsqueda.
Continuando, el borde de elevación del reloj E al tiempo 4, causan que él operando sea
transferido desde la memoria al bus de datos. Al tiempo 5, él operando es conservado dentro
del MPU donde este es transferido al acumulador A. Esto completa el segundo ciclo MPU y la
fase de ejecución de la instrucción. El tiempo 5 también representa el inicio de fase de
búsqueda de la próxima instrucción. La ejecución de la instrucción LDAA # requirió dos ciclos
MPU, o dos ciclos del reloj. Asumiendo que el reloj es de 920 kHz, se requiere
aproximadamente 2.18 microsegundos para ejecutar esta instrucción (1.09 por cada byte).
Temporizado de un segmento del programa
Ahora que usted está familiarizado con la temporización de una sola instrucción, podrá
entender el proceso para la ejecución de un programa muestra, donde se agrupan diversas
instrucciones.
Podrá estudiar las relaciones de temporización entre las señales del bus, señales de reloj, la
línea R/W, etc.,
Nuestro segmento de programa muestra se ve en la Figura 2-8. Usando el modo de
direccionamiento inmediato, se carga el 0716 dentro del acumulador A carga y suma 2116. El
resultado se guarda entonces en localidad 0001 16. Note que la primera instrucción reside en la
dirección 001016.
DIRECCION
HEX.
0010
0011
0012
0013
0014
0015
0016
CONTENIDO
HEX.
86
07
8B
21
97
01
….
CONTENIDO HEX/.
MNEMONICO
LDAA #
07
ADDA #
21
STAA
01
…
COMENTARIOS
Carga el acumulador A con el dato inmediato #07
Suma al acumulador A, el dato inmediato # 21
Almacena el resultado en esta dirección
Siguiente instrucción
Fig. 2-8
Segmento de un programa muestra
La figura 2-9 ilustra la relación entre temporizaciones. El pulso de reloj E se muestra en la parte
superior del diagrama. La información que aparece sobre los buses y la línea R/W para cada
periodo del reloj se muestra en la parte de abajo. Este segmento de programa requiere ocho
34
DL3155M24HC11
ciclos de reloj, o ciclos MPU. Éstos están enumerados del uno al ocho. Veamos lo que ocurre
durante cada uno de estos ciclos.
1.09
Microsegundos
Bus de
Direcciones
Bus de
Datos
Línea
R/W
Fig. 2-9
Temporización del segmento del programa muestra.
Ciclo 1. Durante el primer ciclo, la dirección de la instrucción LDAA # (001016) es colocada en el
bus de direcciones. Como resultado, el código de operación 86, es leído desde esa dirección y
buscado por el MPU. Debido a que fue una operación de lectura, la línea R/W está en su
estado lógico 1. El MPU decodifica el código de operación y reconoce que éste es una
instrucción LDAA #. Por consiguiente, sabe que el próximo byte en memoria es él operando que
será cargado en el acumulador. Durante este ciclo, el contador del programa se incrementó a
001116, para que ahora apunte al operando.
Ciclo 2. Ésta es la fase de la ejecución de la instrucción LDAA #. La dirección del código del
operando (001116) es colocada sobre el bus de direcciones. El código de operación (0716) es
leído afuera, sobre el bus de datos y colocado en el acumulador A. En el proceso, el contador
de programa se incrementa a 001216. Esto completa la fase de ejecución de la primera
instrucción.
Ciclo 3. Esta es la fase de búsqueda de la siguiente instrucción. La dirección 0012, es colocada
sobre el bus de direcciones. El código de operación a esa dirección se lee fuera y se coloca en
el bus de datos. El MPU recoge el código de operación, lo decodifica, y descubre que es la
instrucción ADDA #. En el proceso, el contador del programa se incrementa a 001316.
Ciclo 4. Aquí, la dirección 001316 se transfiere al bus de direcciones y la localidad de memoria
seleccionada sé lee. Por tanto, el operando 2116, se pone sobre el bus de datos. El MPU recoge
al operando y lo agrega a los contenidos del acumulador. La suma, 2816, se retiene en el
acumulador A. El contador del programa es incrementado a 001416.
Ciclo 5. Fase de búsqueda para la tercer instrucción. La dirección 001416 se sitúa sobre el bus
de direcciones. El código de operación para STAA se lee y decodifica. El MPU reconoce que es
necesario el modo de direccionamiento directo. Así, interpretará el siguiente byte en memoria
como la dirección donde la suma es acumulada. El contador del programa se incrementa a
0015 16.
Ciclo 6. La dirección 00151 6 se coloca sobre el bus de dirección. Observe que esta localidad es
la dirección donde la suma es almacenada. Así, 01 se lee fuera, hacia el bus de datos donde es
recogido por el MPU. El MPU reconoció que el direccionamiento directo es el indicado y asume
que la dirección donde la suma se guarda es 000116. Esta dirección se guarda en el MPU. El
contador del programa se incrementa a 001616.
35
DL3155M24HC11
Ciclo 7. Durante este ciclo, el MPU se prepara para almacenar la suma. Para ello, debe
transferir la suma desde el acumulador al registro de datos.
Ciclo 8. El MPU está ahora listo para guardar la suma en memoria. La dirección donde guardará
la suma (000116) es colocada sobre el bus de dirección. El dato a almacenar (2816) es situado
sobre el bus de datos. La línea de R/W se cambia a estado bajo, indicando que ésta, es una
operación de almacenaje, y la suma (2816) se guarda en la localidad de memoria 000116.
Por supuesto, la computadora no se pausa aquí. Durante el próximo ciclo, la próxima
instrucción es buscada y decodificada. Sin embargo, los ocho ciclos de la máquina ilustrados en
Figura 2-9 dan la idea general. Posteriormente verá, que las relaciones de temporización, aquí
mostradas, son importantes en las interfaces que realizará el MPU con memorias y circuitos
I/O.
36
DL3155M24HC11
2.3 MODELO DE PROGRAMACIÓN DEL MC68HC11
El 68HC11 es mucho más compleja que nuestra MPU hipotética. Consecuente-mente, un
modelo de programación del 68HC11 supone un buen comienzo. Este se muestra en la Figura
2-10.
7
0 7
A
B
0
15
D
0
Acumulador de 8 bit, A y B, o el
acumulador doble D
15
IX
0
Registro Indexado X
15
IY
0
Registro Indexado Y
15
SP
0
15
PC
0
7
Apuntador de Pila (Stack Pointer)
Contador
Counter)
de
Programa
(Program
0
S X H I N Z V C
Registro de código de condición.
Acarreo o préstamo de MSB
Sobreflujo
Zero
Negativo
Mascara de interrupción- I
Medio acarreo o semiacarreo (del bit
3)
Mascara de interrupción X
Paro deshabilitado
Fig. 2-10. Modelo de programación del MPU 68AC11
Usted notará inmediatamente que el 68HC11 tiene algunos registros adicionales. Sin embargo,
sólo dos de ellos, el registro índice y el apuntador de pila son nuevos para usted.
Veamos las diferencias más significativas entre MPU y nuestro modelo hipotético.
37
DL3155M24HC11
Dos Acumuladores. 68HC11 tiene dos acumuladores en lugar de sólo uno. Son llamados
acumulador A (ACCA) y acumulador B (ACCB). Cada uno de ellos cuenta con su propio grupo
de instrucciones asociadas. Los nombres y mnemónicos de las instrucciones especifican cual
acumulador será usado. Así, hay instrucciones como:
Load Accumulator A, LDAA. (Cargar Acumulador A)
Load Accumulator B, LDAB. (Cargar Acumulador B)
Store Accumulator A, STAA. (Almacenar Acumulador A)
Store Accumulator B, STAB. (Almacenar Acumulador B)
Note que se agrega al nombre y al mnemónico para indicar que acumulador va a usarse.
Por experiencia, usted puede visualizar el valor del segundo acumulador. Por ejemplo,
considere un programa en el cual, MPU cuenta el número de veces que ocurre una operación.
Anteriormente, almacenamos el contenido actual del acumulador, cargamos la cuenta en el
acumulador; incrementamos la cuenta, almacenamos la cuenta y volvemos a cargar el numero
original. Con un segundo acumulador, nada de eso es necesario. Sencillamente mantenemos la
cuenta en el acumulador B mientras trabajamos con el acumulador A. De hecho, podemos
efectuar cualquier operación aritmética o lógica de dos números distintos sin tener que
moverlos hacia delante o atrás en la memoria. Como en otros miembros de la familia 6800, los
acumuladores A y B pueden ser concatenados en un solo acumulador, “D” de 16 bits, para
bytes dobles.
Contador de Programa de 16 Bits. El contador de programa en el 68HC11 tiene 16 bits en vez
de 8. Así, se pueden especificar 65,536 direcciones distintas. Esto significa que una
microcomputadora basada en el 68HC11 puede tener hasta 65,536 bytes de memoria.
Afortunadamente, nosotros podemos usar como mínimo o máximo el Byte 216, muchas
aplicaciones requieren menos memoria de este límite máximo. Ya que el contador de programa
tiene 16 bits, el bus de direcciones también debe ser de 16 bits. Contraste esto con el bus de
direcciones de 8 bits de nuestra máquina hipotética.
Usted puede sorprenderse de cómo especificamos una dirección de 16 bits con un byte. La
respuesta obvia es que son necesarios dos bytes de 8 bits. Recuerde que en el modo de
direccionamiento directo, la dirección fue especificada por un byte. El microcontrolador 68HC11
mantiene ese modo de direccionamiento. Sin embargo, ya que una dirección de 8 bits sólo
puede especificar 256 direcciones, el 68HC11 puede usar este modo sólo si el operando se
halla en los primeros 256 bytes de memoria. Para alcanzar direcciones altas, se debe usar un
nuevo modo de direccionamiento llamado direccionamiento extendido. En el modo de
direccionamiento extendido, se usan dos bytes para representar cada dirección. Este modo de
direccionamiento será discutido con más detalle después. Por ahora, tenga en mente que hay
65,536 posibles direcciones. La dirección más baja es la 000016 y la mayor es FFFF16. Usando
direccionamiento extendido, tendremos acceso a cualquier localidad de memoria, pero se
requiere una dirección de 2 bytes.
Registros de Código de Condición.
El 68HC11 tiene ocho bits de código de condición o
banderas. Cada una de ellas puede ser referida por la posición del bit (0-7) o por su nombre en
el registro de código de condición m, mostrado en la Figura 2-10. Cuatro de ellos son muy
similares, casi idénticos a los discutidos anteriormente. Estos incluyen los códigos de condición
negativo (N), Cero (Z), sobreflujo (V), y acarreo (C). En este momento surge una diferencia, por
haber dos acumuladores en el 68HC11. Así, la bandera de acarreo se pone a uno cuando hay
38
DL3155M24HC11
un acarreo de cualquier acumulador. También, un sobreflujo en cualquier acumulador pondrá a
uno la bandera V.
También se muestran cuatro nuevos códigos de condición en la Figura 2-10. La máscara I de
interrupción se usa para deshabilitar (enmascarar) toda interrupción enmascarable. Cualquiera
de ellas puede ser puesta a uno por hardware o a través de instrucción de programa. La
máscara X de interrupción es similar a la máscara I, sin embargo, es activada sólo por
hardware (Reset o XIRQ) y es borrado sólo por instrucción de programa (TAP o RTI). El uso de
estas será discutido después cuando estudie el uso de interrupciones. Ocupando la posición de
un bit entre las máscaras de interrupción I y X está la bandera de medio acarreo ó semiacarreo
(H). la bandera H es puesta a uno cuando hay un acarreo del bit 3 (al 4) del acumulador. La
MPU usa esta bandera para determinar cuando se implementa una instrucción de ajuste
decimal. Finalmente, el último bit de código de condición es: deshabilita STOP o PARO, su
bandera es S. Esta es puesta a uno bajo control del programa para deshabilitar la instrucción
STOP. Cuando STOP es deshabilitado de esta manera, su ejecución del programa es tratada
como una “no-operación” instrucción NOP. NOP será discutida con más detalle posteriormente.
Puesto que las últimas dos banderas de código de condición (X y S) generalmente no se
afectan por muchas de las instrucciones que se discutirán, consideraremos sólo los efectos
sobre las primeras seis banderas de código de condición.
Registros Indice.
Los registros índice IX e IY son registros de 16 bits de propósito especial
que incrementan grandemente la potencia del microprocesador. Estos registros permiten un
modo de direccionamiento muy poderoso llamado direccionamiento indexado.
Analizaremos dicho modo de direccionamiento en esta unidad. Por ahora, considere a los
registros índice como otros registros de trabajo. El hecho que puedan retener dos bytes en
lugar de uno posibilita su buen uso. La MPU tiene instrucciones que permiten que los registros
índice sean cargados desde dos bytes de memoria contiguos. Otra instrucción nos permite
almacenar el contenido de los registros índice en dos localidades de memoria adyacentes. Esto
posibilita mover datos en grupos de 2 bytes. También, los registros índice pueden
incrementarse o decrementarse. Con esto mantenemos cuentas de 16 bits.
La arquitectura de registro índice dual del 68HC11 significa una mejora en diseño sobre
anteriores miembros de la familia 6800. Aunque ambos registros IX e IY pueden ser usados
similarmente para direccionamiento indexado, conteo, o almacenamiento temporal de datos,
ciertas instrucciones, particularmente aquellas para el registro IY, requieren un byte extra, o un
prebyte, de código máquina. La necesidad del prebyte surge como resultado del conjunto
expandido de instrucciones del 68HC11 al agregar nuevas instrucciones no usadas
previamente en la familia 6800.
La agregar el prebyte a una instrucción también provoca que una instrucción de dos bytes
requiera un ciclo extra de tiempo de ejecución (comparado con un opcode de un byte). Más que
como un byte extra del opcode (con tiempo de ejecución extra de un ciclo de máquina), una
instrucción con prebyte se programa y ejecuta como cualquier instrucción ordinaria (sin
prebyte). Los valores típicos del prebyte en el conjunto de instrucciones del 68HC11 son 1816 y
1A16. Los notará cuando estudie el conjunto de instrucciones del MC68HC11 con detalle, un
poco más adelante. Tenga en mente que, cuando se programan instrucciones que requieren
prebytes, el opcode con prebyte apropiado se programa en una localidad de memoria (M), y el
opcode de la instrucción es programado en la siguiente localidad (M+1), como si se tratara de
dos bytes de datos.
39
DL3155M24HC11
2.4 DIAGRAMA A BLOQUES DE MC68HC11
Ahora que ha visto el modelo de programación de la MPU 68HC11, de un vistazo al diagrama
de bloques. Un diagrama simplificado se muestra en la Figura 2-11.
Se han omitido algunas rutas de datos, muchas líneas de control, y un registro de
almacenamiento temporal a favor de los registros y rutas de datos más importantes.
Fig. 2-11. Diagrama a bloques simplificado del MPU
40
DL3155M24HC11
41
DL3155M24HC11
UNIDAD 3
CONJUNTO DE INSTRUCCIONES
42
DL3155M24HC11
CONTENIDO
3.1 CONJUNTO DE INSTRUCCIONES DE MC68HC11
3.2 MODOS DE DIRECCIONAMIENTO
3.3 EXPLICACION DE INSTRUCCIONES
43
DL3155M24HC11
3.1 CONJUNTO DE INSTRUCCIONES DEL MC68HC11
Esas instrucciones pueden ser agrupadas en siete categorías generales. Aunque algunas de
ellas se superponen, la clasificación general de las instrucciones es: aritméticas, manejo de
datos, prueba de datos lógicos, registro índice y apuntador de pila, salto y bifurcación y código
de condición. En esta unidad discutiremos muchas de esas instrucciones en detalle
En esta sección no nos interesaremos en los modos de direccionamiento. Por lo tanto, no
manejaremos opcodes. Los varios modos de direccionamiento y los opcodes los veremos más
adelante. Por ahora identificaremos las instrucciones por sus nombres, mnemónicos y
operaciones. Verá lo que hace cada instrucción y como son afectados los primeros seis
registros de código de condición.
Instrucciones Aritméticas
La Figura 3-1 muestra las instrucciones aritméticas representativas de la MPU 68HC11. El
nombre de cada instrucción se muestra a la izquierda. La siguiente columna contiene el
mnemónico. La columna central da una explicación abreviada de lo que hace la instrucción. La
columna a la derecha muestra como se afectan los primeros seis registros de código de
condición.
* Después de usar ABA, ADC, y ADD en operaciones aritméticas BCD; cada 8 bytes son
considerados como dos números BCD de 4 bit´s. DAA suma 0110 a la mitad del byte bajo, si el
número menos significativo es >1001, o si la instrucción previa causo un semiacarreo. Suma
0110 a la mitad del byte alto si el número más significativo >1001 o si la instrucción anterior
causo un acarreo. También suma 0110 al medio byte superior, si el número menos significativo
>1001 y el número más significativo es = 9.
* NOTA: Los bits 6 y 7, generalmente no se ven afectados por estas instrucciones.
44
DL3155M24HC11
Fig. 3-1 Instrucciones Aritméticas
Para asegurar que la idea es clara, veamos la primera instrucción en detalle. Esta es la
instrucción de suma. Ya que el 68HC11 tiene dos acumuladores, hay dos instrucciones de
suma. Sus mnemónicos son ADDA y ADDB. La última letra indica el acumulador que se usa. La
representación abreviada de la operación es A+MàA. La nota en la parte de arriba de la
columna, register labels indica que las letras se refieren al contenido de los registros. Así, A
significa el contenido del acumulador y M significa el contenido de la localidad de memoria
afectada. El símbolo à significa “transfiere a”. Por lo tanto, A+MàA significa “suma el
contenido del acumulador A al contenido de la localidad de memoria afectada y transfiere la
suma al acumulador A”.
Para ver como son afectadas las banderas de los códigos de condición, simplemente vea a la
derecha el código de condición deseado. Generalmente, los códigos pueden ser activados
según la operación ó no ser probados o afectados. Si no es afectado el código, se marca con el
símbolo (•). Por ejemplo, ninguna de las instrucciones aritméticas afectan la bandera I. Muchas
de las instrucciones aritméticas prueban los códigos de condición y los ponen a uno si existe la
condición. Por ejemplo, si el resultado de una operación aritmética es cero, la bandera Z es
puesta a uno. Si esta condición no existe, la bandera es limpiada. El símbolo (×) significa
“prueba y pon a uno si es verdad; de otra manera, limpia”. Ocasionalmente se necesita una
nota para describir alguna situación inusual del código de condición. Esto se representa con un
número dentro de un círculo. Las notas se dan abajo del dibujo.
Las instrucciones ADDA y ADDB se comprenden fácilmente. La instrucción ABA suma el
contenido del acumulador A al contenido del acumulador B. Y el resultado lo almacena en el
acumulador A.
Las instrucciones de suma con acarreo son idénticas a las discutidas anteriormente para la
máquina hipotética. Note que el bit de acarreo se integra a la suma.
Ya que en el MPU 68HC11 se usa aritmética de complemento a dos, existen instrucciones que
nos permiten obtener el complemento a dos de un número. La instrucción de negación, resta el
contenido del registro afectado de 00 16. Esto es lo mismo que hacer el complemento a dos del
número. El registro afectado puede ser cualquier localidad de memoria (M) o cualquier
acumulador (A o B). Así, hay tres instrucciones de negación distintas. Tenga en mente que
NEG significa “toma el complemento a dos de la localidad de memoria afectada”; NEGA “toma
el complemento a dos del acumulador A”; etc.
Note que la instrucción NEG nos permite operar sobre un byte en memoria sin buscar primero
el operando. Anteriormente, hemos cargado el operando, llevado a cabo la operación y
almacenado entonces el nuevo operando. Sin embargo, el 68HC11 nos permite llevar a cabo
45
DL3155M24HC11
ciertas operaciones sobre el operando, sin primero buscarlo en memoria. Algunos ejemplos de
esto serán mostrados según progresemos con el conjunto de instrucciones.
La instrucción de ajuste decimal efectúa exactamente lo mismo que nuestra máquina hipotética.
La nota inmediatamente debajo de la tabla describe su operación. Debe apuntarse que dicha
instrucción sólo trabaja con el acumulador A.
Las instrucciones de resta y resta con acarreo se explican por sí mismas. El MPU 68HC11 tiene
una instrucción adicional de resta. La instrucción SBA resta el contenido del acumulador B del
contenido del acumulador A. La diferencia resultante se coloca en el acumulador A.
Instrucciones de Manejo de Datos
La Figura 3-2 contiene un listado de las instrucciones más importantes de manejo de datos,
usadas por la MPU 68HC11. Este es el grupo más grande de instrucciones del 68HC11.
Las instrucciones para limpiar, nos permiten borrar el contenido de una localidad de memoria o
de cualquier acumulador. Anteriormente hemos limpiado bytes de memoria limpiando primero el
acumulador y almacenando luego el dato 0016 resultante en la localidad de memoria apropiada.
Sin embargo, la instrucción CLR nos permite despejar una localidad de memoria con una sola
instrucción. Nótese que aparecen algunas entradas nuevas en la columna de registros de
códigos de condición. R significa que el código de condición está siempre a cero. S significa
que el código está siempre a uno.
La instrucción de decremento nos permite restar 1 de la localidad de memoria o de cualquier
acumulador. La instrucción DEC es especialmente valiosa ya que decrementa un byte en
memoria con una sola instrucción. Previamente hemos cargado el byte, lo hemos
decrementado y lo entonces es almacenado atrás en memoria.
Las instrucciones de incremento son similares excepto porque nos permiten sumar uno a una
localidad de memoria o a alguno de los acumuladores. Note que la instrucción INC nos permite
mantener una cuenta en memoria sin tener que cargarla, incrementarla y volverla a almacenar.
Las instrucciones de carga al acumulador son sencillas de entender y fáciles de usar. Note que
el acumulador puede ser cargado desde la memoria.
46
DL3155M24HC11
Fig. 3-2. Instrucciones de manejo de datos
Las instrucciones de rotación a la izquierda nos permiten desplazar el contenido del acumulador
o de una localidad de memoria sin perder bits del dato. Considere a la instrucción ROLA como
un ejemplo. Cuando se ejecuta esta instrucción, el acumulador A y el bit de acarreo forman un
registro circular de 9 bits. Esto es, forman un lazo cerrado como se muestra en la Figura 3-3A.
Cuando se ejecuta ROLA, el dato es rotado en sentido de las manecillas del reloj. El MSB de A
se desplaza al registro de acarreo. Simultáneamente, el contenido de A es desplazado a la
izquierda. Note que el bit de acarreo no se pierde, sino que es desplazado al LSB del
acumulador.
47
DL3155M24HC11
A.
antes que se ejecute la instrucción ROLA
B.
después de ejecutar ROLA
Fig. 3-3. Ejecución de la instrucción ROLA
Aunque la utilidad de esta instrucción no es tan clara, es una herramienta valiosa. Por ejemplo,
podría ser usada para determinar la paridad. Rotando repetidamente a la izquierda y probando
la bandera C, puede determinar el número de 1´s en el byte. Una vez que lo conoce, puede
generar fácilmente el bit de paridad apropiado.
La instrucción ROL le permite rotar un byte de memoria a la izquierda mientras está en
memoria. ROLB posibilita rotar el acumulador B a la izquierda. En cada caso se usa el registro
C como noveno bit.
Las instrucciones de rotación a la derecha son iguales a las de la izquierda, lo que cambia es la
dirección de rotación. La Figura 3-4 ilustra la ejecución de la instrucción RORA. Esta instrucción
también es valiosa. Suponga, por ejemplo, que se desea saber si el número en el acumulador
es par o impar. Esto se determina con el LSB del número. Si LSB = 1, el número es impar; si
LSB = 0, el número es par. Una manera de determinar esto es, rotar el número a la derecha de
manera que el LSB quede en el registro C. Podemos probar el registro C para ver si está a uno
o a cero. Notese que el número debe ser restaurado a su forma original mediante la instrucción
ROLA.
A. Antes de ejecutar RORA
B.
Después de ejecutar RORA
Fig. 3-4. Ejecutando la instrucción RORA
La instrucción aritmética de rotación a la izquierda fué discutida anteriormente para la MPU
hipotética. La instrucción ASLA se ejecuta exactamente como se describió en la unidad previa.
Sin embargo, note que la MPU 68HC11 también tiene la instrucción ASLB que efectúa la misma
operación con el acumulador B. También tiene una instrucción ASL que permite efectuar esta
operación sobre un byte en memoria. La Figura 3-5 ilustra la ejecución de esta instrucción.
48
DL3155M24HC11
A.
B.
Antes de ejecutar ASL
Después de ejecutar ASL
Fig. 3-5. Ejecutando la instrucción ASL
Mientras sólo haya un tipo de instrucción de rotación a la izquierda, hay dos tipos de
instrucciones de rotación a la derecha. Discutamos primero las instrucciones de rotación a la
derecha.
Cuando se ejecuta una instrucción aritmética de rotación a la derecha, el número en el registro
afectado es desplazado una posición a la derecha. El LSB pasa al registro C. B1 se desplaza a
B0, etc. B7 se desplaza a B6. Sin embargo, B7 permanece sin cambio. La Figura 3-6 ilustra la
ejecución de la instrucción ASRB. Note que también se listan las instrucciones ASRA y ASR en
la Figura 3-2. Estas efectúan el mismo tipo de operación de desplazamiento, pero sobre el
acumulador A y la localidad de memoria seleccionada, respectivamente.
A.
B.
Antes de ejecutar ASRB
Después de ejecutar ASRB
Fig. 3-6. Ejecutando la instrucción ASRB
Las instrucciones lógicas de rotación a la derecha son diferentes en que no retienen el bit de
signo. Cuando se ejecuta una rotación lógica a la derecha, El contenido del registro afectado es
desplazado a la derecha. El LSB pasa al registro de acarreo. MSB es llenado con un cero. Por
ejemplo, la instrucción LSR se ilustra en la Figura 3-7. Mientras esta instrucción desplaza
localidades de memoria seleccionadas, LSRA y LSRB pueden ser usadas para efectuar
operaciones similares sobre los acumuladores A y B, respectivamente.
49
DL3155M24HC11
A.
B.
Antes de ejecutar LSR
Después de ejecutar LSR
Fig. 3-7. Ejecutando la instrucción LSR
Volviendo a referirnos a la Figura 3-2, las instrucciones de almacenamiento del acumulador se
explican por sí solas.
Las instrucciones finales de manejo de datos son las instrucciones de transferencia del
acumulador. TAB copia el contenido del acumulador A en el acumulador B. Después que esta
instrucción se ejecuta, el número original del acumulador será el mismo en ambos
acumuladores. TBA hace lo opuesto. Copia el contenido del acumulador B en el acumulador A.
Después que TBA se ejecuta, el número original del acumulador B será el mismo en ambos
acumuladores.
Instrucciones Lógicas
Las instrucciones lógicas en la MPU 68HC11 son similares a las del MPU hipotético. La Figura
3-8 muestra las instrucciones lógicas del 68HC11.
Fig. 3-8. Instrucciones Lógicas.
Hay una instrucción AND para cada acumulador. Se efectúa la operación lógica AND bit a bit
entre los contenidos del acumulador especificado y la localidad de memoria seleccionada. El
resultado es colocado en el acumulador. Esto es idéntico a la instrucción AND de la máquina
hipotética.
La instrucción de complemento le permite hacer el complemento a uno del número en el
registro afectado. COM permite complementar un byte en memoria.
50
DL3155M24HC11
COMA y COMB le permiten complementar el contenido de los acumuladores A y B,
respectivamente. En cada caso, todos los 1´s son cambiados por 0´s y todos los 0´s son
cambiados por 1´s.
Las instrucciones de OR exclusivo trabajan similar al MPU hipotético. La operación OR
exclusivo se lleva a cabo bit a bit entre los contenidos del acumulador especificado y la
localidad de memoria seleccionada. El resultado es realmacenado en el acumulador
especificado.
La instrucción OR inclusivo es muy similar.
Instrucciones de Prueba de Datos
Estas son un poderoso grupo de instrucciones que nos permiten comparar operandos en
diferentes formas. En previas unidades, usted adquirió experiencia comparando operandos. El
método más frecuentemente usado, es el de restar un operando de otro y comparar el resultado
con cero o negativo. En muchos casos, el resultado de la resta no fué muy importante. Sólo
requeríamos saber si el resultado fue cero o menos. Las instrucciones de prueba de datos nos
permiten hacer diferentes pruebas sin producir resultados numéricos no deseados. Esas
instrucciones son mostradas en la Figura 3-9.
Fig. 3-9. Instrucciones de prueba de datos
Las instrucciones de prueba de bit son muy similares a las instrucciones AND. En ambos casos,
la operación AND se efectúa entre el contenido del acumulador especificado y el contenido de
la localidad de memoria seleccionada. La diferencia es que con la instrucción de prueba de bit
no se produce algún producto lógico. Ninguno de los contenidos del acumulador ni de la
memoria es alterado. Sin embargo, los registros de código de condición son afectados como lo
haría una operación AND. Considere la instrucción BITA. Cuando es ejecutada, se hace la
operación AND con M. Si el resultado es 0016, el registro Z se pone a uno. De otra manera, el
registro Z es limpiado. Si el MSB del resultado es 1, la bandera N se pone a uno. Sin embargo,
los contenidos del acumulador y de la memoria no son afectados.
De la misma manera, las instrucciones de comparación son similares a las instrucciones de
resta excepto que la diferencia resultante es ignorada. Por ejemplo, cuando se ejecuta la
instrucción CMPA, el contenido de la localidad de memoria seleccionada es restado del
contenido del acumulador A. Los códigos de condición son afectados sólo si se hubiera
51
DL3155M24HC11
producido una diferencia. Sin embargo, los contenidos originales de los acumuladores no son
afectados.
La instrucción de comparación de acumuladores (CBA) trabaja de la misma manera. Los
códigos de condición son puestos a uno, como si el contenido de B fuese restado del contenido
de A. Sin embargo, los contenidos de los acumuladores no son afectados.
Finalmente, la instrucción de prueba por cero o menos le permite probar un número en un
acumulador o la memoria para ver si es negativo o cero. Cuando esta instrucción es ejecutada,
la MPU revisa el número en cuestión y pone a uno las banderas N y Z, consecuentemente. El
número mismo no es cambiado.
Instrucciones del Registro Indice y del Apuntador de Pila.
Los registros índice y apuntador de datos son registros de 16 bits. La Figura 3-10 muestra once
instrucciones que nos permiten controlar la operación de esos registros. A causa de su formato
de 16 bits, las instrucciones de carga, almacenamiento y comparación son ligeramente
diferentes a las discutidas previamente. También, puesto que el registro índice Y (IY) es muy
similar al registro índice X (IX), sólo discutiremos las instrucciones para IX. Al aprenderlas,
recuerde que hay instrucciones equivalentes para el registro índice Y.
Fig. 3-10. Instrucciones de registro Indice
y del apuntador de la pila (stack pointer)
La instrucción de comparación del registro índice (CPX) nos permite comparar el número de 16
bits del registro índice con otros dos bytes consecutivos de memoria. Recuerde que el registro
índice X mantendrá dos bytes. El byte alto se identifica como XH , mientras el byte bajo es
llamado XL . Cuando ejecutamos la instrucción CPX, XH es comparado con el byte de la
localidad de memoria especificada, M. Además, XL también es comparado con el byte
consecutivo a M, es decir M+1. La comparación se hace como si restáramos M y M+1 de XH y
XL, excepto que no se produce diferencia numérica. Ni X ni M cambia de manera alguna. Sin
embargo, los códigos de condición N, Z, y V son afectados como se muestra en la Figura 3-10.
52
DL3155M24HC11
Generalmente, el código Z es más interesante para nosotros pues nos dice cuando hay o no,
igualdad entre el registro índice y los dos bytes de memoria.
Las siguientes cuatro instrucciones se explican por sí mismas. Nos permiten incrementar y
decrementar ya sea el registro índice o el apuntador de pila. Esas instrucciones posibilitan
mantener dos cuentas de 16 bit simultáneamente.
Sin embargo, el valor real de esas instrucciones y sus registros asociados se discutirá después.
Las instrucciones de carga y almacenamiento para los registros de 16 bits se muestran en la
Figura 3-10. Ya que se trata de registros de dos bytes, las instrucciones LDX y LDS deben
cargar dos bytes de la memoria. En el caso del registro índice, el byte de memoria especificado
(M), es cargado en la mitad superior del registro índice (XH ). Un instante después, el siguiente
byte en memoria (M+1) es cargado automáticamente en la mitad baja del registro índice (XL).
Así, la operación puede ser descrita como sigue:
M à XH, (M+1) à XL.
Ya que el apuntador de pila también es un registro de 16 bits, la instrucción de carga del
apuntador de pila (LDS) trabaja del mismo modo. Su operación puede ser descrita de la
siguiente manera: M à SPH ; (M+1) à SPL. Aquí, SPH se refiere a la mitad alta del apuntador de
pila y SPL se refiere a la mitad baja.
Cuando el contenido de los registros de 16 bits va a ser almacenado, la operación se invierte.
Por ejemplo, la instrucción STX almacena XH en M y XL en M+1. Una instrucción similar, STS,
nos permite almacenar el contenido del apuntador de pila de la misma manera.
Las dos instrucciones finales de este grupo nos permiten transferir números entre esos dos
registros de 16 bits. La instrucción TXS carga el apuntador de pila con el contenido del registro
índice menos uno. La instrucción TSX carga el registro índice con el contenido del apuntador
de pila más uno. Una discusión más detallada de esos dos importantes registros y sus
instrucciones asociadas se hará en la siguiente unidad.
53
DL3155M24HC11
Instrucciones de Bifurcación
Las instrucciones de bifurcación son mostradas en la Figura 3-11. Se incluyen dos instrucciones
adicionales que afectan al contador de programa.
Fig. 3-11. Instrucciones de salto y bifurcación.
Nueve de esas instrucciones fueron discutidas en la unidad anterior. Esas son: Branch always,
bifurcar siempre (BRA); Branch if carry clear, Bifurca si está limpio el Acarreo (BCC); Branch is
carry set, Bifurca si está a uno el acarreo (BCS); Branch if equal Zero, Bifurca si es igual a cero
(BEQ); Branch if not equal Zero Bifurca si no es igual a cero (BNE); Branch if minus, Bifurca si
Menos (BMI); Branch if Plus, Bifurca si es Más (BPL); Branch if overflow clear, Bifurca si el
Sobreflujo está Limpio (BVC) y Branch if overflow set ,Bifurca si el Sobreflujo es Uno (BVS).
Antes de discutir las nuevas instrucciones de bifurcación, he aquí algunos símbolos que serán
usados. El símbolo (>) significa “es mayor o igual que”; (>) significa “ es mayor que”; (<)
significa “es menor o igual que”; (<) significa “es menor que” y (≠) significa “diferente de”.
Ahora considere la instrucción Bifurcar Si es Mayor o Igual (BGE). Esta instrucción se usa
normalmente después de una instrucción de resta o comparación. Esto causará una operación
de bifurcación si el valor en complemento a dos del acumulador es mayor o igual que el
complemento a dos del operando en memoria. Esta condición se indica por el mismo valor en
las banderas N y V. La MPU determina si esta condición se cumple haciendo el OR exclusivo
de N y V y examinando el resultado.
54
DL3155M24HC11
Tres ejemplos sencillos pueden ayudar a ilustrar la operación de esta instrucción. Comencemos
con un número en el acumulador, que es mayor que, el operando en memoria:
Número en el Acumulador
Operando en Memoria
= 0000 00102
= 0000 00012
Cuando el operando es restado, el resultado es 000000012. Con este resultado, N y V son
limpiados. Note que N y V son iguales y que N ⊕ V = 0. Si la instrucción BGE sigue a la
operación de resta, se implementa la bifurcación.
Ahora veamos que pasa cuando el número en el acumulador es igual al operando:
Número en el Acumulador = 0000 00102
Operando en Memoria
= 0000 00102
Cuando se resta el operando, el resultado es 000000002. Otra vez N y V son limpiados. Así, N y
V aún son iguales y N ⊕ V = 0. Otra vez, la instrucción BGE causa que ocurra una bifurcación.
Finalmente, note que pasa cuando el número en el acumulador es menor:
Número en el Acumulador = 0000 00012
Operando en Memoria
= 0000 00102
Cuando el operando se resta, el resultado es 1111 1111 2. Esta vez N es puesto a uno pero V
es limpiado. Así, N y V no son iguales. Por lo tanto, N ⊕ V = 1. En este caso, la condición de
BGE no se cumple y no ocurrirá la bifurcación. La bifurcación ocurre si el valor en complemento
a dos del acumulador es mayor o igual que el complemento a dos del operando en memoria.
Enseguida, considere la instrucción Bifurca si es Mayor que (BGT). Esta instrucción se usa
normalmente después de una operación de resta o comparación. La bifurcación ocurrirá sólo si
el complemento a dos del minuendo es mayor que el complemento a dos del sustraendo.
Probando con varios ejemplos, como se hizo arriba, encontraremos que las condiciones de la
bifurcación se cumplen cuando Z = 0 y N = V.
La instrucción Branch if Higher, Bifurca si es Mayor (BHI) es similar a la instrucción BGT
excepto que es aplicable a números no signados. BHI se usa normalmente después de una
operación de resta o comparación. La bifurcación ocurrirá sólo si el minuendo no signado es
mayor que el sustraendo no signado. Probando diferentes ejemplos, se puede probar que esto
ocurre sólo cuando las banderas C y Z son iguales a 0.
La instrucción Branch if Less, Bifurca si es Menor o Igual (BLE) le permite comparar números
en complemento a dos de otra manera. Si se ejecuta inmediatamente después de una
operación de resta o comparación, la bifurcación ocurrirá sólo si el complemento a dos del
minuendo es menor o igual que el complemento a dos del sustraendo.
La instrucción Bifurca si es Bajo o el Mismo (BLS) es similar a la instrucción BLE excepto que
compara números no signados. Cuando se ejecuta inmediatamente después de una operación
55
DL3155M24HC11
de resta o comparación, la bifurcación ocurrirá sólo si el minuendo no signado es menor o igual
que el sustraendo no signado.
La instrucción Bifurca si es Menor que Cero (BLT) es también similar a la instrucción BLE
excepto que no efectúa comparación de igualdad. Si BLT se ejecuta enseguida de una
operación de resta o comparación, Habrá bifurcación sólo si el complemento a dos del
minuendo es menor que el complemento a dos del sustraendo.
Se incluyen dos instrucciones adicionales en la Figura 3-11. Aunque no son instrucciones de
bifurcación, se agregan aquí por no caber en otra categoría.
La instrucción de No Operación (NOP) es una instrucción que simplemente consume un
pequeño lapso de tiempo. No cambia el contenido de ningún registro excepto el del contador de
programa. Incrementa el contenido del contador de programa en uno y consume dos ciclos
MPU. A pesar de ello, la NOP es una instrucción muy útil. Cuando se escribe un programa,
frecuentemente se emplean muchas instrucciones. Una vez que el programa se carga en
memoria, es muy inconveniente remover una sola instrucción. El hueco dejado en memoria
puede ser llenado recorriendo todas las instrucciones siguientes. Sin embargo, una manera
rápida es llenar el hueco con una o varias instrucciones NOP.
La instrucción STOP es la instrucción de “fin de programa” del 68HC11. En unidades anteriores
hemos empleado esta instrucción como PARO, o final de secuencias. Sin embargo, como verá
después en este curso, hay más detalles en la ejecución de una instrucción STOP que
simplemente detener la MPU. Por ahora, no obstante, siga considerando a STOP como la
instrucción para terminar la ejecución de un programa.
Instrucciones del Registro de Código de Condición
La MPU 68HC11 tiene ocho instrucciones que nos permiten tener acceso directo a los códigos
de condición. Se listan en la Figura 3-12.
Fig. 3-12. Instrucciones de registro código de condición
56
DL3155M24HC11
La instrucción Clear carry, Limpiar Acarreo (CLC) pone a cero la bandera C, set carry, Fijar
Acarreo a Uno (SEC) C=1. De la misma forma, las instrucciones CLV y SEV pueden ser usadas
para limpiar o fijar a uno la bandera de sobreflujo. También, las instrucciones CLI y SEI pueden
usarse para limpiar o fijar a uno la bandera de interrupción.
Usted notará que no hay instrucciones para limpiar individualmente las banderas N, Z o H. Sin
embargo, aún podemos fijar a uno o limpiar esas banderas con la instrucción de Transfer
Accumulator A, Transferencia del Acumulador A al Processor Status Reguister, Registro de
Estado del Procesador (TAP). La Figura 3-13 ilustra la ejecución de dicha instrucción. El
contenido de los bit 0 al 7 del acumulador A es transferido a los registros de código de
condición. Así, esta instrucción nos permite fijar a uno o limpiar todos los códigos de condición
con sólo una instrucción.
Fig. 3-13 Ejecutando la instrucción TAP
La instrucción final es la instrucción de Transfer Processor Status, Transferencia del Estado del
Procesador al Acumulador A (TPA). Durante su ejecución, el contenido de los registros de
código de condición es transferido a los bits 0 al 7 del acumulador A. Esta operación se ilustra
en la Figura 3-14.
Fig. 3-14 Ejecutando la instrucción TPA
57
DL3155M24HC11
3.2 MODOS DE DIRECCIONAMIENTO
En el modo de direccionamiento inmediato, el operando es el byte en memoria inmediatamente
siguiente al opcode. Generalmente se trata de instrucciones de dos bytes. El primer byte es el
opcode, el segundo es el operando. Sin embargo, hay excepciones a la regla de los dos bytes.
Algunas operaciones involucran al registro índice de 16 bits y al apuntador de pila. En esos
casos, el operando se compone de los dos bytes siguientes al opcode. Esas son instrucciones
de tres bytes. El primer byte es el opcode, el segundo y tercero son el operando.
En el modo de direccionamiento directo, el byte siguiente al opcode es la dirección del
operando. Estas siempre son instrucciones de dos bytes. El primer byte es el opcode; el
segundo es la dirección del operando. Un byte puede especificar direcciones desde 00 a FF16.
Así, cuando sea empleado el modo de direccionamiento directo, el operando debe estar en los
primeros 25610 bytes de memoria. Puesto que la MPU 68HC11 puede tener hasta 65536 10
bytes de memoria, se deben usar otros medios para direccionar la porción superior de la
memoria.
El modo de direccionamiento relativo se emplea para bifurcar. Se trata de instrucciones de dos
bytes. El primer byte es el opcode, el segundo es la dirección relativa. Recuerde que la
dirección relativa se suma al contador de programa para formar la dirección absoluta. Puesto
que la dirección relativa es un número de 8 bits en complemento a dos, los límites de la
bifurcación son +12710 y –128 10.
En el modo de direccionamiento inherente puede ser que no haya operando o que el operando
esté implícito en la instrucción. Estas son instrucciones de un byte.
En esta sección discutiremos dos nuevos modos de direccionamiento. Son llamados
direccionamiento extendido y direccionamiento indexado. Trataremos el direccionamiento
extendido primero.
Direccionamiento Extendido
El direccionamiento extendido es similar al direccionamiento directo pero con una diferencia
significativa. Tenga en mente que en el direccionamiento directo el operando debe hallarse en
los primeros 25610 bytes de memoria. Ya que esto representa menos del uno por ciento de las
direcciones disponibles por la MPU 68HC11, es necesario un modo de direccionamiento más
poderoso. El modo de direccionamiento extendido cubre dicha necesidad.
El formato de una instrucción que usa direccionamiento extendido se muestra en la Figura 3-15.
La instrucción siempre tendrá tres bytes. El primer byte es el opcode. El segundo y tercer bytes
forman una dirección de 16 bits. Note que la parte mas significativa de la dirección es el byte
consecutivo del opcode. Puesto que esta instrucción tiene una dirección de 16 bits, el operando
puede ser cualquiera de las 655361 0 direcciones posibles.
58
DL3155M24HC11
Fig. 3-15 Formato de una instrucción que usa el modo de direccionamiento extendido.
Por ejemplo, suponga que desea cargar el operando residente en la localidad de memoria
213416 en el acumulador B. La instrucción se verá como sigue:
F6
Opcode para LDAB extendido
21
Dirección de orden alto
34… Dirección de orden baj
De la misma manera, si desea el numero de la localidad AA0016, la instrucción seria:
7C
AA
00
Opcode para INC extendido
Dirección de orden alto
Dirección de orden bajo
El modo de direccionamiento extendido nos permite direccionar un operando residente en
cualquier dirección incluyendo los primeros 25610 bytes de la memoria. Así, si desea cargar el
operando de la dirección 0013 16 en el acumulador A, puede usar direccionamiento extendido:
B6
00
13
Opcode para LDAA extendido
Dirección de orden alto
Dirección de orden bajo
O puede usar direccionamiento directo:
96
13
Opcode para LDAA directo
Dirección
Note que, con direccionamiento directo, la dirección de orden alto puede ser ignorada, ya que
siempre es 00. Puesto que el direccionamiento directo ahorra un byte de memoria y un ciclo de
MPU, normalmente es usado cuando el operando se halla en los 2561 0 bytes de memoria. El
direccionamiento extendido se usa cuando el operando se halla arriba de la dirección 00FF16.
Sin embargo, como vera después, algunas instrucciones no cuentan con direccionamiento
directo. En esos casos debe emplearse direccionamiento extendido aun si el operando esta en
las primeras 25610 localidades de memoria.
Direccionamiento Indexado
El modo más poderoso disponible para el 68HC11 es el direccionamiento indexado. Recuerde
que el 68HC11 posee dos registros índices de 16 bits, el IX y el IY. Hay algunas instrucciones
asociadas con esos registros. Estas nos permiten cargar el registro desde memoria y
59
DL3155M24HC11
almacenar su contenido en memoria. También podemos incrementar y decrementar un registro
índice. Además, podemos comparar su contenido con dos bytes de memoria consecutivos.
Estas capacidades hacen que al registro índice capaz de funcionar como un contador de 16
bits. Este contador puede funcionar como un apuntador de direcciones dirigido a cualquier
dirección de memoria.
Propósito.
Antes de entrar en detalles de cómo funciona el direccionamiento indexado,
veamos porque es necesario. Supongamos que deseamos sumar una lista de 2016 numeros, y
que estos se hallan en 2016 localidades de memoria consecutivas, comenzando en la dirección
0050. Empleando los modos de direccionamiento discutidos anteriormente, nuestro programa
podria verse como sigue:
CLRA
Limpia el acumulador A
ADDA Suma el primer numero
50
al acumulador A
ADDA Suma el segundo numero
51
al acumulador A
ADDA Suma el tercer numero
52
al acumulador A
.
.
.
ADDA Suma el ultimo numero
6F
al acumulador A
STOP
Alto.
Aunque este programa nos proporciona el resultado deseado, emplea demasiadas
instrucciones repetitivas. Su extensión es de 6610 bytes de memoria. Note que todas las
instrucciones ADDA son idénticas, a excepción de la dirección del operando. El
direccionamiento indexado simplifica mucho los programas de este tipo.
Formato de la Instrucción.
El formato de una instrucción que usa direccionamiento
indexado es como el de la Figura 3-15. Note que se trata de una instrucción de dos bytes. El
primer byte es el opcode, el segundo se llama compensación (offset) de dirección. La
compensación de dirección es un numero binario de 8 bits no signado. Este se suma al
contenido del registro índice para determinar la dirección en que se halla el operando.
Considere que, a menos que se especifique otra cosa, “registro índice” se refiere al registro
índice X.
Fig. 3-15. Formato de una instrucción que usa modo de direccionamiento indexado
60
DL3155M24HC11
Cada instrucción que involucra un operando en memoria puede usar el modo de
direccionamiento indexado. En esta unidad emplearemos la siguiente convención para indicar
direccionamiento indexado:
LDAA, X
STAA, X
ADDB,X
etc.
En cada caso, la X nos dice que usamos direccionamiento indexado. Por ejemplo, la primera
instrucción significa “usando direccionamiento indexado, carga el contenido de la localidad de
memoria especificada en el acumulador A”. Ahora veamos como se determina la dirección del
operando.
Determinando la dirección del operando. Cuando se usa direccionamiento indexado,
la dirección del operando se determina con la dirección de compensación(offset) y el numero en
el registro índice. Específicamente, la compensación de dirección de 8 bits es sumada a la
dirección de 16 bits que se halla en el registro índice. La suma de 16 bits es la dirección del
operando. La Figura 3-16 ilustra esto.
Fig. 3-16. La dirección de operando es formada por la suma
de la dirección Offset y el contenido del registro índice.
Aquí, la instrucción en la localidad de memoria 00041 6 es LDAA, X. La dirección de
compensación es 1116. El contenido del registro índice es 013316 . Cuando se ejecuta la
instrucción LDAA, X; la dirección del operando se forma sumando la dirección de compensación
a él número en el registro índice. En este caso, la dirección del operando será:
+
013316
1116
014416
El operando de esta dirección es cargado en el acumulador A. En este ejemplo, el operando es
FF y se carga cuando la instrucción de la localidad 0004 es ejecutada. Es importante recordar
61
DL3155M24HC11
que esto no cambia el contenido del registro índice de ninguna manera. Así, el registro índice
contiene aún 013316 después de la ejecución de la instrucción.
Sumando una lista de números.
Para ver como este modo de direccionamiento ahorra
instrucciones, considere el problema antes planteado. Recuerde que queremos sumar 2016
números almacenados en localidades de memoria, consecutivas, comenzando en la dirección
0050. Empleando direccionamiento indexado para la instrucción de suma, nuestro programa
queda como en la Figura 3-17.
DIRECCION
HEX
CONTENIDO
HEX
0010
0011
0012
0013
0014
0015
CE
00
50
4F
AB
00
MNEMONICOS/
CONTENIDO
HEX
LDX #
00
50
CLR A
ADDA, X
00
0016
0017
0018
0019
001A
001B
001C
08
8C
00
70
26
F8
CF
INX
CPX #
00
70
BNE
F8
STOP
COMENTARIOS
Carga en forma inmediata el registro
índice con la dirección del primer
número de la lista.
Borra el acumulador A
Suma al acumulador usando
direccionamiento indexado con la
dirección de compensación(offset) de 00
Incrementa el registro índice
Compara el contenido del registro índice
con la dirección más grande que la
dirección del ultimo numero en la lista.
Si no es igual salta a la instrucción
ADDA, X
De lo contrario detente
Fig. 3-17. Programa para sumar una lista de 2016 números
La primera instrucción es cargar el registro índice en modo inmediato. Note que se emplea un
nuevo símbolo en este programa. El símbolo # indica el modo de direccionamiento inmediato.
Así, la instrucción LDX# causa que el operando que sigue al opcode sea cargado en el registro
índice. Recuerde que el registro índice puede guardar 2 bytes. El operando es el número de
dos bytes 005016. No olvide que esta es la dirección del primer número en la lista de números
para sumar.
La siguiente instrucción limpia el acumulador A. La suma será acumulada en este registro, lo
que hace necesario limpiarlo inicialmente.
La tercera instrucción (ADDA,X) es la única instrucción en el programa que usa
direccionamiento indexado. El símbolo X lo indica. La dirección offset es 00. Recuerde que la
dirección del operando se determina sumando el offset al contenido del registro índice. El
registro índice contiene 0050 16 de una instrucción previa. Ya que el offset es 00, la dirección del
operando es 0050 16. Esto es, el contenido de la localidad de memoria 00501 6 se suma al
contenido del acumulador A. Tenga en mente que 00501 6 es la dirección del primer número de
la lista.
La cuarta instrucción incrementa el registro índice a 005116. Ahora apunta a la dirección del
segundo número de la lista.
La quinta instrucción compara el número en el registro índice con un número que es mayor en
una unidad a la dirección del último número de la lista.
62
DL3155M24HC11
Si ocurre la igualdad, la bandera Z es fijada a uno. Es claro que no se harán más
comparaciones. Note una vez más que el símbolo # indica el modo de direccionamiento
inmediato. Así, el contenido del registro índice es comparado con los dos bytes siguientes en el
programa o 0070.
La instrucción BNE prueba la bandera Z para ver si los dos números son iguales. Si no se
indica igualdad, la dirección relativa (F8) dirige el retorno del programa a la instrucción ADDA,X.
El primer paso en el lazo termina con el primer número en el acumulador A.
El segundo paso en el bucle comienza con la ejecución, otra vez, de la instrucción ADDA,X.
Esta vez, el registro índice apunta a la dirección 0051. Por lo tanto, el segundo número de la
lista se suma al acumulador A. El acumulador A ahora contiene la suma de los dos primeros
números. El registro índice es incrementado a 0052. Su contenido se compara otra vez con
0070. No hay igualdad, lo que provoca que la instrucción BNE repita el bucle una vez más.
El lazo es repetido una y otra vez. Cada vez se suma al acumulador A, el siguiente número de
la lista. Este proceso continúa hasta que el último número de la lista es sumado. Para entonces,
el registro índice será incrementado a 0070. Así, cuando se ejecute la instrucción CPX #, la
bandera Z será activada, al haber igualdad entre los dos números. La instrucción BNE reconoce
que hay igualdad. Consecuentemente, no permite que ocurra la bifurcación y la siguiente
instrucción en secuencia, se ejecuta. Ya que se trata de la instrucción STOP, el programa se
detiene. Para entonces, la suma de los 2016 números de la lista se hallará en el acumulador A.
Sumar una lista de números es un ejemplo clásico de cómo el modo indexado, puede ser usado
para acortar un programa. Sin embargo, este ejemplo no muestra la potencia total del
direccionamiento indexado. Por ejemplo, no ilustra la ventaja de la dirección offset. Ya que el
direccionamiento indexado es tan importante, veamos otro ejemplo.
Copiando una lista.
Supongamos que tenemos una lista de 1016 números que deseamos
copiar de una localidad a otra. Por simplicidad, suponga que la lista está presente en las
direcciones 0030 a la 003F y que deseamos copiarla en la localidad 0040 a la 004F. Sin usar
direccionamiento indexado, nuestro programa quedaría así:
LDAA
30
STAA
40
LDAA
31
STAA
41
.
.
.
LDAA
3F
STAA
4F
63
DL3155M24HC11
STOP
Como puede ver; programas largos y repetitivos como éste, son excelentes candidatos para el
direccionamiento indexado.
Empleando direccionamiento indexado, nuestro programa puede verse como se muestra en la
Figura 3-18. El primer paso es cargar el registro índice con la primera dirección de la lista
original. La instrucción LDAA, X tiene una compensación de dirección de 00. Por lo tanto, el
acumulador A es cargado desde la dirección especificada por el registro índice (0030). Esto es,
el primer número de la lista original es cargado en el acumulador A cuando se ejecuta la
instrucción LDAA, X.
DIRECCION
HEX
CONTENIDO
HEX
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
001A
001B
001C
001D
CE
00
30
A6
00
A7
10
08
8C
00
40
26
F6
CF
MNEMONICOS/
CONTENIDO
HEX
LDX #
00
30
LDAA, X
00
STAA, X
10
INX
CPX #
00
40
BNE
F6
STOP
COMENTARIOS
Carga en forma inmediata el registro
índice con la dirección de La lista
original
Carga el acumulador en forma indexada
con un offset de 00
Almacena el acumulador A con un offset
de 1016
Incrementa e registro índice
Comparación indexada con una
dirección más grande que la ultima
dirección de la lista original
Si no es igual, salta a la instrucción
LDAA, X
De lo contrario detente
Fig. 3-18. Programa para copiar una lista de direcciones
0030 – 003f dentro de otra 0040 – 004F
La instrucción STAA, X ilustra el uso de la dirección offset. Dicha compensación es 10. Este
numero se suma a la dirección en el registro índice para formar la dirección efectiva en la cual
el contenido del acumulador A es almacenado. Así, el contenido del acumulador A se almacena
en la dirección 0040. Recuerde, esto no cambia el numero del registro índice de manera
alguna. Empleando la compensación, podemos cargar el acumulador indexado de una
dirección y almacenar el acumulador indexado en otra.
Enseguida, se incrementa el registro índice a 0031. Se compara con 0040. Ya que no son
iguales, la instrucción BNE dirige el programa de regreso a la instrucción LDAA, X. El ciclo se
repite hasta que la lista entera se reescriba en las localidades 0040 a la 004F. Después de
copiado el ultimo dato, el registro índice se incrementa a 0040. Así, la instrucción CPX # pone a
uno la bandera Z permitiendo que la instrucción BNE saque del ciclo, al programa. El
programa se detiene después que los datos de la lista son escritos en su nueva posición de
memoria.
64
DL3155M24HC11
SUMARIO DEL CONJUNTO DE INSTRUCCIONES
Ahora ha sido introducido al uso de las instrucciones mas frecuentes e importantes del 68HC11.
Como se menciono, el 68HC11 puede ejecutar todas las instrucciones del MC6800 y del
MC6801. También, la CPU 68HC11 tiene un mapa de códigos de operación paginado con un
total de 91 nuevos opcodes. Las mayores adiciones funcionales del 68HC11 que lo distinguen
de los miembros anteriores de la familia incluyen: el registro índice Y, IY; dos tipos de
instrucciones de división de 16 por 16; la instrucción STOP; una instrucción de manipulación de
bits y las instrucciones aritméticas de multiplicación, división, etc.
La Figura 3-19 muestra todas las instrucciones del 68HC11 en todos los modos de
direccionamiento posibles. La información dada ahí, incluye, de izquierda a derecha, los
Formatos Fuente (Mnemónicos), la Operación, la Expresión Boleaba (symbolic logic), el Modo
de Direccionamiento del Operando, el Código Maquina en Hexadecimal del Opcode/Operando,
e información del número de bytes y ciclos de máquina requeridos por la instrucción. Sigue una
breve descripción de cada una.
La columna de Formatos Fuente es una lista de mnemónicos junto con la forma de la
instrucción con respecto a su operando. Note que ciertos tipos de instrucciones, como la
instrucción ADD, tienen relativamente muchas formas distintas. Aunque no es necesario
memorizar todas las instrucciones, usted puede aprender a reconocer la categoría de la
instrucción por su mnemónico y entonces determinar en cual de las siete categorías principales
cae. Por ejemplo, aunque hay 17 instrucciones cuyo mnemónico comienza con la letra A, un
examen mas detallado revela solo 3 tipos distintos. Estas son las instrucciones ADD, AND y las
instrucciones aritméticas (SHIFT). Un conocimiento básico de los distintos tipos de
instrucciones disponibles, junto con una aproximación sistemática, le dará un conocimiento
sorprendentemente completo del conjunto de instrucciones.
La columna de Operación de la Figura 3-19 contiene una breve descripción del mnemónico a la
izquierda. Note cómo el mnemónico se deriva directamente de la corta frase descriptiva de la
operación. Por ejemplo, ASL significa “Arithmetic Shift Left” (Corrimiento Aritmético a la
Izquierda).
La columna de Boolean Expression, (expresión boleana), proporciona una representación
lógica de la instrucción en forma simbólica. Esta información puede ser útil para diseñar o
analizar (depurar) programas.
La columna de Addressing Mode Operand, (modo de direccionamiento del Operando), contiene
abreviaturas de los posibles modos con el operando. A la derecha se localizan los códigos de
Máquina, cada operación dados en hexadecimal. Un sistema de abreviaturas, descrito en
“NOTES” al final de la Figura 3-19, se utilizan para indicar el formato, direccionamiento,
memoria y otra información relevante acerca de los opcodes. Las siguientes dos columnas
listan el número de bytes y ciclos de MPU requeridos para ejecutar la instrucción.
Finalmente, la última columna contiene información acerca del efecto de la ejecución de una
instrucción sobre el registro de códigos de condición (banderas). Existen diversas posibilidades.
Dependiendo de la instrucción y del modo de direccionamiento, los bits del código de condición
pueden permanecer sin cambio, ser limpiados (0), o activados (1).
65
DL3155M24HC11
Observe detenidamente el conjunto de instrucciones del 68HC11 dado en la Figura 3-19 para
familiarizarse con las operaciones y sus mnemónicos. Algunas de esas fueron discutidas
anteriormente.
66
DL3155M24HC11
Fig. 3-19 CONJUNTO DE INSTRUCCIONES DEL MC68HC11
67
DL3155M24HC11
Fig. 3-19 CONTINUACION.
68
DL3155M24HC11
Fig. 3-19. CONTINUACION.
69
DL3155M24HC11
Fig. 3-19. CONTINUACION.
70
DL3155M24HC11
Fig. 3-19. CONTINUACION.
71
DL3155M24HC11
NOTAS:
Ciclo:
-
--
=
=
Infinito o hasta que ocurra un reset
Se usan 12 ciclos comenzando con el opcode de búsqueda, entra a un estado de espera por un tiempo
equivalente a un número entero de ciclos MPU del E-clock, hasta que una interrupción es reconocida.
Finalmente, dos ciclos adicionales se usan para buscar el vector de interrupción adecuado (total = 14 +n)
Operando(s)
dd = 8 bits direccionamiento directo $0000 - $FFFF. (Se asume que el byte alto es $00)
ff = Compensación positiva(positive offset) de 8 bits $00 (0) a $FF(255), sumado al índice.
hh = Byte de orden bajo de 16 bits direccionamiento extendido
ii = Un byte de dato inmediato
jj = Byte de orden alto de 16 bits dato inmediato
kk = Byte de orden bajo de 16-bits dato inmediato
ll = Byte de orden bajo de 16-bits, direccionamiento extendido
mm = Mascara de 8 bits (los bits se activan al ser afectados)
rr = Compensación relativa(relative offset) signada $80 (-128) a $7F (+ 127)
Compensación relativa a la dirección siguiente al código de máquina, byte offset.
Código de condición:
-Bit no cambiado
0
Siempre borrado ("0" lógico)
1
Siempre activado("1" lógico)
ô
Bit activado o borrado según la operación
↓
Bit que puede ser borrado, pero no activado.
72
DL3155M24HC11
73
DL3155M24HC11
3.3 EXPLICACION DE LAS INSTRUCCIONES
Lista del conjunto de instrucciones del 68HC11.
NOMENCLATURA
La siguiente nomenclatura será empleada en las definiciones del las instrucciones.
(a) Operadores
( )
←
↑
↓
•
+
=
=
=
=
=
=
⊕
¬
∗
:
−
=
=
=
=
=
Contenido del registro, mostrado entre paréntesis.
Transferido a…
Sacado de la pila
Colocado en la pila
Operación AND booleana
Símbolo de suma aritmética excepto cuando es usada como símbolo
de OR-inclusiva, en formula booleana.
OR-exclusiva
Operación NOT booleana
Multiplicación
Concatenación
Símbolo de substracción aritmética o símbolo de
negación(complemento a dos.)
(b). Registros en el microcontrolador.
ACCA
ACCB
ACCX
ACCD
=
=
=
=
CCR
IX
IXH
IXL
IY
IYH
IYL
PC
PCH
PCL
SP
SPH
SPL
=
=
=
=
=
=
=
=
=
=
=
=
=
Acumulador A
Acumulador B
Acumulador ACCA o ACCB
Acumulador doble. Acumulador A concatenado con el acumulador
B, donde A es el byte más significativo.
Registro código de condición
Registro índice X, 16 bits
Registro índice X, 8 bits de orden alto.
Registro índice X, 8 bits de orden bajo.
Registro índice Y, 16 bits
Registro índice Y, 8 bits de orden alto.
Registro índice Y, 8 bits de orden bajo.
Contador de programa, 16 bits.
Contador de programa, 8 bits de orden alto (más significativo)
Contador de programa, 8 bits de orden bajo (menos significativo)
Stack Pointer, 16 bits.
Stack Pointer, 8 bits de orden alto.
Stack Pointer, 8 bits de orden bajo.
74
DL3155M24HC11
(c). Memoria y direccionamiento.
M =
M+1 =
Rel =
(opr) =
(msk) =
(rel) =
Una localidad de memoria (1 byte)
Un byte de memoria mas 0001, respecto a la dirección de la localidad
de memoria indicada por "M".
Ajuste Relativo (relative offset), como es el caso de almacenar
números con complemento a dos en él ultimo byte del código de
máquina correspondiente a una instrucción de salto.
Operando
Mascara usada en instrucciones de manipulación de bit.
Ajuste relativo (relative offset), usado en instrucciones de salto.
(d). Bit 0 a Bit 7 del Registro código de condición
C
V
Z
N
I
H
X
S
=
=
=
=
=
=
=
=
Acarreo/prestamo, bit "0"
Indicador de sobreflujo en complemento a dos, bit "1"
Indicador del cero, bit "2"
Indicador negativo, bit "3"
Macara de interrupción I, bit "4"
Semiacarreo, bit 5
Macara de interrupción X, bit 6
“Paro deshabilitado (stop disable), bit 7
(e). Estado de los bits individuales, antes de la ejecución de una instrucción.
An = Bit n de ACCA (n = 7, 6, 5,…0)
Bn = Bit n de ACCB (n = 7, 6, 5,…0)
Dn = Bit n de ACCD (n = 15, 14, 13,…0), donde los bits 8-15 se refieren a
Ixn
IXHn
IXLn
IYn
IYHn
IYLn
Mn
SPHn
SPLn
Xn
=
=
=
=
=
=
=
=
=
=
ACCA y el bit 0-7 a ACCB
Bit n de IX (n = 15, 14, 13,…0)
Bit n de IXH (n = 7, 6, 5,…0)
Bit n de IXL (n = 7, 6, 5 ,…0)
Bit n de IY (n = 15, 14, 13,…0)
Bit n de IYH (n = 7, 6, 5,…0)
Bit n de IYL (n = 7, 6, 5 ,…0)
Bit n de M (n = 7, 6, 5,…0)
Bit n de SPH (n = 7, 6, 5 ,…0)
Bit n de SPL (n = 7, 6, 5,…0)
Bit n de ACCX (n = 7, 6, 5,…0)
75
DL3155M24HC11
(f). Estado de los bits individuales en el resultado de la ejecución de una instrucción.
(i) Para resultados de 8 bits
Rn =
Bit n del resultado (n=7, 6, 5, 4,….0).
Este aplica a las instrucciones que proporcionan un resultado
contenido en un byte simple de memoria, o en un registro de 8 bits.
(ii) Para resultados de 16 bits.
RHn =
RLn =
Rn =
Bit n del byte más significativo (n=7, 6, 5, 4,….0).
Bit n del byte menos significativo (n=7, 6, 5, 4,….0), este aplica a
instrucciones las cuales, proveen resultados contenidos en dos bytes
consecutivos de memoria o en un registro de 16 bits. .
Bit n del resultado (n=15, 14, 13, 12,….0).
(g). Simbologia para el CCR
0
1
=
=
=
=
=
Bit no afectado.
Se coloca un bit 0
Se coloca un bit 1
Bit colocado estará de acuerdo al resultado de la operación
El bit cambiara permanecerá constante o podrá cambia de 1 a 0
NOTA: Las banderas no mencionadas se sobre entenderá que son afectadas.
76
DL3155M24HC11
INSTRUCCIONES
ABA
Suma el acumulador B, al Acumulador A
ACCA ← (ACCA) + (ACCB)
Operación:
Descripción: Suma el contenido de ACCB al contenido de ACCA y el resultado colócalo
en el acumulador A, ACCA.
Registro de Códigos de condición (CCR)
S
—
H=1
N=1
Z=1
V=1
C=1
X
—
H
I
—
N
Z
V
C
si ocurrió un acarreo en el bit 3; 0 en otro caso
el bit más significativo del resultado, es 1;en otro caso se borra.
los bits del resultado son 00; 0 en cualquier otro caso.
si hubo sobreflujo en complemento a dos; 0 en otro caso.
si hubo un acarreo desde el bit más significativo del resultado, 0 en
otro caso.
ABX
Suma el acumulador B, al registro índice X
IX ← (IX) + (ACCB)
Operación:
Descripción: Suma el contenido de 8 bits sin signo del ACCB, al contenido del registro
índice X (IX), tomando en cuenta el posible acarreo fuera del byte de orden
bajo del registro índice; colocando el resultado en el registro índice X (IX).
ACCB no cambia.
Registro de Códigos de condición (CCR)
S
—
Mnemónico:
X
—
H
—
I
—
N
—
Z
—
V
—
C
—
ABX
77
DL3155M24HC11
ABY
Suma el acumulador B, al registro índice Y
Operación:
IY ← (IY) + (ACCB)
Descripción: Suma el contenido sin signo de 8 bits, del ACCB, al contenido del registro
índice Y (IY), tomando en cuenta el posible acarreo fuera del byte de orden
bajo del registro índice Y; colocando el resultado en el registro índice Y
(IY). ACCB no cambia.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
ABY
ADC
Suma con acarreo.
Operación:
ACCX ← (ACCX) + (M) + (C)
Descripción: Suma de los contenidos del bit "C", a la suma del contenido ACCX y M,
colocando el resultado en ACCX.
Registro de Códigos de condición (CCR)
S
—
X
—
H
I
—
N
Z
V
C
H=1 Si ocurrió un acarreo en el bit 3; 0 en otro caso
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
ADCA (opr) ADCB (opr)
78
DL3155M24HC11
ADD
Suma sin acarreo
Operación:
ACCX ← (ACCX) + (M)
Descripción: Suma el contenido de M al contenido de ACCX y el resultado se coloca en
ACCX.
Registro de Códigos de condición (CCR)
S
—
X
—
H
I
—
N
Z
V
C
H=1 Si ocurrió un acarreo en el bit 3; 0 en otro caso
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
ADDA(opr); ADDB (opr)
ADDD
Suma con el acumulador doble
Operación:
ACCD ← (ACCD) + (M:M + 1)
Descripción: Suma el contenido de M concatenado con M + 1, al contenido de ACCD y lo
coloca en ACCD.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
79
DL3155M24HC11
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
ADDD (opr)
AND
Operación lógica AND
ACCX ← (ACCX) • (M)
Operación:
Descripción: Ejecuta operación AND entre el contenido de ACCX y el contenido de M,
colocando el resultado en ACCX. (Cada bit de ACCX será afectado por la
operación AND lógica entre
M y ACCX, de acuerdo a cada bit
correspondiente.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
N
—
Z
V
0
C
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 0
Mnemónico :
ANDA (opr); ANDB (opr)
ASL
Corrimiento aritmético a la izquierda
(Igual que LSL)
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M, una posición a la izquierda. El
bit “0” es cargado con un "0" lógico. El bit "C" en el CCR se carga desde el
bit más significativo de ACCX o M.
80
DL3155M24HC11
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Desde fuente:
ASLA; ASLB; ASL (opr)
ASLD
Corrimiento aritmético a la izquierda del acumulador D
(Igual que LSLD)
Operación:
Descripción: Corrimiento de todos los bits de ACCD, una posición a la izquierda. El bit 0
es cargado con "0". El bit C en el CCR es cargado desde el bit más
significativo de ACCD.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
ASLD
81
DL3155M24HC11
ASR
Corrimiento aritmético a la derecha
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M una posición a la derecha. El bit
7 es constante. El bit 0 se carga dentro del bit "C" de CCR.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos:
ASRA, ASRB, ASR (opr)
BCC
Salta si el acarreo es borrado
(igual a BHS)
Operación:
PC ← (PC) + 0002 + Rel
Sí C = 0
Descripción: Prueba el estado del bit "C", en el registro código de condición y causa un
salto si éste se encuentra borrado.
Ver instrucción BRA para mayores de talles de instrucciones de salto.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónicos :
BCC(rel)
82
DL3155M24HC11
BCLR
Borrado de bit(s), en memoria
Operación:
M ← M • ( PC + 2 )
M ← M • ( PC + 3 ) Modo de direccionamiento solo
para IND, Y
Descripción: Borra los bits múltiples en la localidad M. Los bits a ser borrados se
especifican con unos, en el byte de mascara. Todos los otros bits en M no
se ven afectados.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
N
Z
—
V
0
C
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 0
Mnemónico:
BCLR (opr)(msk)
BCS
Salta si el acarreo esta activado
(Igual a BLO)
Operación:
PC ← (PC) + 0002 + Rel
si C = 1
Descripción: Prueba el estado del bit "C", del registro código de condición y causa un
salto si dicho bit esta activado.
Para mayores de talles, vea la instrucción BRA, respecto a la ejecución de
salto.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BCS (rel)
83
DL3155M24HC11
BEQ
Salta si es igual
Operación:
PC ← (PC) + 0002 + Rel
si Z = 1
Descripción: Prueba el estado del bit "Z", del registro código de condición y causa un
salto si dicho bit esta activado.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BEQ (rel)
BGE
Salta si es mayor o igual a cero.
Operación:
PC ← (PC) + 0002 + Rel si (N) ⊕ (V) = 0
Equivale a (ACCX) ≥ (M)
(números signados en complemento a dos)
4
Descripción: Causa un salto si N es activada y V también, ó, N es borrada al igual que V,
en
el CCR.
Si la instrucción BGE es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número de complemento a dos
representado por el minuendo (ACCX), fue mayor o igual al número de
complemento a dos representado por el substraendo(M).
(Ver instrucción BRA para detalles de él salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BGE (rel)
84
DL3155M24HC11
BGT
Salta si es mayor a cero.
Operación:
PC ← (PC) + 0002 + Rel si (Z) + [(N) ⊕ (V)] = 0
Equivale a (ACCX) > (M)
(números signados en complemento a dos)
Descripción: Causa un salto si (Z es borrada) y (N activada al igual que V) ó, (N es
borrada y V, también).
el CCR.
Si la instrucción BGT es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número de complemento a dos
representado por el minuendo (ACCX), fue mayor que el número de
complemento a dos representado por el substraendo(M).
(Ver instrucción BRA para detalles de él salto).
Registro de Códigos de condición (CCR)
No afectados.
Forma canonica: BGT(rel)
BHI
Salta si es mayor.
Operación:
PC ← (PC) + 0002 + Rel si (C) + (Z) = 0
Equivale a (ACCX) > (M)
(números binarios sin signo)
Descripción: Causa un salto si C es borrada al igual que Z en el CCR.
Si la instrucción BHI es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número binario sin signo
representado por el minuendo (ACCX), fue mayor al número binario sin
signo representado por el substraendo (M).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BHI (rel)
85
DL3155M24HC11
BHS
Salta si es mayor o igual.
(igual a BCC)
PC ← (PC) + 0002 + Rel si C = 0
Equivale a (ACCX) ≥ (M)
(números binarios sin signo)
Operación:
Descripción: Prueba el estado del bit C, en el registro código de condición y causa un
salto si ésta borrado.
Si la instrucción BHS es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número binario sin signo
representado por el minuendo (ACCX), fue mayor o igual al número binario
sin signo representado por el substraendo(M).
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BHS(rel)
BIT
Bit de prueba.
(ACCX) • (M)
Operación:
Descripción: Ejecuta la operación lógica AND, entre el contenido de ACCX y el contenido
de M, modificando los códigos de condición. Ninguno de los contenidos de
los operandos ACCX o M , son afectados. (Cada bit del resultado de la
operación AND, es el correspondiente a M y ACCX).
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
0
C
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
86
DL3155M24HC11
V=0 0
Mnemónicos: BITA(opr); BITB(opr)
BLE
Salta si es menor o igual a cero.
(igual a BCC)
Operación:
PC ← (PC) + 0002 + Rel si (Z) + [(N) ⊕ (V)] = 1
Equivale a (ACCX) ≤ (M)
(números signados con complemento a dos)
Descripción: Causa un salto si (Z esta activada) o (N activada y V borrada) o (N borrada y
V activada) en el CCR.
Si la instrucción BLE es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número de complemento a dos
representado por el minuendo (ACCX), fue menor o igual al número de
complemento a dos representado por el substraendo(M).
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BLE(rel)
BLO
Salta si es menor
(Igual a BCS)
Operación:
PC ← (PC) + 0002 + Rel si C = 1
Equivale a (ACCX) < (M)
(números binarios sin signo)
Descripción: Prueba el estado del bit C, en el registro código de condición y causa un
salto si ésta activado.
Si la instrucción BLS es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
87
DL3155M24HC11
(A, B o D), el salto ocurre, sí y solo sí, el número binario sin signo
representado por el minuendo (ACCX), fue menor que el número binario sin
signo representado por el substraendo(M).
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BLO(rel)
BLS
Salta si es menor o igual
Operación:
PC ← (PC) + 0002 + Rel si (C) + (Z) = 1
Equivale a (ACCX) ≤ (M)
(números binarios sin signo)
Descripción: Causa un salto si en el registro código de condición, C esta activo o Z
también lo esta.
Si la instrucción BLS es ejecutada inmediatamente después de la ejecución
de alguna de las instrucciones CBA, CMP (A, B o D), CP(X o Y), SBA o SUB
(A, B o D), el salto ocurre, sí y solo sí, el número binario sin signo
representado por el minuendo (ACCX), fue menor o igual a el número
binario sin signo representado por el substraendo(M).
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BLS(rel)
88
DL3155M24HC11
BNE
Salta si no es igual.
Operación:
PC ← (PC) + 0002 + Rel
si Z = 1
Descripción: Prueba el estado del bit Z en el registro de código de condición y causa un
salto si esta borrado.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BNE(rel)
BPL
Salta si es más.
Operación:
PC ← (PC) + 0002 + Rel
si N = 0
Descripción: Prueba el estado del bit N, en el registro código de condición y causa un
salto si ésta borrado.
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BPL(rel)
89
DL3155M24HC11
BRA
Salta siempre
Operación:
PC ← (PC) + 0002 + Rel
Descripción: Salto incondicional a la dirección dada por la formula anterior, en donde
Rel, es el ajuste o compensación relativa almacenada como un número de
complemento a dos en el segundo byte del código de maquina
correspondiente a la instrucción de salto.
Nota: El programa fuente especifica el destino de una instrucción de salto
por medio de la dirección absoluta, tanto el valor numérico como un
símbolo o expresión pueden ser numéricamente evaluados por el
ensamblador. El ensamblador obtiene la dirección relativa Rel, de la
dirección absoluta y del valor actual del contador de programa.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BRA(rel)
BRCLR
Salta si el bit(s) es borrado.
Operación:
PC ← (PC) + 0004 + Rel si:
M • ( PC + 2 )
PC ← (PC) + 0005 + Rel si:
M • ( PC + 3 ) Modo de direccionamiento
indexado Y
Descripción: Revisa la localidad de memoria M y salta sí, todos los bits especificados
con 1 en el byte de la mascara son cero en el byte de prueba. El salto puede
ser solo si todos los bits revisados son cero en el byte de prueba
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BRCLR (opr)(msk)(rel)
90
DL3155M24HC11
BRN
Nunca salta
Operación:
PC ← (PC) + 0002
Descripción: Nunca salta. Esta instrucción puede ser considerada como dos bytes de no
operación, requiere tres ciclos de máquina para su ejecución. Esta
inclusión en la instrucción
Nota: El programa fuente especifica el destino de una instrucción de salto
por medio de la dirección absoluta, tanto el valor numérico como un
símbolo o expresión pueden ser numéricamente evaluados por el
ensamblador. El ensamblador obtiene la dirección relativa Rel, de la
dirección absoluta y del valor actual del contador de programa.
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BRN(rel)
BRSET
Salta si el bit(s) esta activado
Operación:
PC ← (PC) + 0004 + Rel Sí M • (PC + 2) = 0
PC ← (PC) + 0005 + Rel Sí M • (PC + 3) = 0
(modo de direccionamiento indexado
Y)
Descripción: Revisa la localidad M y salta si todos los bits especificados con 1 en la
mascara de bytes son 1 en el byte de prueba.
El salto será realizado solo si todos los bits probados son "1" en el byte de
prueba.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BRSET(opr)(msk)(rel)
91
DL3155M24HC11
BSET
Activa el bit(s), en memoria
Operación:
M ← M + ( PC + 2 )
M ← M + ( PC + 3 )
Modo
de
indexado Y
direccionamiento
Descripción: Activa los bits múltiples en la localidad M. Los bits a ser activados son
especifican con unos, en el byte de mascara. Todos los otros bits en M no
se ven afectados.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
N
Z
—
V
0
C
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 0
Mnemónico:
BSET (opr)(msk)
BSR
Operación:
PC ← (PC) + 0002
↓ (PCL)
SP←
← (SP) - 0001
↓ (PCH)
SP ← (SP) - 0001
PC ← (PC) + Rel
Salto a subrutina
Descripción: El contador de programa es incrementado en 2. El byte menos significativo
correspondiente al contenido del contador de programa es colocado en la
pila. El stack pointer es entonces decrementado (por 1). El byte más
significativo que corresponde al contenido del contador de programa es
entonces colocado en la pila. El stack pointer es decrementado
nuevamente (por 1). El salto ocurre entonces, a la localidad especificada
por el salto.
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BSR(rel)
92
DL3155M24HC11
BVC
Salta si la bandera de sobreflujo esta borrada
Operación:
PC ← (PC) + 0002 + Rel
si V = 0
Descripción: Revisa el estado del bit V en el registro código de condición y causa un
salto si dicho bit, esta borrado.
Esta instrucción se usa después de una operación en valores binarios con
complemento a dos, puede causar un salto(si no hubo sobreflujo). De modo
que salta si el resultado del complemento a dos, fue valido.
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BVC(rel)
BVS
Salta si la bandera de sobreflujo esta activada
Operación:
PC ← (PC) + 0002 + Rel
Descripción: Revisa el estado del bit V en el registro código de condición y causa un
salto si dicho bit, esta activado.
Esta instrucción se usa después de una operación en valores binarios con
complemento a dos, puede causar un salto(sí ocurrió un sobreflujo). De
modo que salta si el resultado del complemento a dos, es invalido.
(Ver instrucción BRA para más detalles de la ejecución de salto).
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
BVS(rel)
93
DL3155M24HC11
CBA
Comparación entre acumuladores
Operación:
(ACCA) -- (ACCB)
Descripción: Compara el contenido de ACCA al contenido de ACCB y activa el código de
condición, el cual es usado para saltos condicionales con operaciones
aritméticas y lógicas. Ninguno de los operandos es afectado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos:
CBA
CLC
Borra el acarreo
C bit ← 0
Operación:
Descripción: Borra el bit C en el registro código de condición
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
—
Z
—
V
—
C
0
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos:
CLC
94
DL3155M24HC11
CLI
Borra la mascara de interrupción
I bit ← 0
Operación:
Descripción: Borra el bit mascara de interrupciones, del registro código de condición.
Cuando el bit I es borrado, las interrupciones se habilitan.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
0
N
Z
—
V
—
C
—
—
I=0
Mnemónicos:
CLI
CLR
Borrado
(ACCX) ← 00
M ← 00
Operación:
Descripción: El contenido de ACCX o de M es reemplazado por ceros
Registro de Códigos de condición (CCR)
S
—
N=0
Z=1
V=0
C=0
Mnemónicos:
X
—
H
—
I
—
N
Z
0
V
1
C
0
0
Borrado
Activado
Borrado
Borrado
CLRA, CLRB, CLR(opr)
95
DL3155M24HC11
CLV
Borra el bit de sobreflujo en complemento a dos
V bit ← 0
Operación:
Descripción: Borra el bit de sobreflujo en complemento a dos del registro código de
condición.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
—
Z
—
V
0
C
—
V=0
Mnemónicos:
CLV
CMP
Compara
Operación:
(ACCX) -- (M)
Descripción: Compara el contenido de ACCX o el contenido de M, determina los códigos
y el valor de las banderas, estableciendo las condiciones lógicas y
aritméticas de salto condicional. Ninguno de los operandos es afectado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico :
CMPA(opr); CMPB (opr)
96
DL3155M24HC11
COM
Complementa
ACCX ← ¬ (ACCX) = FF - (ACCX)
M ← ¬ (M) = FF - (M)
Operación:
Descripción: Reemplaza el contenido de ACCX o M con complemento a uno. (Cada bit
del contenido de ACCX o M es remplazado con el complemento de ese bit)
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
N
Z
—
V
0
C
1
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
C=1
Mnemónicos:
COMA, COMB, COM (opr)
CPD
Compara acumulador - D
Operación:
(ACCX) -- (M: M+1)
Descripción: Compara el contenido del acumulador D con un valor de 16 bits, de la
dirección especificada. Activa el código de condición en correspondiente.
La operación es realizada internamente al hacer una resta de (M:M+1) desde
el acumulador, sin modificar el acumulador D o (M:M+1).
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
97
DL3155M24HC11
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: CPD (opr)
CPX
Compara el registro índice X
Operación:
(IX) -- (M:M+1)
Descripción: Compara el contenido del registro índice X con un valor de 16 bits en la
dirección especificada y activa el código de condición correspondiente. La
comparación se realiza internamente al restar (M: M+1) del registro índice X,
sin modificar alguno de los operandos.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: CPX (opr)
98
DL3155M24HC11
CPY
Compara el registro índice Y
Operación:
(IY) -- (M:M+1)
Descripción: Compara el contenido del registro índice Y con un valor de 16 bits en la
dirección especificada y activa el código de condición correspondiente. La
comparación se realiza internamente al restar (M: M+1) del registro índice Y,
sin modificar alguno de los operandos.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: CPY (opr)
DAA
Ajuste decimal del ACCA
Operación:
Suma números hexadecimales como 00, 06, 60 o 66 al acumulador, y activa
el bit de acarreo.
Mnemónico:
DAA
99
DL3155M24HC11
BCD
(binary coded decimal). La tabla muestra los valores hexadecimales.
Descripción: Si el contenido de ACCA, el estado del bit C, acarreo/prestamo y el
semiacarreo del bit H, son el resultado de aplicar alguno de los operandos
ABA , ADD o ADC a operandos BCD, con o sin un acarreo inicial, la
operación DAA puede funcionar como sigue:
La operación DAA, sujeta a las condiciones de la tabla, ajustará el
contenido de ACCA y del bit C en el CCR para representar la suma BCD y el
correcto estado del bit C.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Se activa si el bit más significativo del resultado, se
encuentra activado; en cualquier otro caso es borrado.
Z=1 Se activa si todos los bits del resultado están borrados; se
limpia en cualquier otro caso.
V No definido
C=1: Se activa o se borra, de acuerdo a la misma regla, como si
DAA y un operando que precede inmediatamente ABA, ADD,
o ADC, fuesen remplazados por una adición BCD hipotética.
DEC
Decremento
Operación:
(ACCX) ← (ACCX)−
− 01
M ← (M) − 01
Descripción: Resta uno de los contenidos de ACCX o de M.
Los bits N, Z y V en el CCR, se activan y deactivan de acuerdo a los
resultados de la operación.
El bit C en el CCR no es afectado por la oparación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
100
DL3155M24HC11
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: DECA; DECB DEC(opr)
DES
Decremento del Stack Pointer
SP←
← (SP) -- 0001
Operación:
Descripción: Substrae un valor del stack pointer.
Registro de Códigos de condición (CCR)
S
—
Mnemónico:
X
—
H
—
I
—
N
—
Z
—
V
—
C
—
DES
101
DL3155M24HC11
DEX
Decremento del registro índice X
Operación:
IX←
← (IX) -- 0001
Descripción: Substrae un valor del registro índice X.
Solo el bit "Z" es activado o borrado de acuerdo al resultado de la
operación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
—
C
—
—
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
Mnemónico:
DEX
DEY
Decremento del registro índice Y
Operación:
IY←
← (IY) -- 0001
Descripción: Substrae un valor del registro índice Y.
Solo el bit "Z" es activado o borrado de acuerdo al resultado de la
operación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
—
V
C
—
—
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
Mnemónico:
DEY
102
DL3155M24HC11
EOR
Operación de OR exclusiva.
Operación:
ACCX←
← (ACCX) ⊕ (M)
Descripción: Ejecuta la operación lógica de OR exclusiva, entre el contenido de ACCX y
el contenido de M, colocando el resultado en ACCX. (Cada bit de ACCX
llega a ser modificado por la operación y por el contenido correspondiente
de los bits de M).
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
EORA (opr), EORB(opr)
FDIV
División fraccional
Operación:
(ACCX) / (IX); IX -- Cociente, ACCD -- residuo
Descripción: Ejecuta una división fraccional sin signo, del numerador de 16 bits en el
acumulador D, y el denominador de 16 bits en el registro índice X,
activando los códigos de condición correspondientes. El cociente es
colocado en el registro índice X y el residuo en el acumulador D. Se asume
que el punto flotante, es el mismo para ambos operandos. Dicho punto es a
la izquierda del bit 15, para el cociente, considerando que el numerador es
menor al denominador. En caso de sobreflujo (denominador menor o igual
al numerador) o división por cero, el cociente es $FFFF. En el caso de
división por cero, el residuo es indeterminado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
—
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
103
DL3155M24HC11
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
FDIV
IDIV
División de enteros
Operación:
(ACCX) / (IX); IX -- Cociente, ACCD -- residuo
Descripción: Ejecuta una división de enteros sin signo, del numerador de 16 bits en el
acumulador D, y el denominador de 16 bits en el registro índice X,
activando los códigos de condición correspondientes. El cociente es
colocado en el registro índice X y el residuo en el acumulador D. Se asume
que el punto flotante, es el mismo para ambos operandos. Dicho punto es a
la derecha del bit "0", para el cociente. Considerando que el numerador es
menor al denominador. En caso de división por cero, el cociente es $FFFF.
En el caso de división por cero, el residuo es indeterminado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
IDIV
104
DL3155M24HC11
INC
Incremento
Operación:
ACCX ← (ACCX) + 01 ó
M ← (M) + 01
Descripción: Suma uno al contenido de ACCX o M.
Los códigos de condición N, Z y V se activan o borran de acuerdo al
resultado de esta operación.
El bit C no es afectado en esta operación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: INCA, INCB, INC (opr)
INS
Incremento del Stack Pointer
Operación:
SP←
← (SP) + 0001
Descripción: Suma un valor al stack pointer.
Registro de Códigos de condición (CCR)
No afectados
Mnemónico:
INS
105
DL3155M24HC11
INX
Incremento del registro índice X
Operación:
IX←
← (IX) + 0001
Descripción: Suma uno al registro índice X.
Solo el bit "Z" es activado o borrado de acuerdo al resultado de la
operación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
—
C
—
—
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
Mnemónico:
INX
INY
Incremento del registro índice Y
Operación:
IY←
← (IY) + 0001
Descripción: Suma uno al registro índice Y.
Solo el bit "Z" es activado o borrado de acuerdo al resultado de la
operación.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
—
V
C
—
—
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
Mnemónico:
INY
106
DL3155M24HC11
JMP
Salto
Operación:
PC ← dirección efectiva
Descripción: Salto a la instrucción almacenada en la dirección efectiva. La dirección
efectiva es obtenida de acuerdo a las reglas de direccionamiento
extendido(EXT) o indexado(IND).
Registro de Códigos de condición (CCR)
No afectados
Mnemónico:
JMP(opr)
JSR
Salto a subrutina
Operación:
PC ← (PC) + 0003 (para direccionamiento EXT o IND Y)
PC ← (PC) + 0002 (para direccionamiento DIR o IND X)
↓ (PCL)
SP←
← (SP) - 0001
↓ (PCH)
SP ← (SP) - 0001
PC ← dirección efectiva
Descripción: El contador de programa es incrementado en 3 ó 2, dependiendo del modo
de direccionamiento y es entonces colocado en la pila, 8 bits a la vez,
primero, el byte menos significativo. El stack pointer apunta a la siguiente
dirección vacía de la pila. El salto ocurre a la instrucción almacenada en la
dirección efectiva. La dirección efectiva es obtenida de acuerdo a las reglas
de direccionamiento IND, DIR, EXT.
Registro de Códigos de condición (CCR)
No afectados
Mnemónico:
JSR(opr)
107
DL3155M24HC11
LDA
Carga el acumulador
Operación:
ACCX ← (M)
Descripción: Carga el contenido de la memoria al acumulador. Los códigos de condición
son activados de acuerdo al dato.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
LDAA(opr), LDAB(opr)
LDD
Carga el acumulador doble
Operación:
ACCD ← (M : M + 1); ACCA ← (M), ACCB ← (M + 1);
Descripción: Carga el contenido de la localidad de memoria M y M + 1 dentro del
acumulador D. Los códigos de condición, son activados de acuerdo al dato.
La información de la localidad M es cargada al acumulador A y la
información de M + 1 se carga en B.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
LDD(opr)
108
DL3155M24HC11
LDS
Carga el Stack Pointer
Operación:
SPH ← (M)
SPL ← (M + 1);
Descripción: Carga el byte más significativo del stack pointer con el byte de memoria de
la dirección especificada por el programa, y carga el byte menos
significativo del stack pointer con el siguiente byte de memoria, es decir,
una dirección más de la especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
LDS(opr)
LDX
Carga el registro índice X
Operación:
IXH ← (M)
IXL ← (M + 1);
Descripción: Carga el byte más significativo del registro índice X, con el byte de memoria
de la dirección especificada por el programa, y carga el byte menos
significativo del registro índice X, con el siguiente byte de memoria, es
decir, una dirección más de la especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
109
DL3155M24HC11
V=0
Mnemónico:
LDX(opr)
LDY
Carga el registro índice Y
Operación:
IYH ← (M)
IYL ← (M + 1);
Descripción: Carga el byte más significativo del registro índice Y, con el byte de memoria
de la dirección especificada por el programa, y carga el byte menos
significativo del registro índice Y, con el siguiente byte de memoria, es
decir, una dirección más de la especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
LDY(opr)
110
DL3155M24HC11
LSL
Corrimiento lógico a la izquierda
(Igual que ASL)
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M, una posición a la izquierda. El
bit 0 se carga con un "0". El bit "C", es cargado desde el bit más
significativo de ACCX o M.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Desde fuente:
LSLA; LSLB; LSL (opr)
LSLD
Corrimiento lógico a la izquierda del acumulador D
(Igual que ASLD)
Operación:
Descripción: Corrimiento de todos los bits de ACCD, una posición a la izquierda. El bit 0
es cargado con "0". El bit C, es cargado desde el bit más significativo de
ACCD.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
111
DL3155M24HC11
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
LSLD
LSR
Corrimiento lógico a la derecha.
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M, una posición a la derecha. El
bit 7 es cargado con "0". El bit C, es cargado desde el bit menos
significativo de ACCX o M.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
N=0
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
LSRA; LSRB; LSR(opr)
112
DL3155M24HC11
LSRD
Corrimiento lógico a la derecha del acumulador D
Operación:
Descripción: Corrimiento de todos los bits de ACCD, una posición a la izquierda. El bit 0
es cargado con "0". El bit C, es cargado desde el bit más significativo de
ACCD.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
LSRD
MUL
Multiplicación sin signo
Operación:
ACCD ← ACCA * ACCB
Descripción: Multiplica los 8 bits en el acumulador A, por los 8 bits del acumulador B, y
se obtiene un resultado sin signo de 16 bits, en el acumulador doble.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
—
V
—
C
—
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
MUL
113
DL3155M24HC11
NEG
Negación
Operación:
ACCX ← - (ACCX) = 00 – (ACCX)
M ← - (M) = 00 – (M)
Descripción: Remplaza el contenido de ACCX o M con complemento a dos. Note que el
valor $80 no cambia.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
NEGA; NEGB, NEG(opr)
NOP
No-operación
Descripción: Esta es una instrucción de un solo byte, que únicamente causa un
incremento en el contador de programa. Los registros no son afectados.
Registro de Códigos de condición (CCR)
No afectados.
S
—
A.
X
—
H
—
I
—
N
Z
—
V
—
C
—
—
Mnemónico: NOP
114
DL3155M24HC11
ORA
Operación OR inclusiva
ACCX ← (ACCX) + (M)
Operación:
Descripción: Ejecuta la operación OR inclusiva, entre el contenido de ACCX y el
contenido de M, colocando el resultado en ACCX. (Cada bit de ACCX será
afectado por la operación OR inclusiva del correspondiente bit de M y
ACCX).
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 .
Mnemónico :
ORAA (opr); ORAB (opr)
PSH
Coloca datos en la pila
Operación:
↓ (ACCX)
SP ← (SP) - 0001
Descripción: El contenido de ACCX, es almacenado sobre la pila en la dirección
contenida del stack pointer. El stack pointer, es decrementado.
Registro de Códigos de condición (CCR)
No afectados.
B.
Mnemónico: PSHA, PSHB
115
DL3155M24HC11
PSHX
Coloca el registro índice X en la pila
Operación:
↓ (IXL), SP ← (SP) – 0001
↓ (IXH), SP ← (SP) - 0001
Descripción: El contenido del registro índice X, es colocado en la pila (primero el byte de
orden bajo) en la dirección contenida del stack pointer. El stack pointer, es
decrementado dos veces.
Registro de Códigos de condición (CCR)
No afectados.
C.
Mnemónico: PSHX
PSHY
Coloca el registro índice Y en la pila
Operación:
↓ (IYL), SP ← (SP) – 0001
↓ (IYH), SP ← (SP) - 0001
Descripción: El contenido del registro índice Y, es colocado en la pila (primero el byte de
orden bajo) en la dirección contenida del stack pointer. El stack pointer, es
decrementado dos veces.
Registro de Códigos de condición (CCR)
No afectados.
D.
Mnemónico: PSHY
116
DL3155M24HC11
PUL
Extrae datos de la pila
Operación:
SP ← (SP) + 0001;
↑ ACCX
Descripción: El ACCX es cargado a la pila, en la dirección contenida del stack pointer. El
contenido del stack pointer es incrementado.
Registro de Códigos de condición (CCR)
No afectados.
E.
Mnemónico: PULA, PULB.
PULX
Extrae el registro índice X de la pila
Operación:
SP ← (SP) + 0001; ↑ (IXL),
SP ← (SP) + 0001; ↑ (IXH),
Descripción: El contenido del registro índice X, es extraído de la pila (primero el byte de
orden alto) en la dirección contenida del stack pointer + 1. El stack pointer,
se incrementa dos veces.
Registro de Códigos de condición (CCR)
No afectados.
F.
Mnemónico: PULX
117
DL3155M24HC11
PULY
Extrae el registro índice Y de la pila
SP ← (SP) + 0001; ↑ IYL,
SP ← (SP) + 0001; ↑ IYH,
Operación:
Descripción: El contenido del registro índice Y, es extraído de la pila (primero el byte de
orden alto) en la dirección contenida del stack pointer + 1. El stack pointer,
es incrementado dos veces.
Registro de Códigos de condición (CCR)
No afectados.
G.
Mnemónico: PULY
ROL
Rota a la izquierda.
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M, una posición a la izquierda. El
bit 0 se carga con "C", en donde "C" es el bit más significativo de ACCX o
M.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Desde fuente:
ROLA; ROLB; ROL(opr)
118
DL3155M24HC11
ROR
Rota a la derecha
Operación:
Descripción: Corrimiento de todos los bits de ACCX o M, una posición a la derecha. El
bit 7 se carga con "C". El bit C, es el bit menos significativo de ACCX o M.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
RORA; RORB; ROR(opr)
119
DL3155M24HC11
RTI
Regreso de interrupciones.
Operación:
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
SP ← (SP) + 0001, ↑
CCR
ACCB
ACCA
IXH
IXL
IYH
IYL
PCH
PCL
Descripción: El código de condición, los acumuladores A y B, el registro índice X, el
registro índice Y, y el contador de programa, pueden ser restaurados a un
estado de extracción desde la pila. Nota que el bit "X" en el registro código
de condición puede ser borrado como resultado de la instrucción RTI, pero
no puede activarse si fue borrado antes de la ejecución de la instrucción
RTI.
Registro de Códigos de condición (CCR)
Mnemónico:
Restaurados a su estado de extracción desde la pila.
RTI
RTS
Regreso de subrutina
Operación:
SP ← (SP) + 0001
↑ PCH
SP ← (SP) + 0001
↑ PCL
Descripción: El stack pointer es, incrementado en "1". El contenido del byte de memoria,
en las direcciones ahora contenidas en el stack pointer, se cargan en 8 bits
de orden alto del contador d programa, después el stack pointer es
nuevamente incrementado. Los contenidos del byte de memoria, en la
dirección ahora ubicada en el stack pointer, son cargados en el byte de
orden bajo del contador de programa.
Registro de Códigos de condición (CCR)
Mnemónico:
No afectados
RTS
120
DL3155M24HC11
SBA
Resta entre acumuladores
(ACCA) ← (ACCA) - (ACCB)
Operación:
Descripción: Substracción entre los contenidos de ACCB, y ACCA colocando el
resultado en ACCA. El contenido de ACCB no es afectado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico:
SBA
SBC
Resta con acarreo
(ACCX) ← (ACCX) -- (M) - (C)
Operación:
Descripción: Substrae el contenido de M y el contenido de C desde lo contenido en
ACCX y coloca el resultado en ACCX.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico :
SBCA(opr); SBCB (opr)
121
DL3155M24HC11
SEC
Activa el acarreo
Operación:
Bit C ← 1
Descripción: Activa el bit "C" en el registro código de condición.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
—
V
—
C
—
1
C=1
Mnemónico:
SEC
SEI
Activa la mascara de interrupción
Operación:
Bit I ← 1
Descripción: Activa el bit "I", de mascara de interrupciones, en el registro código de
condición. Cuando el bit "I" es activado, todas las interrupciones
mascarables son inhibidas y el MPU reconocerá solo las fuentes de
interrupciones no mascarables o un SWI.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
1
N
Z
—
V
—
C
—
—
I=1
Mnemónico:
SEI
122
DL3155M24HC11
SEV
Activa el bit de sobreflujo en complemento a dos.
Operación:
Bit V ← 1
Descripción: Activa el bit "V", sobreflujo por complemento a dos, en el registro código
de condición.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
—
V
—
C
1
—
V=1
Mnemónico:
SEV
STA
Almacena el acumulador
Operación:
M ← (ACCX)
Descripción: Almacena el contenido de ACCX en memoria. El contenido de ACCX
permanece sin cambio.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 .
Mnemónico:
STAA(opr), STAB(opr)
123
DL3155M24HC11
STD
Almacena el acumulador doble
Operación:
M : M + 1 ← (ACCD)
Descripción: Almacena el contenido del acumulador doble ACCD en memoria. El
contenido de ACCD permanece sin cambio.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
STD(opr)
STOP
Detiene el proceso
Descripción: Si el bit "S", en el CCR es activado, entonces la instrucción STOP es
deshabilitada y funciona como instrucción de NOP. Si y solo si, el bit S en
el CCR es borrado, la instrucción STOP causa que todos los sistemas de
reloj sean alterados y el sistema sea colocado a potencia mínima, modo de
espera (standby mode). Todos los registros del CPU permanecen sin
cambio, así como los pins de I/O, permanecen sin ser afectados.
Para restablecerse después de una instrucción STOP, se puede utilizar el
Reset, XIRQ, o una IRQ no mascarable. Cuando se utiliza XIRQ y el bit X en
el CCR es borrado, la ejecución puede resumirse como operaciones
apiladas para la interrupción XIRQ. Si el bit X esta activado, la ejecución de
la interrupción XIRQ mascarable, se puede resumir con el opcode de
búsqueda para la instrucción que sigue la instrucción STOP (continue).
Registro de Códigos de condición (CCR)
No afectados
Mnemónico:
STOP
124
DL3155M24HC11
STS
Operación:
Almacena el stack pointer
M ← (SPH)
M + 1←
← (SPL)
Descripción: Almacena el byte más significativo del stack pointer, en la dirección de
memoria M, especificada por el programa. También almacena el byte menos
significativo del stack pointer, en la dirección de memoria, de la siguiente
localidad especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 .
Mnemónico:
STS(opr)
STX
Operación:
M ← (IXH)
M + 1←
← (IXL)
Almacena el registro índice X
Descripción: Almacena el byte más significativo del registro índice X, en la dirección de
memoria M, especificada por el programa y almacena el byte menos
significativo del registro índice X, en la dirección de memoria, de la
siguiente localidad especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico:
STX(opr)
125
DL3155M24HC11
STY
M ← (IYH)
M + 1←
← (IYL)
Operación:
Almacena el registro índice Y
Descripción: Almacena el byte más significativo del registro índice Y, en la dirección de
memoria M, especificada por el programa y almacena el byte menos
significativo del registro índice Y, en la dirección de memoria, de la
siguiente localidad especificada por el programa.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0 .
Mnemónico:
STY(opr)
SUB
Substracción.
(ACCX) ← (ACCX) -- (M)
Operación:
Descripción: Substrae el contenido de M y del contenido de ACCX, colocando el
resultado en ACCX.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónico :
SUBA(opr); SUBB (opr)
126
DL3155M24HC11
SUBD
Substracción del acumulador "D", doble
Operación:
(ACCD) ← (ACCD) -- (M: M+1)
Descripción: Realiza la substracción de M:M+1 desde el acumulador D y coloca el
resultado en ACCD.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=1 Si hubo sobreflujo en complemento a dos en el resultado de la
operación; 0 en otro caso.
C=1 Si hubo un acarreo desde el bit más significativo del resultado, 0
en otro caso.
Mnemónicos: SUBD (opr)
SWI
Interrupción por software
Operación:
PC ← (PC) + 0001
↓ (PCL), SP ← (SP) -- 0001
↓ (PCH), SP ← (SP) -- 0001
↓ (IYL), SP ← (SP) -- 0001
↓ (IYH), SP ← (SP) -- 0001
↓ (IXL), SP ← (SP) -- 0001
↓ (IXH), SP ← (SP) -- 0001
↓ (ACCA), SP ← (SP) -- 0001
↓ (ACCB), SP ← (SP) -- 0001
↓ (CCR), SP ← (SP) -- 0001
I← 1
PC ← (vector SWI)
Descripción: El contador de programa es incrementado una vez. El contador de
programa, el registro índice Y, el registro índice X, y los acumuladores A y
B son colocados dentro de la pila. El stack pointer es decrementado en 1,
después que cada byte es almacenado en la pila.
127
DL3155M24HC11
El bit "I" en el CCR esta activado. El contador de programa se carga con el
vector(dirección) y la ejecución de la instrucción se resume en esta
localidad.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
1
N
Z
—
V
—
C
—
—
I=1
Mnemónico:
SWI
TAB
Transferencia del acumulador A, al acumulador B
ACCB ← (ACCA)
Operación:
Descripción: Mueve el contenido de ACCA a ACCB. El contenido previo de ACCB se
pierde, mientras el de ACCA no es afectado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico :
TAB
128
DL3155M24HC11
TAP
Transferencia del acumulador A, al registro código de condición
CCR ← (ACCA)
Operación:
7
6
5
4
3
2
1
0
ACCA
S
X
H
I
N
Z
V
C
CCR
Acarreo o préstamo de MSB
Sobreflujo
Zero
Negativo
Mascara de interrupción- I
Medio acarreo o semiacarreo (del
bit 3)
Mascara de interrupción X
Paro deshabilitado
Descripción: Transfiere el contenido del acumulador del bit 0 a 7, a su correspondiente
bit en el registro código de condición. El contenido del acumulador A
permanece sin cambio. Nota: el bit X, en el registro código de condición
puede ser borrado como el resultado de la instrucción TAP, pero puede no
activarse sí antes de la ejecución de TAP, fue borrado.
Códigos
de condición:.
Activa o borra los códigos de acuerdo al valor de cada bit del acumulador
A.
Mnemónico :
TAP
129
DL3155M24HC11
TBA
Transferencia del acumulador B, al acumulador A
ACCA ← (ACCB)
Operación:
Descripción: Mueve el contenido de ACCB a ACCA. El contenido previo de ACCA se
pierde, mientras el de ACCB no es afectado.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
—
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
Mnemónico :
TBA
TEST
Operación de prueba
(Test Mode Only)
Descripción: Esta instrucción de un solo byte, causa que el contador de programa sea
continuamente incrementado. Puede ser ejecutada solo en el modo de
prueba (test mode). El MPU puede ser restablecido al salir de esta
instrucción.
R/
= 1(lectura, Read), durante esta instrucción. El código de ejecución
esta suspendido durante esta instrucción. Este es un opcode ilegal, cuando
esta en modo prueba.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
TEST
130
DL3155M24HC11
TPA
Transferencia del registro código de condición, hacia el acumulador A
ACCA ← (CCR)
Operación:
7
6
5
4
3
2
1
0
ACCA
S
X
H
I
N
Z
V
C
CCR
Acarreo o préstamo de MSB
Sobreflujo
Zero
Negativo
Mascara de interrupción- I
Medio acarreo o semiacarreo (del
bit 3)
Mascara de interrupción X
Paro deshabilitado
Descripción: Transfiere el contenido del registro código de condición, a su
correspondiente bit en el acumulador A. El registro código de condición
permanece sin cambio.
Códigos
de condición:.
No afectado
Mnemónico :
TPA
131
DL3155M24HC11
TST
Prueba
Operación:
(ACCX) -- 00
(M) -- 00
Descripción: Substrae $00 del contenido de ACCX o M y activa los códigos de condición
correspondientes. La substracción es realizada internamente sin modificar
a ACCX o M.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
—
N
Z
V
C
0
0
N=1 Si el bit más significativo del resultado, es 1; 0 en cualquier otro
caso.
Z=1 Si todos los bits del resultado es 00; 0 en cualquier otro caso.
V=0
C=0 .
Mnemónico:
TSTA, TSTB, TST(opr)
TSX
Transferencia del stack pointer al registro índice X
Operación
IX ← (SP) + 0001
Descripción: Carga el registro índice X, con el stack pointer más uno. El contenido del
stack permanece sin cambio.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
TSX
132
DL3155M24HC11
TSY
Transferencia del stack pointer al registro índice Y
Operación
IY ← (SP) + 0001
Descripción: Carga el registro índice Y, con el stack pointer más uno. El contenido del
stack permanece sin cambio.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
TSY
TXS
Transferencia del registro índice X, al stack pointer
Operación
SP ← (IX) -- 0001
Descripción: Carga el stack pointer con el registro índice X, menos uno. El contenido del
registro índice X, permanece sin cambio.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
TXS
TYS
Transferencia del registro índice Y, al stack pointer
Operación
SP ← (IY) -- 0001
Descripción: Carga el stack pointer con el registro índice Y, menos uno. El contenido del
registro índice Y, permanece sin cambio.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
TYS
133
DL3155M24HC11
WAI
Espera para interrupción
Operación:
PC ← (PC) + 0001
↓ (PCL), SP ← (SP) -- 0001
↓ (PCH), SP ← (SP) -- 0001
↓ (IYL), SP ← (SP) -- 0001
↓ (IYH), SP ← (SP) -- 0001
↓ (IXL), SP ← (SP) -- 0001
↓ (IXH), SP ← (SP) -- 0001
↓ (ACCA), SP ← (SP) -- 0001
↓ (ACCB), SP ← (SP) -- 0001
↓ (CCR), SP ← (SP) -- 0001
Descripción: El contador de programa se incrementa en uno. Los acumuladores A y B, el
registro índice Y, el registro índice X y el contador de programa, son
colocados dentro de la pila, así como, el registro código de condición.
El stack pointer es decrementado en uno, y después cada byte de datos es
almacenado en la pila.
El MPU entonces entra a un estado de espera para un número entero de
ciclos E-clock del MPU. Mientras, en el estado de espera, el bus de
direcciones es $FFFF. El MPU deja el estado de espera cuando censa una
interrupción, la cual no ha sido mascarada.
Después del estado de espera, el MPU activa el bit "I" en el CCR, busca el
vector(dirección) correspondiente a la interrupción censada, y la ejecución
de instrucciones continua en esta localización.
Registro de Códigos de condición (CCR)
S
—
X
—
H
—
I
1
N
Z
—
V
—
C
—
—
N=1
Mnemónico:
WAI
134
DL3155M24HC11
XGDX
Intercambio entre el acumulador "D" y el registro índice X
Operación:
(IX) ⇔ (ACCD)
Descripción: Intercambia el contenido del acumulador "D" con el contenido del registro
índice X.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
XGDX
XGDY
Intercambio entre el acumulador "D" y el registro índice Y
Operación:
(IY) ⇔ (ACCD)
Descripción: Intercambia el contenido del acumulador "D" con el contenido del registro
índice Y.
Registro de Códigos de condición (CCR)
No afectados.
Mnemónico:
XGDY
135
DL3155M24HC11
TABLA DE CARACTERES ASCII
HEX (MS, LS)
CARACTERES ASCII (código de 7 bits)
MS
LS
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
SP
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
136
DL3155M24HC11
CONVERSIÓN DECIMAL Y HEXADECIMAL.
Como usarse.
Conversión a decimal: Encuentre él numero correspondiente, comenzando con el carácter
hexadecimal menos significativo, la posición de los bits y el tamaño de la palabra,
facilitan la conversión. La suma total de cada valor decimal encontrado es el
proporcional al hexadecimal.
Conversión a hexadecimal: La conversión inicia buscando el numero correspondiente que
será menor o igual al número decimal a convertir, considerando que el carácter
hexadecimal es el más significativo. Reste el valor decimal encontrado, de él número a
ser convertido. Con la diferencia repita el proceso para encontrar el carácter hexadecimal
subsiguiente(respete el orden y la posición de cada byte).
137
DL3155M24HC11
15
15
HEX
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
caract.
Byte
12 11 caract.
DEC
0
4,096
8,192
12,288
16,384
20,480
24,576
28,672
32,768
36,864
40,960
45,056
49,152
53,248
57,344
61,440
HEX
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
8
8
DEC
0
256
512
768
1,024
1,280
1,536
1,792
2,048
3,304
2,560
2,816
3,072
3,328
3,584
3,840
7
Byte
0
7
caract. 3 caract. 0
4
HEX
DEC HEX
DEC
0
0 0
0
1
16 1
1
2
32 2
2
3
48 3
3
4
64 4
4
5
80 5
5
6
96 6
6
7
112 7
7
8
128 8
8
9
144 9
9
A
160 A
10
B
176 B
11
C
192 C
12
D
208 D
13
E
224 E
14
F
240 F
15
138
DL3155M24HC11
139
DL3155M24HC11
UNIDAD 4
OPERACIONES CON LA PILA
140
DL3155M24HC11
CONTENIDO
4.1 INTRODUCCION
4.2 OPERACIONES CON LA PILA
141
DL3155M24HC11
4.1 INTRODUCCION
En unidades previas usted fue introducido a la arquitectura y al conjunto de instrucciones del
microprocesador 68HC11. Se discutieron muchas de las capacidades de la MPU; sin embargo,
fueron omitidas algunas áreas importantes. Entre esas se incluyen las operaciones con la pila,
el uso de subrutinas, entrada/salida y capacidades de interrupción.
Hasta este punto usted estará familiarizado, y en algunos casos dominará el manejo de
memoria, los mnemónicos y la operación de ciertas instrucciones del conjunto total de
instrucciones para el 68HC11. En esta unidad, presentaremos y discutiremos las dieciséis
instrucciones usadas para llevar a cabo operaciones con la pila del 68HC11. Conforme avance
en el estudio de esta unidad, encontrará relativamente fácil recordar la operación de las
instrucciones presentadas, por medio de sus mnemónicos. Este proceso de “memorización” de
operación de instrucciones (mediante sus mnemónicos) se hace fácil si se agrupan los
diferentes tipos de instrucciones para su estudio. Así, es claro que será más fácil recordar los
mnemónicos y operaciones de, por ejemplo, cuatro instrucciones relacionadas cercanamente
(con algo en común), que los de cuatro operaciones totalmente diversas.
En cuanto a las operaciones con la pila discutidas en esta unidad, aunque aprenderá un total de
dieciséis nuevas instrucciones, verá que las primeras ocho de estas caen en una de dos
categorías: ya sea guardar (push) un dato en; o tomar un dato de la pila. Las restantes ocho
instrucciones caen dentro de tres categorías: incrementar/decrementar (la pila),
cargar/almacenar (la pila), o transferir un registro a la pila (o de). Cumpliendo la tarea de
aprender a programar con las técnicas correctas, nos llevará a obtener mayor eficiencia en la
programación de microprocesadores.
142
DL3155M24HC11
4.2 OPERACIONES CON LA PILA
En el lenguaje común de las computadoras, una pila es un grupo de localidades de
almacenamiento temporal en las cuales pueden almacenarse datos para ser recuperados
después. Desde este punto de vista, una pila es como una memoria. De hecho, muchos
microprocesadores usan una sección de la memoria como pila. La diferencia entre una pila y
otras formas de memoria es el método por el cual sé accesa a los datos y se direcciona. La
discusión comenzará considerando un arreglo de pila sencillo usado en algunos
microprocesadores. Después se discutirá un arreglo de pila más sofisticado empleado por la
MPU 68HC11.
H. Pila en cascada
TOPE DE LA PILA O STACK
HACIA/DESDE EL
ACUMULADOR
Algunos microprocesadores tienen un grupo especial de registros
(usualmente 8 o 16) llamado pila en cascada. Cada registro puede
retener un dato de un byte. Puesto que estos registros forman parte del
chip del MPU, conforman unas localidades de almacenamiento
temporal excelentes. Si necesitamos liberar el acumulador por alguna
razón, podemos almacenar su contenido en la pila. Posteriormente, si
se requiere ese dato nuevamente, lo podremos recuperar de la pila.
Claro que pudimos liberar el acumulador guardando el dato en
memoria. ¿Cuál es, entonces, la ventaja de la pila?
8 REGISTROS DE LA PILA
Una ventaja de la pila, es la forma en que es accesada o direccionada.
Recuerde que para almacenar un byte en memoria, se requiere una
dirección. Esto representa una instrucción de 2 o 3 bytes para
almacenar el contenido del acumulador. Dependiendo del modo de
direccionamiento, el último o los últimos dos bytes son la dirección. Más
tarde, si se recupera el byte, se emplea otra instrucción que también
tiene una dirección.
Otra ventaja de la pila es que los datos pueden ser almacenados o
leídos con instrucciones de un solo byte. Es decir , las instrucciones
usadas con la pila no requieren dirección. Por lo tanto, se trata de
instrucciones de un solo byte.
Fig .4-1. Pila en
cascada
La Figura 4-1 muestra una pila de 8 registros similar a la que se
encuentra en algunos microprocesadores. Esta se llama pila en
cascada, por el hecho de que los datos son cargados y recuperados.
Todas las transferencias de datos se hacen entre el tope de la pila y el
acumulador. Esto es, el acumulador se comunica sólo con la localidad
tope de la pila. Los datos son transferidos a la pila con una instrucción
especial llamada PUSH.
143
DL3155M24HC11
La Instrucción PUSH.
La Figura 4-2 ilustra como la instrucción PUSH coloca datos en la pila. El número 0116 se halla
en el acumulador y deseamos almacenarlo temporalmente. Aunque podríamos almacenar el
número en memoria, esto requeriría una instrucción de 2 o 3 bytes. En lugar de ello, usamos la
instrucción PUSH para colocar ese número en la pila. Note que el número es colocado en la
posición tope de la pila como se ilustra en la Figura 4-2A. Dicho número permanece allí hasta
que lo recuperemos o encimemos otro byte en la pila.
La Figura 4-2B muestra que pasa sí, tiempo después, colocamos otro byte en la pila. Note que
el acumulador contiene ahora 0316. Si ejecutamos la instrucción PUSH, el contenido del
acumulador es encimado arriba de la pila. Para hacer espacio para este nuevo número, el
número original, 0116, es “empujado” hacia dentro de la pila.
Las Figuras 4-2C y 4-2D muestran dos números más siendo colocados en la pila en puntos
posteriores del programa. Note que los datos nuevos siempre son colocados en la cima de la
pila. Haciendo espacio para los nuevos datos, los datos anteriores se recorren hacia debajo de
la pila. Por esta razón, este arreglo es llamado pila descendente o pila en cascada. El nombre
de pila en cascada viene del flujo característico de los datos en la pila cada que un nuevo dato
es colocado en el tope.
Fig. 4-2 Recorriendo datos hacia dentro de la pila
144
DL3155M24HC11
La Instrucción PULL.
La MPU recupera datos de la pila usando la instrucción PULL. En algunos microprocesadores,
esta se le conoce como la instrucción POP.
La Figura 4-3 ilustra como los datos son “jalados” (extraídos) de la pila. La Figura 4-3A muestra
como aparece la pila después de la última operación PUSH. Note que contiene cuatro bytes de
datos. El último byte introducido se halla en la cima de la pila.
La instrucción PULL recupera el byte que está en la cima de la pila. Cuando este byte es
removido de la pila, todos los otros bytes se mueven hacia arriba, llenando el hueco dejado por
este byte. La Figura 4-3B ilustra cómo 0F16 es extraído de la pila. Note que ahora 0716 se halla
en la cima de la pila.
Las Figuras 4-3C y 4-3D muestran cómo pueden ser extraídos los siguientes dos bytes de la
pila. En cada caso, los bytes restantes se mueven hacia arriba de la pila, llenando el registro
desocupado por el byte removido.
Si usted compara las Figuras 4-2 y 4-3, notará que los datos deben ser extraídos de la pila en el
orden inverso. Esto es, el último byte colocado en la pila es el primero que es extraído de la
pila. Otro nombre para este arreglo es Last in first out, último en entrar/ primero en salir (LIFO).
Fig. 4-3. Extrayendo datos desde la pila.
145
DL3155M24HC11
Recuerde que es un byte previo de 18 para la instrucción PULY
Pila en Memoria.
Aunque la pila en cascada es valiosa, tiene algunas limitaciones. Por un lado, el número de
registros es muy limitado, típicamente de ocho. Si se colocan más de ocho datos en la pila, los
datos “anteriores” son empujados al fondo y se pierden. También, la lectura de los datos de la
pila es destructiva. Cuando un byte es extraído de la pila, ya no existe en ésta. Esto es
fundamentalmente diferente de cuando se lee un byte de la memoria.
Por estas limitaciones la MPU 68HC11 no emplea la pila en cascada. En vez de ello, una
sección de la RAM puede ser destinada por el programador para actuar como pila.
Esto tiene algunas ventajas. Primero, la pila puede tener la longitud que el programador
requiera. Segundo, el programador puede definir más de una pila si lo desea. Tercero, él puede
direccionar los datos en la pila usando cualquiera de las instrucciones que direccionan
memoria.
Apuntador de Pila.
Recuerde que la MPU 68HC11 tiene un registro de 16 bits llamado el
apuntador de pila. En una pila del tipo de memoria, el apuntador de pila define la localidad de
memoria que actúa como cima de la pila.
La pila en cascada, considerada antes, generalmente no requiere un apuntador de pila. La cima
de la pila se determina por hardware. Durante las operaciones de colocar y extraer, los bytes de
datos se mueven de un registro a otro. Esto es, la cima de la pila permanece estacionaria y los
datos se mueven hacia arriba o abajo con relación a la pila.
En la pila de memoria, los datos no pueden ser fácilmente transferidos de una localidad a la
siguiente. Por lo tanto, en vez de mover los datos arriba o abajo con relación a la pila, es mucho
más fácil mover la cima de la pila respecto a los datos.
Generalmente, cuando se planea un sistema basado en microprocesador, se reserva una
sección de RAM para la pila. Esta debiera ser una sección de RAM que no sea empleada para
cualquier otro propósito.
Una vez hecho esto, la pila puede ser fijada por un programa. La cima de la pila se establece
cargando una dirección en el apuntador de pila. Por ejemplo, suponga que deseamos
establecer la dirección 01F916 como la cima de la pila. Podría usarse la siguiente instrucción:
LDS# 01F9
Esta carga la dirección 01F916 en el apuntador de pila y establece esta dirección como la cima
de la pila. Sin embargo, como verá, la cima de la pila se mueve cada vez que algún dato es
colocado – o extraído de – la pila.
146
DL3155M24HC11
Las Instrucciones PUSH .
El 68HC11 tiene cuatro instrucciones PUSH: PSHA, PSHB,
PSHX Y PSHY. Estas instrucciones son usadas para cargar la pila desde cualquiera de los dos
acumuladores (A,B), o desde cualquiera de los dos registros índice (X,Y).
Junto con sus correspondientes cuatro instrucciones PULL,( discutidas en la siguiente sección),
estas ocho instrucciones PUSH/PULL proporcionan mucha flexibilidad en el uso de la pila del
68HC11.
La Figura 4-4 muestra el efecto de la instrucción PSHA. Antes que la instrucción sea ejecutada,
el apuntador de pila contiene la dirección 01F916 como resultado de una previa instrucción LDS.
El acumulador A contiene un byte de dato (AA16). Si ahora se ejecuta la instrucción PSHA, el
contenido del acumulador A es colocado en la localidad de memoria 01F916. Entonces, el
apuntador de pila es decrementado automáticamente a 01F816. Esto mueve automáticamente la
cima de la pila como se muestra.
Fig. 4-4 Ejecutando la instrucción PSHA
Si usted revisa el Apéndice A o la Programming Reference Guide, verá que la operación se
describe como sigue:
A à Stk, SP = SP – 1
Esto significa que el contenido del acumulador A es transferido a la localidad de memoria
especificada por el apuntador de pila. También, el contenido del apuntador de pila es
reemplazado por el contenido previo del apuntador de pila menos uno. En otras palabras,
después que tiene lugar la transferencia acumulador-a-pila, el apuntador de pila es
decrementado en uno.
Para reforzar la idea, suponga que en un punto posterior del programa, la MPU ejecuta una
instrucción PSHB. Esto es ilustrado en la Figura 4-5. Antes de ejecutar PSHB, el acumulador B
147
DL3155M24HC11
contiene BB16 y el apuntador de pila aún apunta a 01F81 6. Cuando se ejecuta PSHB, el
contenido del acumulador B es colocado en la pila y el apuntador de pila es decrementado a
01F716.
La ejecución de las instrucciones PSHX y PSHY es similar a las referidas al acumulador
excepto que el contenido del registro índice es colocado en la pila. Recuerde que los registros
índice son registros de 16 bits. Esto causa que, cuando PSHX o PSHY es ejecutado, el byte de
orden bajo, sea colocado en la pila (en la dirección contenida en el apuntador de pila) primero.
Entonces, el apuntador de pila es decrementado en dos. Estas operaciones son resumidas por
el registro IX como sigue:
IX à Stk, SP = SP – 2
IY à Stk, SP = SP – 2
Note que, (como con otras instrucciones del registro índice Y) el opcode hexadecimal para
PSHY es el mismo que para PSHX, pero es precedido por el byte de 18.
Fig. 4-5. Ejecutando la instrucción PSHB
Las Instrucciones PULL.
Los bytes de datos pueden ser removidos o “jalados” desde la
pila y colocados ya sea en el acumulador (A,B) o en el registro índice (X,Y). El 68HC11 tiene
cuatro instrucciones de extracción para realizar esas operaciones.
PULA permite a la MPU extraer datos de la pila y ponerlos en el acumulador A. PULB lleva a
cabo una operación similar excepto que el dato va al acumulador B. En cada caso, el dato es
tomado de la cima de la pila. Así, el dato disponible por la MPU es el último byte que fue
colocado en la pila.
Por ejemplo, la Figura 4-6A muestra la pila como fue dejada después de la última instrucción de
PUSH. La Figura 4-6B muestra que pasa si se ejecuta la instrucción PULA. Primero, el
apuntador de pila se incrementa automáticamente en uno a 01F816. Luego, el contenido de la
148
DL3155M24HC11
localidad de memoria designada por el apuntador de pila es transferido al acumulador A. Así,
BB16 va al acumulador A. Note que el apuntador de pila es incrementado antes que el byte sea
retirado de la pila.
Para comprobar que tiene la idea, considere qué pasa si ahora se ejecuta la instrucción PULB.
La Figura 4-6C muestra que la pila es incrementada automáticamente a 01F916. El contenido de
esa localidad es entonces extraído al acumulador B. Esta operación se describe:
SP = SP + 1, B ß Stk
Fig. 4-6 Ejecutando la instrucción PULL
La función de las instrucciones PULX y PULY es similar a la de las instrucciones PULA/PULB
discutidas anteriormente, sin embargo, el dato es extraído (primero el byte de orden alto) y
cargado en el registro índice. Esto comienza en la dirección contenida en el apuntador de pila
+ 1. El apuntador de pila es incrementado en 2. Estas operaciones pueden ser expresadas
simbólicamente:
SP = SP + 2, IX ß Stk
SP = SP + 2, IY ß Stk
Recuerde que hay un pre byte de 18 para la instrucción PULY.
Usando la Pila.
Como ya vimos, 8 de las 16 instrucciones básicas de la pila son para
colocar datos o para retirarlos de ella. Como se demuestra en algunos de los experimentos de
149
DL3155M24HC11
la Unidad 8, las instrucciones PUSH/PULL pueden usarse para guardar temporalmente los
contenidos de acumuladores o registros índice. Esto puede hacerse con operaciones que
destruyen los contenidos de esos registros.
Las 8 instrucciones restantes están enfocadas a operaciones de pila relativamente sencillas.
Muchas de ellas han sido discutidas o sé explican ellas misma. Estas incluyen a INS, que
incrementa en uno el apuntador de pila; DES para decrementarlo; LDS, que carga el apuntador
de pila desde dos direcciones de memoria consecutivas; TSX y TSY, que cargan el registro
índice especificado con el contenido del apuntador de pila más uno; y TXS y TYS que cargan el
apuntador de pila con el contenido del registro índice especificado menos uno. La Figura 4-7
resume estas instrucciones. Las instrucciones PUSH y POP son listadas con las Operaciones
del Acumulador y la Memoria. Aquellas instrucciones que afectan al apuntador de pila son
listadas con las Operaciones del Registro Indice y Apuntador de Pila. Como con otras
instrucciones, usted se familiarizará y adquirirá soltura en el uso de ellas a través del estudio y
la práctica.
MODOS DE DIRECIONAMIENTO
Fig. 4-7 Instrucciones de pila y apuntador de pila
Los siguientes son unos ejemplos del uso de la pila. Primero considere un ejemplo trivial.
Usando solamente operaciones de pila, intercambie los contenidos de los acumuladores A y B.
Suponiendo que el apuntador de pila ya ha sido ajustado, el segmento de programa puede
verse como sigue:
PSHA
PSHB
PULA
PULB
Suponga que el acumulador A contiene inicialmente AA1 6 y que el acumulador B contiene BB16.
La primera instrucción coloca AA16 en la pila. Luego, BB16 es colocado en la pila. La tercera
instrucción extrae BB16 de la cima de la pila y la coloca en el acumulador A. Finalmente, la
última instrucción extrae AA16 de la pila y la coloca en el acumulador B. Como usted puede ver,
los contenidos de los dos acumuladores son intercambiados. La siguiente rutina logra la misma
tarea con una instrucción menos:
150
DL3155M24HC11
PSHA
TBA
PULB
Ahora veamos un ejemplo más complejo. Supongamos que se desean transferir 1610 bytes de
datos de un lugar en memoria a otro. Como se vio en la unidad anterior, este tipo de problema
es un buen candidato para indexar. Sin embargo, el indexado resulta problemático si las dos
listas se hallan sobre la localidad de memoria FF16. La razón de esto es que la compensación
de dirección (offset), sólo pueden manejar un máximo de FF16 localidades sobre la dirección
que se halle en el registro índice.
En este ejemplo, asuma que se desea mover los datos de las localidades de memoria 001016
hasta la 001F16, a las localidades 01F016 a la 01FF16. Aunque esto puede hacerse empleando
indexado directo, el programa se vuelve innecesariamente complicado. Se deben mantener dos
índices separados; uno para cargar los datos desde 001016 hasta 001F 16, y el otro para
almacenar los datos en 01F016 a la 01FF16. Una aproximación sencilla es usar el indexado para
una operación y la capacidad de la pila para la otra. Esto es, podríamos cargar datos de la lista
inferior usando indexado y almacenarlos en la lista superior empleando la capacidad de la pila.
Un programa que hace esto es el mostrado en la Figura 4-8. La primera instrucción carga el
apuntador de pila con la dirección 01FF16. Esta es la dirección de la última entrada, en la nueva
lista que se formará. Recuerde que la nueva lista se escribirá en las localidades 01F01 6 a la
01FF16. Una vez que la localidad 01FF16 es establecida como la cima de la pila, podemos
introducir datos en la nueva lista simplemente colocándolos en la pila. Puesto que el apuntador
de pila es decrementado con cada operación de apilado, debemos apilar la última entrada de la
lista en la cima de la pila.
DIRECCION
HEX.
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
002A
002B
002C
002D
002E
002F
CONTENIDO
HEX.
8E
01
FF
CE
00
1F
A6
00
36
09
8C
00
0F
26
F7
CF
CONTENIDO HEX/.
MNEMONICO
LDS #
01
FF
LDX #
00
1F
LDAA, X
00
PSHA
DEX
CPX #
00
0F
BNE
F7
STOP
COMENTARIOS
Carga el apuntador de pila o stack pointer inmediatamente con la
dirección de la nueva entrada en la nueva lista
Cargar el registro indexado inmediatamente con la dirección de la
ultima entrada en la lista original
Carga el acumulador A, indexado desde la lista original.
Coloca el contenido del acumulador A, en la nueva lista
Decrementa el registro indexado
Compara el contenido del registro indexado con una dirección
menos que la de la primer entrada en la lista original.
De lo contrario salta hacia atrás.
Paro
Fig. 4-8 Mueva una lista de datos usando, operaciones de pila e indexados
151
DL3155M24HC11
La segunda instrucción carga el registro índice con la dirección de la última entrada de la lista
original. Esto es necesario por la razón escrita arriba.
Enseguida, el acumulador A se carga usando direccionamiento indexado. Ya que la
compensación de dirección es 0016, el acumulador se carga con el contenido de 001F16. Esto
es, la última entrada en la lista original, es cargada al acumulador A.
Entonces, la instrucción PSHA coloca el contenido del acumulador A en la pila. Así, la última
entrada de la lista original es transferida a la localidad 01FF1 6. En el proceso, el apuntador de
pila es decrementado automáticamente a 01FE16.
El registro índice es decrementado a 001E16 por la siguiente instrucción. Entonces, la
instrucción CPX compara el registro índice con 000F16 para ver si todas las entradas de la lista
han sido trasladadas. Si no son iguales, la MPU bifurca o salta hacia atrás y toma la siguiente
entrada de la lista. El lazo se repite una y otra vez hasta que la lista entera se transfiere a su
nueva localidad.
Algunos usos adicionales de la pila serán revelados después. Sin embargo, aún si la pila no
hace más que lo anterior, con ello muestra las útiles capacidades que tiene. Pero como usted
verá, la MPU usa la pila de otras maneras, haciendo esta capacidad aún más importante.
152
DL3155M24HC11
UNIDAD 5
OPERACIONES DE ENTRADA Y SALIDA E
INTERRUPCIONES
153
DL3155M24HC11
CONTENIDO
5.1 OPERACIONES DE ENTRADA SALIDA
5.2 RESETS E INTERRUPCIONES
154
DL3155M24HC11
5.1 OPERACIONES DE ENTRADA-SALIDA (I/O).
Un sistema microprocesador, es más funcional cuando acepta datos desde exterior,
procesándolos en alguna sección, y presentando los resultados hacia fuera del micro. Los
dispositivos de entrada pueden no ser más que un grupo de interruptores; así como los
dispositivos de salida pueden ser tan simples como un grupo de lamparas indicadoras. Un
simple microprocesador maneja diversos dispositivos como: teleimpresores, impresoras,
maquinas etc. El punto es que, los requerimientos de I/O, pueden variar considerablemente de
una aplicación a otra. Esta sección esta enfocada a operaciones de I/O e interfaces
En una breve historia de los microprocesadores, se han desarrollado dos distintos métodos
para el manejo de operaciones. En algunos microprocesadores, las operaciones I/O se
manejan por instrucciones I/O. Estos microprocesadores generalmente tienen una instrucción
de entrada y una instrucción de salida. Cuando la instrucción de entrada "input", se ejecuta, un
byte es transferido desde el dispositivo seleccionado I/O a un registro del MPU. El registro
involucrado es usualmente el acumulador, este método de operación I/O, se le conoce como
accumulator I/O. El dispositivo I/O selecciona y envía un byte de selección de dispositivo, sobre
el bus de direcciones. Para usar un byte de 8 bits en el dispositivo selector, el MPU puede
especificar 25610 diferentes dispositivos I/O. Claro esta que pocos sistemas
microprocesadores, usan muchos dispositivos por la compatibilidad que implicaría. La
instrucción para salida output, causa la transferencia de datos desde el acumulador hacia el
dispositivo I/O. Aunque este método para manejo de operaciones I/O, se usa con frecuencia en
muchos microprocesadores, el MPU 68HC11 usa una técnica diferente.
El otro método para manejo de operaciones I/O, involucra todas las transferencias de I/O como
transferencias de memoria. Este método, es llamado memory-maped I/O, es decir manejo de
memoria mapeada para I/O. Dicho método lo utiliza el MPU 68HC11 y muchos otros
microprocesadores. Debe notarse que el MPU puede ejecutar operaciones accumulator I/O, así
como operaciones memory-mapped I/O.
El MPU 68HC11 no tiene instrucciones I/O. A un dispositivo I/O se le asigna una dirección y es
tratado como una localidad de memoria. Por ejemplo, supónga que una entrada de teclado a
sido asignada a la dirección 800016. Podemos ingresar datos al acumulador A con el uso de la
instrucción:
LDAA 800016
Tocante a lo mismo, una salida a display puede estar asignada a la dirección 900016. En este
caso, podemos en este caso podemos llevarla al acumulador B con la instrucción:
STAB 900016
Como se aprecia, el dispositivo I/O es tratado como una localidad de memoria. El diagrama a
bloques del sistema, se muestra en la Fig. 5-1. Indica como un dispositivo I/O es conectado al
microcomputador. Note que ambos, tanto el bus de datos como el bus de direcciones, están
conectados la interfaz I/O. Una interfaz típica consiste de un addres decoder, (decodificador de
direcciones), una salida (output), una entrada (input latch) y buffers o drivers.
155
DL3155M24HC11
UNIDAD
MICROP.
(MPU)
BUS
DE
DIRECCIONES
BUS
DE
DATOS
SALIDAS
DISPOSITIVOS
-Fig. 5-1. Entradas y salidas para una microcomputadora
El address decoder, monitorea el bus de direcciones y habilita la circuitería de la interfaz para
un dispositivo particular, solo si la dirección apropiada se detecta. Esto previene al dispositivo
I/O particular, de una interferencia cuando el dato es transferido entre la memoria y el MPU. El
address decoder también previene a los diferentes dispositivos I/O, de interferencia mutua.
La interfaz I/O, generalmente tendrá una salida latch si es que llega a ser usada por una
operación de salida. La razón para esto es que el dato desde el MPU aparecerá sobre la línea
de datos, por un instante muy corto (generalmente menor a un microsegundo). Por almacenar
los datos de salida en un latch, el dispositivo da un mayor periodo de tiempo, permitiendo así
revisar la respuesta de datos.
Los buffers o drivers se incluyen también en la interfaz I/O. Son frecuentemente necesarios
cuando circuitos generales y diferentes comparten el mismo bus. Los buffers proveen el
aislamiento entre el dispositivo I/O y el bus MPU.
156
DL3155M24HC11
OPERACIONES DE SALIDA.
La figura 5-2 muestra un circuito de salida simplificado. Aquí el dispositivo de salida es un grupo
de 8 diodos emisores de luz (LED’s). Cada detalle se muestra para ilustrar como una operación
de salida puede ser ejecutada. El address decoder monitorea el bus de direcciones buscando
la dirección 900016. También revisa alguna de las líneas de control que conecta al MPU: Una de
estas líneas se le llama read-write (R/ ) (pin). El pin R/
del MPU 68HC11 se va a un estado
bajo, cuando una operación de escritura(output), es iniciada por el MPU, (estado alto para
lectura).
Fig. 5-2. Circuito simplificado de salida
Note que la salida de address decoder es usada para habilitar los datos de salida latch y los
drivers. Cuando estas han sido habilitadas, el byte sobre la línea de datos es almacenada en el
latch. Los bits de datos almacenados en el latch, provoca que los LED’s, correspondientes
enciendan. Por la salida y los patrones de bit apropiados, el MPU puede mostrar diferentes
números binarios.
Note que la address decoder (y por lo tanto el display) esta en la dirección 900016. Podemos
colocar el dato en el display en muy diferentes formas. Por ejemplo, podemos cargar un patrón
apropiado y desplegarlo en el acumulador A. Entonces por la ejecución de “almacena al
acumulador A”(store accumulator A), instrucción de direccionamiento extendido, puede
transferir el contenido del acumulador al display. La instrucción puede ser: STAA 900016. O
podemos enviar el dato al acumulador B usando la instrucción: STBA 900016.
En otro caso, la dirección 900016 sale sobre el bus de direcciones por un breve intervalo de
tiempo. El address decoder reconoce esta dirección, a la vez, las líneas de control(control
lines), indican que una operación de salida es llamada. En particular, las líneas de lectura157
DL3155M24HC11
escritura se van a un estado bajo. Esto provoca que el decodificador de direcciones habilite los
datos de salida latch. Simultáneamente, el byte, dato de 8 bits aparece sobre el bus de datos.
La salida latch almacena el dato en un byte. El dato aparece en la entrada del latch en menos
de un microsegundo (típicamente). Sin embargo, una vez que el dato es almacenado, este
aparece en la salida del latch hasta que un nuevo dato es escrito. Así la salida del dato será
desplegada hasta que el siguiente byte de dato es extraído por el MPU.
Fig. 5-3. Circuito simplificado de entrada
OPERACIONES DE ENTRADA.
La figura 5-3 muestra un circuito simple de entrada. Aquí el dispositivo de entrada es un grupo
de ocho interruptores. Cuando un interruptor es abierto, su respectiva línea de entrada al buffer
es substituido por resistencias de pull-up. Sin embargo cuando el interruptor se cierra, su
respectiva línea de entrada, es puesta a nivel bajo por el interruptor conectado a tierra.
En este circuito sencillo, no es requerido el latch entre los interruptores y el bus de datos. Sin
embargo, se usa un buffer, de modo que el grupo de interruptores pueda ser efectivamente
desconectado del bus de datos cuando los interruptores no estén siendo direccionados.
Con el circuito de salida, el address decoder busca las líneas de dirección y control. Note que
la dirección asignada es 800016. Para una entrada de dato desde el grupo de interruptores
hacia el acumulador A, usamos la instrucción: LDAA 800016 . O podemos ingresar el dato al
acumulador B por medio de la instrucción: LDAB 800016.
En otro caso, la dirección 800016 es colocada en la línea de dirección. El address decoder
reconoce estas direcciones y habilita el buffer. Por un breve intervalo de tiempo (típicamente
158
DL3155M24HC11
menor que un microsegundo), las líneas del bus de datos toman el mismo estado que las líneas
al lado derecho (input) del buffer. Si el interruptor no es activado, todas las líneas de datos
serán altas, es decir entregarán un "1" lógico (FF16) al cargarse en el acumulador. Sin embargo
si uno de los interruptores (S0 por ejemplo) es activado, la línea respectiva de datos (D0) será
baja. En este caso, el numero leído en el acumulador será FE 16. Examinando el byte que es
leído, el MPU puede determinar que interruptor es activado.
PROGRAMANDO ENTRADA-SALIDA.
Usted, ahora conoce lo necesario acerca de los circuito de entrada-salida para ejecutar
operaciones I/O. Refiriéndonos a la figura 5-2 y 5-3. Para el primer ejemplo supongamos que
usted quiere que un LED encienda cuando el correspondiente interruptor sea presionado. Esto
es, el LED0 encenderá cuando cuándo S0 se active; así mismo el LED1 deberá encender
cuando S1 sea presionado, etc.
Si se refiere a la figura 5-2, observara que un LED puede encender al colocar a "0", el bit
apropiado en el latch. Por ejemplo, un 0 en bit 0 provocara que el LED0 se polarice
directamente. Así, el diodo conducirá y emitirá luz. Note que un "1" en el bit 0 no permitirá que
el diodo conduzca y por tanto no emitirá luz. Consecuentemente, un "0" activa el LED y un "1"
lo apagará.
Refiriéndonos a la figura 5-3, encontrará que, cuando uno de los interruptores es cerrado, su
correspondiente línea irá a 0. Si los interruptores no son cerrados su correspondiente línea será
"1".
Si cargamos un dato en uno de los acumuladores de dirección 800016 y después almacenamos
el dato en la dirección 9000 16, los interruptores parecerán el control de los LED’s. El programa
podrá verlos así:
LDAA
80
00
STAA
90
00
BRA
F8
Si S0 y solo S0, es cerrado cuando la instrucción LDAA 8000 es ejecutada, 1111 11102 será
cargado en el acumulador A. La siguiente instrucción almacenará este byte de dato en la salida
latch. Esto provocara que el LED0, y sólo él. La instrucción BRA mantiene a la MPU en un ciclo
continuo. Tratemos algunos ejemplos y verifiquemos cada vez que cada tiempo, un interruptor
sea cerrado, el correspondiente LED encenderá. Si los interruptores son establecidos a cierto
número binario de 8 bits, los LED’s desplegaran ese número de 8 bits.
Ahora, supóngase que cambiamos nuestro deseo y decidimos que los LED’s deberán
encenderse en caso de complemento a uno del número binario puesto en los interruptores. No
159
DL3155M24HC11
tenemos porque tocar el hardware. En su lugar, cambiaremos el programa. El nuevo programa
será:
LDAA
80
00
COMA
STAA
90
00
BRA
F7
Note que simplemente tenemos que insertar la instrucción complemento a unos entre las
operaciones de entrada y salida.
Como otro ejemplo, suponga que deseamos desplegar un número que es cuatro veces mayor,
que el número colocado en los interruptores. Nuestro programa puede cambiar así:
LDAA
80
00
ASLA
ASLA
STAA
90
00
BRA
F6
Es muy útil por el hecho que no se necesita cambiar el hardware, solo se agregan las
instrucciones ASLA entre la operación de entrada y salida.
Aunque estos ejemplos son muy simples, ilustran la flexibilidad de los arreglos I/O. El dato es
dado desde un dispositivo de entrada como si fuera dado por la memoria. Una vez en el MPU,
el byte de dato puede ser modificado en la forma que queramos. El dato puede ser transferido a
un dispositivo de salida como si fuera a ser almacenado en memoria. Mientras el dato esta en
la MPU, puede ser modificado de diferentes formas. El byte de entrada puede ser recorrido a la
izquierda o la derecha. Puede sumarse – o restarse – a otro número. Puede efectuarse la
operación OR o AND con otro byte. Las posibilidades son interminables y casi no involucran el
cambio al hardware. Todos los datos manipulados pueden ser procesados por el programa.
PROGRAMA CONTROL DE OPERACIONES I/O
En los ejemplos precedentes, todas las transferencias de I/O eran controladas por el programa
y solo por él. El programa esta en un ciclo continuo que ingresa datos desde los interruptores,
modifica los datos (si es requerido) y entrega los datos a los displays.
160
DL3155M24HC11
Cuando este arreglo es usado, el MPU nunca sabe si el dato de esa entrada tiene cambio.
Simplemente lee en el dato un número veces de cada segundo. De igual forma, el MPU saca el
dato una y otra vez. Este programa trabaja bien por operaciones simples I/O. Sin embargo
como la I/O requiere cambiar más sofisticadamente, esta técnica es molesta.
El programa debe estar en un ciclo, revisando continuamente la estrada y actualizará la salida.
Como el número de datos manipulados crece, el ciclo se hace más largo y por tanto el MPU
revisará las entradas con menos frecuencia. Cuando diversos dispositivos de I/O son usados,
se debe revisar cada entrada y actualizar cada salida repetidamente. Si el ciclo se hace más
largo, el MPU puede perder momentáneamente los cambios en el interruptor. Esto es aceptable
en algunas aplicaciones pero en muchas otras puede ser intolerado.
Obviamente entonces, un método más sofisticado de manejo de operaciones I/O deberá estar
disponible para el microprocesador.
161
DL3155M24HC11
CONTROL DE INTERRUPCIONES EN OPERACIONES I/O.
Una forma más efectiva de manejar operaciones I/O involucra el concepto llamado
interrupciones. Las interrupciones son el medio por el cual un dispositivo I/O puede notificar a el
MPU que esta listo para enviar el dato de entrada o aceptar el dato de salida. Generalmente
cuando ocurre una interrupción, el MPU suspende su operación actual y mantiene la
interrupción. Esto es, puede leer internamente o escribir fuera un byte de dato. Después de
mantener la interrupción, la MPU regresa a su tarea original y continua desde donde se quedo.
Las interrupciones de microprocesador pueden ser de hardware o software. Mientras más
operaciones I/O se usan generalmente, interrupciones de hardware, la instrucción SWI del
68HC11 puede generar una interrupción por software (detalle explicado más adelante).
Una analogía puede ayudarle para visualizar una operación de interrupción. Compare el MPU
con el presidente de una corporación, quien esta escribiendo un reporte. La interrupción puede
ser comparada con una llamada telefónica. La principal tarea del presidente es el reporte, sin
embargo si el teléfono suena (una interrupción), él terminara de escribir la palabra o enunciado
y responderá a la llamada telefónica. Después de haber atendido la llamada telefónica,
regresará al reporte y continuara en el punto donde se quedo. En esta analogía el timbre del
teléfono notifica al presidente, la interrupción requerida.
Esta analogía muestra la dificultad del programa controlado con la técnica discutida
anteriormente. Si quitamos la interrupción requerida ( el timbre del teléfono), nos encontraremos
ante una situación algo cómica. El presidente escribe unas cuantas palabras del reporte.
Después levanta la bocina del teléfono para ver sí alguien esta en el otro extremo. Si el no
acierta al levantar la bocina, escribe otras palabras, y revisa el teléfono de nuevo. Claro esta
que la técnica requiere importantes recursos, como el "tiempo" del presidente. Esta simple
analogía muestra la importancia de la capacidad de una interrupción. Sin ella se perdería una
gran cantidad de tiempo del MPU, y pudiera afectar las rutinas de operación.
Una característica de extensión del 68HC11 son las características de hardware on-chip I/O
(e.g. temporizador(timer), comunicación serial,, e interfaces periféricas, etc.), un total de
veintidós posibles interrupciones, distintas son posibles. Esto incluye diecisiete de hardware,
una de software, y cuatro interrupciones de reset. Más de estas (15) son asociados con la
interfaz interna de dicho hardware. Esto es, cuando una operación de I/O ocurre esta es
generalmente acompañada con su propia interrupción especial de hardware. Estas
interrupciones trabajan, como describimos anteriormente, alertan al microprocesador de otra
actividad, normalmente I/O.
En la siguiente sección examinaremos cinco diferentes tipos de interrupciones del 68HC11 con
un propósito especial.
162
DL3155M24HC11
5.2 RESETS E INTERRUPCIONES.
Las interrupciones fueron introducidas en la sección previa en conexión a las operaciones I/O.
Mientras que las operaciones I/O usan parte de la capacidad de las interrupciones del MPU, las
interrupciones son también usadas en otros ámbitos. Cinco tipos diferentes de reset´s e
interrupciones del 68HC11 serán consideradas.
RESET
Interrupción Pseudo Non-Maskable
Petición de interupción(Interrupt Request)
Interrupción de software (SWI)
IIlegal Opcode Trap
XIRQ
IRQ
En esta sección se examinara cada una de estas interrupciones en detalle.
REINICIALIZAR
En una aplicación típica, el microprocesador tiene un control o programa monitor en una
memoria de solo lectura (ROM). Además una memoria de acceso aleatorio(RAM), que escribe y
lee, se usa para conservar datos de entrada, recibir información, respuestas intermedias, datos
de salida, etc. Como hemos visto la MPU 68HC11 tiene la capacidad de direccionar arriba
65,53610 localidades de memoria. Muchas aplicaciones de microprocesadores no requieren de
mucha memoria. En algunas aplicaciones, el control del programa requiere menos que del
veinte por ciento de las localidades. La RAM puede ser usada en menos del diez por ciento.
Generalmente el monitor del programa es colocado en direcciones de memoria altas. La RAM
es usualmente dada en localidades bajas de memoria tal, que el modo de direccionamiento
directo sea usado. Los dispositivos I/O son dados en direcciones intermedias. Así, las
direcciones de memoria pueden colocarse como la Figura 5-4, lo muestra.
Fig. 5-4. Ejemplos de localidades de memoria en un sistema microcomputador
Note que el control o programa monitor es colocado en la ROM en el tope de memoria. En este
ejemplo, se usa un byte de 16K de ROM. La dirección de la ROM esta desde C00016.hasta
FFFF16. La RAM es colocada en la parte baja, fin de memoria. Las direcciones que son usadas
van desde 0000 16 hasta 6FFF16. . Respecto a la RAM y a la ROM note que las localidades
163
DL3155M24HC11
700016 hasta AFFF16, pueden ser usadas como direcciones en un programa encapsulado
(program cartridge). Dicho programa encapsulado, puede contener un programa almacenados
y generado en una EEPROM (Electrictrically Erasable Programable, Read-Only-Memory,
también llamada "E" cuadrada PROM). Además de esto, como una alternativa, estas
localidades de memoria pueden ser usadas como direcciones en EPROM, la ROM contiene un
sistema firmware(tratamiento de microprogramación cableada). En ambos casos los
dispositivos ocupando estas localidades de memoria serán direccionadas hasta interfaces de
I/O que contienen latches, decoder-drivers, etc. como se menciono anteriormente.
El programa monitor almacena en la ROM, todos los controles de la actividad del MPU. En todo
momento, el sistema entero esta corriendo por este programa. En este ejemplo, cuando el
microprocesador es encendido deberá iniciar la ejecución de instrucciones en la dirección
C00016. También, debemos ser capaces de reinicializar el programa en esta dirección en
cualquier momento. De acuerdo a esto, el MPU 68HC11 tiene internamente, la capacidad de
reiniciar(reset).
La MPU 68HC11 tiene una línea de señal o pin de control que es llamado 2%S%T. Este pín o
línea es conectado a un interruptor reset de alguna clase. Si esta línea baja por un corto
periodo de tiempo(explicado más tarde) y entonces cambia a alto, el MPU puede iniciar una
secuencia de interrupciones reset (también llamada servicio de rutinas de interrupción). El
propósito principal de una secuencia de interrupciones es cargar la dirección de la primera
instrucción a ser ejecutada en el contador del programa. Esto se lograra fácilmente si, en
cualquier aplicación, el arranque de direcciones sea el mismo. Sin embargo, el arranque de
direcciones podrá hacerse de diferentes maneras. Por lo tanto, significa una conveniencia que
la dirección especificada provenga del direcciones iniciales, para cualquier arranque de
direcciones.
Un vector de interrupción es simplemente una dirección que es cargada en el contador del
programa cuando una interrupción ocurre. La MPU dice cuando esta ejecutando un programa
especial llamando un servicio de rutinas de interrupción, o incluso interrupción manual.
El MPU 68HC11 fue diseñado con un tope de 64 direcciones ROM reservadas específicamente
para vectores de interrupción. Para nuestro propósito nos concentraremos principalmente en el
contenido de los vectores de interrupción sobre los 16 bytes de ROM. Por cada dirección de
vector se requieren dos bytes (alto y bajo) para especificar todas las posibles localidades de
memoria, estos 16 bytes contienen la dirección en 16 bit´s de 8 vectores de interrupción, como
se muestra en la figura 5-5.
Note que la dirección FFFE16 y FFFF16 contienen el vector 2%S%T. Esto es, esas dos
localidades de memoria contienen la dirección de la primera instrucción a ser ejecutada cuando
el computador es inicializado o reinicializado. En el ejemplo previo de asignación de memoria
(figura 5-4) la primera instrucción en el programa monitor esta localizado en la dirección C00016.
Consecuentemente, este es nuestro vector de reinicialización (dirección). La localidad FFFE16
contiene el byte alto de la dirección (C016), y FFFF16 contiene el byte bajo de dirección (0016).
Recuerde que las localidades FFFE16 y FFFF16 están en la memoria de solo lectura. Por lo
tanto, el diseñador debe prever el vector reset conveniente en el tiempo que él esta escribiendo
el programa monitor.
DIRECCION
VECTOR DE INTERRUPCION
CODIGO DE
CONDICION
164
DL3155M24HC11
Registro
Mascara
Fig. 5-5. Asignación del vector de interrupción
La figura 5-6 muestra la secuencia de eventos que ocurren cuando el MPU es reinicializado.
Primero, la mascara de interrupción (I) es activada. Recordará que la bandera "I" corresponde a
uno de los registros código de condición. Como vera más tarde, si esta bandera es activada,
avisara si otra de las interrupciones esta ocurriendo. Así, la MPU activa el bit mascara de
interrupción, de tal modo que la secuencia de reset no sea interrumpida por la petición de uno
de los dispositivo de I/O.
165
DL3155M24HC11
RESET
Bit de interrupción
activada (I)
Carga el byte alto
del PC con el
contenido de
FFFE16
Carga el byte bajo
del PC con el
contenido de
FFFF16
Secuencia
reset de Interrupción
Ciclo
Inicio normal, ciclo de
búsqueda/ejecución
MPU Normal
Figura 5-6. Secuencia reset de interrupción
Segundo, los contenidos de la localidad FFFE16 son cargados en el lugar del byte alto del
contador del programa (PC). Este es enviado a la dirección FFFE16 sobre el bus de direcciones.
La localidad de memoria es leída desde afuera y su contenido es colocado sobre el bus de
datos. El MPU selecciona este byte y lo coloca sobre los ocho bits del contador de programa.
En nuestro ejemplo, el byte en la localidad FFFE16 es C016.
Después, el contenido de la localidad FFFF16 es cargado en los ocho bits bajos del contador de
programa. Termina ajustando el bus de direcciones a FFFF16. Así, el contenido de las
localidades mas altas de memoria son colocados en el bus de datos. En nuestro ejemplo, este
byte esta en 00 16. En este punto, el contador de programa contiene la dirección de la primera
instrucción la cual es C00016.
La secuencia de reinicialización termina cambiando el MPU a éste ciclo de maquina normal de
busqueda-ejecución (fetch-execute). Así, la instrucción en la dirección C00016 es buscada y
ejecutada. Para este punto, todas las actividades del MPU son controladas por el programa.
Un interruptor reset, conectado al pin externo 2%S%T del MPU, generalmente estará incluido en
algún lugar del sistema microcomputador. Esto permitirá al operador restablecer el sistema si
se bloquea o deja de correr por alguna razón. Incluyendo este tipo de reset, el MPU 68HC11
tiene un total de cuatro diferentes tipos de reset:
1. Un pin externo de 2%S%T,
2. Una señal reset de encendido(power-on).
3. Un reset por el watchdog timer, para una apropiada operación del sistema computador
(COP: Computer Operating Properly)
4. Un reset por el reloj monitor.
El reset de encendido (power-on reset), ocurre cuando una transición positiva es detectada en
el pín de alimentación del MPU, VDD . Esta reset es usado cuando se activa la señal energía
166
DL3155M24HC11
como un medio automático de un sistema de arranque. El circuito de encendido proporciona un
retardo (delay), 4064 ciclos de tiempo respecto a la primer operación del oscilador. El tiempo
del reset actual al encender para algún sistema microcomputador, depende de la frecuencia de
la salida E-clock, del micro. El tiempo de encendido reset de retardo(reset delay) puede ser
calculado como sigue:
TRD = 4064 ( 1/ fECK )
Donde:
(7.1)
TRD es tiempo de reset delay en milisegundos (ms), y
FECK es la frecuencia de salida en MHz. del reloj 68HC11.
Sin embargo, por
FXTAL = 4fECK
Donde :
fXTAL es la frecuencia del oscilador de cristal ( alimentado por los pines 7 y 8
del MPU 68HC11) en MHz.
La ecuación 7-1 puede ser presentada:
TRD = 16256 [ ( 1/f XTAL)]
Por ejemplo, para calcular el reset delay para el MPU 68HC11 con un f XTAL de 4 MHz.
TRD = 16256 x [1/(4 x 106)] = 4 ms.
Está ecuación es usada para calcular el reset delay time (tiempo reset de retardo) para un
68HC11 basado en el sistema dado por la frecuencia f XTAL o fECK en MHz.
El reset COP o Computer Operating Properly, protege al programa o para casos de fallas de
software. Al usar un temporizador(timer) interno especial llamado watchdog timer, el sistema
reset COP, monitorea la operación adecuada del MPU e inicia una secuencia reset vectorizada,
cuando una falla de programa se ha encontrado. Este reset puede ser deshabilitado
completamente usando la función COP, control de bits.
El cuarto tipo de reset, disponibles en el 68HC11, se llama Clock Monitor Reset o CMR, reset
por reloj monitor. Como su nombre lo implica, un CMR ocurre si el sistema reloj falla en la
operación. La función CMR es habilitada por un bit de control en el registro OPTION. Cuando
este bit es borrado, la función CMR es desactivada. Cuando el bit se activa la función monitor
de reloj iniciara un reset de sistema vectorizado si la frecuancia de E-clock (mencionada) falla
bajo un mínimo rango(cerca de 10 KHz). Esta señal de reset es también presentada en el pin
de la MPU RESET, disponible externamente.
Estos cuatro reset´s pueden considerase interrupciones. Esto es porque, cuando un reset
ocurre, el MPU deja cualquier actividad y salta a la localidad vectorizada comenzando su
ejecucíón. En muchos casos el programa monitor podrá iniciar con una subrutina corta para
activar el sistema. Dicha subrutina sirve para inicial el stack pointer, los displays, etc. El
68HC11 tiene otros tipos importantes de interrupciones. Serán discutidas en la siguiente
sección.
167
DL3155M24HC11
Interrupciones No-mascarables.
En este punto se hará una discusión entre la interrupción mascarable y la no-mascarable. Una
mascarable es una que el MPU puede ignorar bajo ciertas condiciones. Pero una nomascarable no puede ser ignorada. Para ilustrar la diferencia recordaremos la analogía del
presidente de la corporación.
Cuando del presidente esta escribiendo su reporte, puede ser interrumpido por el teléfono. Sin
embargo, puede llamar a la secretaria para que conteste, el presidente ha enmascarado una
fuente de interrupción. Esta analogía no es practica para todas las interrupciones. Por ejemplo
puede resultar in-práctico el enmascarar una alarma contra incendio.
Situaciones parecidas pueden suceder en el sistema controlado por el microprocesador.
Algunas interrupciones pueden ser ignoradas por pocos segundos mientras el MPU esta
realizando otras tareas, a estas las llamamos interrupciones mascarables. Las que no se
pueden ignorar, no pueden ser mascarables. El diseñador decide que interrupciones serán
mascarables y cuales no, el MPU, esta provisto de ambos tipos de interrupciones. Las
mascarables serán las primeras en discutir, por ser las que el MPU maneja.
El Constitución física de circuito integrado (IC) 68HC11, en una versión de 52 líneas
conductoras, cuenta con una línea de control llamada, línea de interrupción no-mascarable. La
salida de esta línea es el pin 18. Designada la línea de interrupción 8)21, esta entrada
proporciona un medio para solicitar una interrupción no-mascarable, después del reset de
iniciación. Durante el reset, el bit X del registro código de condición es activado y alguna
interrupción (incluyendo 8)21), es mascarada hasta habilitar el software, usando la instrucción
TAP (Transfer from Acumulator A to CCR). Posteriormente, reset cuando el bit X (CCR) es
borrado, la interrupción 8)21 llega a ser efectivamente una interrupción no-mascarable. Esto
significa que, en términos de la lógica por prioridad de interrupción, 8)21 tiene una prioridad
mayor que cualquier fuente de interrupción mascarable por el bit "I". Después, siendo
habilitado, 8)21 no puede ser mascarada por software; sin embargo es mascarada durante el
reset, y recibe una interrupción sobre el pin 8)21. 8)21 es a veces conocido como línea de
"pseudo interrupción.
La línea de entrada 8)21 es sensible a los cambios de nivel, de corriente y/o voltaje. Por ello
requiere de un resistor externo de pull-up hacia VDD . Después, de habilitar una transición de alto
a bajo sobre esta línea de forza el MPU a iniciar una secuencia de interrupciones no
mascarable. El propósito de la secuencia es proporcionar un medio ordenado por el cual el
MPU pueda saltar a una subrutina de servicio que tome interés de la interrupción.
Esto llega a ser un poco comprometido porque el MPU debe estar disponible para regresar al
menú principal, después la rutina de servicio de interrupción es finalizada. Debe estar
disponible para picos exactamente donde sea necesario. Además todos los registro retienen
exactamente el mismo dato y direccióm que ellos tienen cuando ocurre una interupción. En
otras palabras , cuando ocurre una interrupción, el contador de programa (PC) es salvado para
que el MPU pueda regresar después a este punto del programa. También los contenidos de los
acumuladores, el registro índice y el registro código de condición pueden salvarse para que el
MPU puede ser restaurado a una condición exacta que existe en el instante que ocurre la
interrupción.
168
DL3155M24HC11
El MPU 68HC11 termina al introducir todos los datos pendientes dentro de la pila. Entonces
después, la interrupción ha sido servida, el MPU regresa al estado previo, extrayendo los datos
de la pila.
La secuencia de interrupción no-mascarable se muestra en la figura 5-7. Una interrupción nomascarable inicia cuando la línea 8)21 va desde este estado alto al estado bajo. El MPU
finaliza la ejecución de la instrucción actual. Sin embargo antes, otra instrucción es buscada, el
MPU coloca el contenido de estos registros en la pila. Llamada que el stack pointer siempre
apunta al tope de la pila. Para este ejemplo se asume que el stack pointer siempre apunta al
tope de la pila y que el stack pointer ha sido activado por una instrucción cercana a la dirección
006A1 6.
XIRQ
no
La actual
instrucción
finalizo?
si
Coloca los registros
dentro de la
Pila.
Activa el bit,
mascara de
interrupción (I)
Carga el byte alto
del PC con el
contenido de FFF416
Carga el byte bajo
del PC con el
contenido de
FFF516
Inicio normal, ciclo de
búsqueda/ejecución
Secuencia
de Interrupción
No-mascarable
Ciclo
MPU Normal
Fig. 5-7. Secuencia de Interrupción no-mascarable (8
8 )21 )
El MPU coloca los 8-bit bajos del contador de programa PC, en la localidad de memoria 006A1 6.
Entonces este decrementa al stack pointer para que los 8-bits de la parte alta del PC, se
coloquen en la localidad 00691 6. También, los contenidos del registro índice X son ubicados en
las direcciones 006616 y en 006516. El contenido de los acumuladores A, B y los códigos de
condición, en 00641 6 y 006316, como se muestra. Cuando todo fue realizado, el stack pointer
será decrementado 9 veces a 006016. Regresando al diagrama de flujo, note que el siguiente
paso es activar el bit de la mascara de interrupción. Esto permite que el MPU ignore peticiones
que ocurran mientras la interrupción no-mascarable esta siendo atendida.
En este punto, el MPU esta listo para el salto a la rutina servicio de interrupción. Pero, ¿cual es
la dirección de esta subrutina?. Recuerde, é carácter vector de interrupción que fue mostrado
en la figura 5-5. EL vector de interrupción no-mascarable (8)21), esta en las direcciones
169
DL3155M24HC11
FFF416 y FFF516. Entonces el byte superior del PC es cargado desde FFF416, mientras el byte
bajo es cargado desde FFF516. Éste, dirige el MPU a la primera instrucción en la rutina de
servicio 8)21. Desde este punto, el MPU regresa al ciclo normal busqueda-ejecución (fetchexecute), hasta que la rutina de servicio ejecución finalice.
La secuencia de eventos se ilustra en la figura 5-7; sucede automáticamente cuando una
secuencia de interrupción no-mascarable, inicia. La línea 8)21 da hardware externo, un
método para forzar un salto a subrutina. En este caso, la subrutina es un programa corto que
ejecuta alguna acción para dar atención por importancia a la interrupción (i.e una rutina servicio
de interrupción).
170
DL3155M24HC11
Instrucción retorno de Interrupción(RTI).
La interrupción no mascarable se usa en caso de que alguna situación no pueda ser ignorada.
Usted probablemente puede visualizar aplicaciones donde cada una requiera cierta capacidad.
Por ejemplo, asuma que el microprocesador esta siendo usado por un taladro numéricamente
controlado. La interrupción no-mascarable puede usarse en conjunción con algunos
interruptores, para prevenir perforaciones sobre la superficie de trabajo, ó para apagar la
máquina en caso de que alguna persona por error meta su mano.
El propósito de la rutina de servicio es dirigir la operación de la computadora para dar atención
de la interrupción. Típicamente, detecta primero cual dispositivo inicio la interrupción. Entonces,
así detectar la naturaleza de la interrupción. Finalmente, cual acción que se tomará para darle
atención a la interrupción. En muchos de los casos, la interrupción es una rutina natural y puede
ser fácilmente atendida. Sí es así, el MPU debe regresar al menú principal y continuar. Esto es
posible con una instrucción, llamada Retorno de interrupción (RTI, Return-From-Interrupt).
La figura 5-8 muestra el funcionamiento de la instrucción RTI. El programa principal ubicado en
la parte izquierda, mientras la rutina servicio de interrupción en la parte derecha. Asuma que la
señal de interrupción ocurre mientras la instrucción LDAB#, esta siendo ejecutada. El MPU
termina la instrucción y coloca todos los datos necesarios en la pila. Esta entonces salta a la
dirección determinada por el vector 8)21 en la dirección $FFF4 y FFF5. El contenido de estas
dos localidades determina la dirección de inicio de la rutina de servicio 8)21. Note que la ultima
instrucción en la rutina de servicio es la instrucción RTI. La instrucción regresa el control de
programa al punto en el que el MPU atendió la interrupción.
El estado previo del MPU fue preservado en la pila. La instrucción RTI causa que los
acumuladores, el contador de programa (PC), los registros índice y los registros códigos de
condición, sean cargados en la pila. Entonces, la misma información estuvo en la pila cuando
ocurre la interupciòn va fuera de la pila cuando la instrucción RTI es ejecutada.
DIRECCION
DETERMINADA POR
EL VECTOR 8)21,
EN FFF4 Y FFF5
INTERRUPCION NOMASCARABLE
(8)21)
Fig. 5-8 la instrucción RTI, control de retorno al programa principal
después de que una interrupción ha sido atendida
171
DL3155M24HC11
Petición de interrupción ())21 )
La petición de interrupción (interrupt request), es muy similar a la interrupción no-mascarable.
La principal diferencia radica en que )21 es mascarable.
El MPU 68HC11 tiene una línea de control )21, de tal modo que cuando esta línea se
encuentra en estado bajo, se solicita una secuencia de interrupciones. Sin embargo el MPU,
puede o no, iniciar la secuencia dependiendo del estado del bit mascara de interrupción "I". Si
el bit esta activado el MPU inicia la secuencia. Este procedimiento es muy similar al de 8)21
discutido anteriormente. La figura 5-9 muestra la secuencia )21.
IRQ
La
instrucción
actual
finalizo?
NO
SI
Bit mascara de
interrupción
activado?
NO
SI
Coloca los registros
dentro de la
Pila.
Activa el bit,
mascara de
interrupción (I)
Carga el byte alto
del PC con el
contenido de FFF816
Carga el byte bajo
del PC con el
contenido de
FFF916
Inicio normal, ciclo de
búsqueda/ejecución
Ciclo MPU
Normal
Fig. 5-9. Secuencia, petición de interrupción.
Cuando la línea )21 esta baja, el MPU finaliza la instrucción actual. Revisa la condición del bit
"I", si esta activado a "1", ignora la petición de la interrupción y ejecuta la siguiente instrucción
en secuencia. Sin embargo, si I = 0, el MPU coloca el contenido en los diferentes registros, en
la pila según el orden mostrado.
El que el bit "I", este activado, previene que el MPU, este aceptando otra instrucción hasta que
la presente interrupción sea atendida.
172
DL3155M24HC11
La dirección de la rutina de servicio )21, esta en las direcciones FFF816 y FFF916. El PC es
cargado desde estas direcciones. Entonces la siguiente instrucción a ejecutarse puede ser la
primera instrucción en la rutina de servicio de la petición de interrupción )21.
Una vez en las rutinas de servicio, el MPU va dentro del ciclo de búsqueda-ejecución. Cuando
la interrupción ha sido atendida, el control regresa al programa principal por medio de la
instrucción RTI.
Instrucciones para la mascara de interrupciones.
El MPU tiene dos instrucciones que permiten el control de software del bit mascara de
interrupciones. Usted verá que si el bit "I", en el CCR, es activado algún tiempo, entonces inicia
una secuencia de interrupción. Esto impide que se acepte una )21 mientras )21 o 8)21 están
siendo atendidas. Es un ejemplo de cómo establecer las banderas de interrupción con
hardware.
En muchos casos esto es necesario para activar la bandera de interrupción con software. De
modo que el MPU 68HC11 cuenta con la instrucción "Set Interrupt-Mask" (SEI), activa mascara
de interrupción. La bandera puede activada para prevenir una interrupción sobre una parte del
programa que no se desee interrumpir. Esta tiene el efecto de deshabilitar la petición de
interrupción.
Seguramente, no esperamos deshabilitar permanentemente la capacidad de interrupciones. Sin
embargo, una forma de habilitar la petición de interrupciones, es a través de la instrucción
"Clear -Interrupt-Mask" (Borrado de la mascara de interrupción). Es una instrucción de un byte y
su opcode es 0E16.
Mientras podemos deshabilitar o habilitar la línea petición de interrupciones con esta
instrucción, esto no afecta a la interrupción no-mascarable. Como su nombre lo indica, la
interrupción No-Mascarable, o línea 8)21, no puede ser deshabilitada por la bandera "I".
173
DL3155M24HC11
Instrucción Interrupción de Software (SWI)
La MPU 68HC11 tiene un programa equivalente a una interrupción. Esta es una instrucción
llamada “Software interrupt” (SWI. Interrupción de Software). Esta instrucción al ser ejecutada
ocasiona la ejecución de una secuencia de interrupciones que es muy similar a la secuencia de
interrupción por hardware discutida anteriormente. Esta es una instrucción de un byte y su
opcode es 3F16.
La figura 5-10 muestra la secuencia de eventos que ocurren cuando esta instrucción es
ejecutada. Primero el contenido de todos los registros pertinentes son colocados en la pila
indicado. A continuación, se activa la mascara de interrupción, pero esa petición de interrupción
no puede interferir. Finalmente, el software vector de interrupción se obtiene desde la dirección
FFFA16 y FFFB16. Este vector es cargado en el contador de programa así que la siguiente
instrucción será buscada desde esta dirección. Como con la otra interrupción, el MPU regresara
al programa original cuando se encuentra la instrucción return-from-interrupt RTI,.
SWI
Coloca los registros
dentro de la
Pila.
Activa el bit,
mascara de
interrupción (I)
Carga el byte alto
del PC con el
contenido de
FFFA16
Secuencia
de Interrupción
por Software
Carga el byte bajo
del PC con el
contenido de
FFFB16
Inicio normal, ciclo de
búsqueda/ejecución
Ciclo
MPU Normal
Fig. 5-10. Secuencia de interrupción por Software (SWI).
La instrucción Software de Interrupción puede emplearse para simular interrupciones por
hardware. Lo cual también ayuda para insertar pausas en un programa.
174
DL3155M24HC11
Illegal Opcode Trap
En caso de ejecutar un opcode indefinido o ilegal, puede ocasionar diversos problemas como el
que un sistema quede bloqueado. A pesar de que nosotros originamos estos efectos, no
esperamos que el MPU procure la ejecución de ellos.
Además de las interrupciones de hardware y software antes discutidas, el MPU tiene una
instrucción especial para detectar y vigilar el uso de códigos u operaciones ilegales. Esta
interrupción se le llama illegal opcode trap, o trampa de opcode´s ilegales. La necesidad de
utilizar este tipo de interrupciones es que no todas las posibles combinaciones numéricas están
definidas por el conjunto de instrucciones del 68HC11. A continuación se dará una breve
descripción de cómo trabaja ilegal opcodes trap.
Durante la ejecución de un programa , las instrucciones son ejecutadas en forma secuencial y
predecible. Asumimos entonces que todas las instrucciones en el programa son validas para el
conjunto de instrucciones ya establecidas. Si un opcode ilegal es detectado, se genera una
interrupción, ésta es dirigida a una localidad en memoria o vector de opcode ilegal la cual es
previamente iniciada. Desde este punto, la interrupción se maneja como una interrupción
ordinaria, es decir, como un salto en programa en secuencia de servicio de interrupciones
predefinidas.
Después de una interrupción por opcode ilegal, el stack pointer debe ser reinicializado. Esto es
con el fin de evitar que la pila se exceda, por la constante ejecución de opcodes ilegales.
Instrucción de espera para Interrupción (WAI)
Al ejecutarse la instrucción WAI (wait for Interrupt), el contador de programa es incrementado
en uno. Entonces el contenido del contador de programa, el registro índice, los acumuladores y
el CCR, son colocados en la pila. El orden es exactamente como ocurre la interrupción. El MPU
entra a un estado de espera (wait state), hasta que ocurre una interrupción.
El MPU puede forzarse hacia atrás dentro de una acción, utilizando petición de interrupciones,
o interrupción no mascarable. La secuencia 8)21 es igual a la descrita anteriormente, salvo por
un pequeña diferencia; recuerda que el contenido de los registros están colocados en la pila,
esto permite que la secuencia 8)21, sea omitida, permitiendo así al MPU responder
rápidamente a la interrupción.
La secuencia )21, es similar, excepto que los registros no son colocados en la pila
nuevamente. Como siempre la señal )21, es ignorada si el bit mascara de interupción, esta
activado.
Seguramente, la señal reset puede sobrepasar el estado de espera. De tal modo que ahora hay
tres formas de salir del estado de espera.
175
DL3155M24HC11
Instrucción de paro (STOP)
Los programas escritos para el MC68HC11 en su mayoría terminan con la instrucción STOP,
marcando el fin de la ejecución. En este sentido la instrucción STOP es sencilla de entender.
Sin embargo, hay otros aspectos de la instrucción STOP que nos son tan aparentes de primera
instancia.
Desde que la primer computadora electrónica (ENIAC), llego a ser funcional alrededor de 1950,
la tendencia a sido elaborar sistemas de computo, después pequeños microprocesadores que
usen menos potencia eléctrica, pero mas potencia computacional.
El desarrollo de los primeros circuitos integrados de microprocesadores, marco una ganancia
significativa en este ámbito. Ahora la aplicación de la tecnologías ha avanzado de tal forma, que
los microprocesadores son usados en un amplio espectro de dispositivos, y productos - muchos
de ellos usan baterías de alimentación. Para estas aplicaciones, la cantidad de potencia
consumida por el microprocesador puede ser crítica. Muchos productos basados en
microprocesadores son usados en forma intermitente, es decir, solo ejecutan algunas tareas
periódicas o trabajos (por ejemplo en tareas continuas de control). Para este tipo de
aplicaciones, es una ventaja tener un microprocesador que pueda energizarse en potencia baja
o en modo "idling", sin carga. El MPU 68HC11 tiene la capacidad de energizarse de este modo.
Esto se logra con la instrucción STOP.
La instrucción STOP, coloca el MPU en modo consumo de baja potencia. En el modo STOP,
todos los relojes, incluyendo el oscilador interno, son detenidos. Esto causa que todo el
procesamiento interno de datos sea detenido. Los microprocesadores literalmente es instruido
para detenerse y esperar sin carga, una instrucción que inicie la secuencia nuevamente. La
ejecución de la instrucción STOP no cambia los registros internos del MPU ni afecta los pines
de salida o entrada.
Para usar la instrucción STOP (opcode CF), el bit "S" o "Stop disable" (paro deshabilitado),
puede borrarse a través de el registro código de condición CCR. Así como cualquier bit del
registro código de condición, el bit "S", puede ser activado o borrado usando software (TAP 06),
Si el bit CCR no es borrado (activado), la instrucción STOP es tratada igual a una no-operación
o NOP del MPU.
Una vez ejecutada la instrucción STOP, hay varias formas de restablecer el MPU, entre ellas
esta el 2%S%T, 8)21 o la no mascarable )21. Los métodos de 2%S%T y )21,.son formas de
recobrar de un STOP con 8)21, el cual se determina por el estado del bit mascara de
interrupción "X". Si se encuentra borrado, la ejecución del programa se reduce a una operación
de interrupción 8)21, como se ilustró en la fig. 5-7. Sin embargo si el bit esta activado, la
interrupción puede ser mascarada y la ejecución del programa puede resumirse a un opcode de
búsqueda para la siguiente instrucción seguida a la instrucción STOP. En esta opción el MPU
puede detenerse, esperar el modo de baja potencia y continuar un tiempo después con la
instrucción siguiente programada, después de STOP.
176
DL3155M24HC11
Procesamiento de interrupciones por prioridad
Hasta ahora, nos hemos concentrado en detalles de cómo especificar las interrupciones y
reset´s. Pero, ¿que sucede si se requieren dos o mas interrupciones diferentes en forma
simultanea?. Obviamente sin algún recurso para manejarse, podría causarse confusión.
Afortunadamente, el 68HC11 cuenta con un circuito interconstruido llamado Interrupt Resolution
Priority Circuit o circuito para resolución de interrupciones por prioridad, IRPC. El IRPC resuelve
las peticiones de interrupción de acuerdo a la clasificación relativa fija o la prioridad. Véase la
figura 5-11.
Alta
Prioridad
Baja
2% S%
%T
COP Monitor de reloj
Falla del COP
Opcodes ilegal
8 )21
)21 (por omisión)
Fig. 5-11 Prioridad de interrupciones establecido por IRPC
Cada interrupción tiene una entrada al IRPC. En el caso en que ocurren dos o más
interrupciones al mismo tiempo, el IRPC trabaja para asegurarse que la interrupción de alta
prioridad (relativa al resto), sea atendida primeramente. Por ejemplo si surge una falla en el
monitor de reloj COP y simultáneamente surge una interrupción por opcode ilegal, se le da más
atención a la falla del COP como de mayor prioridad.Note que el orden de prioridad mostrado
en la fig 5-11 es similar al orden del vector de interrupción mostrado previamente en la figura 55. Como es el caso de la más alta prioridad asignada a RESET, como lo es también el vector
superior de dirección mostrado en la figura 5-5. El COP monitor de reloj, es la siguiente
interrupción de mayor prioridad (hardware), al igual que en el vector de dirección ne la fig. 5-5.
El proceso IRPC es interrupción solo de hardware, la interrupción SWI o de software muestra
no esta incluida en la figura 5-11. Debe notarse sin embargo que SWI actualmente es de alta
prioridad, más que otra interrupción, excepto el RESET. Esto es cierto en el sentido que uno de
los opcodes SWI, es buscado, otra interrupción no puede ser atendida (solo RESET), hasta que
el vector SWI, sea traído.
Las interrupciones 8)21 y )21, respectivamente se muestran como dos entradas de baja
prioridad para el IRPC. Note que estas son también interrupciones que están usando el bit
mascarable del CCR. (figura 5-5). Semejante a las cuatro interrupciones de arriba, XIRQ es una
entrada fija a la IRPC. Estas cinco entradas de interrupciones a IRPC son fijas y no pueden ser
cambiadas. Sin embargo la ultima entrad, mostrada en la fig 5-11 como IRQ se selecciona por
software y puede ser cambiada, es la interrupción de baja prioridad al IRC y puede ser
cambiado por software, esto indica que otras interrupciones, por ejemplo la interrupción en
Tiempo real (Real Time Interrupt, RTI) o otros, puede ser elevado en prioridad sobre SWI al
asignarle la ultima posición en IRPC.
Debido a que las interrupciones asignadas a la posición IRPC están todas en el registro código
de condición, bit "I" mascarable, una interrupción asignada a esta ultima posición puede tener
una prioridad superior a otra interrupción mascarable del bit "I". La interrupción IRQ es
automáticamente seleccionada (por omisión) sobre reset. Otras se pueden seleccionar
cargando el código apropiado dentro de un registro especial en el 68HC11 llamado Highest
Priority Interrupt (HPRIO, interrupción de alta prioridad). Este registro localizado en la dirección
103C 16, es parte de un bloque de registro especial de control de 64 byte contenidos en la
177
DL3155M24HC11
memoria del 68HC11. Estos 64 registros internos son usados para varios controles por hardware y
características de interfaz en el 68HC11, que son detalles fuera del alcance de este curso. El cual
puede ser activado para reasignar otras interrupciones mascarables bit "I", a la ultima posición en el
IRPC. La fig. 5-12 muestra en síntesis, el diagrama de flujo de los procesos interupciones/reset según su
prioridad. Parte del este diagrama muestra la información presentada en esta unidad. Además se
muestran los tópicos asociados al reset y el procesamiento de interrupciones. Puede dar atención
particular a las condiciones de salto para los casos de interrupciones. A lo largo de este capitulo se
explico la utilidad de las interrupciones y los reset´s, como juegan un papel importante tanto en las
instrucciones como en la ejecución de programas en software.
2.
ALTA
Power-on reset
(POR)
PRIORIDAD
R e s e t externo
Retardo 4064 E-ciclos
Falla en clock
monitor(CME=1)
BAJA
CCP WATCHDOG
TIMEOUT
(CON NOCOP=0)
Carga el contenido
del PCcon $FFFC, FFFD
(VECTOR DE BUSQUEDA)
Carga el contenido
del PCcon $FFFE, FFFF
(VECTOR DE BUSQUEDA)
Carga el contenido
del PCcon $FFFA, FFFB
(VECTOR DE BUSQUEDA)
Activa los bits: S, X, I
en CCR
Reset MCU por
Hardware
Inicia una secuencia de
instrucciones
SI
Fig. 5-12.
Diagrama de flujo.
procesamiento por prioridad de
Interrupciones /reset
Bit X,
activado?
NO
Pin XIRQ,
edo. bajo?
SI
NO
SI
Registros CPU Stack
Activa los bits
X, I
Vector de busqueda
$FFF4, FFF5
Bit I,
activado?
NO
Interrupción
pendiente?
SI
NO
Busqueda de Opcode
Registros CPU Stack
Activa el bit “I”
NO
Vector de busqueda
$FFF8, FFF9
Registros CPU Stack
Opcode
legal?
SI
SI
WA 1?
NO
Registros CPU Stack
SI
Activa el bit “I”
SW 1?
Vector busqueda
$FFF6, FFF7
SI
RT 1?
Realmacena
los registros
CPU desde el
Stack
Registros CPU Stack
NO
Interrupción
Todavía
?
Activa el bit “I”
NO
Ejecuta esta
instrucción
Resuelve lnterrupción
de proridad y el vector
busqueda para pendientes
178
DL3155M24HC11
179
DL3155M24HC11
UNIDAD 6
Programación de la tarjeta
DL3155M24HC11
180
DL3155M24HC11
CONTENIDO
DESCRIPCION DE TARJETA
PROGRAMACION DE TARJETA
PROGRAMA DE PRUEBA
181
DL3155M24HC11
6.1 DESCRIPCION DE TARJETA
La tarjeta DL3155M24HC11 esta equipada con el microprocesador 68HC11, el dispositivo
dentro de la evolucion de microcontroladores de mas alta escala de integracion, donde
podriamos decir que solo depende de su programacion para dar solucion a un problema real, y
el minimo de perifericos externos.
A continuacion sé hara mension de todos los elementos con que cuenta la tarjeta:
TARJETA ENTRENADORA PARA MICROCONTROLADOR 68HC11
CARACTERISTICAS
1
MICROCONTROLADOR MC68HC11
MODULO: DE MEMORIA: RAM, EEPROM
MODULO DE COMUNICACIÓN SERIE
MODULO DE TEMPORIZACION Y CONTEO
MODULO DE CONVERSION A/D
MODULO DE INTERRUPCIONES
2
TARJETA ENTRENADORA:
ETAPA PARA MODOS DE TRABAJO SIMPLE Y EXPANDIDO
ETAPA DE RESET PARA MICROCONTROLADOR
ETAPA DE EXPANSION DE MEMORIA (RAM)
TECLADO DE 4X4
DISPLAY LCD DE 16X2
DISPLAY DE 7 SEGMENTOS
BUZZER
ETAPA DE COMUNICACIÓN SERIE A COMPUTADORA CON MAX 232
ETAPA DE VIZUALIZACION POR MEDIO DE LED'S (6 LED'S)
ENTRADA DE DATO POR MEDIO DE BOTONES
CIRCUITO VARIADOR DE VOLTAJE PARA PUERTO A/D
3
MATERIAL DE APOYO DIDACTICO:
A) GUIA TEORICA: EXPLICACION DE MC68HC11,
INSTRUCCIONES Y MANEJO DE LA TARJETA.
B) MANUAL DE PRACTICAS: EXPLICACION DE MANEJO DE
DE PUERTOS HASTA EL CONTROL DE PERIFERICOS
EXTERNOS(INCLUIDOS EN LA TARJETA ENTRENADORA).
182
DL3155M24HC11
6.2 PROGRAMACION DE TARJETA
El microcontrolador contiene un programa (ya cargado dentro del microcontrolador) llamado
BUFFALO, el cual se encarga de controlar todos los recursos internos del microcontrolador,
este sistema operativo contiene una serie de comandos los cuales le permitiran al alumno
realizar acciones en cualquier tipo de aplicación que quiera realizar. Este sistema operativo nos
permite comunicar con otro elemento y en forma particular con la computadora, atraves de la
interfaz de comunicación serie (SCI) bajo. Acontinuacion se mencionanran los camandos con
que cuenta este sistema operativo:
ASM
BF
[Direccion]Enssamblador/Desensamblador
<Direccion inicial><Direccion final><Dato>Llenar un bloque de memoria con el da
datoproporcionado
BR
[-][Direccion] Colocar puntos de ruptura en un programa
BREAK
Realizar la misma funcion de BR
BULK
Este comando permite borrar toda la EEPROM ($B600-$B7FF)
BULKA
Realizar la misma funcion que BULK
BULKALL Este comando permite borrar EEPROM+el registro CONFIG.
CALL
[Direccion]Ejecucion de subrutina
COPY
Realiza la misma funcion que MOVE
DUMP
Realiza la misma funcion que MD
ERASE
Realiza la misma funcion que BULK
FILL
Realiza la misma funcion BF
G
[Direccion]Este comando nos permite ejecutar un programa
GO
Realiza la misma funcion de G.
HELP
Muestra en pantalla los comandos de BUFFALO
HOST
Realiza la misma funcion que TM
LOAD T
Este comando permite la sincronizacion del sistema de desarrollo con la PC
MEMORY Realiza la misma funcion que MM
MD
[Direccion inicial] [Direccion final] Muestra en pantalla el contenido del bloque de
memoria
MM
[Direccion] Modifica contenido de memoria
MOVE
<Direccion inicial> <Direccion final> <Direccion destino> Mueve bloque de memoria
a otro
P
Continuacion de punto de ruptura
PROCEED Realiza la misma funcion que RM
RD
Realiza la misma funcion que RM
READ
Realiza la misma funcion que MOVE
REGISTERRealiza la misma funcion que RM
RM
[p,x,y,a,b,c,s]Modifica registros/muestra en pantalla registros internos del
microcontrolador
STOPAT <Direccion>Paro en la direccion
T[n]
Ejecutar un programa paso a paso
VERF <T> Comparar memoria con el dato bajado via el puerto de comunicación serie
XBOOT
[Direccion inicial][Direccion final] Enviar programa otro 68hc11
?
Realiza la misma funcion que HELP
Lo que se encuentra entre [ ] indica opcional.
183
DL3155M24HC11
Forma de descarga un programa.
Para la descarga de un programa, previamente debe de tenerse el programa con extension
s19. Para esto se deben seguir los siguiente pasos:
A)
B)
C)
D)
E)
Crear una carpeta llamada DL_HC11 en el directorio raiz, y cargar el archivo iasm11.exe
en el con su help correspondiente.
En el programa IASM11.EXE, abrir un programa con extension ASM
(NOMBRE_ARCH.ASM).
Con tecla de funcion F10, ir al submenu ASSEMBLE donde apareceran los archivos que
se crearan (los de extension s19 son los que nos interesan), abajo apareceran más
opciones, como el progama lst, map, etc., el alumno o profesor indicaran que opciones
habilitaran, en este momento la opcion que tiene la extension s19 es la que nos importa.
Teclear ESC hasta que aparezca el menu principal.
Con la tecla de funcion F4, daremos la ejecucion de ensamblado del programa con
extension ASM, en el momento de ensamblado el progama detectara errores de sintaxis
los cuales debera corregir de lo contrario el sistema no podra crear el programa con
extension s19. Los errores quedaran resaltados por programa, para que el usuario pueda
verlos y corregirlos. Si no hay ningun error pasaremos al siguiente punto
Con la tecla de funcion F10, ir al submenu COMMUNICATE entrar al submenu, al
momento de entrar nos daremos cuenta que el menu cuenta con una serie de
parametros, que son las condiciones de debera cumplir el sistema para poder
comunicarse con la PC, estas opciones no son estadanres por lo cual deberan
modificarse algunas para poder sincronicar la comunicación. Las condiciones que
nosotros requerimos son las siguientes:
Comm: 1 o 2 (puerto serie de la computadora comm1 o 2 según el caso)
Baud: 9600
Parity: N
Length: 8
Stop: 1
En este momento, el programa esta listo para comunicarse con la tarjeta.
NOTA: Alimentar y conectar la tarjeta DL3155M24HC11 a la PC
F)
Con la tecla de funcion F7, aparecera una ventana que nos ayudara interactuar con el
microcontrolador y todos sus recursos, en este momento dar un reset, momento en el
cual aparecera un mensaje como este:
BUFFALO(bit user fast friedly aid to logical operations)
>
si damos enter sobre el cursor paraeceran todos los comandos antes mencionados, los
cuales nos ayudaran a descargar el programa con extension s19.
Si el mensaje no aparece, indica que la tarjeta no tiene comunicación con la tarjeta
DL3155M24HC11
Nota importante: Si la tarjeta no responde con los parametros anteriores cambiar a
baud a 4800 dar reset en la tarjeta cambiar nuevamente baud a 9600 y dar reset,
momento en el cual se realizara la comunicación.
184
DL3155M24HC11
6.3 PROGRAMA DE PRUEBA
Acontinuacion se mostrara la forma de descarga de un programa de la PC a la tarjeta. Mediante
un ejemplo de prueba que consiste el manejo de un dato mediante acumuladores:
1) El programa que esta escrito abajo, teclearlo en el edito de ms-dos en el subdirectoria
DL_HC11, despues abrirlo en el editor del IASM11.
;===================================
;DL3155M24HC11 DE DELORENZO ITALY
;
;DESCARGA DE PROGRAMA
;===================================
;TITULO "PRUEBA.ASM"
DIR1
DIR2
INICIO
EQU
EQU
$121 ;DIRECCIONES
$122 ;AUXILIARES
ORG
$0100;ORIGEN DE PROGRAMA
LDAA
STAA
LDAB
INCB
STAB
STOP
#$01 ;ACUMULADOR CARGAR CON 01 HEX
DIR1 ;MANDAR DATO DE ACUMULADOR "A" A DIR1
DIR1 ;CARGAR EL ACUMULADOR "B" CON DATO DE DIR1
;INCREMENTA ACUMULADOR "B"
DIR2 ;MANDAR DATO DE ACUMULADOR "B" A DIR2
;INTERREPCION DEL PROGRAMA
@
Descripcion de simbologia del programa:
El simbolo #$ indica dato hexadecimal directo.
El simbolo $ dato hexadecimal indica direccion.
El simbolo ¡ dato decimal indica direccion.
El simbolo % dato binario indica direccion.
DIR1 y DIR2 son dos etiquetas, que representan las direcciones de memoria RAM 121Hex y
122Hex.
ORG indica desde donde empezara a correr el programa en este caso desde la 100Hex.
Los datos debajo de org son nemonicos que corresponden al conjunto de instrucciones del
68hc11, especificamente la columna que tiene el simbolo @.
Para mas informacion, ver la ayuda del programa IASM11.
185
DL3155M24HC11
2) Despues de teclearlo, ir al submenu assembler habilitar la opcion listing, para obtener el
programa listado, inmediatamente despues salir al menu principal y oprimir la tecla F4, no
debera aparecer ningun mensaje de error, si es asi checar el programa. Cuando no
tengamos algun mensaje de error, ver con cualquier procesador de texto el programa lst
creado por el programa, en este caso veremos lo siguiente:
PRUEBA.ASM
0000
0000
0100
0100
0102
0105
0108
0109
010C
COL1
DIR1
DIR2
INICIO
8601
B70121
F60121
5C
F70122
CF
COL2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;===================================
;DL3155M24HC11 DE DELORENZO ITALY
;
;DESCARGA DE PROGRAMA
;===================================
;TITULO "PRUEBA.ASM"
DIR1
DIR2
INICIO
COL3
EQU
EQU
$121 ;DIRECCIONES
$122 ;AUXILIARES
REN1
ORG
$0100;ORIGEN DE PROGRAMA
REN2
LDAA
STAA
LDAB
INCB
STAB
STOP
#$01 ;ACUMULADOR CARGAR CON 01 HEX
DIR1 ;MANDAR DATO DE ACUMULADOR "A" A DIR1
DIR1 ;CARGAR EL ACUMULADOR "B" CON DATO DE DIR1
;INCREMENTA ACUMULADOR "B"
DIR2 ;MANDAR DATO DE ACUMULADOR "B" A DIR2
;INTERREPCION DEL PROGRAMA
COL4
0121
0122
0100
186
DL3155M24HC11
En la COL1 aparecen los direcciones , a las cuales corresponde cada uno de los
nemonicos con sus respectivas etiquetas.
Por ejemplo el nemonico:
LDAA se encuentra en la direccion 100Hex
Y
INCB se encuentra en la direccion 108Hex
En la COL2 aparecen los codigos de los nemonicos, asi como los valores correspondientes
de sus variantes que se estan usando
Por ejemplo:
En la instrucción
STAA DIR1:
STAA CODIGO ES B7 Hex
DIR1 CODIGO ES 0121 Hex
En la instrucción
LDAB DIR1:
LDAB CODIGO ES f6 Hex
DIR1 CODIGO ES 0121 Hex
En la COL3 apareceran las etiquetas que correspondan al inicio o para denotar alguna
subrutina, en este caso solo aparece INICIO.
En la COL4 aparece todos los nemonicos con sus etiquetas
En el REL1 aparece el valor que se le asignan a las etiquetas usadas en el programa
En el REL2 aparece el origen del cual empezara a correr el programa cargado
NOTA: En este momento conectamos la tarjeta DL3155M24HC11 a la PC
3) Despues de ensamblar el programa pulsamos la tecla de funcion F10 y colocamos los
valores para poder comunicarnos a la PC, estos valores son:
Comm: 1 o 2 (puerto serie de la computadora comm1 o 2 según el caso)
Baud: 9600
Parity: N
Length: 8
Stop: 1
4) Con la tecla de funcion F7, aparecera una ventana que nos ayudara interactuar con el
microcontrolador y todos sus recursos, en este momento dar un reset, momento en el cual
aparecera un mensaje como este:
BUFFALO (bit user fast friedly aid to logical operations)
>
Si el mensaje no aparece, indica que la tarjeta no tiene comunicación con la tarjeta
DL3155M24HC11
187
DL3155M24HC11
Nota importante: Si la tarjeta no responde con los parametros anteriores cambiar a
baud a 4800 dar reset en la tarjeta cambiar nuevamente baud a 9600 y dar reset,
momento en el cual se realizara la comunicación.
4) Estando en el cursor > realizar lo siguiente:
LOAD T ↵ (inmediatamente despues oprimir la tecla de funcion F6 aprecera lo siguiente)
File to download:_
Escribir adelante del cursor nombre_archivo.s19 ↵
Aparecera lo siguiente:
S11001008601B70121F601215CF70122CF31
S9030000FC
Done
>_
Escribir delante de >_MD 100 ↵
Aparecera los siguiente:
100
110
120
86
FF
FF
01
FF
FF
B7
FF
FF
01
FF
FF
21
FF
FF
F6
FF
FF
01
FF
FF
21
FF
FF
5C
FF
FF
F7
FF
FF
01
FF
FF
22
FF
FF
CF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
Esto indica como esta gragado el programa en la meoria interna del 68hc11, nuestro origen
si nos damos cuenta esta en 100 Hex.
5) Para correr el programa hay dos formas corrida completa o paso a paso
a)
Corrida completa, escribir lo siguiente, delante del cursor::
>_G 100 ↵
empezara a correr el programa (detener el programa con reset), si nos damos
cuenta no podemos ver nada
b)
Paso a paso:
Unir los puntos XIRQ y PA3 con un cable.
En el cursor colocar lo siguiente:
>_RM
↵ (nos muestra los registros, acumuladores, contador de
programa, aparecera lo siguiente).
P-FFFF Y-FFFF X-FFFF A-FF B-FF C-xx S-xxxx
P-FFFF_
Delante del cursor de P-FFF_ escribir 100 y dar ↵
100 es la direccion de comienzo del programa inmediatamente despues
aparecera el cursor >
En el cursor escribira la letra T dando, ↵ dando asi a correr la primera
instrucción, para la segunda T ↵ y hasta la ultima hacer el mismo metodo,
y observara los cambios que pasan en los registros y memoria.
188
DL3155M24HC11
6) Para ver que sucede en la memoria hacer lo siguiente:
En el cursor >_ escribir lo siguiente:
>_MD 100 130 ↵
En este momento el programa desplegara los datos contenidos en lamemoria de 100 Hex
hasta 13F Hex.
7) Inmediatamente despues seguir con el paso (5), asi hasta llegar la final del programa, esto
si es ejecutado el programa paso a paso.
189
Descargar