#include <xc.h>
#include "config.h"
#define _XTAL_FREQ 32000000
struct State{
unsigned long Out;
unsigned long Time;
unsigned Next[4];};
typedef const struct State Styp;
#define goN 0
#define waitN 1
#define goE 2
#define waitE 3
//definir estructura maquina de estados
Styp FSM[4]={
{0x21,3000,{goN,waitN,goN,waitN}},
{0x22,500,{goE,goE,goE,goE}},
{0x0c,3000,{goE,goE,waitE,waitE}},
{0x14,500,{goN,goN,goN,goN}}};
unsigned char actual;
unsigned input;
void main(void) {
int x;
//Oscilador
OSCCONbits.IRCF=0b1110;
OSCCONbits.SCS=00;
//Puertos
ANSELB=0;//Puerto A digital
TRISB=0;//Puerto B salidas
TRISC=255;//PuertoC entradas
//*****************
actual=goN;
while(1){
//FSM engine
LATB=FSM[actual].Out;
for(x=0;x<FSM[actual].Time;x++)
__delay_ms(1);
input=PORTC;
actual=FSM[actual].Next[input];
}
return;
}