Embedded Software Engineering 101 ("ESE101") is a series that will teach you embedded software engineering.

We’ll start with a description of a basic microcontroller. Once you understand how a microcontroller works we’ll build on that until you’ll understand how a moderately complex embedded system like a Fitbit or Nest works.

New posts will come out weekly, and you can find all the posts here:

1. Embedded Software Engineering 101: Introduction

2. Microcontroller Basics

3. Microcontroller Basics Part Two: Three Simple Steps to a Better Microcontroller

4. Instruction Immediates

5. Microcontrollers Will Make You Jump Jump (Conditional Jumps)

6. Picking a Processor Platform

7. Introduction to the MSP430

8. Getting Started with the MSP430 Development Kit

9. MSP430 Development Environment Setup

10. Blinky and Breakpoints

11. Memories: It's All About Location, Location, Location

12. Microcontroller Peripherals, GPIOs, and Blinking Lights: Part 1

13. Microcontroller Peripherals, GPIOs, and Blinking Lights: Part 2

14. Microcontroller Peripherals, GPIOs, and Blinking Lights: Part 3

15: Building an Assembly Language Playground

16. Assembly Language Playground Followup: Infinite Loop

17. Wait For It... Delays in Microcontrollers

18. Delay Delay (why there was no real post this week)

19. GPIO Inputs Part 1

20. GPIO Inputs Part 2: Schematics, Buttons, and Pull-Ups

21. Chip Errata (Hardware Bugs)

22. GPIO Inputs Part 3: This Time We Really Turn on the LED with a Button, I Promise

23. Interrupts and Cows

24. Interrupts on the MSP430

25. Using Interrupts To Blink A Light

26. Introduction to Timers

27. Configuring MSP430 Timers

28. An MSP430 Timer Example

29. Switching from Assembly to C: Part 1

30. Switching from Assembly to C: Part 2

31. Switching from Assembly to C: Part 3

32. Switching from Assembly to C: Part 4

33. C is for Cookie, and for C