descripcion del microcontrolador Intel 8051Descripción completa
En el documento encontraras la instrucciones mas utilizadas para el Microcontrolador Intel 8051
EMBEDDED SYSTEMSDescripción completa
Descrição completa
intelijenFull description
ESTE ES EL COMPLEMENTO DEL CURSO DE MICROCONTROLADORES PIC16F87XDescripción completa
Descripción de los microcontroladores y sus variantes.Descripción completa
microcontroladoresDescripción completa
descripción breve de la diferencia entre un microcontrolador y un micorprocesador.Descripción completa
Descripción: Utilización PWM
Teoria de los microcontroladoresDescripción completa
sensor de temperatura y microDescripción completa
Carlos A. Reyes (en negro)
Parameter variation
Descripción: Intel, historia, trayectoria de la empresa intel.
Descripción completa
Descripción completa
intel rebatesDeskripsi lengkap
Descripción completa
i/o programming
Seminar o razvoju intelovih mikroprocesora kroz desetljeća
Deskripsi lengkap
Microcontroladores. El 8051 de la INTEL.
Índice. Tema 1
Microprocesadores, Microcomputadoras y Microcontroladores. 1.1 Introduciéndonos en el Tema. 1.2 Haciendo un poco de historia. 1.3 Principales fabricantes de Microcontroladores. 1.4 Los Microcontroladores por dentro.
Tema 2
El microcontrolador 8051. 2.1 Los microcontroladores de la INTEL. 2.2 Los parientes cercanos, la Familia CMS - 52. 2.3 La Memoria Interna del microcontrolador 8051. 2.4 Las Instrucciones para trabajar con la Memoria Interna.
Tema 3
El Repertorio de Instrucciones del 8051. 3.1 Moviendo un bloque de datos. 3.2 Repertorio de Instrucciones.
Tema 4
Elementos imprescindibles en un sistema con el 8051. 4.1 Conociendo al microcontrolador 8051. 4.2 Dándole alimentación al microcontrolador. 4.3 Sincronizando la operación del microcontrolador. 4.4 Iniciando la operación del microcontrolador. 4.5 Haciendo programas para el microcontrolador.
Tema 5
Conectando dispositivos externos al microcontrolador. 5.1 Los Puertos del 8051. 5.2 El Puerto 1. 5.3 El Puerto 3. 5.4 El Puerto 2. 5.5 El Puerto 0.
Tema 6
Desarrollando aplicaciones simples con el Microcontrolador 8051. 6.1 Tomando Decisiones. 6.2 Secuencia de Eventos. 6.3 Trabajando con Tablas. 6.4 Trabajando con Display a Cristal Liquido. 6.5 Trabajando con Teclas del tipo ´Push Botom´. 6.6 Eliminando el efecto indeseable del Rebote. 6.7 Ejercicios Propuesto.
Tema 7
La Interrupción en el 8051.
1
Microcontroladores. El 8051 de la INTEL. 7.1 Encuesta o Interrupción. 7.2 El Controlador Interno de Interrupciones del 8051. 7.3 Atendiendo a los dispositivos que solicitan Interrupción. 7.4 El proceso de interrupción en el Microcontrolador. Tema 8
Sincronizando eventos impredecibles en el tiempo. 8.1 Atendiendo una Tecla del tipo ´Push Botom´ por Interrupción. 8.2 Termómetro Digital. 8.3 Sincronizando la llegada de datos desde un Teclado ASCII-Paralelo. 8.4 Generador de avisos
Tema 9
Los Temporizadores del 8051. 9.1 Los Temporizadores por dentro. 9.2 Los Registros TMOD y TCON. 9.3 Contando tiempo o eventos. 9.4. Los Modos de Trabajo de los Temporizadores. 9.5 Los Temporizadores y la Interrupción.
Tema 10
El Puerto Serie Asincrónico empotrado en el Microcontrolador 8051. 10.1 El Puerto Serie Asincrónico del 8051. 10.2 Los Modos de Operación del Puerto Serie del 8051.
Tema11
Aplicaciones de mediana complejidad con el Microcontrolador 8051. 11.1 Frecuencimetro Digital. 11.2 Controlador de Semáforo. 11.3 Medidor de la Velocidad y de la Dirección del Viento. 11.4 Mural Dinamico.
Tema 12
El Microcontrolador 8051 trabaja como Microprocesador. 12.1 Los Buses Externos del Microcontrolador 8051. 12.2 Modo Especial de Trabajo del Microcontrolador 8051. 12.3 Instrucciones para el trabajo con Memoria de Datos Externa. 12.4 Ejemplo de sistema expandido. 12.5 Diseño de un ´´Data Logger´´. 12.6 Diseñando con el Microcontrolador 8031.
2
Microcontroladores. El 8051 de la INTEL.
3
Tema 1. Microprocesadores, Microcomputadoras y Microcontroladores. 1.1 Introduciéndonos en el Tema. Cuando en al año 1971 la Compañía norteamericana INTEL irrumpía en el mercado con un circuito integrado digital cualitativamente nuevo a los existentes hasta ese momento, al que se le llamo Microprocesador, comenzaba una nueva era en el diseño de los sistemas digitales. Ahora el diseñador contaba para sus diseños con un circuito que las tareas que realizaba venían dadas por un programa desarrollado a partir de un conjunto de instrucciones que le brindaba el fabricante para trabajar con dicho circuito. Esto permitió traer al campo del diseño de los sistemas digitales técnicas hasta ese momento exclusivas para el diseño de las granes computadoras y las minicomputadoras. Se podía decir que el diseñador contaba con una computadora para resolver su aplicación. Por su puesto en los primeros años los recursos que adornaban a un microprocesador dado estaban limitados, fundamentalmente en cuanto a capacidad de memoria para almacenar los programas y los datos y con la velocidad de procesamiento, quizás de ahí viene el nombre de Microprocesador. Esta situación no duro mucho y con relativa rapidez salían nuevas versiones de microprocesadores, cada uno de ellos aventajando a su antecesor en cuanto a estos dos aspectos tan
importantes.
Esto
fue
propiciando
la
idea
de
emplear
fundamentalmente
a
los
microprocesadores en el desarrollo de Computadoras de Propósito General cada vez más potentes y con precios muy competitivos. A estos nuevos sistemas se le dio el nombre de Microcomputadora. No obstante, quedaba un gran campo de aplicaciones, fundamentalmente en la instrumentación y el control automático, que dada la envergadura de los mismo no se ajustaba el empleo de las nuevos sistemas en su solución. Nuevamente INTEL se percata de este segmento del mercado al que no se ajustaba el desarrollo vertiginoso que iban tomando los microprocesadores y saca a mediados de la década de los años 70 un circuito integrado con características muy similares a estos a los que les dio el nombre de Microcomputadora en una Pastilla. Así surge al mercado la familia CMS-48 de la que constituye su principal representante el 8748. Estos circuitos constituyeron la génesis de los circuitos que hoy se conocen con el nombre de Microcontroladores. A partir de este momento, el número de productos en el mercado que funcionan en base a uno o varios microcontroladores aumenta de forma exponencial y prácticamente no quedan campos de la vida actual en los que no encontremos equipos gobernados por el programa que se ejecuta en uno de estos dispositivos.
Microcontroladores. El 8051 de la INTEL.
Dentro del propio campo de las
4
Microcomputadoras, aparente territorio dominado por los
Microprocesadores, encontramos cada día más la presencia de estos circuitos donde casi todos sus periféricos basan su funcionamiento en el programa ejecutado por un Microcontrolador. Ejemplo de algunos de estos dispositivos que podemos mencionar. lo constituyen el ¨mouse¨, el teclado, la impresora, etc. Los Microcontroladores han irrumpido también con fuerza en nuestras casas, fundamentalmente en los equipos llamados electrodomésticos que basan su funcionamiento en estos circuito. Ejemplo de ello son, las lavadoras, los hornos, los televisores, los videos, los equipos de música, los sistemas de alarmas, etc. Según publicaciones especializadas en esta temática en los Estados Unidos se prevé que para el año 2010 en una casa típica de este país se encuentren aplicados aproximadamente entre 100 y 150 microcontroladores controlando la operación de diferentes elementos de la misma. Dentro del propio campo de las construcciones, cuando hablamos de edificios INTELigentes encontramos en los sistemas de supervisión y vigilancia la presencia de estos circuitos para optimizar el rendimiento de ascensores, calefacción, alarmas de incendio, robo, etc. Otros campos de aplicación lo constituyen: •
Los aparatos portátiles y de bolsillo.
•
Las Máquinas expendedoras y juguetería.
•
La Instrumentación.
•
La Industria de automoción.
•
El Control industrial.
•
La Robótica.
•
La Electromedicina.
•
Los Sistema de navegación espacial.
•
La Domótica.
Por lo que se puede decir sin temor a equivocarnos que, hoy en día ningún especialista que se dedique al diseño de sistemas digitales puede estar ajeno al desarrollo de los Microcontroladores y a como se esta moviendo el mercado cada vez más amplio y competitivo de estos circuitos. En este momento darle respuestas a las siguientes preguntas podría constituir un elemento imprescindible para poder seguir adelante en el estudio de los Microcontroladores.
Microcontroladores. El 8051 de la INTEL.
5
¿Que es un Microcontrolador?, ¿Que lo diferencia de un Microprocesador? ¿Qué diferencia existe entre un Microcontrolador y los tan conocidos y populares Microprocesadores? Definamos primeramente al Microprocesador. Definiremos como microprocesador a un Circuito Integrado de Muy Alta Escala de Integración, VLSI, que contiene una Unidad Central de Procesos, una Unidad Aritmético y Lógica y un conjunto de Registros, al que se le pueden conectar externamente Módulos de Memoria y de Puertos de Entrada/Salida, lo que permite la configuración de un Computador mediante la interconexión de varios circuitos integrados. Un Repertorio de Instrucciones propio y definido por el fabricante le permitirá al diseñador configurar el programa, que almacenado en uno de los Módulos de Memoria será ejecutado por el microprocesador y gobernará las operaciones de este y del Computador. Es común llamar a este Computador, como ya se definió anteriormente, Microcomputadora. Por su parte, podríamos decir que un Microcontrolador es la versión industrial de un Microprocesador, donde la preocupación de los fabricantes no esta tanto en el aumento de la capacidad de almacenamiento y de procesamiento, sino en brindar un conjunto de recursos integrados en el circuito que constituyan elementos significativos a la hora de enfrentar la solución de una aplicación dada. Algunos de estos circuitos lo constituyen: •
Memoria no volátil para contener el programa para la aplicación dada.
•
Memoria de lectura y escritura para guardar datos.
•
Líneas de Entrada/Salida digitales que agrupadas en forma de Puertos permiten la conexión de los diferentes elementos que conforman la aplicación.
•
Circuito de reloj interno.
•
Temporizadores.
•
Modulos de Captura.
•
Puertos Series Sincronicos y Asincronicos.
•
Perro guardián.
•
Convertidores A/D y D/A.
Un Microprocesador es un sistema abierto con el que el diseñador puede construir su Microcomputadora con las características que el desee, mediante el acople de los circuitos necesarios, ver Figura 1.1.1 a, mientras que un Microcontrolador es un sistema cerrado, que contiene un computador completo, de prestaciones limitadas, el que no puede ser modificado por el diseñador, ver Figura 1.1.1 b.
Microcontroladores. El 8051 de la INTEL.
6
Esta diferencia marca las posibilidades que brindan cada uno de estos dispositivos al diseñador para la solución de sus aplicaciones. Mientras que un Microcontrolador puede resolver determinadas aplicaciones por si solo sin la necesidad de ayuda de otros componentes en el sistema, los Microprocesadores siempre necesitan de otros dispositivos que lo apoyen en la solución de una aplicación dada por muy pequeña que esta sea.
F Figura 1.1.1 (a) Microcomputadora basada en un Microprocesador. (b) Microcontrolador. Esto que aparenta favorecer a los microcontroladores sobre los microprocesadores a la hora de escoger con cual resolver una aplicación dada no resulta de esta manera en todos los casos. Debemos tomar en consideración también para podernos hacer un juicio justo que permita establecer una comparación correcta los recursos limitados con que cuentan, que por lo general, los Microcontroladores y la facilidad de expansión y modificación con que cuentan los Microprocesadores. Por lo que una buena pregunta a la que deberíamos intentar dar respuesta en este momento lo podría constituir. ¿Cuándo utilizar un Microcontrolador y cuando utilizar un Microprocesador para solucionar una aplicación dada? Como pasa siempre en la ingeniería no existe una receta que al usted aplicarla le de la respuesta deseada para cualquier tipo de aplicación. No obstante, nos atreveremos a brindarle los dos consejos siguientes:
Microcontroladores. El 8051 de la INTEL. •
7
Si la aplicación a resolver es lo suficientemente pequeña que permita ser resuelta solo con los recursos internos del microcontrolador y no se prevé su expansión futura, no vacile, resuelva la aplicación con un sistema basado en el Microcontrolador en cuestión.
•
Si la aplicación a resolver no es lo suficientemente pequeña como para ser resuelta solo con los recursos internos del Microcontrolador y por lo tanto este necesita de dispositivos que lo apoyen y que le deben ser conectados externamente o su ampliación futura en un corto plazo esta prevista, tome papel y lápiz y saque cuenta de que le resulta mas económico.
Por su puesto nunca usted debe olvidar los campos de aplicación para los que son concebidos los Microcontroladores por parte de los fabricantes, ya que estos brindan todo un conjunto de facilidades al diseñador y al programador en la solución de dichas aplicaciones. El estado del arte actual en la fabricación de Microcontroladores y Microprocesadores no es más que el reflejo del desarrollo tecnológico alcanzado por las compañías que se dedican a la fabricación de estos dispositivos. Este desarrollo ha permitido el aumento de forma creciente de la cantidad de transistores por unidad de área en los circuitos integrados permitiendo que estos dispositivos realicen tareas más complicadas. Este proceso fue predicho por ´Moore´ en fecha tan temprana como a mediados de la década de los años 60 cuando definió lo que más tarde se conoció como la Ley que lleva su nombre en la que predecía, del punto de vista cuantitativo, a que velocidad iba a ocurrir este desarrollo. ´Moore´ planteo que, ´...el número de transistores por mm 2 en un circuito integrado se duplicaría cada 2 años´. Esta ley se ha venido cumpliendo con una buena precisión tal y como lo muestra la grafica de la figura 1.1.2.
Figura 1.1.2 Progresión de la integración de transistores por mm 2 en un circuito integrado. Ley de Moore.
Microcontroladores. El 8051 de la INTEL.
8
Les proponemos con el objetivo de lograr un mejor entendimiento del tema que estamos estudiando conocer algunos elementos de interés en el desarrollo de los microprocesadores y de los microcontroladores a partir del estudio de la evolución que han ido teniendo estos dispositivos desde su surgimiento hasta hoy. 1.2 Haciendo un poco de historia. Como ya mencionamos hacia el año 1971 una Compañía de los Estados Unidos, llamada INTEL, especializada en aquel entonces en la construcción de circuitos integrados de mediana escala de integración anuncio la salida al mercado de un circuito integrado de nuevo tipo, el 4004, al que dieron el nombre genérico de microprocesador. ¿Qué tenia de nuevo y diferente este circuito integrado comparado con los ya existentes hasta ese momento? El mercado digital hasta ese momento estaba dominado por los circuitos integrados de baja y mediana escala de integración con tecnología de fabricación Bipolar TTL y MOS. Los diseños de sistemas digitales consistían en la conjunción de compuertas lógicas, multivibradores, contadores, registros desplazamiento, almacenadotes, etc., alambrados dentro de una placa de circuito impreso. Estos circuitos integrados, dada sus características constructivas, respondían a un modo de operación único e imposible de cambiar por el diseñador una vez construidos, lo que convertía a los diseños en sistemas rígidos, imposibilitando su utilización en la solución de otras aplicaciones ligeramente diferentes. Se podría decir que, cada aplicación tenía un circuito para su solución y cada circuito solucionaba una aplicación dada. El microprocesador tenía la característica de que la función que realizaba dependía no solo de sus características constructivas sino que dependía fundamentalmente de un programa almacenado fuera de dicho circuito desarrollado por el diseñador, donde este moldeaba las funciones que quería que este realizara, lo que brindaba gran flexibilidad a los nuevos diseños. Ahora con un mismo hardware se podían realizar muchas funciones con solo cambiar el programa que gobernaba dicho hardware. Para el año, 1974, INTEL saca al mercado el microprocesador 8080, microprocesador de 8 bits, con 78 instrucciones en su repertorio de instrucciones y capacidad de memoria para almacenar programas y datos de 65 536 localizaciones, el que a la postre constituyó el primer microprocesador utilizado de forma masiva en el diseño de sistemas para la solución de aplicaciones en los más disímiles campos, lo que marco el comienzo de una nueva era, cualitativamente superior, en el diseño digital.
Microcontroladores. El 8051 de la INTEL.
9
A partir de este momento comienza una carrera vertiginosa en el desarrollo de nuevos microprocesadores en la cual no se encontraba ya solo INTEL sino que se le fueron incorporando nuevas Compañías en la lucha por el gran mercado que se comenzaba a perfilar. De esta forma aparece ZILOG con su microprocesador Z80, para muchos el microprocesador de 8 bits más potente y muy utilizado en el diseño de equipos, asi como Motorola con su microprocesador de 8 bits 6800 por solo mencionar a dos. El año 1976 marca la salida al mercado del primer microprocesador de 16 bits, el 8086, siendo nuevamente INTEL la compañía productora. Con mayor velocidad de operación, repertorio de instrucciones más completo y capacidad de almacenamiento de programas muy superior al de sus antecesores, anunciando la temprana entrada de los microprocesadores en el diseño de Computadoras Digitales de Propósito General. El año 1980 con la irrupción en el mercado de la Microcomputadora IBM-XT de la Compañía IBM, basado en un microprocesador de 16 bits interno y de 8 bits externo, el 8088 de INTEL, diseñado por encargo específicamente para este objetivo comenzó lo que se ha dado en llamar la era de las Microcomputadoras dentro del desarrollo de los microprocesadores la que se extiende hasta el día de hoy. A partir de este momento los nuevos microprocesadores van saliendo al mercado y van siendo conocidos a partir de la microcomputadora basada en el mismo. Así la década de los 80 estuvo marcada por las microcomputadoras 80286 y 80386, basadas en los microprocesadores del mismo nombre, comenzando con este ultimo la era de los microprocesadores de 32 bits y la década de los 90 por las microcomputadoras 80486 y Pentium, comenzando con este ultimo la era de los microprocesadores de 64 bits. En la actualidad las diferentes versiones de microcomputadoras basadas en un número igual de versiones de microprocesadores Pentium caracterizan el mercado del diseño de las Microcomputadoras Digitales. ¿Dónde encajan en esta historia los Microcontroladores? Con el surgimiento de los primeros microprocesadores se convirtió en un sueño para muchos diseñadores de Circuitos Integrados, entre ellos INTEL, el poder integrar en un solo circuito todos los elementos que conforman una Computadora Digital. Este sueño tuvo su primera materialización hacia el año 1976 en el que esta compañía saca al mercado un circuito integrado al que dio el
Microcontroladores. El 8051 de la INTEL.
10
nombre de Microcomputadora en una Pastilla 8048 el que constituye el antecedente primario de los microcontroladores. Esta Microcomputadora en una Pastilla se encontraba muy limitada en cuanto a la capacidad de almacenamiento interno tanto de los programas como de los datos por lo que la idea original de construir una microcomputadora basada en el mismo fue dándole paso a la de utilizarlo como controlador de los periféricos que se le conectaban a la misma. Así encontró aplicación como controlador de la operación de los Teclados, en el control de la operación de las impresoras, de los ploteadores, etc. A esta Microcomputadora en una Pastilla se le fueron agregando funciones muy útiles para desarrollar aplicaciones de instrumentación y control en la industria, surgiendo de esta forma la versión industrial de las Microcomputadoras en una Pastilla, los Microcontroladores. Así salen al mercado en la década de los 80 la familia de microcontroladores de 8 bits de la INTEL, el 8051, y mas tarde la familia de microcontroladores de 16 bits de la misma compañía el 8096/80196. Estos dispositivos produjeron un obvio beneficio en aplicaciones pequeñas siendo su característica mas sobresaliente la de constituir sistemas integrados. Es incuestionable el aumento casi exponencial de nuevos productos en el mercado basados en nuevos Microcontroladores. Mientras que los diseñadores de Microprocesadores se han dedicado a aumentar las posibilidades y velocidad de los mismos pensando en mejores y más potentes Microcomputadoras y poniendo la vista en el desarrollo de grandes redes de comunicación mediante este dispositivo, un segmento del mercado, nada despreciable, ha sido ocupado de forma creciente por los Microcontroladores. Es como si el mercado se hubiera dividido en dos partes muy bien definidas: •
Producción de Microcomputadoras en todas sus variantes, basadas en Microprocesadores cada vez más potentes.
•
Producción de equipos para aplicaciones a la medida, basados en Microcontroladores cada vez más versátiles.
Esto ha incorporado a un gran número de las compañías tradicionales productoras de Microprocesadores a acompañar a la INTEL en la producción de Microcontroladores como son los casos de la Motorola, la Zilog, etc., y en otros casos a que surjan nuevas compañías a competir por el mercado como es el caso de la Microchip y de la Atmel. Todo esto a traído una nueva disyuntiva a los diseñadores de equipos para solucionar aplicaciones a la medida,
Microcontroladores. El 8051 de la INTEL.
11
¿Cuál Microcontrolador escoger a la hora de implementar mi aplicación? Démosle una vista a algunos de los principales fabricantes de Microcontroladores y a sus productos para irnos aclarando la respuesta a esta pregunta. 1.3 Principales fabricantes de Microcontroladores. Se considera a INTEL como una de las Compañías lideres a nivel mundial en la fabricación de Microcontroladores, constituyendo su familia de microcontroladores de 8 bits CMS-51, del cual el 8051 es su más conocido representante, uno de las mas utilizados en la solución de aplicaciones en la industria. Con una arquitectura interna del tipo Von Newman con la memoria de datos segregada, los microcontroladores de esta compañía brindan un repertorio de instrucciones muy completo en el que se incluyen instrucciones de multiplicación, división, ajuste decimal, etc. Sus posibilidades de expansión externa son amplias permitiéndole llegar a conformar sistemas donde la capacidad de memoria de programas y de datos que puede manejar es superior a las que le estaban permitidas manejar a la mayoría de los microprocesadores de 8 bits. Quizás debido a que la línea de fabricación de Microcontroladores en la INTEL constituye realmente una producción de fondo de esta compañía las herramientas que esta brinda para la puesta a punto de los sistemas fabricados con este microcontrolador no son de las mejores en el mercado. No obstante, dada su amplia utilización otras compañías proveen herramientas muy útiles en este sentido. Otra característica de esta familia de microcontroladores de la INTEL es la de contar con numerosas segundas fuentes de compañías que brindan microcontroladores con características similares a los de esta familia. Ejemplos de ello lo constituyen la Philips y la Atmel. La Philips cuenta con una gran variedad de microcontroladores, con la característica fundamental de constituir versiones de la familia CMS-51, ofertando relaciones de potencia/costo muy ventajosas para sus aplicaciones. La Philips a incorporado a estos microcontroladores la posibilidad de utilizar su bus serie sincrónico I2C para la expansión de las posibilidades del microcontrolador de poder trabajar conjuntamente con otros dispositivos en la solución de una aplicación dada. Por su parte la Atmel se ha hecho eco de la incorporación a sus microcontroladores de las tan cómodas memorias de almacenamiento permanente del tipo Flash, con lo que se aumenta significativamente la flexibilidad de
los diseños basados en los microcontroladores de esta
compañía. Esta compañía también brinda una gran variedad de microcontroladores que constituyen versiones de los microcontroladores de 8 bits de la INTEL, encontrándonoslo con
Microcontroladores. El 8051 de la INTEL.
12
empaquetados con diferente número de terminales y con diferentes combinaciones de circuitos empotrados en el microcontrolador. Otra de las principales empresas del mundo de dispositivos programables, Motorola, que dispone del potente microcontrolador 68HC11, muestra una gran variedad de aplicaciones resueltas basadas en este Microcontrolador. Los microcontroladores PIC de la compañía Microchip se emplean en la actualidad cada vez más debido a su reducido consumo, bajo costo, pequeño tamaño, facilidad de uso y la abundancia de información y herramientas de apoyo, así como la gran variedad de dispositivos que fabrican de forma tal que se puede decir, sin temor a equivocarnos, que para cada aplicación que usted necesite resolver, usted encontrará entre los microcontroladores de la Microchip el que se ajusta a sus necesidades con una relación beneficio / costo de las más ventajosas entre todos los microcontroladores. Empleando una arquitectura interna del tipo Hardvar, lo que le permite contar con ancho de bus diferentes para códigos y datos, subdivide sus microcontroladores en tres grandes gamas, la baja, la media y la alta, con prestaciones muy interesante para los diseñadores. Basado en un repertorio de instrucciones reducido, entre 32 y 35 instrucciones en dependencia de
la gama a la que
pertenezca el microcontrolador, le permite incorporar todas las ventajas que representa para el programador el poder trabajar con un microprocesador del tipo RISCH. No obstante, la subdivisión de la memoria de datos en bancos, y la necesidad de conmutar entre bancos para trabajar con los registros y la memoria de datos puede resultar un tanto complicada y poco estimulante para los principiantes en el diseño con estos microcontroladores. También Zilog ha irrumpido con fuerza en el mercado de los microcontroladores. Recientemente ha lanzado algunos modelos con memoria OTP de la familia Z86XX, muy completos y fáciles de manejar. Otras empresas como SGS - Thomson, Hitachi, Texas, Toshiba, Nacional Semiconductor, etc., abarcan pequeñas partes del mercado con sus microcontroladores los que relacionamos en la siguiente lista: HITACHI
HD64180
SGS-THOMSON (ST)
ST-62XX
NATIONAL SEMICONDUCTOR
COP8
TEXAS INSTRUMENTS
TMS370
TOSHIBA
TLCS-870
Microcontroladores. El 8051 de la INTEL.
13
INFINEON
C500
DALLAS
DS5000
NEC
78K
Como se puede observar, cada fabricante de Microcontroladores oferta un elevado número de modelos diferentes, desde los más sencillos hasta los más complejos. Esto que podría representar un dolor de cabeza para los diseñadores al tener que escoger entre tantas posibilidades cual es el microcontrolador que más se ajusta a su aplicación, realmente constituye una gran ventaja ya que al diseñador le es posible seleccionar, tomando en cuenta la capacidad de la memoria de programa y de datos, el número de líneas de Entrada/Salida digitales y analógicas, el tipo y la cantidad de elementos auxiliares y la velocidad de funcionamiento necesarios para resolver su aplicación, prácticamente el microcontrolador a la medida logrando precios muy ventajosos. Por su puesto para poder hacer una selección adecuada se hace necesario conocer las características fundamentales de todos los microcontroladores que se producen en la actualidad, cosa esta prácticamente imposible por la gran cantidad de fabricantes, versiones y por la velocidad en que van apareciendo nuevos productos en el mercado. En la práctica los diseñadores basan sus diseños en uno o dos fabricantes, tomando en cuenta no solo las posibilidades de los Microcontroladores que estos fabrican y sus precios, sino tomando en cuenta también el contar con las herramientas que le permitan la puesta a punto de sus productos lo más rápido posible. Por lo tanto cuando usted va a emprender el diseño de un circuito para la solución de una aplicación dada y se ha decidido por basar este diseño en un microcontrolador, ante de escoger con cual de ellos lo va a llevar a cabo tome en cuenta los siguientes aspectos: •
Con que herramientas de puesta a punto del hardware y del software cuento para llevar a cabo mi tarea. Tenga siempre presente que comprar herramientas para la puesta a punto de sistemas basado en un microcontrolador cualquiera cuesta por lo general mucho más que el gasto incurrido en la materialización del circuito que nos proponemos construir.
•
Cantidad y fiabilidad de la información con que cuento.
•
Existencia de suministrador y de segundas fuentes.
•
Relación beneficio / costo.
Ya tenemos una visión de las diferencias que existen entre un Microprocesador y un Microcontrolador, así como la importancia cada vez creciente de estos últimos en el diseño de sistemas para la solución de una aplicación dada. Hemos visto también la gran variedad de microcontroladores que se fabrican en la actualidad por un número muy grande de compañías en el mundo, cada uno de ellos con sus propias características y ventajas. Por su puesto solo
Microcontroladores. El 8051 de la INTEL.
14
estamos comenzando a adentrarnos en este tema y una buena pregunta a darle respuesta para poder continuar podría ser la siguiente, Cuando tengo un Circuito Integrado delante, ¿Cómo saber que me encuentro en presencia de un Microcontrolador? 1.4 Los Microcontroladores por dentro. Generalmente cuando tenemos un circuito integrado delante y queremos saber que función realiza buscamos en el manual que entrega el fabricante y hay conocemos las características tanto funcionales como eléctricas del circuito al que nos estamos enfrentando, de igual forma procederíamos en el caso que el circuito integrado en cuestión resulte ser un microcontrolador. Si el manual no esta a tu alcance los fabricantes de microcontroladores entregan los ´data sheet´ de sus circuitos en ficheros ´nombre.pdf´ que por lo general son accesibles a través de la pagina ´web´ de dichas compañías, por lo que con la sola lectura de la primera pagina de dicho ´data sheet´ sabremos si nos encontramos en presencia de un microcontrolador o no. Por lo que esto no constituirá el aspecto fundamental en este tema sino, en que conozcamos cuales son las características y circuitos que nos podemos encontrar cuando estamos en presencia de un microcontrolador. La Arquitectura interna. Como ya se explico anteriormente, un Microcontrolador es un computador completo, limitado en cuanto a las prestaciones que brinda, contenido en un chip de circuito integrado y que se designa para gobernar una sola tarea, lo que lo hace un controlador dedicado. En su memoria de programa interna solo reside un programa destinado a gobernar una aplicación determinada. Sus líneas de Entrada/Salida soportan el conexionado de los sensores y actuadotes del dispositivo a controlar. Una vez configurado y programado el microcontrolador solamente sirve para gobernar la tarea asignada. Por regla general un microcontrolador posee todos los componentes de un computador, pero con características fijas que no se pueden alterar. Estos elementos constituyen partes imprescindibles en cualquier microcontrolador al que nos enfrentemos. Estas partes comunes son: •
Procesador o Unidad Central de Proceso (CPU).
•
Unidad Aritmético y Lógica (ULA)
•
Memoria no volátil para contener el programa.
•
Memoria de lectura y escritura para guardar los datos.
Microcontroladores. El 8051 de la INTEL. •
15
Líneas de Entrada/Salida para los periféricos.
Un conjunto de circuitos adicionales adornan a los diferentes microcontroladores en dependencia de sus particularidades y constituyen circuitos que lo caracterizan. Estas funciones pueden estar presentes o no en dependencia del microcontrolador que nos estemos enfrentando. Estos circuitos auxiliares son: •
Oscilador interno.
•
Temporizadores.
•
´watch doog´ o perro guardián.
•
Convertidores A/D y D/A.
•
Módulos de captura.
El Procesador o Unidad Central de Procesos es el elemento más importante del microcontrolador tanto a nivel hardware como software. Se encarga de direccionar la memoria de programa, recibir el código de la instrucción en curso, efectuar su decodificación y efectuar la ejecución de la operación aritmética o lógica con ayuda de la Unidad Aritmético y Lógica que implica dicha instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. La comunicación entre las diferentes secciones internas del microcontrolador con la unidad Central de Procesos se efectúa a través de un conjunto de líneas internas denominadas buses que posibilitan el movimiento de direcciones, datos y señales de control. Estas líneas tomando en cuenta la función que realizan se dividen en tres grupos o buses tal y como ocurre en los sistemas a microprocesadores: •
Bus de datos. Se emplea para transferir los datos y los códigos de las instrucciones entre la memoria y la Unidad Central de Procesos. El número de líneas de este bus es igual a la longitud de palabra del dispositivo y es lo que define si el microcontrolador es de 8 o 16 bits.
•
Bus de direcciones. Permite transferir información de direcciones, a través de estas líneas la Unidad Central de Procesos envía la dirección que caracteriza al dispositivo con que quiere efectuar una operación, ya sea memoria de programa, memoria de datos o dispositivo de entrada / salida. El número de líneas en el bus de direcciones determina el número de posiciones de memoria, tanto de programa como de dato, que el microcontrolador puede especificar. Un bus de direcciones de 8 líneas sería capaz de especificar 256 direcciones diferentes.
Microcontroladores. El 8051 de la INTEL. •
16
Bus de control. El procesador utiliza las líneas del bus de control para sincronizar las operaciones entre los diferentes componentes así como conocer el estado en que se encuentran algunos dispositivos.
No todos los fabricantes de microcontroladores conectan internamente sus circuitos internos a través de los buses de la misma forma y por lo general cada uno define su propia Arquitectura Interna. En el caso de los microcontroladores de INTEL esta compañía adopto como Arquitectura Interna la misma que había definido para sus microprocesadores, la arquitectura conocida como de Von Newman, la que recibe su nombre del especialista que la propuso en los albores del diseño de las Grandes Computadoras.. Esta arquitectura se caracteriza porque la Unidad Central de Procesos es conectaba a una memoria única donde coexistían tanto los datos como las instrucciones a través de un sistema de buses común, ver Figura 1.4.1.
Figura 1.4.1. Estructura interna de un Microcontrolador con arquitectura Von Newman. Los sistemas con arquitectura Von Newman al dedicar un mismo bus de datos para mover la información entre la unidad central de procesos y la memoria de programa y de datos provocan que el ancho de banda de ambas memoria tenga que ser igual, por lo que el numero de bits dedicado a representar el código de una instrucción tenga que coincidir con el número de bits con que dicha unidad esta habilitada para manejar los datos. Esto trae como consecuencias la necesidad de que los códigos de algunas de las instrucciones tengan la necesidad de ser almacenados en más de una localización en la memoria de programas, provocando los siguientes inconvenientes: •
No coincide el número de instrucciones de un programa con el número de localizaciones de memoria que este necesita para su almacenamiento.
•
No todas las instrucciones consumen el mismo tiempo para su ejecución.
Microcontroladores. El 8051 de la INTEL.
17
La necesidad de conseguir rendimientos elevados en el procesamiento de las instrucciones y en aprovechar al máximo la capacidad de almacenamiento interno de dichas instrucciones ha desembocado en el empleo generalizado de procesadores de arquitectura Harvard, nombre que recibe dicha arquitectura al ser desarrollada en dicha universidad de los Estados Unidos. En esta arquitectura la memoria de programas y la memoria de datos son independientes y cada una dispone de su propio sistema de buses para el acceso, ver Figura 1.4.2.
Figura 1.4.2. Estructura interna de un Microcontrolador con Arquitectura Harvard. Esta característica permite que el ancho de banda de ambas memorias pueda ser diferente permitiendo la representación de los códigos con un número de bits diferentes, por lo general superior, que los empleados para representar los datos, con lo que se ahorra espacio para almacenar los programas. Ahora los inconvenientes vistos en la arquitectura Von Newman parecen estar solucionados al tener los fabricantes la posibilidad de aumentar el número de bits posibles a almacenar en cada localización de memoria de programas de forma tal que para almacenar el código de una instrucción solo se necesite de una localización de memoria, logrando con ello: •
Coincide el número de instrucciones de n programa con el número de localizaciones de memoria de programa necesarias para almacenarlos.
•
Salvo excepciones, todas las instrucciones consumen el mismo tiempo en su ejecución.
Microcontroladores. El 8051 de la INTEL.
18
Otra consecuencia del empleo de una u otra arquitectura a la hora de diseñar el microcontrolador lo constituye: •
Los Microcontroladores con arquitectura Von Newman no están capacitados para que el procesador efectué dos operaciones de forma simultánea, como puede ser, traer el código de la próxima instrucción a ejecutar de la memoria de programa y escribir el resultado de la instrucción en curso en la memoria de datos al utilizar el mismo bus para ambas operaciones.
•
Por su parte los microcontroladores con arquitectura Harvard, al tener buses de datos para la memoria de datos y de programas separados, están capacitados para efectuar estas dos operaciones de forma simultánea con lo que se logra reducir el tiempo de ejecución de los programas.
En la figura 1.4.3 se muestra la Arquitectura Interna del Microcontrolador de la INTEL 8051, la que se corresponde con la Arquitectura Von Newman, mientras que en la Figura 1.4.4 se muestra la Arquitectura Interna del Microcontrolador 16F873 de la Microchip, la que se corresponde con la Arquitectura Harvard.
Figura 1.4.3. Arquitectura Interna del Microcontrolador 8051.
Microcontroladores. El 8051 de la INTEL.
19
Figura 1.4.4. Arquitectura Interna del Microcontrolador de la Microchip de la Gama Media PIC16F873. Al observar la arquitectura interna del Microcontrolador de la 8051 puede llamar a confusión que aparecen separadas la memoria de datos de la memoria de programa, ver Figura 1.4.3, lo que podría ser contradictorio con lo que se había definido como la arquitectura de Von Newman. No obstante, aunque ambas memorias se encuentran separadas ambas se conectan con la Unidad Central de Procesamiento a través del mismo bus de datos, lo que resulta lo característico en este tipo de arquitectura. En este caso se define la 8051 como un microcontrolador con arquitectura interna del tipo Von Newman, pero con la memoria de datos segregada. Más adelante veremos las consecuencias de esto. Por su parte al observar la arquitectura interna del microcontrolador de la Microchip 16F873 podemos notar la existencia de un bus de datos de 14 bits que conecta a la memoria de programas con la Unidad Central de Procesos a través del cual se mueven los códigos de las instrucciones a ejecutar por el microcontrolador, mientras que otro bus de datos de 8 bits es el encargado de mover los datos a todos los otros elementos que conforman al microcontrolador, lo que constituye lo típico de una arquitectura del tipo Harvard. Aunque el presente curso esta orientado al microcontrolador 8051, hemos creído oportuno comparar las arquitecturas internas de estos dos microcontroladores que caracterizan a dos de los fabricantes más importantes de estos dispositivos en la actualidad, con el objetivo de que los estudiantes puedan comprender bien las limitantes y ventajas de la arquitectura Von Newman típica del 8051 con la
arquitectura Hardvar que va apareciendo en los modernos
microcontroladores de la Microchip.
Microcontroladores. El 8051 de la INTEL.
20
Hasta aquí en muchas ocasiones hemos hecho hincapié en la existencia de un programa que el microcontrolador debe ejecutar, por lo que en este momento nos parece oportuno dar respuesta a las dos preguntas siguientes, ¿Qué es un Programa?, ¿Cómo se ejecuta este Programa? Un Programa es una lista de instrucciones al procesador que con un ordenamiento lógico busca resolver una determinada aplicación. Todos los microcontroladores tienen un conjunto de instrucciones que pueden ejecutar, definidas por el fabricante, y que constituyen su Repertorio de Instrucciones. Repertorio de Instrucciones. Cada tipo de microcontrolador tiene su propio conjunto de instrucciones, y por lo general los programas escritos para uno no funcionarán en otro. Un microcontrolador típico tendrá en su repertorio de instrucciones, instrucciones para: transferir información entre registros y memoria, realizar operaciones aritméticas y lógicas, efectuar comparaciones y pruebas sobre el contenido de sus registros de memoria, así como para controlar la secuencia de ejecución de programas, etc. Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales, las que influyen decisivamente en las instrucciones que brinda el microcontrolador y la forma de programarlo. Estas tres orientaciones son: CISC, RISC y SISC. Un gran número de procesadores usados en los microcontroladores están basados en la filosofía CISC (Computadores de Juego de Instrucciones Complejo). Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actúan como macros, facilitándole el trabajo de programación. Tanto la industria de los computadores comerciales como la de los microcontroladores están inclinándose hacia la filosofía RISC (Computadores de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es "específico", o sea, las instrucciones se adaptan a las necesidades de
Microcontroladores. El 8051 de la INTEL.
21
la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico). Nuevamente los dos microcontroladores que hemos estado comparando en el material se caracterizan por pertenecer a dos grupos diferentes. El 8051 se caracteriza por ser un microcontrolador tipo CISC con más de 80 instrucciones en su repertorio de instrucciones, algunas tan complejas como las instrucciones de Multiplicación y de División. Por su parte, el Microcontrolador 16F873 se caracteriza por ser un microcontrolador tipo RISC con solo 35 instrucciones en su repertorio. Por lo general la operación que una instrucción ha de ejecutar está definida por un código de operación, generalmente de un solo byte, conocido también como opcode. Algunas instrucciones requieren además del código de la instrucción, información extra para definir los operandos. Por ejemplo, una instrucción para almacenar el contenido de un registro en una posición de memoria, necesitará incluir la dirección de memoria de destino. La Unidad de Control y Decodificación de instrucciones incluida en la Unidad Central de Procesos del microcontrolador constituye el corazón del procesador. Esta es la encargada de extraer de forma secuencial las instrucciones de la memoria de programa y luego ejecutarlas. Unido a la Unidad de Control se encuentra el generador de reloj, que utiliza un oscilador para producir una señal de reloj muy precisa. El tiempo se divide en un cierto número de ciclos de la señal de reloj. El funcionamiento de la Unidad de Control y Decodificación de Instrucciones se puede dividir en dos partes o ciclos, el Ciclo de Búsqueda y el Ciclo de Ejecución. •
Ciclo de Búsqueda. En este ciclo el procesador transfiere la dirección de la siguiente instrucción a ejecutar por el microcontrolador al Bus de Direcciones interno, conjuntamente con la orden de lectura de la memoria de programa a través de las señales del Bus de Control interno. Un tiempo después, el procesador lee la información puesta en el Bus de Datos interno por parte de la memoria de programa como respuesta a la orden de lectura, transfiriendo esta información al Registro de Instrucciones.
•
Ciclo de ejecución. En este ciclo se ejecuta la instrucción. Para ello el Registro de Instrucciones está conectado al Decodificador de Instrucciones, que determina cuántos byte de información adicionales se requieren para poder ejecutar la instrucción, en caso de que sean necesarios. De ser necesarios, estos se cargan mediante Ciclos de Búsqueda adicionales, tantos como byte conformen la instrucción a ejecutar. Una vez que todos los
Microcontroladores. El 8051 de la INTEL.
22
operandos que intervienen en la operación son conocidos, y el microcontrolador ejecuta la instrucción. Cuando la ejecución de la instrucción es completada, el microcontrolador comienza, de forma automática un nuevo Ciclo de Búsqueda de la siguiente instrucción del programa, con lo que se garantiza la operación secuencial y cíclica del programa por parte del microcontrolador. La ejecución es por tanto, una secuencia continua de ciclos de búsqueda y ejecución. De lo explicado hasta aquí las tareas a ejecutar por el microcontrolador el diseñador se las entrega mediante un Programa diseñado a partir de las instrucciones propias del microcontrolador y que el fabricante define en el Repertorio de Instrucciones del mismo. Estas instrucciones son representadas por códigos binarios reservados traídos de la memoria de programa interna del microcontrolador hacia su Unidad Central de Procesos durante los Ciclos de Búsqueda. Con el objetivo de continuar profundizando en este tema podríamos intentar dar respuesta a la siguiente pregunta, ¿Qué características presentan estas memorias de programa interna en los microcontroladores? ¿Es el único tipo de memoria con que cuentan los microcontroladores? La Memoria interna. Los microcontrolador están diseñados para que en su Memoria de Programa interna se almacenen los códigos de todas las instrucciones que conforman el programa definitivo que solucionará una aplicación dada. Una vez definido el programa este no debe ser cambiado mientras el microcontrolador se mantenga resolviendo la aplicación para el cual fue creado. Esta característica es la que hace que la Memoria de Programa de los microcontroladores sean del tipo de almacenamiento permanente, constituyendo esta su característica común en todos los casos. Son posibles encontrar cinco tipos de Memoria de Programa en los microcontroladores: •
ROM de máscara. Esta memoria se graba en el chip durante el proceso de fabricación. Los altos costes de diseño sólo aconsejan usarla cuando se precisan series grandes.
•
EPROM. En la superficie de la cápsula del microcontrolador existe una ventana de cristal por la que se puede someter al chip a rayos ultravioletas para producir el borrado de la memoria con el objetivo de programarla nuevamente. Su coste unitario es elevado y se justifica en la fase de Puesta a Punto de los sistemas.
Microcontroladores. El 8051 de la INTEL. •
23
OTP (One Time Programmable). Este modelo de memoria sólo puede ser grabada una vez por parte del usuario. Su bajo precio y la sencillez de la grabación aconsejan este tipo de memoria para prototipos finales y series de producción cortas.
•
EEPROM. La grabación es similar a la EPROM y OTP, pero el borrado y nueva programación es mucho más sencillo al poderse ejecutar eléctricamente, en el propio circuito, las veces que se quiera. Muy utilizada para almacenar configuraciones de los sistemas que son de vital importancia para su correcto funcionamiento y que por ende no deben perderse por cualquier falla de la energía.
•
FLASH. Se trata de una memoria no volátil de bajo consumo que se puede escribir y borrar en el propio circuito al igual que la EEPROM, pero suele disponer de mayor capacidad que estas últimas. El borrado sólo es posible en bloques completos. Por sus mejores prestaciones está sustituyendo a la memoria EEPROM en los microcontroladores modernos.
Estos tipos de Memoria de Programa están constituidos por un conjunto de localizaciones las que se encuentra organizada de forma secuencial de las direcciones. De la explicación anterior queremos llamar la atención en dos palabras específicas, localización y dirección. Definiremos como localización al lugar físico en la memoria destinado para almacenar un contenido dado en un formato digital. Estas localizaciones están constituidas por los bits que pueden tomar el valor de ´0´ o ´1´ en dependencia de la información que se desea almacenar. El número de bits que conforman una localización dada en la memoria de programa depende del microcontrolador. Por ejemplo en el caso del microcontrolador 8051 el número de bits es de 8 mientras que en el 16F87 es de 14. Por su parte definiremos como dirección a la manera de referirnos a una localización dada a la hora de trabajar con ella. A una localización se le asigna una dirección que es única y propia de ella. Por lo tanto cuando hablamos de una localización de memoria de programa nos estaremos refiriendo a ella o bien por su contenido o por su dirección. Por lo general tanto la dirección como el contenido de una localización dada se expresa en hexadecimal, por un problema de comodidad. El esquema de la Figura 1.4.5 nos ayudará a comprender mejor lo explicado sobre este aspecto.
Microcontroladores. El 8051 de la INTEL.
24
Figura 1.4.5 Concepto de localización, dirección y contenido en la memoria de programa. El número de localizaciones define la capacidad con que cuenta la memoria de programas para almacenar las instrucciones, tablas o cualquier otra cosa que defina el diseñador del sistema. Esta capacidad se especifica en Kilo, lo que resulta equivalente a 1024 localizaciones. Por lo que cuando me definen que el microcontrolador cuenta con 2K localizaciones en su memoria de programas, me están especificando de que el microcontrolador cuenta con 2048 localizaciones para almacenar códigos u cualquier otra cosa en su memoria de programa. La cantidad de información posible almacenar en esta memoria de programa no solo depende del numero de localizaciones con que cuente, sino también dependerá del numero de bits con que este conformada dicha localización. Por ejemplo si en el caso de la memoria anterior las localizaciones estuvieran conformadas por 8 bits la capacidad de almacenamiento de la memoria en cuestión sería de 2048 bytes, se define como byte un número conformado por 8 bits, o 2 kilobyte o lo que es lo mismo 2048 x 8 bits. Tomando como ejemplo los dos microcontroladores a los que nos hemos estado refiriendo durante el material el 8051 y el 16F873, en el primero su capacidad de memoria de programa es de 8 Kilobyte, mientras que en el segundo su capacidad de memoria de programa es de 8 kx14 bits, ya que las localizaciones de memoria de programa en este microcontrolador están conformadas de 14 bits.
Microcontroladores. El 8051 de la INTEL.
25
Las localizaciones de memoria de programa internas del microcontrolador tienen direcciones fijas e impuestas por el fabricante, las que no pueden ser alteradas por el diseñador del sistema, correspondiéndole a una localización ser la de la dirección más baja y a otra la dirección mas alta. Entre estas dos se encuentran el resto de las localizaciones a las que le corresponden direcciones consecutivas. Una de estas localizaciones juega un papel trascendental a la hora de cargar nuestro programa de aplicación en la memoria de programa y es a la que le debe corresponder almacenar el código de la primera instrucción de nuestro programa. La dirección de esta localización no es la misma para todos los microcontroladores, pero si es única para un microcontrolador dado. Por ejemplo en el caso del microcontrolador 8051 esta localización es a la que le corresponde la dirección más baja, la 0000 H. En la Figura 1.4.6 se muestra de forma esquemática la estructura de la memoria de programa del microcontrolador 8051.
Figura 1.4.6 Memoria de Programa del microcontrolador 8051. Mientras que los programas deben permanecer inalterables durante el tiempo de vida del microcontrolador en una aplicación dada, los datos que manejan estos programas por lo general varían continuamente y eso exige que la memoria que los contiene nos brinde la posibilidad de almacenar datos de forma temporal y poderlos alterar cada vez que sea necesaria por el programa. de ahí que estas memoria se conozcan con el nombre de memoria de datos, aunque esto no excluya la posibilidad de que en algunos casos puedan almacenar códigos o partes integrantes de los programas. Lo anterior impone la necesidad de que las memorias que conformen la memoria de datos de los microcontroladores deban ser del tipo de lectura y escritura o como se conoce normalmente Memorias RAM.
Microcontroladores. El 8051 de la INTEL.
26
Las memorias RAM pueden ser de diferentes tipos pero todas tienen en común la característica de que la información almacenada en ellas se pierde cuando se les retira la energía, de ahí que se conozcan como memorias volátiles. Es por ello que en la mayoría de los microcontroladores el contenido de las localizaciones de la memoria de datos cuando este es energizado es desconocido. Los conceptos definidos de localización, dirección y contenido para el caso de la memoria de programa son validos para la memoria de datos también. Las memorias RAM que se fabrican en la actualidad las podemos dividir en dos grandes grupos: •
Memoria RAM Dinámica. La información almacenada en ellas tiene que ser refrescada constantemente y en intervalos de tiempo bien definidos, de no hacerse la información almacenad en ellas se pierde. Esta incomodidad en el trabajo con este tipo de memoria es recompensado con la posibilidad de obtener mucha más capacidad de memoria en una misma área que en los otros tipos.
•
Memoria RAM Estática. No se hace necesario el refrescamiento de la información almacenada en la memoria y el contenido de una localización una vez definido no se pierde a no ser porque el programa escriba un nuevo dato en dicha localización o la memoria pierda la energía por alguna causa.
Las memorias RAM Estáticas (SRAM) resultan ser las más apropiada para materializar la memoria de datos de los microcontroladores y es con la que están construidas por lo general estos dispositivos. Hay microcontroladores que aprovechan la característica de las memorias EEPROM de poder ser leídas y escrita de forma eléctrica y poseen parte de su memoria de datos implementada por una memoria de este tipo, de forma tal que cierta información, que no constituye programa pero si información muy importante para el trabajo del sistema, no se pierda producto de la perdida de la energía, pudiéndose recuperar dicha información una vez que esta es establecida permitiendo al sistema continuar con su tarea. Como hemos visto en epígrafes anteriores otros circuitos comparten el espacio interno de los microcontroladores con la memoria. Estos circuitos se incorporan en dependencia del microcontrolador que sea, reforzando la potencia del dispositivo para resolver determinadas tareas. A estos circuitos los llamaremos circuitos empotrados y a ellos estará dedicado el próximo epígrafe.
Microcontroladores. El 8051 de la INTEL.
27
Circuitos empotrados más comunes. Los circuitos empotrados constituyen aquellos dispositivos que el fabricante agrega a un microcontrolador dado con el objetivo de que contengan un conjunto de facilidades para realizar determinadas funciones que por lo general son las mas comunes encontrar en los sistemas para los que fue desarrollado dicho microcontrolador. Dado que la mayoría de los microcontroladores fueron concebidos por sus fabricantes para resolver aplicaciones dedicadas a la instrumentación y el control, estos han agregados a los mismos un conjunto de facilidades que se repiten mucho de un microcontrolador a otro. Entre las facilidades más comunes que se encuentran en muchos microcontroladores o en alguna de sus versiones podemos mencionar: •
Los Temporizadores.
•
El Perro guardián.
•
Los Módulos de Captura, Comparación y PWM.
•
Los Puertos Serie ya sean sincrónicos o asincrónicos.
•
Los Conversores A/D.
Como mencionamos anteriormente no todas estas facilidades tienen que estar presentes en un mismo microcontrolador. Por ejemplo el 8051 en su versión clásica cuenta con 2 Temporizadores y 1 Puerto Serie, no contando ni con Perro Guardián, ni con Modulo de Captura, Comparación y PWM, ni con Conversores A/D, sin embargo el 16F873 cuenta con 3 Temporizadores, Perro Guardián, 2 Módulos de Captura, Comparación y PWM, 2 Puertos Serie y un Conversor análogo Digital con 5 entradas analógicas. Poder conocer las facilidades que brinda al diseñador el contar con alguno de estos elementos en su microcontrolador somos del criterio de que nos permitiría tener una visión completa de que es lo que podemos hacer con un microcontrolador dado. Por lo que le proponemos que en a continuación le demos respuesta a las preguntas siguientes, ¿Qué función realiza cada uno de estos circuitos empotrados? ¿Para que tipo de operaciones me pudrieran ser útiles en una aplicación dada?
Microcontroladores. El 8051 de la INTEL.
28
Los Temporizadores. Son muchas las aplicaciones en las cuales los Temporizadores constituyen una ayuda valiosa e imprescindible para el diseño, ejemplos de ello son los siguientes casos: •
Determinar de forma automática el tiempo en ´1´ de un pulso generado por un circuito.
•
Determinar el valor que toma una determinada variable física con una periodicidad de 1 segundo.
•
Determinar la frecuencia de un tren de pulsos generado por un circuito.
•
Determinar la cantidad de productos terminados que se mueven por una cinta transportadora.
En los dos primeros casos se impone la necesidad de contar tiempo, mientras que en los dos últimos lo necesario es contar un determinado evento. En los cuatro casos los Temporizadores podrían ser utilizados como parte de la solución o como elemento fundamental de la misma. De los ejemplos anteriores podemos concluir las funciones fundamentales para las que están destinados los Temporizadores en un microcontrolador, las que las podemos resumir en los siguientes tres aspectos: •
Como reloj interno en la sincronización de eventos.
•
En la generación de intervalos de tiempo.
•
Como contador de eventos externos.
La pregunta aquí sería, ¿En qué consisten los Temporizadores?, que pueden realizar tareas tan disímiles. En esencia los Temporizadores consisten en un circuito contador, de 8 o de 16 bits, al que se le puede escoger mediante su programación, la fuente de conteo, la habilitación del conteo, la cantidad de bits y la base de conteo, lo que permite al diseñador moldear al temporizador en dependencia de las necesidades de su aplicación. Una vez programados, su operación es completamente por hardware, liberando al microcontrolador de la labor de supervisión por software de los mismos. Por ejemplo, si la fuente de conteo es la salida del circuito oscilador interno del microcontrolador, entonces el contador estaría contando tiempo y el Temporizador podría ser utilizado como reloj
Microcontroladores. El 8051 de la INTEL.
29
interno en la sincronización de eventos o como generador de intervalos de tiempo muy preciso. Por otro lado, si la fuente de conteo lo constituye una señal externa al microcontrolador que responde a la ocurrencia de un determinado evento, entonces el contador contaría eventos y el Temporizador estaría contando las veces que dicho evento ocurre. Estos contadores además, cuentan con una lógica que determina cuando el contador se desborda lo que genera la habilitación de una bandera propia de cada Temporizador y el pedido de interrupción al microcontrolador para ser atendidos. El Perro Guardián. En esencia es un temporizador, pero con la característica de que no se le puede cambiar ni la fuente de conteo ni la base de conteo. Todo lo que se puede decidir es cuando esta habilitado y cuando no, además, mediante instrucción se puede reiniciar su conteo cada vez que el programador lo entienda conveniente dentro del programa. De esta manera el Perro Guardián una vez habilitado se desborda, ladra de hay su nombre, siempre que transcurra el mismo intervalo de tiempo para un microcontrolador dado para una frecuencia de reloj dada, si no fue interrumpido su conteo mediante una instrucción de reinicio. La interrogante en este momento podría ser, ¿Cuál puede ser la función del Perro Guardián en una aplicación dada? En esencia su función es la de avisarnos que una determinada tarea se encuentra fuera de tiempo y por ende existe algún fallo en el sistema. Existen programas que una vez iniciadas una tarea dada, el microcontrolador espera por alguna respuesta antes de continuar con el resto del programa. Esto se implementa mediante un lazo de espera que pregunta constantemente por la ocurrencia de una condición dada y del cual no se saldrá hasta que dicha condición ocurra. Por ejemplo, se le da inicio de conversión a un Conversor Análogo Digital y el programa se queda esperando porque el Conversor le indique que termino con la conversión para efectuar su lectura, pero esta condición nunca se da, digamos que porque el Conversor esta roto o por cualquier otra causa. En este caso el programa quedaría en un lazo infinito del que no saldría, ya que la condición por la que espera nunca ocurre, no existiendo otra causa que lo haga salir. Ahora bien, si antes de iniciar la tarea se habilita el Perro Guardián, el programa se quedaría en el lazo infinito hasta que este se desborde y con ello sacaría al programa de esta condición. Si por el contrario todo ocurre bien, una vez leído el Conversor se reinicializa la operación
del Perro
Guardián, comenzando nuevamente con el conteo y por consiguiente no ocurriendo su
Microcontroladores. El 8051 de la INTEL.
30
desbordamiento y por tanto no interrumpiendo la operación normal del microcontrolador. De este forma el programa continuará con su secuencia de trabajo tal y como estaba establecido por el programador. Todo lo que debe tener en cuenta el programador es que el tiempo de respuesta de la condición por la que se pregunta sea menor que el tiempo en que se desborda el Perro Guardián. El Módulo de Captura, Comparación y PWM. Estas tres funciones por lo general vienen implementadas en un mismo dispositivo, a pesar de que realizan funciones diferentes, ya que utilizan los mismos recursos para efectuar su operación. Por lo general este recurso compartido es uno de los Temporizadores. Cada una de las funciones viene implementada mediante un Modo de operación específico. Estos Modos de Operación son: •
Modo de Captura.
•
Modo de Comparación.
•
Modo de Modulación de Ancho de Pulsos.
En el Modo de Captura la función fundamental es la de capturar la información que existe en uno de los Temporizadores al ocurrir una condición externa al microcontrolador. Para ello, en un registro interno del microcontrolador, por lo general de 16 bits, se almacena el valor en curso en el Temporizador siempre que ocurra dicha condición externa, introducida al microcontrolador a través de uno de sus terminales. Lo que puede constituir una condición, esta muy en dependencia del microcontrolador que sea, pero alguna de las más comunes resultan ser: •
Un flanco ascendente.
•
Un flanco descendente.
•
Cada 4 flancos ascendentes.
•
Cada 16 flancos ascendentes.
Al verificar el microcontrolador la ocurrencia de una de las posibles condiciones externas, este lleva a cabo una captura del valor en el Temporizador en cuestión y se activa una bandera interna indicando que es el momento de leer el valor en el registro de captura correspondiente. Esta bandera puede generar un pedido de interrupción, si esta habilitada, librando al programa de chequear mediante muestreo cuando dicha bandera se hace verdadera. Una aplicación del Modo de Captura puede ser la medición de los intervalos de tiempo que transcurre entre dos pulsos que ocurren externamente. Para ello el acontecimiento que se vigila es
Microcontroladores. El 8051 de la INTEL.
31
la ocurrencia del flanco de subida de la señal en cuestión y con ambos valores tomados del registro de captura se puede determinar el tiempo transcurrido entre uno y otro pulso. En el Modo de Comparación la función fundamental es la de comparar el valor de un registro interno con el contenido de uno de los Temporizadores. Para ello, cuando el Modulo trabaja de esta manera el contenido de dicho registro interno, previamente definido por el fabricante, se compara continuamente con el contenido de uno de los Temporizadores, cuando coinciden ambos valores, el microcontrolador lo puede indicar mediante el cambio del valor en un terminal de salida previamente configurado para esta tarea o mediante la activación de un pedido de interrupción. En el Modo de Modulación por Ancho de Pulsos la función fundamental es la de modular el intervalo de tiempo en el que cambia de ´1´ a ´0´ un determinado terminal de salida del microcontrolador. Para ello el contenido de un registro interno de este, por lo general de 8 bits, se compara con el valor almacenado en uno de los Temporizadores, enmarcando el tiempo de ´1´ y de ´0´ de una determinada señal que se genera externamente a través de uno de los terminales del microcontrolador. Este modo de operación puede ser de gran utilidad para el control de la velocidad de los motores de corriente directa. El Puerto Serie. La solución de la comunicación entre dispositivos separados entre si distancias relativamente largas, pasa hoy en día de forma insoslayable por la transmisión y la recepción de los datos de forma serie. Un ejemplo de lo anterior lo podría constituir la necesaria comunicación de un equipo construido en base a un microcontrolador y diseñado para la adquisición de datos de forma remota en un determinado proceso industrial con una microcomputadora donde se encuentra instalado el Programa Supervisorio de todo el sistema. La mejor solución en este caso, para la comunicación, lo constituiría la creación de un canal serie entre ambos dispositivos. Para ello se hace necesaria la existencia de un dispositivo interno en el microcontrolador que convierta los datos paralelos que se mueven dentro del microcontrolador a un formato serie que permita su transmisión hacia el dispositivo externo y lo inverso, la conversión de los datos que le llegan al microcontrolador serie del dispositivo externo en paralelo para que pueda ser utilizado internamente por el microcontrolador. Para el diseñador en este caso sería de gran utilidad el poder contar con un Puerto Serie que se encargue de estas dos tareas. Existen dos formas básicas de efectuar esta transmisión serie, conocidas como Sincrónicas y Asincrónicas. En la Comunicación Serie Sincrónica conjuntamente con los datos, el microcontrolador amo transmite una señal de reloj que es utilizada por el microcontrolador esclavo
Microcontroladores. El 8051 de la INTEL.
32
para la recepción de los mismos, los datos son transmitidos a la frecuencia de la señal de reloj. En el caso de la Asincrónica no existe esta señal de reloj independiente de los datos para sincronizar la recepción de los mismos, sino que la señal de sincronización viaja conjuntamente con el dato y constituye el primer bit de la transmisión. Los bits de datos que le siguen se transmiten a una determinada frecuencia de bits reconocida por el receptor, que le permiten a este sincronizar la recepción de los datos. De la explicación anterior podemos concluir que independientemente de la forma empleada para la transmisión serie de los datos, contamos con una cadena serie de bits que constituyen los datos y una determinada frecuencia a la que se transmiten dichos bits. Esto es lo que provoca que el circuito básico Puertos Serie lo constituyan los Registros Desplazamiento. Estos circuitos son capaces de desplazar de forma serie un dato a una frecuencia dada. Para ello cuentan con un conjunto de biestables internos concatenados de forma serie, la salida del biestable anterior constituye la entrada del biestable siguiente, con entrada de reloj común. Estos, además permiten cargar sus biestables con un dato que le llega de forma paralela y leer la información almacenada en estos de forma paralela. La señal de reloj a los biestables en muchos microcontroladores es entregada por uno de los Temporizador. El Conversor A/D. Son muchas las aplicaciones donde se emplea el microcontrolador para conocer el valor en unidades de ingeniería que tiene una determinada variable física, como puede ser la Temperatura, la Humedad Relativa, la Presión en una Tubería, etc. Para ello se hace necesario poder contar en el sistema con algún elemento transductor que convierta el valor de esta variable física en el valor de una determinada variable eléctrica, como puede ser un valor de Resistencia, un valor de Capacidad, etc. Por lo general estos dispositivos son conocidos con el nombre de Sensores. Generalmente los sensores vienen acompañados de otro circuito, que se conocen con el nombre de Transmisor, que convierte esta variable eléctrica en una señal eléctrica lista para ser transmitida. Esta señal eléctrica puede ser un voltaje o una corriente enmarcada en un intervalo de valores continuos. Esta señal es la que llega en la mayoría de las aplicaciones al microcontrolador para su procesamiento. La característica fundamental de esta señal es que la misma es analógica, no digital, por lo que seria muy útil poder contar en el microcontrolador con algunas entradas que aceptaran señales analógicas y con un circuito interno que convierta esta señal analógica en un número digital listo para ser procesado por el este. Muchos microcontroladores cuentan con estas entradas
Microcontroladores. El 8051 de la INTEL.
33
analógicas, por lo general más de una, y con estos circuitos conversores analógicos – digitales, ejemplo de ello son el 16F873 y algunas versiones del 8051. De esta manera todo lo que tiene que hacer el programador es dar inicio al proceso de conversión al conversor, esperar por que este concluya, para leer un número digital que estará relacionado con el valor de voltaje o de corriente impuesto por el transmisor del sensor en la entrada analógica correspondiente. La característica fundamental de estos Conversores Análogo - Digitales lo constituye el número de bits con que entregan el valor digital obtenido producto de la conversión de la señal analógica. Este número de bits esta relacionado con la precisión del conversor y con la posibilidad del microcontrolador de trabajar con valores más cercanos al valor real de la señal analógica. Por lo general estos conversores son de 8 o de 10 bits. Ya conocemos los elementos más comúnmente encontrados en los microcontroladores, su función, modo de operación y posibles aplicaciones a resolver con los mismos, pero, ¿Nos encontraremos todos estos circuitos empotrdos en el microcontrolador 8051? ¿Cómo trabajar con los que existen? ¿Qué posibilidades y qué limitaciones me brindan? Esperemos dar respuestas a estas interrogantes mediante el estudio del microcontrolador 8051 objetivo fundamental de los temas que aparecen a continuación en este material.
Microcontroladores. El 8051 de la INTEL.
34
Tema 2. El microcontrolador 8051. Se considera a INTEL como el "padre" de los microcontroladores. Este fabricante siempre ha ido por delante de los demás presentando los nuevos productos. El primer microcontrolador de 8 bits se considera al 8048 y lo fabricó esta compañía en la década de los 70. La siguiente generación, más evolucionada, fue la del 8051 / 8052 a la que ha seguido la de 16 bits, 80C196, que alcanza frecuencias de funcionamiento de hasta 50 Mhz. Con buen olfato comercial, INTEL ha lanzado versiones de microcontroladores basados en los microprocesadores 8088 y 8086. Se trata de los modelos 80188 y 80186. La misma política ha seguido con el 80386 creando el 80386EX. Estos últimos productos permiten trabajar con las herramientas clásicas desarrolladas para el entorno de la PC. 2.1 La Familia MCS-51. En el titulo de este epígrafe ha aparecido una palabra nueva, familia. Por su puesto que es nueva cuando estamos hablando de microcontroladores pero de la cual tenemos una definición en la vida social muy clara. La pregunta a contestar en este momento podría ser, ¿Qué constituye una familia de microcontroladores? Por regla los fabricantes cuando sacan al mercado un microcontrolador lo acompañan de un conjunto de versiones del mismo que son los que constituyen su familia. Estas versiones se caracterizan por tener un alto porciento de compatibilidad del punto de vista del hardware y del software entre si, pero presentan algunas diferencias como pueden ser: el tipo de memoria de programa que utilizan, la capacidad de la memoria de programa y de datos, el tipo y número de dispositivos complementarios que traen integrado, las posibles fuentes de interrupción, etc. Todos estos aspectos hacen que los microcontroladores que integran una familia sean similares pero no iguales. Con el nombre de MCS-51 se define a una familia de microcontroladores de 8 bits desarrollados originalmente por la INTEL, de la cual el microcontrolador 8051 es su principal representante.. Este microcontrolador de 8 bits, presenta un software orientado a facilitar el desarrollo de aplicaciones para la instrumentación y el control. Con una gran flexibilidad del punto de vista del hardware constituye un dispositivo ideal, del punto de vista económico y de tiempo de desarrollo para la solución de aplicaciones que demanden la necesidad de pocos recursos en su solución. Los primeros microcontroladores de esta familia que INTEL coloca en el mercado respondían a la tecnología de fabricación HMOS y llevaban el nombre de 8051AH, 8031AH y 8751H.
Microcontroladores. El 8051 de la INTEL.
35
¿Qué es lo que tenían de común estos dispositivos que posibilitaba su inclusión dentro de una misma familia de microcontroladores? ¿Qué es lo que los diferencia y les daba particularidades propias? Como características comunes estos tres dispositivos tenían las siguientes: •
Necesidad de una sola fuente de alimentación de 5 volts.
•
Unidad Central de Procesos de 8 bits.
•
Oscilador interno.
•
128 byte de Memoria de Datos interna.
•
Cuatro Bancos de Registros internos.
•
128 banderas posibles a definir por software por el programador.
•
Ciclo de Instrucción de un microsegundo a 12 Mhz.
•
Dos Temporizadores de 16 bits.
•
Una Unidad Asincrónica Serie Full Duplex.
•
Seis fuentes de interrupción vectorizada con cinco vectores, estructurada en dos niveles de prioridad.
•
Modos de Direccionado Directo, Indirecto, Inmediato, Extendido y de Bit en sus Instrucciones.
•
Instrucciones para la aritmética binaria y decimal, incluyendo instrucciones para la Multiplicación y la División.
•
Procesador Booleano integrado para las aplicaciones de control.
•
Modo Especial de Trabajo en el que se le pueden conectar al sistema de forma externa hasta 64 Kilobyte de Memoria de Programas y 64 Kilobyte de Memoria de Datos.
Un aspecto establecía la diferencia entre estos tres dispositivos. Este aspecto estaba relacionado con la existencia o no y el tipo de la Memoria de Programa interna para aquellos que la tuvieran. En el caso del 8031AH no tiene Memoria de Programa interna lo que imponía al diseñador siempre utilizarlo en el Modo Especial de Trabajo, conectándole la Memoria de Programa de forma externa. Esto a su vez condicionaba a que este microcontrolador tuviera que generar su propio Bus de Direcciones y de Datos externo lo que lo limitaba en cuanto al numero de terminales disponibles para líneas de entrada / salida, quedando limitado a solo 16 agrupadas en dos Puertos de 8 bits. Son estas las razones por la que muchos se cuestionan si esta versión de la familia constituye realmente un microcontrolador o es en realidad un microprocesador con dispositivos empotrados para realizar determinadas funciones.
Microcontroladores. El 8051 de la INTEL.
36
Por su parte las versiones 8051AH y 8751H cuenta con una capacidad de Memoria de Programas interna de 4 Kilobyte, lo que posibilitaba al usuario grabar sus programas de aplicación en el propio microcontrolador y no tener que utilizar las posibilidades que brinda el Modo Especial de Trabajo. Esto además permitió a los diseñadores contar con un número mayor de terminales disponibles para sus aplicaciones al contar con otros dos Puertos de entrada / salida de 8 bits con lo que elevaban a 32 el número de líneas con este fin. ¿Qué marcaba la diferencia entre estos dos últimos dispositivos? La diferencia venia dada por el tipo de memoria empleada para la materialización de la Memoria de Programa interna. Mientras que el 8051AH utilizaba un tipo de Memoria OTP, el 8751H utilizaba un tipo de Memoria EPROM. Estos elementos condicionaban la elección de uno u otro dispositivo en dependencia de la aplicación que se deseará resolver. Si su aplicación una vez puesta a punto no se previa un posible cambio en el software, escoger el 8051AH, si por el contrario era factible la ocurrencia de cambios en el software desarrollado inicialmente, entonces escoger el 8751H. De lo anterior nos queda una posible interrogante a responder, ¿Cuándo utilizar el 8031AH? La utilización del 8031AH es muy útil durante la fase de puesta a punto de los sistemas en que se hace necesaria la programación de diferentes versiones de programas ante de encontrar el definitivo. Esto permite que las versiones de prueba se programen en Memorias EPROM conectadas externamente y solo se lleve al microcontrolador escogido, la versión definitivamente probada con resultados satisfactorios. Después de este comienzo dado por la INTEL y ante el éxito del nuevo dispositivo en la solución de múltiples aplicaciones, muchas otras compañías productoras de circuitos integrados se dieron a la tarea de introducir al mercado sus propias versiones de los microcontroladores de esta familia, destacándose entre ellas a la compañía Analog Devices con su línea de microcontroladores ADUC8xx, las compañías Atmel y Philips con una variedad de microcontroladores de esta familia superior hoy en día a la que produce la propia INTEL, la compañía Dallas Semiconductor con su línea de Microcontroladores DS muy poderosos en cuanto a la ampliación de sus capacidades y la Texas Instruments con su línea de dispositivos TS entre otras.
Microcontroladores. El 8051 de la INTEL.
37
Las nuevas versiones se caracterizaban por agregar nuevas posibilidades al microcontrolador. Así aparecieron versiones que aumentaban la capacidad de Memoria de Programa hasta 8 Kilobyte, aumentaban la Memoria de Datos hasta 1 Kilobyte, agregaban otros dispositivos de interfaz como: otro Temporizador, Perro Guardián, entradas Analógicas, etc., que ya hacen verdaderamente difícil enmarcar a este microcontrolador en un conjunto de posibilidades fijas como ocurrió en las primeras versiones de INTEL. Otro aspecto que fue variando con el desarrollo de nuevas versiones lo constituye la tecnología de fabricación del microcontrolador. Después de las primeras versiones con tecnología HMOS aparecieron otros dispositivos con tecnología de fabricación CHMOS, lo que brindaba un microcontrolador de más bajo consumo que los anteriores y por lo tanto permitía el integrar en el circuito un número mayor de posibilidades o circuitos complementarios. Así surgieron los dispositivos 8XC51FA y 8XC51FB que incorporan un bloque PLA (Arreglo Lógico Programable) interno con lo que aparecieron en estos microcontroladores funciones tales como: •
Salida de Alta Velocidad.
•
Circuito de Comparación, Captura y PWM.
En su búsqueda por aumentar de forma cuantitativa las posibilidades de su microcontrolador de 8 bits, el 8051, la INTEL saca al mercado una nueva familia de microcontroladores a la que nombro MCs – 52 de la cual el microcontrolador 8052 es su principal representante. ¿Cuáles son las cosas comunes y cuales las diferencias entre estas dos familias de microcontroladores de la INTEL? 2.2 Los parientes cercanos, la Familia MCs - 52. Son pocas las diferencias que existen entre estas dos familias de microcontroladores, tan pocas que generalmente cuando se habla de una se menciona siempre a la otra. Entre las cosas comunes podemos mencionar: •
La existencia de las tres versiones, con Memoria de Programa OTP o EPROM o sin Memoria de Programa presente entre los miembros de la familia MCs - 51 están presentes también en la familia MCs - 52, por lo que nos encontramos: 8032. Sin Memoria de Programa interna. 8052. Con Memoria de Programa del tipo OTP. 8752. Con Memoria de Programa del tipo EPROM.
Microcontroladores. El 8051 de la INTEL. •
38
Los terminales de los microcontroladores de la familia MCs - 52 presentan las mismas funciones que la de los microcontroladores de la familia MCs - 51, razón por la cual son compatibles pin a pin.
•
Con respecto al Repertorio de Instrucciones, todas las instrucciones presentes en el repertorio de los microcontroladores de la familia MCs - 51 se encuentran presentes en el Repertorio de Instrucciones de los microcontroladores de la familia MCs- 52, razón por la cual los programas desarrollados para el primero pueden ser ejecutados por el segundo sin necesidad de efectuar ningún arreglo a los mismos.
•
Los microcontroladores de la familia MCs - 52 cuentan también con: Necesidad de una sola fuente de alimentación de 5 volts. Unidad Central de Procesos de 8 bits. Oscilador interno. Cuatro Bancos de Registros internos. 128 banderas posibles a definir por software por el programador. Ciclo de Instrucción de un microsegundo a 12 Mhz. Dos Temporizadores de 16 bits. Una Unidad Asincrónica Serie Full Duplex. Modos de Direccionado Directo, Indirecto, Inmediato, Extendido y de Bit en sus Instrucciones. Instrucciones para la aritmética binaria y decimal, incluyendo
instrucciones para
la Multiplicación y la División. Procesador Booleano integrado para las aplicaciones de control. Modo Especial de Trabajo en el que se le pueden conectar al sistema de forma externa hasta 64 Kilobyte de Memoria de Programas y 64 Kilobyte de Memoria de Datos. ¿Qué elementos los diferencia? En la práctica a los microcontroladores de la familia MCs - 52 los debemos ver como una ampliación cuantitativa de los microcontroladores de la familia MCs- 51 y en esto estriban sus diferencias, las que las podemos resumir en los siguientes tres aspectos: •
La capacidad de Memoria de Programas interna aumenta a 8 Kilobyte.
•
La capacidad de Memoria de Datos interna aumenta a 256 byte.
•
El número de Temporizadores de 16 bits aumenta a 3.
¿Qué consecuencias traen estas ampliaciones?
Microcontroladores. El 8051 de la INTEL.
39
El aumento en cantidad de las capacidades de memoria interna solo trae como consecuencias ventajas para el diseñador al contar con más espacio para sus aplicaciones ya desde el momento que coloca el microcontrolador en su sistema sin la necesidad de efectuar ampliaciones. En el caso de la Memoria de Programa el aumento de la capacidad permite el poder contar con más espacio de memoria para almacenar los códigos de los programas almacenados internamente y por lo tanto poder resolver aplicaciones con un grado de complejidad que demanden programas más extensos. En el aso de la memoria de datos aumenta de forma significativa, en el doble, el espacio para almacenar los datos temporales propios de cualquier aplicación. Por su parte el agregar un tercer Temporizador, además de la ventaja que nos da el contar con un circuito de estas características más, integrado en el propio microcontrolador para la solución de las aplicaciones, trae como consecuencia la necesidad de aumentar el repertorio de Instrucciones del microcontrolador con aquellas instrucciones destinadas para trabajar con este Temporizador, así como el aumento del número de fuentes de interrupciones posibles y de vectores de interrupción disponibles. Una vez conocidas las características principales del microcontrolador 8051 en cuanto a los dispositivos que lo componen enfrentémonos a la tarea de conocer como están distribuidos estos dispositivos internamente en el microcontrolador y para ello comencemos con el estudio de cómo esta estructurada internamente la memoria interna. Al finalizar el estudio del mismo debemos ser capaces de darle respuesta a preguntas tales como, ¿Cuál es la capacidad máxima de memoria para almacenar códigos de programa contamos internamente en el Microcontrolador? ¿Cuál es la capacidad máxima para el almacenamiento de datos? ¿Cuál es la estructura de almacenamiento tanto de datos como de códigos de programas en la memoria? ¿Cómo referirnos al contenido de una localización de memoria de programas? ¿Cómo almacenar un dato en la memoria de datos?, ¿Cómo recuperarlo? ¿Qué son los Registros de Funciones Especiales? 2.3 La Memoria Interna del microcontrolador 8051. Internamente el 8051 consta con 4 Kilobytes localizaciones para almacenar los códigos del programa y 128 bytes localizaciones para almacenar datos. Además existen un conjunto de localizaciones ubicadas en una zona conocida con el nombre de Registros de Funciones Especiales, la que se encuentra estrechamente relacionada con la programación de dispositivos
Microcontroladores. El 8051 de la INTEL.
40
internos del mismo, el estudio de estos tres bloques de memoria constituye el objetivo de este epígrafe. Localización, dirección y contenido. Como ya conocemos la arquitectura interna del 8051 responde a la arquitectura de Von Newman por lo que todos los tipos de memoria comparten un mismo bus para efectuar el movimiento de la información contenidos en ellos, ver Figura 2.3.1.
Figura 2.3.1 Memoria Interna del 8051. Esto impone que el tamaño de los datos a almacenar y los códigos de programa sean del mismo número de bits, en este caso 8 bits, de ahí que cuando se habla de capacidad de Memoria de Programa interna se habla de Kilobyte y cuando se habla de capacidad de Memoria de Datos se habla de bytes. Por lo tanto una localización de memoria, independientemente que sea de memoria de programa o de memoria de datos, contiene un número expresado en byte (8bits) y a la misma le corresponderá una dirección que será la forma de referirse a ella en el programa. Esta dirección vendrá dada por 16 bits. Observemos la Figura 2.3.2 tratemos de aplicar lo expresado hasta aquí de forma que nos sirva para una mejor comprensión.
Microcontroladores. El 8051 de la INTEL.
41
El contenido de la localización de memoria
de
programa
cuya
dirección es la 0010H en la Figura 2.3.2 se corresponde con el número en hexadecimal 30H, mientras que el
contenido
0011H número dirección
se
de
la
localización
corresponde
8DH,
mientras
0012H
el
con
el
que
la
dato
que
contiene es el 6AH.
Una pregunta interesante a responder en este momento sería, si los dos tipos de memoria comparten el mismo bus interno ¿Por qué cuando nos referimos a ellas las diferenciamos? La razón anterior se basa en que las instrucciones destinadas para trabajar con ellas son diferentes, existiendo instrucciones para leer de Memoria de Programas y existen instrucciones para leer o escribir en Memoria de Datos. A esta forma de trabajar las memorias se le conoce con el nombre de Memoria Segregada. De lo explicado hasta aquí se aparta un tanto el Microcontrolador 8031, al no contar con Memoria de Programa interna. En cuanto a la Memoria de Datos las características si son similares. La Memoria de Programas. En la Figura 2.3.3 se muestra la estructura interna de los 4 Kilobyte de Memoria de Programa básicos que contienen internamente los microcontrolador 8051. Observe que existen algunas localizaciones que se han destacado porque tienen un significado especial en la operación del mismo.
Microcontroladores. El 8051 de la INTEL.
42
La localización 0000H ya la habíamos estudiado, esta es la localización de memoria de programa donde se debe almacenar el código de la primera instrucción de nuestro programa. Observe que esta relacionada a la izquierda en la figura con la palabra RESET, palabra esta que esta relacionada a su vez con uno de los terminales externos del microcontrolador y que será el empleado por nosotros para indicarle que debe comenzar con la ejecución del programa almacenado. Por el momento, contentémonos con esta explicación la que será ampliamente debatida en el Tema 3. Las otras cinco localizaciones están relacionadas con las 6 fuentes posibles de interrupción con que cuenta este microcontrolador y representan las localizaciones donde se debe almacenar el código de la primera instrucción de las subrutinas de atención correspondiente. La 0003H esta relacionada con la Interrupción Externa 0, la 000BH con la interrupción que genera el Temporizador 0, la 0013H con la Interrupción Externa 1, la 001BH con la interrupción que genera el Temporizador 1 y la 0023H con el pedido de interrupción del Puerto Serie. Para los lectores que no estén relacionados con los microprocesadores dos aspectos tocados en el párrafo anterior les resultarán desconocidos, la interrupción y la subrutina. La interrupción es el proceso mediante el cual el microcontrolador podrá sincronizar la ocurrencia de eventos externos cuya ocurrencia le son impredecibles. Esta es una técnica que a estado presente desde los primeros microprocesadores y que las han heredados los microcontroladores. Por su parte la subrutina es un fragmento de programa concebido específicamente para la atención de un pedido de interrupción. Este fragmento de programa tiene características propias que lo diferencian del
Microcontroladores. El 8051 de la INTEL.
43
resto de los fragmentos que pueden existir en el programa. Estos dos aspectos los estudiaremos con más profundidad en el tema destinado al estudio de la Interrupción. Una preocupación de los productores de sistemas basados en este microcontrolador es la posibilidad de que intrusos puedan leer los programas grabados en la Memoria de Programa y con ello reproducir sus equipos. Para protegerse de esta situación los fabricantes han establecido dos niveles de protección, consistentes el primero, en una cadena de encriptación y el segundo, en dos bits de cerrojo. Dentro de la Memoria de Programa hay 32 localizaciones destinadas para conformar la cadena de encriptación, la que inicialmente esta desprogramada. Cada vez que una localización es direccionada durante el proceso de verificación, se utilizan 5 líneas de dirección para seleccionar una de las localizaciones de la cadena de encriptación. Su contenido es sometido a la operación lógica XNOR con el contenido de la localización que esta siendo grabada creando un byte encriptado. Si la cadena de encriptación esta desprogramada, todos los bits en ´1´, al efectuarse la operación XNOR con el contenido de la localización de memoria, este no resulta modificado y podría ser leído fácilmente. También en el circuito existen 2 bits, los que son conocidos como bits de cerrojo los que pueden ser programados (P) o desprogramados (D), obteniéndose los resultados que se indican en la Tabla 2.3.1. Bit 2
Bit 1
Característica
D
D
Funcionamiento sin protección.
D
P
No se permite acceder externamente los contenidos de la Memoria de Programa interna, además de no permitir ser programada.
P
P
Externamente no puede accederse a los contenidos de la Memoria de Programas interna. No permite ser programada. No permite la verificación del programa.
Tabla 2.3.1 Efecto de los bits de cerrojo sobre la Memoria de Programas. Al borrar la Memoria de Programa, en el caso de que la versión del microcontrolador, de ser posible, también se borra la cadena de encriptación y los bits de cerrojo permitiéndole al diseñador realizar una nueva programación de los mismos.
Microcontroladores. El 8051 de la INTEL.
44
La Memoria de Datos. En la Figura 2.3.4 se muestra la estructura de la Memoria de Datos interna. En total esta zona de memoria ocupa 256 localizaciones, 128 están destinadas al Área de Almacenamiento de Datos y el resto forma parte del Área de Registro de Funciones Especiales (SFR).
El acceso a las localizaciones ubicadas en el Área de Almacenamiento de Datos puede realizarse mediante el empleo de instrucciones con Modos de Direccionado Directo e Indirecto, mientras que las localizaciones ubicadas en el Área de los Registros de Funciones Especiales solo se puede acceder mediante instrucciones que utilizan Modos de Direccionado Directo. Quizás algunas dudas que pudieran surgir en este momento estarían relacionadas con las siguientes preguntas, ¿Qué diferencia existe entre estas dos Áreas? ¿Qué son los Registros de Funciones Especiales? Pasemos a estudiar cada una de estas áreas de forma independiente y esperemos poder encontrar las respuestas deseadas.
Microcontroladores. El 8051 de la INTEL.
45
El Área de Almacenamiento de Datos. El Área de Almacenamiento de Datos la podemos dividir en 3 segmentos atendiendo a la función para los que están destinados dentro del Microcontrolador, ver Figura 2.3.5:
El Segmento de Banco de Registros ocupa las 32 localizaciones bajas del Área de Almacenamiento de Datos, correspondiéndole las direcciones de la 00h a la 1Fh. Estas localizaciones se encuentran organizadas en 4 grupos de 8 localizaciones cada uno, los que son llamados Bancos de Registros 0, 1, 2 y 3 respectivamente, ver Figura 2.3.5. De forma tal que cada Banco de Registro consta de 8 localizaciones a las que se le asignan los nombre, R0, R1, R2, R3, R4, R5, R6 y R7, de las direcciones bajas hacia las altas, ver Figura 2.3.6. Estas localizaciones tienen algunas facilidades en el trabajo con ellas al ser tratadas como registros, permitiendo al programador referirse a las mismas en las instrucciones con solo declarar su nombre así como utilizarlas como puente en las
instrucciones
para
referirse
a
otras
localizaciones de memoria de datos. Uno solo de estos Bancos de Registros puede ser tratado como tal en un momento dado en la ejecución del programa, el que debe estar bien claro para el programador sino quiere cometer errores en su programa.
Microcontroladores. El 8051 de la INTEL.
46
Por ejemplo, si el Banco de Registros 0 es el que esta seleccionado, cada instrucción que en el programa se refiera a uno de estos registros se estará refiriendo a los registros de este banco, ver Figura 2.3.6 y los registros de los bancos restantes tienen que ser tratados como localizaciones de memoria normales y por lo tanto referirse a estos mediante sus direcciones. Una buena pregunta a hacerse en este momento sería, si solo puede estar activo uno de los Bancos de Registros, ¿De qué me sirve que existan cuatro Bancos de Registros? La repuesta a esta pregunta esta en la posibilidad mediante instrucciones de poder escoger cual es el Banco de Registro que yo quiero que se encuentre activo en un momento dado, por lo tanto puedo estar trabajando con más de uno o con los cuatro a la vez y escoger cual es el que es necesario que este activo en un momento determinado en la ejecución del programa. La pregunta a hacerse en este momento sería, ¿Cómo cambiar el Banco de Registros que esta activo en caso que sea necesario? Para poder explicar esto tenemos la necesidad de referirnos de forma momentánea al Banco de Registros Especiales que es la otra zona que comparte el espacio de la memoria de programa con esta área. Dos bits, los bits 3 y 4 del registro PSW ubicado en el Área de los Registros de Funciones Especiales definen cual de los Bancos de Registros se encuentra activo, ver Figura 2.3.7
El registro PSW es direccionable bit a bit, esto quiere decir que existen instrucciones que permiten poner a ´0´ o poner a ´1´ estos bits de forma independiente sin afectar el valor que tiene el resto de los bits en el registro. Estas instrucciones son CLR, pone a ´0´
al
bit
especificado
en
la
instrucción y SETB, pone a ´1´ al bit especificado en la instrucción.
Microcontroladores. El 8051 de la INTEL.
47
Por ejemplo, si el banco de registro que se encuentra activo es el 0, esto quiere decir que tanto RS0 como RS1 tienen el valor de ´0´, y se desea conmutar hacia el Banco de Registro 2 bastaría con hacer ejecutar al microcontrolador la instrucción, SETB RS1
; Pone a ´1´ al bit RS1 del registro PSW y con ello se conmuta al ; al banco de registros 2 ya que anteriormente RS0 estaba ya en ´0´.
A partir de esta instrucción en el programa, todas las instrucciones que se refieran a uno de los registros de R0 a R7 se estarán refiriendo a los registros correspondientes al Banco 2 que se encuentran ubicados en las localizaciones de Memoria de Datos de la 10h a la 17h, ver Figura 2.3.5. La información que se encontraba almacenada en los registros del banco 0 antes de conmutar de bancos no se pierde y para referirse a ellas solo basta direccionarlas a través de sus direcciones o conmutando nuevamente de banco. Existe una estructura de datos propia de los sistemas a microprocesadores para el trabajo con el mecanismo de Interrupción y que fue heredada por los microcontroladores, que se conoce con el nombre de Pila. La Pila es una estructura de datos en la cual el último dato que entra a la misma es el primer dato que esta disponible para ser sacado de esta. Es como lo que ocurre cuando se lavan los platos después de la comida, primero todos los platos son enjabonados uno a uno y puestos uno encima del otro hasta formar una pila de platos, una vez enjabonados todos, el último plato que se enjabono será el primero en ser enjuagado y así sucesivamente. Esta estructura es extremadamente importante para poder lograr el anidamiento de las interrupciones, aspecto que estudiaremos a profundidad en el tema dedicado a la interrupción. Esta zona de memoria destinada por el microcontrolador para almacenar la dirección a la que debe retornar la ejecución del programa, una vez que concluya con la atención del pedido de Interrupción. En el 8051, a diferencia de otros microprocesadores, la Pila solo puede ocupar una zona de memoria específica ubicada en el área de la memoria de datos y no cualquier zona como ocurre en la mayoría de los microprocesadores.
Esta zona de memoria tiene destinado un número de
localizaciones de memoria fija, 8, y una zona de memoria especifica de la dirección 08H hasta la 0Fh coincidiendo con las direcciones destinadas para los registros del Banco 1. Esto debe ser tomado en cuenta por el programador si en su sistema los servicios de Interrupción serán utilizados.
Microcontroladores. El 8051 de la INTEL.
48
El Segmento de Localizaciones direccionable bit a bit esta conformado por 16 localizaciones desde la localización 20h hasta la localización 2Fh, ver Figura 2.3.8.
¿Qué tienen de particular estas localizaciones? Como ya se explico anteriormente, existen instrucciones dentro del Repertorio de Instrucciones del microcontrolador que permiten accesar a los bits de cada una de las localizaciones de este Segmento de forma independiente. Es decir, estas localizaciones tienen la misma facilidad que alguno de los registros de funciones especiales. Es bueno aclarar que esto es solo posible en las localizaciones de memoria que se encuentran ubicadas en este segmento de la memoria de datos. Por ejemplo, el programador podrá poner a ´0´ o a ´1´ uno de los bits cualquiera de una de estas localizaciones mediante las instrucciones CLR y SETB sin afectar el valor del resto de los bits de la misma, tal y como hicimos con los bits RS0 y RS1 del registro PSW. Esta no es la única operación que podemos hacer mediante instrucciones sobre estos bits, por ejemplo podríamos preguntar el valor que tienen, ´0´ o ´1´, mediante las instrucciones JB y JNB la dirección del bit en cuestión.
Microcontroladores. El 8051 de la INTEL.
49
Esta posibilidad puede resultar muy útil en aplicaciones dedicadas al control automático ya que en dichos bits se puede almacenar el estado de elementos del tipo On – Off que funcionan en el sistema bajo control. En total son 16 localizaciones de 8 bits o lo que es lo mismo 128 bits que pueden ser utilizados como banderas en los programas para indicar estados de variables digitales, secuencias de programas, etc. Ahora bien, ¿Cómo especificar en la instrucción el bit con que queremos trabajar entre todos los que están en esta zona? Son dos las maneras: •
la primera declarando la dirección de la localización a la que pertenece el bit en cuestión, seguida de un punto y a continuación la posición del bit dentro de la localización. 20h.5
•
; bit 5 de la localización cuya dirección es 20h.
La segunda mediante la dirección directa que ocupa el bit dentro de todo el mapa de bits de esta zona, ver Figura 2.3.8. 05h
; se referencia al mismo bit.
Si no se desean accesar estos bits de forma independiente sino como parte del byte al que pertenece, el programador esta habilitado mediante el empleo de la dirección de la localización en la instrucción. Por su parte el Segmento de Trabajo lo ocupan las localizaciones restantes desde la 30h hasta la 7Fh. Este segmento se define como un área de memoria de poca capacidad pero de acceso rápido, muy útil para almacenar datos temporales de los programas. Para referirse a estas localizaciones de memoria se tiene que hacer mediante la declaración de la dirección de la localización en cuestión en la instrucción o refiriéndose a ella mediante el contenido de los Registros R0 y R1 del banco que se encuentre activo. El Área de Registros de Funciones Especiales. El Área de Registro de Funciones Especiales (SFR), como su nombre lo indica esta conformada por un conjunto de registros de 8 bits, que juegan diferentes papeles en la configuración de la
Microcontroladores. El 8051 de la INTEL.
50
operación del microcontrolador. Es un área que tiene 128 localizaciones reservadas para registros, desde la localización 80h hasta la FFh, no obstante, no todas están ocupadas quedando algunas disponibles para futuras ampliaciones del microcontrolador. Las localizaciones que no están ocupadas por registros no pueden ser accesadas mediante programa y por lo tanto son localizaciones no utilizables por el programador. En la Tabla 2.3.2 se muestra un listado de estos registros con su nombre y la dirección de la localización que ocupan dentro de la Memoria de Datos. Símbolo
Nombre del Registro
Dirección
Acc
Acumulador
0E0H
B
B
0F0H
PSW
Palabra de Estado
0D0H
SP
Puntero de la Pila
81H
DPL
bms del Puntero de Datos
82H
DPLH
Bms del Puntero de Datos
83H
P0
Puerto 0
80H
P1
Puerto 1
90H
P2
Puerto 2
0A0H
P3
Puerto 3
0B0H
IP
Prioridad de la Interrupción
0B8H
IE
Habilitación de la Interrupción
0A8H
TMOD
Modo de los Temporizadores
89H
TCON
Control de los Temporizadores
88H
TH0
Byte Alto del Temporizador 0
8CH
TL0
Byte Bajo del Temporizador 0
8AH
TH1
Byte Alto del Temporizador 1
8DH
TL1
Byte Bajo del Temporizador 1
8BH
SCON
Control del Puerto Serie
98H
SBUF
Almacenador Puerto Serie
99H
PCON
Control de la Alimentación
87H
Tabla 2.3.2 Registros de Funciones Especiales. Algunos de estos registros son direccionable bit a bit al igual que ocurre con las localizaciones del Segmento Direccionable Bit a Bit, ya habíamos conocido al PSW,
Microcontroladores. El 8051 de la INTEL.
51
¿Cuáles serán los otros? Todos aquellos registros cuya dirección termina en 0 o en 8, marcados en negritas en el Tabla 2.3.2, pueden ser direccionados bit a bit, el resto no. Sin pretender profundizar en el significado de cada uno de los bits de todos los registros, lo cual haremos en la medida en que vayamos estudiando las diferentes funciones del microcontrolador, daremos una definición resumida de cada uno de ellos, en algunos casos con más profundidad que en otros, que permita al lector tener una primera aproximación a los mismos. Para una mejor comprensión los registros los agruparemos según su función en los siguientes 4 grupos: •
De propósito general.
•
De control del procesador.
•
Punteros.
•
Relacionados con los puertos de entrada / salida paralelos.
•
Relacionados con el puerto serie.
•
Relacionado con los Temporizadores.
•
De control de la Interrupción.
Registros de Propósito General. ACC (Acumulador). Es un registro de propósito general de 8 bits, el que por su frecuencia de utilización en los programas lo hacen convertir en el más importante. Se acostumbra a hacer referencia a este como registro A solamente. Ampliamente utilizado en las instrucciones aritméticas, lógicas y de rotación, aportando uno de los operandos de las mismas y constituyendo el operando destino en la mayoría de los casos. B (Registro B). Es un registro de 8 bits de propósito general especializado en las instrucciones de multiplicación (MUL AB) y de división (DIV AB). Este microcontrolador esta capacitado para efectuar operaciones de Multiplicación y de División de números expresados en 8 bits, no obstante para poder efectuar estas operaciones impone como condición que para almacenar los operandos que participan en la instrucción y posteriormente almacenar los resultados de la ejecución de la misma solo están capacitados los registros Acumulador y el registro B. Esto será estudiado a profundidad en el tema dedicado a las instrucciones del grupo aritmético.
Microcontroladores. El 8051 de la INTEL.
52
Registros de Control del Procesador. PSW (Registro de Estado). Contiene información del estado de la Unidad Central de Procesos durante la ejecución de los programas. Como ya se vio anteriormente permite al programador escoger el Banco de Registro activo. El resto de los bits de este registro contiene los conocidos bits de banderas, ver Figura 2.3.9.
Figura 2.3.9 Estructura interna del Registro PSW. ¿Qué función hacen estos bits de banderas? ¿Qué utilidad pueden tener para el programador? Al ejecutar instrucciones aritméticas, lógicas o de rotación, existe información que podría resultar de gran interés para el programador en una aplicación dada. Por ejemplo, el poder conocer la paridad de ´1´ en el resultado, o si el resultado obtenido cabe en el registro destinado para ser almacenado, etc. Esta función, de brindar información de interés al programador como resultado de la ejecución de algunas instrucciones la cumplen los bits de banderas. Específicamente este microcontrolador cuenta con 5 bits de banderas, con los siguientes nombres y funciones, ver Figura 2.3.9:
Microcontroladores. El 8051 de la INTEL.
53
CY (Bandera de Acarreo). Es un bit que en muchas instrucciones del microcontrolador se incorpora como el noveno bit del registro Acumulador. Informa si como resultado de la ejecución de la instrucción se ha cambiado su contenido o si se mantiene en el valor inicial. Muy útil en las operaciones aritméticas y de rotación. La interpretación que le de el programador a esta información esta muy relacionada con la instrucción que se ejecutó y con la aplicación que se esta resolviendo. Por ejemplo analicemos que puede ocurrir con el bit CY en la siguiente instrucción de adición, ADD
A, #05H
; adicionar al contenido del registro A la constante 05H ; almacenar el resultado en el registro A. ;A
A + 05H
Por lo tanto el resultado almacenado en el registro A después de ejecutada la instrucción depende en gran medida del número almacenado en dicho registro antes de ejecutar la instrucción. Supongamos que el número almacenado se corresponde con el FDH. A
FDH + 05H
Pero para almacenar el resultado de esta operación no basta con los 8 bits del registro Acumulador sino que se hace necesario un noveno bit como se puede ver en la operación mostrada a continuación. 1111 1101
FDH
+ 0000 0101
+ 05H
1 0000 0010
102H
¿Quién aportará este noveno bit? Este noveno bit lo aporta el bit de bandera CY no permitiendo que se pierda. Pero en este caso, quizás más importante que almacenar este noveno bit lo constituye, que el bit de bandera CY le indica al programador de que el registro seleccionado como destino del resultado no es capaz de almacenar el mismo y que por ende el debe tomar alguna decisión en su programa al respecto.
bit bandera CY
1111 1101
FDH
+ 0000 0101
+ 05H
1 0000 0010
102H
Microcontroladores. El 8051 de la INTEL.
54
AC (Bandera de Acarreo Auxiliar). Muy utilizado por el procesador pero de poca utilidad para el programador. Hace un papel similar al bit de bandera CY pero considerando solo los 4 bits menos significativos del registro Acumulador. Por ejemplo en el caso anterior al sumar los bits 3 de ambos operandos el resultado da ´0´ acarreando un ´1´ para la suma de los siguientes dos bits. Este acarreo es indicado por el bit de bandera de acarreo auxiliar. 1
bit de acarreo auxiliar
1111 1101
FDH
+ 0000 0101
+ 05H
1 0000 0010
102H
Este bit de bandera de acarreo auxiliar es de mucha utilidad para el Procesador cuando efectúa las operaciones de Ajuste Decimal que estudiaremos más adelante. F0 (Bandera Definible por el usuario). Como su nombre lo indica la utilidad de este bit de bandera y lo que indique queda a la libertad del programador que lo emplea como un bit más. OV (Bandera de Desbordamiento). Muy útil en las operaciones aritméticas con signo. Indica que existió acarreo del bit 6 al 7 y del 7 al bit de bandera CY como producto de la ejecución de una instrucción aritmética, y por lo tanto el signo del resultado puede ser el no esperado. Esto lo indica poniéndose a ´1´. P (Bandera de Paridad). Mediante el valor almacenado en este bit el microcontrolador indica el tipo de paridad que esta presente en el resultado obtenido producto de la ejecución de una instrucción aritmética o lógica determinada. La paridad esta relacionada con el número de bits en ´1´ de dicho resultado. Por ejemplo, si el bit de bandera P esta en ´1´ después de la ejecución de una instrucción aritmética dada, esto indica que el número de bits en ´1´ en el resultado es impar, si por el contrario el valor es ´0´ indica que el número de bits en ´1´ en el resultado es par. Por su puesto que lo valioso del trabajo con los bit de banderas está en poder conocer el valor que tienen después de ejecutada una determinada instrucción, por lo tanto la pregunta a responder en este caso sería, ¿Cómo conocer el estado en que se encuentra un determinado bit de bandera?
Microcontroladores. El 8051 de la INTEL.
55
Todo lo que tenemos que hacer es encuestar el valor del bit de bandera específico que nos es de interés en el momento dado del programa. Para ello existen instrucciones que nos permiten preguntar por el valor de uno de un bit de bandera en particular, recordemos que el registro PSW es uno de los registros que puede ser direccionada bit a bit. Ejemplo de estas instrucciones son, JC
dir1
; Salta a la dirección dir1 si el Bit de Acarreo es ´1´.
JNC
dir2
; Salta a la dirección dir2 si el Bit de Acarreo es ´0´.
Existiendo instrucciones de este tipo para cada uno de los bit de banderas
especificados
anteriormente, con excepción del Bit F0 al que debemos. Sobre estos bits del registro PSW volveremos cuando estudiemos las instrucciones aritméticas y lógicas. PCON (Control de Alimentación). Es un registro estrechamente relacionado con la posibilidad de escoger los modos de trabajo de bajo consumo, IDLE y POWER DOWN que presentan las versiones a CHMOS de este microcontrolador. Registros Punteros. DPL (Parte Baja del Puntero de Datos). Es un registro de 8 bits que contiene los 8 bits menos significativos (bms) de la dirección a donde apunta el Puntero de Datos. Este registro conjuntamente con el DPH es muy útil para el direccionamiento de las localizaciones de la Memoria de Programa cuando se trabaja con Tablas y de las localizaciones de la Memoria de Datos externa. DPH (Parte Alta del Puntero de Datos). Es un registro de 8 bits que contiene los 8 bits más significativos (Bms) de la dirección a donde apunta el Puntero de Datos. Este registro conjuntamente con el DPL es muy útil para el direccionamiento de las localizaciones de la Memoria de Programa en el trabajo con Tablas y de las localizaciones de la Memoria de Datos externa. SP (Puntero de la Pila). Es un registro de 8 bits que contiene la dirección del último dato almacenado en la Pila. De gran utilidad para el trabajo con la Interrupción y con subrutina. Registros relacionados con los puertos de entrada / salida paralelos. P0, P1, P2 y P3 (Registros Almacenadores de los Puertos). Son registros de 8 bits que como su nombre lo indican son los almacenadores de los datos enviados hacia los puertos por programa en las operaciones de escritura de datos y de ellos se toman los datos en las operaciones de lectura de datos.
Microcontroladores. El 8051 de la INTEL.
56
Existen un conjunto de registros que están estrechamente relacionados con los circuitos complementarios con que cuenta el microcontrolador como son, el Puerto Serie, los Temporizadores y la Interrupción, a través de los cuales se efectuará su programación. Estos registros serán explicados en detalles en los Temas correspondientes a estos dispositivos, no obstante en este momento los mencionaremos para que el lector se vaya familiarizando con ellos. Registros relacionados con el Puerto Serie. SBUF (Buffer del Puerto Serie). Son dos registros de 8 bits vinculados con el Puerto Serie Asincrónico, USART, del microcontrolador. Aunque separados físicamente, el Buffer del Transmisor y el Buffer del Receptor, la forma de referirnos a ellos en el programa es mediante una única dirección simbólica, SBUF. El Buffer del Transmisor como su nombre lo indica esta relacionado con la transmisión de datos serie por parte del microcontrolador, mientras que el Buffer del Receptor esta relacionado con la recepción de datos serie. Esta característica es lo que permite que el Puerto Serie del 8051 sea ´Full-Duplex´. SCON (Control del Puerto Serie). Mediante este registro se establecen los parámetros para la transmisión y la recepción serie de los datos a través del Puerto Serie. Registros relacionados con los Temporizadores. Recordar que este Microcontrolador cuenta con dos Temporizadores los que son conocidos como Temporizador 0 y Temporizador 1. TH0-TL0, TH1-TL1 (Temporizador 0 y Temporizador 1). Cada uno son registros de 8 bits, aunque pueden operar en algunos modos de trabajo de los temporizadores como un par registro de 16 bits. Están relacionados directamente con los contadores de los Temporizadores internos del microcontrolador, indicando en cada momento el valor de conteo que tienen los mismos. Estos registros pueden ser leídos y escrito en cualquier momento durante la ejecución del programa. TMOD (Modo de los Temporizadores) Es un registro estrechamente relacionado con la configuración del Modo de Trabajo de los Temporizadores. TCON (Control de los Temporizadores). Es un registro que esta fundamentalmente relacionado con la habilitación del conteo de los contadores de los Temporizadores. Esta relacionado también con la elección del modo en que el microcontrolador va a activar los pedidos de interrupción externa.
Microcontroladores. El 8051 de la INTEL.
57
Registros relacionados con la Interrupción. IE (Control de Habilitación de la Interrupción). Es un registro estrechamente relacionado con la posibilidad de enmascarar por software las fuentes de interrupción. Contiene un bit por cada fuente posible de interrupción, considerando al Puerto serie como una sola fuente. IP (Control de Prioridad de la Interrupción). Es un registro estrechamente relacionado con la definición de uno de los dos posibles niveles de prioridad a seleccionar para las interrupciones que estén habilitadas por software. Si bien resulta interesante conocer como esta estructurada la memoria interna del microcontrolador, el objetivo final es el poder trabajar con ella, esto se traduce en el poder hacer operaciones de lectura de una localización o de escritura en una localización, de poder mover un dato de una localización a otra o de poder mover un bloque de datos de una zona de memoria a otra, etc. Por su puesto para poder efectuar estas operaciones con la memoria interna existen instrucciones dentro del repertorio de instrucciones del microcontrolador, por lo que debemos conocer, ¿Cuáles son estas instrucciones? para poder seguir adelante en nuestro estudio. 4.4 Las Instrucciones para trabajar con la Memoria Interna. El fabricante agrupa las instrucciones que forman parte del Repertorio de Instrucciones de este microcontrolador en 5 grupos tomando en cuenta el tipo de operación que estas realizan. Estos 5 grupos de Instrucciones son: •
Grupo de Transferencia de Datos.
•
Grupo de Operaciones Aritméticas.
•
Grupo de Operaciones Lógicas.
•
Grupo de Manipulación de Variables Boolleanas.
•
Grupo de Salto y Llamada a Subrutina.
Las instrucciones que nos interesan en este momento son las que permiten efectuar el movimiento de datos con la memoria interna, ya sea para leer datos de dicha memoria o para escribir datos en dicha memoria. Estas instrucciones se encuentran dentro del grupo de instrucciones de Transferencia de Datos.
Microcontroladores. El 8051 de la INTEL.
58
Como su nombre lo indica, las instrucciones de este grupo provocan la transferencia de un dato almacenado en una localización de memoria, tómese a los registros dentro de este grupo, hacia otra localización de memoria, por lo que al ejecutar dichas instrucciones el microcontrolador efectúa dos operaciones que resultan ser indispensables, primero una operación de lectura sobre la localización que contiene al dato que se desea mover y segundo una operación de escritura en la localización hacia donde se desea mover el dato. Como características comunes de este proceso podemos mencionar: •
El contenido de la localización que es leída se mantiene.
•
Estas instrucciones no afectan el contenido de los bits de banderas del registro PSW.
•
Todas las instrucciones de este grupo involucran a dos operandos, uno que tiene almacenado el dato a mover, al que a partir de este momento lo llamaremos fuente y otro que será el que recibirá el dato para su nuevo almacenamiento, al que llamaremos destino.
Tres instrucciones constituyen las básicas de este grupo: MOV
,
; para el trabajo con la memoria de datos interna ; y los registros de funciones especiales.
MOVC
,
; para el trabajo con la memoria de programa.
MOVX
,
; para el trabajo con la memoria de datos externa.
A modo de resumen podemos definir que la sintaxis de las instrucciones de este grupo, salvo muy contadas excepciones, es la siguiente: NEMOTÉCNICO
,
Y el movimiento del dato responderá al siguiente esquema:
Por ejemplo si queremos mover un dato almacenado en la localización de memoria de datos interna cuya dirección es la 10H hacia el registro Acumulador, tenemos que emplear la instrucción cuyo nemotécnico es MOV ocupando la posición del destino la letra A y la de la fuente el numero hexadecimal 10H.
Microcontroladores. El 8051 de la INTEL.
MOV
A, 10H
; A
59
(10H)
Quizás le surjan algunas dudas a partir del ejemplo anterior como pueden ser, ¿Por qué poner la letra A para indicar que se esta trabajando con el registro Acumulador? ¿Por qué poner el numero hexadecimal 10H para indicar que se desea que la instrucción actué sobre la localización de memoria de datos interna cuya dirección se corresponde con este número? ¿Serán solo estas las formas de referirnos a estos elementos en una instrucción? Para poder dar respuestas a estas preguntas y poder comprender las que siguen debemos dedicar un tiempo para estudiar los Modos de Direccionado. Los Modos de Direccionados del 8051. La pregunta a contestar en este momento sería, ¿Qué son los Modos de Direccionado? El Modo de Direccionado esta relacionado con las posibilidades que brinda el microcontrolador para referirse a sus operandos en una determinada instrucción. Todas las instrucciones tienen al menos un operando, que se declara en la propia instrucción, además la instrucción tiene una forma de expresar dicho operando que usted debe respetar o se arriesga a declarar instrucciones en su programa que no existen. ¿Cuáles son los Modos de Direccionado
que admite este microcontrolador en sus
instrucciones? Modo de Direccionado de Registro. Los 8 registros del Banco de Registro activo pueden ser accesados mediante ciertas instrucciones que simplifican sus códigos de operación y en la mayoría de los casos son más rápidas. Recordemos que existen 4 bancos de registros ubicados en las localizaciones bajas de la Memoria de Datos interna, cada banco contiene 8 registros conocidos con los nombres R0, R1, R2, R3, R4, R5, R6 y R7, que son los mismos nombres que utilizaremos para referirnos a ellos como operando en las instrucciones. Estos bancos son activados mediante los bits 3 y 4 del registro PSW. EJEMPLO: ADD
A, R7 ; Adiciona al contenido del registro A el contenido del Registro R7.
Microcontroladores. El 8051 de la INTEL.
60
; el resultado se almacena en el registro A. ; el contenido del registro R7 no se altera. A
(A) + (R7)
El Modo de Direccionado empleado en el segundo operando de la instrucción es del tipo Registro. Modo de Direccionado Directo. En este direccionamiento el operando es especificado por una dirección de 8 bits en la propia instrucción. Solamente las localizaciones de la memoria de datos interna y los registros pueden ser directamente direccionados mediante este Modo de Direccionado. EJEMPLO: ADD
A, 7FH
; adiciona al contenido almacenado en el registro Acumulador el ; el contenido de la localización de memoria de datos cuya ; dirección es la 7FH. ; el resultado se almacena en el registro Acumulador. ; el contenido de la localización de memoria 7FH no se altera.
A
(A) + (2EH)
En este caso los dos operandos utilizan el Modo de Direccionado Directo.
Modo de Direccionado Indirecto. En este Modo de Direccionado, como su nombre lo indica, no se declara directamente en la instrucción la dirección de la localización del operando implicado en la misma, sino, que se especifica el registro donde se encuentra almacenada dicha dirección. Pueden ser utilizados como registros para almacenar la dirección los registros R0 y R1 del Banco de Registros activo, pudiendo ser direccionadas de esta manera todas las localizaciones de Memoria de Datos interna. Para indicar que se esta empleando en al instrucción este Modo de Direccionado se debe preceder el nombre del registro utilizado para almacenar la dirección de la localización del operando el símbolo @. EJEMPLO: ADD
A, @R0
; Adicionar al contenido del registro Acumulador el contenido de la ; localización de Memoria de Datos cuya dirección se ; encuentra almacenada en el registro R0. ; el resultado queda almacenado en el registro Acumulador. ; el contenido de la localización de memoria de datos cuya
Microcontroladores. El 8051 de la INTEL.
61
; dirección se encuentra almacenada en el registro R0 no se altera A
A + ((R0))
El símbolo @ precediendo al nombre del registro R0 indica que se esta empleando el Modo de Direccionado Indirecto para direccionar al segundo operando de la instrucción. El doble paréntesis acompañando a R0 nos indica que lo que se le adiciona al contenido del registro Acumulador no es el contenido del registro R0, sino, que el contenido del registro R0 se toma como dirección y el contenido de la localización que le corresponde esta dirección en la Memoria de Datos es lo que se adiciona al contenido del registro Acumulador. El doble paréntesis indica el contenido del contenido. Modo de Direccionado Inmediato. Las instrucciones que acepten este Modo de Direccionado permiten declarar en la misma instrucción uno de los operando que esta implicado en la misma a modo de una constante. Este operando debe estar antecedido del signo #. Este Modo de Direccionado es utilizado para declarar constantes que serán utilizadas en el programa, estas constantes son de 8 bits. EJEMPLO: MOV
A, #64H
A
64H
; El registro Acumulador es cargado con la constante 64H.
El símbolo # antecediendo al numero 64H indica que este se tome como un dato y no como una dirección. Modo de Direccionado Inmediato Extendido. Ídem al anterior con la única diferencia de que las constantes declaradas en este Modo de Direccionado son de 16 bits, por lo que solo puede ser utilizado como destino en este caso el registro DPTR. EJEMPLO: MOV
DPTR, #1245H
; El Registro DPTR es cargado con la constante ;1245H.
DPTR
1245H
Microcontroladores. El 8051 de la INTEL.
62
Modo de Direccionado Indexado. Solamente las localizaciones ubicadas en la Memoria de Programa pueden ser accesadas mediante este modo de direccionamiento y sólo en operaciones de lectura. La dirección de la localización a la que se hace referencia en la instrucción, se obtiene mediante la suma del contenido de los Registros DPTR o PC, declarado en la propia instrucción, con el contenido del registro Acumulador. Como resultado de la ejecución de estas instrucciones el contenido de dicha localización es almacenado en el Registro Acumulador. Este modo de direccionado es muy útil para el trabajo con Tablas de constantes almacenadas en localizaciones ubicadas en la Memoria de Programa. El contenido de uno de los Registros DPTR o PC, apuntaría a la localización de inicio de la Tabla, mientras que el contenido del Registro Acumulador brindaría el desplazamiento dentro de la Tabla donde se ubica el dato deseado. EJEMPLO: MOVC
A,@A+DPTR
A
((A) + (DPTR))
Podría parecer un error que al contenido de un registro de 16 bits, como es el registro DPTR, se le este sumando el contenido de un registro de 8 bits, como es el registro Acumulador, pero no es así. No obstante, esto si limita a que el número máximo de datos que puede contener una Tabla que vayamos a manipular mediante instrucciones que utilicen este Modo de Direccionado es de 256 localizaciones. Una vez conocido las posibilidades que tengo para declarar los operando en las instrucciones de transferencias podríamos ejemplificar su utilización para realizar determinadas tareas con el microcontrolador. Leyendo datos de la Memoria de Programa. El objetivo fundamental de la Memoria de Programas es el de almacenar los códigos de las instrucciones que conforman los Programas. Estos códigos son extraídos de esta memoria de forma automática por parte del microcontrolador sin la intervención del Programa. No obstante, suelen formar parte también de los programas Tablas, que se desean almacenar de forma permanente ya que su contenido no va a cambiar durante el tiempo que se este resolviendo la aplicación en cuestión. El mejor lugar para almacenar estas Tablas Invariantes en su contenido lo constituye la Memoria de Programa.
Microcontroladores. El 8051 de la INTEL.
63
La razón de ser de estas Tablas es la de proporcionar datos en determinados momentos del programa de gran utilidad para el desarrollo de los mismos. Se acostumbra a utilizar Tablas para almacenar códigos numéricos que serán utilizados por el programa para llevar a cabo una conversión de códigos numéricos, como puede ser de binario a código de Lámpara de 7 Segmentos. Se puede utilizar también para evaluar funciones que dada su complejidad matemática es preferible almacenar los resultados para un juego de datos dados. En todos los casos lo que hace el programa es extraer el contenido de una determinada localización de memoria, el que será utilizado como un dato por el programa. ¿Cómo efectuar esta operación? Para ello contamos con la instrucción, MOVC
destino, fuente
Como ya se explico anteriormente, esta instrucción provoca que el contenido de la localización cuya dirección es declarada como fuente en la instrucción se transfiera a la localización cuya dirección aparece como destino en la instrucción. (destino)
(fuente)
Esta instrucción solo acepta el Modo de Direccionado Indexado por lo que a localización fuente, que obligatoriamente se tiene que corresponder con una localización de Memoria de Programa, solo se le puede direccionar mediante la dirección base almacenada en el registro DPTR o el registro PC y el desplazamiento almacenado en el registro Acumulador,
mientras que la
localización destino tiene que ser el registro Acumulador. Las dos posibles instrucciones son: MOVC
A, @A+DPTR
MOVC
A, @A+PC
En la primera para calcular la dirección de la localización fuente se le suma al contenido del registro DPTR el contenido del registro Acumulador y el resultado es la dirección de la localización de memoria de programa con que se desea trabajar. En la segunda todo es igual solo sustituyendo al registro DPTR por el Registro PC.
Microcontroladores. El 8051 de la INTEL.
64
Observe que estas instrucciones se corresponden de forma ideal con el formato que deben tener las instrucciones para el trabajo con Tablas de forma cómoda para el programador. Tanto en DPTR como en PC se pueden guardar las direcciones de inicio de la tabla correspondiente, mientras que en el Registro Acumulador estaría el desplazamiento dentro de la tabla correspondiente con la localización deseada. En ambas instrucciones una vez ejecutadas el contenido inicial del registro Acumulador es sustituido por el contenido de la localización de memoria de programa cuya
dirección fue
especificada en la instrucción. Leyendo y escribiendo datos en la Memoria de Datos interna. Como su nombre lo indica el objetivo de esta memoria es el de almacenar, por lo general de forma temporal, los datos que serán empleados por el programa. Esto hace que los contenidos de las localizaciones de esta memoria estén cambiando con relativa frecuencia por lo que resulta tan importante escribir en las localizaciones de esta memoria como de leer el contenido de las mismas. La pregunta a responder en este caso sería, ¿Existirá una instrucción para leer el contenido de las localizaciones de esta memoria y otra diferente para escribirlas? La respuesta a esta pregunta ya conocemos que es no, siendo la instrucción a emplear para ambas operaciones es, MOV
destino, fuente
¿Cómo indicarle al microcontrolador que la operación que queremos que haga sea la de leer el contenido de una localización de la Memoria de datos o escribir en ella? Todo depende de la posición en que pongamos la dirección en cuestión. Si esta ubicada en la posición destinada a la localización destino, lo que el Programador quiere hacer es escribir en la Memoria de Datos, por el contrario si esta ubicada en la posición destinada para la localización fuente lo que el Programador quiere hacer es una lectura de la Memoria de Datos. Analicemos lo anterior a la luz de los dos ejemplos siguientes
Microcontroladores. El 8051 de la INTEL.
65
Ejemplo. Se quiere mover el contenido de la localización de memoria de datos cuya dirección es 10H hacia el registro Acumulador. En este caso la fuente del dato es la localización de memoria de datos cuya dirección es 10H y el destino final de este dato es el registro Acumulador, por lo que la instrucción quedaría escrita de la siguiente forma: MOV
A, 10H
;A
(10H)
Si por el contrario el movimiento de la información fuera en el sentido inverso la instrucción a emplear sería: MOV
10H, A
; (10H)
A
¿Al igual que con la Memoria de Programa todas las transferencias de datos con la Memoria de Datos se tendrán que efectuar a través del Registro Acumulador? Por suerte no es así y en este caso la variedad es mucho mayor que con la otra memoria ya que esta instrucción admite otros modos de direccionado. ¿Cuáles modos de direccionado admite esta instrucción? Son 4 los Modos de Direccionado que se pueden utilizar con esta instrucción: •
Registro.
•
Directo.
•
Indirecto.
•
Inmediato.
Y todos son empleados para direccionar localizaciones de la Memoria de Datos interna, incluyendo dentro de estas a las localizaciones empleadas para almacenar los Registros de Funciones Especiales. Comencemos a analizar cada una de las variantes de este tipo de instrucción a partir de considerar los Modos de Direccionado que soportan. Direccionado Tipo Registro.
Microcontroladores. El 8051 de la INTEL. MOV
66
A, Rn
¿Quién es Rn? Uno cualquiera de los registros de R0 a R7 del Banco de Registro activo. Esta instrucción provoca que el contenido del registro Rn especificado en la instrucción se almacene en el registro Acumulador. El contenido del registro Rn se mantiene con el contenido que tenía antes de ejecutar la instrucción. MOV