Introduction to Embedded Systems: Interfacing to the Freescale 9S12

Jonathan W. Valvano, Cengage Publishing, ISBN-10: 049541137X | ISBN-13: 9780495411376

Web videos of the Example lessons from the book  
Readme movies about TExaS
Table of Contents
On-line homework problems

Cengage Learning Publisher's Website
Download starter files for the tutorials at the end of each chapter

                  Embedded computer systems are electronic systems that include a microcomputer to perform  specific dedicated tasks. The computer is hidden inside these products. Embedded systems are ubiquitous. Every week millions of tiny computer chips come pouring out of factories like Freescale, Microchip, Philips, Texas Instruments, Silicon Labs, and Mitsubishi finding their way into our everyday products. Our global economy, our production of food, our transportation systems, our military defense, our communication systems, and even our quality of life depend on the efficiency and effectiveness of these embedded systems. Engineers play a major role in all phases of this effort: planning, design, analysis, manufacturing, and marketing. This book provides an introduction to embedded systems, including both hardware interfacing and software fundamentals.
                  This book employs a bottom-up educational approach. The overall educational objective is to allow students to discover how the computer interacts with its environment. It will provide hands-on experiences of how an embedded system could be used to solve Electrical Engineering (EE) problems. The focus will be understanding and analysis, with an introduction to design. The optical sensors, motors, sampling ADCs and DACs are the chosen mechanism to bridge the Computer Engineering (CE) and EE worlds. EE concepts include Ohms Law, LED voltage/current, resistance measurement, and stepper motor control. CE concepts include I/O device drivers, debugging, stacks, queues, local variables and interrupts. This book is based on the Freescale 9S12. This book can be used effectively with any of the 9S12 derivatives, such as 9S12C32, 9S12DG256, 9S12DP512, and 9S12E128. The hardware construction is performed on a breadboard and debugged using a multimeter (students learn to measure voltage and resistance). Software is developed in 9S12 assembly; labs may be simulated-only or first simulated then run on the real 9S12 system. Software debugging occurs during the simulation stage. Device testing occurs on the final product.
                  One way to sort the broad range of topics within EE and CE is to group them into three categories: components, interfaces, and systems. Electrical and Computer Engineering curriculi devote considerable effort at teaching how to design the components within a system. Components include physical devices, analog circuits, digital circuits, power circuits, digital signal processing, data structures, and software algorithms. Interfacing in general and this book in specific address the important task of connecting these components together. So, one effective way to educate engineering students is to first teach them how to build components, then teach them how to connect components together (this book). After the student learns how to build things and connect them together, then the student can taught how to build systems. Of course, once a system is complete it can be interfaced with other systems to solve more complex problems.
                The book is essentially organized into three parts. Chapters 1 through 4 provide a basic introduction to computer architecture, representation of information, and assembly language programming. Parallel ports, switches and LEDs are presented early in Chapter 2 so that students can write software that actually does something. Chapters 5, 6, 7, and 10 provide an in-depth treatment of software design as it applies to embedded systems. Interfacing and applications of embedded systems are presented in Chapters 8, 9, and 11.

The overall objective of this book is to present basic computer architecture, teach assembly language programming, and present an introduction to interfacing. Most universities teach assembly language programming not because employers wish to hire engineers and scientists ready to produce assembly code, but rather, because it affords a concrete approach for teaching how software works. Furthermore, an embedded system is an effective vehicle around which to introduce architecture, programming and interfacing because the components are simple and inexpensive. The book describes both general processes and specific details involved in embedded system design. In particular, detailed case studies are used to illustrate fundamental concepts, and laboratory assignments are provided. The specific objectives of this book include the understanding of:
• the basic procedures involved in hardware/software simulation,
• how information is represented on the computer,
• the basic arithmetic and logical operations performed by the computer,
• the fundamental architecture of the 9S12 family microcomputers,
• the input/output operations and synchronization,
• assembly language programming: considering both function and style,
• simple hardware interfaces, including 
switches, keyboards, LEDs, LCDs, DC motors, DACs, ADCs, and serial ports,
• debugging techniques
breakpoints, scanpoints, profiles, monitors, voltmeters, oscilloscopes, logic analyzers.
• program structures with a comparison between assembly and C,
• modular programming,
• elementary data structures,
• interrupt programming.

This book does not discuss in detail every 9S12 instruction, but rather presents some of the instructions and uses them to discuss the general issues of representation of information, computer architecture, and developing embedded systems. In contrast, the Freescale programming reference guides do give details of each assembly instruction. In a similar manner, the Freescale microcomputer technical reference manuals explain all the I/O port functions. In other words, you will use this book along with the manuals from Freescale. A web site  contains many reference documents for this book.

This book is intended for an introductory laboratory course in microcomputer programming and/or microcomputer interfacing. It is assumed the student has some knowledge of programming, covering concepts such as conditionals, for-loops, while-loops, functions, parameter passing, and arrays. Specific knowledge of C is not required, but C programs are presented throughout the book in an effort to explain the assembly language programs. In addition, some prior knowledge about digital logic is desired, but not necessary, covering topics such as not gates, and gates, or gates and D flip-flops. Students will need a fundamental knowledge of resistors, capacitors, and inductors, as typically covered in a freshmen physics class on electromagnetics. Calculus is not required for this book. For more advanced treatment of microcomputer interfacing and embedded systems, see Embedded Microcomputer Systems: Real Time Interfacing Second Edition by Jonathan W. Valvano, published by Thompson, copyright (c) 2006.

Special features
This book incorporates a number of special features specifically designed for the beginning engineer. An effective educational approach is to learn by doing. The first action component of the book is the use of checkpoints, which can be found throughout the book. A checkpoint is a short question meant as an immediate feedback mechanism for the reader to evaluate his or her level of comprehension. Checkpoints should be performed while reading the chapter. Answers to checkpoints are given in Appendix 5. The second action component of the book is the examples. Design examples are included within each chapter. The purpose of the examples is to apply knowledge presented in that chapter to solve a specific problem. The third action component is the tutorials. Each tutorial includes a sequence of actions (specific things for the reader to do) and a list of questions. Tutorials are meant to be performed without supervision, and should be performed after reading the chapter, but before attempting the labs or homework. Answers to the tutorial questions are also given in Appendix 5. The most important action components of the book are the laboratory assignments, which can be found at the end of each chapter. Additional labs, and the tutorials can be found on the web site Each laboratory solution can first be built and tested using the TExaS simulator, then downloaded an run on an actual 9S12. Only by performing the laboratory assignments can the reader truly assimilate the hardware and software concepts introduced in this book. Laboratories are meant to be performed under the supervision of an instructor, and involve the classic engineering processes of design, construction, debugging, and evaluation.  Homework problems can also be found at the end of each chapter. These problems are less detailed, and are intended to evaluate the reader’s understanding of specific topics introduced in the chapter.

How to teach a course based on this book
  The first step in the design of any course is to create a list of educational objectives. This book along with the materials on the book web site could be used to teach introductory microcomputer programming and/or microcomputer interfacing. Specific educational objectives that are supported in this book are microcomputer architecture, number systems, assembly language programming, debugging, I/O device interfacing, I/O device synchronization, subroutines, local variables, elementary data structures, and interrupts.
The next important decision to make is the organization of the student laboratory. The importance of practical "hands on" experience is critical in the educational process. Unfortunately, space, staff, and money constraints force all of us to compromise, doing the best we can. On the other hand, the role of simulation is becoming increasingly important as the race for technological superiority is run with shorter and shorter design cycle times. Consequently, it is important to expose our students to the all phases of engineering design including problem specification, conceptualization, simulation, construction, and analysis. Universities that adopt this book will be allowed to download, rewrite, print out and distribute the laboratory assignments presented in this book.
The first laboratory configuration is based entirely on material included with book, and involves no extra costs. Each book allows the student to download and install the TExaS application on a single computer. Students, for the most part, work off campus and come to a TA station for help or lab grading. In this configuration you can either develop software in assembly using the TExaS assembler or develop C programs using the special version of Metrowerks CodeWarrior for the 9S12. The simulator itself becomes the platform on which the lab assignments are developed and tested. 
A second laboratory configuration combines simulation with some real microcomputer experiments. Labs can be first simulated, then run on a real microcomputer. Students are given or loaned a 9S12 development board like the Dragon12 board from Wytec ( or the Adapt9S12 board from Technological Arts ( Students can work off campus on the simulation aspects of the labs, then come to a laboratory for access to test equipment such as voltmeters and oscilloscopes. In this configuration, students first could write and debug assembly software using the TExaS simulator, then use TExaS to download and test on a real 9S12 board. TExaS can be used with any 9S12 that contains the Serial Monitor in protected EEPROM $F800 to $FFFF. The special version of Metrowerks CodeWarrior for the 9S12 could also be used to develop either assembly or C using either the serial monitor or a background debug module (BDM) hardware pod. This is more expensive than the first configuration because actual microcomputer hardware and debugging systems are required. 

What's on the Book Web site?
1) TExaS installer download. Each student purchasing a book can download and install TExaS. TExaS is a complete editor, assembler, and simulator for the Freescale 9S12 microcomputer. It simulates external hardware, I/O ports, interrupts, memory, and program execution. It is intended as a learning tool for embedded systems. This software is not freeware, but the purchase of the book entitles the owner to install one copy of the program. Once installed TExaS creates many subdirectories with example applications. How to download and install TExaS
A) Go to Cengage site
B) Click Student Companion Site for Introduction to Embedded Systems: Interfacing to the Freescale 9S12, 1st Edition
C) Click TExaS Software (on left)
D) Download 54 Meg zip file and unzip
E) Execute setup.exe in folder created by the zip file.
F) In Setup Type, choose Custom.
G) Select only 9S12DP (whatever microcontroller you will be using). The GCC is a huge and not very efficient compiler, and the examples and manuals on the web are more recent.
H) Delete zip file and the folder created containing the setup.exe.
2) There are multiple short video tutorials about developing assembly language programs on TExaS. See 
3) There is a directory containing data sheets in Adobe's pdf format. This information does not need to be copied to your hard drive; you can simply read the data sheets from the web itself. In particular there are data sheets for microcomputers, digital logic, memory chips, op amps, ADCs, DACs, timer chips and interface chips. See
4) There is a directory containing example applications. These examples include circuit diagrams and software that can be downloaded and run on the actual 9S12 board.
5) There is a directory containing lecture notes and laboratory assignments based on this book.
6) Free web-based homework service, see  and 

Go to Home Page

Last updated January 1, 2010 Send comments to: Jonathan W. Valvano .