You are on page 1of 12

El Microcontrolador 8051 CAP 3

_________________________________________________________________________
ITMAR Mazatln 24 Ing. Rufino J. Domnguez Arellano
CAPITULO 3


Programacin de los Microcontroladores 8052/8051 (I)

3.1. INTRODUCCION

Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones.
Estas instrucciones estn optimizadas para el control de aplicaciones en 8 bits.
Estn provistas de una buena variedad de modos de direccionamiento para
acceder a la memoria RAM de datos internos del microcontrolador, facilitando
operaciones del tipo byte sobre una pequea estructura de datos. Permiten la
manipulacin directa de control y procesamiento booleano de estructuras de datos
del tamafio de un bit.

En esta breve introduccin se estudiarn los modos de direccionamiento y el juego
de instrucciones agrupadas por especialidades de esta manera:

Instrucciones aritmticas.
Instrucciones lgicas.
Instrucciones para la transferencia de datos en:
a) RAM interna.
b) RAM externa.
Instrucciones para el tratamiento de tablas.
Instrucciones booleanas.
Instrucciones de salto.

3.2. MODOS DE DIRECCIONAMIENTO

Direccionamiento directo

El operando se especifica en la instruccin por un campo de direccin de 8 bits.
Slo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden
direccionar de esta forma.

Ejemplo:

ADD A,3BH ; es decir, suma (ADD) el contenido del acumulador con el contenido
de la posicin de memoria (38):
A (A) + (38)


Nota: Un registro o nmero entre parntesis se refiere al contenido. Asi:
(A) es el contenido del acumulador.
(38) es el contenido de la posicin de memoria 38.
El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 25 Ing. Rufino J. Domnguez Arellano
Direccionamiento indirecto

La instruccin especifica un registro que contiene la direccin del operando. Tanto
la memoria RAM interna (256 bytes/128 bytes) como la externa se pueden
direccionar indirectamente.

Los registros para direccionar sobre el mapa de 8 bits pueden ser el R0 y R1 del
banco de registros seleccionado, o el Stack Pointer. El registro para direccionar
sobre 16 bits slo puede ser el Puntero de Datos (Data Pointer = DPTR).

Ejemplo:

ADD A,@R0 ; As, si (RO)=38H la operacin ser:
A (A) + (38)
Igual que en el ejemplo anterior-
(@) es el identificador del direccionamiento indirecto.


Direccionamiento por registro

Los Microcontroladores 8052/8051, como se ha visto, contiene cuatro bancos de
registros seleccionados por los bits 3 y 4 del PSW, y cada banco de registros tiene
ocho registros del R0 al R7 (vase Apartado 2.5). El propio cdigo de operacin
de la instruccin especifica con qu registro se opera; es decir, cuando la
instruccin es ejecutada se accede a uno de los 8 registros del banco
seleccionado.


Ejemplos:

MOV Rn,A ; operacin: (Rn) (A)

MOV Rn, #dato ; operacin: (Rn) #dato


Direccionamiento implcito

Algunas instrucciones especifican, implcitamente, el registro sobre el que van a
operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el
operando porque est implcito en el cdigo de operacin.

Ejemplos:
INC A ; Incrementa el contenido del acumulador: A (A) + 1


INC DPTR ; Incrementa puntero de datos: DPTR (DPTR) + 1


El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 26 Ing. Rufino J. Domnguez Arellano
Direccionamiento inmediato

Al cdigo de operacin le sigue una constante en la memoria de programas.

Ejemplo:

MOV A, #255 ; Carga en el acumulador el nmero decimal 255. Generalmente se expresan ;
; en hexadecimal:
MOV A, #FFH
; o en binario:
MOV A, #11111111B


Direccionamiento indexado

Este direccionamiento slo es posible en la memoria de programas y slo permite
la lectura. Es utilizado para la lectura de tablas. Un registro base de 16 bits (el
DPTR o el contador de programa) apunta a la base de la tabla y el contenido del
acumulador es el offset que permite acceder a la lectura de esa posicin de la
tabla. Es decir, la direccin de la tabla que se va a acceder est formada por la
suma del acumulador y el puntero base.

Se puede utilizar otro tipo de direccionamiento indexado en las instrucciones de
salto. En este caso la direccin de destino del salto se calcula como la suma del
puntero base y el dato del acumulador.


3.3. CICLO DE INSTRUCCION

La ejecucin de un ciclo de instruccin comienza en el estado 1 del ciclo mquina,
cuando el cdigo de operacin es almacenado en el Registro de Instruccin. (Para
comprender este apartado tener a la vista la Figura 3.1 y la Tabla 4.5, Set de
Instrucciones.)

Como norma general, una instruccin requiere de uno q ms ciclos mquina, en
funcin de:

a) El cdigo de operacin

Por ejemplo, la instruccin INC A (Figura 3.1 A) tiene 1 byte de instruccin y
requiere 1 ciclo mquina, la instruccin INC DPTR, tambin, de 1 byte de
instruccin requiere de 2 ciclos mquina (Figura 3.1 C) y la instruccin MUL AB
requiere de 4 ciclos mquina para su total ejecucin y ocupa 1 byte en la memoria.

b) El nmero de bytes

El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 27 Ing. Rufino J. Domnguez Arellano
Por ejemplo, la instruccin MOV A, #data tiene 2 bytes de instruccin y
requiere de 1 ciclo mquina (Figura 3.1 B). En cambio la instruccin MOV direct, #
data al constar de 3 bytes necesita de 2 ciclos mquina. Esto no ocurre siempre,
es decir, a ms bytes ms ciclos mquina, como puede verse en la Figura 3.1 B
correspondiente a la instruccin MOV A, #data y en la Figura 3.1 D MOVX A,@Ri,
la primera instruccin tiene 2 bytes y la segunda slo 1. en cambio la primera
requiere 1 ciclo mquina y la segunda 2.

Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento
del nmero de bytes y ciclo de instruccin se ha editado la Tabla 4.5 con el set
completo de instrucciones. Cabe destacar, tambin, en la Figura 3.1, que en cada
ciclo mquina se producen 2 accesos a la memoria, el primero, si es comienzo de
ciclo de instruccin, siempre leer el cdigo de operacin, el segundo, que
normalmente se descarta, se utiliza para leer el segundo byte, operando de la
instruccin, como ocurre en la Figura 3.1 B.


3.4. TIPOS DE INSTRUCCIONES

El set de instrucciones del 8052/8051 se puede dividir segn las especialidades:

Instrucciones aritmticas.
Instrucciones lgicas.
Instrucciones de transferencia de datos.
Instrucciones booleanas
Instrucciones de salto.

Las instrucciones aritmticas, lgicas, de transferencia y de salto son comunes a
la mayora de microprocesadores. Los microcontroladores tienen un rea especial
de aplicacin, que es el rea del control de procesos; en este campo las
operaciones estn orientadas, muy a menudo, al bit. Los microcontroladores leen,
procesan, escriben e intercambian informacin 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, que, como ya hemos dicho, estn orientadas al bit>. Esta
particularidad, as como su inmunidad al ruido elctrico, le hacen valioso en el
mundo del control de procesos industriales



El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 28 Ing. Rufino J. Domnguez Arellano

3.5. INSTRUCIONES ARITMETICAS.

En la tabla 3.2, se muestra el men de las instrucciones aritmticas del 8051. Se
indican en la tabla los diferentes modos de direccionamiento que se pueden usar
en cada caso y los indicadores de estado que son afectados. Los tiempos de
ejecucin que se indican en la tabla estn evaluados sobre una frecuencia de relo
de 12 MHz.





El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 29 Ing. Rufino J. Domnguez Arellano



La instruccinb MUL AB multiplica el contenido del acumulador con el dato situado
en B y el producto, de 16 bits, aparece en los registros B:A (sobrescribe los
operandos)

La instruccin DIVAB divide el contenido del acumulador con el dato del registro B,
apareciendo el resultado en A (el cociente) y B ( el residuo).

3.6 INSTRUCCIONES LOGICAS.


La tabla 3.3 muestra la lista de operaciones lgicas, modos de direccionamiento
disponibles e indicadores de estado. Observe que en este grupo se incluyen las
instrucciones de rotacin a la izquierda y a la derecha.











El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 30 Ing. Rufino J. Domnguez Arellano



3.7. INSTRUCCIONES DE TRANSFERENCIA DE DATOS

Se consideran tres modalidades, segn la transferencia se realice sobre:
La RAM interna.
La RAM externa.
La memoria de programa para el tratamiento de tablas. .

3.7.1. Transferencia de datos sobre la RAM interna

En la Tabla 3.4 se muestra la tabla de instrucciones disponibles para mover datos
dentro de los espacios de memoria RAM interna, considerando los distintos
direccionamientos para cada una de las instrucciones.

La instruccin MOV <dest>, <src> permite transferir datos entre alguna de
las dos RAM interna o el espacio de localizacin del SFR (referencia Figura
2.8). Este tipo de instruccin permite la transferencia sin afectar el
acumulador.


El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 31 Ing. Rufino J. Domnguez Arellano



Ejemplo:

; Antes de ejecutar la instruccin:
; (3A) = 35H ; (3D) = 78H
MOV3AH,3DH ..
; Despues de ejecutarla:
; (3A) = 78H ; (3D) = 78H


La instruccin MOV DPTR, #data 16, permite transferir datos de 16 bits
para inicializar el DPTR (Data Poimer = puntero de datos) en el tratamiento
de tablas en la memoria de programas o para acceder a los datos de la
memoria externa.

La instruccin PUSH <src> acta incrementando el SP (Stack Pointer =
puntero de la pila) y copiando el dato dentro de la pila. La instruccin POP
<dest> acta 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 (vase Figura 2.11 ), pero puede posicionarse en el rea SCRA
TCH PAD, como se ha indicado en el captulo 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


El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 32 Ing. Rufino J. Domnguez Arellano
La instruccin XCH A, <byte>, intercambia los datos del acumulador y del
byte direccionado. La instruccin XCHD A, @Ri es similar a la anterior, pero
slo implica en el intercambio el nibble bajo; es una instruccin
especializada en la manipulacin de datos en el cdigo BCD.

Ejemplos:

; Antes de ejecutar la instruccin:
; (A) = 37H y (2D) = 23H
XCH A, 2DH
; Despus de ejecutarla:
; (A) = 23H y (2D) = 37H

; Antes de ejecutar la instruccin:
; (RO) = 2DH y (2D) = 37H y (A) = 23H
XCHD A, @R0
; Despus de ejecutarla:
; (A) =27H y (2D) = 33H

3.7.2. Transferencia de datos sobre la RAM externa

La Tabla 3.5 muestra la lista de instrucciones sobre transferencia de datos que
acceden a la memoria de datos. Slo se puede utilizar el direccionamiento
indirecto con este grupo de instrucciones.



Conviene observar que para este tipo de accesos siempre interviene el
acumulador como registro fuente o destino.


El usuario debe escoger entre el tipo de instruccin MOVX A, @Ri o MOVX @Ri,A
(siendo Ri, bien el registro R0 o R1 del banco de registros seleccionado),
direccionando con 8 bits, o bien utilizar un direccionamiento de 16 bits, usando el
El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 33 Ing. Rufino J. Domnguez Arellano
registro DPTR (MOVX A,@DPTR o MOVX @DPTR,A) y tener que sacrificar el
Puerto 2, cuando slo se va a utilizar un pequeo espacio de memoria RAM.
Existe una solucin intermedia que permite direccionar slo unos pocos Kbytes de
RAM externa, pero obteniendo algunas lneas hbiles del Puerto 2 como entradas
y salidas (E/S). Esta es la solucin que se mostr en la Figura 2.7 del Captulo 2.
De todas formas la solucin adecuada debe ser funcin de las caractersticas que
necesita la aplicacin, suponiendo, en principio, que la implementacin de la
misma sobre la eleccin de los Microcontroladores 8052/8051 sea la correcta.


Las lneas de control de lectura y escritura, RD y WR (pines 16 y 17), slo son
utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar
memoria RAM externa, es obvio que se ganarn unas lneas extras de E/S (Figura
2.7).



Ejemplo: Estudiar la secuencia de instrucciones.

MOVX A, @Rl
MOVX@RO,A



Nota: Este ejemplo se podra realizar con el Microcontrolador 8052, en el espacio de memoria
RAM interna Que se solapa con el rea SFR. Si se refiere al Microcontrolador 8051,
debera ser implementada esta operacin, obligatoriamente. en el espacio de memoria
externa. Naturalmente, si utiliza la memoria interna, las instrucciones que debe utilizar son
MOV A., @R1 y MOV @R0, A.


Qu sucedera si se tuvieran que implementar estas instrucciones en la zona de
memoria por encima de la direccin 2000H? Es decir:


El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 34 Ing. Rufino J. Domnguez Arellano
sustituida
85H 2085H
F3H 20F3H

Se llegara a la conclusin de que no se podran procesar estas instrucciones,
contando que los registros R0 y R1 no pueden direccionar por encima de la
posicin de memoria FFH. Pero aqu es donde entran en juego las instrucciones
MOVX con el DPTR como operando. La sustitucin, en el caso de tener que
operar en el espacio de memoria comprendido entre 0000H y FFFFH, sera:


sustituida
MOVX A, @Ri MOVX A, @DPTR
MOVX @Ri, A MOVX @DPTR, A

Recurdese que en la Tabla 3.4 hay una instruccin que es:

MOV DPTR, #data16

Con la que se podra acceder a todo el mapa de memoria.


3.7.3. Memoria de programas para el tratamiento de tablas


La Tabla 3.6 muestra las dos instrucciones disponibles para la lectura de tablas en
la memoria de programa (independientemente del algoritmo que pueda crear el
usuario con otras instrucciones). Obsrvese que las tablas slo pueden ser ledas
y no actualizadas. El nemnico es MOVC (Mover Constante).

Si la tabla accede a la memoria de programa externa, recordar que esta lectura es
autorizada por la seal de control PSEN (pin 29). Obsrvese la Figura 2.5 del
captulo anterior .



El Microcontrolador 8051 CAP 3
_________________________________________________________________________
ITMAR Mazatln 35 Ing. Rufino J. Domnguez Arellano

La primera instruccin de la tabla permite la lectura en tablas con accesos no
superiores a 256. El acceso deseado es cargado en el acumulador, y el Data
Pointer (DPTR) establece el puntero de comienzo de la tabla. La lectura es
cargada dentro del registro acumulador.

MOVC A, @A+DPTR ; A ((A) + (DPTR))

La segunda instruccin es similar a la primera, salvo que es el Pogram Counter
(PC) el que acta como indicador de la direccin base de la tabla.

; PC (PC) + 1
MOVC A, @A+PC ; A ((A) + (PC))


Se presenta esta instruccin dentro de una subrutina, estando la tabla de
informacin despus de la instruccin de retorno de la subrutina (RET).


Ejemplo: Se trata de demostrar el funcionamiento sobre una tabla de 4 datos.
A la izquierda aparece el mapa de memoria del programa.

You might also like