Chapter 1 


Chapter 2a
State Machine


What is a STATE MACHINE and do we need to learn about it?

Before we get into our simple method of programming a microcontroller, we will look at the term: STATE MACHINE and see if it is something FANTASTIC that we should cover. 
Learning about a "MACHINE that has STATES" also involves learning about FLOW DIAGRAMS and both of these are a way to break a complex task into simple sections before you start to program.
The only problem is this:
They both involve new terms and terminology such as drawing diagrams with squares and rectangles and diamonds and words such as STATE and EVENT.
In our method of "cut-and-paste" programming you are creating a linear program where the micro advances down the program and carries out an operation according to the instruction it is presently interpreting.
In fact, you are producing a FLOW DIAGRAM without using any of the technical terminology and creating a STATE MACHINE without even realising.
Thus you are not missing out on any BRILLIANT STRATEGY or CLEVER PROGRAMMING TRICKS.
The only BRILLIANT and CLEVER programming comes from some of the wizards of programming in the form of sub-routines to MULTIPLY and DIVIDE and these are contained in our library of sub-routines.

To show you are not missing out on anything, here is an article on STATE MACHINE:

One common way of conquering difficult software design problems is to use a STATE MACHINE. First you figure out all the states the software can be in. Then you determine all the inputs to the state machine—all the events that can cause the state machine to take some action or to change states. Finally you determine the state machine outputs—all the actions that the state machine can perform.

When your state machine design is done, you'll have a list of states, a list of events (inputs), and a set of action procedures for each state that describe what the state machine does for each event (outputs).

There are two ways to code a state machine. One way uses a set of nested statements. The outer has a case for each possible state. Each of these outer case has an inner with a case for each possible event. The actual code that gets selected performs the actions for that state/event. Alternately, the outer statement could have a case for each event, and the inner could have a case for each state.

Another more concise way of coding is to use a lookup table. First, number all your states consecutively, starting with 0 is a convenient way to do this. Do the same for your events. Then make up a set of tables, one table per state. Each table has one entry per event, in the same order as the event. Then the entire set of tables is arranged in the same order as the state. Each item in a table is the function to execute to perform the action for that particular event in that particular state.

enum states { STATE_1, STATE_2, STATE_3, MAX_STATES }

An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values we have.
enum  is short for enumeration - meaning to "count-off" or name one-by-one.

Introducing STATE MACHINE just produces more complexity to a discussion but you will learn lots of new and complex words.
However, we are here to keep things simple - not to show how complex we can get. 

(C) 2003 Hank Wallace
What Are State Machines?

Programmers today need every trick they can muster to reduce time to market and increase code reliability and maintainability. One of the tools that many programmers are somewhat familiar with but do not use often is the state machine. State machines are one of the most useful simple tools that we have at our disposal. They are not so much a different computing mechanism as a different thinking mechanism, allowing us to divide complex or tedious algorithms into manageable pieces.

The state machine is an abstract mechanism that has a number of well defined resting states. Inputs to the state machine cause the resting state to change depending on the intended purpose. We are concerned here with finite state machines (which have a finite number of states) implemented in software and hardware.

Small state machines are represented by bubble diagrams, with each bubble representing a resting state. Lines between the states are called edges or transitions. The state machine can occupy only one state at a time and can only transition from one state to another along the edges leading to other states, and only under the labeled conditions.

In our programming, we show how to deal with a complex problem by simply looking at each requirement as the micro advances down the program and dealing with the condition by going to a sub-routine.
This simplifies everything so you don't need to draw-up complex diagrams or learn anything else.
There is more than one way to KILL A CAT, than CHOKING IT WITH BUTTER.

 
12/06/14