Micro Controller Notes
Micro Controller Notes
10ES42
www.rejinpaul.com
MICROCONTROLLERS
(Common to EC/TC/EE/IT/BM/ML)
IA Marks: 25
Exam Hours: 03
Exam Marks: 100
PART-A
UNIT 1:
Microprocessors and microcontrollers. Introduction, Microprocessors and Microcontrollers, RISC & CISC
CPU Architectures, Harvard & Von- Neumann CPU architecture, Computer software.
The 8051 Architecture: Introduction, Architecture of 8051, Pin diagram of 8051, Memory organization,
External Memory interfacing, Stacks.
6 Hrs
UNIT 2:
Addressing Modes: Introduction, Instruction syntax, Data types, Subroutines, Addressing modes: Immediate
addressing , Register addressing, Direct addressing, Indirect addressing, relative addressing, Absolute
addressing, Long addressing, Indexed addressing, Bit inherent addressing, bit direct addressing. Instruction set:
Instruction timings, 8051 instructions: Data transfer instructions, Arithmetic instructions, Logical instructions,
Branch instructions, Subroutine instructions, Bit manipulation instruction.
6 Hrs
UNIT 3:
8051 programming: Assembler directives, Assembly language programs and Time delay calculations.
6 Hrs
UNIT 4:
8051 Interfacing and Applications: Basics of I/O concepts, I/O Port Operation, Interfacing 8051 to LCD,
Keyboard, parallel and serial ADC, DAC, Stepper motor interfacing and DC motor interfacing and
programming
7 Hrs
PART-B
UNIT 5:
8051 Interrupts and Timers/counters: Basics of interrupts, 8051 interrupt structure, Timers and Counters, 8051
timers/counters, programming 8051 timers in assembly and C.
6 Hrs
UNIT 6:
8051 Serial Communication: Data communication, Basics of Serial Data Communication, 8051 Serial
Communication, connections to RS-232, Serial communication Programming in assembly and C.
8255A Programmable Peripheral Interface:, Architecture of 8255A, I/O addressing,, I/O devices interfacing
with 8051 using 8255A.
6 Hrs
SJBIT/ECE
Page 1
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Course Aim The MSP430 microcontroller is ideally suited for development of low-power embedded systems
that must run on batteries for many years. There are also applications where MSP430 microcontroller must
operate on energy harvested from the environment. This is possible due to the ultra-low power operation of
MSP430 and the fact that it provides a complete system solution including a RISC CPU, flash memory, on-chip
data converters and on-chip peripherals.
UNIT 7:
Motivation for MSP430microcontrollers Low Power embedded systems, On-chip peripherals (analog and
digital), low-power RF capabilities. Target applications (Single-chip, low cost, low power, high performance
system design).
2 Hrs
MSP430 RISC CPU architecture, Compiler-friendly features, Instruction set, Clock system, Memory
subsystem. Key differentiating factors between different MSP430 families.
2 Hrs
Introduction to Code Composer Studio (CCS v4). Understanding how to use CCS for Assembly, C,
Assembly+C projects for MSP430 microcontrollers. Interrupt programming.
3 Hrs
Digital I/O I/O ports programming using C and assembly, Understanding the muxing scheme of the MSP430
pins.
2 Hrs
UNIT 8:
On-chip peripherals. Watchdog Timer, Comparator, Op-Amp, Basic Timer, Real Time Clock (RTC), ADC,
DAC, SD16, LCD, DMA.
2 Hrs
Using the Low-power features of MSP430. Clock system, low-power modes, Clock request feature, Low-power
programming and Interrupt.
2 Hrs
Interfacing LED, LCD, External memory. Seven segment LED modules interfacing. Example Real-time
clock.
2 Hrs
Case Studies of applications of MSP430 - Data acquisition system, Wired Sensor network, Wireless sensor
network with Chipcon RF interfaces.
3 Hrs
TEXT BOOKS:
1. The 8051 Microcontroller and Embedded Systems using assembly and C -, Muhammad Ali Mazidi and
Janice Gillespie Mazidi and Rollin D. McKinlay; PHI, 2006 / Pearson, 2006
2. MSP430 Microcontroller Basics, John Davies, Elsevier, 2010 (Indian edition available)
SJBIT/ECE
Page 2
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
REFERENCE BOOKS:
1. The 8051 Microcontroller Architecture, Programming & Applications, 2e Kenneth J.Ayala , Penram
International, 1996 / Thomson Learning 2005.
2. The 8051 Microcontroller, V.Udayashankar and MalikarjunaSwamy, TMH, 2009
3. MSP430 Teaching CD-ROM, Texas Instruments, 2008 (can be requested http://www.uniti.in )
4. Microcontrollers: Architecture, Programming, Interfacing and System Design,Raj Kamal,
Pearson Education, 2005
SJBIT/ECE
Page 3
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
INDEX SHEET
Chapter
1
TOPIC
PAGE NO.
7-29
30-58
59-61
62-90
91-100
100-109
110-117
SJBIT/ECE
Page 4
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
118-121
SJBIT/ECE
Page 5
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 1:
Microprocessors and microcontroller. Introduction, Microprocessors and Microcontrollers, RISC & CISC CPU
Architectures, Harvard & Von- Neumann CPU architecture, Computer software.
The 8051 Architecture: Introduction, Architecture of 8051, Pin diagram of 8051, Memory organization,
External Memory interfacing, Stacks.
6 Hrs
SJBIT/ECE
Page 6
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Computer:
A computer is a multipurpose programmable machine that reads binary instructions from its
memory , accepts binary data as input ,processes the data according to those instructions and provides results as
output. It is a programmable device made up of both hardware and software. The various components of the
computer are called hardware. A set of instructions written for the computer to solve a specific task is called
program and collection of programs is called software .
The computer hardware consists of four main components. The central
processing unit which acts as
computers brain. Input unit through which program and data can be entered to computer, output unit on which
the results of the computations can be displayed. Memory in which data and programs are stored.
and
Logic
Accumulator
Working Register
Program Counter
Stack Pointer
Clock Circuit
Interrupt Circuits
Page 7
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
as a key board and a display CRT it yields a small computer that can be applied to a range of general purpose
applications.
The hardware design of a microprocessor is arranged such that a very small or very large system can be
configured around the CPU as the application demands as shown in Fig1. The prime use of the Microprocessor
is to read data , perform extensive calculations on that data, and store those calculations in a mass storage
device or display the results for human use. The programs used by microprocessor are stored in the mass
storage device and loaded into RAM as user directs. A few microprocessor program are stored in ROM . The
ROM based programs are primarily small fixed programs that operate peripherals and other fixed devices that
are connected to the system.
Microcontroller: A Microcontroller is a programmable digital processor with necessary peripherals.
Both microcontrollers and microprocessors are complex sequential digital circuits meant to carry out job
according to the program / instructions. Sometimes analog input/output interface makes a part of
microcontroller circuit as mixed mode(both analog and digital) in nature.
A microcontroller can be compared to a Swiss knife with multiple functions incorporated in the same
Integrated Circuits. Block diagram of a typical Microcontroller which is a true computer on a chip is shown
below. The design incorporates all the features found in microprocessor CPU : ALU,PC, SP and registers. It
also has other features needed to make a complete computer: ROM, RAM, Parallel I/O, serial I/O, Counters and
clock circuits. Like the microprocessor , a microcontroller is a general purpose device, but one that is meant to
read data, perform limited calculations on that data and control its environment based on those calculations. The
prime use of microcontroller is to control the operation of a machine using a fixed program that is stored in
ROM and that does not change over the lifetime of the system.
Page 8
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
This would lead to instruction execution by hardware including multiple number of registers inside CPU.
The computer using such instructions is called Reduced Instruction Set Computer (RISC). PIC
microcontroller manufactured by Microchip Company is an example for RISC architecture.
Vonneumann (Princeton) and Harvard Architecture :
Intels 8051 employs Harvard architecture. A microcontroller has some embedded peripherals and
Input/Output (I/O) devices. The data transfer to these devices takes place through I/O registers.
In a microprocessor, input /output (I/O) devices are externally interfaced and are mapped either to memory
address (memory mapped I/O) or a separate I/O address space (I/O mapped I/O). There are two possible
architectures one is Princeton (Von Neumann) and another is Harvard .I/O Registers space in Princeton
architecture have only one memory interface for program memory (ROM) and data memory (RAM). One
option is to map the I/O Register as a part of data memory or variable RAM area ( memory mapped I/O).
Alternatively a separate I/O register space can be assigned (I/O Mapped I/O) . Both the arrangements are
shown in Fig.4.
SJBIT/ECE
Page 9
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Data
Memory
C
P
U
Addres
s
Data
Program
Memory
Addres
s
Page 10
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 11
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The one we are studying is a 8 bit Embedded Microcontroller introduced by Intel, 8051.
8051 ARCHITECTURE:
ALU
PSW
Port
0
SFR
A0-A7
Port
1
Port
2
PC
DPTR
I/O
D0-D7
I/O
I/O
A8-A15
ROM
Port
3
DPH
DPL
I/O
INT
CNTR
SERIAL
RD/WR
Salient Features
SJBIT/ECE
Page 12
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The programming model of 8051 shows the 8051 as the collection of 8 and 16 bit registers and 8 bit memory
locations. These registers and memory locations can be made to operate using software instructions that are
incorporated as part of the program instructions. The pin configuration of 8051 is shown in Fig.9.
SJBIT/ECE
Page 13
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
cycle.
Fig. 10 Instruction cycle of 8051(Instruction cycle has six states (S 1 - S 6 ). Each state has two pulses (P1
and P2))
Processor Architectures:
Page 14
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
of registers is currently in use at any time when program is running. Register banks not selected can be
used as general purpose RAM. Bank0 is selected by default on reset..
2. A bit addressable area of 16 bytes occupies RAM byte addresses 20h to 2fh, forming total of 128 bits.
An addressable bit may be specified by its bit address of 00h to 7fh or 8 bits may form any byte address
from 20h to 2fh.For example bit address 4fh is also bit 7 of byte address 29h. Addressable bits are useful
when the program need only remember a binary event.
3. A general purpose RAM area above the bit area from 30h to 7f h, addressable as byte.
Page 15
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
that the stack does not grow beyond predefined bounds. The stack is normally placed high in the internal
RAM by an appropriate choice of the number placed in SP register, to avoid conflict with registers or RAM.
Special Function Registers (SFRs):
The 8051 operations that do not use the internal RAM addresses from 00h to 7fh are done by a group of
specific internal registers each called a specific function register (SFR) which may be addressed much like
internal RAM using addresses from 80h to ffh.
Some SFRs are also bit addressable as is the case for the bit area of RAM. This feature allows the
programmer the programmer to change only what needs to be altered leaving the remaining bits in that SFR
unchanged. Not all of the addresses from 80h to ffh are used for SFRs . Only the addressed ones can be used
in programming SFRs and equivalent internal RAM addresses are shown in Fig.10.
SFR Map: The set of Special Function Registers (SFRs) contain important registers such as Accumulator,
Register B, I/O Port latch registers, Stack pointer, Data Pointer, Processor Status Word (PSW) and various
control registers. Some of these registers are bit addressable (they are marked with a * in the Fig. 13 below).
The detailed map of various registers is shown in the following figure.
The PC is not part of the SFR 0e0h or 8ch. and has no internal RAM address. SFRs are named in certain
opcodes by their function names as A, TH0 and can also be referred by their addresses such as
Address
F8H
F0H
B*
E8H
E0H
ACC*
D8H
D0H
PSW*
C8H
(T2CON)*
(RCAP2L)
(RCAP2H)
(TL2)
(TH2)
TH0
TH1
C0H
B8H
IP*
B0H
P3*
A8H
IE*
A0H
P2*
98H
SCON*
90H
P1*
88H
TCON*
TMOD
TL0
TL1
80H
P0*
SP
DPL
DPH
SBUF
PCON
Page 16
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
I/O Port pins, Ports and Circuits:One major feature of a microcontroller is versatility built into the I/O
circuits that connect the 8051 to the outside world. Out of 40 pins 24 pins may each be used for one of two
entirely different functions yielding a total pin configuration of 64.But the port pins have been multiplexed
to perform different functions to make 8051 as 40 Pin IC.
The port pin circuitry is as shown below.
Fig. 14 Port -0
Port -0 has 8 pins (P0.0-P0.7).The structure of a Port-0 pin is shown in fig 13.Port-0 can be configured as a
normal bidirectional I/O port or it can be used for address/data interfacing for accessing external memory.
When control is '1', the port is used for address/data interfacing. When the control is '0', the port can be used
as a normal bidirectional I/O port.
Let us assume that control is '0'. When the port is used as an input port, '1' is written to the latch. In this
situation both the output MOSFETs are 'off'. Hence the output pin floats. This high impedance pin can be
pulled up or low by an external source. When the port is used as an output port, a '1' written to the latch
again turns 'off' both the output MOSFETs and causes the output pin to float. An external pull-up is required
to output a '1'. But when '0' is written to the latch, the pin is pulled down by the lower MOSFET. Hence the
output becomes zero.
When the control is '1', address/data bus controls the output driver MOSFETs. If the address/data bus
(internal) is '0', the upper MOSFET is 'off' and the lower MOSFET is 'on'. The output becomes '0'. If the
address/data bus is '1', the upper transistor is 'on' and the lower transistor is 'off'. Hence the output is '1'.
Hence for normal address/data interfacing (for external memory access) no pull-up resistors are required.
Port-0 latch is written to with 1's when used for external memory access.
SJBIT/ECE
Page 17
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 18
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Port-2 is used for higher external address byte or a normal input/output port. The I/O operation is similar to
Port-1. Port-2 latch remains stable when Port-2 pin are used for external memory access. Here again due to
internal pull-up there is limited current driving capability.
SJBIT/ECE
Page 19
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Each pin of Port-3 can be individually programmed for I/O operation or for alternate function. The alternate
function can be activated only if the corresponding latch has been written to '1'. To use the port as input
port, '1' should be written to the latch. This port also has internal pull-up and limited current driving
capability.
Alternate functions of Port-3 pins
P3.0
P3.1
RxD
TxD
P3.2
P3.3
P3.4
P3.5
T0
T1
P3.6
P3.7
Note:
1. Port 1, 2, 3 each can drive 4 LS TTL inputs.
2. Port-0 can drive 8 LS TTL inputs in address /data mode. For digital output port, it needs external pull-up
resistors.
3. Ports-1,2and 3 pins can also be driven by open-collector or open-drain outputs.
Each Port 3 bit can be configured either as a normal I/O or as a special function bit. Reading a port (portpins) versus reading a latch. There is a subtle difference between reading a latch and reading the output port
pin.
The status of the output port pin is sometimes dependant on the connected load. For instance if a port is
configured as an output port and a '1' is written to the latch, the output pin should also show '1'. If the output
is used to drive the base of a transistor, the transistor turns 'on'. If the port pin is read, the value will be '0'
which is corresponding to the base-emitter voltage of the transistor. Reading a latch: Usually the
instructions that read the latch, read a value, possibly change it, and then rewrite it to the latch. These are
called "read-modify-write" instructions. Examples of a few instructions areORL P2, A; P2 <-- P2 or A
MOV P2.1, C; Move carry bit to PX.Y bit
In this the latch value of P2 is read, is modified such that P2.1 is the same as Carry and is then written
back to P2 latch.
Reading a Pin: Examples of a few instructions that read port pin, areMOV A, P0; Move port-0 pin values to A
MOV A, P1; Move port-1 pin values to A
SJBIT/ECE
Page 20
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Connecting External Memory: The following figure shows the connection between an 8051 and
external memory
Interfacing External Memory: The system designer is not limited by the amount of internal ROM and
RAM available on chip. Two separate external memory spaces are made available by the 16 bit Program
Counter PC and DPTR and by different control pins for enabling the external ROM and RAM chips.
Internal control entry accesses the correct physical memory , depending on the machine cycle state and
opcode being executed . There are several reasons for adding external memory, particularly Program
Memory, when applying the 8051 in a system. When project is in the prototype stage, having a masked
internal ROM for each program try is prohibitive. To help the programmer the manufacturers make
available an EPROM version, the 8751, which has 4K of on-chip EPROM that may be programmed and
erased as needed as the program is developed
If external program/data memory are to be interfaced, they are interfaced in the following way.
Enable Address) is low. The microcontroller by default starts searching for program from external
program memory.
2. PC is higher than FFFH for 8051 or 1FFFH for 8052.
3.
tells the outside world whether the external memory fetched is program memory or data memory.
is user configurable.
is processor controlled.
SJBIT/ECE
Page 21
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Accessing external memory: Access to external program memory uses the signal
enable) as the read strobe. Access to external data memory uses
P3.6).
(Program store
For external program memory, always 16 bit address is used. For example Access to external data memory
can be either 8-bit address or 16-bit address - 8-bit address- MOVX A, @Rp where Rp is either R0 or R1
MOVX @Rp, A
16 bit address- MOVX A,@DPTR
MOV X @DPTR, A.The external memory access in 8051 can be shown by a schematic diagram as given in
fig 19.
is low, or whenever PC contains a number higher than 0FFFH (for 8051) or 1FFF (for
Some typical use of code/program memory access: External program memory can be not only used to store
the code, but also for lookup table of various functions required for a particular application. Mathematical
SJBIT/ECE
Page 22
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
functions such as Sine, Square root, Exponential, etc. can be stored in the program memory (Internal or
external) and these functions can be accessed using MOVC instruction.
Timers / Counters :
8051 has two 16-bit programmable UP timers/counters. They can be configured to operate either as timers or as
event counters. The names of the two counters are T0 and T1 respectively. The timer content is available in
four 8-bit special function registers, viz, TL0,TH0,TL1 and TH1 respectively.
In the "timer" function mode, the counter is incremented in every machine cycle. Thus, one can think of it as
counting machine cycles. Hence the clock rate is 1/12 th of the oscillator frequency.
In the "counter" function mode, the register is incremented in response to a 1 to 0 transition at its corresponding
external input pin (T0 or T1). It requires 2 machine cycles to detect a high to low transition. Hence maximum
count rate is 1/24 th of oscillator frequency.
The operation of the timers/counters is controlled by two special function registers, TMOD and TCON
respectively.
Timer Mode control (TMOD) Special Function Register:
TMOD register is not bit addressable.
TMOD Address: 89 H
Various bits of TMOD are described as follows Gate: This is an OR Gate enabled bit which controls the
effect of
on START/STOP of Timer. It is set to one ('1') by the program to enable the interrupt to start/stop
the timer. If TR1/0 in TCON is set and signal on
pin is high then the timer starts counting using either
internal clock (timer mode) or external pulses (counter mode).
It is used for the selection of Counter/Timer mode.
Mode Select Bits:
SJBIT/ECE
Page 23
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 24
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
.
Fig .22of Timer in Mode 1
Timer Mode-2: (Auto-Reload Mode)
This is a 8 bit counter/timer operation. Counting is performed in TLX while THX stores a constant value. In this
mode when the timer overflows i.e. TLX becomes FFH, it is fed with the value stored in THX. For example if
we load THX with 50H then the timer in mode 2 will count from 50H to FFH. After that 50H is again reloaded.
This mode is useful in applications like fixed time sampling.
SJBIT/ECE
Page 25
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
controls
serial
data
communication.
SJBIT/ECE
Page 26
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Page 27
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
usually '0'), 8 data bits (LSB is sent first/received first), and a stop bit (which is usually '1'). Once received, the
stop bit goes into RB8 in the special function register SCON. The baud rate is variable.
The following figure shows the way the bits are transmitted/ received.
Where,
SMOD
is
the
7th
bit
of
PCON
register
fosc is the crystal oscillator frequency of the microcontroller
It can be noted that fosc/ (12 X [256- (TH1)]) is the timer overflow frequency in timer mode-2, which is the autoreload mode.
If timer-1 is not run in mode-2, then the baud rate is,
Timer-1 can be run using the internal clock, fosc/12 (timer
mode) or from any external source via pin T1 (P3.5) (Counter mode).
Example: If standard baud rate is desired, then 11.0592 MHz crystal could be selected. To get a standard 9600
baud rate, the setting of TH1 is calculated as follows.
Assuming SMOD to be '0'
SJBIT/ECE
Page 28
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Or,
Or,
In mode-1, if SM2 is set to 1, no receive interrupt (RI) is generated unless a valid stop bit is received.
Interrupts:
8051 provides 5 vectored interrupts. They are1.
2. TF0
3.
4. TF1
5. RI/TI
Out of these,
and
are external interrupts whereas Timer and Serial port interrupts are
generated internally. The external interrupts could be negative edge triggered or low level triggered.
All these interrupt, when activated, set the corresponding interrupt flags. Except for serial interrupt,
the interrupt flags are cleared when the processor branches to the Interrupt Service Routine (ISR).
The external interrupt flags are cleared on branching to Interrupt Service Routine (ISR), provided
the interrupt is negative edge triggered. For low level triggered external interrupt as well as for
serial interrupt, the corresponding flags have to be cleared by software by the programmer.
SJBIT/ECE
Page 29
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 2:
Addressing Modes: Introduction, Instruction syntax, Data types, Subroutines, Addressing modes: Immediate
addressing , Register addressing, Direct addressing, Indirect addressing, relative addressing, Absolute
addressing, Long addressing, Indexed addressing, Bit inherent addressing, bit direct addressing. Instruction set:
Instruction timings, 8051 instructions: Data transfer instructions, Arithmetic instructions, Logical instructions,
Branch instructions, Subroutine instructions, Bit manipulation instruction.
SJBIT/ECE
Page 30
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
direct , A
A, @Ri
A, Rn
direct, direct
A, #data
Page 31
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
(PC) + 1
(A)
((A) + (PC))
f. MOVX <dest-byte>,<src-byte>
Function: Move External
Description: The MOVX instructions transfer data between the Accumulator and a byte of external data
memory, which is why X is appended to MOV. There are two types of instructions, differing in whether they
provide an 8-bit or 16-bit indirect address to the external data RAM.
In the first type, the contents of R0 or R1 in the current register bank provide an 8-bit address multiplexed with
data on P0. Eight bits are sufficient for external I/O expansion decoding or for a relatively small RAM array.
For somewhat larger arrays, any output port pins can be used to output higher-order address bits. These pins are
controlled by an output instruction preceding the MOVX.
In the second type of MOVX instruction, the Data Pointer generates a 16-bit address. P2 outputs the high-order
eight address bits (the contents of DPH), while P0 multiplexes the low-order eight bits (DPL) with data. The P2
Special Function Register retains its previous contents, while the P2 output buffers emit the contents of DPH.
This form of MOVX is faster and more efficient when accessing very large data arrays (up to 64K bytes), since
no additional instructions are needed to set up the output ports.
It is possible to use both MOVX types in some situations. A large RAM array with its high-order address lines
driven by P2 can be addressed via the Data Pointer, or with code to output high-order address bits to P2,
followed by a MOVX instruction using R0 or R1.
Example: An external 256 byte RAM using multiplexed address/data lines is connected to the 8051 Port 0. Port
3 provides control lines for the external RAM. Ports 1 and 2 are used for normal I/O. Registers 0 and 1 contain
12H and 34H. Location 34H of the external RAM holds the value 56H. The instruction sequence,
MOVX A,@R1
MOVX @R0,A
SJBIT/ECE
Page 32
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
copies the value 56H into both the Accumulator and external RAM location 12H.
MOVX A,@DPTR
(A) ((DPTR))
PUSH direct
Function: Push onto stack
Description: The Stack Pointer is incremented by one. The contents of the indicated variable is then copied into
the internal RAM location addressed by the Stack Pointer. No flags are affected.
Example: On entering an interrupt routine, the Stack Pointer contains 09H. The Data Pointer holds the value
0123H. The
following instruction sequence,
PUSH DPL
PUSH DPH
leaves the Stack Pointer set to 0BH and stores 23H and 01H in internal RAM locations 0AH and 0BH,
respectively.
POP direct
Function: Pop from stack.
Description: The contents of the internal RAM location addressed by the Stack Pointer is read, and the Stack
Pointer is decremented by one. The value read is then transferred to the directly addressed byte indicated. No
flags are affected.
Example: The Stack Pointer originally contains the value 32H, and internal RAM locations 30H through 32H
contain the values 20H, 23H, and 01H, respectively. The following instruction sequence,
POP DPH
POP DPL
leaves the Stack Pointer equal to the value 30H and sets the Data Pointer to 0123H.
2. Arithmetic Group of Instructions
a. ADD A,<src-byte>
Function: Add
SJBIT/ECE
Page 33
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Description: ADD adds the byte variable indicated to the Accumulator, leaving the result in the Accumulator.
The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared
otherwise. When adding unsigned integers, the carry flag indicates an overflow occurred.
OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise, OV is
cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positive
operands, or a positive sum from two negative operands.
Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate.
Example: The Accumulator holds 0C3H (1100001lB), and register 0 holds 0AAH (10101010B). The following
instruction,
ADD A,R0
leaves 6DH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1.
ADD A, direct
(A)
(A) + (direct)
ADD A, @Ri
(A)
(A) + data
ADDC A, <src-byte>
Function: Add with Carry
Description: ADDC simultaneously adds the byte variable indicated, the carry flag and the Accumulator
contents, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set respectively, if there
is a carry-out from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates
an overflow occurred.
OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not out of bit 6; otherwise
OV is cleared. When adding signed integers, OV indicates a negative number produced as the sum of two
positive operands or a positive sum from two negative operands.
Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate.
Example: The Accumulator holds 0C3H (11000011B) and register 0 holds 0AAH (10101010B) with the carry
flag set. The following instruction,
ADDC A,R0
leaves 6EH (01101110B) in the Accumulator with AC cleared and both the Carry flag and OV set to 1.
ADDC A,Rn Operation: ADDC
SJBIT/ECE
Page 34
www.rejinpaul.com
Microcontrollers
(A)
www.rejinpaul.com
ADDC A, direct
(A)
10ES42
Operation: ADDC
SUBB A,<src-byte>
Function: Subtract with borrow
Description: SUBB subtracts the indicated variable and the carry flag together from the Accumulator, leaving
the result in the Accumulator. SUBB sets the carry (borrow) flag if a borrow is needed for bit 7 and clears C
otherwise. (If C was set before executing a SUBB instruction, this indicates that a borrow was needed for the
previous step in a
multiple-precision subtraction, so the carry is subtracted from the Accumulator along with the source operand.)
AC is set if a borrow is needed for bit 3 and cleared otherwise. OV is set if a borrow is needed into bit 6, but not
into bit 7, or into bit 7, but not bit 6.
When subtracting signed integers, OV indicates a negative number produced when a negative value is
subtracted from a positive value, or a positive result when a positive number is subtracted from a negative
number.
The source operand allows four addressing modes: register, direct, register-indirect, or immediate.
Example: The Accumulator holds 0C9H (11001001B), register 2 holds 54H (01010100B), and the carry flag is
set. The instruction,
SUBB A,R2
will leave the value 74H (01110100B) in the accumulator, with the carry flag and AC cleared but OV set.
Instructions
SJBIT/ECE
OpCode Bytes
Flags
SUBB A,#data
0x94
C, AC, OV
0x95
C, AC, OV
SUBB A,@R0
0x96
C, AC, OV
Page 35
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SUBB A,@R1
0x97
C, AC, OV
SUBB A,R0
0x98
C, AC, OV
SUBB A,R1
0x99
C, AC, OV
SUBB A,R2
0x9A
C, AC, OV
SUBB A,R3
0x9B
C, AC, OV
SUBB A,R4
0x9C
C, AC, OV
SUBB A,R5
0x9D
C, AC, OV
SUBB A,R6
0x9E
C, AC, OV
SUBB A,R7
0x9F
C, AC, OV
SUBB A,Rn
Operation: SUBB
(A)
(A)
- (C) - (Rn)
SUBB A, direct
Operation: SUBB
(A)
(A)
- (C) - (direct)
SUBB A,@Ri
Operation: SUBB
(A)
(A)
- (C) - ((Ri))
SWAP A
Function: Swap nibbles within the Accumulator
Description: SWAP A interchanges the low- and high-order nibbles (four-bit fields) of the Accumulator (bits 3
through 0 and bits 7 through 4). The operation can also be thought of as a 4-bit rotate instruction. No flags are
affected.
Example: The Accumulator holds the value 0C5H (11000101B). The instruction,
SWAP A
leaves the Accumulator holding the value 5CH (01011100B
Operation: SWAP
SJBIT/ECE
Page 36
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
(A3-0) D (A7-4)
XCH A,<byte>
Function: Exchange Accumulator with byte variable
Description: XCH loads the Accumulator with the contents of the indicated variable, at the same time writing
the original Accumulator contents to the indicated variable. The source/destination operand can use register,
direct, or register-indirect addressing.
Example: R0 contains the address 20H. The Accumulator holds the value 3FH (0011111lB). Internal RAM
location 20H holds the value 75H (01110101B).
The following instruction,
XCH A,@R0
leaves RAM location 20H holding the values 3FH (00111111B) and 75H (01110101B) in the accumulator.
XCHD A,@Ri
Function: Exchange Digit
Description: XCHD exchanges the low-order nibble of the Accumulator (bits 3 through 0), generally
representing a hexadecimal or BCD digit, with that of the internal RAM location indirectly addressed by the
specified register.
The high-order nibbles (bits 7-4) of each register are not affected. No flags are affected.
Example: R0 contains the address 20H. The Accumulator holds the value 36H (00110110B). Internal RAM
location 20H holds the value 75H (01110101B).
The following instruction,
XCHD A,@R0
leaves RAM location 20H holding the value 76H (01110110B) and 35H (00110101B) in the Accumulator.
CPL A
Function: Complement Accumulator
Description: CPLA logically complements each bit of the Accumulator (ones complement). Bits which
previously contained a 1 are changed to a 0 and vice-versa. No flags are affected.
Example: The Accumulator contains 5CH (01011100B).
SJBIT/ECE
Page 37
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Page 38
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
DEC R0
DEC @R0
leaves register 0 set to 7EH and internal RAM locations 7EH and 7FH set to 0FFH and 3FH.
DEC A
DEC Rn
DEC direct
DEC @Ri
DIV AB
Function: Divide
Description: DIV AB divides the unsigned eight-bit integer in the Accumulator by the unsigned eight-bit
integer in register B.
The Accumulator receives the integer part of the quotient; register B receives the integer remainder. The carry
and OV flags are cleared.
Exception: if B had originally contained 00H, the values returned in the Accumulator and B-register are
undefined and the overflow flag are set. The carry flag is cleared in any case.
Example: The Accumulator contains 251 (0FBH or 11111011B) and B contains 18 (12H or 00010010B). The
following instruction,
DIV AB
leaves 13 in the Accumulator (0DH or 00001101B) and the value 17 (11H or 00010001B) in B, since
251 = (13 x 18) + 17. Carry and OV are both cleared.
INC <byte>
Function: Increment
Description: INC increments the indicated variable by 1. An original value of 0FFH overflows to 00H. No
flags are affected.
Example: Register 0 contains 7EH (011111110B). Internal RAM locations 7EH and 7FH contain 0FFH and
40H,
respectively. The following instruction sequence,
SJBIT/ECE
Page 39
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
INC @R0
INC R0
INC @R0
leaves register 0 set to 7FH and internal RAM locations 7EH and 7FH holding 00H and 41H, respectively.
INC A
Operation: INC
(A)
(A) + 1
INC DPTR
Function: Increment Data Pointer
Description: INC DPTR increments the 16-bit data pointer by 1. A 16-bit increment (modulo 216) is
performed, and an overflow of the low-order byte of the data pointer (DPL) from 0FFH to 00H increments the
high-order byte (DPH).
No flags are affected.
This is the only 16-bit register which can be incremented.
Example: Registers DPH and DPL contain 12H and 0FEH, respectively. The following instruction sequence,
INC DPTR
INC DPTR
INC DPTR
changes DPH and DPL to 13H and 01H.
MUL AB
Function: Multiply
Description: MUL AB multiplies the unsigned 8-bit integers in the Accumulator and register B. The low-order
byte of the 16-bit product is left in the Accumulator, and the high-order byte in B. If the product is greater than
255 (0FFH), the overflow flag is set; otherwise it is cleared. The carry flag is always cleared.
Example: Originally the Accumulator holds the value 80 (50H). Register B holds the value 160 (0A0H). The
instruction,
MUL AB
SJBIT/ECE
Page 40
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
will give the product 12,800 (3200H), so B is changed to 32H (00110010B) and the Accumulator is cleared.
The overflow flag is set, carry is cleared.
NOP
Function: No Operation
Description: Execution continues at the following instruction. Other than the PC, no registers or flags are
affected.
Logical instructions
ANL <dest-byte>,<src-byte>
Function: Logical-AND for byte variables
Description: ANL performs the bitwise logical-AND operation between the variables indicated and stores the
results in the destination variable. No flags are affected.
The two operands allow six addressing mode combinations. When the destination is the Accumulator, the
source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct
address, the source can be the Accumulator or immediate data.
.Example: If the Accumulator holds 0C3H (1100001lB), and register 0 holds 55H (01010101B), then the
following instruction,
ANL A,R0
leaves 41H (01000001B) in the Accumulator.
When the destination is a directly addressed byte, this instruction clears combinations of bits in any RAM
location or hardware register. The mask byte determining the pattern of bits to be cleared would either be a
constant contained in the instruction or a value computed in the Accumulator at run-time. The following
instruction,
ANL P1,#01110011B
clears bits 7, 3, and 2 of output port 1.
Instructions
SJBIT/ECE
0x52
None
0x53
None
ANL A,#data
0x54
None
0x55
None
ANL A,@R0
0x56
None
Page 41
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
ANL A,@R1
0x57
None
ANL A,R0
0x58
None
ANL A,R1
0x59
None
ANL A,R2
0x5A
None
ANL A,R3
0x5B
None
ANL A,R4
0x5C
None
ANL A,R5
0x5D
None
ANL A,R6
0x5E
None
ANL A,R7
0x5F
None
0x82
0xB0
ANL A,Rn
Operation: ANL
(A)
(A) ^(Rn)
ANL A,@Ri
Operation: ANL
(A) (A) ^ ((Ri))
ANL direct,#data
Operation: ANL
(direct)
(direct) ^#data
Page 42
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
ORL A, direct ; or the content of Accumulator and the memory and store the
result in Accumulator
ORL A, @Ri
ORL C,<src-bit>
Function: Logical-OR for bit variables
Description: Set the carry flag if the Boolean value is a logical 1; leave the carry in its current state otherwise.
A slash ( / ) preceding the operand in the assembly language indicates that the logical complement of the
addressed bit is used as the source value, but the source bit itself is not affected. No other flags are affected.
Example:
ORL C, ACC.7
ORL C, /OV
SETB
Operation: SETB
Function: Set Bit
SETB bit addr
Syntax:
Description: Sets the specified bit.
XRL <dest-byte>,<src-byte>
Function: Logical Exclusive-OR for byte variables
SJBIT/ECE
Page 43
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Description: XRL performs the bitwise logical Exclusive-OR operation between the indicated variables,
storing the results in the destination. No flags are affected.
The two operands allow six addressing mode combinations. When the destination is the Accumulator, the
source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct
address, the source can be the Accumulator or immediate data.
Example: If the Accumulator holds 0C3H (1100001lB) and register 0 holds 0AAH (10101010B) then the
instruction,
XRL A,R0
leaves the Accumulator holding the value 69H (01101001B).
Instructions
0x62
None
0x63
None
XRL A,#data
0x64
None
0x65
None
XRL A,@R0
0x66
None
XRL A,@R1
0x67
None
XRL A,R0
0x68
None
XRL A,R1
0x69
None
XRL A,R2
0x6A
None
XRL A,R3
0x6B
None
XRL A,R4
0x6C
None
XRL A,R5
0x6D
None
XRL A,R6
0x6E
None
XRL A,R7
0x6F
None
Rotate Instructions
RL A
Function: Rotate Accumulator Left
Description: The eight bits in the Accumulator are rotated one bit to the left. Bit 7 is rotated into the bit 0
position. No flags are affected.
SJBIT/ECE
Page 44
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Example: The Accumulator holds the value 0C5H (11000101B). The following instruction,
RL A
leaves the Accumulator holding the value 8BH (10001011B) with the carry unaffected.
RLC
OpCode
Bytes
Flags
Page 45
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
AJMP page0
0x01
None
AJMP page1
0x21
None
AJMP page2
0x41
None
AJMP page3
0x61
None
AJMP page4
0x81
None
AJMP page5
0xA1
None
AJMP page6
0xC1
None
AJMP page7
0xE1
None
Description: AJMP unconditionally jumps to the indicated code address. The new value for the Program
Counter is calculated by replacing the least-significant-byte of the Program Counter with the second byte of the
AJMP instruction, and replacing bits 0-2 of the most-significant-byte of the Program Counter with 3 bits that
indicate the page of the byte following the AJMP instruction. Bits 3-7 of the most-significant-byte of the
Program Counter remain unchanged.
Since only 11 bits of the Program Counter are affected by AJMP, jumps may only be made to code located
within the same 2k block as the first byte that follows AJMP.
Operation: LJMP
Function: Long Jump
LJMP code address.
Syntax:
Description: LJMP jumps unconditionally to the specified code address.
Operation: SJMP
Function: Short Jump
SJMP reladdr
Syntax:
Description: SJMP jumps unconditionally to the address specified reladdr. Reladdr must be within -128 or
+127 bytes of the instruction that follows the SJMP instruction
Conditional Branch Instructions
Operation: JNC
Function: Jump if Carry Not Set
JNC reladdr
Syntax:
Description: JNC branches to the address indicated by reladdr if the carry bit is not set. If the carry bit is set
program execution continues with the instruction following the JNB instruction.
Operation: JC
SJBIT/ECE
Page 46
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
DJNZ
Decrement and Jump if Not Zero
DJNZ register, reladdr
Syntax:
Instructions
OpCode
Bytes
Flags
0xD5
None
SJBIT/ECE
Page 47
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
DJNZ R0,reladdr
0xD8
None
DJNZ R1,reladdr
0xD9
None
DJNZ R2,reladdr
0xDA
None
DJNZ R3,reladdr
0xDB
None
DJNZ R4,reladdr
0xDC
None
DJNZ R5,reladdr
0xDD
None
DJNZ R6,reladdr
0xDE
None
DJNZ R7,reladdr
0xDF
None
Description: DJNZ decrements the value of register by 1. If the initial value of register is 0, decrementing the
value will cause it to reset to 255 (0xFF Hex). If the new value of register is not 0 the program will branch to
the address indicated by relative addr. If the new value of register is 0 program flow continues with the
instruction following the DJNZ instruction.
Operation:
Function:
Syntax:
CJNE
Compare and Jump If Not Equal
CJNE operand1,operand2,reladdr
Instructions
OpCode
Bytes
Flags
0xB4
0xB5
CJNE @R0,#data,reladdr
0xB6
CJNE @R1,#data,reladdr
0xB7
CJNE R0,#data,reladdr
0xB8
CJNE R1,#data,reladdr
0xB9
CJNE R2,#data,reladdr
0xBA
CJNE R3,#data,reladdr
0xBB
CJNE R4,#data,reladdr
0xBC
CJNE R5,#data,reladdr
0xBD
CJNE R6,#data,reladdr
0xBE
CJNE R7,#data,reladdr
0xBF
Description: CJNE compares the value of operand1 and operand2 and branches to the indicated relative
address if operand1 and operand2 are not equal. If the two operands are equal program flow continues with the
instruction following the CJNE instruction.
SJBIT/ECE
Page 48
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The Carry bit (C) is set if operand1 is less than operand2, otherwise it is cleared.
SJBIT/ECE
Page 49
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 50
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 51
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 52
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 53
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 54
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 55
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 56
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 57
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 58
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 3:
8051 programming: Assembler directives, Assembly language programs and Time delay calculations.
Introduction:
SJBIT/ECE
Page 59
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
8051 micro controller has one data type. It is 8-bit and size of each register is also 8-bit. It is job of
programmer to break down data larger than 8 bits (00 to FFH, 0 to 255 in decimal) to be processed by CPU.
Data byte (DB) directive: The DB directive is most widely used data directive in assembler It is used to define
8-bit data. When DB is used to define data, the number can be in decimal, binary, hex or ASCII formats. The
assembler will convert the number into hex. The assembler will assign the ASCII code for the numbers or
characters automatically. The DB directive is only directive that can be used to define ASCII strings larger than
two characters Therefore, it should be used for all ASCII data definitions.
The most widely used Assembler directives are ORG Directive
EQU Directive & END Directive
Delay calculations:
Delay
Calculations
50mS
Xtal freq
=11.0592MHz
50mS/1.085uS
= 46082.9
Code
Remarks
46082.9/255 = 180.7
46082.9 / x =182
Find value of x
182 / 2 = 91
500mS
Xtal freq
=11.0592MHz
500mS/1.085uS =
460829.5
460829.5 / 255 =
1807.1
1807.1 / x = 8
1807.1 / 226 = 8
8/2=4
Outer loop = 4
Delay:Mov R0,#4
Here2:Mov R1, #226
Here1:Mov R2, #255
Here:DJNZ R2, Here
DJNZ R1, Here1
DJNZ R0,Here2
End
SJBIT/ECE
Page 60
www.rejinpaul.com
Microcontrollers
1Second
Xtal freq=
20MHz
10ES42
www.rejinpaul.com
1 / 0.6uS =
1.6 x 10e6
1.6 x 10e6 / 255 =
6536
6536 / 255 =
25.6
6536 / x = 26
6536 / 251 = 26
26/2 = 13
Outer loop = 13
Delay:Mov R0, # 13
Here2: Mov R1, # 251
Here1: Mov R2, #255
Here: DJNZ R2, Here
DJNZ R1, Here1
DJNZ R0, Here2
Ret
SJBIT/ECE
Page 61
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 4:
8051 Interfacing and Applications: Basics of I/O concepts, I/O Port Operation, Interfacing 8051
to LCD, Keyboard, parallel and serial ADC, DAC, Stepper motor interfacing and DC
motor interfacing and programming.
Objectives:
At the end of this chapter, we will be able to:
This chapter basically gives an insight into the study of different interfacings listed above. Further we will
also study and understand their operation that is the working principle. We will further discuss on how to
develop these interfaces using assembly and C.
SJBIT/ECE
Page 62
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
It has a permanent magnet rotor called the shaft which is surrounded by a stator. Commonly used stepper
motors have four stator windings that are paired with a center tapped common. Such motors are called as fourphase or unipolar stepper motor.
The stator is a magnet over which the electric coil is wound. One end of the coil are connected commonly either
to ground or +5V. The other end is provided with a fixed sequence such that the motor rotates in a particular
direction. Stepper motor shaft moves in a fixed repeatable increment, which allows one to move it to a precise
position. Direction of the rotation is dictated by the stator poles. Stator poles are determined by the current sent
through the wire coils.
Step angle:
Step angle is defined as the minimum degree of rotation with a single step.
No of steps per revolution = 360 / step angle
Steps per second = (rpm x steps per revolution) / 60
Example: step angle = 2
No of steps per revolution = 180
Page 63
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
As discussed earlier the coils need to be energized for the rotation. This can be done by sending a bits sequence
to one end of the coil while the other end is commonly connected. The bit sequence sent can make either one
phase ON or two phase ON for a full step sequence or it can be a combination of one and two phase ON for half
step sequence. Both are tabulated below.
Full Step:
Two Phase ON
One Phase ON
SJBIT/ECE
Page 64
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The following example 1 to example 6 shown below will elaborate on the discussion done above:
Example 1: Write an ALP to rotate the stepper motor clockwise / anticlockwise
continuously with full step sequence.
Program:
MOV A,#66H
BACK: MOV P1,A
RR A
ACALL DELAY
SJMP BACK
DELAY: MOV R1,#100
UP1:
MOV R2,#50
UP:
DJNZ R2,UP
DJNZ R1,UP1
RET
Note: motor to rotate in anticlockwise use instruction RL A instead of RR A
SJBIT/ECE
Page 65
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Example 2: A switch is connected to pin P2.7. Write an ALP to monitor the status
of the SW. If SW = 0, motor moves clockwise and if SW = 1, motor moves
anticlockwise.
Program:
ORG 0000H
SETB P2.7
MOV A, #66H
MOV P1,A
TURN: JNB P2.7, CW
RL A
ACALL DELAY
MOV P1,A
SJMP TURN
CW: RR A
ACALL DELAY
MOV P1,A
SJMP TURN
DELAY: as previous example
SJBIT/ECE
Page 66
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Example 4: Rotate the stepper motor continuously clockwise using half-step 8-step
sequence. Say the sequence is in ROM locations.
Program:
ORG 0000H
START: MOV R0, #08
MOV DPTR, #HALFSTEP
RPT:
CLR A
MOVC A, @A+DPTR
MOV P1, A
ACALL DELAY
INC DPTR
DJNZ R0, RPT
SJMP START
ORG 0200H
HALFSTEP DB 09, 08, 0CH, 04, 06, 02, 03, 01
END
Programming Stepper Motor with 8051 C
The following examples 5 and 6 will show the programming of stepper motor using 8051 C.
Example 5: Problem definition is same as example 1.
Program:
#include <reg51.h>
void main ()
{
while (1)
{
P1=0x66;
MSDELAY (200);
P1=0x33;
MSDELAY (200);
P1=0x99;
MSDELAY (200);
P1=0xCC;
MSDELAY (200);
}
}
void MSDELAY (unsigned char value)
{
unsigned int x,y;
for(x=0;x<1275;x++)
for(y=0;y<value;y++);
}
SJBIT/ECE
Page 67
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 68
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 69
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 70
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 71
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Example 8: A switch is connected to pin P2.7. Write an C to monitor the status of the SW.
If SW = 0, DC motor moves 50% duty cycle pulse and if SW = 1, DC motor moves with
25% duty cycle pulse.
Program:
# include <reg51.h>
sbit SW =P2^7;
sbit MTR = P1^0;
void main ( )
{
SW=1;
MTR=0;
while( )
{
if( SW==1)
{
MTR=1;
Msdelay(25);
MTR=0;
Msdelay(75);
}
else
{
MTR=1;
Msdelay(50);
MTR=0;
Msdelay(50);
}
}
}
The interfacing diagrams for the above examples can be referred to the text.
SJBIT/ECE
Page 72
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
resistors (or current sources). However, wide converters perform slowly due to increasingly large RC-constants
for each added R-2R link.
The first criterion for judging a DAC is its resolution, which is a function of the number of binary inputs. The
common ones are 8, 10, and 12 bits. The number of data bit inputs decides the resolution of the DAC since the
number of analog output levels is equal to 2n, where n is the number of data bit inputs.
DAC0808:
The digital inputs are converter to current Iout, and by connecting a resistor to the Iout pin, we can convert the
result to voltage. The total current Iout is a function of the binary numbers at the D0-D7 inputs of the DAC0808
and the reference current Iref , and is as follows:
Usually reference current is 2mA. Ideally we connect the output pin to a resistor, convert this current to
voltage, and monitor the output on the scope. But this can cause inaccuracy; hence an opamp is used to convert
the output current to voltage. The 8051 connection to DAC0808 is as shown in the figure 6 below.
DECR:
SJBIT/ECE
MOV A, #00H
MOV P1, A
INC A
CJNE A, #255, INCR
MOV P1, A
DEC A
CJNE A, #00, DECR
SJMP INCR
END
Page 73
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 74
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Typical values are R = 10K ohms and C =150pF. We get f = 606 kHz and the conversion time is 110s.
SJBIT/ECE
Page 75
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Vref/2 : It is used for the reference voltage. If this pin is open (not connected), the analog input voltage is
in the range of 0 to 5 volts (the same as the Vcc pin). If the analog input range needs to be 0 to 4 volts,
Vref/2 is connected to 2 volts. Step size is the smallest change can be discerned by an ADC
Vref/2 Relation to Vin Range
D0-D7: The digital data output pins. These are tri-state buffered. The converted data is accessed only when
CS =0 and RD is forced low. To calculate the output voltage, use the following formula
The following steps must be followed for data conversion by the ADC804 chip:
1. Make CS= 0 and send a L-to-H pulse to pin WR to start conversion.
2. Monitor the INTR pin, if high keep polling but if low, conversion is complete, go to next step.
3. Make CS= 0 and send a H-to-L pulse to pin RD to get the data out
Figure 8 shows the read and write timing for ADC804. Figure 9 and 10 shows the self clocking with the RC
component for frequency and the external frequency connected to XTAL2 of 8051.
SJBIT/ECE
Page 76
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Figure 10: 8051 Connection to ADC0804 with Clock from XTAL2 of 8051
Now let us see how we write assembly as well as C program for the interfacing diagram shown in figure 10.
SJBIT/ECE
Page 77
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
BACK:
HERE:
MYDATA EQU P1
MOV P1, #0FFH
SETB P2.7
CLR P2.6
SETB P2.6
JB P2.7, HERE
CLR P2.5
MOV A, MYDATA
SETB P2.5
SJMP BACK
Programming ADC0804 in C
#include<reg51.h>
Sbit RD=P2^5;
Sbit WR=P2^6;
Sbit INTR=P2^7;
Sfr Mydata=P1;
Void main ( )
{
Unsigned char value;
Mydata =0xFF;
INTR=1;
RD=1;
WR=1;
While (1)
{
WR=0;
WR=1;
While (INTR == 1);
RD=0;
Value =Mydata;
RD=1;
}
}
ADC0808/0809 chip:
ADC808 has 8 analog inputs. It allows us to monitor up to 8 different transducers using only single chip. The
chip has 8-bit data output just like the ADC804. The 8 analog input channels are multiplexed and selected
according to the values given to the three address pins, A, B, and C. that is; if CBA=000, CH0 is selected;
CBA=011, CH3 is selected and so on. The pin details of ADC0808 are as shown in the figure 11 below.
(Explanation can be done as is with ADC0804).
SJBIT/ECE
Page 78
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Page 79
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Note: replace the assembly instructions with equivalent C statements for programming ADC0808 in C
LCD Interfacing:
LCD is finding widespread use replacing LEDs for the following reasons:
The declining prices of LCD
The ability to display numbers, characters, and graphics
Incorporation of a refreshing controller into the LCD, thereby relieving the CPU of the task of refreshing
the LCD
Ease of programming for characters and graphics
Pin Description:
SJBIT/ECE
Page 80
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
LCD timing diagram for reading and writing is as shown in figure 14 and 15.
SJBIT/ECE
Page 81
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 82
www.rejinpaul.com
Microcontrollers
10ES42
MOV A,#Y
;display letter Y
ACALL DATAWRT
;call display subroutine
ACALL DELAY
;give LCD some time
MOV A,#E
;display letter E
ACALL DATAWRT
;call display subroutine
ACALL DELAY
;give LCD some time
MOV A,#S
;display letter S
ACALL DATAWRT
;call display subroutine
AGAIN: SJMP AGAIN
;stay here
COMNWRT:
MOV P1,A
CLR P2.0
CLR P2.1
SETB P2.2
ACALL DELAY
CLR P2.2
RET
DATAWRT:
MOV P1,A
SETB P2.0
CLR P2.1
SETB P2.2
ACALL DELAY
CLR P2.2
RET
DELAY:
MOV R3,#50
HERE2: MOV R4,#255
HERE: DJNZ R4,HERE
DJNZ R3,HERE2
RET
END
www.rejinpaul.com
Page 83
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Example 12: Modify example 11, to check for the busy flag (D7=>P1.7), then send the
command and hence display message NO.
;Check busy flag before sending data, command to LCD;p1=data pin ;P2.0 connected to RS
pin ;P2.1 connected to R/W pin ;P2.2 connected to E pin
ORG 0H
MOV A,#38H
;init. LCD 2 lines ,5x7 matrix
ACALL COMMAND
;issue command
MOV A,#0EH
;LCD on, cursor on
ACALL COMMAND
;issue command
MOV A,#01H
;clear LCD command
ACALL COMMAND
;issue command
MOV A,#06H
;shift cursor right
ACALL COMMAND
issue command
MOV A,#86H
;cursor: line 1, pos. 6
ACALL COMMAND
;command subroutine
MOV A,#N
;display letter N
ACALL DATA_DISPLAY
MOV A,#O
;display letter O
ACALL DATA_DISPLAY
HERE: SJMP HERE
;STAY HERE
COMMAND:
ACALL READY
;is LCD ready?
MOV P1,A
;issue command code
CLR P2.0
;RS=0 for command
CLR P2.1
;R/W=0 to write to LCD
SETB P2.2
;E=1 for H-to-L pulse
CLR P2.2
;E=0,latch in
RET
DATA_DISPLAY:
ACALL READY
;is LCD ready?
MOV P1,A
;issue data
SETB P2.0
;RS=1 for data
CLR P2.1
;R/W =0 to write to LCD
SETB P2.2
;E=1 for H-to-L pulse
CLR P2.2
;E=0,latch in
RET
READY:
SETB P1.7
;make P1.7 input port
CLR P2.0
;RS=0 access command reg
SETB P2.1
;R/W=1 read command reg ;
BACK:SETB P2.2
;E=1 for H-to-L pulse
CLR P2.2
;E=0 H-to-L pulse
JB P1.7,BACK
;stay until busy flag=0
RET
END
SJBIT/ECE
Page 84
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Programming LCD in C
Example 13: Write an 8051 C program to send letters P, I, and C to the LCD using
the busy flag method.
Solution:
#include <reg51.h>
sfr ldata = 0x90;
sbit rs = P2^0;
sbit rw = P2^1;
sbit en = P2^2;
sbit busy = P1^7;
void main(){
lcdcmd(0x38);
lcdcmd(0x0E);
lcdcmd(0x01);
lcdcmd(0x06);
lcdcmd(0x86);
//line 1, position 6
lcddata(P);
lcddata(I);
lcddata(C);
}
void lcdcmd(unsigned char value){
lcdready();
ldata = value;
rs = 0;
rw = 0;
SJBIT/ECE
en = 1;
MSDelay(1);
Page 85
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
void lcdready(){
busy = 1;
rs = 0;
rw = 1;
while(busy==1){
en = 0;
MSDelay(1);
en = 1;
}
}
void Msdelay(unsigned int itime){
unsigned int i, j;
for(i=0;i<itime;i++)
for(j=0;j<1275;j++);
}
Keyboard Interfacing:
Keyboards are organized in a matrix of rows and columns. The CPU accesses both rows and columns through
ports. Therefore, with two 8-bit ports, an 8 x 8 matrix of keys can be connected to a microprocessor. When a
key is pressed, a row and a column make a contact. Otherwise, there is no connection between rows and
columns. A 4x4 matrix connected to two ports. The rows are connected to an output port and the columns are
connected to an input port.
Scanning and Identifying the Key:
SJBIT/ECE
Page 86
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
To detect a pressed key, the microcontroller grounds all rows by providing 0 to the output latch, then it
reads the columns
If the data read from columns is D3 D0 =1111, no key has been pressed and the process continues till
key press is detected
If one of the column bits has a zero, this means that a key press has occurred For example, if D3 D0 =
1101, this means that a key in the D1 column has been pressed After detecting a key press,
microcontroller will go through the process of identifying the key
Starting with the top row, the microcontroller grounds it by providing a low to row D0 only. It reads the
columns, if the data read is all 1s, no key in that row is activated and the process is moved to the next
row
It grounds the next row, reads the columns, and checks for any zero. This process continues until the
row is identified.
After identification of the row in which the key has been pressed. Find out which column the pressed
key belongs to
Algorithm for detection and identification of key activation goes through the following stages:
1. To make sure that the preceding key has been released, 0s are output to all rows at once, and the columns are
read and checked repeatedly until all the columns are high
When all columns are found to be high, the program waits for a short amount of time before it goes to
the next stage of waiting for a key to be pressed
2. To see if any key is pressed, the columns are scanned over and over in an infinite loop until one of them has a
0 on it
Remember that the output latches connected to rows still have their initial zeros (provided in stage 1),
making them grounded
SJBIT/ECE
Page 87
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
After the key press detection, it waits 20 ms for the bounce and then scans the columns again
(a) It ensures that the first key press detection was not an erroneous one due a spike noise
(b) The key press. If after the 20-ms delay the key is still pressed, it goes back into the loop to detect a
real key press
3. To detect which row key press belongs to, it grounds one row at a time, reading the columns each time
If it finds that all columns are high, this means that the key press cannot belong to that row. Therefore, it
grounds the next row and continues until it finds the row the key press belongs to
Upon finding the row that the key press belongs to, it sets up the starting address for the look-up table
holding the scan codes (or ASCII) for that row
4. To identify the key press, it rotates the column bits, one bit at a time, into the carry flag and checks to see if it
is low
Upon finding the zero, it pulls out the ASCII code for that key from the look-up table
otherwise, it increments the pointer to point to the next element of the look-up table
SJBIT/ECE
Page 88
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Note: The assembly as well as the C program can be written in accordance to the algorithm of the flowchart
shown.
SJBIT/ECE
Page 89
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Summary
This chapter gives the details of six different devices that can be interfaced to 8051. These are widely used in
many applications. Initially, we discussed about the stepper motor, giving the details on the working, sending
sequence and hence writing assembly and C program. In continuation to that we also learnt how to interface DC
motor, and DC motors with PWM. The chapter also covers the study of devices such as DAC, parallel ADC and
serial ADC, LCD and Keyboard along with the interfacing of these devices to 8051. We further, studied how to
write assembly and C program for all the above said interfaces which will help in developing applications.
SJBIT/ECE
Page 90
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Unit: 5: 8051 Interrupts and Timers/counters: Basics of interrupts, 8051 interrupt structure, Timers and
Counters, 8051 timers/counters, programming 8051 timers in assembly and C.
SJBIT/ECE
Page 91
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The 8051 has two timers\counters. They can be used either as timers to generate time delay or as counters to
count events happening outside the micro computer. Now we shall see how they are programmed.
PROGRAMMING 8051TIMERS:
8051 has two timers, timer 0 & timer 1.this module has two 16bit registers.T0 and T1 registers.These registers
can be configured to operate either as timers or event counters. In the timer function. The register is
incremented every machine cycle. Thus, one can think it as counting machine cycles. Since a machine cycle
consists
of
12
oscillator
periods,
the
count
rate
is
1/12
of
the
oscillator
frequency.
The 16 bit register of T0 / T1 is accessed as low byte and high byte (TH0 / TH1)
:
SJBIT/ECE
Page 92
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 93
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 94
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 95
www.rejinpaul.com
Microcontrollers
SJBIT/ECE
10ES42
www.rejinpaul.com
Page 96
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Interrupts
Concept of Interrupt:
A computer has only two ways to determine the conditions that exist in internal and external circuits. One
method uses software instructions that jump to subroutines on the states of flags and port pins. The second
method responds to hardware signals, called interrupts that force the program to call a subroutine. Most
applications of microcontroller involve responding to events quickly enough to control the environment that
generates the events termed real-time programming.
Interrupts may be generated by internal chip operation or provided by external sources. Any interrupt can cause
the 8051 to perform a hardware call to an interrupt-handling subroutine that is located at a predetermined
absolute address in program memory.
The 8051 has five interrupts of which three are internally generated namely:
1. Timer 0 overflow: This is indicated by TF0 in TCON, being set
2. Timer 1 overflow: This is indicated by TF1 in TCON, being set
3. Serial port interrupts (RI and TI): Whenever a data byte is received, an interrupt bit, RI is set to 1 in
SCON register. When a data byte is transmitted an interrupt bit TI, is set in SCON. They are ORed
together to provide a single interrupt to the processor. These flags must be reset by software instruction
to enable the next data communication operation.
Two interrupts are triggered by external signals provided by circuitry that is connected to pins INTO and INT1
(P3.2 and P3.3).
1. External signal at pin INTO (P3.2): When a high-to-low edge signal is received on P3.2, the external
interrupt 0 edge flag IE0 (TCON.1) is set. This flag is cleared when the processor branches to the
subroutine. When the external interrupt signal control bit IT0 (TCON.0) is set to 1 (by program) then
interrupt is triggered by falling edge signal. If IT0 is 0, a low-level signal in INTO triggers the interrupt.
2. External signal at pin INT1 (P3.3): Flags IE1 (TCON.3) and IT1 (TCON.2) are similar to IE0 and IT0
in function.
SJBIT/ECE
Page 97
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Each of these interrupts has an address associated where the routine is to be written called as interrupt service
routine addresses. The addresses are listed below:
Interrupt
Address called
IE0
0003
TF0
000B
IE1
0013
TF1
001B
Serial
0023
Sequence of events
The sequence of events that take place on the occurrence of an interrupt is as shown below:
An observation made from the above diagram can be explained by the following steps:
1. The programmer enables interrupt circuit action by setting interrupt enable flag bit to 1. The 8051 has a
total of five interrupt sources of each of which may generate an interrupt signal.
2. External or internal circuit action causes one of interrupt signals to be generated.
SJBIT/ECE
Page 98
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
3. The CPU finishes the current instruction, pushes the PC on the stack, and replaces the original PC
contents with the address of the first instruction of the program code for the particular source that caused
the interrupt. All the other interrupting source enable bits are temporarily disabled.
4. The interrupt program executes. While executing, the interrupt program must reset internal flag that
generated the interrupt signals.
5. At the end of the interrupt program, a RETI instruction resets all the interrupt-enable circuitry and pops
the original PC contents from the stack back into the PC. The CPU resumes executing the interrupted
program.
Note that if the interrupting signal is not reset before a RETI instruction, the same interrupt will occur again.
This process will never stop, and the program will loop forever at the interrupt program location.
The difference between RET and RETI is RET is a return from a function or a subroutine while RETI is return
from an interrupt. The RETI instruction is executed at the end of interrupt subroutine. After the execution of the
RETI instruction the PC address will be restored from the stack.
Thus the comparison of the call instruction and the interrupt action can be as:
Table 1: Comparison of Call Instruction and Interrupt Action
Call Instruction
Interrupt Action
Placed in the
programmer
program
by
the
IE.7
EA
AF
IE.6
AE
IE.0
EX0
A8
EA: This bit is a global interrupt enable/disable bit. When set to 1, it permits individual interrupts to be enable
by their respective enable bits. When 0, it disables all interrupts.
SJBIT/ECE
Page 99
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 100
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 6:
8051 Serial Communication: Data communication, Basics of Serial Data Communication, 8051 Serial
Communication, connections to RS-232, Serial communication Programming in assembly and C.
8255A Programmable Peripheral Interface:, Architecture of 8255A, I/O addressing,, I/O devices
interfacing with 8051 using 8255A.
SJBIT/ECE
Page 101
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Serial Interface
The serial port of 8051 is full duplex, i.e., it can transmit and receive simultaneously. The
register SBUF is used to hold the data. The special function register SBUF is physically two
registers. One is, write-only and is used to hold data to be transmitted out of the 8051 via TXD.
The other is, read-only and holds the received data from external sources via RXD. Both
mutually exclusive registers have the same address 099H.
serial
data
communication.
SM1
0
1
0
1
MODE
Mode0
Mode1
Mode2
M de3
SM2:
used
for
multiprocessor
communication.
REN:
set
or
cleared
by
software
to
enable/disable
reception.
TB8:
Transmitted
bit
8,not
widely
used.
RB8:
Received
bit
8.
TI: Transmit interrupt flag set by the hardware at the beginning of the stop bit in mode 1, must be
cleared
by
software.
RI: Receive interrupt flag set by the hardware halfway through the stop bit time in mode1, must be
cleared by software.
SJBIT/ECE
Page 102
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SCON Register
Serial control register: SCON
SM0, SM1 : Serial port mode specifier
REN : (Receive enable) set/cleared by software to enable/disable reception.
TI : Transmit interrupt flag.
RI : Receive interrupt flag.
SM2 = RB8 = TB8 =0 (not widely used)
REN (Receive Enable) -SCON.4
Set/cleared by software to enable/disable reception.
REN=1
It enable the 8051 to receive data on the RxD pin of the 8051.
If we want the 8051 to both transfer and receive data, REN must be set to 1.
SETB SCON.4
REN=0
The receiver is disabled.
The 8051 cannot receive data.
CLR SCON.4
SM0, SM1
SM1 and SM0 determine the framing of data.
SCON.6 (SM1) and SCON.7 (SM0)
Only mode 1 is compatible with COM port of PC.
SM1 SM0
Mode Operating Mode Baud Rate
0 0
0
Shift register
Fosc./12
0
8-bit UART
Variable by Tmer1
9-bit UART
Fosc./64 or Fosc./32
9-bit UART
Variable
SJBIT/ECE
Page 103
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
When the 8051 receives data serially via RxD, it gets rid of the start and stop bits and place the byte
in the SBUF register.
Then 8051 rises RI to indicate that a byte.
RI is raised at the beginning of the stop bit.
Power Mode control Register
Register PCON controls processor power down, sleep modes and serial data baud rate. Only one
bit of PCON is used with respect to serial communication. The seventh bit (b7)(SMOD) is used to
generate the baud rate of serial communication.
Address: 87H
SMOD:
Serial
baud
rate
modify
bit
GF1:
General
purpose
user
flag
bit
1
GF0:
General
purpose
user
flag
bit
0
PD:
Power
down
bit
IDL: Idle mode bit
Data Transmission
Transmission of serial data begins at any time when data is written to SBUF. Pin P3.1 (Alternate
function bit TXD) is used to transmit data to the serial data network. TI is set to 1 when data has
been transmitted. This signifies that SBUF is empty so that another byte can be sent.
Data Reception
Reception of serial data begins if the receive enable bit is set to 1 for all modes. Pin P3.0
(Alternate function bit RXD) is used to receive data from the serial data network. Receive
interrupt flag, RI, is set after the data has been received in all modes. The data gets stored in
SBUF register from where it can be read.
Serial Data Transmission Modes:
Mode-0: In this mode, the serial port works like a shift register and the data transmission works
synchronously with a clock frequency of fosc /12. Serial data is received and transmitted through
RXD. 8 bits are transmitted/ received aty a time. Pin TXD outputs the shift clock pulses of
frequency fosc /12, which is connected to the external circuitry for synchronization. The shift
frequency or baud rate is always 1/12 of the oscillator frequency.
SJBIT/ECE
Page 104
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
In mode-1, the serial port functions as a standard Universal Asynchronous Receiver Transmitter
(UART) mode. 10 bits are transmitted through TXD or received through RXD. The 10 bits consist
of one start bit (which is usually '0'), 8 data bits (LSB is sent first/received first), and a stop bit
(which is usually '1'). Once received, the stop bit goes into RB8 in the special function register
SCON. The baud rate is variable.
The following figure shows the way the bits are transmitted/ received.
Where,
SMOD
is
the
7th
bit
of
PCON
register
fosc is the crystal oscillator frequency of the microcontroller
It can be noted that fosc/ (12 X [256- (TH1)]) is the timer overflow frequency in timer mode-2,
which is the auto-reload mode.
If timer-1 is not run in mode-2, then the baud rate is,
Timer-1 can be run using the internal clock, fosc/12 (timer mode) or from any external source via
pin T1 (P3.5) (Counter mode).
Page 105
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
In this mode 11 bits are transmitted through TXD or received through RXD. The various bits are
as follows: a start bit (usually '0'), 8 data bits (LSB first), a programmable 9 th (TB8 or RB8)bit
and a stop bit (usually '1').
While transmitting, the 9 th data bit (TB8 in SCON) can be assigned the value '0' or '1'. For
example, if the information of parity is to be transmitted, the parity bit (P) in PSW could be
moved into TB8. On reception of the data, the 9 th bit goes into RB8 in 'SCON', while the stop bit
is ignored. The baud rate is programmable to either 1/32 or 1/64 of the oscillator frequency.
Mode-3 - Multi processor mode with variable baud rate :
In this mode 11 bits are transmitted through TXD or received through RXD. The various bits are:
a start bit (usually '0'), 8 data bits (LSB first), a programmable 9 th bit and a stop bit (usually '1').
Mode-3 is same as mode-2, except the fact that the baud rate in mode-3 is variable (i.e., just as in
mode-1).
f baud = (2 SMOD /32) * ( fosc / 12 (256-TH1)) .
This baudrate holds when Timer-1 is programmed in Mode-2.
Programming the 8051 to transfer data serially
Write a program for the 8051 to transfer letter A serially at 4800baud, continuously.
MOV TMOD,#20H
;timer 1, mode 2
MOV TH1,#-6
;4800 baud rate
MOV SCON,#50H
;8-bit,1 stop,REN enabled
SETB TR1
;start timer 1
AGAIN:
MOV SBUF,#A
;letter A to be transferred
HERE:
JNB TI,HERE
;wait for the last bit
CLR TI
;clear TI for next char
SJMP AGAIN
;keep sending A
Write a program to transfer the message YES serially at 9600 baud, 8-bit data, 1 stop
bit. Do this continuously.
MOV TMOD,#20H
;timer 1, mode 2
MOV TH1,#-3
;9600 baud
MOV SCON,#50H
SETB TR1
AGAIN: MOV A,#Y
;transfer Y
ACALL TRANS
MOV A,#E
;transfer E
ACALL TRANS
MOV A,#S
;transfer S
ACALL TRANS
SJMP AGAIN
;keep doing it
;serial data transfer subroutine
TRANS:
MOV
SBUF,A
;load
SBUF
HERE:
JNB
TI,HERE
;wait for last bit to transfer
CLR
TI
;get ready for next byte
RET
SJBIT/ECE
Page 106
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 107
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 108
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
(RESET) Reset. A "high" on this input initializes the control register to 9Bh and all ports (A, B, C) are set to
the input mode.
A1
A0
SELECTION
PORT A
PORT B
PORT C
CONTROL
SJBIT/ECE
Page 109
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 7:
Motivation for MSP430microcontrollers Low Power embedded systems, On-chip peripherals (analog and
digital), low-power RF capabilities. Target applications (Single-chip, low cost, low power, high performance
system design).
2 Hrs
MSP430 RISC CPU architecture, Compiler-friendly features, Instruction set, Clock system, Memory
subsystem. Key differentiating factors between different MSP430 families.
2 Hrs
Introduction to Code Composer Studio (CCS v4). Understanding how to use CCS for Assembly, C,
Assembly+C projects for MSP430 microcontrollers. Interrupt programming.
3 Hrs
Digital I/O I/O ports programming using C and assembly, Understanding the muxing scheme of the MSP430
pins.
2 Hrs
SJBIT/ECE
Page 110
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Introduction
The MSP430 is a 16-bit microcontroller that has a number of special features not commonly available with
other microcontrollers:
Complete system on-a-chip includes LCD control, ADC, I/O ports,ROM, RAM, basic timer,
watchdog timer, UART, etc.
Extremely low power consumption only 4.2 nW per instruction, typical
High speed 300 ns per instruction @ 3.3 MHz clock, in register and register addressing mode
RISC structure 27 core instructions
Orthogonal architecture (any instruction with any addressing mode)
Seven addressing modes for the source operand
Four addressing modes for the destination operand
Constant generator for the most often used constants (1, 0, 1, 2, 4, 8)
Only one external crystal required a frequency locked loop (FLL) oscillator derives all internal
clocks
Full real-time capability stable, nominal system clock frequency is available after only six clocks
when the MSP430 is restored from low-power mode (LPM) 3; no waiting for the main crystal to
begin oscillation and stabilize
The 27 core instructions combined with these special features make it easyto program the MSP430 in assembler
or in C, and provide exceptional flexibility and functionality.
SJBIT/ECE
Page 111
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Page 112
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
Ability to modify the stored status register of interrupt returns located on the stack
No special stack instructions all of the implemented instructions may be used for the stack and the
stack pointer
Byte and word capability for the stack
Free mix of subroutine and interrupt handling as long as no stack modification (PUSH, POP, etc.) is
made, no errors can occur
All memory, including RAM, Flash/ROM, information memory, special function registers (SFRs), and
peripheral registers are mapped into a single, contiguous address space as shown in Figure 43.
Note: See the device-specific datasheets for specific memory maps. Code access is always performed on even
addresses. Data can be accessed as bytes or words.
The MSP430 is available with either Flash or ROM memory types. The memory type is identified by the letter
immediately following MSP430 in the part numbers.
Flash devices: Identified by the letter F in the part numbers, having the advantage that the code space can be
erased and reprogrammed.
ROM devices: Identified by the letter C in the part numbers. They have the advantage of being very
inexpensive because they are shipped pre-programmed, which is the best solution for high-volume
designs.
SJBIT/ECE
Page 113
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
The clock system in the MSP430x5xx family of devices is supported by the Unified Clock System (UCS)
module that includes support for a 32-kHz watch crystal oscillator (XT1 LF mode), an internal very-low-power
low frequency oscillator (VLO), an internal trimmed low-frequency oscillator (REFO), an integrated internal
digitally controlled oscillator (DCO), and a high-frequency crystal oscillator (XT1 HF mode or XT2). The UCS
module is designed to meet the requirements of both low system cost and low power consumption. The UCS
module features digital frequency locked loop (FLL) hardware that, in conjunction with a digital modulator,
stabilizes the DCO frequency to a programmable multiple of the selected FLL reference frequency. The internal
DCO provides a fast turn-on clock source and stabilizes in less than 5 s. The UCS module provides the following
clock signals:
Auxiliary clock (ACLK), sourced from a 32-kHz watch crystal, a high-frequency crystal, the internal
lowfrequency oscillator (VLO), the trimmed low-frequency oscillator (REFO), or the internal digitally controlled
oscillator DCO.
Main clock (MCLK), the system clock used by the CPU. MCLK can be sourced by same sources made
available to ACLK.
Sub-Main clock (SMCLK), the subsystem clock used by the peripheral modules. SMCLK can be sourced by
same sources made available to ACLK.
ACLK/n, the buffered output of ACLK, ACLK/2, ACLK/4, ACLK/8, ACLK/16, ACLK/32.
The RTC_A module can be used as a general-purpose 32-bit counter (counter mode) or as an integrated
realtime clock (RTC) (calendar mode). In counter mode, the RTC_A also includes two independent 8-bit timers
that can be cascaded to form a 16-bit timer/counter. Both timers can be read and written by software. Calendar
mode integrates an internal calendar which compensates for months with less than 31 days and includes leap year
correction. The RTC_A also supports flexible alarm functions and offset-calibration hardware.
Watchdog Timer (WDT_A) (Link to User's Guide)
The primary function of the watchdog timer (WDT_A) module is to perform a controlled system restart after a
software problem occurs. If the selected time interval expires, a system reset is generated. If the watchdog
function is not needed in an application, the module can be configured as an interval timer and can generate
interrupts at selected time intervals.
Flash/ROM
The start address of Flash/ROM depends on the amount of Flash/ROM present on the device. The start address
varies between 01100h (60k devices) to 0F800h (2k devices) and always runs to the end of the address space at
location 0FFFFh. Flash can be used for both code and data. Word or byte tables can also be stored and read by the
program from Flash/ROM. All code, tables, and hard-coded constants reside in this memory space.
4.3.3 Information memory (Flash devices only)
The MSP430 flash devices contain an address space for information memory. It is like an onboard EEPROM,
where variables needed for the next power up can be stored during power down. It can also be used as code
memory. Flash memory may be written one byte or word at a time, but must be erased in segments. The
information memory is divided into two 128-byte segments. The first of these segments is located at addresses
01000h through to 0107Fh (Segment B), and the second is at address 01080h through to 010FFh (Segment A).
This is the case in 4xx devices. It is 256 bytes (4 segments of 64 bytes each) in 2xx devices.
Boot memory (Flash devices only)
The MSP430 flash devices contain an address space for boot memory, located between addresses 0C00h through
to 0FFFh. The bootstrap loader is located in this memory space, which is an external interface that can be used to
program the flash memory in addition to the JTAG. This memory region is not accessible by other applications, so
it cannot be overwritten accidentally. The bootstrap loader performs some of the same functions as the JTAG
interface (excepting the security fuse programming), using the TI data structure protocol for UART
communication at a fixed data rate of 9600 baud.
RAM
SJBIT/ECE
Page 114
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
RAM always starts at address 0200h. The end address of RAM depends on the amount of RAM present on the
device. RAM is used for both code and data.
Peripheral Modules
Peripheral modules consist of all on-chip peripheral registers that are mapped into the address space. These
modules can be accessed with byte or word instructions, depending if the peripheral module is 8-bit or 16-bit
respectively. The 16-bit peripheral modules are located in the address space from addresses 0100 through to 01FFh
and the 8-bit peripheral modules are mapped into memory from addresses 0010h through to 00FFh.
Special Function Registers (SFRs)
Some peripheral functions are mapped into memory with special dedicated functions. The Special Function
Registers (SFRs) are located at memory addresses from 0000h to 000Fh, and are the specific registers for:
Interrupt enables (locations 0000h and 0001h);
Interrupt flags (locations 0002h and 0003h);
Enable flags (locations 0004h and 0005h);
SFRs must be accessed using byte instructions only. See the device specific data sheets for the applicable SFR bits.
Central Processing Unit (MSP430 CPU)
The RISC type architecture of the CPU is based on a short instruction set (27 instructions), interconnected by a 3stage instruction pipeline for instruction decoding. The CPU has a 16-bit ALU, four dedicated registers and twelve
working registers, which makes the MSP430 a high performance microcontroller suitable for low power
applications. The addition of twelve working general purpose registers saves CPU cycles by allowing the storage
of frequently used values and variables instead of using RAM. The orthogonal instruction set allows the use of any
addressing mode for any instruction, which makes programming clear and consistent, with few exceptions,
increasing the compiler efficiency for high-level languages such as C.
Arithmetic Logic Unit (ALU)
The MSP430 CPU includes an arithmetic logic unit (ALU) that handles addition, subtraction, comparison and
logical (AND, OR, XOR) operations. ALU operations can affect the overflow, zero, negative, and carry flags in
the status register.
4.4.2 MSP430 CPU registers
The CPU incorporates sixteen 16-bit registers:
Four registers (R0, R1, R2 and R3) have dedicated functions;
There are 12 working registers (R4 to R15) for general use
R0: Program Counter (PC)
The 16-bit Program Counter (PC/R0) points to the next instruction to be read from memory and executed by the
CPU. The Program counter is implemented by the number of bytes used by the instruction (2, 4, or 6 bytes, always
even). It is important to remember that the PC is aligned at even addresses, because the instructions are 16 bits,
even though the individual memory addresses contain 8-bit values.
R1: Stack Pointer (SP)
The Stack Pointer (SP/R1) is located in R1.
1st: stack can be used by user to store data for later use (instructions: store by PUSH, retrieve by POP);
2nd: stack can be used by user or by compiler for subroutine parameters (PUSH, POP in calling routine; addressed
via offset calculation on stack pointer (SP) in called subroutine);
3rd: used by subroutine calls to store the program counter value for return at subroutine's end (RET);
4th: used by interrupt - system stores the actual PC value first, then the actual status register content (on top of
stack) on return from interrupt (RETI) the system get the same status as just before the interrupt happened (as long
as none has changed the value on TOS) and the same program counter value from stack.
R2: Status Register (SR)
The Status Register (SR/R2) stores the state and control bits. The system flags are changed automatically by the
CPU depending on the result of an operation in a register. The reserved bits of the SR are used to support the
constants generator.
SJBIT/ECE
Page 115
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 116
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 117
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
UNIT 8:
On-chip peripherals. Watchdog Timer, Comparator, Op-Amp, Basic Timer, Real Time Clock (RTC), ADC,
DAC, SD16, LCD, DMA.
2 Hrs
Using the Low-power features of MSP430. Clock system, low-power modes, Clock request feature, Low-power
programming and Interrupt.
2 Hrs
Interfacing LED, LCD, External memory. Seven segment LED modules interfacing. Example Real-time clock.
2 Hrs
Case Studies of applications of MSP430 - Data acquisition system, Wired Sensor network, Wireless sensor
network with Chipcon RF interfaces.
3 Hrs
SJBIT/ECE
Page 118
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
System reset
The MSP430 families make use of two independent reset signals:
Hardware reset signal - POR (Power On Reset);
Software reset signal PUC (Power Up Clear).
Different events can generate each one of the reset signals. The following sources can generate a POR or a
PUC:
POR:
Initial device power up;
Low signal at the reset pin (RST/NMI), when this is configured in reset mode;
Low signal at the Supervisory Voltage System (SVS), when the register bit PORON is high.
PUC:
Active POR signal;
Expiry of watchdog timer, when it is configured in supervision mode (Further details in section 5.4);
Flash memory control registers access security key violation. When the hardware reset signal (POR) is high,
the Status Register is reset and the Program Counter is loaded with the address in program memory location
0FFFEh. Peripheral registers all enter their power-up state. When the reset signal is from software (PUC),
the Status Register is reset, and the Program Counter is loaded with either the reset vector (0FFFEh), or the
PUC source interrupt vector. Only some peripheral registers are reset by PUC. These conditions depend on the
reset source and the specific MSP430 device.
All 2xx and 4xx MSP430 devices have a reset circuit to detect a power source disturbance, known as a Brown
Out Reset (BOR). This circuitry is an elaborate POR system, which includes a hysteresis circuit to allow the
device to stay in reset mode until the voltage is higher than the upper threshold (VB_IT+). When the voltage is
higher than this value, the BOR takes 2 msec to become inactive and allow the program execution by CPU.
Similarly, when the voltage decreases below the lower threshold (VB_IT-), either by power source interruption
or battery discharge, the BOR circuit will generate a reset signal, which will remain active until the voltage rises
above the lower threshold value.
System clocks
The MSP430 devices have a clock system that allows the CPU and the peripherals to operate from different
clock sources. The system clocks depend on the particular device in the MSP430 family:
MSP430x2xx: The Basic Clock Module is composed of one or two oscillators (depending on the device) and is
able to work with external crystals or resonators, in addition to the internal digitally controlled oscillator (DCO).
It allows a working frequency up to 16 MHz, lower power consumption and lower internal oscillator start up
time.
MSP430x4xx: The system clock is defined by the Frequency Locked Loop (FLL+). This system is composed of
one or two oscillators (depending on the device), and is able to work with external crystals or resonators, as well
as the internal Digitally Controlled Oscillator (DCO). The DCO is adjusted and controlled by hardware,
providing multiple working frequencies from an external low frequency oscillator.
The clock sources from these oscillators can be selected to generate a range of different clock signals: Master
clock (MCLK), Sub-system main clock (SMCLK) and auxiliary clock (ACLK). Each of these clock signals can
be internally divided by 1, 2, 4 or 8, before being made available to the CPU and peripheral devices:
MCLK: Can be generated by the DCO (but can also be fed by the crystal oscillator), which can be activated
and reach stability in less than 6 msec. It can be used by the CPU and high-speed peripherals;
SMCLK: Used as alternative clock source for peripherals;
ACLK: Background real-time clock with self wake-up function for low power modes (32.768 kHz watch
crystal). It is always fed by the crystal oscillator.
Low/High frequency oscillator (LFXT1)
The Low-frequency/high-frequency oscillator (LFXT1) is implemented in all MSP430 devices.
SJBIT/ECE
Page 119
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
It can be used with low-frequency 32.768 kHz watch crystals, providing a Real Time Clock (RTC), or standard
crystals, resonators, or external clock sources in the range 450 kHz to 8 MHz (16 MHz for the 2xx family). The
operating mode selection is defined by a bit of a control register that is configured as a low signal (=0) to
provide a low frequency clock, and otherwise to provide a high frequency clock.
Types of interrupts
The MSP430 offers various interrupt sources, both internal and external. There are three types of interrupts:
Reset;
(Non)-maskable interrupts (NMI) by GIE;
Maskable interrupts by GIE.
Each one of these interrupts has a priority, determining which interrupt is taken when more than one interrupt is
pending at any one time. The nearer a module is to the CPU/NMIRS, the higher the priority.
The main difference between non-maskable interrupts and maskable interrupts is the fact that the non-maskable
interrupt (NMI) cannot be disabled by the General Interrupt Enable (GIE) bit in the Status Register (SR). NMIs
are used for high priority events such as emergency shutdown of a machine.
Because all maskable interrupts are recognized by the CPU interrupt control, the GIE bit must be set.
The system reset interrupts (Oscillator/Flash and the Hard Reset) are treated as non-maskable interrupts, with
highest priority possessing and their own interrupt vectors.
Non Maskable Interrupts
NMI is not masked by GIE, but is enabled by individual interrupt enable bits, depending on the event source:
NMIIE: Non-Maskable Interrupts Interrupt Enable. When this bit is set, the RST/NMI is configured in NMI
mode. A signal edge selected by the WDTNMIES bit generates a NMI interrupt, if the NMIIE bit is set. The
RST/NMI flag NMIIFG is also set.
ACCVIE: ACCess Violation to the flash memory Interrupt Enable.
The flash ACCVIFG flag is set when a flash access violation occurs.
OFIE: Oscillator Fault Interrupt Enable. The oscillator fault signal warns of a possible error condition with the
crystal oscillator. This kind of signal can be triggered by a PUC signal.
Maskable Interrupts
Peripherals with interrupt capability or the watchdog timer overflow in interval timer mode can cause maskable
interrupts. Each maskable interrupt also has an individual enable/disable flag, located in peripheral registers or
in the individual module.
Additionally, all maskable interrupts can be disabled by the general interrupt enable (GIE) bit in the status
register (SR).
Watchdog timer (WDT and WDT+)
The 16-bit watchdog timer (WDT) module can be used as a:
Processor supervisor: In supervision mode, the main function of the WDT is to supervise the correct operation
of the application software. If a problem occurs with the software application that causes the software to hang or
enter an infinite loop, the selected time interval in the watchdog timer is exceeded and the WDT performs a
system reset: Power Up Clear (PUC). The procedure in this mode consists of performing an interrupt request on
counter overflows. Under normal operating conditions, the watchdog timer would be reset by program code
before its timer expires and would therefore inhibit the PUC operation.
Interval timer: This module can be configured as an independent interval timer, to perform a standard
periodic interrupt on counter overflow, for example, to drive an event scheduler (a low-cost operating system).
The 16-bit upper counter (WDTCNT) is not directly accessible by software. Its control and the interval time are
selected through Watchdog Timer Control Register (WDTCTL). This counter can use the clock signal from
ACLK or SMCLK, by defining the appropriate WDTSSEL bit.
The WDT mode is selected by the WDTTMSEL bit in the WDTCTL register. After a PUC condition, the WDT
module is configured in supervision mode with approximately 32 msec initial time interval, using DCOCLK.
The user should define, stop or clear the WDT before the time interval expires, to prevent a new PUC.
The WDT control is performed through the 16-bit Watchdog Timer Control Register, WDTCTL:
SJBIT/ECE
Page 120
www.rejinpaul.com
Microcontrollers
10ES42
www.rejinpaul.com
SJBIT/ECE
Page 121
www.rejinpaul.com