Counter using FSM

Committer:
eencae
Date:
Thu Dec 10 13:29:01 2020 +0000
Revision:
0:8fabd65058e2
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:8fabd65058e2 1 /*
eencae 0:8fabd65058e2 2
eencae 0:8fabd65058e2 3 2645_FSM_Counter
eencae 0:8fabd65058e2 4
eencae 0:8fabd65058e2 5 Sample code from ELEC2645
eencae 0:8fabd65058e2 6
eencae 0:8fabd65058e2 7 Demonstrates how to implement a simple FSM counter
eencae 0:8fabd65058e2 8
eencae 0:8fabd65058e2 9 (c) Craig A. Evans, University of Leeds, Dec 2020
eencae 0:8fabd65058e2 10
eencae 0:8fabd65058e2 11 */
eencae 0:8fabd65058e2 12 #include "mbed.h"
eencae 0:8fabd65058e2 13 #include "platform/mbed_thread.h" // for putting the thread to sleep
eencae 0:8fabd65058e2 14
eencae 0:8fabd65058e2 15 // create a bus for writing to the output (LEDs) at once
eencae 0:8fabd65058e2 16 BusOut output(LED4,LED3,LED2,LED1);
eencae 0:8fabd65058e2 17
eencae 0:8fabd65058e2 18 // array of states in the FSM, each element is the output of the counter
eencae 0:8fabd65058e2 19 // set the output in binary to make it easier, 0 is LED on, 1 is LED off
eencae 0:8fabd65058e2 20 int g_fsm[4] = {0b0001,0b0010,0b0100,0b1000};
eencae 0:8fabd65058e2 21
eencae 0:8fabd65058e2 22 int main()
eencae 0:8fabd65058e2 23 {
eencae 0:8fabd65058e2 24 int state = 0;
eencae 0:8fabd65058e2 25
eencae 0:8fabd65058e2 26 while(1) { // loop forever
eencae 0:8fabd65058e2 27
eencae 0:8fabd65058e2 28 output = g_fsm[state]; // output current state
eencae 0:8fabd65058e2 29
eencae 0:8fabd65058e2 30 // check which state we are in and see which the next state should be
eencae 0:8fabd65058e2 31 switch(state) {
eencae 0:8fabd65058e2 32 case 0:
eencae 0:8fabd65058e2 33 state = 1;
eencae 0:8fabd65058e2 34 break;
eencae 0:8fabd65058e2 35 case 1:
eencae 0:8fabd65058e2 36 state = 2;
eencae 0:8fabd65058e2 37 break;
eencae 0:8fabd65058e2 38 case 2:
eencae 0:8fabd65058e2 39 state = 3;
eencae 0:8fabd65058e2 40 break;
eencae 0:8fabd65058e2 41 case 3:
eencae 0:8fabd65058e2 42 state = 0;
eencae 0:8fabd65058e2 43 break;
eencae 0:8fabd65058e2 44 default:
eencae 0:8fabd65058e2 45 error("Invalid state");
eencae 0:8fabd65058e2 46 state = 0; //invalid state - call error routine
eencae 0:8fabd65058e2 47 // and jump to starting state i.e. state = 0
eencae 0:8fabd65058e2 48 break;
eencae 0:8fabd65058e2 49 }
eencae 0:8fabd65058e2 50
eencae 0:8fabd65058e2 51 thread_sleep_for(500); // 500 ms delay
eencae 0:8fabd65058e2 52 }
eencae 0:8fabd65058e2 53 }