Embedded Systems - Quick Guide
Embedded Systems - Quick Guide
Embedded Systems - Quick Guide
System
A system is an arrangement in which all its unit assemble work together according to a set of rules.
It can also be defined as a way of working, organizing or doing one or many tasks according to a
fixed plan. For example, a watch is a time displaying system. Its components follow a set of rules to
show time. If one of its parts fails, the watch will stop working. So we can say, in a system, all its
subcomponents depend on each other.
Embedded System
As its name suggests, Embedded means something that is attached to another thing. An
embedded system can be thought of as a computer hardware system having software embedded
in it. An embedded system can be an independent system or it can be a part of a large system. An
embedded system is a microcontroller or microprocessor based system which is designed to
perform a specific task. For example, a fire alarm is an embedded system; it will sense only smoke.
An embedded system has three components −
It has hardware.
It has application software.
It has Real Time Operating system (RTOS) that supervises the application software and
provide mechanism to let the processor run a process as per scheduling by following a
plan to control the latencies. RTOS defines the way the system works. It sets the rules
during the execution of application program. A small scale embedded system may not
have RTOS.
So we can define an embedded system as a Microcontroller based, software driven, reliable, real-
time control system.
implementation's features such as its cost, size, power, and performance. It must be of a
size to fit on a single chip, must perform fast enough to process data in real time and
consume minimum power to extend battery life.
Reactive and Real time − Many embedded systems must continually react to changes in
the system's environment and must compute certain results in real time without any delay.
Consider an example of a car cruise controller; it continually monitors and reacts to speed
and brake sensors. It must compute acceleration or de-accelerations repeatedly within a
limited time; a delayed computation can result in failure to control of the car.
Microprocessors based − It must be microprocessor or microcontroller based.
Memory − It must have a memory, as its software usually embeds in ROM. It does not
need any secondary memories in the computer.
Connected − It must have connected peripherals to connect input and output devices.
HW-SW systems − Software is used for more features and flexibility. Hardware is used for
performance and security.
Advantages
Easily Customizable
Low power consumption
Low cost
Enhanced performance
Disadvantages
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 2/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Sensor − It measures the physical quantity and converts it to an electrical signal which can
be read by an observer or by any electronic instrument like an A2D converter. A sensor
stores the measured quantity to the memory.
A-D Converter − An analog-to-digital converter converts the analog signal sent by the
sensor into a digital signal.
Processor & ASICs − Processors process the data to measure the output and store it to
the memory.
D-A Converter − A digital-to-analog converter converts the digital data fed by the
processor to analog data
Actuator − An actuator compares the output given by the D-A Converter to the actual
(expected) output stored in it and stores the approved output.
Processor is the heart of an embedded system. It is the basic unit that takes inputs and produces
an output after processing the data. For an embedded system designer, it is necessary to have the
knowledge of both microprocessors and microcontrollers.
Processors in a System
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 3/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The EU includes the Arithmetic and Logical Unit (ALU) and also the circuits that execute
instructions for a program control task such as interrupt, or jump to another set of instructions.
A processor runs the cycles of fetch and executes the instructions in the same sequence as they
are fetched from memory.
Types of Processors
Microprocessor
Microcontroller
Embedded Processor
Digital Signal Processor
Media Processor
Application Specific System Processor (ASSP)
Application Specific Instruction Processors (ASIPs)
GPP core(s) or ASIP core(s) on either an Application Specific Integrated Circuit (ASIC) or
a Very Large Scale Integration (VLSI) circuit.
Microprocessor
A microprocessor is a single VLSI chip having a CPU. In addition, it may also have other units such
as coaches, floating point processing arithmetic unit, and pipelining units that help in faster
processing of instructions.
Earlier generation microprocessors’ fetch-and-execute cycle was guided by a clock frequency of
order of ~1 MHz. Processors now operate at a clock frequency of 2GHz
Microcontroller
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 4/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
A microcontroller is a single-chip VLSI unit (also called microcomputer) which, although having
limited computational capabilities, possesses enhanced input/output capability and a number of on-
chip functional units.
Microcontrollers are particularly used in embedded systems for real-time control applications with
on-chip program memory and devices.
Microprocessor vs Microcontroller
Let us now take a look at the most notable differences between a microprocessor and a
microcontroller.
Microprocessor Microcontroller
Microprocessors are multitasking in nature. Can Single task oriented. For example, a washing
perform multiple tasks at a time. For example, on machine is designed for washing clothes only.
computer we can play music while writing text in
text editor.
RAM, ROM, I/O Ports, and Timers can be added RAM, ROM, I/O Ports, and Timers cannot be
externally and can vary in numbers. added externally. These components are to
be embedded together on a chip and are
fixed in numbers.
Designers can decide the number of memory or Fixed number for memory or I/O makes a
I/O ports needed. microcontroller ideal for a limited but specific
task.
External support of external memory and I/O Microcontrollers are lightweight and cheaper
ports makes a microprocessor-based system than a microprocessor.
heavier and costlier.
External devices require more space and their A microcontroller-based system consumes
power consumption is higher. less power and takes less space.
The 8051 microcontrollers work with 8-bit data bus. So they can support external data memory up
to 64K and external program memory of 64k at best. Collectively, 8051 microcontrollers can
address 128k of external memory.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 5/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
When data and code lie in different memory blocks, then the architecture is referred as Harvard
architecture. In case data and code lie in the same memory block, then the architecture is referred
as Von Neumann architecture.
Von-Neumann architecture supports simple hardware. It allows the use of a single, sequential
memory. Today's processing speeds vastly outpace memory access times, and we employ a very
fast but small amount of memory (cache) local to the processor.
Harvard Architecture
The Harvard architecture offers separate storage and signal buses for instructions and data. This
architecture has data storage entirely contained within the CPU, and there is no access to the
instruction storage as data. Computers have separate memory areas for program instructions and
data using internal data buses, allowing simultaneous access to both instructions and data.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 6/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Programs needed to be loaded by an operator; the processor could not boot itself. In a Harvard
architecture, there is no need to make the two memories share properties.
The following points distinguish the Von Neumann Architecture from the Harvard Architecture.
Single memory to be shared by both code and data. Separate memories for code and data.
Processor needs to fetch code in a separate clock cycle Single clock cycle is sufficient, as
and data in another clock cycle. So it requires two clock separate buses are used to access
cycles. code and data.
Higher speed, thus less time consuming. Slower in speed, thus more time-
consuming.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 7/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
In the early 1980s, computer designers recommended that computers should use fewer
instructions with simple constructs so that they can be executed much faster within the CPU
without having to use memory. Such computers are classified as Reduced Instruction Set
Computer or RISC.
CISC vs RISC
CISC RISC
Larger set of instructions. Easy to program Smaller set of Instructions. Difficult to program.
Many addressing modes causing complex Few addressing modes, fix instruction format.
instruction formats.
Higher clock cycles per second. Low clock cycle per second.
Control unit implements large instruction set Each instruction is to be executed by hardware.
using micro-program unit.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 8/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Compiler
A compiler is a computer program (or a set of programs) that transforms the source code written in
a programming language (the source language) into another computer language (normally binary
format). The most common reason for conversion is to create an executable program. The name
"compiler" is primarily used for programs that translate the source code from a highlevel
programming language to a low-level language (e.g., assembly language or machine code).
Cross-Compiler
If the compiled program can run on a computer having different CPU or operating system than the
computer on which the compiler compiled the program, then that compiler is known as a cross-
compiler.
Decompiler
A program that can translate a program from a low-level language to a high-level language is called
a decompiler.
Language Converter
A program that translates programs written in different high-level languages is normally called a
language translator, source to source translator, or language converter.
A compiler is likely to perform the following operations −
Preprocessing
Parsing
Semantic Analysis (Syntax-directed translation)
Code generation
Code optimization
Assemblers
An assembler is a program that takes basic computer instructions (called as assembly language)
and converts them into a pattern of bits that the computer's processor can use to perform its basic
operations. An assembler creates object code by translating assembly instruction mnemonics into
opcodes, resolving symbolic names to memory locations. Assembly language uses a mnemonic to
represent each low-level machine operation (opcode).
Debugging is a methodical process to find and reduce the number of bugs in a computer program
or a piece of electronic hardware, so that it works as expected. Debugging is difficult when
subsystems are tightly coupled, because a small change in one subsystem can create bugs in
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 9/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
another. The debugging tools used in embedded systems differ greatly in terms of their
development time and debugging features. We will discuss here the following debugging tools −
Simulators
Microcontroller starter kits
Emulator
Simulators
Code is tested for the MCU / system by simulating it on the host computer used for code
development. Simulators try to model the behavior of the complete microcontroller in software.
Functions of Simulators
Monitors the detailed information of a source code part with labels and symbolic arguments
as the execution goes on for each single step.
Provides the status of RAM and simulated ports of the target system for each single step
execution.
Monitors system response and determines throughput.
Provides trace of the output of contents of program counter versus the processor registers.
Provides the detailed meaning of the present command.
Monitors the detailed information of the simulator commands as these are entered from the
keyboard or selected from the menu.
Supports the conditions (up to 8 or 16 or 32 conditions) and unconditional breakpoints.
Provides breakpoints and the trace which are together the important testing and debugging
tool.
Facilitates synchronizing the internal peripherals and delays.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 10/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
A big advantage of these kits over simulators is that they work in real-time and thus allow for easy
input/output functionality verification. Starter kits, however, are completely sufficient and the
cheapest option to develop simple microcontroller projects.
Emulators
An emulator is a hardware kit or a software program or can be both which emulates the functions of
one computer system (the guest) in another computer system (the host), different from the first one,
so that the emulated behavior closely resembles the behavior of the real system (the guest).
Emulation refers to the ability of a computer program in an electronic device to emulate (imitate)
another program or device. Emulation focuses on recreating an original computer environment.
Emulators have the ability to maintain a closer connection to the authenticity of the digital object.
An emulator helps the user to work on any kind of application or operating system on a platform in
a similar way as the software runs as in its original environment.
Embedded systems communicate with the outside world via their peripherals, such as following
&mins;
Serial Communication Interfaces (SCI) like RS-232, RS-422, RS-485, etc.
Synchronous Serial Communication Interface like I2C, SPI, SSC, and ESSI
Universal Serial Bus (USB)
Multi Media Cards (SD Cards, Compact Flash, etc.)
Networks like Ethernet, LonWorks, etc.
Fieldbuses like CAN-Bus, LIN-Bus, PROFIBUS, etc.
imers like PLL(s), Capture/Compare and Time Processing Units.
Discrete IO aka General Purpose Input/Output (GPIO)
Analog to Digital/Digital to Analog (ADC/DAC)
Debugging like JTAG, ISP, ICSP, BDM Port, BITP, and DP9 ports
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 11/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The first microprocessor 4004 was invented by Intel Corporation. 8085 and 8086 microprocessors
were also invented by Intel. In 1981, Intel introduced an 8-bit microcontroller called the 8051. It was
referred as system on a chip because it had 128 bytes of RAM, 4K byte of on-chip ROM, two
timers, one serial port, and 4 ports (8-bit wide), all on a single chip. When it became widely popular,
Intel allowed other manufacturers to make and market different flavors of 8051 with its code
compatible with 8051. It means that if you write your program for one flavor of 8051, it will run on
other flavors too, regardless of the manufacturer. This has led to several versions with different
speeds and amounts of on-chip RAM.
8052 microcontroller − 8052 has all the standard features of the 8051 microcontroller as
well as an extra 128 bytes of RAM and an extra timer. It also has 8K bytes of on-chip
program ROM instead of 4K bytes.
8031 microcontroller − It is another member of the 8051 family. This chip is often referred
to as a ROM-less 8051, since it has 0K byte of on-chip ROM. You must add external ROM
to it in order to use it, which contains the program to be fetched and executed. This
program can be as large as 64K bytes. But in the process of adding external ROM to the
8031, it lost 2 ports out of 4 ports. To solve this problem, we can add an external I/O to the
8031
The following table compares the features available in 8051, 8052, and 8031.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 12/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
ROM(bytes) 4K 8K 0K
Timers 2 3 2
I/O pins 32 32 32
Serial port 1 1 1
Interrupt sources 6 8 6
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 13/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
In 8051, I/O operations are done using four ports and 40 pins. The following pin diagram shows the
details of the 40 pins. I/O operation port reserves 32 pins where each port has 8 pins. The other 8
pins are designated as Vcc, GND, XTAL1, XTAL2, RST, EA (bar), ALE/PROG (bar), and PSEN
(bar).
It is a 40 Pin PDIP (Plastic Dual Inline Package)
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 14/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Note − In a DIP package, you can recognize the first pin and the last pin by the cut at the middle of
the IC. The first pin is on the left of this cut mark and the last pin (i.e. the 40th pin in this case) is to
the right of the cut mark.
It has 8 pins (32 to 39). It can be used for input or output. Unlike P1, P2, and P3 ports, we normally
connect P0 to 10K-ohm pull-up resistors to use it as an input or output port being an open drain.
It is also designated as AD0-AD7, allowing it to be used as both address and data. In case of 8031
(i.e. ROMless Chip), when we need to access the external ROM, then P0 will be used for both
Address and Data Bus. ALE (Pin no 31) indicates if P0 has address or data. When ALE = 0, it
provides data D0-D7, but when ALE = 1, it has address A0-A7. In case no external memory
connection is available, P0 must be connected externally to a 10K-ohm pull-up resistor.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 15/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
MOV P0,A ;(Port0 have 1's on every pin so that it works as Input)
It is an 8-bit port (pin 1 through 8) and can be used either as input or output. It doesn't require pull-
up resistors because they are already connected internally. Upon reset, Port 1 is configured as an
input port. The following code can be used to send alternating values of 55H and AAH to Port 1.
MOV P2,A
ACALL DELAY
CPL A ;complement(invert) reg. A
SJMP BACK
If Port 1 is configured to be used as an output port, then to use it as an input port again, program it
by writing 1 to all of its bits as in the following code.
Port 2 occupies a total of 8 pins (pins 21 through 28) and can be used for both input and output
operations. Just as P1 (Port 1), P2 also doesn't require external Pull-up resistors because they are
already connected internally. It must be used along with P0 to provide the 16-bit address for the
external memory. So it is also designated as (A0–A7), as shown in the pin diagram. When the 8051
is connected to an external memory, it provides path for upper 8-bits of 16-bits address, and it
cannot be used as I/O. Upon reset, Port 2 is configured as an input port. The following code can be
used to send alternating values of 55H and AAH to port 2.
If Port 2 is configured to be used as an output port, then to use it as an input port again, program it
by writing 1 to all of its bits as in the following code.
It is also of 8 bits and can be used as Input/Output. This port provides some extremely important
signals. P3.0 and P3.1 are RxD (Receiver) and TxD (Transmitter) respectively and are collectively
used for Serial Communication. P3.2 and P3.3 pins are used for external interrupts. P3.4 and P3.5
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 17/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
are used for timers T0 and T1 respectively. P3.6 and P3.7 are Write (WR) and Read (RD) pins.
These are active low pins, means they will be active when 0 is given to them and these are used to
provide Read and Write operations to External ROM in 8031 based systems.
P3.0 RxD 10
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 18/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
and it all depends on this Quartz crystal, for example, a 20 MHz microcontroller requires a
crystal with a frequency no more than 20 MHz.
RST (Pin No. 9) − It is an Input pin and active High pin. Upon applying a high pulse on this
pin, that is 1, the microcontroller will reset and terminate all activities. This process is
known as Power-On Reset. Activating a power-on reset will cause all values in the
register to be lost. It will set a program counter to all 0's. To ensure a valid input of Reset,
the high pulse must be high for a minimum of two machine cycles before it is allowed to go
low, which depends on the capacitor value and the rate at which it charges. (Machine
Cycle is the minimum amount of frequency a single instruction requires in execution).
EA or External Access (Pin No. 31) − It is an input pin. This pin is an active low pin; upon
applying a low pulse, it gets activated. In case of microcontroller (8051/52) having on-chip
ROM, the EA (bar) pin is connected to Vcc. But in an 8031 microcontroller which does not
have an on-chip ROM, the code is stored in an external ROM and then fetched by the
microcontroller. In this case, we must connect the (pin no 31) EA to Gnd to indicate that the
program code is stored externally.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 19/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
PSEN or Program store Enable (Pin No 29) − This is also an active low pin, i.e., it gets
activated after applying a low pulse. It is an output pin and used along with the EA pin in
8031 based (i.e. ROMLESS) Systems to allow storage of program code in external ROM.
ALE or (Address Latch Enable) − This is an Output Pin and is active high. It is especially
used for 8031 IC to connect it to the external memory. It can be used while deciding
whether P0 pins will be used as Address bus or Data bus. When ALE = 1, then the P0 pins
work as Data bus and when ALE = 0, then the P0 pins act as Address bus.
AGAIN:
SETB P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
SJMP AGAIN
Single-Bit Instructions
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 20/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Instructions Function
JBC bit, target jump to target if bit = 1, clear bit (jump if bit, then clear)
Program Counter
The Program Counter is a 16- or 32-bit register which contains the address of the next instruction
to be executed. The PC automatically increments to the next sequential memory location every
time an instruction is fetched. Branch, jump, and interrupt operations load the Program Counter
with an address other than the next sequential location.
Activating a power-on reset will cause all values in the register to be lost. It means the value of the
PC (program counter) is 0 upon reset, forcing the CPU to fetch the first opcode from the ROM
memory location 0000. It means we must place the first byte of upcode in ROM location 0000
because that is where the CPU expects to find the first instruction
Reset Vector
The significance of the reset vector is that it points the processor to the memory address which
contains the firmware's first instruction. Without the Reset Vector, the processor would not know
where to begin execution. Upon reset, the processor loads the Program Counter (PC) with the
reset vector value from a predefined memory location. On CPU08 architecture, this is at location
$FFFE:$FFFF.
When the reset vector is not necessary, developers normally take it for granted and don’t program
into the final image. As a result, the processor doesn't start up on the final product. It is a common
mistake that takes place during the debug phase.
Stack Pointer
Stack is implemented in RAM and a CPU register is used to access it called SP (Stack Pointer)
register. SP register is an 8-bit register and can address memory addresses of range 00h to FFh.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 21/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Initially, the SP register contains value 07 to point to location 08 as the first location being used for
the stack by the 8051.
When the content of a CPU register is stored in a stack, it is called a PUSH operation. When the
content of a stack is stored in a CPU register, it is called a POP operation. In other words, a register
is pushed onto the stack to save it and popped off the stack to retrieve it.
Infinite Loop
An infinite loop or an endless loop can be identified as a sequence of instructions in a computer
program that executes endlessly in a loop, because of the following reasons −
loop with no terminating condition.
loop with a terminating condition that can never be met.
loop with a terminating condition that causes the loop to start over.
Such infinite loops normally caused older operating systems to become unresponsive, as an infinite
loop consumes all the available processor time. I/O operations waiting for user inputs are also
called "infinite loops". One possible cause of a computer "freezing" is an infinite loop; other causes
include deadlock and access violations.
Embedded systems, unlike a PC, never "exit" an application. They idle through an Infinite Loop
waiting for an event to take place in the form of an interrupt, or a pre-scheduled task. In order to
save power, some processors enter special sleep or wait modes instead of idling through an
Infinite Loop, but they will come out of this mode upon either a timer or an External Interrupt.
Interrupts
Interrupts are mostly hardware mechanisms that instruct the program that an event has occurred.
They may occur at any time, and are therefore asynchronous to the program flow. They require
special handling by the processor, and are ultimately handled by a corresponding Interrupt Service
Routine (ISR). Interrupts need to be handled quickly. If you take too much time servicing an
interrupt, then you may miss another interrupt.
Although numbers are always displayed in the same way, they are not stored in the same way in
memory. Big-Endian machines store the most significant byte of data in the lowest memory
address. A Big-Endian machine stores 0x12345678 as −
ADD+0: 0x12
ADD+1: 0x34
ADD+2: 0x56
ADD+3: 0x78
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 22/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Little-Endian machines, on the other hand, store the least significant byte of data in the lowest
memory address. A Little-Endian machine stores 0x12345678 as −
ADD+0: 0x78
ADD+1: 0x56
ADD+2: 0x34
ADD+3: 0x12
Assembly languages were developed to provide mnemonics or symbols for the machine level
code instructions. Assembly language programs consist of mnemonics, thus they should be
translated into machine code. A program that is responsible for this conversion is known as
assembler. Assembly language is often termed as a low-level language because it directly works
with the internal structure of the CPU. To program in assembly language, a programmer must know
all the registers of the CPU.
Different programming languages such as C, C++, Java and various other languages are called
high-level languages because they do not deal with the internal details of a CPU. In contrast, an
assembler is used to translate an assembly language program into machine code (sometimes also
called object code or opcode). Similarly, a compiler translates a high-level language into machine
code. For example, to write a program in C language, one must use a C compiler to translate the
program into machine language.
An assembly language program is a series of statements, which are either assembly language
instructions such as ADD and MOV, or statements called directives.
An instruction tells the CPU what to do, while a directive (also called pseudo-instructions) gives
instruction to the assembler. For example, ADD and MOV instructions are commands which the
CPU runs, while ORG and END are assembler directives. The assembler places the opcode to the
memory location 0 when the ORG directive is used, while END indicates to the end of the source
code. A program language instruction consists of the following four fields −
the mnemonics, which produce opcodes ; "A, C" and "C, #68" are operands. These two
fields could contain directives. Directives do not generate machine code and are used only
by the assembler, whereas instructions are translated into machine code for the CPU to
execute.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 24/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Data Type
The 8051 microcontroller contains a single data type of 8-bits, and each register is also of 8-bits
size. The programmer has to break down data larger than 8-bits (00 to FFH, or to 255 in decimal)
so that it can be processed by the CPU.
DB (Define Byte)
The DB directive is the most widely used data directive in the assembler. It is used to define the 8-
bit data. It can also be used to define decimal, binary, hex, or ASCII formats data. For decimal, the
"D" after the decimal number is optional, but it is required for "B" (binary) and "Hl" (hexadecimal).
To indicate ASCII, simply place the characters in quotation marks ('like this'). The assembler
generates ASCII code for the numbers/characters automatically. The DB directive is the only
directive that can be used to define ASCII strings larger than two characters; therefore, it should be
used for all the ASCII data definitions. Some examples of DB are given below −
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 25/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Either single or double quotes can be used around ASCII strings. DB is also used to allocate
memory in byte-sized chunks.
Assembler Directives
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 26/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Registers are used in the CPU to store information on temporarily basis which could be data to be
processed, or an address pointing to the data which is to be fetched. In 8051, there is one data
type is of 8-bits, from the MSB (most significant bit) D7 to the LSB (least significant bit) D0. With 8-
bit data type, any data type larger than 8-bits must be broken into 8-bit chunks before it is
processed.
The most widely used registers of the 8051 are A (accumulator), B, R0-R7, DPTR (data pointer),
and PC (program counter). All these registers are of 8-bits, except DPTR and PC.
Accumulator
The accumulator, register A, is used for all arithmetic and logic operations. If the accumulator is not
present, then every result of each calculation (addition, multiplication, shift, etc.) is to be stored into
the main memory. Access to main memory is slower than access to a register like the accumulator
because the technology used for the large main memory is slower (but cheaper) than that used for
a register.
The "R" registers are a set of eight registers, namely, R0, R1 to R7. These registers function as
auxiliary or temporary storage registers in many operations. Consider an example of the sum of 10
and 20. Store a variable 10 in an accumulator and another variable 20 in, say, register R4. To
process the addition operation, execute the following command −
ADD A,R4
After executing this instruction, the accumulator will contain the value 30. Thus "R" registers are
very important auxiliary or helper registers. The Accumulator alone would not be very useful if it
were not for these "R" registers. The "R" registers are meant for temporarily storage of values.
Let us take another example. We will add the values in R1 and R2 together and then subtract the
values of R3 and R4 from the result.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 27/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
As you can see, we used R5 to temporarily hold the sum of R3 and R4. Of course, this is not the
most efficient way to calculate (R1 + R2) – (R3 + R4), but it does illustrate the use of the "R"
registers as a way to store values temporarily.
The "B" register is very similar to the Accumulator in the sense that it may hold an 8-bit (1-byte)
value. The "B" register is used only by two 8051 instructions: MUL AB and DIV AB. To quickly and
easily multiply or divide A by another number, you may store the other number in "B" and make use
of these two instructions. Apart from using MUL and DIV instructions, the "B" register is often used
as yet another temporary storage register, much like a ninth R register.
The Data Pointer (DPTR) is the 8051’s only user-accessible 16-bit (2-byte) register. The
Accumulator, R0–R7 registers and B register are 1-byte value registers. DPTR is meant for pointing
to data. It is used by the 8051 to access external memory using the address indicated by DPTR.
DPTR is the only 16-bit register available and is often used to store 2-byte values.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 28/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The Program Counter (PC) is a 2-byte address which tells the 8051 where the next instruction to
execute can be found in the memory. PC starts at 0000h when the 8051 initializes and is
incremented every time after an instruction is executed. PC is not always incremented by 1. Some
instructions may require 2 or 3 bytes; in such cases, the PC will be incremented by 2 or 3.
Branch, jump, and interrupt operations load the Program Counter with an address other than the
next sequential location. Activating a power-on reset will cause all values in the register to be lost. It
means the value of the PC is 0 upon reset, forcing the CPU to fetch the first opcode from the ROM
location 0000. It means we must place the first byte of upcode in ROM location 0000 because that
is where the CPU expects to find the first instruction.
The Stack Pointer, like all registers except DPTR and PC, may hold an 8-bit (1-byte) value. The
Stack Pointer tells the location from where the next value is to be removed from the stack. When a
value is pushed onto the stack, the value of SP is incremented and then the value is stored at the
resulting memory location. When a value is popped off the stack, the value is returned from the
memory location indicated by SP, and then the value of SP is decremented.
This order of operation is important. SP will be initialized to 07h when the 8051 is initialized. If a
value is pushed onto the stack at the same time, the value will be stored in the internal RAM
address 08h because the 8051 will first increment the value of SP (from 07h to 08h) and then will
store the pushed value at that memory address (08h). SP is modified directly by the 8051 by six
instructions: PUSH, POP, ACALL, LCALL, RET, and RETI.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 29/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The program status word (PSW) register is an 8-bit register, also known as flag register. It is of 8-
bit wide but only 6-bit of it is used. The two unused bits are user-defined flags. Four of the flags
are called conditional flags, which means that they indicate a condition which results after an
instruction is executed. These four are CY (Carry), AC (auxiliary carry), P (parity), and OV
(overflow). The bits RS0 and RS1 are used to change the bank registers. The following figure
shows the program status word register.
The PSW Register contains that status bits that reflect the current status of the CPU.
CY CA F0 RS1 RS0 OV - P
P PSW.0 Parity FLAG. Set/ cleared by hardware during instruction cycle to indicate
even/odd number of 1 bit in accumulator.
We can select the corresponding Register Bank bit using RS0 and RS1 bits.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 30/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
CY, the carry flag − This carry flag is set (1) whenever there is a carry out from the D7 bit.
It is affected after an 8-bit addition or subtraction operation. It can also be reset to 1 or 0
directly by an instruction such as "SETB C" and "CLR C" where "SETB" stands for set bit
carry and "CLR" stands for clear carry.
AC, auxiliary carry flag − If there is a carry from D3 and D4 during an ADD or SUB
operation, the AC bit is set; otherwise, it is cleared. It is used for the instruction to perform
binary coded decimal arithmetic.
P, the parity flag − The parity flag represents the number of 1's in the accumulator register
only. If the A register contains odd number of 1's, then P = 1; and for even number of 1's, P
= 0.
OV, the overflow flag − This flag is set whenever the result of a signed number operation
is too large causing the high-order bit to overflow into the sign bit. It is used only to detect
errors in signed arithmetic operations.
Example
Show the status of CY, AC, and P flags after the addition of 9CH and 64H in the following
instruction.
MOV A, #9CH
ADD A, # 64H
Solution: 9C 10011100
+64 01100100
100 00000000
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 31/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The 8051 microcontroller has a total of 128 bytes of RAM. We will discuss about the allocation of
these 128 bytes of RAM and examine their usage as stack and register.
The 128 bytes of RAM inside the 8051 are assigned the address 00 to 7FH. They can be accessed
directly as memory locations and are divided into three different groups as follows −
32 bytes from 00H to 1FH locations are set aside for register banks and the stack.
16 bytes from 20H to 2FH locations are set aside for bit-addressable read/write memory.
80 bytes from 30H to 7FH locations are used for read and write storage; it is called as
scratch pad. These 80 locations RAM are widely used for the purpose of storing data and
parameters by 8051 programmers.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 32/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The second bank of registers R0–R7 starts at RAM location 08 and goes to locations OFH. The
third bank of R0–R7 starts at memory location 10H and goes to location to 17H. Finally, RAM
locations 18H to 1FH are set aside for the fourth bank of R0–R7.
Register bank 0 is the default when the 8051 is powered up. We can switch to the other banks
using PSW register. D4 and D3 bits of the PSW are used to select the desired register bank, since
they can be accessed by the bit addressable instructions SETB and CLR. For example, "SETB
PSW.3" will set PSW.3 = 1 and select the bank register 1.
0 0 Bank0
0 1 Bank1
1 0 Bank2
1 1 Bank3
The stack is a section of a RAM used by the CPU to store information such as data or memory
address on temporary basis. The CPU needs this storage area considering limited number of
registers.
As the stack is a section of a RAM, there are registers inside the CPU to point to it. The register
used to access the stack is known as the stack pointer register. The stack pointer in the 8051 is 8-
bits wide, and it can take a value of 00 to FFH. When the 8051 is initialized, the SP register
contains the value 07H. This means that the RAM location 08 is the first location used for the stack.
The storing operation of a CPU register in the stack is known as a PUSH, and getting the contents
from the stack back into a CPU register is called a POP.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 33/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
In the 8051, the stack pointer (SP) points to the last used location of the stack. When data is
pushed onto the stack, the stack pointer (SP) is incremented by 1. When PUSH is executed, the
contents of the register are saved on the stack and SP is incremented by 1. To push the registers
onto the stack, we must use their RAM addresses. For example, the instruction "PUSH 1" pushes
register R1 onto the stack.
Popping the contents of the stack back into a given register is the opposite to the process of
pushing. With every pop operation, the top byte of the stack is copied to the register specified by
the instruction and the stack pointer is decremented once.
The flow of program proceeds in a sequential manner, from one instruction to the next instruction,
unless a control transfer instruction is executed. The various types of control transfer instruction in
assembly language include conditional or unconditional jumps and call instructions.
Example
AGAIN:DJNZ R2,
AGAIN:repeat until R2 = 0 (10 times)
Drawback in 8051 − Looping action with the instruction DJNZ Reg label is limited to 256 iterations
only. If a conditional jump is not taken, then the instruction following the jump is executed.
When we use a loop inside another loop, it is called a nested loop. Two registers are used to hold
the count when the maximum count is limited to 256. So we use this method to repeat the action
more times than 256.
Example
Write a program to −
CPL A ;complement
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 35/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Instruction Action
JZ Jump if A = 0
JNZ Jump if A ≠ 0
JC Jump if CY = 1
JNC Jump if CY ≠ 1
JB Jump if bit = 1
byte target address is to allow a jump to any memory location from 0000 to FFFFH.
SJMP (short jump) − It is a 2-byte instruction where the first byte is the opcode and the
second byte is the relative address of the target location. The relative address ranges from
00H to FFH which is divided into forward and backward jumps; that is, within –128 to +127
bytes of memory relative to the address of the current PC (program counter). In case of
forward jump, the target address can be within a space of 127 bytes from the current PC.
In case of backward jump, the target address can be within –128 bytes from the current
PC.
All conditional jumps (JNC, JZ, and DJNZ) are short jumps because they are 2-byte instructions. In
these instructions, the first byte represents opcode and the second byte represents the relative
address. The target address is always relative to the value of the program counter. To calculate the
target address, the second byte is added to the PC of the instruction immediately below the jump.
Take a look at the program given below −
In case of a forward jump, the displacement value is a positive number between 0 to 127 (00 to 7F
in hex). However, for a backward jump, the displacement is a negative value of 0 to –128.
CALL Instructions
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 37/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
CALL is used to call a subroutine or method. Subroutines are used to perform operations or tasks
that need to be performed frequently. This makes a program more structured and saves memory
space. There are two instructions − LCALL and ACALL.
LCALL is a 3-byte instruction where the first byte represents the opcode and the second and third
bytes are used to provide the address of the target subroutine. LCALL can be used to call
subroutines which are available within the 64K-byte address space of the 8051.
To make a successful return to the point after execution of the called subroutine, the CPU saves
the address of the instruction immediately below the LCALL on the stack. Thus, when a subroutine
is called, the control is transferred to that subroutine, and the processor saves the PC (program
counter) on the stack and begins to fetch instructions from the new location. The instruction RET
(return) transfers the control back to the caller after finishing execution of the subroutine. Every
subroutine uses RET as the last instruction.
ACALL is a 2-byte instruction, in contrast to LCALL which is 3 bytes. The target address of the
subroutine must be within 2K bytes because only 11 bits of the 2 bytes are used for address. The
difference between the ACALL and LCALL is that the target address for LCALL can be anywhere
within the 64K-bytes address space of the 8051, while the target address of CALL is within a 2K-
byte range.
An addressing mode refers to how you are addressing a given memory location. There are five
different ways or five addressing modes to execute this instruction which are as follows −
Immediate addressing mode
Direct addressing mode
Register direct addressing mode
Register indirect addressing mode
Indexed addressing mode
MOV A, #6AH
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 38/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
MOV A, #data
Note − The '#' symbol before 6AH indicates that the operand is a data (8 bit). In the absence of '#',
the hexadecimal number would be taken as an address.
MOV A, 04H
The register bank#0 (4th register) has the address 04H. When the MOV instruction is executed, the
data stored in register 04H is moved to the accumulator. As the register 04H holds the data 1FH,
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 39/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
As shown in the above illustration, this is a 2-byte instruction which requires 1 cycle to complete.
The PC will be incremented by 2 and will point to 0204. The opcode for the instruction MOV A,
address is E5H. When the instruction at 0202 is executed (E5H), the accumulator is made active
and ready to receive data. Then the PC goes to the next address as 0203 and looks up the address
of the location of 04H where the source data (to be transferred to accumulator) is located. At 04H,
the control finds the data 1F and transfers it to the accumulator and hence the execution is
completed.
MOV A, R4
At a time, the registers can take values from R0 to R7. There are 32 such registers. In order to use
32 registers with just 8 variables to address registers, register banks are used. There are 4 register
banks named from 0 to 3. Each bank comprises of 8 registers named from R0 to R7.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 40/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
At a time, a single register bank can be selected. Selection of a register bank is made possible
through a Special Function Register (SFR) named Processor Status Word (PSW). PSW is an
8-bit SFR where each bit can be programmed as required. Bits are designated from PSW.0 to
PSW.7. PSW.3 and PSW.4 are used to select register banks.
Now, take a look at the following illustration to get a clear understanding of how it works.
Opcode EC is used for MOV A, R4. The opcode is stored at the address 0202 and when it is
executed, the control goes directly to R4 of the respected register bank (that is selected in PSW). If
register bank #0 is selected, then the data from R4 of register bank #0 will be moved to the
accumulator. Here 2F is stored at 04H. 04H represents the address of R4 of register bank #0.
Data (2F) movement is highlighted in bold. 2F is getting transferred to the accumulator from data
memory location 0C H and is shown as dotted line. 0CH is the address location of Register 4 (R4)
of register bank #1. The instruction above is 1 byte and requires 1 cycle for complete execution.
What it means is, you can save program memory by using register direct addressing mode.
In this addressing mode, the address of the data is stored in the register as operand.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 41/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
MOV A, @R0
Here the value inside R0 is considered as an address, which holds the data to be transferred to the
accumulator. Example: If R0 has the value 20H, and data 2FH is stored at the address 20H, then
the value 2FH will get transferred to the accumulator after executing this instruction. See the
following illustration.
So the opcode for MOV A, @R0 is E6H. Assuming that the register bank #0 is selected, the R0 of
register bank #0 holds the data 20H. Program control moves to 20H where it locates the data 2FH
and it transfers 2FH to the accumulator. This is a 1-byte instruction and the program counter
increments by 1 and moves to 0203 of the program memory.
Note − Only R0 and R1 are allowed to form a register indirect addressing instruction. In other
words, the programmer can create an instruction either using @R0 or @R1. All register banks are
allowed.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 42/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
and
MOVC A, @A+PC
where DPTR is the data pointer and PC is the program counter (both are 16-bit registers). Consider
the first example.
MOVC A, @A+DPTR
The source operand is @A+DPTR. It contains the source data from this location. Here we are
adding the contents of DPTR with the current content of the accumulator. This addition will give a
new address which is the address of the source data. The data pointed by this address is then
transferred to the accumulator.
The opcode is 93H. DPTR has the value 01FE, where 01 is located in DPH (higher 8 bits) and FE
is located in DPL (lower 8 bits). Accumulator has the value 02H. Then a 16-bit addition is
performed and 01FE H+02H results in 0200 H. Data at the location 0200H will get transferred to
the accumulator. The previous value inside the accumulator (02H) will be replaced with the new
data from 0200H. The new data in the accumulator is highlighted in the illustration.
This is a 1-byte instruction with 2 cycles needed for execution and the execution time required for
this instruction is high compared to previous instructions (which were all 1 cycle each).
The other example MOVC A, @A+PC works the same way as the above example. Instead of
adding DPTR with the accumulator, here the data inside the program counter (PC) is added with
the accumulator to obtain the target address.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 43/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
A Special Function Register (or Special Purpose Register, or simply Special Register) is a register
within a microprocessor that controls or monitors the various functions of a microprocessor. As the
special registers are closely tied to some special function or status of the processor, they might not
be directly writable by normal instructions (like add, move, etc.). Instead, some special registers in
some processor architectures require special instructions to modify them.
In the 8051, register A, B, DPTR, and PSW are a part of the group of registers commonly referred
to as SFR (special function registers). An SFR can be accessed by its name or by its address.
The following table shows a list of SFRs and their addresses.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 44/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC
D0 D7 D6 D5 D4 D3 D2 - D0 PSW
B8 - - - BC BB BA B9 B8 IP
B0 B7 B6 B5 B4 B3 B2 B1 B0 P3
A2 AF - - AC AB AA A9 A8 IE
A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
98 9F 9E 9D 9C 9B 9A 99 98 SCON
90 97 96 95 94 93 92 91 90 P1
88 8F 8E 8D 8C 8B 8A 89 88 TCON
80 87 87 85 84 83 82 81 80 P0
P PSW.0 Parity FLAG. Set/ cleared by hardware during instruction cycle to indicate
even/odd number of 1 bit in accumulator.
In the following example, the SFR registers’ names are replaced with their addresses.
CY AC F0 RS1 RS0 OV - P
We can select the corresponding Register Bank bit using RS0 and RS1 bits.
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 46/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
The Program Status Word (PSW) contains status bits to reflect the current state of the CPU. The
8051 variants provide one special function register, PSW, with this status information. The 8251
provides two additional status flags, Z and N, which are available in a second special function
register called PSW1.
A timer is a specialized type of clock which is used to measure time intervals. A timer that counts
from zero upwards for measuring time elapsed is often called a stopwatch. It is a device that
counts down from a specified time interval and used to generate a time delay, for example, an
hourglass is a timer.
A counter is a device that stores (and sometimes displays) the number of times a particular event
or process occurred, with respect to a clock signal. It is used to count the events happening outside
the microcontroller. In electronics, counters can be implemented quite easily using register-type
circuits such as a flip-flop.
Timer Counter
The register incremented for every The register is incremented considering 1 to 0 transition at
machine cycle. its corresponding to an external input pin (T0, T1).
Maximum count rate is 1/12 of the Maximum count rate is 1/24 of the oscillator frequency.
oscillator frequency.
A timer uses the frequency of the A counter uses an external signal to count pulses.
internal clock, and generates delay.
The 8051 has two timers, Timer 0 and Timer 1. They can be used as timers or as event counters.
Both Timer 0 and Timer 1 are 16-bit wide. Since the 8051 follows an 8-bit architecture, each 16 bit
is accessed as two separate registers of low-byte and high-byte.
Timer 0 Register
The 16-bit register of Timer 0 is accessed as low- and high-byte. The low-byte register is called TL0
(Timer 0 low byte) and the high-byte register is called TH0 (Timer 0 high byte). These registers can
be accessed like any other register. For example, the instruction MOV TL0, #4H moves the value
into the low-byte of Timer #0.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 47/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Timer 1 Register
The 16-bit register of Timer 1 is accessed as low- and high-byte. The low-byte register is called TL1
(Timer 1 low byte) and the high-byte register is called TH1 (Timer 1 high byte). These registers can
be accessed like any other register. For example, the instruction MOV TL1, #4H moves the value
into the low-byte of Timer 1.
Both Timer 0 and Timer 1 use the same register to set the various timer operation modes. It is an 8-
bit register in which the lower 4 bits are set aside for Timer 0 and the upper four bits for Timers. In
each case, the lower 2 bits are used to set the timer mode in advance and the upper 2 bits are
used to specify the location.
Gate − When set, the timer only runs while INT(0,1) is high.
C/T − Counter/Timer select bit.
M1 − Mode bit 1.
M0 − Mode bit 0.
GATE
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 48/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Every timer has a means of starting and stopping. Some timers do this by software, some by
hardware, and some have both software and hardware controls. 8051 timers have both software
and hardware controls. The start and stop of a timer is controlled by software using the instruction
SETB TR1 and CLR TR1 for timer 1, and SETB TR0 and CLR TR0 for timer 0.
The SETB instruction is used to start it and it is stopped by the CLR instruction. These instructions
start and stop the timers as long as GATE = 0 in the TMOD register. Timers can be started and
stopped by an external source by making GATE = 1 in the TMOD register.
This bit in the TMOD register is used to decide whether a timer is used as a delay generator or an
event manager. If C/T = 0, it is used as a timer for timer delay generation. The clock source to
create the time delay is the crystal frequency of the 8051. If C/T = 0, the crystal frequency attached
to the 8051 also decides the speed at which the 8051 timer ticks at a regular interval.
Timer frequency is always 1/12th of the frequency of the crystal attached to the 8051. Although
various 8051 based systems have an XTAL frequency of 10 MHz to 40 MHz, we normally work with
the XTAL frequency of 11.0592 MHz. It is because the baud rate for serial communication of the
8051.XTAL = 11.0592 allows the 8051 system to communicate with the PC with no errors.
M1 / M2
M1 M2 Mode
1 1 Spilt mode.
Both Timer 1 and Timer 0 in Mode 0 operate as 8-bit counters (with a divide-by-32 prescaler).
Timer register is configured as a 13-bit register consisting of all the 8 bits of TH1 and the lower 5
bits of TL1. The upper 3 bits of TL1 are indeterminate and should be ignored. Setting the run flag
(TR1) does not clear the register. The timer interrupt flag TF1 is set when the count rolls over from
all 1s to all 0s. Mode 0 operation is the same for Timer 0 as it is for Timer 1.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 49/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Timer mode "1" is a 16-bit timer and is a commonly used mode. It functions in the same way as 13-
bit mode except that all 16 bits are used. TLx is incremented starting from 0 to a maximum 255.
Once the value 255 is reached, TLx resets to 0 and then THx is incremented by 1. As being a full
16-bit timer, the timer may contain up to 65536 distinct values and it will overflow back to 0 after
65,536 machine cycles.
Both the timer registers are configured as 8-bit counters (TL1 and TL0) with automatic reload.
Overflow from TL1 (TL0) sets TF1 (TF0) and also reloads TL1 (TL0) with the contents of Th1
(TH0), which is preset by software. The reload leaves TH1 (TH0) unchanged.
The benefit of auto-reload mode is that you can have the timer to always contain a value from 200
to 255. If you use mode 0 or 1, you would have to check in the code to see the overflow and, in that
case, reset the timer to 200. In this case, precious instructions check the value and/or get reloaded.
In mode 2, the microcontroller takes care of this. Once you have configured a timer in mode 2, you
don't have to worry about checking to see if the timer has overflowed, nor do you have to worry
about resetting the value because the microcontroller hardware will do it all for you. The auto-
reload mode is used for establishing a common baud rate.
Timer mode "3" is known as split-timer mode. When Timer 0 is placed in mode 3, it becomes two
separate 8-bit timers. Timer 0 is TL0 and Timer 1 is TH0. Both the timers count from 0 to 255 and in
case of overflow, reset back to 0. All the bits that are of Timer 1 will now be tied to TH0.
When Timer 0 is in split mode, the real Timer 1 (i.e. TH1 and TL1) can be set in modes 0, 1 or 2,
but it cannot be started/stopped as the bits that do that are now linked to TH0. The real timer 1 will
be incremented with every machine cycle.
Initializing a Timer
Decide the timer mode. Consider a 16-bit timer that runs continuously, and is independent of any
external pins.
Initialize the TMOD SFR. Use the lowest 4 bits of TMOD and consider Timer 0. Keep the two bits,
GATE 0 and C/T 0, as 0, since we want the timer to be independent of the external pins. As 16-bit
mode is timer mode 1, clear T0M1 and set T0M0. Effectively, the only bit to turn on is bit 0 of
TMOD. Now execute the following instruction −
MOV TMOD,#01h
Now, Timer 0 is in 16-bit timer mode, but the timer is not running. To start the timer in running
mode, set the TR0 bit by executing the following instruction −
SETB TR0
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 50/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Now, Timer 0 will immediately start counting, being incremented once every machine cycle.
Reading a Timer
A 16-bit timer can be read in two ways. Either read the actual value of the timer as a 16-bit number,
or you detect when the timer has overflowed.
When a timer overflows from its highest value to 0, the microcontroller automatically sets the TFx
bit in the TCON register. So instead of checking the exact value of the timer, the TFx bit can be
checked. If TF0 is set, then Timer 0 has overflowed; if TF1 is set, then Timer 1 has overflowed.
An interrupt is a signal to the processor emitted by hardware or software indicating an event that
needs immediate attention. Whenever an interrupt occurs, the controller completes the execution of
the current instruction and starts the execution of an Interrupt Service Routine (ISR) or Interrupt
Handler. ISR tells the processor or controller what to do when the interrupt occurs. The interrupts
can be either hardware interrupts or software interrupts.
Hardware Interrupt
A hardware interrupt is an electronic alerting signal sent to the processor from an external device,
like a disk controller or an external peripheral. For example, when we press a key on the keyboard
or move the mouse, they trigger hardware interrupts which cause the processor to read the
keystroke or mouse position.
Software Interrupt
A software interrupt is caused either by an exceptional condition or a special instruction in the
instruction set which causes an interrupt when it is executed by the processor. For example, if the
processor's arithmetic logic unit runs a command to divide a number by zero, to cause a divide-by-
zero exception, thus causing the computer to abandon the calculation or display an error message.
Software interrupt instructions work similar to subroutine calls.
What is Polling?
The state of continuous monitoring is known as polling. The microcontroller keeps checking the
status of other devices; and while doing so, it does no other operation and consumes all its
processing time for monitoring. This problem can be addressed by using interrupts.
In the interrupt method, the controller responds only when an interruption occurs. Thus, the
controller is not required to regularly monitor the status (flags, signals etc.) of interfaced and inbuilt
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 51/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
devices.
Interrupt Polling
An interrupt is like a shopkeeper. If one The polling method is like a salesperson. The
needs a service or product, he goes to salesman goes from door to door while requesting to
him and apprises him of his needs. In buy a product or service. Similarly, the controller
case of interrupts, when the flags or keeps monitoring the flags or signals one by one for
signals are received, they notify the all devices and provides service to whichever
controller that they need to be serviced. component that needs its service.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 52/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
Reset 0000 9
When the reset pin is activated, the 8051 jumps to the address location 0000. This is
power-up reset.
Two interrupts are set aside for the timers: one for timer 0 and one for timer 1. Memory
locations are 000BH and 001BH respectively in the interrupt vector table.
Two interrupts are set aside for hardware external interrupts. Pin no. 12 and Pin no. 13 in
Port 3 are for the external hardware interrupts INT0 and INT1, respectively. Memory
locations are 0003H and 0013H respectively in the interrupt vector table.
Serial communication has a single interrupt that belongs to both receive and transmit.
Memory location 0023H belongs to this interrupt.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 53/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
EA − Global enable/disable.
- − Undefined.
ET2 − Enable Timer 2 interrupt.
ES − Enable Serial port interrupt.
ET1 − Enable Timer 1 interrupt.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 54/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 55/56
8/4/2020 Embedded Systems - Quick Guide - Tutorialspoint
There are times when we need to test an ISR by way of simulation. This can be done with the
simple instructions to set the interrupt high and thereby cause the 8051 to jump to the interrupt
vector table. For example, set the IE bit as 1 for timer 1. An instruction SETB TF1 will interrupt the
8051 in whatever it is doing and force it to jump to the interrupt vector table.
https://www.tutorialspoint.com/embedded_systems/es_quick_guide.htm 56/56