By presenting the design of an asynchronous bus interface for
the 80C51 microcontroller we show that non-handshake communications
are needed to come to a clean and efficient solution.
We derive the bus design by applying four transformations to
an initial design that is completely based on handshake
communications.
In each of the four steps we first discuss the problem to be solved.
The final design uses both handshake and non-handshake communications,
the latter kind of communications being based on shared variables.
In principle communications through variables are less safe than
communications through handshake channels.
We propose so-called communication sessions to obtain safe
communications through variables.
Communication sessions are well-defined periods of time during which
the access rights with respect to a set of variables are transferred
from one activity to another.
We also show that such sessions can be implemented using conventional
handshake channels.