microcontroladores y ciclos de mÁquina ... hacerse las cosas (procesar las instrucciones). podemos...
TRANSCRIPT
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
MICROCONTROLADORES Y CICLOS DE MÁQUINA
Un microcontrolador no es más que un ordenador miniaturizado de mayor o menor potencia y complejidad al que se le han añadido (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 señal 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 señal de reloj como en el pulso que da vida a un microcontrolador, si no hay reloj, el microcontrolador no funciona.
Hace unos años, esta señal de reloj siempre era externa al microcontrolador. Hoy en día es extraño 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 señal de reloj. Veremos como influye en la velocidad de un microcontrolador, estudiaremos qué es un ciclo de máquina y con algunos ejemplos simularemos cómo 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 página web y echaremos un vistazo a sus características principales (seleccionamos la pestaña Productos/8-bit PIC Microcontrollers):
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Una vez seleccionada la página de microcontroladores de 8 bits, vemos una nueva página con una selección por características (cantidad y/o tipo de memoria, número de pines, tipo de familia y/o dispositivos integrados). Gracias a este listado podemos encontrar rápidamente aquellos microcontroladores con una determinada característica. 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 características del microcontrolador 12F675.
Entonces sólo tenemos que buscar en la lista en pantalla el modelo 12F675 y pinchar en su enlace que nos llevará a una nueva página donde encontraremos las características del microcontrolador que pasaremos a detallar en la siguiente página.
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Aprovechamos la información de la página web, para describir brevemente algunas de las características 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 página web.
Memoria E/S Timers A/D
1024
FLASH
64/128
SRAM/EEPROM 6 I/O (T0) 8bits y (T1) 16bits 10 bits, 4 canales
Podemos ver que tiene distintos tipos de memoria. El programa que diseñemos
se grabará en la memoria de programa (FLASH Program Memory) y los datos necesarios se grabarán en otra memoria diferente (RAM File Registers + Data
EEPROM). Puede verse en el siguiente diagrama de bloques extraído de su hoja técnica:
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 física utilizando el sensor adecuado (temperatura, presión, humedad, nivel de luz, resistencia, etc.) Otras características específicas de este microcontrolador son:
- Reloj interno de 4Mhz con posibilidad de utilizar una señal de reloj externa - Sólo 35 instrucciones, es de tipo RISC (Reduced Instruction Set Computer) - Interrupt-on-pin change pin (interrupción cuando detecta cambio en pin E/S) - Dispone de un comparador analógico - Modo de ahorro de energía (SLEEP) - Brown-out Detect BOD (detección de fallo de alimentación) - Watchdog timer WDT (detección de bloqueos) - Protección del código grabado en el micro
Encontraremos en el mercado otros micros que incluyen conexión a USB, red, etc.
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Un microcontrolador siempre funciona con una señal de reloj. Además de las características principales como capacidad de memoria, E/S y otras, lo más importante a la hora de conocer bien un microcontrolador, es tener muy claro como se ejecutan sus instrucciones. Veamos qué sucede dentro de su pequeña 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 máquinas para poder seguir.
Un período es el tiempo que transcurre entre dos flancos de subida de la señal de reloj, en nuestro caso y según el dibujo, está marcado por las flechas. Fíjate que la señal de reloj tiene una parte positiva y una parte negativa repitiéndose luego sucesivamente. De modo que el periodo (en adelante T) nos indica el tiempo que una señal de reloj tarda en completar un ciclo alto + ciclo bajo.
Si viajamos atrás en el tiempo, concretamente al año 1982, nos encontramos con el microordenador de 8 bits que inició a mucho que luego se convertirían en estusiastas de la informática, hablo del ZX Spectrum, fue el más popular de los años 80, con un microprocesador Z80 de la casa Zilogi funcionaba a una velocidad de 3,5Mhz! Calculemos su periodo T para ver lo rápido que funcionaba su señal de reloj:
Con estos sencillos cálculos 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 señal de reloj generar un ciclo alto y un ciclo bajo.
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
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
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 operación que antes, pero teniendo en cuenta que su frecuencia es un poco mayor. Calculemos su periodo T:
Recordando la fórmula 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 � T = 0,28us
ν = 4,0Mhz � T = 0,25us
Nota: Es importante entender bien las fórmulas. A veces basta con escribir un par de ejemplos para dejar
claro su significado.
Hasta aquí hemos visto la relación entre la frecuencia y el periodo de una señal
de reloj T. Cuanto más frecuencia, menos período, 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 añadido una figura nueva (cronograma remarcado en
verde) para explicar cómo se ejecuta una instrucción dentro del microcontrolador. Hasta ahora sólo hemos calculado el tiempo que tarda la señal de reloj en hacer un ciclo completo, pero no tenemos ni idea de lo que sucede en este ciclo (T) ¿podrá ejecutarse una instrucción en un ciclo de reloj? o por el contrario, ¿necesitará varios ciclos de reloj para ejecutar una instrucción?
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
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
CICLOS DE MÁQUINA (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 instrucción tiene una función definida y se ejecuta en un tiempo determinado. Hay instrucciones que necesitan más tiempo para ejecutarse y otras sencillas (NOP o RR) que se ejecutan en muy poco tiempo. Para determinar este tiempo se utiliza el término ciclo de máquina que se define como “el tiempo mínimo necesario para ejecutar una instrucción” y está formado por un número determinado de ciclos o periodos de reloj.
Recordando el cronograma que aparecía en la página anterior:
El tiempo de ejecución de todas las instrucciones está expresado en unidades de ciclos de máquina.
Ejemplo: ¿En un micro 12F675 en cuántos ciclos máquina se ejecuta NOP? Lo primero será buscar el datasheet del micro, vamos a la sección de juego de
instrucciones y vemos la tabla que aparece al pie. Buscamos la columna Cycles y ya lo tenemos: 1 ciclo de máquina. En un programa sólo tendremos que ir sumando el tiempo de ejecución de cada instrucción.
Si nos enseñan 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 máquina está formado por cuatro periodos de reloj y que el tiempo mínimo necesario para ejecutar una instrucción será para este microcontrolador en concreto de cuatro ciclos de reloj:
Es decir, CM (para este micro) = 4 * CLK = 4 * T
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
El ciclo de máquina cambia en cada microcontrolador. Por ejemplo para los micros de Atmel vistos en clase, un ciclo de máquina comprende 12 ciclos de reloj, sin embargo, en un microcontrolador como el 12F675 de Microchip, su ciclo de máquina comprende 4 ciclos de reloj. Por lo tanto para calcular tiempos de ejecución tenemos que saber la velocidad del reloj y tener a mano un cronograma que nos indique cuántos ciclos de reloj comprende un ciclo de máquina.
Retomando este cronograma que veíamos en el tema: “Arquitectura de la familia
de microcontroladores MCS-51” visto en clase:
Se puede ver claramente que la señal principal de reloj es OSC y que justo rotulado arriba puede verse cómo están agrupados los ciclos de reloj en estados (S1 a S6). Para este microcontrolador, el ciclo de máquina está formado por 6 estados, o lo que es lo mismo 12 ciclos de reloj.
Para este micro (el de clase): 1 ciclo de máquina = 12 ciclos de reloj = 12 * T
Básicamente hay que tener a mano dos cosas a la hora de calcular tiempos de
ejecución: 1. Frecuencia de funcionamiento del microcontrolador y 2. Cronograma que muestre la relación entre señal 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 ejecución de las instrucciones PUSH y POP para diferentes frecuencias: 5Mhz, 9Mhz y 33Mhz.
Más adelante haremos lo mismo pero con un fragmento de código (habrá que ir
sumando los tiempos de ejecución parciales teniendo en cuenta que los bucles multiplicarán los tiempos de ejecución…pero eso ya lo veremos).
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Ejemplo: Microcontrolador Para 5Mhz Recordando: Cuando calculamos el periodo y el ciclo de máquina, hablamos de tiempos. - Frecuencia (٧) se mide en Hz - Periodo (T) se mide se segundos
Solución. Primero calculamos el periodo y el ciclo de máquina: 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 señal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 5Mhz. Podéis ver este tiempo delimitado por las líneas verticales azules. En este micro, cada ciclo de máquina 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 máquina CM = 2,4 microsegundos. Para calcular el tiempo de ejecución de la instrucción PUSH dir, miramos el manual:
En la segunda columna se indica los ciclos de máquina 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 sólo necesita 1 CM para ejecutarse, tardará 1 * CM = 1* 2.4 microsegundos
� NOP se ejecutará en 2,4 microsegundos
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Segundo ejemplo: 9Mhz Recordando (otra vez): - Cuando calculamos el periodo y el ciclo de máquina, hablamos de tiempos. - Frecuencia (٧) se mide en Hz - Periodo (T) se mide se segundos.
Solución. Primero calculamos el periodo y el ciclo de máquina: 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 señal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 9Mhz. Podéis ver este tiempo delimitado por las líneas verticales azules. Si no cambiamos de micro, lo mismo que en el caso anterior: En este micro, cada ciclo de máquina 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 máquina CM = 1,33 microsegundos Para calcular el tiempo de ejecución de la instrucción PUSH dir, miramos el manual:
En la segunda columna nos indica los ciclos de máquina 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 sólo necesita 1 CM para ejecutarse, tardará 1 * CM = 1* 1,33 us
NOP se ejecutará en 1,33 microsegundos
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Tercer ejemplo: 33Mhz (aceleramos un poco) Recordando (otra vez ;-): - Cuando calculamos el periodo y el ciclo de máquina, hablamos de tiempos. - Frecuencia (٧) se mide en Hz - Periodo (T) se mide se segundos.
Solución. Primero calculamos el periodo y el ciclo de máquina: 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 señal en describir un ciclo de reloj (ciclo bajo + ciclo alto) a la frecuencia de 33Mhz. Podéis ver este tiempo delimitado por las líneas verticales azules. Si no cambiamos de micro, lo mismo que en el caso anterior: En este micro, cada ciclo de máquina 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 máquina CM = 0,3636 microsegundos. Para calcular el tiempo de ejecución de la instrucción PUSH dir, miramos el manual:
En la segunda columna nos indica los ciclos de máquina 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 sólo necesita 1 CM para ejecutarse, tardará 1 * CM = 1* 0,3636 us = 0,3636 us.
NOP se ejecutará en 0,3636 microsegundos
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Ejercicio: Cálculo del tiempo de ejecución de un fragmento de código. Entorno: Microcontrolador Atmel a 12Mhz, los datos del juego de instrucciones puedes encontrarlas en la microweb o en Internet en la página del fabricante. Objetivos:
Fijar conceptos como el ciclo de máquina, repasar el juego de instrucciones y aprender a calcular el tiempo de ejecución de un programa en ensamblador. De esta manera te acostumbras a manejar las instrucciones, su codificación y te harás una idea más aproximada de algo que para muchos es tremendamente abstracto: Qué es lo que sucede dentro de un micro. Código 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 código.
En este punto no importa qué es lo que hace el programa, no te entretengas en ello, vamos a calcular sólo el tiempo que le cuesta ejecutarse. P0 equ 080h
La primera línea define la etiqueta P0 con el valor 080h (080h es una dirección
de memoria que corresponde con un puerto de E/S). Cada vez que quieras utilizar esa dirección en una instrucción 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 dirección por ejemplo: 090h
sólo tenemos que modificar la primera línea. De otro modo, habría que modificar todas las instrucciones del código (en nuestro ejemplo son pocas y no cuesta mucho, pero cuando hay miles de líneas cuesta bastante más). Podríamos haber definido el puerto con otra etiqueta así: Puerto equ 080h
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
También podríamos haber definido nombres como S1, S2 (salida1, salida2, etc.) Hay otra etiqueta en el código: B1 y otra directiva: END. Cuando se ensambla un programa, las etiquetas y las directivas sólo son ayudas o guías, no aparecen en el código máquina final, a modo de ejemplo son como las instrucciones de montaje de un modelo, te sirven para ver cómo 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 sólo 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 encontrarás. org 0
MOV P0, #11110011b
En la tercera línea, el símbolo ‘#’ indica que es modo inmediato, la instrucción
copia el valor 11110011 (F3 en hexadecimal) en P0 (en la dirección 080h). El sufijo ‘b’ indica que el número está representado en binario. Cuando aparece una ‘h’ como en el ejemplo de la primera línea, el número está representado en hexadecimal. También suele representarse en hexadecimal anteponiendo el prefijo ‘0x’, por ejemplo 0xF2.
En la instrucción 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 instrucción DJNZ es salto condicional. Decrementa el registro R0 y salta a otra parte del código 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 mínimo se ejecutará 200 veces.
Veamos ahora el código de operación de cada instrucción, los bytes que ocupa cada una y su tiempo de ejecución, que es lo mismo que decir cuántos ciclos máquina consumirá dicha instrucción.
Antes del bucle (hasta B1)
La única pega podría venir de la 3ª instrucción, ya que si buscamos en las hojas, no encontramos la instrucción con P0 en el primer operando. Pero como P0 = 080h, en realidad el micro ve la instrucción así: MOV directo, #11110011b, es decir, copia un valor en una dirección de memoria. Recuerda, una dirección 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 ---
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
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 máquina:
Instrucción CM Código Segundo byte Tercer byte P0 equ 080h 0 -- -- --
MOV P0, #11110011b 2 01110101 10000000 (dirección) 11110011 (dato = 243d)
MOV P0, A 1 11110101 10000000 (dirección) --
RR A 1 00000011 -- --
MOV R0, #200 1 01111000 11001000 (dato = 200d) --
Total CM 5 Tiempo de ejecución: 5 * T = 5 * 1us = 5 microsegundos
Nota: La primera línea (P0 equ 080h) no genera instrucción alguna, es una directiva que utiliza el
ensamblador como ya vimos. Lo mismo sucede con la directiva END que veréis en los programas, sólo indica al ensamblador el final del código.
Dentro del bucle:
Instrucción CM Código Segundo byte Tercer byte NOP 1 00000000 -- --
NOP 1 00000000 -- --
NOP 1 00000000 -- --
DJNZ R0, dir 2 11011000 (dirección de salto) --
Total CM 5*200 = 1.000 Tiempo de ejecución: 5 * 200 * 1us = 1000 microsegundos
Una pasada del bucle tarda en ejecutarse 5 ciclos de máquina, pero como salta
200 veces hasta que R0 llega a cero, el bucle tarda en ejecutarse 5*200.
El código presentado en el ejercicio tardará en ejecutarse: 1.005 ciclos de máquina y para un microcontrolador a 12Mhz (1us de CM) se ejecutaría en 1.005 microsegundos.
Como actividad se propone descargar hojas de características de micros de diferentes fabricantes y experimentar las diferencias que existen en sus tiempos de ejecución para un bucle sencillo de 200 ciclos.
También puede utilizarse el entorno Keil para comprobar cómo cada instrucción corresponde exactamente con los códigos de operación, bytes de datos y direcciones en función de los modos de direccionamiento utilizados en las tablas. En la parte inferior de la figura puede apreciarse el código 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 automático una vez conocidos los detalles.
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Ejercicio 2: Para el siguiente fragmento de código, analizar el tiempo de ejecución total y rellenar la tabla con los códigos de instrucción, bytes y ciclos de máquina para un micro de la familia MCS-51 a 6Mhz. Añadir 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
Instrucción CM Código Segundo byte Tercer byte
B: equ 0F0h 0 -- -- --
Org 8000h 0 -- -- --
8000 MOV R0, #11111111b 2 0111 1 r r r FFh --
8002 MOV B, 30h 2 1000 0101 30h B (0F0h)
8005 MOV R1, 31h 2 1010 1 r r r 31h --
8007 CLR A 1 1110 0100 -- -- Total ciclos ���� 7
8008 ADD A, @R1 1 0010 011 i -- --
8009 INC R1 1 0000 1 r r r -- --
800A DJNZ R0, Etiqueta2 2 1101 1 r r r Dirección de salto -- Total ciclos ���� 4* pasadas del bucle
800C DIV AB 4 1000 0100 -- --
800D MOV 32h, A 1 1111 0101 32h --
800F MOV 33h, B 2 1000 0101 B (0F0h) 33h Total ciclos ���� 7
En este ejercicio el bucle se ejecuta mientras R0 no sea cero. Por lo tanto habrá
un tiempo de ejecución 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 código de instrucción incluye ‘rrr’, hay que sustituirlas por el número en binario del registro que se esté utilizando, si es R3 � rrr = 011, etc. Una vez tengamos el total de ciclos de máquina necesarios para ejecutar el programa, solo hay que multiplicar por el tiempo que hemos calculado antes (2microsegundos).
Informática Industrial
v0.2 Marzo 2007 · Bloque 2 · Microcontroladores · Documentación complementaria
Ejercicio 3: Para el siguiente fragmento de código, analizar el tiempo de ejecución total y rellenar la tabla con los códigos de instrucción, bytes y ciclos de máquina 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.
i Zilog, http://www.zilog.com/