The present code executes a counter that checks current state and determines the next state.

Dependencies:   mbed

Fork of 2645_FSM_Counter by Craig Evans

Committer:
bonnyngangu
Date:
Mon May 09 11:45:19 2016 +0000
Revision:
2:324696ae91a9
Parent:
1:81b129bec569
The counter checks which state we are in and see which the next state should be.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:e8be38c50b44 1 /*
eencae 0:e8be38c50b44 2
bonnyngangu 2:324696ae91a9 3 Task1_FSM_Counter
eencae 0:e8be38c50b44 4
eencae 0:e8be38c50b44 5 Sample code from ELEC2645 Week 16 Lab
eencae 0:e8be38c50b44 6
eencae 0:e8be38c50b44 7 Demonstrates how to implement a simple FSM counter
eencae 0:e8be38c50b44 8
bonnyngangu 2:324696ae91a9 9 (c) Bonny Ngangu, University of Leeds, Jan 2016
eencae 0:e8be38c50b44 10
eencae 0:e8be38c50b44 11 */
eencae 0:e8be38c50b44 12
eencae 0:e8be38c50b44 13 #include "mbed.h"
eencae 0:e8be38c50b44 14
bonnyngangu 2:324696ae91a9 15 // K64F on-board 4 LEDs
eencae 0:e8be38c50b44 16 DigitalOut r_led(LED_RED);
eencae 0:e8be38c50b44 17 DigitalOut g_led(LED_GREEN);
eencae 0:e8be38c50b44 18 DigitalOut b_led(LED_BLUE);
bonnyngangu 2:324696ae91a9 19 DigitalOut y_led(LED_BLUE);
bonnyngangu 2:324696ae91a9 20
eencae 0:e8be38c50b44 21 // K64F on-board switches
eencae 0:e8be38c50b44 22 InterruptIn sw2(SW2);
eencae 0:e8be38c50b44 23 InterruptIn sw3(SW3);
eencae 0:e8be38c50b44 24
eencae 0:e8be38c50b44 25 // LEDs to display counter output
eencae 0:e8be38c50b44 26 // connect up external LEDs to these pins with appropriate current-limiting resistor
eencae 0:e8be38c50b44 27 BusOut output(PTB2,PTB3,PTB10,PTB11);
eencae 0:e8be38c50b44 28
eencae 0:e8be38c50b44 29 // array of states in the FSM, each element is the output of the counter
bonnyngangu 2:324696ae91a9 30 int fsm[4] = {8,4,2,1}; //reversed order counter going down
eencae 0:e8be38c50b44 31
eencae 0:e8be38c50b44 32 // function prototypes
eencae 0:e8be38c50b44 33 // error function hangs flashing an LED
eencae 0:e8be38c50b44 34 void error();
eencae 0:e8be38c50b44 35 // set-up the on-board LEDs and switches
eencae 0:e8be38c50b44 36 void init_K64F();
eencae 0:e8be38c50b44 37
eencae 0:e8be38c50b44 38 int main()
eencae 0:e8be38c50b44 39 {
eencae 0:e8be38c50b44 40 init_K64F();
eencae 0:e8be38c50b44 41 // set inital state
eencae 0:e8be38c50b44 42 int state = 0;
eencae 0:e8be38c50b44 43
eencae 0:e8be38c50b44 44 while(1) { // loop forever
eencae 0:e8be38c50b44 45
eencae 0:e8be38c50b44 46 output = fsm[state]; // output current state
eencae 0:e8be38c50b44 47
eencae 0:e8be38c50b44 48 // check which state we are in and see which the next state should be
eencae 0:e8be38c50b44 49 switch(state) {
bonnyngangu 2:324696ae91a9 50 case 0://0
bonnyngangu 2:324696ae91a9 51 state = 1;//1
eencae 0:e8be38c50b44 52 break;
bonnyngangu 2:324696ae91a9 53 case 1://1
bonnyngangu 2:324696ae91a9 54 state = 2;//2
eencae 0:e8be38c50b44 55 break;
bonnyngangu 2:324696ae91a9 56 case 2://2
bonnyngangu 2:324696ae91a9 57 state = 3;//3
eencae 0:e8be38c50b44 58 break;
bonnyngangu 2:324696ae91a9 59 case 3://3
bonnyngangu 2:324696ae91a9 60 state = 0;//0
eencae 0:e8be38c50b44 61 break;
eencae 0:e8be38c50b44 62 default:
eencae 0:e8be38c50b44 63 error(); //invalid state - call error routine
eencae 0:e8be38c50b44 64 // or could jump to starting state i.e. state = 0
eencae 0:e8be38c50b44 65 break;
eencae 0:e8be38c50b44 66 }
eencae 0:e8be38c50b44 67
eencae 0:e8be38c50b44 68 wait(0.2); // small delay
eencae 0:e8be38c50b44 69
eencae 0:e8be38c50b44 70 }
eencae 0:e8be38c50b44 71 }
eencae 0:e8be38c50b44 72
eencae 0:e8be38c50b44 73 void init_K64F()
eencae 0:e8be38c50b44 74 {
eencae 0:e8be38c50b44 75 // on-board LEDs are active-low, so set pin high to turn them off.
eencae 0:e8be38c50b44 76 r_led = 1;
eencae 0:e8be38c50b44 77 g_led = 1;
bonnyngangu 2:324696ae91a9 78 b_led = 1;
bonnyngangu 2:324696ae91a9 79 y_led = 1;
eencae 0:e8be38c50b44 80
eencae 0:e8be38c50b44 81 // since the on-board switches have external pull-ups, we should disable the internal pull-down
eencae 0:e8be38c50b44 82 // resistors that are enabled by default using InterruptIn
eencae 0:e8be38c50b44 83 sw2.mode(PullNone);
eencae 0:e8be38c50b44 84 sw3.mode(PullNone);
eencae 0:e8be38c50b44 85
eencae 0:e8be38c50b44 86 }
eencae 0:e8be38c50b44 87
eencae 0:e8be38c50b44 88 void error()
eencae 0:e8be38c50b44 89 {
eencae 0:e8be38c50b44 90 while(1) { // if error, hang while flashing error message
eencae 0:e8be38c50b44 91 r_led = 0;
eencae 0:e8be38c50b44 92 wait(0.2);
eencae 0:e8be38c50b44 93 r_led = 1;
eencae 0:e8be38c50b44 94 wait(0.2);
eencae 0:e8be38c50b44 95 }
eencae 0:e8be38c50b44 96 }