This document is a textbook on embedded systems programming with the Microchip PIC16F877 microcontroller. It introduces embedded systems and their prevalence. It discusses four levels of embedded systems in terms of size, options, and complexity - from high level systems like air traffic control to low level systems like appliances. The book will cover fundamental and advanced embedded programming techniques that can apply to any microcontroller, as well as an introduction to digital signal processing using the PIC16F877.