capitulo 3 programación de los microcontroladores 8052 ... · el set de instrucciones del...

12
El Microcontrolador 8051 CAP 3 _________________________________________________________________________ ITMAR Mazatlán 24 Ing. Rufino J. Domínguez Arellano CAPITULO 3 Programación de los Microcontroladores 8052/8051 (I) 3.1. INTRODUCCION Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones están optimizadas para el control de aplicaciones en 8 bits. Están 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 pequeña estructura de datos. Permiten la manipulación directa de control y procesamiento booleano de estructuras de datos del tamafio de un bit. En esta breve introducción se estudiarán los modos de direccionamiento y el juego de instrucciones agrupadas por especialidades de esta 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. 3.2. MODOS DE DIRECCIONAMIENTO Direccionamiento directo 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,3BH ; es decir, suma (ADD) el contenido del acumulador con el contenido de la posición de memoria (38): A (A) + (38) Nota: Un registro o número entre paréntesis se refiere al contenido. Asi: (A) es el contenido del acumulador. (38) es el contenido de la posición de memoria 38.

Upload: phamtram

Post on 03-Nov-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 24 Ing. Rufino J. Domínguez Arellano

CAPITULO 3 Programación de los Microcontroladores 8052/8051 (I)

3.1. INTRODUCCION Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones están optimizadas para el control de aplicaciones en 8 bits. Están 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 pequeña estructura de datos. Permiten la manipulación directa de control y procesamiento booleano de estructuras de datos del tamafio de un bit. En esta breve introducción se estudiarán los modos de direccionamiento y el juego de instrucciones agrupadas por especialidades de esta 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.

3.2. MODOS DE DIRECCIONAMIENTO

• Direccionamiento directo 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,3BH ; es decir, suma (ADD) el contenido del acumulador con el contenido de la posición de memoria (38):

A ← (A) + (38)

Nota: Un registro o número entre paréntesis se refiere al contenido. Asi: (A) es el contenido del acumulador. (38) es el contenido de la posición de memoria 38.

Page 2: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 25 Ing. Rufino J. Domínguez Arellano

• Direccionamiento indirecto La instrucción especifica un registro que contiene la dirección 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 sólo puede ser el Puntero de Datos (Data Pointer = DPTR). Ejemplo:

ADD A,@R0 ; Así, si (RO)=38H la operación 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 (véase Apartado 2.5). 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. Ejemplos:

MOV Rn,A ; operación: (Rn) ← (A) MOV Rn, #dato ; operación: (Rn) ← #dato

• Direccionamiento implícito Algunas instrucciones especifican, implícitamente, el registro sobre el que van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando porque está implícito en el código de operación. Ejemplos:

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

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

Page 3: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 26 Ing. Rufino J. Domínguez Arellano

• 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, #FFH ; o en binario:

MOV A, #11111111B

• 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 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 posición de la tabla. Es decir, la dirección 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 dirección de destino del salto se calcula como la suma del puntero base y el dato del acumulador.

3.3. CICLO DE INSTRUCCION 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. (Para comprender este apartado tener a la vista la Figura 3.1 y la Tabla 4.5, Set de Instrucciones.) Como norma general, una instrucción requiere de uno q más ciclos máquina, en función de:

a) El código de operación Por ejemplo, la instrucción INC A (Figura 3.1 A) tiene 1 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.1 C) 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

Page 4: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 27 Ing. Rufino J. Domínguez Arellano

Por ejemplo, la instrucción MOV A, #data tiene 2 bytes de instrucción y requiere de 1 ciclo máquina (Figura 3.1 B). 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.1 D 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. 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.1 B.

3.4. TIPOS DE INSTRUCCIONES El set de instrucciones del 8052/8051 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 a la mayoría de microprocesadores. Los microcontroladores tienen 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, al bit. 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, que, como ya hemos dicho, están «orientadas al bit>. Esta particularidad, así como su inmunidad al ruido eléctrico, le hacen valioso en el mundo del control de procesos industriales

Page 5: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 28 Ing. Rufino J. Domínguez Arellano

3.5. INSTRUCIONES ARITMETICAS. En la tabla 3.2, se muestra el menú de las instrucciones aritméticas 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 ejecución que se indican en la tabla están evaluados sobre una frecuencia de relo de 12 MHz.

Page 6: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 29 Ing. Rufino J. Domínguez Arellano

La instrucciónb 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 instrucción 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 lógicas, modos de direccionamiento disponibles e indicadores de estado. Observe que en este grupo se incluyen las instrucciones de rotación a la izquierda y a la derecha.

Page 7: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 30 Ing. Rufino J. Domínguez Arellano

3.7. INSTRUCCIONES DE TRANSFERENCIA DE DATOS Se consideran tres modalidades, según 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 instrucción MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM interna o el espacio de localización del SFR (referencia Figura 2.8). Este tipo de instrucción permite la transferencia sin afectar el acumulador.

Page 8: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 31 Ing. Rufino J. Domínguez Arellano

Ejemplo:

; Antes de ejecutar la instrucción: ; (3A) = 35H ; (3D) = 78H

MOV3AH,3DH .. ; Despues de ejecutarla: ; (3A) = 78H ; (3D) = 78H

• La instrucción 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 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 SCRA TCH 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

Page 9: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 32 Ing. Rufino J. Domínguez Arellano

• La instrucción XCH A, <byte>, intercambia los datos del acumulador y del byte direccionado. 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: ; (RO) = 2DH y (2D) = 37H y (A) = 23H

XCHD A, @R0 ; Después 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. Sólo 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 instrucción 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

Page 10: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 33 Ing. Rufino J. Domínguez Arellano

registro DPTR (MOVX A,@DPTR o MOVX @DPTR,A) y tener que sacrificar el Puerto 2, cuando sólo se va a utilizar un pequeño espacio de memoria RAM. Existe una solución intermedia que permite direccionar sólo unos pocos Kbytes de RAM externa, pero obteniendo algunas líneas hábiles del Puerto 2 como entradas y salidas (E/S). Esta es la solución que se mostró en la Figura 2.7 del Capítulo 2. De todas formas la solución adecuada debe ser función de las características que necesita la aplicación, suponiendo, en principio, que la implementación de la misma sobre la elección de los Microcontroladores 8052/8051 sea la correcta. Las líneas de control de lectura y escritura, RD y WR (pines 16 y 17), sólo son utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM externa, es obvio que se ganarán unas líneas extras de E/S (Figura 2.7). Ejemplo: Estudiar la secuencia de instrucciones. MOVX A, @Rl MOVX@RO,A

Nota: Este ejemplo se podría 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, debería ser implementada esta operación, 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é sucedería si se tuvieran que implementar estas instrucciones en la zona de memoria por encima de la dirección 2000H? Es decir:

Page 11: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 34 Ing. Rufino J. Domínguez Arellano

sustituida 85H → 2085H F3H → 20F3H

Se llegaría a la conclusión de que no se podrían procesar estas instrucciones, contando que los registros R0 y R1 no pueden direccionar por encima de la posición de memoria FFH. Pero aquí es donde entran en juego las instrucciones MOVX con el DPTR como operando. La sustitución, en el caso de tener que operar en el espacio de memoria comprendido entre 0000H y FFFFH, sería:

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

Recuérdese que en la Tabla 3.4 hay una instrucción que es:

MOV DPTR, #data16 Con la que se podría 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). Obsérvese que las tablas sólo pueden ser leídas y no actualizadas. El nemónico es MOVC (Mover Constante). Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la señal de control PSEN (pin 29). Obsérvese la Figura 2.5 del capítulo anterior .

Page 12: CAPITULO 3 Programación de los Microcontroladores 8052 ... · El set de instrucciones del 8052/8051 se puede dividir según las especialidades: • Instrucciones aritméticas. •

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 35 Ing. Rufino J. Domínguez Arellano

La primera instrucción 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 instrucción es similar a la primera, salvo que es el Pogram Counter (PC) el que actúa como indicador de la dirección base de la tabla.

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

Se presenta esta instrucción dentro de una subrutina, estando la tabla de información después de la instrucción 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.