Prevalence of microcontrollers and embedded systems in modern-day electrical systems. Microcontroller types. Microcontroller architecture. Using Assembly language and toolchain for programming microcontrollers. Status and control registers. Memory access. Programming microcontrollers using the ANSI C language. Pointers and arrays. Inline Assembly. Debugging microcontroller programs. Using general purpose input/output pins to interface external hardware to the microcontroller. Timers, counters and pulse width modulation. Internal and external interrupts. Serial communications: UART and SPI. Reading analog signals and Analog/Digital Converters (ADC). Software and hardware design basics. Project.