From Bare Metal micro:bit
Revision as of 13:47, 28 June 2021 by Mike (talk | contribs) (Created page with "==Part 1: Machine code programming== The first third of the book is about programming at the machine level: instructions, how they are implemented by a computer, and how they...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Part 1: Machine code programming

The first third of the book is about programming at the machine level: instructions, how they are implemented by a computer, and how they can be combined to carry put familiar programming tasks.

  • Introducing the micro:bit.
  • Experiment 1 – Building a program. Check you can build and upload a simple program (written in pure C) that echoes lines typed on the terminal.
  • Experiment 2 – Machine instructions. Investigate the effect of single machine instructions using an interactive program.
  • Experiment 3 – Loops. Write programs for multiplication and division that contain loops.
  • Experiment 4 – Numbers. Explore number representations and conditional branches.
  • Experiment 5 – Subroutines. Learn how to define and call subroutines to give structure to a larger program.
  • Experiment 6 – Memory and arrays. Exploit instructions that load and store data in RAM.
  • Experiment 7 – A buffer overrun attack. Build a working (but harmless) model of a computer virus.

Part 2: Input/output devices

This part of the book is about programming I/O devices: how input and output happens by reading and writing device registers, and how we can use interrupts to make the computer respond to events.

  • Experiment 8 – Digital input/output. Use device registers to control I/O pins and light LEDs.
  • Experiment 9 – Pure assembly language. Flash an LED with a minimal program written in assembly language.
  • Experiment 10 – Serial communication. Use a serial device to transmit characters.
  • Experiment 11 – Interrupts for I/O. Control the serial device with interrupts to free the processor.
  • Experiment 12 – Interrupt mechanism. Plot gaps in a waveform to measure the time needed to handle interrupts.
  • Experiment 13 – Neopixels. Use assembly language to make a bit-banged implementation of the protocol for WS2812 'NeoPixel' LEDs.

Part 3: An embedded operating system

The last third of the book introduces micro:bian, a tiny embedded operating system based on message passing, and uses it to organise programs that contain multiple processes interleaved with each other.

  • Introducing micro:bian.
  • Experiment 14 – Processes. Use micro:bian processes to perform multiple tasks concurrently.
  • Experiment 15 – Messages. Use messages to communicate between processes.
  • Experiment 16 – Synchronisation. Synchronise the actions of multiple processes by making them exchange messages.
  • Experiment 17 – Device drivers. Manage I/O devices using driver processes that receive interrupts as messages.
  • Experiment 18 – I2C-based spirit level. Access the micro:bit accelerometer over the I2C bus to make a 2D spirit level.
  • Experiment 19 – Servo motors. Use a timer to generate the signals needed to control servo motors.
  • Experiment 20 – Radio. Communicate between multiple micro:bits using the in-built radio.
  • Experiment 21 – Remote-controlled car. Use servos and radio to make a remote-controlled car.


  • Appendix A: Hardware setup.
  • Appendix B: Software setup.
  • Appendix C: A brief guide to C.
  • Appendix D: Thumb code reference.
  • Appendix E: micro:bian reference.