microcontroladores_hc08

22
Circuitos Digitales III Revisión de los Microcontroladores HC08 de Freescale Revisión 0.02 Luis Germán García M. INTRODUCCIÓN Este documento introduce al estudiante en el mundo de los microcontroladores familia HC08 de Freescale Semiconductors, indicando como es el funcionamiento interno, el modelo de programación, los modos de direccionamiento y el conjunto de instrucciones. Al finalizar, cada persona, junto con las charlas presenciales, estará en capacidad de diseñar  programas para esta familia de MCUs. MICROCONTROLADORES Un microcontrolador es un dispositivo electrónico que incluye las tres unidades funcionales de un computador: CPU, memoria y unidades de entrada y salida. Normalmente, un microcontrolador se considera como un computador integrado en un solo chip pero con unas prestaciones bastante reducidas, siendo éste optimizado para una aplicación específica. Este dispositivo se utiliza como unidad de control en un gran número de aparatos electrónicos tales como T.V., lavadoras, neveras, reproductores de mp3/CD, equipos de sonido, pantallas LCD, equipos médicos, celulares, entre otros. Un procesador tradicional depende de otros circuitos integrados para la realización de diversas tareas, siendo simplemente la unidad central de proceso la que controla o gobierna todo el sistema, siendo además de propósito general. Un microcontrolador incluye, adicional a la CPU, una pequeña cantidad de memoria y una serie de periféricos de E/S,  pudiéndose construir un dispositivo electrónico con él, junto con unos cuantos elementos adicionales, obviamente para una aplicación específica. Los componentes típicos de un MCU son:  Unidad central de procesamiento o CPU. Normalmente con unas prestaciones muy reducidas a las de un procesador tradicional.  Memoria tanto de programa como de datos. La cantidad es bastante reducida, lo suficiente para manejar una aplicación específica. Se incluye memoria RAM, OTP, EPROM, EEPROM y FLASH.  Generador de reloj para el funcionamiento y sincronía de todo el MCU.  Periféricos de E/S tales como: o Puertos de Entrada/Salida.

Upload: kkkkkkkkkkkk

Post on 14-Oct-2015

9 views

Category:

Documents


0 download

TRANSCRIPT

  • Circuitos Digitales III Revisin de los Microcontroladores HC08 de Freescale

    Revisin 0.02

    Luis Germn Garca M. INTRODUCCIN Este documento introduce al estudiante en el mundo de los microcontroladores familia HC08 de Freescale Semiconductors, indicando como es el funcionamiento interno, el modelo de programacin, los modos de direccionamiento y el conjunto de instrucciones. Al finalizar, cada persona, junto con las charlas presenciales, estar en capacidad de disear programas para esta familia de MCUs. MICROCONTROLADORES Un microcontrolador es un dispositivo electrnico que incluye las tres unidades funcionales de un computador: CPU, memoria y unidades de entrada y salida. Normalmente, un microcontrolador se considera como un computador integrado en un solo chip pero con unas prestaciones bastante reducidas, siendo ste optimizado para una aplicacin especfica. Este dispositivo se utiliza como unidad de control en un gran nmero de aparatos electrnicos tales como T.V., lavadoras, neveras, reproductores de mp3/CD, equipos de sonido, pantallas LCD, equipos mdicos, celulares, entre otros. Un procesador tradicional depende de otros circuitos integrados para la realizacin de diversas tareas, siendo simplemente la unidad central de proceso la que controla o gobierna todo el sistema, siendo adems de propsito general. Un microcontrolador incluye, adicional a la CPU, una pequea cantidad de memoria y una serie de perifricos de E/S, pudindose construir un dispositivo electrnico con l, junto con unos cuantos elementos adicionales, obviamente para una aplicacin especfica. Los componentes tpicos de un MCU son: Unidad central de procesamiento o CPU. Normalmente con unas prestaciones muy

    reducidas a las de un procesador tradicional. Memoria tanto de programa como de datos. La cantidad es bastante reducida, lo

    suficiente para manejar una aplicacin especfica. Se incluye memoria RAM, OTP, EPROM, EEPROM y FLASH.

    Generador de reloj para el funcionamiento y sincrona de todo el MCU. Perifricos de E/S tales como:

    o Puertos de Entrada/Salida.

  • o Interrupciones externas. o Conversores A/D y D/A. o Generadores de base de tiempo. o Comunicacin serial mediante UARTs, SPI, I2C, USB, CAN, LIN. o Temporizadores de propsito especfico, captura de eventos y generadores de seal

    PWM. o Controladores de LCD grficos y de caracteres. o Otros perifricos.

    Normalmente, los fabricantes disean diferentes familias de MCUs, cada una especializada en una aplicacin diferente. Existen muchos fabricantes de MCUs en el mundo, a continuacin se indican algunas de ellas con las diferentes familias. ATMEL AVR Intel 8 y 16 bits 8XC42 MCS96 Microchip. Fabricante de los famosos PICs, los cuales ofrecen buenas prestaciones a un precio bajo. Gama baja 12Cxx de 12 bits Gama media 12Fxx, 16Cxx y 16Fxx de 14 bits Gama alta 18Cxx y 18Fxx de 16 bits Motorola, ahora Freescale 8 bits: 68HC05, 68HC08, 68HC11 16 bits: 68HC12, 9S12, 9S12X, 68HC16 32 bits: MCUs ColdFire v3 ARQUITECTURA HC08 Todos los microcontroladores HC08 incluyen como unidad central de procesamiento la CPU08, la cual tiene un modelo de programacin bien definido y un conjunto de instrucciones para su manipulacin. La diferencia entre un MCU HC08 y otro radica en los perifricos que posee y la cantidad de memoria. Caractersticas de la CPU08 Compatibilidad con la familia HC05.

  • Apuntador de pila (SP) de 16 bits con instrucciones para su manipulacin. Registro ndice (H:X) de 16 bits con instrucciones para manipular tanto la parte alta

    como la parte baja. Frecuencia de bus mxima de 8 MHz. Espacio de memoria para programa/datos de 64 kbytes. 16 modos de direccionamiento. Movimiento de datos memoria a memoria (pgina cero) sin usar el acumulador. Multiplicacin de 8-bit por 8-bit y divisin de 16-bit por 8-bit. Manejo de aritmtica BCD. Modelo de Programacin

    Acumulador (A): Registro de 8 bits de propsito general usado por la CPU para mantener operandos y resultados de operaciones aritmticas y no aritmticas. ndice (H:X): Registro de 16 bits utilizado para indexar o direccionar el espacio de memoria de 64 kbytes de la CPU. La parte alta del registro se llama H y la parte baja se llama X y existen instrucciones para la manipulacin de cada uno de ellos. Apuntador de pila (SP): Registro de 16 bits que contiene la direccin de la RAM referida a la posicin libre del Stack del Sistema. Despus de un RESET, el SP es llevado a $00FF para mantener compatibilidad con la familia HC05. La direccin del SP se decrementa cuando un dato es almacenado en el Stack, mientras que si un dato es tomado desde all entonces la direccin del SP se incrementa. El SP siempre apunta a una direccin de memoria vaca y deber moverse dentro de la memoria RAM de la CPU.

  • Contador de programa (PC): Registro de 16 bits que contiene la direccin de la siguiente instruccin a ser ejecutada. Normalmente, la direccin contenida en el PC se incrementa automticamente cada que una instruccin u operando es buscado, sin embargo, una instruccin de salto absoluto o relativo, de subrutina o de interrupcin, cargan en el PC la direccin donde el PC debe saltar. Cdigos de condicin (CCR): Registro de 8 bits que contiene la mscara global de interrupcin adems de cinco banderas que indican el resultado de la instruccin que se acaba de ejecutar. Para esta familia, puede denominarse el registro de estado de la CPU. Las banderas son: Overflow: Esta bandera se pone en 1 cuando el resultado de la ltima operacin ha

    arrojado un overflow en complemento a dos. Acarreo intermedio: Esta bandera se pone en 1 cuando ocurre un acarreo entre los bits

    3 y 4 del acumulador en una operacin ADD o ADC. til para operaciones aritmticas BCD.

    Negativo: Esta bandera se pone en 1 cuando una operacin aritmtica o lgica arroja un resultado negativo.

    Cero: Esta bandera se pone en 1 cuando una operacin aritmtica o lgica arroja un resultado igual a 0.

    Acarreo/Prestado: Esta bandera se pone en 1 cuando una operacin de adicin produce un acarreo del bit 7 del acumulador o cuando una operacin de substraccin requiere de prstamo.

    Mscara de interrupcin: Cuando I est en 1, todas las interrupciones enmascarables quedan deshabilitadas (mscara puesta), en caso contrario quedan habilitadas.

    Funcionamiento interno de la CPU La CPU08 bsicamente est dividida en dos bloques principales: Unidad de Control y Unidad de Ejecucin. La primera contiene una mquina de estados finita con lgica de sincronizacin y control. Las salidas de sta controlan la segunda unidad, la cual contiene una ALU, registros e interfaz al bus de direcciones/datos. Internamente, la CPU utiliza cuatro fases de reloj para conformar lo que se denomina un ciclo de ejecucin de la CPU o simplemente ciclo de bus, el cual tiene un periodo igual al periodo de la frecuencia del bus, siendo 4 veces el periodo del cristal/oscilador externo. La frecuencia de bus es la frecuencia del cristal, oscilador externo o salida del mdulo PLL dividido por 4.

    4444_1 _ CGMVCLKffCGMXCLKff

    BusCicloPLLMODULO

    BUSEXT

    BUS =====

    Internamente los MCUs tienen un mdulo encargado de generar/manipular la seal de reloj.

  • CGMXCLK hace referencia a la frecuencia de entrada al mdulo, la cual proviene directamente del oscilador/cristal externo. CGMVCLK es la frecuencia generada por el mdulo PLL en los MCUs que disponen de l. Consideraciones sobre la pila de la CPU08 La pila del sistema es una zona de memoria RAM direccionada por el apuntador de pila o SP, la cual sirve para almacenar informacin temporalmente. El SP siempre est apuntando a una direccin limpia de la pila o stack. La CPU utiliza la pila para: Almacenar el contenido del PC cuando se hace un llamado a subrutina (BSR o JSR) con

    el fin de poder retornar cuando ella finalice, es decir, cuando se encuentre la instruccin RTS (Return of Subrutine).

    Almacenar el contenido del PC y varios de los registros del modelo de programacin cuando se produce una interrupcin de manera que se pueda retomar la ejecucin del programa en donde esta se present. La finalizacin de una subrutina de atencin a interrupcin se da cuando se ejecuta la instruccin RTI (Return of Interrupt).

    Adicionalmente, el programador utiliza la pila para: Almacenar informacin temporal cuando est realizando operaciones aritmticas. Enviar parmetros a las subrutinas. Retornar parmetros desde una subrutina. La CPU08 ofrece un conjunto de instrucciones que permiten manipular el apuntador de pila SP con el fin de poder colocar/tomar datos en/desde la pila, incluso, el programador en cualquier momento podr reubicar la posicin del SP haciendo uso de la instruccin txs (transferir H:X a SP). Por compatibilidad con la familia HC05 el apuntador de pila arranca en la direccin de memoria $00FF. La pila en la CPU08 trabaja como una memoria LIFO (ltimo en entrar primero en salir) siendo necesario tener presente este concepto a todo momento. Ejemplo sobre el funcionamiento del apuntador de pila Para comprender mejor el funcionamiento de la pila o Stack vea el siguiente ejemplo: Teniendo a SP con el valor $00FF, se hace uso de la instruccin BSR para llamar la subrutina ANY, dicha subrutina al comienzo guarda en la pila el valor del registro A, debido a que necesita operar con este registro de manera temporal y no quiere afectar el valor que previamente tiene. Al finalizar, antes de la instruccin RTS, se restaura el valor de A desde la pila. Observe como el SP va cambiando en cada caso.

  • XX$00FEVaco (Empty)$00FF

    Valor de 8 bitsDireccinXX$00FE

    Vaco (Empty)$00FF

    Valor de 8 bitsDireccin

    SP

    Antes del llamado a la subrutina ANY usando bsr

    Vaco (Empty)$00FDPCH$00FEPCL$00FF

    Valor de 8 bitsDireccinVaco (Empty)$00FD

    PCH$00FEPCL$00FF

    Valor de 8 bitsDireccinSP Despus de la instruccin BSR. Se almacena el valor del

    PC donde se debe retornar

    Vaco (Empty)$00FCRegistro A$00FD

    PCH$00FE

    Valor de 8 bitsDireccinVaco (Empty)$00FC

    Registro A$00FDPCH$00FE

    Valor de 8 bitsDireccinSP Despus de ejecutar la instruccin PSHA dentro de la

    subrutina ANY

    XX$00FCVaco (Empty)$00FD

    PCH$00FE

    Valor de 8 bitsDireccinXX$00FC

    Vaco (Empty)$00FDPCH$00FE

    Valor de 8 bitsDireccin

    SP

    Despus de ejecutar la instruccin PULA dentro de la subrutina ANY

    XX$00FEVaco (Empty)$00FF

    Valor de 8 bitsDireccinXX$00FE

    Vaco (Empty)$00FF

    Valor de 8 bitsDireccin

    SP

    Despus de ejecutar la instruccin RTS desde ANY para retornar

    Cada que se almacena un valor en la pila, el SP se decrementa en una unidad mientras que cuando se toma un valor de la pila, el SP se incrementa en una unidad. Piense por ejemplo, que pasara si la subrutina no recupera el valor de A antes de la instruccin RTS, obviamente el valor que se cargar en el PC no ser igual a PC = PCH:PCL si no PC = A:PCH, lo cual llevar a una ejecucin incorrecta. Algunas veces los registros que se almacenan en la pila no se necesitan restaurar, en este caso para llevar al SP a la posicin correcta debe usarse la instruccin AIS n, donde n es el nmero de posiciones a sumarle o restarle a SP. En el caso anterior, si no se usa la instruccin PULA, entonces es necesario utilizar AIS 1 antes de RTS para evitar un problema con el valor del PC. RESETS E INTERRUPCIONES EN LOS HC08 La CPU ejecuta instrucciones de manera secuencial, sin embargo, en muchas aplicaciones es necesario ejecutar un conjunto de instrucciones en respuesta a una peticin hecha por un perifrico, la cual, normalmente se hace de manera asncrona con el programa que actualmente 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 peticin de este tipo se denomina subrutina de atencin a la excepcin, la cual es llamada por la CPU despus de procesar la excepcin o evento. El reset es requerido para llevar al MCU a un estado conocido, cargando el PC normalmente con la direccin de la primera instruccin del programa. Una interrupcin es un evento de hardware asociado a un perifrico que requiere establecer comunicacin con la CPU, evitando que este ltimo necesite estar sondendolo (polling) a todo momento. En los MCU HC08, cada perifrico puede generar una o varias interrupciones, las cuales son atendidas por la CPU siempre que la mscara global est deshabilitada, incluso, cada fuente

  • de interrupcin tiene tambin su propia mscara de interrupcin, pudindose habilitar/deshabilitar usando los registros de estado y control del perifrico en cuestin. Cada fuente de interrupcin en el MCU tiene una prioridad asignada (ver en la hoja de datos de cada MCU) siendo el Reset el de mayor prioridad (nmero 0). Adicionalmente, cuando un perifrico dentro del MCU genera condicin de interrupcin, una bandera de uno de los registros de estado y control se pondr en 1 indicando dicha condicin. Esta bandera debe limpiarse cuando se ejecuta la subrutina de atencin a la excepcin o si no, la CPU ejecutar indefinidamente tal subrutina. En el procesamiento de una excepcin por parte de la CPU08 se tienen los siguientes pasos: 1. Enmascaramiento

    El Reset no es enmascarable, as que cuando este se presente, la CPU08 deber reconocerlo sin importar que otra interrupcin este siendo servida, el resto de interrupciones son enmascarables, es decir, pueden habilitarse o deshabilitarse. El Bit I del registro de cdigos de condicin (CCR) controla la mscara global de interrupcin como se mencion anteriormente y se puede manipular con las instrucciones CLI (Clear I) y SEI (Set I) para habilitar/deshabilitar las interrupciones enmascarables respectivamente. Una interrupcin ser entonces reconocida por la CPU cuando tanto la mscara global como la mscara del perifrico que la gener estn deshabilitadas (sin mscara).

    2. Reconocimiento por parte de la CPU

    Un Reset es reconocido de manera asncrona (con respecto a la ejecucin de las instrucciones) en el momento en que se presenta, al igual que las fuentes de reset internas, excepto un reset por instruccin ilegal o por direccionamiento ilegal, los cuales, junto con las interrupciones son reconocidos de manera sncrona por parte de la CPU. Todas las interrupciones son reconocidas por la CPU08 en el ltimo ciclo de ejecucin de la instruccin actual (no confundir con la ltima fase de reloj de cada ciclo de mquina) y por lo tanto ninguna instruccin es suspendida si se presenta un evento de estos. En caso de presentarse una interrupcin justo en el ltimo ciclo de la instruccin actual, ella ser reconocida en el ltimo ciclo de la siguiente instruccin.

    3. Evaluacin de prioridad

    Debido a que varias interrupciones, incluido el reset, se pueden presentar al mismo tiempo, la CPU08 debe evaluar la prioridad de cada una de ellas para as determinar cual debe procesarse en el momento y cuales debe postergar. Las prioridades de las fuentes de interrupcin son fijas, teniendo al reset con la prioridad ms alta, el resto depende de cada MCU. Una vez la interrupcin se haya servido, la CPU08 evala de nuevo las prioridades de las interrupciones previamente postergadas para pasar a

  • procesar la que siga en la lista y as sucesivamente hasta que todas sean servidas. La CPU08 puede manejar un total de 128 fuentes de interrupcin independientes.

    4. Almacenamiento del contexto actual del sistema en la pila

    Debido a que una interrupcin puede presentarse en cualquier momento dando lugar a la ejecucin de una subrutina de atencin a excepcin, es necesario que la CPU08 almacene el contenido de varios de los registros para recuperarlos cuando la interrupcin se haya servido y poder as retomar la ejecucin previa a la excepcin. Automticamente, la CPU almacena en la pila del sistema los siguientes registros: PCL (parte baja del PC), PCH (parte alta del PC), X (parte baja del registro H:X), A (acumulador), CCR (cdigos de condicin). Para tener mayor claridad observe la siguiente grfica. Suponga que el contenido del SP es $01FE, adems no olvide que las direcciones de memoria son de 16 bits pero la cantidad de bits a almacenar en cada direccin es de 8.

    $01F9CCR$01FA5

    A$01FB4X$01FC3

    PCH$01FD2PCL$01FE1

    Orden de almacenamiento

    Registro almacenadoDireccin

    $01F9CCR$01FA5

    A$01FB4X$01FC3

    PCH$01FD2PCL$01FE1

    Orden de almacenamiento

    Registro almacenadoDireccin

    SP

    Note que la parte alta del registro H:X (H) no se almacena en la pila del sistema, por lo tanto si en la subrutina de atencin a excepcin se requiere utilizar este registro, es necesario sacarle manualmente una copia en la pila y luego restaurarla al final antes de la instruccin RTI, para eso existen las instrucciones PSHH y PULH.

    5. Bsqueda del vector apropiado para llamar la subrutina de atencin a la excepcin

    Una vez realizado los pasos anteriores, la CPU podr ejecutar la subrutina de atencin a excepcin asociada apoyndose en los vectores de excepcin. Los vectores de excepcin son un conjunto de direcciones de memoria donde en cada uno se almacena la direccin de la primera instruccin de la subrutina que se debe ejecutar. Cada vector est conformado por dos posiciones de memoria consecutivas con el fin de poder almacenar un valor de 16 bits (direccin de memoria). Cada fuente de interrupcin tiene un vector asociado y se puede ver en la hoja de datos del MCU. Es necesario mediante programacin almacenar en la direccin de cada vector que se requiera, la direccin de la primera instruccin de la subrutina de atencin

  • a excepcin asociada, de manera que, al procesarla, el PC sea cargado con ese valor y por lo tanto se pueda ejecutar la ISR (Interrupt Service Routine). El vector de RESET est ubicado en las direcciones $FFFE-$FFFF. En estas dos direcciones se debe almacenar la direccin de la primera instruccin que debe ejecutar la CPU cuando se de la orden de Reset.

    6. Suspender el procesamiento de nuevas interrupciones

    Automticamente, cuando la CPU procesa una excepcin y habindole sacado una copia al registro CCR, ella procede a colocar en 1 lgico, el bit I del CCR, en otras palabras, deshabilita todas las interrupciones enmascarables. Lo anterior se hace para evitar que la subrutina de atencin a interrupcin sea suspendida por el procesamiento de otra interrupcin. Cada fuente de interrupcin dispone de un bit en determinado registro, el cual es utilizado para indicar la condicin de peticin de interrupcin. La CPU, al procesar la excepcin, se fija cuales de esos bits de peticin de interrupcin estn activos y procede a evaluar la prioridad para ejecutar la subrutina adecuada, sin embargo, si la mscara global o la del perifrico est habilitada, entonces la CPU no tiene en cuenta esa peticin de interrupcin en el momento. Colocando I en 1, la CPU no procesa nuevas excepciones hasta que I vuelva a tener un 0, evento que se da cuando la ISR finaliza con la instruccin RTI y por lo tanto se recupera el valor original del CCR. En tal momento, las peticiones de interrupcin que se hicieron durante la ejecucin de la ISR son evaluadas nuevamente y una nueva ISR es ejecutada. Si la ISR olvida limpiar el bit de peticin de interrupcin, es decir, si el programador no limpia la bandera de peticin en la ISR, entonces tal subrutina se ejecutar indefinidamente as no se den nuevas peticiones realmente.

    Subrutina de atencin a excepcin/interrupcin Una vez la CPU haya procesado la excepcin, pasar a ejecutar la denominada subrutina de atencin a excepcin de acuerdo a la configuracin del vector asociado. Es muy importante tener en cuenta varias consideraciones sobre esta subrutina: La CPU mientras est ejecutando una subrutina de atencin a interrupcin no puede

    atender otras interrupciones. La razn de esto es que automticamente cuando la CPU procesa una excepcin, este pone en 1 la bandera I del CCR. Al finalizar la subrutina de atencin a interrupcin, la CPU restaura el registro CCR desde la pila, llevndose de nuevo el valor de I a 0. No se recomienda usar la instruccin CLI dentro de la subrutina de atencin a interrupcin ya que la subrutina actual podra ser temporalmente suspendida.

    En caso de usar el registro H en la subrutina, es necesario sacarle una copia a este registro al comienzo de la subrutina usando la pila. No olvide restaurarlo al final antes de la instruccin RTI. Para almacenar H en la pila haga uso de PSHH, mientras que para restaurarlo utilice PULH.

    Toda subrutina de atencin a interrupcin debe ser lo ms corta posible con el fin de

  • permitir un rpido procesamiento de otras peticiones de interrupcin. Cuando un perifrico hace una peticin de interrupcin, ste activa una bandera,

    normalmente en uno de sus registros de estado y control. Dicha bandera debe ser limpiada siguiendo las recomendaciones del manual durante la ejecucin de la subrutina, ya que en caso de no hacerlo, la peticin permanecer y la subrutina se ejecutar indefinidamente.

    Toda subrutina de este tipo debe finalizar con la instruccin RTI, con el fin de retomar la ejecucin del programa justo donde se dio el evento de interrupcin, as como una subrutina normal debe finalizar con la instruccin RTS.

    Ms sobre el enmascaramiento En el momento de utilizar la instruccin CLI para poner a I en 0, la CPU08 pasar a procesar de inmediato la interrupcin que haya realizado peticin antes del ltimo ciclo de esta instruccin, evitando temporalmente ejecutar la siguiente instruccin a ella, incluso si se trata de SEI. Fuentes de Reset La CPU08 maneja varios tipos de reset, uno externo y cinco internos, a continuacin se da una breve descripcin de ellos. Reset externo: Consiste de un PIN activo en bajo con PullUp interno que permite llevar

    al MCU a un estado conocido cuando el pin es llevado a 0 lgico. Reset interno Illegal OpCode: Cuando en memoria existe un cdigo de operacin ilegal

    que se trata de ejecutar, la CPU automticamente se reinicia. Reset interno Illegal Address: Cuando se trata de direccionar una zona de memoria no

    implementada, la CPU automticamente se reinicia. Reset interno WatchDOG: Cuando el contador del perro guardin se desborda debido a

    que existe una condicin anmala en el programa (un loop infinito que evita que mediante software se limpie el contador), la CPU automticamente se reinicia.

    Reset interno LVI: Si se detecta una cada de voltaje en el pin de alimentacin del MCU, la CPU automticamente se reinicia.

    Reset interno PowerOnReset: En el momento de darle energa a la CPU (es decir, cuando VDD pasa de 0V a 3V 5V), la CPU automticamente se reinicia.

    MODOS DE DIRECCIONAMIENTO La MCU dispone de 16 tipos de direccionamiento para un acceso ms flexible a los datos. A continuacin se enuncian dichos modos: Inherente. Inmediato. Directo.

  • Extendido. Indexado, sin offset. Indexado, 8-bit offset. Indexado, 16-bit offset. Stack pointer, 8-bit offset. Stack pointer, 16-bit offset. Relativo. Memoria a memoria (cuatro modos):

    o Inmediato a directo. o Directo a directo. o Indexado a directo con post-incremento. o Directo a indexado con post-incremento.

    Indexado con post-incremento. Indexado, 8-bit offset con post-incremento. Antes de comenzar a ver los diferentes modos de direccionamiento, es importante tratar el tema del cdigo de operacin u OpCode. Cdigo de Mquina de la CPU HC08 Cada instruccin est en capacidad de poner a funcionar las diferentes unidades internas de la CPU (Control y Ejecucin) para tomar los operandos de registros/memoria, procesar la informacin y finalmente almacenar los resultados en registros/memoria. Cada instruccin es representada por un cdigo de operacin u OpCode (cdigo binario), el cual la unidad de control toma, decodifica y de acuerdo al valor del cdigo prepara la unidad de ejecucin para llevar a cabo la tarea correspondiente, donde una de las primeras labores ser tomar los operandos de memoria de acuerdo al modo de direccionamiento empleado. Cada instruccin (por ejemplo ADD) puede hacer uso de varios modos de direccionamiento y por lo tanto debe existir una forma de decirle a ella que emplee uno determinado, para esto la misma instruccin podr manejar varios OpCodes dependiendo de los modos de direccionamiento que soporte. Ahora bien, la informacin suministrada por el OpCode no es suficiente debido a que algunos modos de direccionamiento requieren de informacin adicional tales como el operando, ubicacin del operando, etc. y por lo tanto se necesita de uno o varios bytes adicionales para completar determinada operacin. El OpCode junto con los bytes adicionales conforman el denominado Cdigo de Mquina y el tamao en bytes dependen de la instruccin y el modo de direccionamiento empleado. Todos los cdigos de operacin tienen un tamao de un byte excepto los cdigos asociados al modo de direccionamiento Stack Pointer, el cual tiene un tamao de 2 bytes. De acuerdo a este tamao y a la informacin necesaria para el modo de direccionamiento, se podr tener cdigos de mquina de hasta 4 bytes, las cuales se vern ms adelante cuando se expliquen los diferentes modos de direccionamiento. La instruccin ADD toma un operando de memoria y lo suma con el valor del registro A. Para diferentes modos de direccionamiento observe que el cdigo de operacin es diferente.

  • Siempre, en un cdigo de mquina, el primer (o primeros) byte es el cdigo de operacin, seguido de los bytes complementarios como informacin para el modo de direccionamiento empleado:

    Instruccin M. D. OpCode Adicin Cdigo de Mquina 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

    M. D. Inherente Este tipo de instrucciones no tienen operandos asociados, ellas actan directamente sobre los registros de la CPU llevndoles un valor conocido o haciendo transferencia de uno a otro. Debido a que no se tiene la necesidad de direccionar la memoria para obtener algn operando, el cdigo de mquina de estas instrucciones est conformado solo por el OpCode de la instruccin, siendo de solo un byte el tamao en memoria de este tipo de instrucciones. En la notacin en lenguaje ensamblador, tales instrucciones aparecen sin operandos, simplemente la instruccin. Machine Label Operacin Operando Comentario Code A657 LDA #$57 ;A = $57 AB45 ADD #$45 ;A = $9C 72 DAA ;A = $02, Decimal Adjust Accumulator M. D. Inmediato El operando en estas instrucciones est contenido en los bytes que siguen al OpCode. Propiamente estos bytes son el operando y no la direccin donde se ubica el operando. En cdigo ensamblador este modo de direccionamiento se indica anteponiendo al valor inmediato el caracter #. El valor inmediato est limitado a uno o dos bytes dependiendo del registro que la instruccin est empleando (H:X, A, etc.). El cdigo de mquina para este modo de direccionamiento esta conformado por el OpCode ms uno o dos bytes del valor inmediato, siendo entonces de 2 3 bytes. Machine Label Operacin Operando Comentario Code 5F START CLRX ;X=0 8C CLRH ;H=0 AF01 TAG AIX #1 ;(H:X)=(H:X)+1 65FFFF CPHX #$FFFF ;Comparar H:X hasta que llegue a $FFFF 26F9 BNE TAG ;Saltar a TAG mientras HX no sea $FFFF 20F5 BRA START ;Iniciar otra vez

  • M. D. Directo y Extendido Similar al modo de direccionamiento absoluto de otros procesadores, en donde a la instruccin se le entrega la direccin efectiva del operando. En la CPU HC08, el mapa de memoria tiene un rango de direcciones de $0000 a $FFFF, teniendo la denominada pgina cero en el rango de direcciones $0000 a $00FF. En este rango, el byte de mayor peso siempre es $00 y por lo tanto no es necesario indicarlo cuando se va a acceder a un dato que est en dicha zona de memoria, lo que implica un ahorro de ella y a la vez una ejecucin ms rpida. El modo de direccionamiento directo implica acceder al rango $0000 a $00FF y por lo tanto un cdigo de mquina para este modo solo necesita de dos bytes, uno para el OpCode y otro para el byte de menor peso de la direccin de memoria ubicada en la pgina cero. La instruccin usando este modo asume que el byte de mayor peso es $00. La razn por la cual la RAM o parte de ella as como la mayora de registros de la CPU estn ubicados en la pgina cero es con el fin de poder emplear este modo de direccionamiento que finalmente ayuda a ahorrar memoria y adems lleva a tener una ejecucin ms rpida como se indic anteriormente. El modo de direccionamiento extendido permite acceder a cualquiera de las direcciones del rango de memoria $0000 a $FFFF, lo cual lleva a que el cdigo de mquina sea en este caso de 3 bytes, uno para el OpCode y otros dos para la direccin de 16 bits. Cabe notar que la mayora de ensambladores, cuando encuentran una direccin absoluta, son capaces de determinar el modo de direccionamiento directo o extendido y por lo tanto establecen el cdigo de mquina apropiado. Por ejemplo, si usted indica la instruccin ADD $0047, automticamente el ensamblador genera un cdigo de mquina que har uso del modo de direccionamiento directo y no del extendido. Sin embargo, un programa ensamblador puede asumir errneamente que una direccin dada en el rango $0000-$00FF se debe acceder con el modo de direccionamiento extendido y por lo tanto no utiliza el modo de direccionamiento directo que es ms rpido y eficiente. En ensamblador, este modo de direccionamiento aparece como un valor absoluto, correspondiente a la direccin donde se lee o donde se escribe, no utiliza #, este es solo para direccionamiento inmediato. Machine Label Operacin Operando Comentario Code RAM EQU $50 ;Direccin de la RAM ROM EQU $6E00 ;Direccin de la ROM ORG RAM ;Ubicarse en la RAM TEMP RMB 2 ;Reservar 2 bytes ORG ROM ;Ubicarse en la ROM 5F START CLRX 8C CLRH 3550 STHX TEMP ;TEMP=(H:X)=0 455555 LDHX #$5555 ;(H:X)=$5555 3550 STHX TEMP ;TEMP=$5555 7550 BAD CPHX RAM ;RAM=temp

  • 26FC BNE BAD 20F1 BRA START Se puede ver que STHX y CPHX solo usan dos bytes en memoria: Uno para el OpCode y otro para la direccin debido a que se est utilizando la pgina cero del MCU. TEMP es una etiqueta que tiene realmente la direccin de memoria $50 Por qu? Machine Label Operacin Operando Comentario Code ORG $50 ;Iniciar en $50 FCB $FF ;$50=$FF 5F CLRX BE50 LDX $0050 ;Cargar X desde la pgina cero ORG $6E00 ;Iniciar en $6E00 FCB $FF ;$6E00=$FF 5F CLRX CE6E00 LDX $6E00 ;Cargar X por fuera de la pgina cero Se puede ver que la instruccin LDX en este cdigo tiene dos OpCodes diferentes segn el modo de direccionamiento empleado (directo y extendido). M. D. Indexado, sin offset Para este modo de direccionamiento, el dato est en memoria en el rango $0000 a $FFFF. La direccin efectiva del operando es el contenido del registro ndice H:X. El cdigo de mquina para este modo est conformado simplemente por el OpCode y por lo tanto el tamao es de un byte. En ensamblador la notacin aparece como INSTRUCCIN ,X. M. D. Indexado, 8-bit offset Para este modo de direccionamiento, el dato est en memoria en el rango $0000 a $FFFF. La direccin efectiva del operando es el contenido del registro ndice H:X sin signo sumado con un offset de 8 bits sin signo que se especifica junto con la instruccin. El cdigo de mquina para este modo est conformado por el OpCode y el desplazamiento de 8 bits, teniendo un tamao total de dos bytes. Este modo de direccionamiento se emplea normalmente para acceder a datos que estn dentro de una tabla de n datos ubicada en memoria. H:X ser el elemento k que se desea acceder y el offset de 8 bits ser la direccin base de la tabla, la cual solo podr estar en una de las primeras 256 direcciones de la memoria. En ensamblador, la notacin aparece como INSTRUCCIN offset8bits,X. M. D. Indexado, 16-bit offset Para este modo de direccionamiento, el dato est en memoria en el rango $0000 a $FFFF. La direccin efectiva del operando es el contenido del registro ndice H:X sin signo sumado con un offset de 16 bits sin signo que se especifica junto con la instruccin. El cdigo de mquina para este modo est conformado por el OpCode y el desplazamiento de 16 bits, teniendo un tamao total de tres bytes. Este modo de direccionamiento se emplea normalmente para acceder a datos que estn dentro de una tabla de n datos ubicada en memoria. H:X ser el elemento k que se desea acceder y el offset de 16 bits ser la

  • direccin base de la tabla. En ensamblador, la notacin aparece como INSTRUCCIN offset16bits,X. La siguiente es una tabla de 4 elementos con direccin base $1000. Para acceder al valor F4, H:X debe tener un 2 y el desplazamiento ser $1000. Si se quiere acceder al valor 07, simplemente se le suma 1 a H:X y se deja el mismo desplazamiento. Puede emplearse de manera genrica una porcin de cdigo que recorra toda la tabla, incrementando/decrementando el valor de H:X y dejando el desplazamiento fijo.

    Direccin ndice Contenido $1000 0 45 $1001 1 2E $1002 2 F4 $1003 3 07

    Machine Label Operacin Operando Comentario Code FC JMP ,X ;Sin offset ;Salta a la direccin apuntada por H:X EC35 JMP $35,X ;8 Bit Offset ;Salta a la direccin apuntada por H:X + $35 DCA035 JMP $A035,X ;16 Bit Offset ;Salta a la direccin apuntada por H:X + $A035 M. D. Stack Pointer, 8-Bit Offset Similar al indexado pero el registro base es SP y no H:X, el offset o desplazamiento es de 8-bits sin signo. El OpCode para este modo de direccionamiento es de 2 bytes y por lo tanto el cdigo de mquina tendr un tamao de 3 bytes. En ensamblador, la notacin aparece como INSTRUCCIN offset8bits,SP. M. D. Stack Pointer, 16-Bit Offset Similar al indexado pero el registro base es SP y no H:X, el offset o desplazamiento es de 16-bits sin signo. El OpCode para este modo de direccionamiento es de 2 bytes y por lo tanto el cdigo de mquina tendr un tamao de 4 bytes. En ensamblador, la notacin aparece como INSTRUCCIN offset16bits,SP. Machine Label Operacin Operando Comentario Code 450100 LDHX #$0100 94 TXS ;Reset Stack Pointer ;to $00FF A620 LDA #$20 ;A=$20 9EE710 STA $10,SP ;$10F=$20 9E6B10FC LP: DBNZ $10,SP,LP ;8-Bit offset Por qu?, ver M.D. Relativo

  • 450100 LDHX #$0100 94 TXS ;Reset Stack Pointer ;to $00FF 9ED60250 LDA $0250,SP ;16-Bit offset, cargar A, con el contenido ;de la direccin $34F M. D. Relativo Modo de direccionamiento empleado en las instrucciones de salto condicional e incondicional, adems en la instruccin de salto relativo a subrutina. La direccin efectiva es la suma del contenido del PC (Registro base, relativo) con un valor de desplazamiento de 8 bits con signo. La instruccin de salto evala una condicin, si esta es verdadera, el PC se carga con la direccin efectiva previamente calculada, en caso contrario el PC toma la direccin de la siguiente instruccin al salto condicional o incondicional. En caso de un salto incondicional (BRA BSR), el PC siempre ser cargado con la direccin efectiva sin evaluar condiciones. El programa ensamblador es capaz de inferir el valor de 8 bits que se le debe sumar al PC para calcular la direccin efectiva y en caso de tenerse un desplazamiento negativo, entonces el valor se almacenar en complemento a dos. Si la condicin es verdadera, el PC podr moverse en torno a l en un rango de -128 a 127. El cdigo de mquina para este modo de direccionamiento est conformado por el OpCode y el valor relativo de 8 bits con signo, tenindose un tamao de 2 bytes. Si esta instruccin adicionalmente emplea a la vez otro modo de direccionamiento, entonces, al tamao se le debe sumar los bytes adicionales del modo en cuestin. Consulte las instrucciones DBNZ, BRSET, BRCLR. La notacin en lenguaje ensamblador es INSTRUCCIN etiqueta_salto direccin absoluta Machine Label Operacin Operando Comentario Code A601 TAG LDA #1 ;A=1 A1FE CMP #-2 ;Comparar con -2 91FA BLT TAG ;Salta si el valor de A es menor que -2 20FE HERE BRA HERE ;Salta siempre a HERE M. D. Memoria a Memoria Existe un total de 4 modos de direccionamiento Memoria a Memoria que permiten transferir datos de manera rpida hacia/desde la pgina cero, muy til en la inicializacin de perifricos, variables, entre otros. Estos modos de direccionamiento solo pueden emplearse con la instruccin MOV. Memoria a Memoria: Inmediato a Directo Machine Label Operacin Operando Comentario Code 6E22F0 4-Cyc MOV #$22,$F0 ;Posicin $F0=$22

  • Memoria a Memoria: Directo a Directo Machine Label Operacin Operando Comentario Code 4EF0F1 5-Cyc MOV $F0,$F1 ;Posicin $F1 = Posicin $F0 Memoria a Memoria: Indexado a Directo con post-incremento Machine Label Operacin Operando Comentario Code 7E18 MOV X+,$25 ;Mueve el dato apuntado por H:X a la direccin $25 ;y post-incrementa H:X Memoria a Memoria: Directo a Indexado con post-incremento Machine Label Operacin Operando Comentario Code 5E18 MOV $25,X+ ;Mueve el dato existente en $25 a la direccin ;apuntada por H:X y post-incrementa H:X M. D. Indexado con Post-Incremento Similar al indexado sin offset pero con post-incremento de H:X. M. D. Indexado 8-Bit offset, con Post-Incremento Similar al indexado 8-Bit offset adems de post-incremento de H:X. Machine Label Operacin Operando Comentario Code 7102 LOOP CBEQ X+,TAG ;Sin offset 615002 LOOP2 CBEQ $50,X+,TG1 ;8Bit Offset INSTRUCCIONES El manual de referencia de la CPU HC08 detalla claramente cada una de las instrucciones que l soporta. En esta seccin se clasifican las instrucciones por funcionamiento para una fcil ubicacin en el manual cuando se requiere desarrollar determinada operacin. Adicionalmente se realizan algunas aclaraciones sobre temas como: saltos absolutos, relativos, subrutinas, entre otros. Clasificacin Control del Programa Conjunto de instrucciones que permiten cambiar el flujo del programa, es decir, cargar en el PC la direccin de memoria de una instruccin diferente a la de la siguiente instruccin que

  • se debera ejecutar normalmente. Existen diferentes tipos de stas instrucciones: condicionales (relativo), incondicionales (relativo y absoluto) y salto a subrutina (relativo y absoluto). Saltos absolutos y relativos El MCU HC08 as como muchos Microprocesadores y Microcontroladores manejan instrucciones de salto condicional e incondicional de manera absoluta o relativa. Una instruccin de salto condicional evala una o varias de las banderas de algn registro y de acuerdo a esto toma la accin de cargar en el PC una direccin diferente a la de la siguiente instruccin consecutiva. Las instrucciones de salto incondicional cargan en el PC la direccin donde el flujo de programa debe seguir sin la necesidad de evaluar alguna condicin. Este tipo de instrucciones pueden cargar en el PC un valor relativo (con respecto a l u otro registro) o un valor absoluto. Para la CPU08, el valor relativo es un valor constante de 8 bits con signo que se le suma al contenido del PC para obtener la direccin efectiva donde el programa debe saltar. Un valor absoluto se refiere a la direccin efectiva que se va a cargar en el PC para cambiar el flujo del programa. Saltos a subrutina relativos y absolutos En los programas es comn realizar diversas operaciones sobre un conjunto de operandos y obtener de ellos un conjunto de resultados. Como ejemplo, vea la funcin y=sen(x), dependiendo del valor de x se tiene un valor de y. Para este caso se puede hacer una porcin de cdigo que tome el valor x y se obtenga as el valor de y correspondiente. Hacer fragmentos de cdigo para cada uno de los posibles valores que x puede tomar no tiene sentido y por lo tanto se recurre a lo que se llama una rutina, la cual es un conjunto de instrucciones que toman uno o varios valores, operan con ellos y arrojan uno o varios resultados. En la ejecucin del programa, debe existir la forma de saltar a la rutina para que procese el valor de x y entregue el valor de y correspondiente, de manera que las instrucciones siguientes al llamado lo puedan usar. Que se requiere entonces para hacer lo anterior? No es suficiente con ejecutar una instruccin de salto relativo o absoluto, se necesita almacenar una copia del PC antes de hacer el salto y de esta forma poder retornar cuando ella finalice. Las instrucciones de salto a subrutina relativo y absoluto (BSR y JSR) trabajan de manera similar a las ya vistas instrucciones de salto relativo y absoluto, pero adicionalmente sacan una copia del valor del PC en la pila del sistema antes de realizar el salto. La rutina entonces har el procesamiento respectivo y finalizar con una instruccin de salto, denominada retorno de subrutina (RTS), la cual restaura el PC con el valor previamente almacenado de manera que la ejecucin prosiga en la siguiente instruccin donde se hizo el salto. La rutina propiamente es considerada una subrutina, ya que hace parte de un programa o rutina principal. La siguiente es una lista de las instrucciones que manejan saltos absolutos y relativos en la CPU

  • Instruccin Descripcin Relativo AbsolutoBCC Salta si C (acarreo) = 0 X BCS Salta si C (acarreo) = 1 X BEQ Salta si es igual X BGE Salta si es mayor que o igual (signo) X BGT Salta si es mayor que (signo) X BHCC Salta si H (acarreo intermedio) = 0 X BHCS Salta si H (acarreo intermedio) = 1 X BHI Salta si es superior X BHS Salta si es superior o el mismo X BIH Salta si IRQ = 1 X BIL Salta si IRQ = 0 X BLE Salta si es menor que o igual (signo) X BLO Salta si es inferior X BLS Salta si es inferior o el mismo X BLT Salta si es menor que (signo) X BMC Salta si I = 0 X BMI Salta si N (menos/negativo) = 1 X BMS Salta si I = 1 X BNE Salta si no es igual X BPL Salta si N (mas/positivo)= 0 X BRA Salta siempre X BRCLR Salta si el bit n en memoria est en 0 X BRSET Salta si el bit n en memoria est en 1 X BRN Nunca salta X BRS Salto a subrutina X CBEQ Compara y salta si es igual X DBNZ Salta si despus de decrementar es diferente de cero X JMP Salta siempre X JSR Salto a subrutina X RTI Retorno desde interrupcin RTS Retorno desde subrutina. Ver JSR y BSR. STOP Detiene la CPU y el reloj del sistema. I = 0 SWI Interrupcin por Software WAIT Detiene la CPU. I = 0 Aritmtica de enteros La siguiente es una lista de las instrucciones que manejan operaciones aritmticas en la CPU Instruccin Operacin ADC A (A) + (M) + (C). Afecta CCR. ADD A (A) + (M). Afecta el CCR.

  • MUL X:A (X) x (A). Multiplica el contenido de X con el de A. SBC A (A) - (M) - (C). Afecta CCR. SUB A (A) - (M). Afecta CCR. DAA Ajuste decimal al acumulador. Afecta el CCR. DIV A (H:A) (X). H Residuo. NSA A (A[3:0]:A[7:4]). Usado en conjunto con DAA, no es aritmtica. Operaciones Lgicas La siguiente es una lista de las instrucciones que manejan operaciones lgicas en la CPU Instruccin Operacin AND A (A) & (M). Afecta CCR. COM A X M $FF - (A X M). Afecta CCR. Complemento a uno. EOR A (A) (M). ORA A (A) | (M). Afecta CCR. NEG A X M $00 - (A X M). Complemento a dos. Operaciones de desplazamiento La siguiente es una lista de las instrucciones que manejan operaciones de desplazamientos en la CPU Instruccin Descripcin ASL Desplaza todos los bits hacia la izquierda (Aritmtica). Afecta CCR ASR Desplaza todos los bits hacia la derecha (Aritmtica). Afecta CCR LSL Similar a la instruccin ASL LSR Desplaza todos los bits hacia la derecha (Lgica). Afecta CCR ROL Rotan todos los bits hacia la izquierda. Incluye el acarreo C. ROR Rotan todos los bits hacia la derecha. Incluye el acarreo C. Manipulacin de bits La siguiente es una lista de las instrucciones que manipulan bits en memoria Instruccin Descripcin BCLR Pone el bit n a 0. No afecta CCR BSET Pone el bit n a 1. No afecta CCR CLC Lleva 0 el bit de acarreo C CLI Lleva 0 el bit de mscara I SEC Lleva 1 el bit de acarreo C SEI Lleva 1 el bit de mscara I

  • Operaciones de toma de decisiones La siguiente es una lista de las instrucciones que permiten toma de decisiones Instruccin Operacin CMP (A) (M). Necesaria para la mayora de instrucciones condicionales. CPHX (H:X) (M:M + $0001). Similar a CMP. CPX (X) (M). Similar a CMP. TST Verifica si el contenido de A, X M es cero o negativo Manipulacin de registros y memoria La siguiente es una lista de las instrucciones que manipulan registros y memoria Instruccin Operacin AIS SP (SP) + (16
  • ninguna operacin. Se utilizan cuando el tiempo entre eventos que debe realizar el microcontrolador es muy grande (hablando en trminos de velocidad de un microcontrolador que puede ser 2.5 MHz o superior). En un modo de bajo consumo, el reloj de la CPU est desactivado de manera que no ejecuta ninguna instruccin hasta que se produzca una interrupcin. Normalmente, el programa se desarrolla para manejar una metodologa de procesamiento ante eventos, de manera que la CPU est dormida, esperando que uno o varios eventos la despierten y por lo tanto se empiece a procesar la informacin. Al finalizar el procesamiento, la CPU se vuelve a dormir a la espera de un nuevo evento. El modo wait apaga el reloj de la CPU, es decir, cuando se utiliza dicho modo, la CPU no recibe pulsos de reloj y por lo tanto el valor del PC (Program Counter) permanece estable, adems, el consumo de energa del micro se reduce. Slo una interrupcin interna o externa restablecer el reloj de la CPU y lo pondr a trabajar nuevamente. Todos los perifricos siguen trabajando en este modo de manera que puedan reactivar la CPU. El modo stop apaga el reloj de la CPU y del bus, es decir, tanto la CPU como la mayora de perifricos que dependen de una seal de reloj para trabajar quedan deshabilitados. Es un modo de mayor ahorro de energa donde solo unos pocos perifricos del MCU pueden despertar a la CPU. REFERENCIAS 1. Reference Manual. HC08 Central Processor Unit. Motorola/Freescale. 2. Gua didctica del HC08. Silica and Digital DNA de Motorola.