Está en la página 1de 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 E/S Timers A/D


1024 64/128
6 I/O (T0) 8bits y (T1) 16bits 10 bits, 4 canales
FLASH SRAM/EEPROM

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  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.

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 CM Cdigo Segundo byte Tercer byte


P0 equ 080h 0 -- -- --
MOV P0, #11110011b 2 01110101 10000000 (direccin) 11110011 (dato = 243d)
MOV P0, A 1 11110101 10000000 (direccin) --
RR A 1 00000011 -- --
MOV R0, #200 1 01111000 11001000 (dato = 200d) --
Total CM 5 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 CM Cdigo Segundo byte Tercer byte


NOP 1 00000000 -- --
NOP 1 00000000 -- --
NOP 1 00000000 -- --
DJNZ R0, dir 2 11011000 (direccin de salto) --
Total CM 5*200 = 1.000 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. Instruccin CM Cdigo Segundo byte Tercer byte


Memoria
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 Direccin 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 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.

i
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

También podría gustarte