• No se han encontrado resultados

STOP, TAP,TPA, TSX, TXS

In document 208006 Sistemas Embebidos I-2010 (página 62-71)

A lo largo del curso se explicarán la sintaxis y funcionalidad de algunas de las instrucciones a manera de ejemplo, es tarea del estudiante buscar en las hojas de datos y en documentos de la red la manera de utilizar las demás instrucciones para conocer su funcionalidad y que tenga las bases adecuadas en caso de que requiera utilizarlas de forma óptima en sus prácticas. El manual de referencia de la CPU HC08 detalla claramente cada una de las instrucciones que soporta, otra buena opción es el “Juego de instrucciones del HC08” [19] con explicación detallada, sintaxis y ejemplos de programación.

7. Modelo de programación.

El modelo de programación de la CPU del HC08 es similar al de su predecesor el 68HC05 agregando algunas mejoras (ver figura 24), también este modelo es común a toda la familia independientemente de la cantidad de recursos que posea un dispositivo determinado.

A continuación se explica el uso de cada uno de los registros del la figura 24: Acumulador (A): es un registro de 8 bit de propósito general empleado por la CPU para mantener operandos y resultados de operaciones aritméticas y lógicas. Registro Índice (H:X): es un registro de 16 bits empleado para los modos de direccionamiento indexados en el espacio de memoria de 64 Kb de la CPU, también puede ser utilizado como acumulador auxiliar. Se diferencia la parte alta o byte de de mayor peso (H) de la parte baja o byte de menor peso (X) puesto que existen diferentes comandos y operaciones para manipular cada una. En las instrucciones indexadas, el registro X provee un valor de 8 bits que es sumado a la dirección base provista por la instrucción para crear una dirección efectiva. El valor provisto por la instrucción puede ser de 0, 1 ó 2 bytes de largo.

Apuntador de Pila o Stack Pointer (SP): es un registro de 16 bits que contiene la dirección de la RAM referida a la posición libre de la pila del sistema (stack) mas adelante de ahondara en éste. Después de resetear el sistema el SP es cargado con un valor de $00FF. Cuando un dato es almacenado en la pila, la dirección del registro SP es decrementa, caso contrario ocurre cuando se toma un dato de la pila. El SP siempre apunta a una posición libre de la RAM.

Contador de Programa (PC): Es un registro de 16 bits que contiene la dirección de la siguiente instrucción a ser ejecutada, normalmente la dirección contenida en el PC se incrementa automáticamente cada vez que se busca una instrucción en memoria, a excepción de casos como saltos absolutos o relativos, condicional, incondicional o subrutina, en los que se carga en el PC la dirección donde el flujo de programa debe continuar su ejecución. Durante el Reset, el contador de programa (PC) se carga con la dirección contenida en el "Reset Vector" que para el MC68HC908 se encuentra en la posición $FFFE y $FFFF. La dirección

contenida en el vector, es la dirección de la primera instrucción a ser ejecutada después de salir del estado de RESET.

Registro de Código de Condición (CCR): también conocido registro de estado de la CPU, es un registro de 8 bits que contiene una máscara de interrupciones y además almacena 5 indicadores de estado que reflejan el resultado de alguna operación previa hecha por la CPU. Algunas instrucciones usan a los bits de estado para tomar decisiones simples dependiendo de su estado.

Las banderas de este registro se pueden apreciar de la figura 24 y son:

Bit de Desbordamiento u Overflow (V): Bandera que indica el desbordamiento en complemento a dos del resultado de la última operación mediante un „1‟ lógico. Bit de Acarreo Medio (H): Esta bandera es empleada en operaciones aritméticas con números decimales codificados en binario o BCD y es afectada por las operaciones suma ADD o ADE. El bit H se pone en „1‟ cuando se produce un acarreo del dígito hexadecimal de menos peso en los bits 3-0 al dígito de más peso en bits 7-4. Luego de la suma binaria de dos valores de 2 dígitos BCD, este bit de semi-acarreo es parte de la información necesaria para volver el resultado a un valor BCD válido.

Bit de Máscara de Interrupción (I): Este bit no es una bandera de estado, es un bit de máscara de interrupción que deshabilita todas las fuentes de interrupción enmascarables cuando el bit I está en uno. Las interrupciones están habilitadas cuando este bit está en cero. Cuando cualquier interrupción ocurre, el bit I pasa automáticamente a uno luego de haber salvado los diferentes registros en la pila, pero antes el vector de interrupción es buscado. Si una interrupción interna ocurre mientras el bit I está en uno, la interrupción es almacenada y procesada luego que el bit I se ponga en cero; de esta manera, no se pierde ninguna interrupción (IRQ) que se presente cuando el bit está en uno. Luego de haber atendido a una interrupción, la instrucción retorno desde una interrupción (RTI) provocará que los registros recuperen sus valores previos. Normalmente, el bit I permanecería en cero luego que fuese ejecutada la instrucción RTI. Luego de cualquier reset, el bit I estará en uno y sólo podrá llevárselo a cero por medio de una instrucción.

Bit de Negativo (N): El bit N se pone en „1‟ cuando el resultado de la última operación aritmética, lógica o de manipulación de datos es negativo. Para los valores signados según la convención de complemento a dos, se considera que un número es negativo si el bit más significativo es un uno.

El bit de Cero (Z): El bit Z se pone en „1‟ cuando el resultado de la última operación aritmética, lógica o de manipulación de datos es cero. Una operación de

comparación resta un valor desde la posición de memoria que está siendo evaluada. Si los valores son iguales antes de la comparación, el bit Z se pondrá en uno.

Bit de Acarreo/Préstamo (C): El bit C es usado para indicar si ha habido o no acarreo de una suma o pedido de préstamo como resultado de una resta. Las instrucciones de desplazamiento y rotación operan sobre y a través del bit C para facilitar operaciones de desplazamiento de múltiples bytes. El bit C es además afectado durante las instrucciones de evaluación de bit y de bifurcación.

8. Modos de direccionamiento.

La velocidad de cualquier sistema computacional radica en la habilidad de dicho sistema para acceder datos e instrucciones en la memoria, esta capacidad la brindan los diferentes modos de direccionamiento aprendidos. Cada variante de los modos de direccionamiento debe tener un único código de operación (op-code) de instrucción. A continuación se presentan los diferentes modos de direccionamiento básicos con su correspondiente ejemplo para aclarar su funcionamiento:

- Inherente: este tipo de instrucciones no tienen operando puesto que éste se define en el op-code de 8 bits. Por ejemplo si se quiere borrar el acumulador se emplea la instrucción CLRA, que es una instrucción de un solo ciclo para el HC08.

- Inmediato: las instrucciones que manejan direccionamiento inmediato tienen dos operandos que siguen inmediatamente al op-code de 8 o 16 bits. Por ejemplo la instrucción LDA #20 es una instrucción de 2 bytes que carga el acumulador con el número 20 en dos siclos de reloj.

- Directo; éstas no poseen la dirección de 8 bits del operando que sigue inmediatamente al op-code, por lo tanto acceden directamente a los primeros 256 bytes de la memoria (página directa o página cero). Por ejemplo la instrucción LDA $40 carga el acumulador con el dato almacenado en la posición número 40 de la memoria, es una instrucción de dos bytes y se ejecuta en tres ciclos de reloj.

- Extendido: éstas proporcionan direccionamiento absoluto a cualquier posición de los 64Kb del mapa de memoria sin paginar, el op-code requiere tres bytes mas dos de la dirección del operando. Ejemplo LDA $4000.

- Relativo: es empleado por las instrucciones de bifurcación condicional, si la condición de bifurcación es verdad el controlador de programa se agrega al byte con signo que sigue inmediatamente al op-code de bifurcación obteniéndose un rango de bifurcación de -128 a +127 bytes, la

instrucciones de salto o salto a subrutina se pueden usar para mover el contador de programa a cualquier posición del mapa de memoria. Ejemplo BIL LOOP.

- Indexado: este tipo de direccionamiento es clave para direccionar tablas y estructuras similares de datos de manera eficiente, los modos básicos para el direccionamiento indexado son: indexado sin offset por ejemplo LDA ,X, indexado con offset de 8 bits, por ejemplo LDA $40,X e indexado con offset de 16 bits, ejemplo LDA $4000,X. El indexado sin offset se conoce en la mayoría de arquitecturas como el direccionamiento del puntero indirecto. Hasta ahora estos modos de direccionamiento son compartidos por las familias 05 y 08 a continuación se presentan los modos agregados para la familia HC08:

- Indexado: puede ser sin offset con incremento posterior o con offset de 8 bits con decremento posterior, son modos de direccionamiento indexado con post-incremento automático del puntero de índice, por ejemplo:

o Indexado sin offset con incremento posterior: CBEQ X+, Label.

o Indexado con offset de 8 bits con incremento posterior: CBEQ $50,X+, Label.

- Stack Pointer: es un tipo de direccionamiento relativo del puntero de pila, puede ser con offset de 8 bits o con offset de 16 bits. Su trabajo es similar al modo indexado pero empleando el Stack Pointer en lugar del registro índice, Por ejemplo:

o Stack Pointer con offset de 8 bits: STA $10,SP. o Stack Pointer con offset de 16 bits: STA $1000,SP.

- Mover de Memoria a Memoria: Para este fin se emplea el comando MOV para mover los datos directamente sin emplear el acumulador, existen diferentes formas en las que se puede ejecutar esta instrucción dependiendo del modo de origen y el modo de destino:

o Inmediato a directo, por ejemplo: MOV #20,$40

o Indexado a directo con incremento posterior, por ejemplo: MOV X+, SCDR

o Directo a indexado con incremento posterior, por ejemplo: MOV SCDR, X+

Se puede tomar por ejemplo la instrucción ADD, ésta toma un operando de memoria y lo suma con el valor del registro A. En la Tabla 4 se observa que para diferentes modos de direccionamiento el código de operación es diferente. Siempre, en un código de máquina, el primer (o primeros) byte es el código de operación, seguido de los bytes complementarios como información para el modo de direccionamiento empleado:

Tabla 4. Ejemplo de diferentes modos de direccionamiento con el comando ADD

Instrucción Modo de

direccionamiento

OpCode Adición Código de

Máquina

ADD #$45 Inmediato AB 1 AB45

ADD $50 Directo BB 1 BB50

ADD $FE00 Extendido CB 2 CBFE00

ADD ,X Indexado FB 0 FB

ADD $45,X Indexado, offset 8 bits EB 1 EB45 ADD $79F4,X Indexado, offset 16 bits DB 2 DB79F4

ADD $30,SP StackPointer, offset 8 bits 9EEB 1 9EEB30 ADD

$A47B,SP

StackPointer, offset 16 bits

9EDB 2 9EDBA47B

En la “Guía Didáctica del 68HC08” [20] que se encuentra en Internet (en español) se pueden encontrar diferentes ejemplos de implementación de los modos de direccionamiento con su correspondiente explicación detallada.

9. Reset, fuentes de interrupción y enmascaramiento.

La CPU del microcontrolador ejecuta instrucciones de manera secuencial, sin embargo, en muchas aplicaciones es necesario ejecutar un conjunto de instrucciones en respuesta a una petición hecha por algún periférico, la cual, normalmente se hace de manera asíncrona con el programa que se esté ejecutando. El Reset y las interrupciones son excepciones propias de la CPU08. Al conjunto de instrucciones que se deben ejecutar en respuesta a una petición de este tipo se denomina subrutina de atención a la excepción, la cual es llamada por la CPU después de detectar la excepción o evento.

El reset es un mecanismo empleado para forzar al sistema del microcontrolador a ir a un punto de partida conocido (dirección de memoria) de igual manera los dispositivos de entrada y salida y en general todos los periféricos de un sistema pasan a un estado inicial después de un reset.

Las siguientes acciones internas ocurren como resultado de cualquier reset del MCU:

1) Todos los registros de dirección de datos se colocan en cero (como entradas).

2) El puntero a la pila (SP) es forzado a $00FF.

3) El bit I del CCR se pone en uno inhibiendo a las interrupciones enmascarables.

4) El latch de interrupciones externas es borrado. 5) El latch de STOP es borrado.

6) El latch de WAIT es borrado.

Cuando el sistema de computadora sale de reset, el contador de programa se carga con el contenido de las posiciones de memoria más altas; el valor que se encuentra en la segunda más alta se carga en el byte más significativo del PC y el valor que se encuentra en la mas alta se carga en el byte menos significativo del PC. Esto se denomina “búsqueda del vector de reset”.

En este punto la CPU comenzará la búsqueda y ejecución de instrucciones, comenzando por la dirección almacenada en el vector de reset.

Las siguientes condiciones pueden causar que el MCO se resetee:

Externamente, una señal de entrada activa baja en el pin RESET.

Internamente, al encender la fuente de alimentación (POR: Power On Reset).

 Internamente, expiración de tiempo del cronómetro de vigilancia del comportamiento apropiado de la computadora (COP: Computer Operating Properly o Watchdog Timed Out).

 Un intento de ejecutar una instrucción desde una dirección ilegal. 9.1. Pin de Reset.

Un pulsador o un circuito externo pueden conectarse a este pin para permitir el reset manual del sistema.

El reset al encender la fuente de alimentación ocurre al detectarse una transición positiva sobre VDD. Su uso es estrictamente para la condición de encendido y no podrá utilizarse para detectar caídas de la tensión de la fuente de alimentación. Podrá usarse un circuito inhibidor de baja tensión (LVI) para detectar caídas de la fuente.

El circuito de power-on provee una demora de 4064 ciclos desde el momento en que el oscilador se ha activado. Si el pin de /RESET exterior permanece en bajo al expirar el tiempo de los 4064 ciclos de demora, el procesador permanecerá en la condición de reset hasta que /RESET se coloque en alto.

9.3. Reset por Watchdog Timer.

El sistema de cronómetro de vigilancia del comportamiento apropiado de la computadora (COP) se propone detectar errores de programas. Cuando se activa el COP es responsabilidad del programa evitar que un cronómetro de vigilancia que corre libremente llegue al final de su cuenta. Si llega a completar su cuenta, sería una indicación de que el programa no ha sido ejecutado por un largo período de tiempo en la secuencia deseada; entonces se inicia el reset del sistema.

Un bit de control del registro (no volátil) máscara de opciones (MOR) puede usarse para habilitar o deshabilitar el reset del COP. Si el COP es habilitado, la adecuada operación del programa debe periódicamente escribir un cero en el bit COPC del registro de control COPR.

9.4. Reset por Acceso a Dirección Ilegal.

Si el programa es escrito incorrectamente, es posible que la CPU intente saltar o bifurcar a una dirección en la que no haya memoria. Si esto sucede, la CPU podría continuar leyendo datos (resultando ser valores impredecibles) e intentaría actuar en consecuencia si se tratase de programa. Estas instrucciones sin sentido pueden provocar que la CPU escriba datos inesperados en memoria o registros diseccionados inesperados. Esta situación se llama desbocamiento.

El MCU posee un circuito detector de direcciones ilegales para evitar la condición de desbocamiento. Si la CPU trata de buscar una instrucción de una dirección que no pertenece a la EPROM ($0300 - $07CF, $07F0 - $07FF), ni a la ROM de prueba interna ($07EE - $07EF), se genera un reset que obliga al programa a comenzar nuevamente.

Son a veces usadas para interrumpir el procesamiento normal para responder a algún evento inusual. El MCU puede ser interrumpido por las siguientes fuentes de interrupción:

Un „0‟ lógico aplicado al pin de interrupción externa (IRQ).

 Un „0‟ lógico aplicado a cualquier pin PA3 - PA0 (si la función del puerto de interrupción es habilitada).

Un pedido de desborde (overflow TOF) o interrupción de tiempo real (RTIF) desde el sistema de temporización por programa (SWI).

La instrucción de interrupción por programa (SWI).

Si una interrupción se produce mientras la CPU está ejecutando una instrucción, ésta será completada antes que la CPU responda al pedido de interrupción. Las interrupciones pueden ser inhibidas en conjunto poniendo un uno en el bit I del CCR o bien individualmente, poniendo ceros en los bits de control de habilitación de cada fuente de interrupción. El reset fuerza el bit I a uno y a cero a todos los bits de habilitación de interrupciones locales a fin de prevenir interrupciones durante el proceso de inicialización. Cuando el bit I está en uno, ninguna interrupción (excepto SWI) es reconocida. Aunque pueda registrarse a la fuente de interrupción su pedido no será atendido hasta que el bit I se ponga en cero.

9.6. Interrupciones Externas.

Las interrupciones externas proceden del pin IRQ o de los bits 3 - 0 del port A, si el puerto A se ha configurado como puerto de interrupciones. La sensibilidad del pin IRQ es programable. Disponemos de disparo sólo sensible a un flanco o bien sensible a flanco descendente y nivel. Se emplea un bit del registro máscara de opciones (MOR) para configurar la sensibilidad del pin IRQ. El pin IRQ es activo bajo y las interrupciones del puerto A son activas en alto.

Los microcontroladores a veces incluyen sistemas periféricos dentro de su mismo chip que pueden generar interrupciones a la CPU. El sistema de temporización del MCU es un ejemplo de este tipo de periféricos. Las interrupciones internas trabajan del mismo modo que las externas excepto por que hay vectores de interrupción separados para cada sistema periférico incluido en el circuito integrado.

9.7. Interrupciones por Programa (SWI).

La interrupción por programa es una instrucción ejecutable. La acción de la instrucción SWI es similar a la de una interrupción (bit I) del CCR.

A continuación se presenta una tabla con el resumen de las características eléctricas absolutas del los MCOs de la familia HC08, para información detallada y específica de las características eléctricas y térmicas de estos dispositivos, remitirse a la hoja de datos (data-sheet) del dispositivo de interés.

Tabla 5: Características Máximas de los dispositivos de la familia HC08.

Característica Símbolo Valor Unidad

Fuente de Voltaje VDD -0.3 a 6.0 V

Voltaje de Entrada

Todos los pines (excepto IRQ1)

Pin de IRQ1

VIN VSS -0.3 a VDD +0.3

VSS -0.3 a 8.5

V

Corriente Máxima por Pin (Excepto VDD y VSS)

I 25 mA

Corriente Máxima de Salida para VSS

IMVSS 100 mA

Corriente Máxima de Salida para VDD

IMVDD 100 mA

Temperatura de

Almacenamiento

TSTG -55 a 150 °C

In document 208006 Sistemas Embebidos I-2010 (página 62-71)