Está en la página 1de 9

INGENIERIA EN

MICROCONTROLADORES
Maquinas de Estado

Introduccin
INGENIERIA EN MICROCONTROLADORES

MAQUINA DE ESTADOS

www.i-micro.com

Ingeniera en Microcontroladores
Telfono 044 55 11 29 55 05
E-mail: cursos@i-micro.com
elp@i-micro.com

1
INGENIERIA EN MICROCONTROLADORES

Maquinas de Estado
Las mquinas de estado son una parte integral de la programacin de
software. Las mquinas de estado hacen al cdigo ms eficiente, ms fcil
de depurar y ayudan a organizar el flujo del programa.

U na Una Mquina de Estado Finita (FSM = Finite State Machine) est


basada en la idea de que hay un nmero finito de estados para un
sistema determinado. Por ejemplo, cuando una aplicacin enciende o
apaga un LED, existen dos estados; un estado es cuando el LED est
encendido y el otro cuando est apagado.

Las mquinas de estado requieren una Variable de Estado (State Variable -


SV). La variable de estado es un apuntador que mantiene un control del estado
en que se encuentra el microcontrolador y dirige el flujo del programa al
modulo de software correspondiente.

La variable de estado puede modificarse en los mdulos (o estados) de


software por si misma o por una funcin externa.

La primera ventaja de utilizar las mquinas de estado, es que promueve


buenas tcnicas de diseo de firmware. Cuando se comience a
implementar una aplicacin, piense sobre que estados son necesarios para
que funcione la aplicacin. Haga una lista de todas las piezas, o estados, de
una aplicacin y despus explore como se relacionan entre s. Esto ayudar
a prevenir se desarrollen bucles en el cdigo. Esta forma de pensar
tambin lleva al desarrollo de una herramienta de ingeniera muy til el
diagrama de flujo.

Las mquinas de estado tienen una caracterstica muy importante.


Siempre regresan a un punto en el cdigo, en el cual se canaliza el flujo
del programa por la variable de estado, al correspondiente modulo de
software. Esto provee varias ventajas:
Primero, esta caracterstica hace simple el llamado de tareas repetitivas.

Como por ejemplo, el refrescar el perro guardin (watchdog timer) de un


microcontrolador, revisar la veces que se presiona un botn de entrada o
comunicarse con una computadora que requiere una comunicacin
peridica, estos son ejemplos de tareas repetitivas.

2
INGENIERIA EN MICROCONTROLADORES

Una alternativa al uso de mquinas de estado es usar el cdigo de bucles o


loops infinitos. Para que el cdigo de bucles maneje tareas repetitivas, las
funciones que manejan estas tareas deben estar distribuidas a travs del
cdigo en cada uno de los bucles. Esto no solo es altamente ineficiente
sino que tambin es confuso para entenderlo.

La figura 1 muestra un diagrama de bloques, el cual ejemplifica cmo


lucira el cdigo ejemplo si una mquina de estado no fuera utilizado.
Comparado con la figura 2, que muestra un diagrama de bloque de un
cdigo basado en la mquina de estado, queda claro que usar una mquina
de estado disminuye la longitud del cdigo y la posibilidad de perder el
llamado de una tarea repetitiva.

Figura 1: Cdigo sin implementar la Maquina de Estados

3
INGENIERIA EN MICROCONTROLADORES

El hecho de que el firmware basado en la mquina de estado siempre


regrese al mismo punto en el cdigo, hace al firmware ms fcil de
depurar.

Cuando se encuentra una falla (bug), se debe establecer un punto de


ruptura en el punto de inicio. Entonces, pase a travs del programa estado
por estado hasta encontrar la falla.

Figura 2: Cdigo implementando la Maquina de Estados

Un ejemplo de una falla, sera si la variable de estado (SV) es modificada


incorrectamente en uno de los estados. Si esto sucede, un estado
incorrecto ser llamado la prxima vez que el flujo del programa regrese al
punto de inicio. De cualquier manera, al estar monitoreando la variable de
estado , ser ms fcil ver cuando un cambio no intencional se haga a la
SV y en cual estado la SV fue modificada incorrectamente.

4
INGENIERIA EN MICROCONTROLADORES

Otro beneficio de las mquinas de estado es el firmware que incorpora las


mquinas de estado naturalmente promueve un cdigo modular.

Para finalizar, la utilizacin de un cdigo Modular tiene sus beneficios


como lo son:
1. Mejoras y caractersticas especiales pueden aadirse fcilmente al
cdigo en revisiones posteriores conforme un producto evoluciona.
2. Los Mdulos pueden copiarse y pegarse en otras aplicaciones rpida y
fcilmente.
3. Otros programadores podrn entender el cdigo para as modificarlo si
en un futuro as se necesitara.

Implementacin:
Cuando se implementa el concepto de la maquina de estados, se debe de
elaborar una lluvia de ideas de todos los estados que se necesitan para una
determinada aplicacin. Una vez hecho esto se debe identificar el primer
estado. Acto seguido debemos responder la siguiente pregunta

Que condicin se necesita para salir de este estado y que estado es el


siguiente?

Dependiendo de lo que suceda en un estado en particular, la variable de


estado se incrementa o decrementa con el objetivo de pasar o saltar al
siguiente estado. Se sugiere la implementacin de un diagrama de flujo.
Finalmente se debe de crear lo mdulos de software de cada uno de los
estados de acuerdo a nuestro diagrama de flujo.

Implementacin de una maquina de estado en


lenguaje C y Ensamblador

La implementacin de una maquina de estados en lenguaje C, es muy fcil


ya que se hace uso de la sentencia Switch, el siguiente cdigo muestra
como se aplica este concepto:

5
INGENIERIA EN MICROCONTROLADORES

switch (STATE)
{
case (State0): // Encender LED0
break;
case (State1): // Encender LED1
break;
case (State2); // Encender LED0
break;
// ... y as continuamos
default:
STATE = State0 //Si por alguna razn un estado
//indefinido ocurre
}

La creacin de una maquina de estado en lenguaje ensamblador, es un poco


mas difcil. Para este ejemplo utilizamos los Microcontroladores PIC
(MICROCHIP). cuya arquitectura hace que para incrementar la variable de
estado debemos incrementar tambin el contador de Programa

Se debe tener cuidado cuando el contador de programa se incrementa, ya


que al hacer esto podemos saltar a un lugar equivocado del programa. Por lo
tanto es responsabilidad del programador verificar que cada salto sea el
correcto.

Inmediatamente de la rutina de incremento, esta una lista de gotos que


direccionan el flujo del programa hacia un estado. Este mtodo es llamado
goto computado. El siguiente programa utiliza un goto computado para
la implementacin de la maquina de estado.

6
INGENIERIA EN MICROCONTROLADORES

Iniciar
clrf STATE ; limpio la variable de estado
...

Inicio
call StateMachine
...
goto Inicio

StateMachine
movlw high StateTable
movwf PCLATH
movf STATE, W
andlw 03h
addlw low StateTable
btfsc STATUS, C
incf PCLATH, F
movwf PCL

StateTable
goto State0
goto State1
goto State2
goto State3

State0
...
incf STATE, F ;Ir al siguiente estado
return

State1
... incf STATE, F ;Ir al siguiente estado
return

7
INGENIERIA EN MICROCONTROLADORES

Bibliografa
.

Este articulo fue extrado de la nota de aplicacin de


DS40051B de Microchip

Traducido por: Yalautitla Miranda Flores


Elaborado por : Ing. Eric Lpez Prez
elp@i-micro.com

También podría gustarte