Descripcion de Un Microcontrolador (CPU)

March 21, 2018 | Author: Fabio Morales A | Category: Central Processing Unit, Bit, Microcontroller, Computer Memory, Pointer (Computer Programming)


Comments



Description

CeTAD – Facultad de Ingeniería - UNLPDescripción General de un Microcontrolador – (CPU) (Basado en Freescale HC08) Cátedra de Circuitos digitales y Microprocesadores Autores: Ing. Jorge R. Osio Ing. Walter Aróztegui Ing. José A. Rapallini Agosto de 2011 Descripción General de un Microcontrolador (CPU) Versión 2.0 Página 1 INDICE. Contenidos 1. Introducción…………………………………..…………………6 1.1. Características Generales del Microcontrolador HC908……….……6 1.1.1. Características Específicas de los Microcontroladores HC908QT/Q....7 1.2. Ventajas adicionales…………………………………………..……10 1.3. Módulos Disponibles En las distintas líneas de la Familia HC908...10 2. Descripción del CPU08………………..…………………….....11 2.1. Arquitectura de ejecución del CPU 08…………………..…..……..11 2.2. Temporización Interna……………………………………………..12 2.3. El ―Prefetch‖ en el CPU08…………………………….….………..13 2.4. Unidad de control…………………………………….….…………13 2.5. Unidad de Ejecución…………………………………….….……...14 2.6. Ejecución de Instrucciones………………………….……..……….15 2.7. Descripción de Registros…………………………….….….………16 2.7.1. 2.7.2. 2.7.3. 2.7.4. 2.7.5. Acumulador (A)………………………………………….…......…….17 Registro Índice (H:X)…………………………………………………17 Puntero de Pila (SP)…………………………………………………..17 Contador de Programa (PC)…………………………....……………..18 Registro de Código de Condición (CCR)……………...….…………..19 2.7.5.1. Flag V (Bit de Desborde)……………………..………….…..19 2.7.5.2. Flag H (semi-acarreo)………………………....………..……19 2.7.5.3. Flag I (Mascara Global de Interrupciones)…….………..…...19 2.7.5.4. Flag N (Negativo)……………………………....……..……..19 2.7.5.5. Flag Z (cero)...………………………………...………......…20 2.7.5.6. Flag C – (acarreo / préstamo)………………..………………20 3. Modos de Direccionamiento………….…………...…………..21 3.1. Modo de Direccionamiento Inmediato……………….….…………21 3.2. Modo de Direccionamiento Inherente……………………...………22 3.3. Modo de Direccionamiento Directo…………………….……...…..23 3.4. Modo de Direccionamiento Extendido……………….………….....24 3.5. Modo de Direccionamiento Indexado…………………….………..25 3.5.1. Direccionamiento indexado ―sin desplazamiento (offset)‖……….…......25 3.5.2. Direccionamiento indexado con ―desplazamiento (offset) de 8 bits‖…...26 Descripción General de un Microcontrolador (CPU) Página 2 3.5.3. Direccionamiento indexado con ―desplazamiento (offset) de 16 bits‖….27 3.5.4. Direccionamiento Indexado ―8 & 16 Bit de desplazamiento (offset)‖….28 3.5.5. Direccionamiento Indexado con el ―Stack pointer‖ y ―8-Bit de offset‖...28 3.5.6. Direccionamiento Indexado usando ―Stack pointer‖ y ―16-Bit de offset―29 3.5.7. Stack Pointer ―8 bit de offset‖……………………………………...........29 3.5.8. Direccionamiento Indexado ―sin offset con Post Incremento‖……..…...30 3.5.9. Direccionamiento Indexado ―con 8 bit de offset y Post Incremento‖...…30 3.6. Modo de Direccionamiento Relativo……………………………….31 3.7. Direccionamiento Memoria a Memoria……………………………33 3.7.1. Direccionamiento Memoria a Memoria ―Inmediato a Directo ―…….......33 3.7.2. Direccionamiento Memoria a Memoria ―Directo a Directo‖....…….…...33 3.7.3. Direccionamiento Memoria a Memoria Indexado con Post Inc. aDirecto34 3.7.4. Direccionamiento Memoria a Memoria Directo a Indexado con Post Inc34 4. Memoria………………………...……………………………...36 4.1. Introducción…………………………………………………...…...36 4.2. Ubicaciones de memoria no implementada…………………...…...36 4.3. Ubicaciones de Memoria Reservada……………………………….36 4.4. Sección Input / Output (I/O)………………………………...……..36 4.5. Memoria de Acceso Aleatorio (RAM)…………………………….38 4.6. Memoria FLASH (FLASH)……………………………………….38 5. Módulo de Integración del Sistema (SIM)…………………...39 5.1. Características.………………………..…………………………….39 5.2. Bus de Clocks.……………………………………………………...39 5.3. Control de Reset…………………………………………………....39 5.3.1. Registro de estados de Reset del SIM.....………………………………..39 5.4. Interrupciones………………………….…………………………...40 6. Módulo de Operación Correcta del Computador (COP)...…41 6.1. Introducción………………………………………………………..41 6.2. Descripción Funcional……………………………………………..41 6.3. Señales I/O ………………………………………………………...42 6.4. Registro de Control de COP ………………………………………42 6.5. Interrupciones……………………………………………………...42 6.6. Modo Monitor……………………………………………………...42 6.7. Modos de Low-Power……………………………………………...43 6.7.1. Modo Wait……………………………………...……………………….43 Descripción General de un Microcontrolador (CPU) Página 3 .… 46 8.....43 6...…………….. Módulo COP durante el Modo Break……………………………..3.1.4.45 7..3. Pasos a seguir para cambiar del clock interno al externo.2. Selección de nivel de caída del LVI……………………….………………47 8. Módulo Oscilador (OSC)………………………. Modo Stop….49 8. Módulo Supervisor de Bajo Voltaje (LVI)….8...44 7.…….…. Descripción Funcional……………………. Registro de Estados del Módulo LVI……………………..50 8.3...1.45 7..……….……………………………………. Operación de Polling en el LVI………………..……………………………………….2.…...1.2.…………….1.45 7.43 7. Características…………………………………………………….3.………………………... Modo Stop……….1.……………………………………….7. Características del programa para determinar el valor de trim (ajuste)…50 Descripción General de un Microcontrolador (CPU) Página 4 .47 8. Protección Histéresis de Tensión……………......46 7.………………….45 7.………….46 7..... Modo Monitor forzado.47 8.……………46 7..5.………….2.... Modos de Baja Potencia…………………………………...…………………………………………...………………44 7..………. Introducción………………….45 7.44 7.2..2. Ajuste del oscilador interno…………………….…………...2.3. Configuración del Oscilador externo………….…..5.…………………….2.1.2..2..……………………….. Operación de Reset Forzado………………….……..4.47 8..6.………... Interrupciones en LVI……………………………………...………………………. Modo Wait…….………...5.2.…………………. ……………….……………………………………71 3. Símbolos usados en Assembler……………………………………58 2.1.…………………………………. Código ASCIID……………………………………………………54 1. Octal………………………………………….63 3.1.…………………..5. Set de Instrucciones………………………..59 2. Binario Codificado en Decimal…………….2.….... Lógicas……………………………………………. Control de Programa…………….4.61 2.…74 Descripción General de un Microcontrolador (CPU) Página 5 .…..…………….1.….………………………………….71 3.7..….………………….3..…………………. Sistemas de Numeración y Código…………………………...6.4..7. Movimiento de Datos…………........…. Códigos de Operación………………………….4..4. Operaciones en BCD………………………………………………74 3. Números Binarios y Hexadecimales………………………………53 1.. Arquitectura Von Neumann……………………………………….. Arquitectura ARM………………………………………………….3.. CISC VS RISC. Arquitectura Harvard……………………………………………….. Reseña Histórica……………………………………….………………………………………………….65 3... Mnemónicos y Ensambladores…………………..1.……………….61 2..56 1.8.55 1.…….. Descripción de Arquitecturas Clásicas 2..2.…………………………………72 3.62 3.4.60 2.. Manipulación de Datos……….60 2..70 3..6.2.3. Manipulación de Bits………….53 1... Arquitectura ARM para Microcontroladores…………..……………….…………………55 1.. Especiales……………………………………………………….2.…57 1....5...Apéndice 1.61 2.5. Aritméticas…………………. Arquitectura Harvard Vs Arquitectura Von Neumann……………..…….63 3. . lo que permite la migración de código de programas creados para el HC05. interacción entre los módulos y los lenguajes de comunicación (sistemas de numeración [9] y [12]) más utilizados en estos Sistemas. ya sea I/O o memoria. Esta familia tiene un conjunto de instrucciones complejas (CISC) con una Arquitectura Von Neumann. reloj oscilador y módulos I/O en el mismo circuito integrado. el circuito integrado lleva el nombre de Microprocesador [10]. Cuando carece de alguno de estos elementos. En la Figura 1 se puede observar la Arquitectura de un Microcontrolador HC908. memoria.1. Arquitectura del HC908. Introducción Un Microcontrolador puede definirse como un sistema integrado por un CPU. . Figura 1. Características Generales del Microcontrolador HC908 . Todos los MCUs de la familia M68HC08 usan una unidad Central de Procesos (CPU08) Disponible con una amplia variedad de Módulos y un espacio de memoria RAM y Flash que permiten realizar múltiples aplicaciones.Un poderoso CPU08 con más de 29 instrucciones nuevas y 16 modos de direccionamiento. alto desempeño de la familia M68HC08 de 8-bit.Código 100% compatible con la familia HC05 de Motorola. Para una mejor comprensión de la forma de manipulación de datos. 1.Velocidad Máxima de Bus de 8Mhz (fBus). .[11] y[12]. se recomienda leer el apartado 1 del Apéndice.Conversores A/D y TIMERS flexibles y poderosos en todos los distintos dispositivos de la familia HC908. . con un incremento de 5x al desempeño de la familia HC05. Descripción General de un Microcontrolador (CPU) Página 6 . El MC68HC908 es una unidad Microcontroladora (MCUs) de bajo costo.Memoria de Programa del tipo FLASH que permite programación y reprogramación ―En– Circuito‖ y uso de esta como ―EEPROM‖ para el almacenamiento ―no – volátil‖ de datos temporales.1.LVI (Low Voltage Inhibit) (supervisor de baja tensión) incorporado en todos los Microcontroladores de la familia HC908. . Conversor Analógico Digital de 8-bit (ADC) sobre MC68HC908QY2. etc. cuyas características se describen a continuación [3]: • Core M68HC08 CPU de alta performance • Código objeto compatible con la familia M68HC05 • Voltajes de operación de 5-V y 3-V (VDD ) •Bus interno de 8-MHz a 5 V. 4-MHz a 3 V • Oscilador interno ajustable 1 – Operación de bus interno a 3.4% exactitud – ± 25% sin ajustar • Auto wakeup desde STOP • Registro de Configuración (CONFIG) para opciones de configuración del MCU. Descripción General de un Microcontrolador (CPU) Página 7 . incluyendo: – Low-voltage inhibit (LVI) • Programación en sistema de FLASH • Seguridad de FLASH2 • Memoria Flash programable On-chip en la aplicación – MC68HC908QY4 y MC68HC908QT4 tiene 4096 bytes de flash • 128 bytes de memoria RAM on-chip • 2-canales. I2C. Módulos analógicos.1.Un amplio conjunto de herramientas de desarrollo. Esto se hace para evitar copias de terceros. 1. MC68HC908QY4 • 5 o 13 líneas entradas / salidas bidireccionales (I/O) y una entrada: – 6 compartidos con funciones de interrupción por teclado y ADC – 2 compartidos con canales de timer – Uno compartido con interrupción externa (IRQ) – 8 líneas I/O sobre encapsulado de 16-pin solamente – High current sink/source capability on all port pins – Pullups seleccionables sobre todos los puertos – Habilidad de 3. .. La característica de seguridad es inviolable. Características Específicas de los Microcontroladores HC908QT/QY En la Figura 2 se muestra el diagrama en bloques de la línea de Microcontroladores HC908QT/QY.Los microcontroladores de aplicación específica también poseen múltiples y prácticos periféricos como generadores de PWM. UART. SPI.2 MHz – 8-bit de trimer (ajuste) que permite 0. ya sea para programar en Lenguaje C o en Assembler o para programar o simular en circuito el código desarrollado.estados sobre todos los pines de los puestos • Interrupción por teclado de 6-bit con característica de wakeup (KBI) • Módulo de Low-voltage inhibit (LVI): • Características de protección del Sistema: – Computer operating properly (COP) watchdog – Detección de Low-voltage con reset – Detección de Código de Operación Ilegal con reset – Detección de dirección ilegal con reset • Pines de interrupción externa asincrónica con pullup (IRQ) internos 1 2 La frecuencia del oscilador está garantizada a ±5% a un rango de temperatura y voltaje luego del ajuste. Módulo de interfaz temporizador de 16-bit (TIM) • 4-canales.1. sensores de temperatura internos. PDIP. La tabla 1 muestra la descripción completa de los pines de entrada salida de la línea de Microcontroladores HC908QT4/QY4 RST. Diagrama en Bloques específico de los Microcontroladores HC908QTQY Descripción General de un Microcontrolador (CPU) Página 8 . SOIC. IRQ: Tienen pull up internos (30K Ohms) PTA[0:5]: Capacidad de alto suministro de corriente PTA[0:5]: Tienen interrupción por teclado programables y pullup Figura 2.• Pin de reset asincrónico maestro (RST) compartido con pines de entrada / salida (I/O) • Power-on reset • Pullups internos sobre IRQ y RST para reducir la cantidad de componentes externos • Memory mapped I/O registers • Power saving stop and wait modes • 16 modos de direccionamiento • Registro índice y puntero de pila de 16-bit • Transferencia de datos memoria a memoria • Instrucción rápida de multiplicación 8 × 8 • Instrucción rápida de división16/8 • Instrucciones en Binary-coded decimal (BCD) • Soporta leguaje C eficiente Este tipo de Microcontroladores viene en varios tipos de encapsulados. TSSOP y DFN. el encapsulado y la distribución de pines del integrado usado en la cátedra se muestra en la Figura 3. entrada TCH1 — Timer Canal 1 I/O KBI1 — interrupción por teclado . activo en bajo con pullup interno y Schmitt trigger KBI3 — interrupción por teclado entrada 3 PTA4 — puerto de entrada/ salida de propósito general OSC2 —salida de oscilador XTAL (solo para XTAL) RC o salida de oscilador interno (OSC2EN = 1 en registro PTAPUE) AD2 — A/D canal 2 .entrada PTA3 — puerto de entrada/ salida de propósito general RST — entrada de reset. Descripción de los pines de entrada/salida de la Línea HC908QT/QY4 Nombre del Pin VDD VSS PTA0 Descripción Suministro de Potencia Tierra PTA0 — puerto de entrada/ salida de propósito general AD0 — A/D canal 0 . RC.entrada 1 PTA2 — puerto de entrada de propósito general IRQ — interrupción externa con pullup programable y entrada de Schmitt trigger KBI2 — interrupción por teclado .Figura 3.entrada 2 TCLK — Timer clock .entrada TCH0 — Timer Canal 0 I/O KBI0 — interrupción por teclado entrada 0 PTA1 — puerto de entrada/ salida de propósito general AD1 — A/D canal 1 .entrada KBI5 — interrupción por teclado entrada 5 8 puerto de entrada/ salida de propósito general Entrada / Salida Power Power Entrada/salida entrada Entrada/salida entrada Entrada/salida entrada Entrada/salida entrada entrada entrada entrada entrada Entrada/salida entrada Entrada Entrada/salida salida entrada entrada Entrada/salida entrada entrada entrada Entrada/salida PTA1 PTA2 PTA3 PTA4 PTA5 PTB[0:7] Descripción General de un Microcontrolador (CPU) Página 9 . Encapsulado específico utilizado en la Cátedra Tabla 1. o entrada de oscilador externo AD3 — A/D canal 3 .entrada KBI4 — interrupción por teclado entrada 4 PTA5 — puerto de entrada/ salida de propósito general OSC1 — XTAL. • Control de DISPLAY LCD NO INTELIGENTE (LD).000 ciclos de escritura / borrado en la peor condición de Temp. 3. • Puede utilizarse como memoria de almacenamiento de Datos temporales.3. • PWM dedicado de 8-bit & 16-bit (Pulse Width Modulation) (línea MR). • Módulo de 2.SR.Seguridad contra lecturas no autorizadas por PASSWORD.10. Descripción General de un Microcontrolador (CPU) Página 10 . dependiendo del tipo de MCU. • Bloque de protección y seguridad flexible .2. posee Microcontroladores de aplicación específica para control. • Programación garantizada a lo largo de un amplio rango de tensiones. y 4 canales de Timers Programables. • I2C (línea SR.100 veces más rápidos que los de otros MCU‘s con FLASH u OTP‘s (2mseg. AP). • Comparadores (línea SR).000 ciclos a temperatura ambiente (+ 20 °C a + 30 ° C). para comunicaciones y con una gran variedad de módulos adicionales. • EEPROM (línea AB32). .+ de 100. . 1 con modulador / demodulador de INFRARROJO (AP). Para 64 Bytes Vs múltiples mseg. 1. . • Sensores de Corriente y Temperatura (línea SR). Ventajas adicionales • Costos de programación reducidos en cuanto a tiempo.QL). / byte).Protección anti-grabación por bloques flexibles y seguros.AP. Módulos Disponibles En las distintas líneas de la Familia HC908 La Familia HC908 de Freescale [1] [2]. . • Osciladores internos (línea QT / QY / QL). • 2 Módulos UART (SCI). • Conversores A/D (8-bits y 10-bits) (línea MR.1. Además. Registro de Código de Condiciones) y la interfaz con el bus interno. Esta frecuencia de Bus implica que cada ciclo de Clock (reloj) del Bus es de 125 nS. El HC908 es un MCU del tipo ―cerrado‖ (single chip) y por lo tanto no se tiene acceso a los BUSES internos del mismo. Dentro de la estructura interna de un HC908. en el Apartado 2 del Apéndice se describen las arquitecturas clásicas más utilizadas en el diseño de Microcontroladores . unidades de control y tiempo. Descripción General del CPU08 El CPU 08 [5] (Figura 4) es el ―corazón‖ de los MCU‘s de la flia. Es una versión muy mejorada del CPU 05. lo que da origen a un mapa ―lineal‖ de acceso a Descripción General de un Microcontrolador (CPU) Página 11 . La frecuencia máxima del BUS interno es de 8 MHZ reales a 5 Volts de alimentación y 4 MHZ a 3 Volts. tanto para memoria de programas como para memoria de datos. El CPU 08 pertenece a la arquitectura del tipo ―Von Neumann‖ clásica ([10]. Puntero de pila. usado en la flia. existe un solo Bus de datos. ver Figura 5. HC908. y un BUS de Direcciones de 16 bits. El segundo bloque contiene la ALU (Unidad Aritmético Lógica. El CPU 08.2. En este tipo de arquitectura. Registros internos de CPU (Acumulador. 2. HC705. Contador de Programa. Registro índice. encargada de todas las operaciones lógicas binarias y aritméticas). para manejar la ―unidad de Ejecución‖. que le permiten direccionar código de hasta 64K bytes. una es ―Opcode Lookahead‖ (Señales para la operación ―prefetch‖) y la otra es Lastbox (Señales para el último ciclo de la instrucción en curso). El primer bloque contiene una Maquina de Estados Finitos. Arquitectura de ejecución del CPU 08 El CPU 08 está dividido en dos bloques la ―Unidad de Control (Control Unit)‖ y la ―Unidad de Ejecución (Execution Unit)‖. Este Bus es denominado IBUS (Bus Interno).1. dos señales de la Unidad de Control manejan el ―prefetch‖ y la carga de instrucciones. Figura 4. característica de la familia 68xx de Motorola y ampliamente utilizada en el mundo. el módulo del CPU se vincula con el resto de los módulos del MCU por medio de un BUS de DATOS interno de 8 bits. [11] y [12]). todas las instrucciones son aplicables en cualquier parte del mapa de memoria sin importar si se trabaja con datos o código. Temporización Interna El clock del CPU08 es más complejo que el del CPU05. Por lo que no es raro encontrar aplicaciones cuyos programas corren desde RAM como si estuvieran en Flash. El ciclo de Bus del CPU consiste de 1 pulso de clock desde cada fase.memoria y por consiguiente no existen instrucciones especiales y diferentes para trabajar con ―DATOS‖ o con ―código de programa‖. Descripción General de un Microcontrolador (CPU) Página 12 . T2. en el HC908. Esto no podría hacerlo una arquitectura Harvard clásica. El inicio de un ciclo de CPU se define como el flanco principal de T1. se comienza a manejar el bus de direcciones recién en el flanco ascendente del tercer pulso de clock T3. (identificadas como T1. T4 en la Figura 6). Para simplificar en la figura siguiente el periodo T de clock se ha unificado en una señal llamada Clock del CPU. se necesitará un cristal de 32Mhz. en lugar de los 2 necesarios en el CPU05. ya que necesita de un clock de 4 fases.2. es decir. Por ello. se necesita un XTAL (Oscilador Externo) 4 veces superior a la frecuencia de Bus deseada. para trabajar con una frecuencia de bus de 8Mhz. 2. CPU 08. Se puede observar que la nueva dirección adelanta al dato asociado por medio ciclo de Bus. T3. Figura 5. a través de la dirección asociada con este ciclo. cuatro pulsos de clock. para ejecutar un ciclo de máquina. De esta forma. Arquitectura de Ejecución. Por ejemplo. 2. Es por esta razón. El ―Prefetch‖ en el CPU08 El CPU05 tiene muchos ciclos en donde el ―Bus de Direcciones‖ y el ―Bus de Datos‖ están ―IDLE‖ (sin actividad).4. T2 – El dato es leído por esa dirección. típicos de estructuras Von Neumann. Para solucionar esto el CPU08 contiene un ―Código de Operación‖ con un mecanismo de Pre búsqueda (Prefetch) hacia adelante. De esta forma se obtienen instrucciones con menor número de ciclos de reloj. Temporización Interna. Unidad de control La unidad de control está formada por: Descripción General de un Microcontrolador (CPU) Página 13 . no debería ser leído en la unidad de control hasta T2 del próximo ciclo.3.Figura 6. Esto incrementa el desempeño eliminando tantos ―ciclos muertos‖ de Bus como sea posible. T2 – se calcula nuevo direccionamiento para Ciclo 2. el dato leído asociado con un nuevo valor de PC generado en T1/T2 del ciclo 1. Por ejemplo. Esto provoca que las distintas instrucciones del mismo consuman más ciclos de reloj de lo que sería necesario. Ciclo 1: T1. a igual código ejecutado. y gracias a esta estructura es que se remueven tantos ciclos de máquina como sean posibles en las distintas instrucciones del CPU08. en la figura anterior. 2. El flujo de instrucciones del CPU08 fue desarrollado para ser tan eficiente como sea posible en una estructura del tipo ―pipeline‖. que la mejora total de desempeño en los HC908 es 5 (cinco) veces superior a la de los HC705. mejorando la velocidad real de ejecución de código. • Secuenciador • Control de almacenamiento • Lógica de control aleatorio Estos bloques forman una máquina de estados finita. se usa para generar la unidad de control que configura la unidad de ejecución. La unidad de ejecución también contiene algunas funciones especiales lógicas para instrucciones inusuales como DAA. produciendo una salida que representa el próximo estado decodificado para la unidad de ejecución (EU). y división (DIV). Descripción General de un Microcontrolador (CPU) Página 14 . Unidad de Ejecución La unidad de ejecución (UE) contiene todos los registros. Por cada ciclo de bus se calcula una nueva dirección pasando por el registro seleccionado valores a lo lardo de los buses de direcciones internos hasta los buffers de direcciones. que es usado para pre cargar (prefetch) la próxima instrucción secuencial. y el interfaz del bus. La unidad de control dispara una por ciclo de bus. multiplicación sin signo (MUL). La lógica aleatoria selecciona la señal apropiada y agrega tiempos a la salida del control de almacenamiento. la unidad aritmético lógica (ALU). El secuenciador provee el próximo estado de la máquina para el control de almacenamiento basado en el contenido del registro de instrucción (IR) y el estado actual de la máquina. pero ejecuta casi un ciclo complete adelante de la unidad de ejecución para decodificar y generar todos los controles para el próximo ciclo.. con la ayuda de lógica aleatoria. la secuencia natural de la máquina de estados se muestra en la figura siguiente.5. El control de almacenamiento será ―strobed‖ (habilitado) cuando la entrada del próximo estado esté estable. Temporización en la Unidad de Control 2. Este resultado. El secuenciador también contiene y controla el registro opcode lookahead. que genera todos los controles para la unidad de ejecución. Figura 7. Una señal de la unidad de control. LASTBOX. Las instrucciones en negrita del ejemplo están graficadas en la Figura 8. OPCODE LOOKAHEAD. OPCODE LOOKAHEAD y LASTBOX se activan al mismo tiempo. Cada instrucción tiene definidos los límites de ejecución y se ejecuta en un número finito de ciclos T1-T2-T3-T4. indica el ciclo cuando el próximo código de operación es pre cargado. Se sugiere ver cada instrucción para comparar el número de ciclos de Bus consumido por cada una de ellas. . Otra señal de control. Carga el próximo Código de Operación en el registro ―Opcode Lookahead‖. el PC apuntará al byte siguiente al código de operación pre cargado por la instrucción. la señal OPCODE LOOKAHEAD se mantiene con anterioridad en la instrucción y el próximo código de operación es pre cargado y mantenido en el registro lookahead hasta el final de la ejecución de la instrucción. . Todas las instrucciones son responsables de cargar el próximo opcode (código de operación) en el registro opcode lookahead en algún momento durante la ejecución. X INCX 80 00 STA $8000 .6. ORG $50 FCB $12 $34 $56 0100 0102 0103 0105 0106 A6 97 e6 5c c7 ORG $100 50 LDA #$50 TAX 02 LDA 2. Para algunas instrucciones. Por lo tanto. indica el último ciclo de la instrucción en ejecución. en el límite de la instrucción). En el ejemplo siguiente los registros OPCODE LOOKAHEAD y LASTBOX se mantienen simultáneamente durante la ejecución de TAX y el incremento INCX. Incrementa el ―Program Counter‖ (PC) a la próxima ubicación. Se debe tener en cuenta que todas las instrucciones son también responsables del incremento del PC después de la precarga de la próxima instrucción que está en marcha. Sucede después del prefetch El PC estará apuntando al byte siguiente del Código de Operación ―Pre-buscado‖. sin embargo. Ejecución de Instrucciones Todas las instrucciones se ejecutan en un número finito de ciclos de Bus. A continuación se muestra un ejemplo de una secuencia de instrucciones concernientes a la actividad en el bus de direcciones y de datos con respecto a los límites de la instrucción. .2. Esta nueva instrucción comienza ejecutándose durante el clock T1 después de haber sido cargada en el registro de instrucción. . En muchos casos. cuando una instrucción finaliza (es decir. pero la instrucción de carga del acumulador desde memoria (LDA) indexada con 8-bit de offset compensar precarga el próximo código de operación antes del último ciclo. A = $50 PC=$0103 A –> X PC=$0104 [X+2] –> A PC=$0106 X = X+1 PC = $0107 A –> $8000 PC = $010A Descripción General de un Microcontrolador (CPU) Página 15 . ver figura 8. El registro opcode lookahead es copiado en el registro de instrucción durante el último ciclo de una instrucción. Registros del CPU08. Descripción de Registros de la CPU La CPU [5] contiene cinco registros tal como se lo presenta en la Figura 9.7.Figura 8. Figura 9. Diagrama de Tiempos de la Ejecución de Instrucciones 2. Descripción General de un Microcontrolador (CPU) Página 16 . Los registros de la CPU son registros de memoria que se alojan dentro del microprocesador (no son parte del mapa de memoria). Esto permite direccionamientos indexados de hasta 64 Kbytes de espacio de memoria. en realidad se está haciendo mención al registro concatenado H:X de 16 bits de largo. el contenido del mismo será $00xx.El CPU08 (CPU de la familia HC908) es una versión mejorada del CPU05 de la familia HC705. Figura 11. en los distintos modos de direccionamiento. resultados de cálculos aritméticos.7. y de manipulación de datos. se menciona el registro "X". Estos registros se encuentran concatenados para formar un único registro H:X.7. Registro Índice (H:X) El registro índice (Figura 11) es el registro utilizado para todas las operaciones indexadas (con y sin offset) que posee el CPU. Registro Acumulador. cuando se utilice el registro índice.2. se puede decir que el CPU08 es 100% compatible en cuanto a código con el CPU05. es un registro de 16 bits que contiene la dirección del próximo lugar en la pila (Stack). Además. Es el registro utilizado por el CPU para mantener en ―orden‖ (guardar y rescatar los datos en RAM) los registros principales del CPU ante una excepción Descripción General de un Microcontrolador (CPU) Página 17 . Figura 10. la instrucción almacenar (sta) causa que el contenido del acumulador sea almacenado en alguna posición de memoria preestablecida.3. Acumulador (A) El acumulador (Figura 10) es un registro de propósitos generales de 8 bits usado para almacenar operandos. 2. por lo que deberá ponerse a cero (forzar el valor $00) la parte superior del registro índice.1. en el. o sea "H". Solo se debe tener en cuenta que cuando en una instrucción con direccionamiento indexado. Por ello. El acumulador es usado durante la ejecución de un programa donde el contenido de alguna posición de memoria es cargado en el acumulador. 2. se pueden encontrar los mismos códigos de instrucciones que en el CPU05 más el agregado de nuevas instrucciones (Ver apartado 3 del Apéndice) y modos de direccionamiento. Registro Índice.7. para guardar total compatibilidad con la familia HC705 (cuyo registro índice es de 8 bits). En el registro Índice puede utilizarse la parte baja ("X"). donde "xx" contendrá el valor del registro "X" propiamente dicho. También. Puntero de Pila (SP) El puntero de pila (SP) como se observa en la Figura 12. Tiene 16 bits de longitud. formado por una parte "baja" (el byte de menor peso) denominado "X" y una parte alta (el byte de mayor peso) denominado "H". 2. es directamente accesible a la CPU para operaciones no aritméticas. De esta forma. La localización de la pila es arbitraria. Gracias a esta característica. es la dirección de la primera instrucción a ser ejecutada después de salir del estado de RESET.en la secuencia del programa. Durante un Reset. el puntero de pila debe apuntar solamente posiciones de RAM. es pre seteado a $00FF. Figura 13. El uso del SP como un segundo registro índice. el puntero de pila. pueda "barrer" todo el espacio de memoria del MCU. el contador de programa (PC) se carga con la dirección contenida en el "vector de reset" que para el MC68HC908 se encuentra en la posición $FFFE y $FFFF. Durante el Reset. La dirección contenida en el vector. Figura 12. La instrucción Reset Stack Pointer (RSP). y puede ser "re-ubicada" en cualquier parte de la memoria RAM. y tiene la ventaja de poder moverse entre $0000 y $FFFF. aunque por su longitud. el PC puede moverse por los 64 Kbytes de espacio de memoria (salvo en los Microcontroladores que tienen memoria menor a 64 Kbytes). cambia el byte menos significativo a $FF y no afecta al byte más significativo. Para una operación correcta. como lo son los saltos a sub-rutinas y los distintos pedidos de interrupción. es el registro utilizado por el CPU para mantener el control de las direcciones de las próximas instrucciones a ser ejecutadas. Este registro tiene una longitud de 16 bits. es muy utilizado en los compiladores de lenguaje de alto nivel como los compiladores "C" y otros. Moviendo el puntero fuera de la página 0 ($0000 a $00FF) libera el espacio del direccionamiento directo. Descripción General de un Microcontrolador (CPU) Página 18 . Puntero de pila. Contador de Programa. en los modos de direccionamiento con el SP (Stack Pointer) con 8 bits de offset y 16 bits de offset.7. El puntero de pila es decrementado cuando un dato es almacenado (Push) dentro de la pila e incrementado cuando un dato es recuperado (Pull) desde la pila. Contador de Programa (PC) El Contador de Programa (PC).4. el puntero de pila (SP) puede funcionar como un segundo registro índice de 16 bits o bien para acceder a datos en la pila. De esta forma. 2. 5. Z = x. Flag N (Negativo) Seteado. El CPU pone en 1 el bit de desborde cuando ocurre un desborde por complemento a Dos en una operación aritmética con signo.1. Flag V (Bit de Desborde) Es utilizado en ―chequeos‖ de operaciones aritméticas signadas. 2. I = 1. donde x es un valor indeterminado.7.2.7.3. C = x. 2. máscara de interrupción (I). semi-acarreo (H). Registro de Código de Condición (CCR) El registro de código de condición contiene una máscara de interrupción y cinco indicadores de estado que reflejan el resultado de operaciones aritméticas y de otro tipo efectuadas por el CPU con anterioridad.5. Flag I (Mascara Global de Interrupciones) Cuando está seteada. Los cinco flags (banderas) son. 2.5.5. negativo (N). deshabilita las interrupciones del CPU. H = x. y BLT usan este bit de desborde. BLE. 2. se utiliza en operaciones aritméticas BCD. Flag H (semi-acarreo) El bit es ―Seteado‖ si un carry (acarreo) ocurre desde el bit 3 al bit 4. Registro de código de condición. N = x.4. Las instrucciones de salto condicionales signados como BGT.7. BGE.2. Figura 14. cero (Z) y acarreo / préstamo (C).7.7. si el bit 7 está seteado en el Acumulador. Descripción General de un Microcontrolador (CPU) Página 19 . Luego de un reset los flags tomarán los siguientes valores: V = x. Desborde ―overflow‖ (V).5. 5.5. 2. Descripción General de un Microcontrolador (CPU) Página 20 . Seteado si se produce un carry o borrow durante una operación. Flag C (acarreo / préstamo).2. Flag Z (cero) Este bit es seteado si todos los bits en el Acumulador son ceros.6.7.7.5. estos son: inherente. Esta explicación describe qué sucede en la CPU durante cada ciclo de reloj del procesador. inmediato. Esta es una instrucción de dos bytes. [11] difieren la manera en que una instrucción obtendrá el dato requerido para su ejecución. Para cada modo de direccionamiento se explica en detalle una instrucción. con desplazamiento de 16 bits. directo a directo. con 8 y 16 bits de desplazamiento. directo. con desplazamiento de 8 bit y post incremento ). En los siguientes párrafos se provee una descripción general y ejemplos de los distintos modos de direccionamiento.3.1. Descripción General de un Microcontrolador (CPU) Página 21 . En estos ejemplos. sin desplazamiento con post incremento. relativo y de memoria a memoria (inmediato a directo. 3. (2) La CPU lee el dato inmediato $FF de la posición de memoria $0301 y lo carga en el acumulador. indexado (sin desplazamiento. directo a indexado con post incremento . Este modo de direccionamiento tiene un solo operando que está contenido en el byte o los bytes seguidos inmediatamente al código de operación. Secuencia de Ejecución: $0300 $A6 (1) $0301 $FF (2) Explicación: (1) La CPU lee el código de operación $A6 . Este modo es usado cuando hay un valor o constante conocido al momento de escribir el programa que no cambiará durante la ejecución del programa. uno para el código de operación y otro para el byte de dato inmediato. indexado con post incremento a directo. los números de secuencia entre corchetes hacen referencia a un ciclo de reloj específico. con desplazamiento de 8 bits. En los pequeños Microcontroladores MC68HC908. cargar el Acumulador con el valor inmediato. El término dirección efectiva es usado para indicar la dirección de la posición de memoria donde el argumento para una instrucción es buscado o almacenado. Los modos de direccionamiento [4]. Modos de Direccionamiento Los modos de direccionamiento de la CPU proveen la capacidad de acceder a memoria de diferentes maneras. La CPU del MC68HC908 [3] usa siete modos de direccionamiento para acceder a memoria.Carga el acumulador con el valor inmediato siguiente al código de operación. extendido. En la Figura 15 se representa el espacio de memoria y el contenido del registro de este ejemplo. Ejemplo: Código de operación: 0300 A6 02 Formato de instrucción en Assembler: LDA #$FF. con Stack pointer y 8 bit de desplazamiento. con stack pointer y 16 bits de desplazamiento. todas las variables del programa y los registros de I/O caben en el área de memoria que va de $0000 a $00FF donde el modo de direccionamiento más comúnmente usado es el direccionamiento directo. El valor está indicado por el símbolo #. Modo de Direccionamiento Inmediato Especifica el valor directamente. En el apéndice está disponible la descripción de cada instrucción. no la dirección del valor. Ejemplo: Código de operación: 0300 4F Formato de instrucción en Assembler: CLRA. Los operandos (si los hay) son sólo los registros de la CPU o bien valores de datos almacenados en la pila. (2) La CPU almacena el valor 00 en el acumulador. Esta es una instrucción de un solo byte. Modo de Direccionamiento Inherente En el modo de direccionamiento inherente.Figura 15.2. toda la información requerida para la operación ya es implícitamente conocida por la CPU y no es necesario recuperar un operando exterior desde la memoria. 3. Ejemplo de direccionamiento inmediato. Descripción General de un Microcontrolador (CPU) Página 22 . limpia el Acumulador Secuencia de Ejecución: $0300 $4F (1) y (2) Explicación: (1) La CPU lee el código de operación $4F – limpiado del acumulador. Figura 16. Ejemplo de direccionamiento inherente. 3.3. Modo de Direccionamiento Directo El modo de direccionamiento directo, es similar al extendido excepto que la parte alta de la dirección del operando se asume de valor $00. De tal manera, que sólo es necesario incluir el byte de menos peso de la dirección del operando en la instrucción. Este modo es usado para acceder a los primeros 256 bytes de memoria. Esta área de memoria se denomina página directa e incluye a los registros de RAM e I/O del interior del chip. Este modo es eficiente tanto en economía de espacio de memoria como en tiempo de ejecución. Esta es una instrucción de dos bytes, uno para el código de operación y otro para el byte de menor peso de la dirección del operando. Ejemplo: Código de operación: 0300 B6 50 Formato de instrucción en Assembler: LDA $50; carga el acumulador desde una dirección de página directa. Secuencia de Ejecución: $0300 $B6 (1) $0301 $50 (2) y (3) Explicación: (1) la CPU lee el código de operación $B6 - Cargar del acumulador usando el modo de direccionamiento directo. (2) La CPU lee $50 de la posición de memoria $0301. Este $50 es interpretado como la mitad de menor peso de una dirección de página directa (desde $0000 hasta $00FF). (3) La CPU arma la dirección directa completa $0050 asumiendo el valor del byte de mayor peso en $00, con el valor previamente leído del byte de menor peso. Esta dirección es colocada en el bus de direcciones y la CPU lee el valor del dato contenido en la posición de memoria $0050 y lo carga en el acumulador (ver figura 17). Descripción General de un Microcontrolador (CPU) Página 23 Figura 17. Ejemplo del modo de direccionamiento directo. 3.4. Modo de Direccionamiento Extendido En el modo de direccionamiento extendido, la dirección del operando está contenida en los dos bytes siguientes al código de operación. Este modo es usado para acceder a cualquier posición de memoria mayor a $00FF, incluyendo espacio de RAM mayor a $00FF, ROM o FLASH. Esta es una instrucción de tres bytes, uno para el código de operación y otros dos para la dirección del operando. Ejemplo: Código de operación: 0300 C6 04 00 Formato de instrucción en Assembler: LDA $0400; Carga el acumulador desde una dirección extendida. Secuencia de Ejecución: $0300 $C6 (1) $0301 $04 (2) $0302 $00 (3) y (4) Explicación: (1) La CPU lee el código de operación $C6 - Carga del acumulador usando el modo de direccionamiento extendido. (2) La CPU lee $04 de la posición de memoria $0301. Este $04 es interpretado como la mitad de mayor peso de una dirección. (3) La CPU lee $00 de la posición de memoria $0302. Este $00 es interpretado como la mitad de menor peso de una dirección. (4) La CPU arma la dirección extendida completa $0400 con los dos valores previamente leídos. Esta dirección es colocada en el bus de direcciones y la CPU lee el valor del dato contenido en la posición de memoria $0400 y lo carga en el acumulador. Descripción General de un Microcontrolador (CPU) Página 24 Figura 18. Ejemplo de direccionamiento extendido. 3.5. Modo de Direccionamiento Indexado En el modo de direccionamiento indexado, la dirección efectiva del operando es variable y depende de dos factores: 1) el contenido actual del registro índice (X). 2) el desplazamiento contendido en el o los bytes siguientes al código de operación. La CPU del MC68HC908 soporta tres tipos de direccionamientos indexados: sin desplazamiento, con desplazamiento de 8 bits y con desplazamiento de 16 bits. Un buen ensamblador usará el modo de direccionamiento indexado que requiera el menor número de bytes para expresar el desplazamiento. 3.5.1. Direccionamiento indexado ―sin desplazamiento (Offset)‖ Se especifica el contenido del Registro índice H:X como dirección del operando. En el HC908 el registro índice es de 16 Bits, por lo que el compilador assembler interpretará ―H:X‖ cuando solo vea ―X‖ en la instrucción con direccionamiento indexado. En el modo de direccionamiento indexado sin desplazamiento, la dirección efectiva del operando para la instrucción está contenida en los 16 bits del registro índice. Ejemplo: Código de operación: 0300 7F Formato de instrucción en Assembler: CLR ,X; limpiar la dirección apuntada por X. Secuencia de Ejecución: $0300 $7F (1), (2) y (3) Explicación: (1) La CPU lee el código de operación $7F – borrar la dirección apuntada por el registro índice. (2) la CPU arma la dirección completa sumando $0000 al contenido del registro índice de 16 bits (X:H). Descripción General de un Microcontrolador (CPU) Página 25 (3) La CPU arma la dirección completa sumando el valor antes leído ($10) al contenido del registro índice de 16 bits (X:H). Ejemplo del modo de direccionamiento indexado sin desplazamiento. El contenido del registro índice no es alterado. (3) y (4) Explicación: (1) La CPU lee el código de operación $6F – borrado del contenido de la dirección apuntada por el registro índice. 3. Descripción General de un Microcontrolador (CPU) Página 26 .2.X.5.(3) La CPU borra el valor del dato contenido en esa posición de memoria. (2) La CPU lee $10 de la posición de memoria $0301. usando el modo de direccionamiento indexado con desplazamiento de 8 bits. [4] la CPU borra el valor del dato contenido en esa posición de memoria. Ejemplo: Código de operación: 0300 6F 10 Formato de instrucción en Assembler: CLR 10. Figura 19. Limpia la dirección indicada por el décimo primer ítem de la tabla apuntada por X. El byte de desplazamiento suministrado en la instrucción es un número entero no signado de 8 bits. Este $10 es interpretado como un desplazamiento de 8 bits. uno para el código de operación y otro para el byte de desplazamiento. Secuencia de Ejecución: $0300 $6F (1) $0301 $10 (2). la dirección efectiva es la suma del contenido del registro índice de 16 bits y el byte de desplazamiento siguiente al código de operación. Direccionamiento indexado con ―desplazamiento (offset) de 8 bits‖ En el modo de direccionamiento indexado con desplazamiento de 8 bits. Esta es una instrucción de dos bytes. Este $01 es interpretado como la mitad de mayor peso de una dirección base.3. Este $00 es interpretado como la mitad de menor peso de una dirección base. ítem de la tabla $0100 el valor del acumulador. Descripción General de un Microcontrolador (CPU) Página 27 . (2) La CPU lee $03 de la posición de memoria $0301. Direccionamiento indexado con ―desplazamiento (offset) de 16 bits‖ En el modo de direccionamiento indexado con desplazamiento de 16 bits. (4) La CPU arma la dirección completa sumando la dirección base de 16 bits antes leída ($0100) al contenido del registro índice de 16 bits (X:H). El byte de desplazamiento suministrado en la instrucción es un número entero no signado de 16 bits. (3) La CPU lee $00 de la posición de memoria $0302.5. Ejemplo de direccionamiento indexado con 8 bits de offset.Figura. 20. Secuencia de Ejecución: $0300 $D7 (1) $0301 $01 (2) $0302 $00 (3). Esta es una instrucción de tres bytes. (4) y (5) Explicación: (1) La CPU lee el código de operación $D7 – almacena en memoria el dato del acumulador usando el modo de direccionamiento indexado con desplazamiento de 16 bits. uno para el código de operación y otros dos para los bytes de desplazamiento. Ejemplo: Código de operación: 0300 D7 01 00 Formato de instrucción en Assembler: STA $0100. 3. la dirección efectiva es la suma del contenido del registro índice de 16 bits y los dos bytes de desplazamiento siguientes al código de operación.X . almacena en el X+1er. (5) Esta dirección es colocada en el bus de direcciones y la CPU almacena el valor del dato contenido en el acumulador en la posición de memoria. El contenido del registro índice no es alterado. la mayoría de los ensambladores usarán instrucciones de 8 bit de offset. es el correspondiente a los 8 bit de offset.Figura 21. Direccionamiento indexado de 8 y 16 bits de desplazamiento. Figura 22. El Offset es la dirección base de la estructura.4.5. El byte inmediatamente seguido al byte del código de operación. El registro índice contiene el desplazamiento del Navo elemento. Direccionamiento Indexado Usando el ―Stack pointer‖ y ―8-Bit de Offset‖ La localización de memoria se obtiene de hacer: 8 bit offset no signado + Registro SP no signado. Ejemplo de direccionamiento indexado con 16 bits de offset. En la figura 22 se esquematiza el funcionamiento de este direccionamiento.5. El Registro SP no es afectado. 3. 3. Descripción General de un Microcontrolador (CPU) Página 28 . Direccionamiento Indexado ―8 & 16 Bit de desplazamiento (Offset)‖ Comúnmente usado para acceder a elementos de estructura de datos.5. En el caso que la tabla se encuentre en los primeros 256 bytes de memoria. 5.6.Figura 23. Los Compiladores a menudo colocan parámetros para procedimientos y almacenaje temporal en el stack.7.5. Figura 24. Se debe notar que si las interrupciones están deshabilitadas. Ejemplo de direccionamiento indexado usando SP y 16 bits de offset. una manera eficiente de acceder a esa información es diseccionando el stack pointer. son los correspondientes a los 16 bit de offset. 3. Descripción General de un Microcontrolador (CPU) Página 29 . Ejemplo de direccionamiento indexado usando SP y 8 bits de offset. El Registro SP no es afectado. 3. el SP puede ser usado como un registro índice adicional (menos eficiente por el pre-byte). Stack Pointer ―8 bit de offset‖ Soporta Lenguajes de Alto Nivel. Direccionamiento Indexado usando ―Stack pointer‖ y ―16-Bit de Offset ― La localización de memoria se obtiene de hacer: 16 bit offset no signado + registro SP no signado. Los bytes inmediatamente seguidos al byte del código de operación. Después que se calcula la dirección del operando.Figura 25. H:X se incrementa en 1. 3.8. Descripción General de un Microcontrolador (CPU) Página 30 . mas post incremento. H:X se incrementa en 1.5. Stack Pointer con 8 bit de offset.5.9. Direccionamiento Indexado ―con 8 bit de offset y Post Incremento‖ Igual al direccionamiento indexado con 8 bit offset. Direccionamiento Indexado ―sin offset con Post Incremento‖ El Registro índice H:X contiene la dirección del operando. 3. Después que se calcula la dirección del operando. Figura 26. Ejemplo de direccionamiento indexado sin offset con post incremento. de otro modo. = EA. El ensamblador calcula el desplazamiento relativo de 8 bits con signo. 3. el contenido de los 8 bits. Un programador especifica el destino de una bifurcación como una dirección absoluta (o etiqueta que hace referencia a una dirección absoluta). es decir. el cual tiene básicamente las siguientes características:      Solo para instrucciones de salto (branch) El PC es incrementado en 2 desde OCL (debido a la precarga) 8 bit de offset. siguiente al código de operación es sumado al contenido del contador de programa para formar la dirección de bifurcación efectiva. el control continúa bajo la instrucción inmediata posterior a la instrucción de bifurcación (el Contador de Programa no es afectado).PC Descripción General de un Microcontrolador (CPU) Página 31 .Figura 27. Modo de Direccionamiento Relativo El modo de direccionamiento relativo es usado solamente por las instrucciones de bifurcación (saltos condicionales). En la figura 28 se puede observar el esquema de este tipo de direccionamiento. del byte con signo. el byte de desplazamiento es un número signado según el convenio de ―complemento a dos‖ con un rango que va desde -128 hasta +127 bytes (respecto a la dirección de la instrucción inmediata posterior a la instrucción de bifurcación). Ya que es deseable bifurcar en cualquier sentido. El rango es de -128 + 127 desde PC Dirección efectiva (EA) = PC + desplazamiento (8 bits de offset) Desplazamiento calculado por el Assembler: desp. Ejemplo de direccionamiento indexado con 8 bit de desplazamiento y post incremento. salvo las bifurcaciones en su versión de manipulación de bits generan dos bytes de código de máquina: uno para el código de operación y otro para el desplazamiento relativo. Las instrucciones de bifurcación. Contador de Programa = Contador de Programa + 8 bit offset signado.6. Si la condición de salto es verdadera. que es colocado en memoria luego del código de operación de la bifurcación. la CPU armará la dirección completa sumando el desplazamiento signado antes leído ($AE) al contenido del registro contador de programa para obtener la dirección destino de la bifurcación. Esto provoca que la ejecución del programa continúe desde una nueva dirección ($8100).Figura 28. Descripción General de un Microcontrolador (CPU) Página 32 . Ejemplo: Código de operación: 8150 27 AE Formato de instrucción en Assembler: BEQ $8100. Si el bit Z está en uno. salta a $8100 si Z = 1 (si el resultado de la operación anterior es igual a cero).Bifurcar si Z = 1. Modo de direccionamiento relativo. Secuencia de Ejecución: $8150 $27 (1) $8151 $AE (2) y (3) Explicación: (1) La CPU lee el código de operación $27 . (3) Si el bit Z está en cero. Después de este ciclo el contador de programa apunta al primer byte de la próxima instrucción ($8152). Este $AE es interpretado como el valor de desplazamiento relativo. nada sucede en este ciclo y el programa debe continuar con la próxima instrucción. (2) La CPU lee $AE de la posición de memoria $8151. El bit Z del registro de código de condición será uno si el resultado de la operación aritmética o lógica previa fue cero. 7. Indexado a Directo con Post Incremento. La Fuente es un byte ―valor inmediato‖ y el Destino debe estar en los primeros 256 bytes de memoria. La expresión debe comprender: MOV Dirección Fuente. Directo a Indexado con Post Incremento. Direccionamiento Memoria a Memoria ―Directo a Directo‖. pero puede utilizarse con instrucciones MOV solamente.7. Dirección Destino.Figura 29.2. Figura 30. 3. Hay cuatro variantes de direccionamiento memoria a memoria: Inmediato a Directo. Direccionamiento Memoria a Memoria ―Inmediato a Directo ―. Descripción General de un Microcontrolador (CPU) Página 33 . 3. Direccionamiento memoria a memoria. No usa ni afecta registros del CPU. Directo a Directo. Direccionamiento Memoria a Memoria Usado para mover información desde una locación de memoria a otra.7. Es más eficiente que la combinación Load/Store. Se usa comúnmente en inicialización de variables o registros en RAM. 3.1. Ejemplo de direccionamiento relativo. excepto cuando se usa direccionamiento indexado con post incremento. La Fuente y el destino deben estar en los primeros 256 bytes de memoria. ―Inmediato a Directo‖. Comúnmente se usa para movimiento de datos desde una página cero a otro lugar dentro de la misma página (mover datos dentro de la misma RAM). 3. Figura 32. Comúnmente se usa para escribir datos desde un dispositivo de comunicación a un buffer en RAM o Flash. Descripción General de un Microcontrolador (CPU) Página 34 . La Fuente puede ser cualquier lugar en el mapa de memoria y el Destino debe estar en los primeros 256 bytes de memoria. ―directo a directo‖.7. Direccionamiento memoria a memoria ―indexado con post incremento a Directo‖ 3. Direccionamiento Memoria a Memoria ―Directo a Indexado con Post Incremento‖ La Fuente debe estar en los primeros 256 bytes de memoria y el Destino puede ser cualquier lugar en el mapa de memoria.Figura 31. Comúnmente se usa para escribir datos a un dispositivo de comunicación desde un buffer en RAM o Flash. Direccionamiento memoria a memoria. 3.4. Direccionamiento Memoria a Memoria ―Indexado con Post Incremento a Directo ―.7. Figura 33. Direccionamiento memoria a memoria ―Directo a Indexado con post Incremento‖. Descripción General de un Microcontrolador (CPU) Página 35 . BSR • $FE01 — Registro de estado Reset.3. BRKL • $FE0B — Registro de estado y control Break. Los demás registros de entrada/salida tienen las siguientes direcciones: • $FE00 — Registro de estado Break. MC68HC908QY2.1. En la Figura 34 la memoria reservada está indicada con la palabra reservada o con la letra R. BRKAR • $FE03 — Registro de control Break flag. contiene registros de control. SRSR • $FE02 — Registro auxiliar Break. 4. Ubicaciones de Memoria no Implementada Acceder a ubicaciones no implementadas puede tener respuestas impredecibles en la operación del MCU. INT2 • $FE06 — Registro de estado Interrupt 3. ubicadas en ROM 4. y MC68HC908QY1 • 128 bytes de RAM • 48 bytes de vectores definidos por el usuario. Sección Entrada/ Salida (I/O) Las direcciones $0000–$003F. LVISR •$FE0D — Reservado • $FFBE — Registro de protección de bloque FLASH. 4. INT1 • $FE05 — Registro de estado Interrupt 2. El mapa de memoria que se encuentra en la figura 34 muestra: • 4096 bytes de FLASH de usuario para MC68HC908QT4 y MC68HC908QY4 • 1536 bytes de FLASH de usuario para MC68HC908QT2. FLCR • $FE09 — Registro de dirección Break parte alta. BRKH • $FE0A — Registro de dirección Break pate baja.2. INT3 •$FE07 — Reserved • $FE08 — FLASH control register. BFCR • $FE04 — Registro de estado Interrupt 1. Introducción La CPU08 puede direccionar 64 Kbytes de espacio de memoria [3]. FLBPR • $FFC0 — Valor de trim del OSC interno — Opcional Descripción General de un Microcontrolador (CPU) Página 36 . MC68HC908QT1. Memoria 4.4. ubicados en FLASH • 416 bytes de memoria de solo lectura de monitor (ROM) • 1536 bytes de FLASH de programa y de rutinas de borrado. estado y datos.4. Ubicaciones de Memoria Reservada Acceder a ubicaciones de memoria reservadas puede tener efectos impredecibles sobre la operación del MCU. BRKSCR • $FE0C — Registro de estado LVI. • $FFFF — Registro de control COP. COPCTL Figura 34. Mapa de memoria de la línea HC908QT/QY Descripción General de un Microcontrolador (CPU) Página 37 . Durante una llamada a subrutina.6. vectores de interrupción del usuario. 4. la CPU usa 5 bytes de la pila para guardar el contenido de los registros de la CPU. 4096 bytes: MC68HC908QY4 y MC68HC908QT4 • $F800 – $FDFF.4. El puntero de Pila se decrementa durante el ingreso de datos y se incrementa al extraer datos de la pila. Memoria de Acceso Aleatorio (RAM) Las direcciones $0080–$00FF corresponden a la ubicación de la memoria RAM [3]. Los rangos de direcciones para la memoria de usuario y vectores son: • $EE00 – $FDFF. memoria de usuario. Es importante comprender que para una operación correcta el puntero de pila debe apuntar solo a las direcciones de RAM. MC68HC908QT2. La ubicación de la Pila de RAM es programable. La operación de programado y borrado se habilita a través del uso de un pulso de carga interno. La CPU puede sobre escribir los datos en la RAM durante una subrutina o durante la operación de apilado en una interrupción. [11] y [12]. 1536 bytes: MC68HC908QY2. la CPU usa 2 bytes de la pila para almacenar la dirección de retorno de la subrutina. 48 bytes. Memoria FLASH (FLASH) A continuación se describe el funcionamiento de la memoria FLASH. El tamaño mínimo de memoria flash que se puede borrar es de 64 bytes. Las operaciones de programado y borrado se facilitan a través de bits de control en el registro de control de FLASH (FLCR). La memoria FLASH puede ser leída. Descripción General de un Microcontrolador (CPU) Página 38 . Se debe tener cuidado al usar subrutinas anidadas. Antes de procesar una interrupción. MC68HC908QY1 y MC68HC908QT1 • $FFD0 – $FFFF.5. El puntero de pila de 16-bit permite a la pila estar en cualquier espacio de memoria de los 64-Kbyte. programada y borrada desde un simple suministro externo. La memoria flash consiste de un arreglo de 4096 o 1536 bytes con 48 bytes adicionales para vectores de usuario. memoria de usuario. y el máximo tamaño de memoria FLASH que puede ser programado en un ciclo de programa es de 32 bytes (una columna). pero su consumo es despreciable. es el encargado de ―quitarle‖ la señal de clock a un módulo determinado. sin perder funcionalidad operativa. Registro de estado de Reset del SIM El SRSR registra la causa de la última secuencia de reset.1. Bus de Clocks El bus clocks toma la salida del ―Modulo de generación de Clock‖ (CGM). Además.2. para así garantizar el modo de bajo consumo. en el cual el Microcontrolador mantiene la señal de clock. 5. 5. Control de Reset 5. Descripción General de un Microcontrolador (CPU) Página 39 . • STOP – Detiene todos los bus clocks. y tiene múltiples funcionalidades [4]. – Activa la señal SIMOSCEN • Apaga los circuitos osciladores del CGM. pero no todos los Microcontroladores tienen las funcionalidades que aquí se detallan.5. Una de las principales funciones del SIM es la de controlar y distribuir las señales de Clock hacia los distintos módulos del MCU.3.1. Características • Deriva los ―Bus clocks‖ desde el CGM (Modulo de generación de clock) • Generación y control del clock bus para el CPU y periféricos – Stop/ wait / reset / break entrada y recupero – Control interno del clock • Control del Master Reset. de la siguiente forma: • WAIT – Detiene el clock del CPU solamente. 5. (Solamente un bit será seteado) 3 Low Power: Es un modo de bajo consumo. pues. Módulo de Integración del Sistema (SIM) Este Módulo se encuentra en toda la Familia del HC908 [3]. su acción es fundamental en los modos ―low power‖. incluyendo al Power On Reset (POR) y al COP time out • Control de interrupciones: – Conocimiento de la temporización – Control de la temporización por Arbitraje – Generación del Vector de Direcciones ―Adress Vector‖ • Habilitación/ Des-habilitación de la temporización en el CPU • Arquitectura Modular expandible hasta 128 fuentes de Interrupción (concebida para futuros derivativos).3. distribuye los clocks a los sub módulos y controla los clocks del sistema en los modos ―low power3‖. Modulo SIM: • Recibe todas las interrupciones • Realiza arbitrajes • Pasa las interrupciones de más alta prioridad al CPU Descripción General de un Microcontrolador (CPU) Página 40 . • Computer Operating Properly Module (COP). indica si el ―timer‖ ha expirado – El Timer debe ser periódicamente reseteado La señal interna de reset puede ser generada forzando el pin RST a low.Figura 35. – Tiempos de seteo del bit PIN: POR/LVI Resets = 4163 = (4096 +64 + 3) Ciclos Todos los otros Resets = 67 = (64+3) Ciclos 5. Registro de estados de reset del SIM (SRSR). Los módulos periféricos On-Chip generan interrupciones enmascarables. Estas interrupciones serán reconocidas solamente si el bit ―interrupt mask – mascara de interrupciones‖ está borrado y también serán indicadas por el ―flag de estado de la interrupción‖. Fuentes de Reset en el MCU: • Power-on Reset Module (POR) • External Reset Pin (RST) • El Illegal Opcode Reset ocurre cuando el CPU decodifica instrucciones que no son del ―opcode map‖. El bit ―PIN‖ del SIM reset Status Register (SRSR) es seteado si: – RST es mantenido bajo por un mínimo de 67 ciclos de clock. • Low-Voltage Inhibit Module (LVI) (supervisor de baja tensión). indica cuando VDD cae por debajo de un límite prefijado. Interrupciones El 68HC908 puede procesar hasta 128 resets/interrupciones separadas. Todas las interrupciones están priorizadas. • El Illegal Address Reset ocurre cuando el CPU trata de buscar una instrucción desde una dirección que no está definida en el mapa de memoria. El Bit indicador de la fuente de Reset es limpiado por lectura del SRSR o por el modulo de power on reset.4. Modificando el COP inmediatamente después de un reset y antes de entrar o después de excitar el modo stop. Si no se borra por software. Figura 36. Diagrama en bloques del Módulo COP Descripción General de un Microcontrolador (CPU) Página 41 . Se puede prevenir un reset de COP borrando el contador periódicamente. El módulo COP ayuda a recuperar la línea de ejecución de código del software.48 ms. Ya que la subrutina podría mantener el COP generando un reset mientras el programa principal no está trabajando correctamente.6. en el registro de configuración 1. Descripción Funcional El contador del COP es un contador de 6 bits que se ejecuta libremente precedido por el del Módulo de Integración del sistema (SIM) de 12 bits. Un reset causado por el COP pone el pin RST en bajo (si el bit RSTEN es seteado en el registro CONFIG1) para 32 x BUSCLKX4 ciclos y setear el bit de COP en el registro de estado del reset (RSR). el oscilador interno de 12. Se debe colocar la instrucción de borrado de COP en el programa principal y no en una subrutina de interrupción.1.2.8-MHz da un periodo de time out de COP de 20. COPRS. Con una opción de desborde de 262128 ciclos de BUSCLKX4. dependiendo del estado del bit de selección de tasa del COP. esto último está bien detallado en la sección del SIM. se garantiza el máximo tiempo antes del primer desborde de contador de COP. Introducción El Módulo de operación correcta del computador (COP) [3] contiene contadores ejecutándose libremente que generan un reset si se produce un desborde. El módulo COP se puede deshabilitar a través del bit COPD en el registro de configuración 1 (CONFIG1). 6. Módulo de Operación Correcta del Computador (COP) 6. Escribiendo cualquier valor en la dirección $FFFF. antes de la ocurrencia de un desborde (overflow). el contador del COP desbordará y generará un reset asincrónico después de 262128 o 8176 ciclos de BUSCLKX4. se previene un reset por COP borrando el contador del COP y las etapas 12–5 del contador del SIM. Registro de Control (COPCTL) 6. o la del oscilador-RC. Power-On Reset Reset Interno COPD (Deshabilita COP) COPRS (selección de tasa de COP) 6. Señales I/O La siguiente tabla describe las señales de la figura anterior: Tabla 2. Leyendo la dirección $FFFF retorna el byte menos significativo del vector de reset. El power on reset (POR) borra el contador del SIM 4096 × BUSCLKX4 ciclos después del power up.6. Leyendo el registro de control de COP se obtiene el byte menos significativo del vector de reset. Escribiendo algún valor en la dirección $FFFF se borra el contador del COP e inicia un nuevo periodo de time out. Registro de Control de COP El registro de control del COP (COPCTL) [3] se encuentra ubicado en la dirección $FFFF y se superpone con el vector de reset. Escribiendo un valor al registro de control del COP (COPCTL). la del cristal. Figura 37.6. La instrucción STOP borra el contador del SIM. Un reset interno borra el contador del SIM y el del COP. La frecuencia de BUSCLKX4 es igual a la del oscilador interno.5. Interrupciones El COP no genera requerimientos de interrupciones a la CPU.4. Se borra el contador del COP y las etapas 12–5 del contador del SIM. La señal COPRS muestra el estado de la tasa COP seleccionada en el bit (COPRS) en la configuración de Registro 1 (CONFIG1).3. Modo Monitor El COP es deshabilitado en modo monitor cuando VTST aparece sobre el pin IRQ. Descripción General de un Microcontrolador (CPU) Página 42 . La señal COPD refleja el estado del bit que deshabilita el COP (COPD) en el registro de configuración 1(CONFIG1). 6. Señales de Entrada al módulo COP Señales BUSCLKX4 Instrucción STOP Escritura de COPCTL Descripción BUSCLKX4 es la señal de salida del oscilador. 6. Para prevenir un reset de COP se deberá borrar periódicamente el contador del COP. cuando el bit BDCOP es seteado en el registro auxiliar de break (BRKAR). 6. 6. Editando el COP antes de entrar o después de excitar el modo stop para asegurar un periodo de time out de COP después de entrar o excitar el modo stop.7.7.2 Modo Stop El modo Stop deshabilita la entrada BUSCLKX4 al COP y borra el contador del SIM.1 Modo Wait El COP continúa operando durante el modo wait. Descripción General de un Microcontrolador (CPU) Página 43 .6.8 Módulo COP durante el Modo Break El COP es deshabilitado durante un break de interrupción con modo monitor.7 Modos de Low-Power Las instrucciones WAIT y STOP ponen al MCU en bajo consumo en modos de espera. Características Entre las características del módulo LVI se incluyen: • Reset programable LVI • Consumo de potencia programable • Nivel de voltaje seleccionable LVI • Operación de modo stop programable 7.7. Figura 38. LVISTOP. Seteando el bit de modo stop del LVI. que monitorea el voltaje sobre el pin VDD y puede forzar un reset cuando el voltaje VDD cae debajo del nivel de falla de tensión LVI. VTRIPF. LVI5OR3. se habilita el módulo LVI para generar un reset cuando VDD caiga por debajo de un determinado voltaje. El módulo LVI contiene un circuito de referencia y comparador. 7. VTRIPF.1. El LVI se habilita fuera del reset. Módulo Supervisor de Bajo Voltaje (LVI) Esta sección describe el módulo low voltage inhibit (LVI) [3]. LVIPWRD.2 Descripción Funcional La figura 38 muestra la estructura del modulo LVI. Borrando el bit de des-habilitación de reset del LVI. LVIPWRD. Diagrama en Bloques del Módulo LVI Descripción General de un Microcontrolador (CPU) Página 44 . y LVIRSTD son opciones seleccionables por el usuario que se encuentran en el registro de configuración (CONFIG1). se habilita el LVI para monitorear el voltaje VDD. LVIRSTD. se habilita el LVI para operar en modo stop. Borrando el bit de des habilitación de potencia. LVISTOP. Descripción General de un Microcontrolador (CPU) Página 45 . el MCU mantiene el reset hasta que VDD supere el voltaje de. Operación de Reset Forzado En aplicaciones que requieren que VDD se mantenga por encima del nivel VTRIPF.3. En las especificaciones eléctricas de la hoja de datos se describe el punto límite de caída por defecto. Se debe borrar el bit LVIPWRD para habilitar el módulo LVI. VTRIPR es mayor que VTRIPF por la histéresis de tensión. el modo por defecto del LVI es a 3V. Registro de Estados del Módulo LVI El registro de estados del LVI (LVISR) indica si la tensión VDD ha caído debajo del nivel VTRIPF mientras el reset del LVI ha estado desactivado. Operación de Polling en el LVI En las aplicaciones que pueden operar en niveles VDD por debajo del nivel VTRIPF. y el bit LVIRSTD debe ser seteado para deshabilitar el reset LVI.2.1.3.2. a ser configurado para operar a 3V. Protección Histéresis de Tensión Una vez que el LVI se ha disparado. la habilitación del reset LVI permite al módulo LVI resetear el MCU cuando VDD cae por debajo del nivel VTRIPF. VTRIPR.2.Seteando el bit de punto límite de caída LVI a 5-V o 3-V. VTRIPR. La salida de la comparación controla el estado del flag LVIOUT en el registro de estados del LVI (LVISR) y puede ser utilizada para la operación de polling en el LVI cuando el reset está desactivado.4. Si se usa un sistema a 5V se deberá setear el bit LVI5OR3 para poner el punto de caída a 5V. Luego de un power on reset. (por la caída de VDD por debajo de VTRIPF). LVI5OR3. Selección de nivel de caída del LVI El bit LVI5OR3 en el registro de configuración permite seleccionar si el LVI será configurado para protección de VDD a 5V o 3V. Una vez que ocurre un reset por LVI. 7. se habilita el punto límite de caída de tensión. VHYS. 7. el software puede monitorear VDD mediante sucesivas lecturas (polling) del bit LVIOUT. VTRIPF. 7.2. Borrando el bit LVI5OR3 se habilita el punto límite de caída de tensión. a ser configurado para operar a 5V. el LVI mantendrá la condición de reset hasta que VDD suba por encima del nivel límite de caída de tensión. VTRIPF. Para habilitar el módulo LVI y el reset LVI se deben borrar los bits LVIPWRD y LVIRSTD en el registro de configuración. 7. Esto previene una condición en la cual el MCU está continuamente entrando y saliendo del reset si VDD es aproximadamente igual a VTRIPF. que causa que el MCU salga del reset. 7.2. En el registro de configuración. 7. Modos de Baja Potencia Las instrucciones STOP y ponen al MCU en modos de bajo consumo y espera. 7. Modo Stop Cuando el bit LVIPWRD es borrado en el registro de configuración y se setea el bit LVISTOP en dicho registro. Registro de Estados (LVISR) LVIOUT — LVI Output Bit Este flag de solo lectura se debe setear cuando la tensión VDD cae por debajo de la tensión límite de caída VTRIPF y se borra cuando la tensión VDD sube por encima de VTRIPR. el módulo LVI sigue activo en el modo stop. Descripción General de un Microcontrolador (CPU) Página 46 .5.Figura 39. Si se habilita para generar un reset. el módulo LVI puede generar un reset en el MCU y salir fuera del modo stop. La diferencia en este nivel umbral causa una histéresis que previene una condición de oscilación en la cual el MCU está continuamente entrando y saliendo del reset (ver tabla 3). Tabla 3. Bit de Indicación LVIOUT VDD VDD > VTRIPR VDD < VTRIPF VTRIPF < VDD < VTRIPR LVIOUT 0 1 Valor previo 7. El reset borra el bit LVIOUT.5. Interrupciones en LVI El módulo LVI no genera requerimientos de interrupciones. el módulo LVI módulo sigue activo en modo wait.5.1. Modo Wait Si se habilita.4.2. 7. Si se habilita para generar un reset. el módulo LVI puede generar un reset y sacar al MCU fuera del modo wait. 8. Pasos a seguir para cambiar del Clock interno al externo Cuando se desea usar la fuente de reloj externa [7] (OSC externo. Por defecto el Microcontrolador utiliza un oscilador interno para generar el reloj de la CPU.8. Otro tipo de oscilador externo es el RC. Esto ayuda a iniciar el circuito del cristal más robustamente.1. 2 capacitores y una resistencia externa. Descripción General de un Microcontrolador (CPU) Página 47 . Por último se puede utilizar un oscilador externo. La figura 40 muestra la configuración del oscilador estándar usado en MCUs para frecuencias en el rango de 1MHz a 32 MHz.2. Configuración del Oscilador externo Figura 40. Este oscilador tiene una frecuencia de bus de 3.2. Se debe setear PTA4 (OSC2) como salida y ponerlo en alto durante varios ciclos. Esto ayuda a arrancar un oscilador de cristal externo. Módulo Oscilador (OSC) 8. se debe usar una frecuencia de referencia que permita encontrar el valor de ajuste (Trimmer) como se explica en la sección 8. por causa del encapsulado del chip. cuya frecuencia máxima de bus puede llegar a los 8 MHz para un cristal de 32 MHz. 8. RC. Los pines del oscilador son llamados OSC1 y OSC2.1.2 MHz que puede variar -+ 25%. Para uso de cristal externo se debe setear. o XTAL). que utiliza solo dos componentes. de acuerdo a la configuración del registro Config 2 como se muestra en la tabla 4. Oscilador externo. Si se desea mayor frecuencia de bus se debe usar un oscilador externo a cristal [6].3. Este tipo de generación de clock utiliza una disposición como se muestra en la figura 40 utilizando un cristal. una resistencia y un capacitor. Para ajustar este valor a un valor de frecuencia conocido. el usuario debe seguir los siguientes pasos: 1. Introducción El Clock del MCU se puede generar de varias maneras [3]. OSCOPT [1:0] = 1:1 (Ver Figura 41). se debe esperar aproximadamente un 1 mseg. Una buena regla general para osciladores de cristal es esperar 4096 ciclos de la frecuencia de cristal. espera 2 ciclos de bus 2 || bne DelaymS2020 . se deben setear todos los bits a la vez. esto está recomendado por el fabricante del componente. Configuración de los bits OSCOPT OSCOPT1 OSCOPT2 Modos del Oscilador 0 0 1 1 0 1 0 1 Oscilador Interno Oscilador Externo RC externo Cristal Externo Figura 41. decrementa el # de mS 3 | bne DelaymS2010 . OSC2 estará seteado como la salida del reloj. Para un cristal 4-MHz. Las líneas de código siguientes permiten crear retardos donde la cantidad de milisegundos está dada por el valor guardado en el acumulador. entonces se colocará OSC1 como una entrada externa de reloj y si la opción externa del cristal se selecciona. * ******************************************************************** DelaymS2_Body: . ******************************************************************** * retardo por X mS * * * * El bucle interior atrasa 1mS. Se debe crear un retardo de software para esperar la estabilización del oscilador interno (clock por defecto) necesaria para la selección de la fuente de reloj externo (el cristal. espera 3 ciclos de bus 3 | deca . el resonador. Se deben setear los bits [OSCOPT 1:0] de CONFIG2 de acuerdo a la lógica de control del módulo oscilador. Note que X será | . salta si no terminó 3--/ DelaymS2030 rts . retorno de subrutina 6 Descripción General de un Microcontrolador (CPU) Página 48 . Por los tanto.Tabla 4. 3. decrementa el retardo 3-\| nop . siempre cero aquí | brn * . Nota: El registro Config 2 se puede escribir solo una vez después de cada reset. El lazo exterior cuenta un número de ms * * pasado por el acumulador. RC). Registro config 2. El bit RSTEN se resetea a cero solo mediante un power on reset (POR) 2. por ejemplo. JSR EXT trae el valor 6 DelaymS2010 ldx #$F8 . atiende el WDOG 5 | . salta si no terminó 3-/| stx COPR . carga el retardo en X 2--\ DelaymS2020 decx . El registro de estado del oscilador (OSCSTAT) contiene el bit que hace el cambio desde el reloj interno al reloj externo. Después que el valor de ECGON es detectado. Ningún cambio posterior del reloj monitor es implementado (el reloj no vuelve a cambiar a interno si el reloj externo muere). Escribiendo un valor grande se logra un periodo grande y escribiendo un valor pequeño se crea un periodo corto. modo PTM o CTM. el modulo OSC chequea la actividad del oscilador.5 ns (3. Registro de estado del oscilador. durante el reset.2%. con el oscilador interno. 1 = generador de reloj externo habilitado 0 = reloj externo deshabilitado ECGST — bit de estado del reloj externo: Este bit. ECGON — Bit Generador de reloj externo: Este bit de lectura/escritura habilita al generador externo de reloj. 8. La lógica provee un glitch de transición. Cada incremento / decremento de $01 al valor de ajuste actual incrementa/decrementa el periodo aproximadamente en 0. NOTA: Una vez que la transición al reloj externo termina. 7. sólo indica si hay una fuente de reloj externa manejando el reloj del sistema o no.3. Después de que el retardo recomendado haya transcurrido. Este registro se carga con el valor $80 después de un reset. El oscilador es ajustado escribiendo un valor de ajuste en el registro OSCTRIM en la dirección de memoria $38. esperando dos flancos ascendentes de reloj externo. el bit ECGON en el registro de estado de OSC (OSCSTAT) debe ser seteado por el software del usuario. 1 = Una fuente de reloj externo se acopló 0 = Una fuente reloj externo se desacoplo 5. 6. Figura 42. El módulo OSC primero setea el bit ECGST en el registro OSCSTAT y entonces detiene el oscilador interno.4. a fin de que se inicie el proceso de cambio. El módulo OSC entonces cambia al reloj externo. Este bit es puesto a cero forzado. el oscilador interno sólo será reactivado con reset. Este bit se ignora en el modo monitor. Descripción General de un Microcontrolador (CPU) Página 49 .2 MHz). Ajuste del oscilador interno El periodo del oscilador interno es ajustable a ±25% [8] para compensar las variaciones de fabricación del chip que puede causar que el periodo base tenga una desviación de ±25% de 312. de solo lectura. La interrupción se borra y el programa regresa al lazo.2. Esto permite al usuario verificar la frecuencia ajustada.2 MHz. El offset que se había guardado después de la primera captura de entrada es restado al valor del timer de la segunda captura de entrada. Esta sección describe un método para ajustar la frecuencia del oscilador interno dentro de un 0.2 MHz. La ubicación de FLASH donde este valor se almacena es llamada registro TRIMLOC y está en la dirección de memoria $FFC0. entonces el programa inicia el timer con las interrupciones habilitadas y entra en un lazo. entonces la rutina asume que ya se ha encontrado anteriormente un valor de ajuste y sale de la búsqueda. La única frecuencia que puede ser garantizada es 3. En la primera captura de entrada se procesa una interrupción y se reserva el primer flanco ascendente del reloj de referencia. El programa entonces regresa a la rutina principal.3. Este valor se guarda en RAM como el valor real.2 MHz. 8. La captura de entrada se configura para capturar flancos ascendentes. para encontrar el mejor valor de ajuste.1.Motorola MC68HC908QY4/D [3]) con el oscilador interno seleccionado. y algunas variables de RAM. variaciones de fabricación de ±25% de la frecuencia base. ellos son programados con un valor de ajuste que seteará la frecuencia dentro del 5% de 3. al sellar la oblea. El valor OSCTRIM puede disentir por apenas ± $ 0F y aún así puede mantener comunicación con la PC. El programa se inicia mediante la inicialización de la configuración de registros. el timer. usa la búsqueda lineal iterativa. Si TRIMLOC está en blanco ($ FF). Si TRIMLOC es distinto a $ FF (valor de memoria sin programar). Los registros del canal del timer son leídos y almacenados en RAM como un valor de offset. en este caso el carácter '@' (en ASCII es $ 40). El canal del timer a usar se selecciona en el código assembler seteando dos variables EQUATE (equivalentes): TSCHNL equ TSC0 (o TSC1) TCHNLH equ TCH0H (o TCH1H) TSCHNL selecciona el estado del canal y el registro de control a usar y TCHNLH selecciona que registro de canal de timer se va a usar. saltando al final de la rutina en donde un puerto es accedido a razón de 20 veces el período de reloj del bus. Si bien el rango ajustable es ±25% del periodo base. Esto supone. Características del programa para determinar el valor de ajuste Para configurar el registro de ajuste del oscilador interno se usa un terminal RS232 de la PC. a 9600 baudios.4% de 3. por cualquiera de los canales del timer.Cuando las partes son emitidas desde fábrica. para setear la frecuencia a 3. Este programa de auto ajuste. el firmware (software embebido) del monitor copiará el valor en el registro TRIMLOC dentro del Registro OSCTRIM para establecer una comunicación de 9600 baudio con la PC. Depende del usuario si desea copiar este valor en OSCTRIM. El segundo flanco ascendente de referencia provoca otra interrupción de captura de entrada. Esta ubicación no se carga automáticamente en el registro OSCTRIM en el modo normal de uso. Modo Monitor forzado Para obtener el valor de ajuste del oscilador interno mediante este método se debe entrar en el modo monitor forzado (ver hoja de datos MC68HC908QY4 . Descripción General de un Microcontrolador (CPU) Página 50 .2 MHz. para proveer el reloj de referencia enviando un símbolo específico. 8. La diferencia es el valor medido del período del reloj de referencia. Chequea el valor actual en TRIMLOC.3. Después de programar. El usuario tendrá que enviar los caracteres "@" hasta encontrar el valor de ajuste. basándose en el reloj de referencia. 2. El tiempo entre enviar los caracteres es irrelevante. el programa regresa al lazo para esperar la siguiente captura de entrada. Ya que el RS232 mantiene la línea de Descripción General de un Microcontrolador (CPU) Página 51 . Si el oscilador corre demasiado rápido. 32. Se hace un chequeo para verificar que la suma no sea mayor a $ FF. Por debajo de 0. el delta se calcula restando el valor real al valor esperado. el número de iteraciones se rastrea en una variable de RAM.2 MHz). de otra manera se setea con el valor de la suma de OSCTRIM y el delta. Esta decisión se toma comparando el valor real con el valor esperado. las banderas se modifican permitiendo al programa saltar fuera del lazo e indicar si el oscilador está oscilando demasiado rápido. el valor TRIMLOC se guarda dentro de OSCTRIM y PTA3 varia a razón de 20 veces el período del bus. Cuando el PTA3 inicia la salida de una onda cuadrada.Una vez que un valor real ha sido captado. Si es así. Luego de esto. entonces el delta se calcula restando el valor esperado al valor real. usando el último valor OSCTRIM como el valor deseado. entonces OSCTRIM será seteado a $ FF. Si el oscilador es demasiado lento. Esto permite al usuario verificar que se programó el valor correcto en TRIMLOC. Para que el programa opere mejor.4 % y 0. se usa la ecuación: Valor esperado = (fBUS × tREF) / PS Donde: fBUS = Frecuencia de bus ajustada (3. no se ha encontrado el valor de ajuste. entonces el delta se agrega al valor OSCTRIM. Si es así. La figura 43 muestra un circuito para conectar un puerto del RS232 a una de las entradas del canal del temporizador. se puede usar este valor delta como el ajuste del valor OSCTRIM.2 % está más allá de la resolución de las capacidades de ajuste del oscilador. ya que el programa sólo trabaja con el carácter "@". De otra manera. El programa ahora vuelve al lazo para esperar la siguiente captura de entrada. El programa permitirá otras 16 iteraciones antes de salir. Por encima de 0. entonces el registro OSCTRIM se setea a $00. El reloj de referencia se provee enviando el símbolo `@` a 9600 baudios ya sea por uno de los canales del temporizador a través de un terminal RS232. Para prevenir el caso donde el valor OSCTRIM alterna entre valores altos y bajos sin poder encontrar el valor de ajuste deseado. Ajustando el valor del pre-escalador del temporizador apropiadamente. En este punto. Para calcular el valor esperado. 8. en relación al período del clock de referencia. Se debe hacer un chequeo para verificar que la diferencia no es menor que $ 00. entonces el programa salta fuera del lazo y programa el valor OSCTRIM en el registro TRIMLOC en la memoria flash.2 % del valor esperado. 16. el setup del temporizador y reloj de referencia deben se tales que un incremento en la cuenta del temporizador esté entre 0. entonces el delta se resta al valor OSCTRIM. Si el oscilador es demasiado rápido. cada bit es 104 µ s de largo. o demasiado lento o en el valor correcto. después de 16 iteraciones. entonces el programa cambiará el delta a $01 a pesar del delta real. el valor de ajuste debería estar en pocos pasos dentro del valor deseado. 4. se setea a la diferencia de OSCTRIM y delta. Si. Si el oscilador es igual a la frecuencia deseada (3.2 MHz) tREF = Periodo de reloj de referencia PS = Prescaler del módulo timer o 1. 64 A 9600 baudio.4 % no se aprovechan las capacidades de ajuste del oscilador. El caracter `@` es usado porque su valor en hexadecimal es $ 40 o en binario (%) es 01000000. de otra manera. quiere decir que el valor de ajuste ha sido encontrado y programado en flash. 2% y 0. Circuito de comunicación RS-232 para la determinación del TRIM. Figura 44. PS = 1.2 MHz × 208 μs)/1 = 665. Señal enviada para la determinación del valor de trim.4% del valor esperado. entonces el valor esperado será 333 y la resolución será 1/333 = 0. Se usan uno o dos trucos para simplificar el programa. Iniciando con un pre escalador del timer de. El resultado es 2 flancos ascendentes apartados 208 μs (como se muestra en la Figura 44). el carácter provee exactamente dos flancos ascendentes. se calculan los extremos de los valores esperados: Valor esperado = 333 = $14D +25% = 1. Figura 43.75 × valor esperado = 0. Con el bit de inicio (0) y el bit de stop (1) añadidos y en vista de que los datos se envían desde el bit LSB. Ya que la frecuencia de ajuste puede variar entre ±25% para 3.2 MHz.25 × 333 = 416 = $1A0 –25% = 0. exactamente dos tiempos de bits separados. el valor de salida esperado es: Valor esperado = (3.transmisión (Tx) en alto entre caracteres.25 × valor esperado = 1. la señal transmitida es como la que muestra la figura 43.15%.3%.75 × 333 = 250 = $FA Descripción General de un Microcontrolador (CPU) Página 52 . la resolución es 1/666 = 0. En este ejemplo.6 ~ 666 Siempre se desea una resolución del timer entre 0. tREF = 208 μs. Si se setea el pre escalador del timer a 2. Por lo tanto. Sistemas de Numeración y Código Las CPUs trabajan adecuadamente con información en un formato diferente al que la gente está habituada a manejar a diario. y así sucesivamente. 16 o bien 32 dígitos binarios. ya que cada dígito hexadecimal puede representar 16 cantidades distintas. binario. 64 es el decimal ―sesenta y cuatro‖. es el de la unidad. en decimal. es de las unidades. 2 niveles). Las computadoras digitales binarias trabajan con el sistema de numeración en base 2 (binario. el que está a su izquierda es el de los décimo séxtuplos. El dígito del extremo derecho de un número binario entero. permite realizar mentalmente la conversión entre ambos. La comprensión de estos códigos ayudará a entender cómo una computadora se las ingenia para entender cadenas de dígitos que sólo pueden ser unos o ceros. Se utilizan las letras de la A a la F para representar los valores hexadecimales correspondientes que van del 10 al 15. el peso de un dígito es dos veces mayor que el que se encuentra a su derecha. 1. Números Binarios y Hexadecimales Para un número decimal (base 10) el peso (valor) de un dígito es diez veces mayor que el que se encuentra a su derecha. La sencilla correspondencia que existe entre las representaciones de un dígito hexadecimal y la de cuatro dígitos binarios. binario y hexadecimal. para de esta manera. que solo serán ―ceros‖ (0) ó ―Unos‖ (1). La tabla 4 muestra la relación existente. El dígito del extremo derecho de un número hexadecimal entero. o bien el estado de encendido o apagado de una simple llave. octal y binario codificado en decimal (BCD) [9] y [12]. Con un dígito hexadecimal se puede representar exactamente igual. el que está a su izquierda es el de las decenas. el que le sigue es el de los óctuplos. por lo tanto. representar los valores hexadecimales que van del 10 al 15. Para un número hexadecimal (base 16). y así sucesivamente. Por ejemplo. se debe recurrir a algún otro símbolo de un solo dígito. Un uno o un cero puede representar la presencia o ausencia de un nivel lógico de tensión sobre una línea de señal. Para evitar confusiones acerca de si un número es hexadecimal o decimal. entonces $64 es hexadecimal ―seiscuatro‖. En este apartado se explican los sistemas de numeración más comúnmente utilizados por las computadoras.Apéndice. El sistema de numeración de base 16 (hexadecimal) resulta ser una práctica solución de compromiso. respecto al que se encuentra a su derecha. Para algunas computadoras es habitual trabajar con números de 8. el que le sigue es el de los cuádruplos. se antepone un símbolo $ a cada cantidad hexadecimal. es el de las unidades. el peso de un dígito es de dieciséis. de este modo un número binario de 8 dígitos se puede expresar mediante dos dígitos hexadecimales. Si se considera que el sistema de representación sólo incluye diez símbolos (del 0 al 9). el que le sigue es el de las centenas. Para un número binario (base 2). a cuatro dígitos binarios. es decir. y así sucesivamente. puesto que éste permite representar cualquier información mediante un conjunto de dígitos. 1. El dígito del extremo derecho de un número decimal entero. en la representación de valores. Las CPUs además.1. hexadecimal. Típicamente se trabaja en el sistema de numeración de base 10 (decimal. el que está a su izquierda es el de los duplos. Estos tres diferentes sistemas de numeración resultan ser tres modos diferentes de representar físicamente las mismas cantidades. Descripción General de un Microcontrolador (CPU) Página 53 . que es equivalente al decimal 100. con niveles de 0 a 9). usan códigos especiales para representar información del alfabeto o sus instrucciones. etc. ya que a la gente le resulta fácil realizar la conversión entre un dígito hexadecimal y sus 4 bits equivalentes. 1. el $20 al carácter espacio.Tabla 4. el número $41 corresponde a una letra A mayúscula. Este estándar permite hace posible las comunicaciones entre equipos hechos por diversos fabricantes. La notación hexadecimal es mucho más compacta que la binaria mientras se mantienen las connotaciones binarias. Código ASCII Las CPUs deben manejar otros tipos de información además de los números. Tanto los textos (caracteres alfanuméricos) como las instrucciones deben codificarse de tal modo que la CPU interprete esta información. En este código. Base 10 Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 100 255 1024 65535 Base 2 Binaria 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0001 0000 0001 0001 0110 0100 1111 1111 0100 0000 0000 1111 1111 1111 1111 Base 16 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 64 FF 400 FFFF El hexadecimal es el modo adecuado tanto para expresar como para discutir acerca de información numérica procesada por una computadora. Equivalentes entre decimal binario y hexadecimal. La Tabla 5 muestra la relación existente entre los caracteres ASCII y los valores hexadecimales. puesto que todas las máquinas utilizan el mismo código. Descripción General de un Microcontrolador (CPU) Página 54 . El código ASCII traduce un carácter a un código binario de 7 bits. aunque en la práctica la mayoría de las veces la información es transportada en caracteres de 8 bits con el bit más significativo en cero. El código ASCII es una correlación ampliamente aceptada entre caracteres alfanuméricos y valores binarios específicos.2. El código más común para la información tipo texto es el American Standard Code for Information Interchange (ASCII)[9]. 3. se usa un sistema de mnemónicos de instrucción equivalentes. Las computadoras de distintos fabricantes usan diferentes repertorios de códigos de operación. Mnemónicos y Ensambladores Un opcode tal como $4C es interpretado por la CPU. El set de instrucciones del MC68HC08 incluye 288 opcodes distintos. La CPU en el MCU MC68HC05 puede entender 140 instrucciones básicas. El opcode $4C corresponde al mnemónico INCA. Cada código de operación instruye a la CPU en la ejecución de una muy específica secuencia de etapas que debe seguirse para cumplir con la operación propuesta. Conversión de ASCII a Hexadecimal ASCII 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Símbolo NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US ASCII 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Hex 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Símbolo (espacio) ! " # $ % & ' ( ) * + .4. < = > ? ASCII 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 Hex 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F Símbolo @ 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 [ \ ] ^ _ ASCII 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Hex 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F Símbolo ` 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 { | } ~ • 1. previstos en la lógica cableada de la CPU. todas las CPUs digitales binarias realizan el mismo tipo de tareas básicas de modo similar. . Códigos de Operación Las CPUs utilizan otros códigos para darle instrucciones a la CPU. 1. que se lee ―incrementar el Descripción General de un Microcontrolador (CPU) Página 55 . cada una de las cuales requiere su propio código de operación. Los códigos de operación son una representación del set de instrucciones y los mnemónicos son otra. El repertorio (set) de instrucciones para una CPU es el conjunto de instrucciones que ésta es capaz de realizar. / 0 1 2 3 4 5 6 7 8 9 : . pero no es fácilmente manejable por una persona.Tabla. Algunas de éstas presentan mínimas variaciones. 5. Para resolver este problema. Este código se denomina código de operación (opcode). Aún cuando difieren de una CPU a otra. que van de la "A" a la "F"). La relación entre el mnemónico de cada instrucción y el opcode que la representa. Esta usa los números que van del 0 al 7 para representar un conjunto de tres dígitos binarios de un modo análogo a la hexadecimal. La notación octal (base 8) [9] fue usada para trabajar con algunas computadoras primitivas. Este programa es el que convierte los mnemónicos de las instrucciones de un programa en una lista de códigos de máquina (códigos de operación e información adicional). 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 Dec. 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Oct.5. 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Oct. es rara vez utilizada por el programador puesto que el proceso de transducción lo realiza automáticamente un programa de computadora específico denominado ensamblador. Tabla 6. para que puedan ser utilizados por la CPU. Dec. 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011 00111100 00111101 00111110 00111111 Descripción General de un Microcontrolador (CPU) Página 56 . 040 041 042 043 044 045 046 047 050 051 052 053 054 055 056 057 060 061 062 063 064 065 066 067 070 071 072 073 074 075 076 077 Bin. pero rara vez es utilizada en la actualidad. 000 001 002 003 004 005 006 007 010 011 012 013 014 015 016 017 020 021 022 023 024 025 026 027 030 031 032 033 034 035 036 037 Bin. en donde se recurre a un conjunto de cuatro dígitos binarios. Octal Antes de comenzar la discusión sobre los sistemas de numeración y códigos. 1. Un ingeniero desarrolla un grupo de instrucciones para una CPU en la forma de mnemónicos y luego utiliza un ensamblador para trasladar estas instrucciones a los opcodes que la CPU pueda entender. se describieron dos códigos más muy nombrados. 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Hex. Hexadecimal y Binario a Octal. El sistema octal tiene la ventaja de no necesitar símbolos no numéricos (como los símbolos hexadecimales ya vistos.acumulador‖. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex. Conversión de Decimal. uno" que "uno . 16 ó 32 bits. Un BCD utiliza cuatro bits para representar cada dígito decimal. de ser así. La columna "binario directo" muestra dígito por dígito el pasaje de los dígitos octales a grupos de 3 bits. Cuando se menciona el valor ASCII para la "A". realizar todos Descripción General de un Microcontrolador (CPU) Página 57 . se deberá suma 6 o 0110 en binario para lograr el desborde y poder representar un digito decimal en 4 bits. se desencadena una secuencia de etapas para corregir el resultado y llevarlo al formato BCD apropiado. se realiza la siguiente suma BCD. Los valores BCD se representan con el signo ―$‖. estas "palabras" no resultan fácilmente fraccionables en grupos de tres bits (algunas CPUs muy antiguas usaban palabras de 12 bits siendo divisibles en cuatro grupos de tres bits). en cuanto a cantidad de bits necesarios para la representación. 8.uno". Cuando mentalmente se convierten valores octales a valores binarios de un byte. Como un simple ejemplo. Binario Codificado en Decimal El sistema Binario Codificado en Decimal (BCD) es una notación híbrida usada para expresar valores decimales en forma binaria. Cada grupo de 4 bits se convierte directamente en un dígito hexadecimal. en binario. La segunda. en decimal. realiza un chequeo para ver si el resultado es un código BCD válido. pues ellos son números hexadecimales que representan cantidades decimales. 9 + 1 = 10.6. resulta más fácil puesto que cada dígito hexadecimal se transforma exactamente en cuatro bits.Cambiar la notación hexadecimal usada hoy en día por la octal acarrea dos desventajas. Cada dígito octal representa a su vez 3 bits con lo que resulta un bit extra (3 dígitos x 3 bits = 9 bits). Es mejor convertir la información de decimal a binario en el momento de su ingreso. La primera es que las CPUs utilizan "words" (palabras) de 4. Dos dígitos hexadecimales coinciden exactamente con los ocho bits de un byte. Si hubo un ―acarreo‖ (un desborde) de un dígito BCD a otro o si Hubiese algún código no válido. lo que hace fácil olvidarse del tratamiento que debe recibir el bit extra del extremo izquierdo (noveno) de un octal. habiendo seis combinaciones consideradas no válidas (específicamente. 1. El número 0000 1010 (en binario) es corregido y se transforma en 0001 0000(en binario) o 10(en BCD). Por ejemplo. Típicamente se opera de izquierda a derecha. Está corrección consiste en analizar el resultado y determinar si en un dígito BCD (4 bits) se superó el valor 1001. ella realiza una suma binaria y luego realiza un ajuste que genera un resultado BCD. Cuando se convierte de hexadecimal a binario. 41(base 16) en hexadecimal y 101 (base 8) en octal.cero . el valor octal resultante se representa mediante 3 dígitos octales. es el hecho de carecer de compactibilidad con la hexadecimal. es más fácil decir "cuarto . La tabla 6 presenta las correlaciones entre octal y binario. los valores hexadecimales de la ―A‖ a la ―F‖). Cuando la CPU termina el cálculo. el valor ASCII de la letra "A" mayúscula es 10000001(base 2). La computadora hace la siguiente suma: 0000 1001+ 0000 0001 = 0000 1010. De esta manera cuatro dígitos binarios pueden expresar 16 diferentes cantidades físicas. En la mayoría de los casos es ineficiente utilizar la notación BCD para los cálculos de la CPU. Pero 1010 en binario es equivalente a ―A en Hexadecimal‖ que es un código BCD no válido. Cuando la CPU hace una operación de suma BCD. No todos los Microcontroladores son capaces de realizar cálculos en BCD ya que se debe tener la indicación del acarreo dígito a dígito que no está presente en todas las CPU (los MCUs de Freescale tienen este indicador de semi acarreo). 1. es necesario referirse a la documentación del ensamblador que se deseé usar. Este número será trasladado a un valor binario antes de ser almacenado en memoria para ser usado por la CPU. Forzar a una computadora a comportarse como nosotros resulta menos eficiente que permitirle trabajar en su sistema de numeración natural. Tabla 7. Nota: Ya que no todos los ensambladores usan las mismas reglas de sintaxis ni los mismos caracteres especiales.  El símbolo! indica que el número es decimal.los cálculos en binario y convertirlos nuevamente a BCD o decimal sólo si es necesario presentarlos en pantalla.  El símbolo # indica un operando y el número es buscado en la posición de memoria siguiente a la del código de operación. Símbolos en Assembler Prefijo ! $ @ % ‗ (apóstrofe) Indica que el valor siguiente es: Decimal Hexadecimal Octal Binario Carácter ASCII Descripción General de un Microcontrolador (CPU) Página 58 .7. Se puede usar una variedad de símbolos y expresiones siguiendo al caracter #. por ejemplo $24 es 24 (base 16) en hexadecimal o el equivalente de 36 (base 10).  El símbolo $ precediendo a un número indica que el número es hexadecimal. Símbolos usados en Assembler En esta sección se detallan los símbolos utilizados para representar los distintos sistemas de numeración en Assembler [4]. en la tabla 7 se muestran los símbolos usados en los Microcontroladores de Freescale. Q3 y Q4. La instrucción es decodificada y ejecutada durante los ciclos Q2. Figura 45. la instrucción se trae a la CPU en un solo ciclo de instrucción. al codificarse en una sola palabra. este acceso se realiza durante el ciclo Q4. Al disponer de un bus de memoria de programa. La instrucción se trae a la CPU en un solo acceso a la memoria de programa. Si la instrucción conlleva un acceso a la memoria de datos para escritura. la codificación se realiza acorde a los requisitos de la arquitectura. el bus de instrucciones es más ancho que el bus de datos. Durante el ciclo de ejecución de la instrucción el proceso es el siguiente: La instrucción traída durante el ciclo de instrucción anterior se ―latchea‖ al registro de instrucciones (IR) durante el ciclo Q1.1. Arquitectura Harvard La arquitectura de computadores Harvard almacena instrucciones y datos en memorias separadas como muestra el diagrama de la figura 45. este acceso se realiza durante el ciclo Q2. A su vez. Diagrama en bloques de la Arquitectura Harvard Descripción General de un Microcontrolador (CPU) Página 59 . Esta arquitectura suele utilizarse en DSPs para procesamiento de audio y video.2. Muchas arquitecturas de microcontroladores contienen la estructura Harvard. mientras tanto el bus de datos está libre y puede accederse a través de él a los datos que se necesitan para ejecutar la instrucción de programa anterior a la que se está trayendo de memoria de programa en ese momento. Concretamente. Si la instrucción conlleva un acceso a la memoria de datos para lectura. Descripción de Arquitecturas Clásicas de Microcontroladores 2. Al tener 2 buses separados. Esto permite que las instrucciones se codifiquen en palabras de más de 8 bits. cada instrucción se trae a la CPU en un único ciclo de instrucción (equivalente a 4 ciclos de reloj). Esta instrucción contiene toda la información requerida y se ejecuta en un solo ciclo. En la mayoría de las computadoras modernas.2. La velocidad de procesamiento y la cantidad de memoria han aumentado mucho más rápidamente que el rendimiento de transferencia entre ellos. la velocidad de comunicación entre la memoria y la CPU es más baja que la velocidad a la que puede trabajar esta última. Requiere acceso (o varios accesos) a memoria para traer la instrucción. operar y volver a almacenar los datos. lo que ha agravado el problema del cuello de botella. Diagrama en bloques de la Arquitectura Von Neumann 2. Figura 46. reduciendo el rendimiento del procesador y limitando seriamente la velocidad de proceso eficaz. Si esta instrucción maneja datos de memoria. por ejemplo. En la arquitectura von Neumann se necesitan habitualmente varios paquetes de 8 bits para codificar una instrucción.3. aunque depende de la aplicación). Arquitectura Harvard Vs Arquitectura Von Neumann Von Neumann:  Permite almacenar datos e instrucciones en el mismo módulo de memoria Descripción General de un Microcontrolador (CPU) Página 60 . sobre todo cuando se necesitan procesar grandes cantidades de datos. El bus se congestiona con tanto acceso. se debe(n) realizar otro(s) acceso(s) para traer. Arquitectura Von Neumann La característica más destacada de la arquitectura Von Neumann es que almacena datos e instrucciones en una misma memoria como muestra la Figura 46. La CPU se ve forzada a esperar continuamente a que lleguen los datos necesarios desde o hacia la memoria.2. Así. El canal de transmisión de los datos entre CPU y memoria genera un cuello de botella para el rendimiento del procesador. un microcontrolador con 4 Kbytes de memoria de programa podría almacenar 2K instrucciones aproximadamente (a una media de 2 bytes por instrucción. 2. crean el StrongARM. Reseña histórica La arquitectura ARM (Advanced RISC Machine) fue creada en 1985 por el Acorn Computer Group. ACORN se dio cuenta del potencial de esta arquitectura y junto con un grupo de socios-capital. svc.2. Ltd.4. fiq. Las principales características de los núcleos ARM son:        Se basa en los principios de RISC. la arquitectura ARM ha crecido hasta convertirse en la arquitectura más popular del planeta. que básicamente es un core que utiliza el conjunto de instrucciones de la arquitectura ARM. 2. irq. En 1995. tipo Harvard ( ARM9) Tipos de datos de 8/16/32 bits 6 modos de operación: usr y sys. De aquí nace el StrongARM de 200 Mhz. todos los principales fabricantes de semiconductores usan el robusto núcleo ARM como la base para su línea de microcontroladores. En 1987. abt. und. Arquitectura ARM 2. la arquitectura ARM tuvo su primera aparición en productos comerciales con los asistentes digitales personales Newton de Apple. pero es implementado con la tecnología de la serie Alpha de Digital Semiconductor. Arquitecturas ARM para Microcontroladores La arquitectura ARM ha sido utilizada para el diseño de Microcontroladores estándar durante algún tiempo. por lo que no alcanza altas temperaturas y tiene bajos requerimientos de energía. como el primer procesador RISC con gran impacto comercial en el mundo. Lo anterior lo ha hecho candidato perfecto para el mercado de aplicaciones embebidas (embedded aplications). 37 registros de 32 bits (16 disponibles) Memoria caché (dependiendo de la aplicación) Estructura del bus tipo Von Neuman (ARM7). La filosofía RISC (Reduced Instruction Set Computer) es buscar la eficiencia tratando de realizar las operaciones de manera más simple. Digital Semiconductor y ARM.1. el ARM tiene relativamente pocos componentes en el chip.  Más flexible y fácil de implementar Adecuado para muchos procesadores de propósito General Harvard:      Usa Módulos de memoria separados para almacenar instrucciones y datos Es fácilmente implementable el pipeline Alto rendimiento de memoria Ideal para DSP (Procesadores Digitales de Señales) El tiempo de acceso se mejora respecto a la arquitectura von Neumann donde programa y datos se traen a la CPU usando el mismo bus. creó una compañía independiente llamada ARM en 1990. Desde entonces.4. Gracias a su diseño sencillo. sys. Estructura simple = excelente velocidad / bajo consumo de potencia Descripción General de un Microcontrolador (CPU) Página 61 . En la actualidad.4. Pocos formatos para las instrucciones. De cualquier manera la arquitectura CISC a sobrevivido. En la Tabla siguiente se indican las diferencias entre estos dos modelos. Las operaciones aritméticas son entre registros.5. RISC salió vencedor.  Pocos modos de direccionamiento. CISC VS RISC Hay otras formas de diferenciar Arquitecturas de Computadores. se desató una gran controversia sobre las ventajas y desventajas de cada estilo de arquitectura. Modelo CISC VS Modelo RISC Característica Tamaño de instrucción Tiempo de ejecución Modos de direccionamiento Tamaño del set instrucciones RISC Una palabra 1 ciclo d e clock pocos Grande CISC 1 a 54 bytes De 1 a 100 ciclos muchos Pequeño Durante los años 80. Como resultado. Descripción General de un Microcontrolador (CPU) Página 62 . Tamaño de instrucciones uniformes. Instrucciones conceptualmente simples. Transferencias Memoria/Registros exclusivamente LOAD/STORES. ha adoptado muchas ideas desde el campo del estilo RISC para mantener el buen desempeño. Tabla 8. Los Modelos de Arquitecturas son conocidos como RISC (computadora con set de instrucciones reducido) y CISC (Computadora con set de instrucciones complejas). Conjunto de instrucciones ortogonal: poco o ningún traslape en la funcionalidad de las instrucciones.       Todas las familias de procesadores ARM comparten el mismo conjunto de instrucciones. 2. la familia Intel‘s x86. se agrega un nuevo modo de direccionamiento. es una versión muy mejorada y ampliada del set de instrucciones de la flia. El conjunto de instrucciones del HC908 se puede clasificar en las siguientes categorías [5]: • Movimiento de Datos • Aritméticas • Lógicas • Manipulación de Datos • Manipulación de Bits • Control del Programa • Operaciones BCD • Especiales 3. o bien en movimientos de datos de una tabla a otra. otorgan gran flexibilidad en el manejo de tablas y rutinas de acceso indexado. Además. sin grandes cambios en sus rutinas y luego mejorar las aplicaciones existentes con el uso de las nuevas instrucciones. se puede apreciar que por cada tipo de instrucción. basado en el uso del Stack Pointer ―SP‖ (puntero de pila) como ―segundo registro índice‖. Set de Instrucciones El set de instrucciones de la familia HC908.1. ahorrando código y aumentando la velocidad de ejecución de las mismas. de esta forma se consiguen operaciones más rápidas y algoritmos más sencillos. han sido ampliadas notoriamente en la familia HC908 en comparación con la HC705. Las instrucciones ―MOV‖ en sus diferentes versiones.3. El agregado de instrucciones que involucran al nuevo registro concatenado H:X de 16 bits como ser LDHX. en forma más rápida y transparente. Las instrucciones PUSH y PULL permiten resguardar y rescatar el contenido del Acumulador (ACC) y del puntero índice H:X en memoria RAM. Estas instrucciones son útiles en rutinas de transmisión y recepción de datos en las comunicaciones series asincrónicas SCI (UART) de los distintos MCUs de la familia. ante sub-rutinas e interrupciones al programa (externas / internas). STHX. Esta característica hace que los usuarios de HC705 puedan migrar rápidamente a HC908. HC705 [4]. Descripción General de un Microcontrolador (CPU) Página 63 . lo que facilita el uso de lenguajes de alto nivel como el ―C‖ y otros. facilitan el movimiento de datos sin afectar los registros del CPU. Movimiento de Datos Las instrucciones de Movimiento de datos se pueden dividir a su vez en:      Instrucciones de carga de Registros del CPU Almacenamiento de registros del CPU Operaciones con La Pila Movimiento de Datos Registro a Registro Movimiento de datos Memoria a Memoria Las instrucciones de movimientos de datos. Descripción General de un Microcontrolador (CPU) Página 64 . 2. Aritméticas Las Instrucciones Aritméticas se pueden clasificar en:  Instrucciones de Adición Descripción General de un Microcontrolador (CPU) Página 65 .3. mientras que el resto o remanente se carga en el ―H‖. El resultado de la operación. en el CPU08 es del tipo No signado (sin signo) de 16 / 8 bits. a diferencia de la familia HC705 que solo contenía la Multiplicación. entonces se activará el flag de ―CARRY‖ (C) en el CCR y el valor en el registro ―H‖ será indeterminado. en ―A‖ se encontrará la parte menos ―pesada‖ del resultado. En los registros ―A‖ y ―X‖ se cargan los valores a multiplicar.      Instrucciones de sustracción Instrucciones de Multiplicación Instrucciones de División Instrucciones de Complemento y negación Instrucciones de comparación Otras Instrucciones: – Clear – Chequeo de cero o negativo – Reserva de espacio en pila – Reserva de espacio en registro índice La familia HC908 contiene instrucciones de Multiplicación y de División. en el registro ―A‖ se carga la parte menos pesada de dicho valor. se obtiene en los mismos registros ―A‖ y ―X‖. Se ejecuta en 5 ciclos de Clock versus los 11 ciclos necesarios en HC705. es del tipo No signado (sin signo) de 8 x 8 bits. La instrucción de multiplicación en el CPU08. se carga en el registro ―A‖. mientras que en ―X‖ se encontrará la parte más pesada del resultado. Descripción General de un Microcontrolador (CPU) Página 66 . mientras el divisor se carga en el registro ―X‖. La instrucción División es nueva para aquellos usuarios de HC705. En el registro ―H‖ se carga la parte más pesada del valor a dividir. Si el resultado de la operación es mayor que ―$ FF‖. el resultado de la operación. MUL – X contendrá el MSB del producto – A contendrá el LSB del producto DIV – – – H es el MSB del dividendo A es el LSB del dividendo X no es afectado Descripción General de un Microcontrolador (CPU) Página 67 . Descripción General de un Microcontrolador (CPU) Página 68 . ―saltos‖ discretos mayores a ―1‖ en una tabla. • Variables Temporales • Procesos en ―trama‖ Ejemplo: SUB1 AIS AIS RTS #-6 #6 . y no reducida como las instrucciones INCX / DECX que solo afectan al registro ―X‖. búsquedas ascendentes o descendentes a partir de un punto. tanto positivos como negativos. AIX No lo afecta • Bucles (loops) alrededor de un bloque de memoria – Direccionamiento indexado con post incremento solo para incrementos • Solamente disponible para instrucciones MOV y CBEQ La instrucción AIX permite ―adicionar‖ en forma inmediata un número signado (positivo o negativo) al registro índice H:X. de esta forma pueden lograrse manejos de tablas más eficientes. Descripción General de un Microcontrolador (CPU) Página 69 . y permite incrementar/decrementar al registro H:X en forma amplia (16bits). Aloja 6 bytes en la pila .Instrucción AIS AIS puede usarse para un rápido alojamiento o desalojo de espacio de la Pila. La instrucción AIX no afecta el CCR (registro de código de condiciones). Desaloja 6 bytes de la pila Instrucción AIX AIX puede usarse: • Eficiente incremento o decremento del registro H:X – La instrucción INCX / DECX solo afecta al registro X – La instrucción INCX / DECX afecta el CCR. Decrementa el contador de byte . Con AIX si. CPHX #0 . si es cero terminó. Tabla de datos . . . Lógicas Descripción General de un Microcontrolador (CPU) Página 70 . Inicializa el Checksum . X AIX #-1 TABLA .3. ORG $0080 RMB 512 ORG $EE00 LDHX #511 CLRA LASOSUMA ADD TABLA.Ejemplo: En este ejemplo se calculan 8 bit de checksum para una tabla de 512 bytes. CPHX setea bits del CCR BPL LASOSUMA . Calcula el checksum . Con DECX no hay ―carry‖ desde X a través de H. Sigue el lazo si no terminó 3. Inicialización del contador de byte . 3. Manipulación de Bits Descripción General de un Microcontrolador (CPU) Página 71 . Manipulación de Datos 3.4.5. 3.6. Control de Programa CBEQ combina las instrucciones CMP y BEQ • Operaciones más rápidas de búsqueda / acceso a tablas DBNZ combina las instrucciones DEC y BNE • Loop‘s más rápidos y eficientes Descripción General de un Microcontrolador (CPU) Página 72 . búsqueda / acceso a tablas. Descripción General de un Microcontrolador (CPU) Página 73 .Con estas dos nuevas instrucciones. se consigue un manejo más sencillo y eficiente de operaciones repetitivas como ―loops‖. 3.8.7. Operaciones en BCD 3. Especiales WAIT: • El CPU08 detiene el procesamiento de instrucciones • Espera por una interrupción • No se detiene el oscilador STOP: • El CPU08 detiene el procesamiento de instrucciones • Detiene el circuito del oscilador – Pone al MCU en estado ―low power‖ • Espera por una interrupción Descripción General de un Microcontrolador (CPU) Página 74 . ―Microcontroller Oscillator Circuit Design Considerations‖. Motorota. [8] Scout Pape.com. [12] A.electrocomponentes. ―Determining MCU Oscillator Start-up Parameters‖. www.. [2] ―Electrocomponentes S. 2007. Nota de Aplicación. ―MC68HC908QY4 Internal Oscilador Usage Notes‖. Switzerland. www. Rev. México: Editorial Continental.ar. ―Electrónica Digital‖ . 1993.A.A. Versión en español de Ernesto morales Peake. [10] H.0. 14/11/2005 [3] Data sheet: MC68HC908QY4 Microcontrolers. CPU08RM. 2001 Descripción General de un Microcontrolador (CPU) Página 75 . [9] James W. [11] Fernando I. Rev 1. ―Computer Systems Organization & Architecture‖. Scotland Andreas Rusznyak. 5. Motorola. [13] John D.. C. Curso de Microcontroladores HC908. Donovan. 4. Julio 25.freescale. 02/2006. 1989. 1979. Motorola. Editorial Arbó. 1997. Dowton: ‖Computadores y Microprocesadores: Componentes y Sistemas‖.Referencias: [1] Web Site ―Freescale Semiconductors‖. Szklanny. Geneva. December 1998. 2005. ‖Un vistazo a la Arquitectura ARM‖. ISBN: 0-201-61253-4 [14] Parra Miranda Mauro. Carpinelli. Taub: "Circuitos Digitales y Microprocesadores". julio de 2002. Hoarcio Martinez Del Pezzo: ―Introducción a los Microprocesadores‖. Addison-Wesley. [7] Cathy Cox y Clay Merritt. Electrocomponentes S. Bignell y Robert L. [6] Stuart Robb y David Brook. Rev. East Kilbride. Nota de Aplicación.com . 07/2005 [4] Daniel Di Lella. 2005 [5] Reference Manual: CPU Central Processor Unit Microprocesador. Mc Graw-Hill.
Copyright © 2024 DOKUMEN.SITE Inc.