Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:8fabd65058e2, 2020-12-10 (annotated)
- Committer:
- eencae
- Date:
- Thu Dec 10 13:29:01 2020 +0000
- Revision:
- 0:8fabd65058e2
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |