Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ciclos y Tiempos PDF
Ciclos y Tiempos PDF
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:
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.)
Encontraremos en el mercado otros micros que incluyen conexin a USB, red, etc.
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.
= 3,5Mhz T = 0,28us
= 4,0Mhz 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.
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:
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.
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.
Ejemplo:
Microcontrolador Para 5Mhz
Recordando:
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
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
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:
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
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.
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).
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).
org 0
MOV P0, #11110011b
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.
P0 equ 080h
org 0
MOV P0, #11110011b
MOV P0, A
RR A
MOV R0, #200
--- bucle ---
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:
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.
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.
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:
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
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).
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/