Curso microprocesadores y_microcontroladores_unidad_1

16,017 views
15,817 views

Published on

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
  • excelent course ,my fauvorite cesion
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
16,017
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
982
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide

Curso microprocesadores y_microcontroladores_unidad_1

  1. 1. Curso de Microprocesadores y Microcontroladores. Unidad 1 Contenido: 1 Portada. 2 Temario. 3 Manual del Curso. 4 Anexos
  2. 2. Curso de Microcontroladores I Objetivos del Curso q Comenzar a familiarizarse con el entorno de los Microcontroladores Intel q Realizar Primeras prácticas de control y prueba. q Operaciones básicas e intermedias. Tiempo aproximado q 40 Horas Número de prácticas q Teoría: 25 hrs. q Práctica: 15 hrs. Practicas q Práctica 1 “In – Out por los puertos. q Práctica 2 “Mandar mensajes al LCD de modo manual. q Practica 3 “Lectura por un puerto y contenido de la lectura por el LCD. q Practica 4 “Lectura en LCD de un ADC 0804” q Practica 5 “Probador de voltajes.” q Practica 6 “Probador de Timer Counter” q Practica 7 “Medidor de RPM.” q Practica 8 “Control de Interrupciones” M.C. Eduardo Sánchez Arellano. - Página 2-
  3. 3. Indice General Capitulo 1. Introducción a los Microprocesadores. 1.1. La Evolucion de los Microprocesadores. 1.2. Características de los Microcontroladores 1.3. Pinout de los Microcontroladores Intel Capitulo 2. Configuración de la memoria en el Microcontrolador 2.1. Memoria de p rograma y datos. 2.2. Memoria de programa. 2.3. Memoria de datos. 2.4. Area de direccionamiento sólo indirecto. 2.5. Area de direccionamiento directo e indirecto. 2.6. Area de registros o funciones especiales 2.7. Operación Reset. Capitulo 3. Programación de los Microcontroladores 3.1. Introducción 3.2. Modos de direccionamiento 3.3. Ciclo de instrucción 3.4. Tipo de instrucciones 3.5. Instrucciones aritméticas. 3.6. Instrucciones lógicas. 3.7. Instrucciones de transferencia ó movimiento de datos. 3.7.1. Transferencia de datos sobre la RAM interna 3.7.2. Transferencia de datos sobre la RAM externa. 3.7.3. Memoria de programas para el tratamiento de tablas 3.8. Instrucciones Booleanas 3.9. Instrucciones de salto. 3.9.1. Instrucciones de salto incondicional. 3.9.2. Instrucciones de salto condicional. 3.10. <<SET>> de instrucciones de la familia MCS-51 Presentación del software y equipo para el desarrollo de aplicaciones • Introducción • El Macroensamblador: • Operaciones del editor. • Operaciones de ensamblado. • Operaciones de Encadenado. • Operaciones de Simulación • Ejecución y estudio de programas en el Macroensamblador. Contro l de puertos de Entrada/Salida. • Introducción • El Microcontrolador como Microprocesador. • Operaciones de escritura en los puertos del Microcontrolador. • El puerto P0 en modo salida. • Operaciones de lectura en los puertos. • Control de procesos Industriales básicos . • Control del LCD. • Control del Teclado. • Adquisición de datos mediante ADC Interrupciones. • Introducción. • Tipos de Interrupciones. • Proceso de interrupción en los Microcontroladores. • Niveles de prioridad. • Interrupciones externas. (INT0 ) e (INT1 ) • Interrupciones internas producidas por Timer 0 y1. Temporizadores y Contadores. • Introducción • Timer 0 (T0) y Timer 1 (T1). • Temporizador/Contador de 13 y 16 bit, arranque por software. • Programas. M.C. Eduardo Sánchez Arellano. - Página 3-
  4. 4. Unidad 1 1.1 INTRODUCCIÓN A LOS MICROPROCESADORES LA EVOLUCION DEL MICROPROCESADORES Antes de comenzar a analizar los microprocesadores modernos, se debe primero entender qué fue lo que paso con estos dispositivos en los primeros años. La historia dice que se construyeron gigantescas máquinas computadoras en las décadas de 1940 y 1950, construidas con relevadores y tubos de vacío (bulbos). La primera computadora digital electrónica fue construida por un equipo dirigido por los ingenieros John Mauchly y John Eckert, de la universidad de Pennsylvania, en 1946. Esta máquina electrónica fue llamada ENIAC (Electronic Numerical Integrator and Computer), tenía más de 18000 bulbos y consumía 200 Kw. Tiempo después, cuando se integró a este equipo el Ing. y matemático Húngaro, naturalizado norteamericano, John Von Neumann fue diseñada una nueva computadora llamada EDVAC (Electronic Discrete Variable Automatic Computer). Las ideas de Von Neumann resultaron tan fundamentales para su desarrollo, que es considerado el padre de las computadoras. Estas ideas consistieron en permitir que en la memoria coexistieran datos con instrucciones para que la computadora pudiera ser programada por medio de software y no por medio de hardware. Alrededor de este concepto gira toda la evolución de la industria y la ciencia de la computación. Más adelante, se utilizaron los transistores y los componentes electrónicos de estado sólido para construir las poderosas computadoras de la década de 1960. Con el advenimiento, de los circuitos integrados se llegó al perfeccionamiento del microprocesador. M.C. Eduardo Sánchez Arellano. - Página 4-
  5. 5. El microprocesador de 4 bits En 1969, Intel Corporation y el talento creativo de Marcian E. Hoff lanzaron el primer microprocesador: el 4004, de 4 bits. Este microprocesador, programable en un solo encapsulado era insuficiente, según las normas actuales, porque sólo direccionaba 4096 localidades de 4 bits en la memoria. El 4004 contenía un conjunto de instrucciones que ofrecían sólo 45 instrucciones diferentes. Como consecuencia, el 4004 sólo se podía emplear en aplicaciones limitadas, como en los primeros juegos de vídeo y en controladores pequeños basados en microprocesadores. Cuando surgieron aplicaciones más complejas para el microprocesador, el 4004 resultó inadecuado. El microprocesador de 8 bits Más tarde, en 1971, al percatarse que el microprocesador era un producto, viable para comercialización, Intel Corporation produjo el 8008, el primer microprocesador de 8 bits. El tamaño ampliado, de la memoria (16K * 8) y las instrucciones adicionales (un total de 48). Con este nuevo microprocesador se lograron aplicaciones más avanzadas (1K es igual a 1024 y un byte es un número de 8 bits). Conforme los ingenieros desarrollaban usos más demandantes para el microprocesador, la memoria y el juego de instrucciones del 8008 pronto limitaron su utilidad. Por tanto, en 1973, Intel Corporation introdujo el 8080, el primero, de los microprocesadores modernos de 8 bits. Pronto, otras empresas empezaron a lanzar sus propias versiones de los procesadores de 4 y de 8 bits. En la tabla 1-1 se enumera muchos de estos primeros microprocesadores. AÑO MICRO COMENTARIOS 1969 Intel 4004 No fue un producto comercial. 1971 Intel 8008 Primer microprocesador de 8 bits. 1973 Intel 8080 Surge la industria de las microcomputadoras. 1974 Motorola 6800 Primer micro de Motorola. 1975 Zilog Z80 Aparece el sistema operativo CP/M. Intel 8085, Mostek 6502 1976 Aparece Apple iniciando el auge de las microcomputadoras. 1978 Motorola 6809 Mejor microprocesador de 8 bit. Tabla 1-1 M.C. Eduardo Sánchez Arellano. - Página 5-
  6. 6. 1.1.2 Diferencia entre el Microprocesador y Microcontrolador En el año de 1971 cuando surge el primer microprocesador de 8 Bit Intel, las técnicas de diseño de los equipos de instrumentación y control sufrieron un cambio. Los fabricantes de microprocesadores, conscientes de la importancia de este mercado, pusieron a disposición de los ingenieros una gran variedad de circuitos integrados complementarios los cuales constituyen, para cada fabricante, su familia. En el año de 1976, gracias al aumento en la densidad de integración, salió a la luz la primera computadora en un chip, es decir, se integraron junto con el microprocesador los subsistemas que anteriormente formaban unidades especializadas e independientes, pero unidas por las pistas de circuitos impresos con el microprocesador formando lo que se conoce como sistema mínimo. A este nuevo circuito integrado se le denominó MICROCONTROLADOR. Figura 1.8 M.C. Eduardo Sánchez Arellano. - Página 6-
  7. 7. 1.1.3 Tipo de microprocesador según su velocidad y ancho de palabra. 1.2 ARQUITECTURA DEL MICROPROCESADOR. El diseño de las microcomputadoras consiste de cinco áreas funcionales: (A) CPU unidad central de procesamiento es el Microprocesador. (B) Puertos de entrada/salida. (C) Memoria de solo lectura (ROM) Memoria de Programa. (D) Memoria de lectura y escritura (RAM) Memoria de Datos. (E) Bus del sistema. CPU Memory Rom In/Out Port. Memory Ram Figura 1.1 (A) Microprocesador (Unidad Central de Procesamiento (CPU)). Central Processing Unit. El CPU es el corazón de toda µC, es el encargado de decodificar las instrucciones, hacer más eficientes las operaciones aritméticas, y controlar algunas otras partes de la maquina. Cuenta con cuatro partes básicas que hace los “verdaderos cómputos”. (1) Decodificador Acumulador. (ACC) de Instruccion (2) (4) Unidad Reg de Instrucción. Aritmetica. Timing and y Logica. Contador del Programa Control. (3) (ALU) M.C. Eduardo Sánchez Arellano. - Página 7-
  8. 8. Sin embargo, a veces el término es usado (aunque incorrectamente), para incluír todo lo que está dentro de la caja, incluyendo el disco duro, el CD ROM, la fuente y el motherboard. (1) Los Registros: Son localizaciones que sirven para almacenar temporalmente datos, pueden ser de 8 o de 16 bits. Los tres registros más usados son, el acumulador para propósito general, el contador de programa y el registro de instrucciones que son de propósito específico. El acumulador almacena temporalmente el resultado de las operaciones aritméticas y lógicas. El registro de Instrucciones es usado para almacenar la instrucción que se está ejecutando en ese momento por el microprocesador. El contador de Programa contiene la dirección de la siguiente instrucción del programa. (2) La unidad aritmético-lógica (ALU, Arithmetic-logic unit): es una red combinacional. Acepta dos palabras de datos y una palabra de control que especifica el tipo de operación que ha de ejecutarse con los datos. El bus de datos del sistema o cualquiera de los registros internos del procesador pueden proporcionar palabras de datos. La palabra de control se define por la unidad de control. La ALU realiza la operación especificada y genera una palabra de salida que representa el resultado de la operación aritmética o lógica y un conjunto de señales de estado que indican, por ejemplo, si se produjo un acarreo o desbordamiento aritmético. La palabra resultado se puede dirigir a cualquiera, de los registros internos o al bus de datos. El destino específico se define por la unidad de control, dependiendo de la naturaleza de la Operación que se esta realizando. Las señales de estado se dirigen a un registro interno específico del procesador para almacenamiento, denominado registro de códigos de condición. (3) El Circuito de temporizador y control: Es una red secuencial que acepta un código que define la operación que se va a ejecutar y luego prosigue a través de una secuencia de estados, generando una correspondiente secuencia de señales de control. Estas señales de control incluyen el control de lectura - escritura y señales de dirección de memoria válida en el bus de control del sistema. Otras señales generadas por el controlador se conectan a la unidad aritmética - lógica y a los registros internos del procesador para regular el flujo de información en el procesador y a, y desde, los buses de dirección y de datos del sistema. (4) El circuito de decodificación: Involucra el proceso de trasladar un patrón binario en una operación o secuencia de operaciones. Por ejemplo si el siguiente patrón binario M.C. Eduardo Sánchez Arellano. - Página 8-
  9. 9. 10111001 representa “ADD”, el circuito de decodificación lo reconoce y manda señales a todas las otras partes del µP para que ocurra la decodificación. (B) PUERTOS DE ENTRADA/SALIDA: Una microcomputadora tiene un camino para comunicarse con el mundo real, y este camino sirve para introducir el programa y obtener los resultados. Los puertos de entrada y salida son circuitos LSI que auxilian a la computadora a comunicarse con los humanos o a controlar un proceso. Son normalmente llamados Peripheral interface adaptdor (PIA) o Programable peripheral interface (PPI). Estos chips pueden ser programados como entradas o salidas de la microcomputadora. Si el µC es usado en un proceso de control, los componentes de entrada son llamados transductores (Termistores, Termocolples etc.). Un transductor convierte una cantidad física analógica como temperatura o presión en una cantidad eléctrica. Esta cantidad puede ser amplificada o procesada antes de convertirla en una señal digital. Por ejemplo en un sistema de control con retroalimentación como el que se muestra a continuación el transductor monitorea la presión dentro de un tubo y constantemente manda los datos al µP. Un programa es usado para comparar el dato contra un valor de referencia almacenado en la memoria. Si la presión excede la referencia el µP manda las señales de salida para cerrar la válvula y hacer sonar la alarma. Figura 1.2 C P U ( µP) Memory Rom In Port. Out Port. Memory Ram Amplificador Drive and Circuit. A/D Converter. M.C. Eduardo Sánchez Arellano. - Página 9-
  10. 10. (C) MEMORIA: La memoria es una porción de la computadora que almacena el programa y los datos mientras estos son necesarios. En esencia la memoria es un grupo de celdas de almacenamiento. Cada celda puede almacenar un bit de información el cual puede ser 1 ó 0. Por ejemplo la sig. Figura muestra un grupo de 8 celdas o bit almacenados como un patrón binario que representa la letra “P”. 0 1 0 1 0 0 0 0 1 celda. Otras letras ó otros tipos de información requieren otros tipos de combinación. La mayoría de los microprocesadores almacenan instrucciones y datos en grupos de 8 bits (1 Byte). Para almacenar más de una letra es necesario más de un byte. Add. 0 1 0 0 1 0 0 1 =I 105 0 1 0 1 0 1 0 0 =T 106 0 1 0 0 1 1 1 0 =N 107 Cada byte almacenado en memoria tiene una dirección. Por ejemplo ITN puede estar almacenado en las direcciones 105 a 107. Los µP son capaces de direccionar 65,536 bytes. 1.2.1 “Arquitectura del Microprocesadores a traves de diagrama a bloques con Arquitectura Von Neumann” M.C. Eduardo Sánchez Arellano. - Página 10-
  11. 11. El Acumulador: almacena datos para ser procesados por la ALU. Suelen tener el mismo número de bits que el bus de datos. El acumulador se utiliza con el bus de datos y la ALU en el proceso aritmertico y logico de los datos. Por ejemplo, dos palabras binarias se pueden sumar, cargando la primera en el acumulador A y sumandola a la segunda, cargando el resultado en el acumulador y después transfiriendo los resultados desde el Acumulador, a la memoria. Durante la transferencia de los primeros datos, el bus de datos sirve como una entrada al Acumulador. Durante la segunda, la ALU realiza una suma en la que el bus de datos proporciona una entrada y el acumulador A la otra; la salida de la ALU se conecta a la entrada del acumulador A para almacenar el resultado. Durante la tercera operación, la salida del Acumulador se conecta al bus de datos, de modo que los resultados se transfieren a memoria. El contador de programa (PC): Es un registro de 16 bits que contiene la dirección de la palabra siguiente del programa. Su salida se conecta al bus de direcciones siempre que una palabra del programa se lea desde la memoria. Cada vez que el contador de programa proporciona una dirección, se modifica de modo que contiene siempre la dirección de la palabra siguiente del programa. M.C. Eduardo Sánchez Arellano. - Página 11-
  12. 12. Figura 1.4 Pin Out del Microprocesador 8080 El puntero de pila (SP, stack pointer): El puntero de pila es, un registro de autoincrementación y autodecrementación, que significa que cada vez que se proporciona un dato su contenido se incrementa o decrementa automáticamente. En los microprocesadores, el puntero de pila contiene la dirección de la siguiente posición de memoria vacía en la pila. A continuación, proporciona esta dirección al bus de direcciones durante un ciclo del bus de lectura. La pila se utiliza de muchos modos; por ejemplo, se utiliza para almacenar la dirección de retorno cuando las transferencias de control a subrutinas o rutinas de interrupción de servicios. M.C. Eduardo Sánchez Arellano. - Página 12-
  13. 13. Fig. 1.5 El registro de códigos de condición: (PSW) ó (CCR) Almacena la información que describe los resultados de operaciones anteriores. Esta información se almacena asignando un bit en el registro. En algunos microprocesadores, el registro del código de condición. Contiene ocho bits, El bit menos significativo es el bit de acarreo, o bit C, que se pone a 1 cuando se produce un acarreo aritmético. El bit de desbordamiento, o bit V, se pone a 1 si se produce un desbordamiento. El bit cero, o bit Z, el tercer bit en el registro de códigos de condición se pone a 1 cuando se produce el resultado cero. El bit negativo, o bit N, se pone a 1 cuando el resultado es negativo. El bit de semi acarreo, o bit H, se pone a 1 cuando se produce un acarreo desde el bit 3. El bit H se utiliza con cálculos aritméticos con datos codificados en BCD. Los bits C, V, Z, N y H se ponen a 1, o a 0, automáticamente por el procesador, dependiendo de la naturaleza de la operación que se está ejecutando y el resultado de está operación, además, los bits C, V e I pueden ser puestos a 1, o a 0, por el programador utilizando instrucciones especiales para cada bit. M.C. Eduardo Sánchez Arellano. - Página 13-
  14. 14. Fig. 1.6 Pin Out del Microprocesador Motorola MC6800 Fig. 1.7 Pin Out del Microprocesador Mostek 6502 M.C. Eduardo Sánchez Arellano. - Página 14-
  15. 15. En estos momentos los MICROCONTROLADORES de 8 bits son el estándar para aplicaciones en controladores de mediana complejidad, por su facilidad de manejo y su alto nivel de prestaciones. Además la arquitectura permite que el MICROCONTROLADOR sea utilizado como Microprocesador. Naturalmente esto trae como consecuencia una reducción de su capacidad autónoma de controlar periféricos a través de sus puertos. MICROCONTROLADORES INTEL 8XXX Características de la Familia de MICROCONTROLADORES Intel. Con ROM Sin ROM con EPROM ROM RAM TIMER TECNOLO 8048AH 8040AH P8748H 1K 64 1 HMOS 8049AH 8039AHL P8749H 2K 128 1 HMOS 8050AH 8035AHL No Existen 4K 256 1 HMOS 8051 8031 8751 4K 128 2 HMOS 8051AH 8031AH 8751H 4K 128 2 HMOS 8052AH 8032AH 8752BH 8K 256 3 HMOS 80C51BH 80C31B 87C51 4K 128 2 CMOS TABLA 1.2 ARQUITECTURA BÁSICA DE LOS MICROCONTROLADORES 8051 Figura 1.9 M.C. Eduardo Sánchez Arellano. - Página 15-
  16. 16. DIAGRAMA GENERAL DE LOS MICROCONTROLADORES 8031-8051-89C51-8751 Figura 1.10 Figura 1.11 M.C. Eduardo Sánchez Arellano. - Página 16-
  17. 17. Descripción de los pines: Vcc: Voltaje de alimentación positiva (+5 Volts.) Vss: Conexión a tierra (0 volts). PUERTOS: Los MICROCONTROLADORES 8051 tienen 4 puertos de 8 bits bidireccionales (P0, P1, P2 y P3). Esto quiere decir que pueden programarse y operar como entrada o salida. PUERTO 0(P0): Se encarga de multiplexar en el tiempo por sus 8 líneas la parte baja del Bus de direcciones durante el acceso a la memoria externa, y el Bus de datos. PUERTO 1(P1): Este puerto además de ser de proposito general también recibe la parte baja de direcciones, durante la programación y verificación de la memoria EPROM interna. PUERTO 2 (P2): El puerto 2 emite la parte alta del Bus de direcciones en los accesos de memoria externa cuando utilizan 16 bits de dirección (MOVX @DPTR, A). Durante el acceso a la memoria de datos externa con direccionamiento de 8 bits (MOVX @R1,A), los pines del Puerto 2 emiten el contenido del registro P2 del SFR (Registro de funciones especiales). PUERTO 3 (P3): Este puerto puede usarse para propósito general cuando trabaja como microcontrolador pero tiene otras funciones especiales cuando trabaja como microprocesador o con acceso a memoria de datos externa, como se muestra en la sig. Tabla. Pin Descrip Funciones 10 P3.0 RXD (Entrada puerto Serie) 11 P3.1 TXD (Salida puerto serie) 12 P3.2 INTO (Interrupción 0. Externa) Neg. 13 P3.3 INT1 (Interrupción 1. Externa) Neg 14 P3.4 T0 (Entrada externa. Timer 0) 15 P3.5 T1 (Entrada externa. Timer 1) 16 P3.6 WR (Autorización escritura de datos) Neg. 17 P3.7 RD (Autorización escritura de datos) Neg. TABLA 2.2 ALE/PROG: (Address Latch Enable) es un pulso que emite el MICROCONTROLADOR para amarrar el <<byte bajo>> del Bus de direcciones en el acceso a la memoria externa. ALE se emite con una frecuencia de 1/6 de la frecuencia de emisión del reloj. PROG: Es el pin de entrada de los pulsos de programación de la memoria EPROM lo utiliza solamente el programador de micros. PSEN: Es la señal de strobe para leer en la memoria de <<programa externo>>. La memoria externa tiene dos modalidades, de programa y de datos. Para diferenciarlas, utiliza M.C. Eduardo Sánchez Arellano. - Página 17-
  18. 18. la señal PSEN. PSEN no se activa cuando se está ejecutando el programa de la ROM o EPROM interna. EA/VPP: (External Access), cuando se mantiene un nivel alto, se ejecuta sólo el programa de la EPROM interna, a menos que el contador de programa exceda de FFF (4K) para el 8751. Si EA se mantiene un nivel bajo, se ejecuta el programa de la memoria externa siempre, independientemente de la dirección del programa. Es decir cuando EA=1 actúa como MICROCONTROLADOR. EA=0 actúa como MICROPROCESADOR. VPP: Es la tensión de programación de la EPROM. XTAL1 y XTAL2: Son la entrada y salida respectivamente, de un amp lificador inversor que puede ser configurado para su uso como un chip oscilador. Se puede utilizar indistintamente un cristal de cuarzo o un resonador cerámico. RESET: Señal de inicialización del sistema. Un reset interno al sistema se produce cuando se pone el pin RST a un nivel alto durante un cierto tiempo, esto se logra de modo automático conectando el pin RST a Vcc mediante un capacitor de 10 µF y a tierra medinte una resistencia de 8.2 kΩ . M.C. Eduardo Sánchez Arellano. - Página 18-
  19. 19. EL MICROCONTROLADOR 89C51 COMO MICROPROCESADOR Una característica importante es que los puertos pueden ser utilizados como buses de direcciones, de datos y control, debido a estas caracteristicas se dice que el Microcontrolador puede trabajar como Microprocesador. Los drivers de salida de los puertos P0 y P2 y los buffers de entrada del puerto P0 se pueden utilizar para acceder a la memoria externa del sistema. En estas condiciones, el puerto P0 se configura como salida del byte bajo del bus de direcciones (A0 a A7), de un bus que consta de 16 bits (capacidad de direccionamiento 64K). Multiplexado en el tiempo como bus de datos bidireccional (D0 a D7). El puerto P2 se configura como salida del byte alto del bus de direcciones (A8 a A15). De esta manera el microcontrolador se configura a modo de CP U (Microprocesador) de un sistema externo con unas capacidades de expansión definibles por el usuario. Naturalmente, en estas condiciones, le queda como puerto íntegro, para el control de periféricos, el puerto P1 y parte del puerto P3, puesto que hay señales que se utilizan para el control del sistema (bus de control). Figura 1.12 M.C. Eduardo Sánchez Arellano. - Página 19-
  20. 20. Organización de la MEMORIA en el Microcontrolador-Microprocesador 8X51. MEMORIA DE PROGRAMAS Y MEMORIA DE DATOS. Los MICROCONTROLADORES 8751 tienen separados los espacios de direcciones para memoria de programa y memoria de datos. La memoria de programa sólo puede ser leída y tiene como máximo 64K byte externos. (Internamente el 8751 es de 4K byte). La señal de autorización de lectura en la memoria de programa externa es PSEN. El pin EA del MICROCONTROLADOR puesto a Vcc (+5V) indica que el puntero de programa busca direcciones desde la posición de memoria 0000H hasta la 0FFFH de la memoria interna y de la 1000H a la FFFFH, en la memoria externa. Si el pin EA es puesto a Vss (0v), la búsqueda de direcciones del programa se dirige a la memoria externa en todo momento. Ciclo de lectura en la memoria externa de programas Para acceder a la memoria externa del programa se utiliza la señal PSEN (Program Store Enable) como señal de autorización de lectura. La señal ALE <<latchea>> el byte bajo del bus de direcciones en el primer estado (ciclo de reloj), y así permite direccionar, durante todo el ciclo de instrucción, mientras esas mismas líneas son utilizadas, en el resto del ciclo de instrucción, como bus de datos. En la Figura 1.13 se puede observar que la lectura en la memoria de programas se realiza cuando M.C. Eduardo Sánchez Arellano. - Página 20-
  21. 21. PSEN está a nivel bajo, siendo el resto de las líneas de dirección las que establecen la posición de menoria exacta del byte de instrucción u operando que ha de ser leído. Si el usuario escribe en el Puerto P0 durante el ciclo de búsqueda en la memoria externa, el byte de código puede ser modificado. Se recomienda no escribir en el Puerto P0 si es utilizada para leer en la memoria de programa externa. A la memoria de programas externa se accede bajo dos condiciones: 1. Cuando el pin EA es activo (0), caso de la Figura 1.13 2. Cuando el contador de programa (PC) contiene un número más grande que 0FFFH para el 8051 o para el 8052. MEMORIA DE PROGRAMA EPROM ó FLASH En la parte baja de la memoria de programa se encuentran ciertas posiciones de memoria especiales asignadas por el fabricante para el tratamiento de las rutinas de interrupciones. FUENTE DE INTERRUPCION DIRECCIONES DEL VECTOR 0FFFH Flag que se activan à RI Y TI 0023H...PUERTO SERIE TF1 001BH...INT TIMER 1 IE1 0013H... INT EXTERIOR 1 TF0 000BH...INT TIMER 0 IE0 0003H...INT EXTERIOR 0 RESET 0000H... RESET Tabla 1.4 Una interrupción puede ser provocada de manera externa o de manera interna, es decir puede ser producida por un periférico externo o por software. La interrupción con más prioridad es RESET la cual no puede ser enmascarada. Cuando un RESET ocurre el programa comienza a partir de la dirección 0000H, del programa. Cuando una interrupción es producida, el Contador de Programa (PC) almacena su contenido temporalmente dentro del SP (apuntador de apilamiento) y se carga con la dirección de la localidad donde se encuentra la rutina de servicio de la interrupción correspondiente. Una vez posicionado en esa localidad deberá de comenzar la ejecución de la rutina de servicio, hasta que encuentre la instrucción RETI, que le permitirá al PC recuperar nuevamente su valor original almacenado en el SP, y continuar con el programa anterior a la interrupción. M.C. Eduardo Sánchez Arellano. - Página 21-
  22. 22. Por ejemplo a la interrupción 0, se le asigna la localidad 0003H, si la interrupción no se utiliza, esta localidad puede utilizarse para propósitos generales del programa, si la interrupción ha sido permitida, (estableciendo el bit correspondiente dentro del registro de control IE), en el momento que exista una activación de la interrupción (estado bajo en la línea INT0) el PC se cargará con 0003 y saltará a esa localidad para comenzar a ejecutar la rutina de servicio. Como se puede observar en la Tabla 1.4 Anterior el intervalo físico entre dos interrupciones es de 8 bytes, espacio capaz de albergar una pequeña rutina, pero si éste no fuera suficiente se desviaría el contador del programa (PC) mediante una instrucción de salto (JMP) a una zona amplia de la memoria de programa capaz de contener dicha rutina. Como se ha dicho la memoria de programa puede ser interna (en el propio micro) ó externa (en otro chip). La selección se realiza por hardware, con la señal EA (External Access). Conectado a Vcc ó Vss respectivamente. El hardware de configuración del Microcontrolador como Microprocesador utilizando memoria de programa externa se muestra en la Fig 1. 12 Se puede observar en al Figura 1.14 que las 16 líneas de dirección corresponden al Puerto 0 y al Puerto 2, que están dedicadas como bus de direcciones; aun más el Puerto 0 sirve como bus de direcciones y bus de datos multiplexado en el tiempo. Esta operación característica de la familia de Microprocesadores Intel, se realiza de la forma siguiente. Figura 1.14 • El Puerto P0 emite el <<byte bajo>> del contador del programa PC (PCL). Una vez estabilizada la señal sobre P0, la señal ALE (Address Latch Enable) introduce esta dirección dentro del circuito integrado latch 74LS373, que pasa a apuntar la dirección de la memoria externa de programas. Al mismo tiempo que el Microcontrolador emite el PCL por P0, la parte alta del contador del programa (PCH) se emite por P2. Entonces M.C. Eduardo Sánchez Arellano. - Página 22-
  23. 23. PSEN autoriza la lectura al Microcontrolador del código de instrucción a través del Puerto P0. Para un mejor entendimiento y seguimiento de los diagramas de tiempos, en la figura 1.13 se dibuja un circuito esquematico en el que aparece el microcontrolador comandando una memoria RAM (6116) y una memoria EEPROM (2816). Figura 1.13 En las siguiente Fig. Se muestra el funcionamiento y diagramas de tiempos de esta operación. Figura 1..15 M.C. Eduardo Sánchez Arellano. - Página 23-
  24. 24. CICLO MAQUINA: Un ciclo maquina, para esta familia de Microcontroladores, consiste en una secuencia de 6 <<estados>>, nombrados S1 a S6. Cada estado esta formado dos periodos de la señal de reloj que se denominan <<fases>> (fase 1 y fase 2). Teniendo en cuenta que cada ciclo maquina tiene 12 periodos (6 estados por 2 fases), si el oscilador genera una señal de reloj de una frecuencia de 12 Mhz, la duración del ciclo maquina será de 1 µsegundo. La secuencia de búsqueda/ejecución son las mismas, sea la memoria de programas interna o externa al Microcontrolador; es decir, los tiempos de ejecución no dependen de que se utilice la memoria interna o externa. La figura 1.15 muestra el diagrama de tiempos de las señales implicadas en la secuencia de búsqueda, cuando la memoria de programa es externa. La señal PSEN se activa dos veces por ciclo de maquina, para autorizar la lectura en la memoria de programa. Si se produce un acceso a la memoria de datos, como se muestra en la figura 3.4, no se emiten los dos impulsos PSEN, puesto que el acceso a la memoria de datos no los necesita ni utiliza. Observe como el acceso a la memoria de datos toma dos ciclos más de BUS que la memoria de programas. Las figuras 3.3 y 3.4 muestran los diagramas de tiempos relativos a ambas secuencias de acceso, destacando la emisión de direcciones por P0 y P2, y las señales ALE y PSEN. La señal ALE se utiliza para latchear el <<byte bajo>> de direcciones dentro del latch. Cuando el CPU esta ejecutando un programa en la memoria interna PSEN no se activa y las direcciones no se emiten por los puertos. Sin embargo ALE se sigue emitiendo dos veces por cada ciclo de maquina, pudiendo ser utilizada como señal de reloj externo. No obstante, como se puede ver en la figura 3.4, cuando se accesa a un operando utilizando la instrucción MOVX, la señal ALE desaparece. M.C. Eduardo Sánchez Arellano. - Página 24-
  25. 25. Figura 3.4 En la figura anterior se pudo observar cómo se realiza un acceso a la memoria externa de programas para tomar una instrucción y en el segundo ciclo de accede a la memoria de datos externa para tomar datos. M.C. Eduardo Sánchez Arellano. - Página 25-
  26. 26. MEMORIA DE DATOS (RAM). El 8751 puede direccionar hasta 64 kbytes de memoria de datos externa. En la sig. Figura se pude ver el mapa de memoria de datos. La memoria interna se encuentra dividida en dos bloques, los 128 bytes bajos y el espacio ocupado, en parte, por los Registros de Funciones Especiales (SFR). FFFF FF SFR Solo Directo. 64 KBytes 80 Memoria Externa 7F Directo é Indirecto 00 0000 RD WR FIG. 3.5 En la memoria de datos interna se puede acceder a un total de 256 bytes para el 8751 incluido el área de los registros especiales (SFR), ÁREA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO de RAM. Los 128 bytes a los que puede acceder desde ambos direccionamientos, directo e indirecto, pueden ser divididos en tres segmentos. Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco. Los registros se localizan desde la dirección 00H a 1FH (32 bytes). Después de un Reset, el banco operativo por default es el banco 0. La selección de otro banco de registros debe hacerse por software escribiendo en el registro de estado PSW. Dirección Inicial Dirección Final 00H Banco 0 07H 08H Banco 1 0FH 10H Banco 2 17H 18H Banco 3 1FH El reset inicializa el Stack Pointer (SP) en la posmem 07H y se incrementa inmediatamente a la posmem 08H, que es el primer registro R0 del segundo banco de registros, el SP se puede inicializar en otra localización de memoria. M.C. Eduardo Sánchez Arellano. - Página 26-
  27. 27. § SUBÁREA DIRECCIONABLE BIT A BIT: Esta área tiene una longitud de 16 bytes (del segmento 20H a 2FH). Cada uno de los 128 bits de este segmento se puede direccionar directamente (00H a 7FH). Los bits se pueden direccionar por los bytes que contiene (20H a 2FH). Esto es, los bits 0 al 7 pueden ser referidos como los bits 20.0 a 20.7, etc. 20H 27H 28H 2FH § SUBÁREA SCRATCH PAD: La memoria scratch pad se entiende como la memoria común es decir un block de notas de rápido acceso, pero de escasa capacidad. Ocupa las posiciones de memoria 30H a 7FH 80 Bytes. Es la memoria de trabajo RAM del usuario. 30H 3FH 40H 4FH 50H 5FH 60H 6FH 70H 7FH ÁREA DE REGISTROS O FUNCIONES ESPECIALES. La sig. Tabla muestra los registros especiales que utiliza el 8751, así como sus direcciones. No. Símbolo Nombre Dirección 1. *ACC Acumulador Acumulador. 0E0H 2. *B Registro B Registro B. 0F0H 3. *PSW Program Status Word Palabra de Estado del Programa. 0D0H 4. SP Stack Pointer Puntero de la memoria de la PILA. 81H 5. DPTR Data Pointer 2 Bytes Apuntador de datos. ------- 6. DPL Low Byte del DPTR Byte bajo. 82H 7. DPH High Byte del DPTR Byte alto. 83H 8. *P0 Port 0 Puerto 0 80H 9. *P1 Port 1 Puerto 1 90H 10. *P2 Port 2 Puerto 2 0A0H 11. *P3 Port 3 Puerto 3 0B0H 12. *IP Interrupt Priori ty Control Control de prioridad de interrupciones. 0B8H 13. *IE Interrupt Enable Control Control de autorización de Interrupciones. 0A8H 14. TMOD Timer/Counter Mode Control Control Modo Temporizador/Contador. 89H 15. *TCON Timer/Counter Control Control Temporiza dor/Contador. 8CH 16. TH0 Timer/Counter 0 High Byte Byte alto temporizador/Contador 0 88H 17. TL0 Timer/Counter 0 Low Byte Byte bajo temporizador/Contador. 0 8AH 18. TH1 Timer/Counter 1 High Byte Byte alto temporizador/Contador 1 8DH 19. TL1 Timer/Counter 1 Low Byte Byte bajo temporizador/Contador. 1 8BH 20. *SCON Serial Control Control de comunicación serie. 98H 21. SBUF Serial Data Buffer Buffer de datos de comunicación serie. 99H 22. PCON Power Contol Control de consumo de potencia. 87H *= Registros Direccionable bit a bit. Tabla 3.2 ACC: Acumulador: Es un registro de propósito general y por su frecuencia de intervención, el más importante. M.C. Eduardo Sánchez Arellano. - Página 27-
  28. 28. B: Registro B es usado durante operaciones de multiplicación y división, para otras instrucciones puede ser tratado como un registro común. SP: Stack Pointer: es un registro de 8 bits, este es incrementado antes de que el dato sea almacenado, con un Push o Call. El Stack puede recidir en cualquier lugar de la RAM. El Stack Pointer es inicializado a 07H después de un reset, esto hace que el Stack empiece en la localidad 08H. DPL y DPH: Data Pointer: Este registro puede ser manipulado como un registro de 16 bits o como dos registros de 8 bits. P0,P1,P2,P3: Son registros “Latches” de los puertos 0,1,2,3 respectivamente. PSW: Program Status Word: Contiene información del estado del CPU en cada ciclo de instrucción. b7 b6 b5 b4 b3 b2 b1 b0 CY AC F0 RS1 RS0 OV - P BIT NOMBRE Y COMENTARIO b0 P: bandera de paridad del Acumulador (ACC). - Si P=1 el número de unos en el ACC es impar. - Si P=0 el número de unos en el ACC es par. b1 Bandera disponible por el usuario. b2 OV: Bandera de Overflow. b3-b4 RS0-RS1: Selección del banco de registros. 0 - 0 Banco 0 (00-07H) 1 - 0 Banco 1 (08-0FH) 0 - 1 Banco 2 (10-17H) 1 - 1 Banco 3 (18-1FH) b5 F0: Bandera 0. De propósito general. Definida por el usuario. b6 AC: Bandera de acarreo Auxiliar. Para operaciones en BCD. b7 C: Bandera de Acarreo. Ciclo de lectura (RD) en la memoria externa de datos Para el acceso a la memoria externa de datos utiliza la señal de control RD (función alternativa de P3.7) y puede utilizar los 16 bits de dirección (M0VX A,@DPTR) o bien 8 bits (MOVX A,@Ri) (véase Figura 1.13). M.C. Eduardo Sánchez Arellano. - Página 28-
  29. 29. En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la señal de control RD que autoriza la lectura sea desactivada. Ciclo de escritura (WR) en la memoria externa de datos Para la escritura en la memoria externa de datos utiliza la señal de control WR(función alternativa P3.6) y puede utilizar los 16 bits de dirección (MOVX @DPTR,A) o bien 8 bits (MOVX @Ri,A). En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y después de que la señal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una dirección de 16 bits es utilizada (MOVX @DPTR), el byte alto de dirección sale por el Puerto P2, donde permanecerá mientras dura el ciclo de lectura o escritura. Si se utiliza una dirección de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa. Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarán en esta situación: P0: Bus de direcciones bajas (A0 a A7) y bus de datos (D0 a D7) multiplexados en el tiempo. P1: puerto de E/S. P2: Bus de direcciones altas (A8 a A15). P3: Bus de control. M.C. Eduardo Sánchez Arellano. - Página 29-
  30. 30. 1.4 Lenguaje Ensamblador del Microprocesador Programación de los Micfroprocesadores y los Microcontroladores MCS-51,52 Todos los modelos de la familia MCS-51 ejecutan el mismo set de instrucciones. Estas instrucciones están optimizadas para el control de aplicaciones de 8 bits. Un programa en lenguaje ensamblador es un conjunto de instrucciones que se pueden convertir en un programa ejecutable en lenguaje máquina. Estas instrucciones se dividen en tres categorías: 1) Pseudoinstrucciones (Directivos), se emplean para proporcionar información con el fin de convertir el programa de ensamblador a una versión en lenguaje máquina. 2) Descriptores de Datos, utilizados para definir valores constantes y reservar posiciones de memoria de datos necesarias en el programa. 3) Instrucciones Ejecutables, equivalentes a las instrucciones en lenguaje máquina. INSTRUCCIONES EJECUTABLES: Cada instrucción ejecutable en lenguaje ensamblador es una representación simbólica de una instrucción en lenguaje máquina. Por lo tanto, la instrucción en lenguaje ensamblador debe definir la operación aritmética - lógica; el modo de direccionamiento y el operando, dirección o desplazamiento de la dirección cuando sea necesario. Además las instrucciones ejecutables en lenguaje ensamblador suelen contener una sentencia o comentario que indica la razón fundamental de la instrucción. Por último, es frecuente asignar una etiqueta, o nombre a una función, para facilitar su referencia. Toda esta información se organiza en cuatro campos: Campo Etiqueta. : Campo Operación Campo Operando ; Campo Comentario Las instrucciones en los microprocesadores son actualmente una secuencia de 0 y 1’s que representan la operación que se ejecutara. La notación hexadecimal es usada para abreviar la representación de la instrucción. Una forma fácil de escribir y entender un programa es escribirlo en Lenguaje ensamblador. En lenguaje ensamblador, la combinación de bits es representada por un nombre o un mnemónico al cual le corresponde la acción de la instrucción. Por ejemplo la instrucción del 8051 que suma el contenido del registro R7 con el Acumulador A es representada por: M.C. Eduardo Sánchez Arellano. - Página 30-
  31. 31. 00101111B ó 2FH. En ensamblador ADD A, R7 Esta representación es llamada Lenguaje Maquina debido a que esta representación es la que utiliza el Microprocesador. Esta instrucción tiene dos campos distintos, estos campos son la operación y el registro fuente, como se muestra en las tablas de instrucciones. A continuación se estudiarán los modos de direccionamiento y el set de instrucciones agrupado por especialidades de la siguiente manera: • Instrucciones aritméticas. • Instrucciones lógicas. • Instrucciones para la transferencia de datos en: a) RAM interna. b) RAM externa. • Instrucciones para el tratamiento de tablas. • Instrucciones Booleanas. • Instrucciones de salto. 1.4.3 MODOS DE DIRECCIONAMIENTO. q Direccionamiento Directo. En este direccionamiento el operando se especifica en la instrucción por un campo de dirección de 8 bits. Sólo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de esta forma. Ejemplo: ADD A, 4CH es decir, suma el contenido del acumulador con el contenido de la posición de memoria (4CH): A<-- (A)+(4C) Nota: Un registro o número entre paréntesis se refiere al contenido. Así (A) es el contenido del acumulador. (4C) es el contenido de la posición de memoria 4C. ADD A, 7FH ;El acumulador es sumado al dato que se encuentra en la dirección 7FH de la Ram interna y el resultado será almacenado en el acumulador. MOV A, 2EH ; El Acumulador es cargado con el dato que se encuentra en la dirección 2EH de la memoria RAM interna. M.C. Eduardo Sánchez Arellano. - Página 31-
  32. 32. MOV 3DH, 4EH ; El contenido de la dirección 3DH es cargado con el dato que se encuentra en la dirección 4EH. q Direccionamiento Indirecto: La instrucción específica un registro que contiene la dirección del operando. Tanto la memoria RAM interna, como la externa se pueden direccionar indirectamente. Los registros para direccionar sobre el mapa de 8 bits son el R0 y R1 del banco de registros seleccionado, o el Stack Pointer. El registro para direccionar sobre 16 bits sólo puede ser el DPTR. Ejemplo: ADD A, @R0 ; Así, si (R0)=4CH la operación será: A<--(A)+(4C) (@) es el indicador del direccionamiento indirecto. MOV A, @R0 El Acumulador es cargado con el dato que se encuentra en la dirección apuntada por RO. MOVX A, @DPTR; El Acumulador es cargado, con el dato que se encuentra en la dirección apuntada por el DPTR. MOVX @DPTR, A El contenido del acumulador es guardado en la dirección apuntada por el DPTR. q Direccionamiento por Registro Los Microcontroladores 8751, contienen cuatro bancos seleccionados por los bit 3 y 4 del PSW, y cada banco de registros tiene ocho registros del R0 al R7. El propio código de operación de la instrucción especifica con qué registro se opera; es decir, cuando la instrucción es ejecutada se accede a uno de los 8 registros del banco seleccionado y en la mayoría de los casos son más rápidas. Ejemplo: MOV Rn,A Código: 1111 1 r r r Operación: (Rn) ß (A) Dependiendo del registro implicado el código de instrucción tomará distintos valores. Así M.C. Eduardo Sánchez Arellano. - Página 32-
  33. 33. MOV Ro,A à 1111 1000B = F8H MOV R1,A à 1111 1001B = F9H MOV R2,A à 1111 1010B = FAH MOV R7,A à 1111 1111B = FFH Otro ejemplo: MOV Rn, #data Código: 0111 1 r r r Operación: (Rn) ß #dato. q Direccionamiento Implícito. En estas instrucciones se especifica, implícitamente, el registro sobre el que van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando por que está implícito en el código de operación. Ejemplo: INC A; A ß (A) + 1 Incrementa el contenido del acumulador: INC DPTR; DPTR ß (DPTR) + 1 Incrementa puntero de datos; DEC R0; Decrementa el registro R0. q Direccionamiento Inmediato Al código de operación le sigue una constante en la memoria de programas. Ejemplo: MOV A, #255 ; Carga en el acumulador el número decimal 255. Generalmente se expresan en hexadecimal: MOV A, #0FFH o en binario: MOV A, #11111111B MOV A, #64H ;El acumulador es cargado con el dato 64H inmediatamente. ADD A, #120 ;El acumulador es sumado al número decimal 120 y el resultado ;se almacena en el acumulador. MOV DPTR, #1245H ;El DPTR es cargado con el dato 1245H en forma inmediata. • Direccionamiento Indexado Este direccionamiento sólo es posible en la memoria de programas y sólo permite la lectura. Es utilizado para la lectura de tablas. Un registro base de 16 bits (el DPTR o el M.C. Eduardo Sánchez Arellano. - Página 33-
  34. 34. Contador del Programa) apunta a la base de la tabla y el contenido del acumulador es el offset que permite acceder a la lectura de esa posición de la tabla. MOVC A, @A+DPTR ;Mueve una constante que se encuentra en la, memoria del programa. El Acumulador es, cargado con el dato que se encuentra apuntado por la dirección formada por la suma del Acumulador A y el Apuntador de Datos. MOVC A,@A+PC; El Acumulador es cargado con dato que se encuentra, en la dirección formada por la suma del mismo Acumulador A y el Contador del Programa (PC). 1.4.3 CICLO DE INSTRUCCIÓN La ejecución de un ciclo de instrucción comienza en el estado 1 del ciclo máquina, cuando el código de operación es almacenado en el Registro de Instrucción. Como norma general, una instrucción requiere de uno o más ciclos máquinas, en función de: a) El código de operación M.C. Eduardo Sánchez Arellano. - Página 34-
  35. 35. Por ejemplo, la instrucción INC A (figura 3.1 A) tiene 1 de byte de instrucción y requiere 1 ciclo máquina, la instrucción INC DPTR, también, de 1 byte de instrucción requiere de 2 ciclos máquina (figura 3.1C) y la instrucción MUL AB requiere de 4 ciclos máquina para su total ejecución y ocupa 1 byte en la memoria. b) El número de bytes Por ejemplo, la instrucción MOV A, # data tiene 2 bytes de instrucción y requiere de 1 ciclo máquina (figura 3.1B). En cambio la instrucción MOV direct, # data al constar de 3 bytes necesita de 2 ciclos máquina. Esto no ocurre siempre, es decir, a más bytes más ciclos máquina, como puede verse en la figura 3.1 B correspondiente a la instrucción, MOV A, # data y en la figura 3.1D MOVX A,@Ri. La primera instrucción tiene 2 bytes y la segunda sólo 1, en cambio la primera requiere 1 ciclo máquina y la segunda 2. Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del número de bytes y ciclo de instrucción se ha editado la tabla 4.5 con el set completo de instrucciones. M.C. Eduardo Sánchez Arellano. - Página 35-
  36. 36. Cabe destacar también en la figura 3.1 que en cada ciclo máquina se producen 2 accesos a la memoria. El primero, si es comienzo de ciclo de instrucción, siempre leerá el código de operación, el segundo que normalmente se descarta. Se utiliza para leer el segundo byte, operando de la instrucción, como ocurre en la figura 3.1B. OPERACIÓN DE ESCRITURA EN LOS PUERTOS DE LOS Microcontrolador La operación de escritura, utilizando los puertos del Micro, puede ser realizada por cualquiera de ellos; no obstante, el puerto P0 es el que presenta una mayor cargabilidad, permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro cargas TTL-LS. En la ejecución de una instrucción que cambia el valor del latch del puerto, el nuevo valor llega al latch durante el estado 6, fase 2 del final del ciclo de instrucción, según indica la Figura 1.8 Figura 1.14 Antes de comenzar con el estudio y comprobación de los puertos de E/S, se muestra la interface para la conexión de los puertos a los dispositivos de salida, que en un principio pueden ser unos simples LED (Figura 1.15). Para controlar cargas de mayor consumo de energía, como relés, se recomienda utilizar, entre el puerto y la carga, drivers no inversores, como el ULN 2003, e inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50v. M.C. Eduardo Sánchez Arellano. - Página 36-
  37. 37. Figura 1.15 Por esto la activación de estas señales depende del formato de la instrucción. Para la operación de ESCRITURA en el puerto, la instrucción más habitual es la siguiente: MOV PX, <DATO> ; PXß<DATO>X toma valores 0, 1, 2 y 3 según el puerto. M.C. Eduardo Sánchez Arellano. - Página 37-
  38. 38. 1.4.4 TIPOS DE INSTRUCCIONES El set de instrucciones de Intel MCS-51 se puede dividir según las especialidades: • Instrucciones aritméticas, • Instrucciones lógicas. • Instrucciones de transferencia de datos. • Instrucciones booleanas. • Instrucciones de salto. Las instrucciones aritméticas, lógicas, de transferencia y de salto son comunes en la mayoría de microprocesadores. Los microcontroladores tiene un área especial de aplicación, que es el área del control de procesos; en este campo las operaciones están orientadas, muy a menudo, a bits. Los microcontroladores leen, procesan, escriben e intercambian información con los sistemas exteriores, en formato <<bit a bit>> o <<palabra a palabra>>. Un procesador booleano con un set de instrucciones booleanas muy completo se encarga de realizar este tipo de operaciones. Esta particularidad, así como su inmunidad al ruido eléctrico, le hacen valioso en el mundo del control de procesos industriales. Estudio de las instrucciones por especialidades, aparece todo el set de instrucciones, 111 en total, de la familia 51; en cambio, en las tablas simplificadas que utilizaremos primero solo curntan con 69 instrucciones. La razón de esta diferencia está en la propia tabla y justamente en la columna encabezada por <<modos de direccionamiento>>. Esto quiere decir que según los direccionamientos una instrucción puede tener hasta cuatro códigos de operación y operandos distintos. Esta situación se resuelve utilizando la palabra <byte>, que tomará el siguiente significado (tabla 4.1): TABLA 4.1 En la tabla Según el modo de simplificada direccionamiento Significado <byte> direct Direccionamiento directo. Se refiere a una posmem. <byte> @Ri Direccionamiento indirecto a través del registro R0 y R1. <byte> Rr Direccionamiento por registro. <byte> # data Direccionamiento inmediato. Constante de 8 o 16 bits En las tablas simplificadas también se indica el posible flag (C= Carry, OV= overflow, AC= Auxiliar Carry) afectado por la instrucción según el siguiente código: No es afectado.................................... Sí es afectado...................................... X Afectado poniéndolo a ...................... 0 Afectado poniéndolo a........................ 1 En algunas tablas no son afectados los flags, y esto se indica con un mensaje en la parte inferior de las mismas. M.C. Eduardo Sánchez Arellano. - Página 38-
  39. 39. Los tiempos de ejecución Se han tomado utilizando como referencia una frecuencia de reloj de 12 MHz. INSTRUCCIONES ARITMETICAS En la tabla 4.2. Se muestra el menú de las instrucciones aritméticas. Se indican en la tabla los modos de direccionamiento que permite la instrucción y los flags afectados. Los tiempos de ejecución que se indican en la tabla están evaluados sobre una frecuencia de reloj de 12 MHz. Tabla 4.2 X =Si =No Al leer dicha tabla se observa que: • Se puede incrementar o decrementar un byte en la memoria de datos interna sin la intervención del acumulador. • Una de las instrucciones INC opera sobre los 16 bits del puntero de datos (DPTR). • La instrucción MUL AB multiplica el contenido del acumulador con el dato situado en el registro B y el producto, en formato 16 bits, aparece en los registros Acumulador y B (Sobreescribe a los operandos). • La instrucción DIV AB divide el contenido del acumulador con el dato contenido en B, apareciendo el resultado, cociente, en el acumulador y el resto en el registro B. Ejemplo: A = 5FH M.C. Eduardo Sánchez Arellano. - Página 39-
  40. 40. DIV AB B = 0AH 1001 à A 1010 0101 1111 0101 à B • La instrucción DA A justa el resultado en binario puro producido por las instrucciones ADD y ADDC a formato BCD. Esta instrucción no convierte el contenido del acumulador en BCD, sino que hace ajuste BCD de la suma (resultado), por lo tanto, esta instrucción debe ir inmediatamente después de la instrucción ADD o ADDC. Esta es, de forma simplificada, la operación que realiza: Si [ [(A3-0 )> 9] * OR * [(AC) = 1] ] Entonces (A3-0) ß (A3-0) + 6 Y si [[(A7-4) > 9] * OR.* [(C)= 1]] Entonces (A7-4 ) ß (A7-4) + 6 INSTRUCCIONES LOGICAS La tabla 4.3 muestra la lista de instrucciones lógicas y los modelos de direccionamiento que permiten así como los flags afectados. La duración de ejecución de 1 ó 2 microsegundos considerando un cristal de 12 MHz. • Las primeras instrucciones corresponden a las operaciones AND, OR, EXOR y NOT. Ejemplo: ANL <byte> # 3F , Si <byte> = (3A) = 0011 1010 # 3F = 0000 1111 0000 1010 = 0AH (<byte> se refiere, en este caso, a una posición de memoria.) Tiempo de Nemónico Operación Modos de direccionamiento Flag afectados Ejecución Dir Ind Reg Imm C OV AC µs ANL A,<byte> A=A.AND.<byte> X X X X 1 ANL <byte>,A <byte>=<byte>.A X 1 ANL <byte>,#data <byte>=<byte>.And. X 2 ORL A,<byte> A=A.OR. <byte> X X X X 1 ORL <byte>, A <byte>=<byte>.OR.A X 1 ORL <byte>. # data <byte>=<byte>.OR.# data X 2 XRL A,<byte> A =A.XOR.<byte> X X X X 1 M.C. Eduardo Sánchez Arellano. - Página 40-
  41. 41. XRL <byte>, A <byte>=<byte> .XOR. A X 1 XRL <byte> , #data <byte>=<byte> .XOR. #data X 2 CLR A A=00H Accumulator only 1 CPL A A=.NOT.A Accumulator only 1 RL A Rotate ACC Left 1 bit Accumulator only 1 RLC A Rotate left through Carry Accumulator only 1 X RR A Rotate ACC Right 1 bit Accumulator only 1 RRC A Rotate Right through Carry Accumulator only 1 X SWAP A Swap Nibbles in A Accumulator only 1 Tabla 4.3 X =Si =No • Continuando con el set de instrucciones, aparecen instrucciones de manipulación de la información, como las instrucciones de Rotación y de intercambio (SWAP). • Las instrucciones de Rotación RL y RR A desplazan el acumulador 1 bit a la izquierda y derecha, respectivamente, sin afectar al bit de acarreo. C b7 ßACCà b0 Ejemplo: Rotación a la izquierda (Left) (A) = 0C5H=1100 0101 B (antes de ejecutarla) RL A (A) = 8BH= 1000 1011B (después) • Las instrucciones de Rotación RLC A y RRC A desplazan el contenido del acumulador implicando al bit de acarreo. C ß B7 ßACCà B0 • La instrucción SWAP A intercambia los nibbles en el acumulador. Generalmente se utiliza en las manipulaciones de números en BCD. Ejemplo: (A) = 3H = 0000 0011B (antes de la operación) SWAP A Aß 0011 0000 (después) M.C. Eduardo Sánchez Arellano. - Página 41-
  42. 42. EJEMPLO 1.3 LECTURA Y ESCRITURA EN EL MISMO PUERTO Este ejercicio muestra cómo se puede realizar la operación de lectura y escritura por el mismo Puerto P0. Para ello dividimos el Puerto P0 en dos nibbles, el nibbles bajo (P0.0 a P0.3) leerá la información que se sacará por el nibbles alto (P0.4 a PO.7) (Figura 6.8). DEFSEG BIT4, ABSOLUTE SEG BIT4 ORG 0H START: MOV A,P0 SWAP A MOV P0,A AJMP START END En la línea 1, se hace la lectura del Puerto P0 y su contenido pasa al acumulador, En la línea 2, se intercambian los nibbles. En la línea 3, el contenido del acumulador se carga en el puerto P0, con lo que la lectura del nibbles bajo pasará al nivel alto del puerto P0, y viceversa. La línea 4 es un salto incondicional al comienzo del programa. INSTRUCCIONES DE TRANSFERENCIA DE DATOS Se consideran tres modalidades, según la transferencia se realice sobre: M.C. Eduardo Sánchez Arellano. - Página 42-
  43. 43. • La RAM interna. • La RAM externa. • La memoria de programa para el tratamiento de tablas. 4.7.1. Movimiento de datos sobre la RAM interna En la tabla 4.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de los espacios de memoria RAM interna, considerando los distintos direccionamiento para cada una de las instrucciones Tabla 4.4 Modos de direc. Tiempo de Nemónico Operación Dir Ind Reg Imm ejecución (µs) MOV A,<src> A=<src> X X X X 1 MOV <dest>, A <dest> = A X X X 1 MOV <dest>, <src> <dest> = <src> X X X X 2 MOV DPTR, #data 16 DPTR= 16-bit immediate constant. X 2 PUSH <src> INC SP : MOV “@SP”, <src> X 2 POP <dest> MOV <dest>, “@SP” :DEC SP X 2 XCH A,<byte> ACC and <byte> exchange data X X X 1 XCHD A, @Ri ACC and @ Ri exachange low nibbles X 1 No son afectados los flags. X = Sí =No • La instrucción MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM interna o el espacio de localización del SRF (referencia Figura 2.8) Este tipo de instrucción permite la transferencia sin el concurso del acumulador. <dest> = <destino> <src> = <fuente> Ejemplo: Antes de ejecutar la instrucción: (3A)= 35H : (3D) = 78H MOV 3AH, 3DH Después de ejecutarla: (3A)= 78H : (3D) = 78H • La instrucción MOV DPTR.# data 16 bits, permite transferir datos de 16 bits para inicializar el DPTR (Data pointer = puntero de datos) en el tratamiento de tablas en la memoria de programas o para acceder a los datos de la memoria externa. M.C. Eduardo Sánchez Arellano. - Página 43-
  44. 44. • La instrucción PUSH <src> actúa incrementando el SP (stack pointer = puntero de la pila) y copiando el dato dentro de la pila. La instrucción POP <dest> actúa decrementando el SP y reponiendo el dato en su registro. La pila está situada dentro de la RAM interna, por defecto en el banco de registros 1 (véase figura 2.11), pero puede posicionarse en el área SCRATCH PAD, como se ha indicado en el capítulo anterior. En resumen, éstas son las operaciones que realiza la unidad de control del microcontrolador. PUSH <src> POP <dest> • (SP) ß (SP) +1 <dest> ß ((SP)) • ((SP)) ß <src> (SP) ß (SP) – 1 • La instrucción XCH A,<bite>, intercambia los datos del acumulador y del byte direccionando. La instrucción XCHD A,@Ri es similar a la anterior, pero sólo implica en el intercambio el nibble bajo; es una instrucción especializada en la manipulación de datos en el código BCD. Ejemplos: Antes de ejecutar la instrucción: (A)= 37H y (2D) = 23H XCH A, 2DH Después de ejecutarla: (A) = 23H y (2D) = 37H Antes de ejecutar la instrucción: XCHD A, @R0 (R0) = 2DH = 37H y (A) = 23H Después de ejecutarla: (A) = 27H y (2D) = 33H INSTRUCCIONES BOOLEANAS La familia de microcontroladores 51 y concretamente los microcontroladores 8052/8051 tienen un procesador booleano incluido en el chip. Estos microcontroladores poseen dos áreas que permiten el direccionamiento <bit a bit>: Una corresponde al segmento de RAM interna de dirección comprendida entre la posmem 20 a 2FH, en total 128 bits (figura 2.10), y la otra corresponde a los registros marcados con asterisco en el area de SFR. M.C. Eduardo Sánchez Arellano. - Página 44-
  45. 45. El conjunto de instrucciones que permiten este tipo de procesos, tan interesante para las aplicaciones industriales, se encuentran relacionado en la siguiente tabla Nemónico Operación Tiempo de ejecución (us) C OV AC ANL C, Bit C = C . AND. Bit 2 X ANL C./bit C= C. AND. NOT . BIT 2 X ORL C.bit C=C .OR.bit 2 X ORL C./bit C=C .OR..NOT.bit 2 X MOV C.bit C = bit 1 X MOV bit.C bit = C 2 X CLR C C=0 1 0 CLR bit bit = 0 1 SETB C C=1 1 1 SETB bit Bit = 1 1 CPL C C = .NOT.C 1 X CPL bit Bit = .NOT. bit 1 JC rel Jump jf C = 1 2 JNC rel Jump if C =0 2 JB bit. rel Jump if bit = 1 2 JNB bit. rel Jump if bit = 0 2 JBC bit. rel Jump if bit =1; CLR BIT 2 Tabla 4.8 X =SI: = No Las instrucciones que aparecen en las tablas son: MOVE, SET, CLEAR, NOT, OR y AND. Se observa cómo en casi todas las instrucciones se hace referencia al flag Carry (C). Se podría decir que cumple todas las características que tiene el acumulador en el procesamiento de palabras. El flag Carry se direcciona directamente dentro de la palabra de estado PSW, en la posición <<bit7>>. B7 b5 b0 C F0 Todos los bits del PSW son direccionables bit a bit, como todos los registros señalados del SRF. Es importante reseñar la presencia del flag F0 (b5 del PSW) de propósito general, disponible como flag del usuario. ¿Por qué no utilizarlo como indicador, en las operaciones aritméticas de signo (flag N)? Comentario aparte exige el tratamiento de las instrucciones booleanas de salto. Hay instrucciones que producen el salto cuando el bit direccionado está en estado <<1>>, como son las instrucciones JC,JB y JBC; también están las que producen el salto cuando el bit direccionado está puesto <<0>>, como son las instrucciones JNC, y JNB. JBC Produce el M.C. Eduardo Sánchez Arellano. - Página 45-
  46. 46. salto si el bit direccionado es <<1>> y pone a <<0>>este bit, siendo la única instrucción que detecta y pone a <<0>> el bit direccionado. Secuencias de operaciones: JC rel JNC rel (PC)ß (PC) +2 (PC)ß (PC) + 2 Si (C) = 1 Si (C) = 0 Entonces entonces (PC) ß (PC) + rel (PC) ß (PC) + rel JB bit, rel JNB bit, rel JBC bit, rel --------------------- ---------------------- ---------------------- (PC) ß (PC) + 3 (PC) ß (PC) + 3; (PC)ß (PC) + 3; Si (bit) = 1 Si (bit) = 0 Si (bit) = 1 Entonces Entonces Entonces (PC) ß (PC) + rel (PC) ß (PC) + rel (bit)ß 0 (PC)ß (PC) + rel Ejemplos: A) poner el Carry a set (1) si el bit0 del puerto 1 es <<1>> (P1,0 = 1), el bit7 del acumulador es <<1>> (A.7=1) y el flag OV = 0. • Programa: MOV C, P1. 0 ; Carga el Carry (c) con el bit0 del puerto 1. ; Cß (P1.0) ANL C, A . 7 ; Operación AND con el Carry (C ) y el bit7 ; del acumulador, es decir: Cß ( C ). AND .(A.7) ANL C,/OV ; Operación AND con el Carry ( C ) y el valor ; complementado del flag de overflow (OV) ; del registro PSW. C ß (C) .AND./NOT.OV B) Realizar la operación EXOR bit a bit, entre el b0 del puerto 0 (P0.0) y el b1 del puerto 1 (p1.1). depositando el resultado en el b7 del puerto2. Para realizar la operación EXOR, el usuario debe crear un algoritmo, puesto que la instrucción EXOR no la tienen implementada los microcontroladores de la familia 51. La operación a realizarse es: P2.7 ß P0.0 .EXOR. P1.1 • Programa: MOV C,P0.0 ;Carga el bit0 del puerto P0 en el flag Carry ; C ß (P0.0) M.C. Eduardo Sánchez Arellano. - Página 46-
  47. 47. JNB P1. 1, SALTA ;Si p1.1 =0. C contiene el resultado ; correcto y entonces salta; pero si P1.1=1 ;el complemento de C es el resultado correcto. CPL C ; Complementa C. SALTA: MOV P7.2,C ;El contenido del Carry (C) lo almacena en ; el bit7 del puerto P2. ;P7.2 ß (C) La dirección del destino del salto, en la memoria de programa, viene especificada, cuando el programa está escrito en Ensamblador, por una etiqueta. Así, en el ejemplo anterior, la etiqueta (SALTA:) Indica el origen y el destino del salto. Una vez ensamblado el programa del usuario, la dirección del salto se convierte en un número (OFF-SET) del tamaño de un byte, que representa una dirección relativa, representada en el sistema de numeración binario en complemento a dos. El rango del salto (operando de la instrucción) puede estar comprendido entre –128 y127 bytes. Si él operando es positivo, el salto es adelante (direcciones crecientes de memoria); si en negativo, el salto es atrás (direcciones decrecientes de memoria). DEFSEG ROTAR,ABSOLUTE SEG ROTA ORG 0 MOV A,#00H ;Limpia Acumulador SETB C SALTO1: RLC A MOV P0,A CALL RETARDO JNB ACC.7,SALTO1 SALTO2: RRC A MOV P0,A CALL RETARDO JNB ACC.0, SALTO2 JMP SALTO1 NOP RETARDO: MOV R1,#40H SALTO3: MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO3 RET 4.4 INSTRUCCIONES DE SALTO Un programa es una secuencia de instrucciones que el contador de programa (PC) rompe en función de: a) Haber concluido la secuencia de instrucciones y salta a otra o recomienza la misma. Este es un salto Incondicional. b) La palabra de estado del programa (PSW) o del estado de uno o más bits de la entrada/salida de periféricos. Este es un salto condicional. 4.4.1 instrucciones de salto incondicional M.C. Eduardo Sánchez Arellano. - Página 47-
  48. 48. La tabla 3.9 muestra la lista resumida de los saltos incondicionales. Aunque sólo figure la instrucción <<JMP addr>>, de hecho hay tres tipos: SJMP. LMP, y AJMP, que difieren en el formato de la dirección de salto. Tabla 3.9 Nemónico Operación Tiempo de ejecución (us) JMP addr Jump to addr 2 JMP @A + DPTR Jump to A + DPTR 2 CALL addr Call subroutine at addr 2 RET Return from subroutine 2 RETI Return from interrupt 2 NOP No operation 1 No son afectados las banderas. SJMP rel : (short jump). La dirección destino del salto viene dada por un <<offset relativo>>, igual que en las instrucciones de salto booleanas. La instrucción tiene dos bytes, correspondientes al código de operación y al byte de offset relativo. El rango del salto está limitado a –128 y + 127 byte relativos. al primer byte siguiente a la instrucción de salto. (PC) ß(PC) +2 CPC) ß(PC) + LJMP addr 16: ( Long jump). La dirección destino del salto viene dad por una constante de 16 bits. La instrucción está formada por 3 bytes, 1 byte para el código de operación y 2 para la dirección del salto. Por tanto, la dirección de destino está ubicada dentro del área de los 64K de la memoria de programa. PC ß addr 16 AJMP addr 11: (Absolute jump). La dirección destino del salto viene dada por una constante de 11 bits. La instrucción tiene 2 bytes, uno para el código de operación que también contiene en sí misma 3 de los 11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la dirección de destino. El código de la instrucción y el operando es : a10 a9 a8 0 0 0 0 1 A7 a6 a5 a4 A3 a2 a1 a0 CODIGO DE OPERACIÓN OPERANDO Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 K bytes referenciado respecto a la siguiente instrucción a la del salto. PC ß (PC) + 2 (PC 10-0) ß dirección de la página M.C. Eduardo Sánchez Arellano. - Página 48-
  49. 49. En cualquier caso, el programador especifica la dirección de destino, bien como una etiqueta o como una dirección constante de 16 bits, en el programa escrito en lenguaje ensamblador. Este se encarga de darle el destino. En el formato correcto, según el código de operación. Si este formato no soporta la distancia del salto. Aparecerá un mensaje como éste << Destination out of range>>. Que nos previene del error. JMP @A+DPTR: Se trata de una instrucción de salto indirecto, suma el byte contenido en el acumulador con los 16 bits del puntero de datos (DPTR) y carga el resultado de la suma en el contador de programa (PC). Esta será la dirección para la subsiguiente búsqueda de la instrucción. Ejemplo: Se trata de establecer cinco caminos de ramificación del programa, dependiendo de que el acumulador tome valores comprendidos entre 0 y 4. • Programa: MOV DPTR,# TABLA_ SALTO ;Se carga el DPTR con la dirección de la tabla de saltos. MOV A, INDI ; Se carga el acumulador con la variable índice (INDI). ; 0 <INDI< 4. RL A ;El valor cargado sufre un desplazamiento de un bit ;a la izquierda (multiplica por 2 el contenido del acumulador). JMP @A +DPTR ;Se efectúa la suma: PC ß (A) + (DPTR) ; y se produce el salto a otra instrucción ; de salto que a su vez saltará al ; subprograma a ejecutar. ---------------------------------- INDI: AJMP SALTO0 AJMP SALTO1 AJMP SALTO2 AJMP SALTO3 AJMP SALTO4 La instrucción RL A convierte la variable INDI (valor comprendido entre 0 y 4) en un número par de rango entre 0 y 8 para salvar, en el salto, los datos bytes de longitud que tiene cada entrada de salto, AJMP SALTO0,AJMP SALTO 1... _ Siguiendo con las instrucciones incondicionales, de la tabla 4.3 ésta muestra la instrucción CALL addr que tiene 2 formatos, LCALL y ACALL, que difiere en la forma en la que la CPU implementa la dirección donde se encuentra la subrutina. Nota: CALL es el nombre genérico con que el programador se refiere a estas instrucciones de salto, y que se traducen en una <<llamada>> (generalmente suelen producirse varias M.C. Eduardo Sánchez Arellano. - Página 49-
  50. 50. llamadas desde el programa principal. De ahí su interés por el ahorro de memoria para la máquina y de trabajo para el progamador) a un subprograma (subrutina). Que en sí mismo tiene su identidad para realizar una tarea definida. LCALL addr 16 : utiliza un formato de 16 bits para direccionar la subrutina y esa área de direccionamiento es el máximo de 64 Kbytes de la memoria de programas. Secuencia de operaciones: • (PC)ß (PC) + 3 • (SP)ß (SP) + 1 • ((SP))ß (PC 7-0 ) • (SP)ß (SP) + 1 • ((SP))ß (PC15-8 ) • (PC)ß addr15-0 ACALL addr 11: utiliza un formato de direccionamiento de 11 bits, por lo que la subrutina debe estar dentro del área de los 2 Kbytes, a partir de la siguiente instrucción. Secuencia de operaciones: • (PC)ß (PC) +2 • (SP)ß (SP) + 1 • ((SP))ß (PC7-0 ) • (SP)ß (SP) + 1 • ((SP))ß (PC15-8) • (PC10-0)ß dirección de la página Lo mismo que se indicó en los saltos incondicionales, el programador cuando trabaja en ensamblador sólo debe preocuparse de colocar l etiqueta; el programador ensamblador a determinerá la longitud del salto y el formato que debe dar al código de instrucción según la longitud del salto. RET: Las subrutinas terminan su ejecución con la instrucción RET, que es la instrucción que indica la vuelta al programa principal, justo en la dirección de memoria de la instrucción siguiente a la instrucción CALL. Secuencia de operaciones: • (PC15-8)ß ((SP)) • (SP)ß (SP) – 1 • (PC7-0)ß ((SP)) • (SP)ß (SP) – 1 RETI: Utilizada para retornar de las rutinas del servicio de interrupciones. Las interrupciones se estudian de forma especial en el capitulo 10. M.C. Eduardo Sánchez Arellano. - Página 50-
  51. 51. Secuencias de operaciones: • (PC15-8)ß ((SP)) • (SP)ß (SP) – 1 • (PC7-0)ß ((SP)) • (SP)ß (SP) – 1 4.2.2 INSTRUCCIONES DE SALTO CONDICIONAL La tabla 3.10 muestra la lista de las instrucciones de salto condicional. Estas instrucciones son las que van a permitir al microcontrolador tomar decisiones (siguiendo secuencialmente una parte del programa u otra) ante una propuesta binaria. Que en el lenguaje coloquial se contesta c on una afirmación o negación 1 propuesta de bifurcación de la secuencia del programa se halla implícita dentro del código de operación y es el operando el que señala la dirección del salto en el formato de <<offset relativo>>, por lo que la distancia del salto está limitada a –128 y +127 bytes referida a la instrucción siguiente a la del salto condicional. Trabajando con el programa ensamblador es suficiente señalar con una etiqueta la dirección del salto o con una constante de 16 bits. Nemónico Operación Modos de Tiempo de Flag afectados direccionamiento Dir Ind Reg Imm Ejecución µs C OV AC JZ rel Jump if A=0 Accumulator only 2 JNZ rel Jump if A<>0 Accumulator only 2 DJNZ <byte>,rel Decrement and jump if not X X 2 zero CJNE A,<byte>,rel Jump if A<> <byte> X X 2 X CJNE <byte>,#data,rel Jump if <byte><.> #data X X 2 X X =Si =No Nota: en la tabla 3.10 se señalara como posible operando <byte>, pudiendo ser <byte>: a) El acumulador. b) Los registros R0 a R7 con direccionamiento directo. Los registros R0 y R1 con direccionamiento indirecto. JZ y JNZ: Salta si es cero y salta si no es cero. Para determinar si cumple las condiciones de las instrucciones JZ, y JNZ, la CPU no pasa revista al registro de estado como ocurre en otros M.C. Eduardo Sánchez Arellano. - Página 51-
  52. 52. micros, sino que directamente el registro acumulador, pues este microcontrolador no tiene << flag cero >> en el registro de estado. Secuencias de operaciones: JZ rel JNZ rel • (PC)ß (PC) + 2 (PC)ß (PC) + 2 • Si (A) = 0 Si (A)<> 0 entonces entonces (PC)ß (PC) + rel (PC)ß (PC) + rel DJNZ: Decrementa y salta si no es cero. Esta instrucción está especializada en lazos de control. Para que ejecute un lazo n veces se carga un <<contador>> con n y, cada vez que se ejecute el contenido del lazo, el contador decrementa una unidad, saliendo del lazo cuando el contenido del contador sea cero. • (PC)ß(PC) + 2 • (<byte>) ß (<byte>) – 1 • Si (<byte>)> 0 o (<byte>)< 0 Entonces (PC)ß (PC) + rel Ejemlpo: Ejecutar el lazo 10 veces. MOV CONTADOR, # 10 LAZO: (comienzo del lazo) ------------------------ àInstruciones que se van a ejecutar mientras -------------------------- CONTADOR sea distinto de <<cero>>. ( fin del lazo) DJNZ CONTADOR , LAZO CJNE: Compara y salta, si el resultado de la comparación no es igual. En este caso hay dos formatos, según la comparación se haga con el acumulador o con un operando tipo <byte>, que puede ser: • Con direccionamiento indirecto ( registros R0 y R1). • Con direccionamiento directo ( registros R0 y R7 ) CASO 1.MODELO àCJNE A,<byte>, salto relativo Secuencia de operaciones: M.C. Eduardo Sánchez Arellano. - Página 52-
  53. 53. • (PC)ß (PC) + 3 • Si (A) <> (<byte>) Entonces (PC)ß (PC) + rel Si (A) < (<byte>) Entonces (C) ß 1 sino (C)ß 0 Ejemplo: Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del periférico a través del puerto 0 (P0), se corresponda con el valor de la posmen 7FH. MOV A, P0 LAZO: ---------- ---------- ---------- ---------- CJNE A,7F, LAZO CASO 2. MODELO à CJNE <byte>, # dato, salto relativo Otra aplicación de estas instrucciones es la comp aración <<mayor que>> y <<menor que>>. Si de los dos bytes del campo de operandos el primero es menor que el segundo, entonces e <<flag CARRY>> del PSW se pone a <<uno>>. Si el primero byte es mayor o igual que el segundo, entonces el <<flag CARRY>> es <<c ero>>. Estos y otros aspectos están aclarados en el Apéndice A. Secuencia de operaciones: Según se trate de direccionamiento indirecto (registros R0 y R1 (@Ri) o direccionamiento directo (registro R0 y R7 (Rn)) es: CJNE @Ri,# data, rel CJNE Rn, # data, del • (PC)ß (PC) + 3 • (PC)ß (PC) + 3 • Si ((Ri)) <>data • Si (Rn)<>data Entonces Entonces (PC)ß (PC) + rel (PC)ß (PC) + rel • Si ((Ri)) < data • Si (Rn) < data Entonces Entonces (C)ß 1 (C)ß 1 Si no Si no (C)ß 0 (C)ß 0 M.C. Eduardo Sánchez Arellano. - Página 53-

×