Simple IO

The simple IO is available for all supported microprocessors (see the [Status]).


It is common practice to define the microprocessor in the Makefile


and access the part specific definitions in your Ada code via AVR.MCU. That is

with AVR;                         use AVR;
with AVR.MCU;

All MCU registers can be accessed as arrays of 8 booleans, ie. they have the type AVR.Bits_In_Byte. See the file Single bits can either be True or False. There are renamed constants

True, High, Set


False, Low, Clear

that you can use equivalently.

For setting bits in the port data direction registers you can also use





Let's say you want to switch a LED that is connected to ground and pin 4 of port D.

Define two boolean variables for easy access:

LED_DD : Boolean renames MCU.DDRD_Bits(4);
LED    : Boolean renames MCU.PortD_Bits(4);

and then set the port direction as output and pull the line high

LED_DD := DD_Output;
LED := High;


Reading an input uses the same technique. Assume a key between pin 1 of port D and ground. If pressed it pulls the input pin to low level. If open the internal pull-up resistor ensures high level. Again we define corresponding boolean variables for access to the mcu's registers

Key_DD      : Boolean renames MCU.DDRD_Bits(1);
Key_Pull_Up : Boolean renames MCU.PortD_Bits(1);
Key         : Boolean renames MCU.PinD_Bits(1);

Now we set the port direction, activate the internal pull-up and then read the status of the key.

Key_DD := DD_Input;
Key_Pull_Up := High;
-- key pressed is indicated by 0V
if Key = Low then
   -- do something if the key was pressed


Wiki: Examples
Wiki: Home
Wiki: Introductory Tutorial
Wiki: Status

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

No, thanks