SlideShare ist ein Scribd-Unternehmen logo
1 von 102
Downloaden Sie, um offline zu lesen
Curso de Microprocesadores y
    Microcontroladores.
          Unidad 1




          Contenido:
          1 Portada.
          2 Temario.
          3 Manual del Curso.
          4 Anexos
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-
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-
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-
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-
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-
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-
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-
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-
(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-
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-
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-
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-
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-
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-
DIAGRAMA GENERAL DE LOS MICROCONTROLADORES 8031-8051-89C51-8751




                              Figura 1.10




                              Figura 1.11



                       M.C. Eduardo Sánchez Arellano.
                               - Página 16-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
§     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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
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-
•   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-
•    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-
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-
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-
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-
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-
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-
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-
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-
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-
•   (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-
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1

Weitere ähnliche Inhalte

Was ist angesagt?

Programming with PIC microcontroller
Programming with PIC microcontroller Programming with PIC microcontroller
Programming with PIC microcontroller Raghav Shetty
 
Verilog code for 16-bit RISC processor
Verilog code for 16-bit RISC processor Verilog code for 16-bit RISC processor
Verilog code for 16-bit RISC processor Van Loi Le
 
Arquitectura cisc
Arquitectura ciscArquitectura cisc
Arquitectura ciscSuarezJhon
 
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticos
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticosMicrocontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticos
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticosSANTIAGO PABLO ALBERTO
 
Interfacing methods of microcontroller
Interfacing methods of microcontrollerInterfacing methods of microcontroller
Interfacing methods of microcontrollerDiwaker Pant
 
Arqutecturas harvrd, von newman y risc
Arqutecturas harvrd, von newman y riscArqutecturas harvrd, von newman y risc
Arqutecturas harvrd, von newman y riscesteabn1426
 
RISC-V Introduction
RISC-V IntroductionRISC-V Introduction
RISC-V IntroductionYi-Hsiu Hsu
 
Memorias de un plc y su clasificación
Memorias de un plc y su clasificaciónMemorias de un plc y su clasificación
Memorias de un plc y su clasificaciónDaniel
 
Circuitos combinacionales
Circuitos combinacionalesCircuitos combinacionales
Circuitos combinacionalesJonathan P C
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
Evaluacion ensamble pc
Evaluacion ensamble pcEvaluacion ensamble pc
Evaluacion ensamble pclinajimenez30
 

Was ist angesagt? (20)

Introducción
IntroducciónIntroducción
Introducción
 
Risc Cisc
Risc  CiscRisc  Cisc
Risc Cisc
 
Programming with PIC microcontroller
Programming with PIC microcontroller Programming with PIC microcontroller
Programming with PIC microcontroller
 
Verilog code for 16-bit RISC processor
Verilog code for 16-bit RISC processor Verilog code for 16-bit RISC processor
Verilog code for 16-bit RISC processor
 
Arquitectura cisc
Arquitectura ciscArquitectura cisc
Arquitectura cisc
 
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticos
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticosMicrocontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticos
Microcontroladores: Microcontroladores PIC fundamentos y aplicaciones didácticos
 
Interfaz java y arduino
Interfaz java y arduinoInterfaz java y arduino
Interfaz java y arduino
 
RISC-V: The Open Era of Computing
RISC-V: The Open Era of ComputingRISC-V: The Open Era of Computing
RISC-V: The Open Era of Computing
 
Interfacing methods of microcontroller
Interfacing methods of microcontrollerInterfacing methods of microcontroller
Interfacing methods of microcontroller
 
Arqutecturas harvrd, von newman y risc
Arqutecturas harvrd, von newman y riscArqutecturas harvrd, von newman y risc
Arqutecturas harvrd, von newman y risc
 
Introduction to Embedded Systems a Practical Approach
Introduction to Embedded Systems a Practical ApproachIntroduction to Embedded Systems a Practical Approach
Introduction to Embedded Systems a Practical Approach
 
Microprocesadores Vs microcontroladores
Microprocesadores Vs microcontroladores Microprocesadores Vs microcontroladores
Microprocesadores Vs microcontroladores
 
Computadores RISC
Computadores RISCComputadores RISC
Computadores RISC
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Processor powerpoint 2
Processor powerpoint 2Processor powerpoint 2
Processor powerpoint 2
 
RISC-V Introduction
RISC-V IntroductionRISC-V Introduction
RISC-V Introduction
 
Memorias de un plc y su clasificación
Memorias de un plc y su clasificaciónMemorias de un plc y su clasificación
Memorias de un plc y su clasificación
 
Circuitos combinacionales
Circuitos combinacionalesCircuitos combinacionales
Circuitos combinacionales
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Evaluacion ensamble pc
Evaluacion ensamble pcEvaluacion ensamble pc
Evaluacion ensamble pc
 

Andere mochten auch

El Microprocesador Y Su Arquitectura
El Microprocesador Y Su ArquitecturaEl Microprocesador Y Su Arquitectura
El Microprocesador Y Su Arquitecturajadenjgct
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICsguest0ce7f8
 
Ensamblador pic16f84a
Ensamblador pic16f84aEnsamblador pic16f84a
Ensamblador pic16f84aRoberto Mora
 
PIC MICROCONTROLADORES
PIC MICROCONTROLADORESPIC MICROCONTROLADORES
PIC MICROCONTROLADORESada_laura
 
ARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORRAFAEL HONORES VERA
 
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Miguel Angel Corona Lòpez
 
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87x
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87xMicrocontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87x
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87xMiguel Angel Corona Lòpez
 
Microprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnMicroprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnddarioooo
 
3 programacion
3 programacion3 programacion
3 programacionsimon28c
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICsguest0ce7f8
 
Ud1 7 puertos_es_pic
Ud1 7 puertos_es_picUd1 7 puertos_es_pic
Ud1 7 puertos_es_picarnadillo
 
Presentación curso 2014-2015 versión 2
Presentación curso 2014-2015 versión 2Presentación curso 2014-2015 versión 2
Presentación curso 2014-2015 versión 2saramoralesgil
 
presentacion curso microprocesadores
presentacion curso microprocesadorespresentacion curso microprocesadores
presentacion curso microprocesadoresJuan Alvarez
 
Electronica aplicada primera presentacion
Electronica aplicada primera presentacionElectronica aplicada primera presentacion
Electronica aplicada primera presentacionUNACH
 

Andere mochten auch (20)

El Microprocesador Y Su Arquitectura
El Microprocesador Y Su ArquitecturaEl Microprocesador Y Su Arquitectura
El Microprocesador Y Su Arquitectura
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICs
 
Cpu12 Reference Manual
Cpu12 Reference ManualCpu12 Reference Manual
Cpu12 Reference Manual
 
Ensamblador pic16f84a
Ensamblador pic16f84aEnsamblador pic16f84a
Ensamblador pic16f84a
 
PIC MICROCONTROLADORES
PIC MICROCONTROLADORESPIC MICROCONTROLADORES
PIC MICROCONTROLADORES
 
ARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADOR
 
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
 
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87x
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87xMicrocontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87x
Microcontroladores pic, diseño práctico de aplicaciones 2da parte 16 f87x
 
Microprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itnMicroprocesadores y microcontroladores_itn
Microprocesadores y microcontroladores_itn
 
Ejercicios t1
Ejercicios t1Ejercicios t1
Ejercicios t1
 
3 programacion
3 programacion3 programacion
3 programacion
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICs
 
Ud1 7 puertos_es_pic
Ud1 7 puertos_es_picUd1 7 puertos_es_pic
Ud1 7 puertos_es_pic
 
Apuntes del pic 16f84
Apuntes del pic 16f84Apuntes del pic 16f84
Apuntes del pic 16f84
 
Presentación curso 2014-2015 versión 2
Presentación curso 2014-2015 versión 2Presentación curso 2014-2015 versión 2
Presentación curso 2014-2015 versión 2
 
P03.Programación en c para pics
P03.Programación en c para picsP03.Programación en c para pics
P03.Programación en c para pics
 
presentacion curso microprocesadores
presentacion curso microprocesadorespresentacion curso microprocesadores
presentacion curso microprocesadores
 
Presentacion curso intel pasto lydia
Presentacion curso intel pasto lydiaPresentacion curso intel pasto lydia
Presentacion curso intel pasto lydia
 
Arquitectura del procesadador
Arquitectura del procesadadorArquitectura del procesadador
Arquitectura del procesadador
 
Electronica aplicada primera presentacion
Electronica aplicada primera presentacionElectronica aplicada primera presentacion
Electronica aplicada primera presentacion
 

Ähnlich wie Curso microprocesadores y_microcontroladores_unidad_1

Historia de microprocesadores
Historia de microprocesadoresHistoria de microprocesadores
Historia de microprocesadoresMary Diaz
 
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.Juan Anaya
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesadorander1692
 
Sesion 1 atmega8
Sesion 1 atmega8Sesion 1 atmega8
Sesion 1 atmega8davidepn2
 
1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladoresOmar Felis
 
1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladoresCataldo Asaro B
 
Monroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadoraMonroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadorafenixgamer
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Rubén Loredo
 
microprocesadores evolucion a lo largo de los años
microprocesadores evolucion a lo largo de los añosmicroprocesadores evolucion a lo largo de los años
microprocesadores evolucion a lo largo de los añosBrianAlva3
 
Microcontroladores
MicrocontroladoresMicrocontroladores
MicrocontroladoresJuan Anaya
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-pptCarlos Martir
 

Ähnlich wie Curso microprocesadores y_microcontroladores_unidad_1 (20)

Historia de microprocesadores
Historia de microprocesadoresHistoria de microprocesadores
Historia de microprocesadores
 
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.
HISTORIA Y ORGANIZACIÓN BÁSICA DEL MICROCONTROLADOR.
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Procesadores
ProcesadoresProcesadores
Procesadores
 
Sesion 1 atmega8
Sesion 1 atmega8Sesion 1 atmega8
Sesion 1 atmega8
 
1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores
 
1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores1 introduccion a_los_ucontroladores
1 introduccion a_los_ucontroladores
 
Monroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadoraMonroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadora
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51
 
microprocesadores evolucion a lo largo de los años
microprocesadores evolucion a lo largo de los añosmicroprocesadores evolucion a lo largo de los años
microprocesadores evolucion a lo largo de los años
 
Ensamblaje de Pcs-Microprocesador
Ensamblaje de Pcs-MicroprocesadorEnsamblaje de Pcs-Microprocesador
Ensamblaje de Pcs-Microprocesador
 
Microcontroladores
MicrocontroladoresMicrocontroladores
Microcontroladores
 
Omar santillan microprocesador
Omar santillan microprocesadorOmar santillan microprocesador
Omar santillan microprocesador
 
MICROCONTROLADORES.ppt
MICROCONTROLADORES.pptMICROCONTROLADORES.ppt
MICROCONTROLADORES.ppt
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt
 

Kürzlich hochgeladen

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 

Kürzlich hochgeladen (13)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 

Curso microprocesadores y_microcontroladores_unidad_1

  • 1. Curso de Microprocesadores y Microcontroladores. Unidad 1 Contenido: 1 Portada. 2 Temario. 3 Manual del Curso. 4 Anexos
  • 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. 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. 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. 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. 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. 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. 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. 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. (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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. § 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. (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-