ET 283 Microprocessor Fundamentals


ET283 Microprocessor Fundamentals C 3, P 2, CR 4

This course presents the microprocessor/microcontroller as the principal component of embedded systems, providing information on the architecture and programming model using the C language. C programming techniques for arithmetic and logic operations along with flow control are introduced. The use of functions, I/O instructions and timers are presented with laboratory experiments.

Corequisites: ET282 Digital Electronics 2


Text: Embedded Controllers using C and Arduino/2E:  PDF   ODT   HTML   PRINT 

References: Arduino Cookbook, Michael Margolis, O'Reilly Media
Introduction to Embedded Systems: Using ANSI C and the Arduino Development Environment, David Russell, Moragn & Claypool Publishers

Tools: Scientific calculator, electronic breadboard. Your own Arduino Uno is convenient but not required.  

Lab Manual: Laboratory Manual for Embedded Controllers using C and Arduino/2E:  PDF   ODT   HTML   PRINT 

Video: See the Embedded Programming playlist on my YouTube channel: ElectronicsWithProfessorFiore 


The student will demonstrate an understanding of numbering systems commonly encountered in computer systems.

The student will display an understanding of microcontroller architecture and I/O structure.

The student will demonstrate a basic proficiency in the C programming language.

The student will demonstrate an understanding of the differences between programming a desktop computer and a microcontroller.

The student will demonstrate a basic knowledge of how to use a host computer to program a microcontroller or other external target.

Through the laboratory, the student will demonstrate practical insight and knowledge of interfacing and input/output devices.

Course Assessment Standards


Success in this course requires a good working knowledge of digital circuit principles along with basic semiconductor theory. A working knowledge of a modern programming language such as Python is strongly advised. The math level is mostly algebra. Note that smart devices will not be allowed during tests. For lab, you'll need the standard array of goodies as used in ET151 Circuits 1 and ET153 Intro to Electronics (breadboard, DMM, hook-up leads, etc.) You may also find the purchase of an Arduino Uno (or similar) development board to be handy. These are relatively inexpensive (typically $25 or less) and widely available (Parts Express, Digi-Key, Mouser, Spark Fun, AdaFruit, etc.). A USB cable is required for it. Finally, you may wish to obtain a desktop C compiler for your home system such as Pelles C (freeware). Unless otherwise specified, all lab exercises require a technical report due no later than one week after the exercise. The report should include the programming code and circuit schematic (where appropriate) along with a description of both and an analysis of the results. Late penalty is one letter grade for the first half week, two letter grades for the second half week. Reports are not accepted beyond two weeks and receive a grade of 0. Remember, plagiarism is grounds for failure.

Week-by-week progress and assignments. 


We start the course by diving right in to the C programming language from the desktop. We begin examing variable types and basic input/output (I/O) methods for text.

  • Reading: Course IntroductionC Language Basics parts I and II, C Storage Types and Scope. Be sure to read this overview on using Pelles C before lab.
  • Problems: Chapter 3, numbers 1 and 3, C Basics Worksheet. Chapter 4, numbers 1, 3, 5, 7 and 9. 
  • Video: Intro, Hello World, Variables Parts 1 & 2, Integer Operations, User Input from the Embedded Programming playlist.
  • Lab: Our first experiment will combine  Introduction to C Programming and Using Standard I/O. Here we'll look at basic methods of entering and displaying data via a shell or console window. Note: there is nothing to hand in for the first part. It is just an exercise used to get familiar with the coding process and should not take very long.

We look at basic decision making. 

  • Reading: C Arrays and Strings, begin C Conditionals and Looping
  • Problems: C Math Worksheet. Chapter 6, numbers 1, 3 and 5. Try converting an old Python program which uses a series of if statements into C.
  • Video: Spot the Errors, Conditionals from the Embedded Programming playlist.
  • Lab: This week Using Conditionals explores structures such as the if/else and switch/case

We examine iteration and looping methods this week.

  • Reading: Finish C Conditionals and Looping
  • Problems: Chapter 4, numbers 1, 3, 5 and 7. Try converting an old Python program which uses a for or while loop into C.
  • Video: Loops from the Embedded Programming playlist.
  • Lab:Iteration is this week's subject: Using Loops. Be sure to read How to Format Your Code.

Our discussion of pointers and addresses commences. Mastery of this material is imperative. Around here we will have our first test.

  • Reading: C Pointers. For the more advanced, read the section on structures. 
  • Problems: Chapter 8, numbers 1, 3, 5 and 7. C Pointers Worksheet. For the more advanced,  try the C Structures Worksheet.
  • Video: Pointers from the Embedded Programming playlist.
  • Lab: Intro to Addresses, Pointers and Handles is particularly important in order to make sense of future work. 

This week we turn our attention from desktop programming to programming embedded targets. We discuss computer hardware architecture and introduce the Arduino system.

  • Reading: Hardware Architecture, Embedded Programming and AVR ATmega 328p Overview
  • Problems: Load the Arduino development system onto your computer and make sure that you can download and run the Blinky program.
  • Video: Hello Arduino!, Uno Tester, GPIO Hardware from the Embedded Programming playlist.
  • Lab: This lab begins our work with the Arduino development system: Hello Arduino.

We look at the basic circuitry of GPIO (General Purpose Input/Output) ports, how to set their direction and how tio write to them.

  • Reading: Bits & Pieces: includes and defines, Bits & Pieces: Digital Output CircuitryBits & Pieces: pinMode and Bits & Pieces: digitalWrite
  • Problems: Seriously, dive into the include files. Look around the directories and also notice the coding style in the headers.
  • Video: DDR & pinMode, PORT registers & digitalWrite from the Embedded Programming playlist.
  • Lab:  Arduino Digital Output. This exercise examines controlling external on/off style devices.

Our week begins with a discussion of input ports (AKA PINs) and how to read them. 

  • Reading: Bits & Pieces: digitalRead
  • Video: PIN registers & digitalRead from the Embedded Programming playlist.
  • Lab: This lab examines how to obtain data from external two-state devices: Arduino Digital Input.

This week we spend time on a variety of other items of interest, including an introduction to obtaining analog input. 

  • Reading: Bits & Pieces: delay
  • Problems:  Exercise 24.3
  • Video: ADC & analogRead from the Embedded Programming playlist.
  • Lab: This week we turn our attention to reading continuously variable input devices: Arduino Analog Input.

We extend the concept of port reading to include analog input circuitry.

  • Reading:  Bits & Pieces: Analog Input Circuitry
  • Problems: Try the Embedded Coding Worksheet
  • Lab: The Arduino Reaction Timer is a fun lab which integrates many elements studied previously.

We continue our exploration of analog input signals via a variety of different sensors and associated applications. Around here we will have our second test (end of this week or possibly the next).

  • Reading:  Bits & Pieces: analogRead
  • Problems: Exercise 26.3
  • Video: 7 Segment Display Mux from the Embedded Programming playlist.
  • Lab: The Arduino Reaction Timer Redux revisits lasts week's exercise and extends the idea.

We begin our discussion of creating analog output signals.

  • Reading: Bits & Pieces: analogWrite.
  • Problems: Obtain and read the datasheet for the DAC0808 digital to analog converter.
  • Video: PWM & analogWrite from the Embedded Programming playlist.
  • Lab: This week we discover one method of controlling external devices in a continuous manner via Arduino Analog Output via PWM.

Timers are discussed this week.

  • Reading:  Bits & Pieces: Timer/Counters
  • Video: Timer/Counters from the Embedded Programming playlist.
  • Lab: There are many applications for counting items or events. Arduino Event Counter explores this topic.

We examine interrupts.

  • Reading: C Look-up Tables, Bits & Pieces: Interrupts 
  • Video: Interrupts Parts 1 & 2, Lookup Tables from the Embedded Programming playlist.
  • Lab: Arduino Arbitrary Waveform Generator is a two week assignment involving direct waveform synthesis. 


We wrap up the course. Time permitting, we have our last in-class test.

  • Reading: All that stuff you skipped earlier in the semester.
  • Problems: Study for last test/final exam!
  • Video: Round-robin switch, Auto Increment Switch from the Embedded Programming playlist.
  • Lab: We continue with Arduino Arbitrary Waveform Generator.

Home] [MVCC Home]

2021 Jim Fiore