You are on page 1of 16

Informtica Industrial

MICROCONTROLADORES Y CICLOS DE MQUINA


Un microcontrolador no es ms que un ordenador miniaturizado de mayor o menor potencia y complejidad al que se le han aadido (integrado) una serie de elementos como: conversores A/D, memoria, comparadores, puertos de E/S, temporizadores, etc. Como ya sabes, el funcionamiento de un ordenador est marcado por una seal de reloj. Si el reloj no funciona, el ordenador se para. Es el tempo que marca cuando deben hacerse las cosas (procesar las instrucciones). Podemos pensar en la seal de reloj como en el pulso que da vida a un microcontrolador, si no hay reloj, el microcontrolador no funciona. Hace unos aos, esta seal de reloj siempre era externa al microcontrolador. Hoy en da es extrao encontrar un microcontrolador que no lleve integrado este circuito de reloj, de modo que, uno puede comprarse un microcontrolador en una tienda especializada, programarlo y funcionar sin necesidad de componentes externos. En este documento vamos a echar un vistazo a esta seal de reloj. Veremos como influye en la velocidad de un microcontrolador, estudiaremos qu es un ciclo de mquina y con algunos ejemplos simularemos cmo se ejecutan las instrucciones en un microcontrolador. Vemos aqu algunos ejemplos, en concreto el 12F675 y el 16F628:

Ambos microcontroladores son del fabricante Microchip (www.microchip.com). Como ejercicio vamos a ir a su pgina web y echaremos un vistazo a sus caractersticas principales (seleccionamos la pestaa Productos/8-bit PIC Microcontrollers):

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Una vez seleccionada la pgina de microcontroladores de 8 bits, vemos una nueva pgina con una seleccin por caractersticas (cantidad y/o tipo de memoria, nmero de pines, tipo de familia y/o dispositivos integrados). Gracias a este listado podemos encontrar rpidamente aquellos microcontroladores con una determinada caracterstica. Solo hay que hacer clic en el literal escogido (en nuestro caso por familia ya que conocemos el modelo) selecciona: PIC12 ya que buscamos las caractersticas del microcontrolador 12F675.

Entonces slo tenemos que buscar en la lista en pantalla el modelo 12F675 y pinchar en su enlace que nos llevar a una nueva pgina donde encontraremos las caractersticas del microcontrolador que pasaremos a detallar en la siguiente pgina.

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Aprovechamos la informacin de la pgina web, para describir brevemente algunas de las caractersticas de este micro (12F675), que podemos encontrar en otros del mercado. Para entrar en detalles es recomendable descargar el documento de especificaciones. Buscad datasheets en la pgina web.

Memoria 1024 FLASH 64/128 SRAM/EEPROM

E/S 6 I/O

Timers (T0) 8bits y (T1) 16bits

A/D 10 bits, 4 canales

Podemos ver que tiene distintos tipos de memoria. El programa que diseemos se grabar en la memoria de programa (FLASH Program Memory) y los datos necesarios se grabarn en otra memoria diferente (RAM File Registers + Data EEPROM). Puede verse en el siguiente diagrama de bloques extrado de su hoja tcnica:

Este micro tiene 6 pines de E/S para conectar diferentes dispositivos digitales, tiene dos temporizadores (T0) y (T1) y un convertidor A/D de 10 bits que podremos utilizar para medir cualquier magnitud fsica utilizando el sensor adecuado (temperatura, presin, humedad, nivel de luz, resistencia, etc.) Otras caractersticas especficas de este microcontrolador son: - Reloj interno de 4Mhz con posibilidad de utilizar una seal de reloj externa - Slo 35 instrucciones, es de tipo RISC (Reduced Instruction Set Computer) - Interrupt-on-pin change pin (interrupcin cuando detecta cambio en pin E/S) - Dispone de un comparador analgico - Modo de ahorro de energa (SLEEP) - Brown-out Detect BOD (deteccin de fallo de alimentacin) - Watchdog timer WDT (deteccin de bloqueos) - Proteccin del cdigo grabado en el micro Encontraremos en el mercado otros micros que incluyen conexin a USB, red, etc.

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Un microcontrolador siempre funciona con una seal de reloj. Adems de las caractersticas principales como capacidad de memoria, E/S y otras, lo ms importante a la hora de conocer bien un microcontrolador, es tener muy claro como se ejecutan sus instrucciones. Veamos qu sucede dentro de su pequea unidad de proceso. Hemos visto el ejemplo del micro 12F675 de Microchip, en clase utilizamos un micro de Atmel a 12Mhz, pero en el mercado existen modelos que trabajan a diferentes frecuencias o velocidades de reloj. Vamos a empezar calculando la base de tiempos de varias mquinas para poder seguir.

Un perodo es el tiempo que transcurre entre dos flancos de subida de la seal de reloj, en nuestro caso y segn el dibujo, est marcado por las flechas. Fjate que la seal de reloj tiene una parte positiva y una parte negativa repitindose luego sucesivamente. De modo que el periodo (en adelante T) nos indica el tiempo que una seal de reloj tarda en completar un ciclo alto + ciclo bajo. Si viajamos atrs en el tiempo, concretamente al ao 1982, nos encontramos con el microordenador de 8 bits que inici a mucho que luego se convertiran en estusiastas de la informtica, hablo del ZX Spectrum, fue el ms popular de los aos 80, con un microprocesador Z80 de la casa Zilogi funcionaba a una velocidad de 3,5Mhz! Calculemos su periodo T para ver lo rpido que funcionaba su seal de reloj:
Frecuencia = 3,5Mhz (1Mhz = 106 hz) T (inversa frec.) = 1/(3,5 106 hz) (llevo 106 al numerador) = 0,285714 10-6 s = 0,285714 us T = 0,285714 microsegundos

Con estos sencillos clculos comprobamos que para una frecuencia de reloj de 3,5Mhz, el periodo T = 0,285714 microsegundos, es decir, el tiempo que le cuesta a la seal de reloj generar un ciclo alto y un ciclo bajo.
v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Veamos ahora el ejemplo de un microcontrolador de la casa Microchip, el modelo 12F675 que hemos visto antes, un integrado de 8 patillas que funciona a una frecuencia de 4Mhz. Hacemos la misma operacin que antes, pero teniendo en cuenta que su frecuencia es un poco mayor. Calculemos su periodo T:

Frecuencia = 4Mhz (1Mhz = 106 hz) T (inversa frec.) = 1/(4 106 hz) (pasamos 106 al numerador) = 0,25 10-6 s = 0,25 us T = 0,25 microsegundos

Recordando la frmula del periodo que ya hemos visto (inversa de la frecuencia), comprobamos que se cumple con los dos ejemplos que cuando aumentamos la frecuencia, el periodo disminuye: = 3,5Mhz = 4,0Mhz T = 0,28us T = 0,25us

Nota: Es importante entender bien las frmulas. A veces basta con escribir un par de ejemplos para dejar claro su significado.

Hasta aqu hemos visto la relacin entre la frecuencia y el periodo de una seal de reloj T. Cuanto ms frecuencia, menos perodo, es decir, menos tiempo. Como un microcontrolador lo nico que hace es ejecutar instrucciones, si escogemos un microcontrolador con una frecuencia mayor, utilizar menos tiempo en ejecutar las mismas instrucciones. En el ejemplo anterior he aadido una figura nueva (cronograma remarcado en verde) para explicar cmo se ejecuta una instruccin dentro del microcontrolador. Hasta ahora slo hemos calculado el tiempo que tarda la seal de reloj en hacer un ciclo completo, pero no tenemos ni idea de lo que sucede en este ciclo (T) podr ejecutarse una instruccin en un ciclo de reloj? o por el contrario, necesitar varios ciclos de reloj para ejecutar una instruccin?

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

CICLOS DE MQUINA (CM) Un microcontrolador es un ordenador en miniatura, con su unidad de proceso, memoria, dispositivos y un juego de instrucciones propio de cada micro como hemos visto en clase: MOV, MOVX, ADD, RR, RL, NOP (en este caso para Atmel). Cada instruccin tiene una funcin definida y se ejecuta en un tiempo determinado. Hay instrucciones que necesitan ms tiempo para ejecutarse y otras sencillas (NOP o RR) que se ejecutan en muy poco tiempo. Para determinar este tiempo se utiliza el trmino ciclo de mquina que se define como el tiempo mnimo necesario para ejecutar una instruccin y est formado por un nmero determinado de ciclos o periodos de reloj. Recordando el cronograma que apareca en la pgina anterior:

Si nos ensean este dibujo, vemos que se ha definido cuatro estados: Q1 Q2 Q3 y Q4 y luego se va repitiendo, esto quiere decir que para este microcontrolador, un ciclo de mquina est formado por cuatro periodos de reloj y que el tiempo mnimo necesario para ejecutar una instruccin ser para este microcontrolador en concreto de cuatro ciclos de reloj: Es decir, CM (para este micro) = 4 * CLK = 4 * T

El tiempo de ejecucin de todas las instrucciones est expresado en unidades de ciclos de mquina. Ejemplo: En un micro 12F675 en cuntos ciclos mquina se ejecuta NOP? Lo primero ser buscar el datasheet del micro, vamos a la seccin de juego de instrucciones y vemos la tabla que aparece al pie. Buscamos la columna Cycles y ya lo tenemos: 1 ciclo de mquina. En un programa slo tendremos que ir sumando el tiempo de ejecucin de cada instruccin.

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

El ciclo de mquina cambia en cada microcontrolador. Por ejemplo para los micros de Atmel vistos en clase, un ciclo de mquina comprende 12 ciclos de reloj, sin embargo, en un microcontrolador como el 12F675 de Microchip, su ciclo de mquina comprende 4 ciclos de reloj. Por lo tanto para calcular tiempos de ejecucin tenemos que saber la velocidad del reloj y tener a mano un cronograma que nos indique cuntos ciclos de reloj comprende un ciclo de mquina. Retomando este cronograma que veamos en el tema: Arquitectura de la familia de microcontroladores MCS-51 visto en clase:

Se puede ver claramente que la seal principal de reloj es OSC y que justo rotulado arriba puede verse cmo estn agrupados los ciclos de reloj en estados (S1 a S6). Para este microcontrolador, el ciclo de mquina est formado por 6 estados, o lo que es lo mismo 12 ciclos de reloj. Para este micro (el de clase): 1 ciclo de mquina = 12 ciclos de reloj = 12 * T Bsicamente hay que tener a mano dos cosas a la hora de calcular tiempos de ejecucin: 1. Frecuencia de funcionamiento del microcontrolador y 2. Cronograma que muestre la relacin entre seal de reloj y estados como hemos visto en ambos casos (Atmel y Microchip). Ahora practicaremos con unos ejemplos lo que hemos visto. Dado el microcontrolador visto en clase y con las hojas de datos de la microweb a mano (como en el examen), calcularemos el tiempo de ejecucin de las instrucciones PUSH y POP para diferentes frecuencias: 5Mhz, 9Mhz y 33Mhz. Ms adelante haremos lo mismo pero con un fragmento de cdigo (habr que ir sumando los tiempos de ejecucin parciales teniendo en cuenta que los bucles multiplicarn los tiempos de ejecucinpero eso ya lo veremos).

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Ejemplo: Microcontrolador Para 5Mhz Recordando: Cuando calculamos el periodo y el ciclo de mquina, hablamos de tiempos. - Frecuencia () se mide en Hz - Periodo (T) se mide se segundos Solucin. Primero calculamos el periodo y el ciclo de mquina: 5Mhz es la frecuencia de reloj, calculemos su periodo, es decir, la inversa (1/5Mhz) T = 1/5Mhz = 0,2 * 10-6 s = 0,2 microsegundos, vemos en el dibujo el tiempo calculado:

T = 0,2 microsegundos, es el tiempo que tarda la seal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 5Mhz. Podis ver este tiempo delimitado por las lneas verticales azules. En este micro, cada ciclo de mquina comprende 6 estados: S1..S6, con dos ciclos de reloj cada uno, si sumamos los ciclos totales, tenemos 12 ciclos de reloj. Entonces: 0,2 microsegundos * 12 ciclos de reloj = 2,4 microsegundos Para 5Mhz el ciclo de mquina CM = 2,4 microsegundos. Para calcular el tiempo de ejecucin de la instruccin PUSH dir, miramos el manual:

En la segunda columna se indica los ciclos de mquina que necesita para ejecutarse (2), entonces tenemos: PUSH directo 2* CM = 2 * 2,4 microsegundos

PUSH directo, se ejecutar en 4,8 microsegundos Para NOP lo mismo, miramos el manual:

Como slo necesita 1 CM para ejecutarse, tardar 1 * CM = 1* 2.4 microsegundos NOP se ejecutar en 2,4 microsegundos

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Segundo ejemplo: 9Mhz Recordando (otra vez): - Cuando calculamos el periodo y el ciclo de mquina, hablamos de tiempos. - Frecuencia () se mide en Hz - Periodo (T) se mide se segundos. Solucin. Primero calculamos el periodo y el ciclo de mquina: 9Mhz es la frecuencia de reloj, calculemos su periodo, es decir, la inversa (1/9Mhz) T = 1/9Mhz = 0,11 * 10-6 s = 0,11 microsegundos, lo vemos en el dibujo:

T = 0,11 microsegundos, es el tiempo que tarda la seal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 9Mhz. Podis ver este tiempo delimitado por las lneas verticales azules. Si no cambiamos de micro, lo mismo que en el caso anterior: En este micro, cada ciclo de mquina comprende 6 estados: S1..S6, con dos ciclos de reloj cada uno, si sumamos los ciclos totales, tenemos 12 ciclos de reloj. Entonces: 0,11 microsegundos * 12 ciclos de reloj = 1,33 microsegundos Para 9Mhz el ciclo de mquina CM = 1,33 microsegundos Para calcular el tiempo de ejecucin de la instruccin PUSH dir, miramos el manual:

En la segunda columna nos indica los ciclos de mquina que necesita para ejecutarse (2), entonces tenemos 2* CM = 2 * 1,33us PUSH dir se ejecutar en 2,66 microsegundos Para NOP lo mismo, miramos el manual:

Y como slo necesita 1 CM para ejecutarse, tardar 1 * CM = 1* 1,33 us NOP se ejecutar en 1,33 microsegundos

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Tercer ejemplo: 33Mhz (aceleramos un poco) Recordando (otra vez ;-): - Cuando calculamos el periodo y el ciclo de mquina, hablamos de tiempos. - Frecuencia () se mide en Hz - Periodo (T) se mide se segundos. Solucin. Primero calculamos el periodo y el ciclo de mquina: 33Mhz es la frecuencia de reloj, calculemos su periodo, es decir, la inversa (1/33Mhz) T = 1/33Mhz = 0,0303 * 10-6 s = 0,0303 microsegundos, lo vemos en el dibujo:

T = 0,0303 microsegundos, es el tiempo que tarda la seal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 33Mhz. Podis ver este tiempo delimitado por las lneas verticales azules. Si no cambiamos de micro, lo mismo que en el caso anterior: En este micro, cada ciclo de mquina comprende 4 estados: S1..S6, con dos ciclos de reloj cada uno, si sumamos los ciclos totales, tenemos 12 ciclos de reloj. Entonces: 0,0303 microsegundos * 12 ciclos de reloj = 0,3636 microsegundos Para 33Mhz el ciclo de mquina CM = 0,3636 microsegundos. Para calcular el tiempo de ejecucin de la instruccin PUSH dir, miramos el manual:

En la segunda columna nos indica los ciclos de mquina que necesita para ejecutarse (2), entonces tenemos 2* CM = 2 * 0,3636us PUSH dir se ejecutar en 0,7272 microsegundos Para NOP lo mismo, miramos el manual:

Y como slo necesita 1 CM para ejecutarse, tardar 1 * CM = 1* 0,3636 us = 0,3636 us. NOP se ejecutar en 0,3636 microsegundos

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Ejercicio: Clculo del tiempo de ejecucin de un fragmento de cdigo. Entorno: Microcontrolador Atmel a 12Mhz, los datos del juego de instrucciones puedes encontrarlas en la microweb o en Internet en la pgina del fabricante. Objetivos: Fijar conceptos como el ciclo de mquina, repasar el juego de instrucciones y aprender a calcular el tiempo de ejecucin de un programa en ensamblador. De esta manera te acostumbras a manejar las instrucciones, su codificacin y te hars una idea ms aproximada de algo que para muchos es tremendamente abstracto: Qu es lo que sucede dentro de un micro. Cdigo de muestra:
P0 equ 080h org 0 MOV P0, #11110011b MOV P0, A RR A MOV R0, #200 B1: NOP NOP NOP DJNZ R0, B1 END

Algunos detalles a tener en cuenta para interpretar bien el cdigo. En este punto no importa qu es lo que hace el programa, no te entretengas en ello, vamos a calcular slo el tiempo que le cuesta ejecutarse.
P0 equ 080h

La primera lnea define la etiqueta P0 con el valor 080h (080h es una direccin de memoria que corresponde con un puerto de E/S). Cada vez que quieras utilizar esa direccin en una instruccin puedes escribir: MOV P0, A y no MOV 080h, A. P0 es la etiqueta que defines, equ es la directiva y 080h es el valor asignado. De este modo, si queremos cambiar de puerto a otra direccin por ejemplo: 090h slo tenemos que modificar la primera lnea. De otro modo, habra que modificar todas las instrucciones del cdigo (en nuestro ejemplo son pocas y no cuesta mucho, pero cuando hay miles de lneas cuesta bastante ms). Podramos haber definido el puerto con otra etiqueta as:
Puerto equ 080h

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Tambin podramos haber definido nombres como S1, S2 (salida1, salida2, etc.) Hay otra etiqueta en el cdigo: B1 y otra directiva: END. Cuando se ensambla un programa, las etiquetas y las directivas slo son ayudas o guas, no aparecen en el cdigo mquina final, a modo de ejemplo son como las instrucciones de montaje de un modelo, te sirven para ver cmo montar y encajar las piezas, pero lo que montas al final es lo que hay dentro de la caja, las piezas (las instrucciones). El microcontrolador slo ejecuta instrucciones (ni las etiquetas ni las directivas). De hecho si buscas en la tabla de instrucciones las directivas equ, End o la etiqueta B1 no las encontrars.
org 0 MOV P0, #11110011b

En la tercera lnea, el smbolo # indica que es modo inmediato, la instruccin copia el valor 11110011 (F3 en hexadecimal) en P0 (en la direccin 080h). El sufijo b indica que el nmero est representado en binario. Cuando aparece una h como en el ejemplo de la primera lnea, el nmero est representado en hexadecimal. Tambin suele representarse en hexadecimal anteponiendo el prefijo 0x, por ejemplo 0xF2. En la instruccin MOV P0, A no se ha definido A como en el ejemplo anterior de P0. Esto es porque el entorno de desarrollo (Keil) trae unas etiquetas de serie para este micro (A, R0, R1) y podemos utilizarlas sin definirlas. La instruccin DJNZ es salto condicional. Decrementa el registro R0 y salta a otra parte del cdigo si su valor no es cero, de modo y como puedes ver, como R0 se ha cargado con el valor 200, es un bucle que como mnimo se ejecutar 200 veces. Veamos ahora el cdigo de operacin de cada instruccin, los bytes que ocupa cada una y su tiempo de ejecucin, que es lo mismo que decir cuntos ciclos mquina consumir dicha instruccin. Antes del bucle (hasta B1) La nica pega podra venir de la 3 instruccin, ya que si buscamos en las hojas, no encontramos la instruccin con P0 en el primer operando. Pero como P0 = 080h, en realidad el micro ve la instruccin as: MOV directo, #11110011b, es decir, copia un valor en una direccin de memoria. Recuerda, una direccin de memoria en las hojas aparecer como directo. No confundas aqu los modos de direccionamiento.
P0 equ 080h org 0 MOV P0, #11110011b MOV P0, A RR A MOV R0, #200 --- bucle ---

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Veamos como va quedando nuestro ejercicio. Todos los datos se sacan de las tablas. En total, las 4 instrucciones se ejecutan en 5 ciclos de mquina:
Instruccin P0 equ 080h MOV P0, #11110011b MOV P0, A RR A MOV R0, #200 Total CM CM 0 2 1 1 1 5 Cdigo -01110101 11110101 00000011 01111000 Segundo byte -10000000 (direccin) 10000000 (direccin) -11001000 (dato = 200d) Tercer byte -11110011 (dato = 243d) ----

Tiempo de ejecucin: 5 * T = 5 * 1us = 5 microsegundos

Nota: La primera lnea (P0 equ 080h) no genera instruccin alguna, es una directiva que utiliza el ensamblador como ya vimos. Lo mismo sucede con la directiva END que veris en los programas, slo indica al ensamblador el final del cdigo.

Dentro del bucle:


Instruccin NOP NOP NOP DJNZ R0, dir Total CM CM 1 1 1 2 5*200 = 1.000 Cdigo 00000000 00000000 00000000 11011000 Segundo byte ---(direccin de salto) Tercer byte -----

Tiempo de ejecucin: 5 * 200 * 1us = 1000 microsegundos

Una pasada del bucle tarda en ejecutarse 5 ciclos de mquina, pero como salta 200 veces hasta que R0 llega a cero, el bucle tarda en ejecutarse 5*200. El cdigo presentado en el ejercicio tardar en ejecutarse: 1.005 ciclos de mquina y para un microcontrolador a 12Mhz (1us de CM) se ejecutara en 1.005 microsegundos. Como actividad se propone descargar hojas de caractersticas de micros de diferentes fabricantes y experimentar las diferencias que existen en sus tiempos de ejecucin para un bucle sencillo de 200 ciclos. Tambin puede utilizarse el entorno Keil para comprobar cmo cada instruccin corresponde exactamente con los cdigos de operacin, bytes de datos y direcciones en funcin de los modos de direccionamiento utilizados en las tablas. En la parte inferior de la figura puede apreciarse el cdigo hexadecimal de cada una de las instrucciones escritas arriba: MOV 80h, A genera F580 MOV 80h, #11111111b genera

7580FF

* Como actividad se propone cambiar algunas instrucciones y recalcular el ejercicio. Al final es un proceso bastante automtico una vez conocidos los detalles.

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Ejercicio 2: Para el siguiente fragmento de cdigo, analizar el tiempo de ejecucin total y rellenar la tabla con los cdigos de instruccin, bytes y ciclos de mquina para un micro de la familia MCS-51 a 6Mhz. Aadir las direcciones de memoria que ocupa.
B: equ 0F0h org 8000h Etiqueta1: MOV R0, #11111111b MOV B, 30h MOV R1, 31h CLR A Etiqueta2: ADD A, @R1 INC R1 DJNZ R0, Etiqueta2 Etiqueta3: DIV AB MOV 32h, A MOV 33h, B End.

En este ejercicio se trabaja con un micro MCS-51 (1 CM = 12 ciclos de reloj), pero hay que calcular su periodo T = 1/frecuencia T = 1/6Mhz = 0,166 * 10-6 = 0,16 microsegundos, por lo tanto: 1 CM @6Mhz 12 * 0,16 microsegundos = 2 microsegundos.
Dir. Memoria 8000 8002 8005 8007 8008 8009 800A 800C 800D 800F Instruccin
B: equ 0F0h Org 8000h

CM
0 0

Cdigo
--0111 1 r r r 1000 0101 1010 1 r r r 1110 0100 0010 011 i 0000 1 r r r 1101 1 r r r

Segundo byte
---

Tercer byte
---

MOV R0, #11111111b MOV B, 30h MOV R1, 31h CLR A


Total ciclos

2 2 2 1
7

FFh 30h 31h ---Direccin de salto -32h B (0F0h)

-B (0F0h) -------33h

ADD A, @R1 INC R1 DJNZ R0, Etiqueta2


Total ciclos

1 1 2

DIV AB MOV 32h, A MOV 33h, B


Total ciclos

4* pasadas del bucle 1000 0100 4 1111 0101 1 1000 0101 2 7

En este ejercicio el bucle se ejecuta mientras R0 no sea cero. Por lo tanto habr un tiempo de ejecucin anterior y posterior al bucle (primeras instrucciones y ltimas). En la tabla se ha calculado los parciales para clarificar los tiempos. Es importante fijarse que cuando si el cdigo de instruccin incluye rrr, hay que sustituirlas por el nmero en binario del registro que se est utilizando, si es R3 rrr = 011, etc. Una vez tengamos el total de ciclos de mquina necesarios para ejecutar el programa, solo hay que multiplicar por el tiempo que hemos calculado antes (2microsegundos).
v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

Ejercicio 3: Para el siguiente fragmento de cdigo, analizar el tiempo de ejecucin total y rellenar la tabla con los cdigos de instruccin, bytes y ciclos de mquina para un micro de la familia MCS-51 a 33Mhz. Incluir el mapa de memoria.
Entrada: equ 080h Salida: equ 090h org 100h Inicio: MOV R0, #00001111b CLR A Copia: MOV Salida, Entrada DJNZ R0, Copia NOP NOP Finaliza: MOV Salida, #FFh End.

Zilog, http://www.zilog.com/

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria

Informtica Industrial

v0.2 Marzo 2007 Bloque 2 Microcontroladores Documentacin complementaria