Microcontroller (Ek) Sy ETC
Microcontroller (Ek) Sy ETC
UNIT - 1
Program Counter
It has many instructions to move data It has few instructions to move data between
between memory and CPU memory and CPU
Less number of pins are multifunctional More number of pins are multifunctional
Single memory map for data and code Separate memory map for data and code
(program) (program)
Access time for memory and IO are more Less access time for built in memory and IO.
Microprocessor based system requires It requires less additional hardwares
additional hardware
More flexible in the design point of view Less flexible since the additional circuits which
is residing inside the microcontroller is fixed
for a particular microcontroller
Large number of instructions with flexible Limited number of instructions with few
addressing modes addressing modes
Debarati Chakraborty
Microcontroller notes– 64 4
CS/IT
Only load/store instructions are used to In additions to load and store instructions,
access memory memory access is possible with other
instructions also.
Debarati Chakraborty
Microcontroller notes– 64 5
CS/IT
Program Data
Data Data
Memory Memory
CPU Address Bus
CPU
Data
Program
Memory
Data
Address Bus
Memory
Address Bus
It uses single memory space for both It has separate program memory and data
instructions and data. memory
It is not possible to fetch instruction code Instruction code and data can be fetched
and data simultaneously
Execution of instruction takes more machine Execution of instruction takes less machine
cycle cycle
Also known as control flow or control driven Also known as data flow or data driven
computers computers
Simplifies the chip design because of single Chip design is complex due to separate
memory space memory space
Debarati Chakraborty
Microcontroller notes– 64 6
CS/IT
The program stored in the computer memory in the form of binary numbers is called machine
instructions. The machine language program is called object code.
The assembly language program the programmer enters is called source code. The source code
(assembly language) is translated to object code (machine language) using assembler.
Programs can be written in high level languages such as C, C++ etc. High level language will be
converted to machine language using compiler or interpreter. Compiler reads the entire program
and translate into the object code and then it is executed by the processor. Interpreter takes one
statement of the high level language as input and translate it into object code and then executes.
Debarati Chakraborty
Microcontroller notes– 64 7
CS/IT
The 8051
Port 2
architecture.
E
PC
A Port 3
DPTR IE I/O
IP A0-A7 D0-
SFR D7
ALU
General
PSW
Purpose
RAM
I/O
A I/O
A8-
B
Port A15
ROM 0 I/O
DPH
Port 1 INT
DPL CNTR
SERIAL RD/WR
VCC Memory Register Bank
System 2
Timing General Register Bank
purpose 1
ALE System Register Bank
interrupt
PSEN 0
timers
area
XTAL1
PCON
XTAL2 Bit
addressible SBUF
RESET area
Data SCON
buffers Register Bank
3 TCON
TMOD
TL0
TH0
TL1
TH1
General
GND Purpose RAM
SFR and
control
∙ 8051 has 4 K Bytes of internal ROM. The address space is from 0000 to 0FFFh. If the program
size is more than 4 K Bytes 8051 will fetch the code automatically from external memory.
∙ Accumulator is an 8 bit register widely used for all arithmetic and logical operations.
Accumulator is also used to transfer data between external memory. B register is used
along with Accumulator for multiplication and division. A and B registers together is also
called MATH registers.
Debarati Chakraborty
Microcontroller notes– 64 8
CS/IT
∙ PSW (Program Status Word). This is an 8 bit register which contains the arithmetic status of
ALU and the bank select bits of register banks.
CY AC F0 RS1 RS0 O - P
V
CY - carry flag
AC - auxiliary carry flag
F0 - available to the user for general purpose
RS1,RS0 - register bank select bits
OV - overflow
P - parity
∙ Stack Pointer (SP) – it contains the address of the data item on the top of the stack. Stack
may reside anywhere on the internal RAM. On reset, SP is initialized to 07 so that the
default stack will start from address 08 onwards.
∙ Data Pointer (DPTR) – DPH (Data pointer higher byte), DPL (Data pointer lower byte). This is
a 16 bit register which is used to furnish address information for internal and external
program memory and for external data memory.
∙ Program Counter (PC) – 16 bit PC contains the address of next instruction to be executed.
On reset PC will set to 0000. After fetching every instruction PC will increment by one.
Pinout Description
Pins 1-8 PORT 1. Each of these pins can be configured as an input or an output.
Pin 9 RESET. A logic one on this pin disables the microcontroller and clears the contents
of most registers. In other words, the positive voltage on this pin resets the
microcontroller. By applying logic zero to this pin, the program starts execution
from the beginning.
Pins10-17 PORT 3. Similar to port 1, each of these pins can serve as general input or output.
Besides, all of them have alternative functions
Debarati Chakraborty
Microcontroller notes– 64 9
CS/IT
Pin 10 RXD. Serial asynchronous communication input or Serial synchronous
communication output.
Pin 18, 19 XTAL2, XTAL1. Internal oscillator input and output. A quartz crystal which
specifies operating frequency is usually connected to these pins.
Pin 21-28 Port 2. If there is no intention to use external memory then these port pins are
configured as general inputs/outputs. In case external memory is used, the higher
address byte, i.e. addresses A8-A15 will appear on this port. Even though memory
with capacity of 64Kb is not used, which means that not all eight port bits are used
for its addressing, the rest of them are not available as inputs/outputs.
Pin 29 PSEN. If external ROM is used for storing program then a logic zero (0) appears
on it every time the microcontroller reads a byte from memory.
Pin 30 ALE. Prior to reading from external memory, the microcontroller puts the lower
address byte (A0-A7) on P0 and activates the ALE output. After receiving signal
from the ALE pin, the external latch latches the state of P0 and uses it as a memory
chip address. Immediately after that, the ALE pin is returned its previous logic state
and P0 is now used as a Data Bus.
Pin 31 EA. By applying logic zero to this pin, P2 and P3 are used for data and address
transmission with no regard to whether there is internal memory or not. It means
that even there is a program written to the microcontroller, it will not be executed.
Instead, the program written to external ROM will be executed. By applying logic
one to the EA pin, the microcontroller will use both memories, first internal then
external (if exists).
Pin 32-39 PORT 0. Similar to P2, if external memory is not used, these pins can be used as
general inputs/outputs. Otherwise, P0 is configured as address output (A0-A7)
when the ALE pin is driven high (1) or as data output (Data Bus) when the ALE pin
is driven low (0).
Debarati Chakraborty
Microcontroller notes– 64 10
CS/IT
K
Working Registers
N Bit addressable memory
A
Register Banks: 00h to 1Fh. The 8051 uses 8 general-purpose registers R0 through R7 (R0, R1, R2,
R3, R4, R5, R6, and R7). There are four such register banks. Selection of register bank can be done
through RS1,RS0 bits of PSW. On reset, the default Register Bank 0 will be selected.
Bit Addressable RAM: 20h to 2Fh . The 8051 supports a special feature which allows access to bit
variables. This is where individual memory bits in Internal RAM can be set or cleared. In all there
are 128 bits numbered 00h to 7Fh. Being bit variables any one variable can have a value 0 or 1. A
bit variable can be set with a command such as SETB and cleared with a command such as CLR.
Example instructions are:
SETB 25h ; sets the bit 25h (becomes 1)
CLR 25h ; clears bit 25h (becomes 0)
Note, bit 25h is actually bit 5 of Internal RAM location 24h.
The Bit Addressable area of the RAM is just 16 bytes of Internal RAM located between 20h and 2Fh.
General Purpose RAM: 30h to 7Fh. Even if 80 bytes of Internal RAM memory are available for
general-purpose data storage, user should take care while using the memory location from 00 -
2Fh
Debarati Chakraborty
Microcontroller notes– 64 11
CS/IT
since these locations are also the default register space, stack space, and bit addressable space.
It is a good practice to use general purpose memory from 30 – 7Fh. The general purpose RAM
can be accessed using direct or indirect addressing modes.
Number of address lines required for 16 Kbyte memory is 14 lines and that of 32Kbytes of
memory is 15 lines.
PSEN
PSEN
A14 A14
A13 A13
A12 A13 A12
… A12 ..
A9 .
A8
.
.
A8 AL WE OE A7
A3
..
A2
WR 16
ELE 32 Kbyte RAM
RD Kbyte RAM
A1
A0-A7 A0-A7
8051 A1
A0
__
A0
LOWER BYTE
ADDRESS
EA
-
GND
AD7
AD0
[AD0 – AD7]
DAT
DATA BUS [AD0 –
A AD7]
O/P DAT A
O/P 8
The lower order address and data bus are multiplexed. De-multiplexing is done by the latch.
Initially the address will appear in the bus and this latched at the output of latch using ALE signal.
The output of the latch is directly connected to the lower byte address lines of the memory. Later
data will be available in this bus. Still the latch output is address it self. The higher byte of address
bus is directly connected to the memory. The number of lines connected depends on the memory
size.
The RD and WR (both active low) signals are connected to RAM for reading and writing the data.
PSEN of microcontroller is connected to the output enable of the ROM to read the data from
the memory.
EA (active low) pin is always grounded if we use only external memory. Otherwise, once the
program size exceeds internal memory the microcontroller will automatically switch to external
memory.
Debarati Chakraborty
Microcontroller notes– 64 12
CS/IT
1.8 STACK
A stack is a last in first out memory. In 8051 internal RAM space can be used as stack. The address
of the stack is contained in a register called stack pointer. Instructions PUSH and POP are used for
stack operations. When a data is to be placed on the stack, the stack pointer increments before
storing the data on the stack so that the stack grows up as data is stored (pre-increment). As the
data is retrieved from the stack the byte is read from the stack, and then SP decrements to point
the next available byte of stored data (post decrement). The stack pointer is set to 07 when the
8051 resets. So that default stack memory starts from address location 08 onwards (to avoid
overwriting the default register bank ie., bank 0).
Debarati Chakraborty
Microcontroller notes– 64 13
CS/IT
UNIT 2
LABEL : (THIS IS NOT NECESSARY UNLESS THAT SPECIFIC LINE HAS TO BE ADDRESSED). The label
is a symbolic address for the instruction. When the program is assembled, the label will be given
specific address in which that instruction is stored. Unless that specific line of instruction is
needed by a branching instruction in the program, it is not necessary to label that line.
OPCODE: Opcode is the symbolic representation of the operation. The assembler converts the
opcode to a unique binary code (machine language).
OPERAND: While opcode specifies what operation to perform, operand specifies where to
perform that action. The operand field generally contains the source and destination of the data.
In some cases only source or destination will be available instead of both. The operand will be
either address of the data, or data itself.
COMMENT: Always comment will begin with ; or // symbol. To improve the program quality,
programmer may always use comments in the program.
1. Immediate addressing.
2. Register addressing.
3. Direct addressing.
4. Indirect addressing.
5. Relative addressing.
6. Absolute addressing.
7. Long addressing.
8. Indexed addressing.
9. Bit inherent addressing.
10. Bit direct addressing.
1. Immediate addressing.
In this addressing mode the data is provided as a part of instruction itself. In other words
data immediately follows the instruction.
Eg. MOV A,#30H
ADD A, #83 # Symbol indicates the data is immediate.
Debarati Chakraborty
Microcontroller notes– 64 14
CS/IT
2. Register addressing.
In this addressing mode the register will hold the data. One of the eight general registers
(R0 to R7) can be used and specified as the operand.
Eg. MOV A,R0
ADD A,R6
R0 – R7 will be selected from the current selection of register bank. The default register bank
will be bank 0. 3. Direct addressing
There are two ways to access the internal memory. Using direct address and indirect
address. Using direct addressing mode we can not only address the internal memory but SFRs
also. In direct addressing, an 8 bit internal data memory address is specified as part of the
instruction and hence, it can specify the address only in the range of 00H to FFH. In this addressing
mode, data is obtained directly from the memory.
Eg. MOV A,60h
ADD A,30h
4. Indirect addressing
The indirect addressing mode uses a register to hold the actual address that will be used
in data movement. Registers R0 and R1 and DPTR are the only registers that can be used as data
pointers. Indirect addressing cannot be used to refer to SFR registers. Both R0 and R1 can hold 8
bit address and DPTR can hold 16 bit address.
Eg. MOV A,@R0
ADD A,@R1
MOVX A,@DPTR
5. Indexed addressing.
In indexed addressing, either the program counter (PC), or the data pointer (DTPR)—is
used to hold the base address, and the A is used to hold the offset address. Adding the value of
the base address to the value of the offset address forms the effective address. Indexed
addressing is used with JMP or MOVC instructions. Look up tables are easily implemented with
the help of index addressing.
Eg. MOVC A, @A+DPTR // copies the contents of memory location pointed by the sum of the
accumulator A and the DPTR into accumulator A.
MOVC A, @A+PC // copies the contents of memory location pointed by the
sum of the accumulator A and the program counter into accumulator A.
6. Relative Addressing.
Relative addressing is used only with conditional jump instructions. The relative address,
(offset), is an 8 bit signed number, which is automatically added to the PC to make the address
of the next instruction. The 8 bit signed offset value gives an address range of +127 to —128
locations. The jump destination is usually specified using a label and the assembler calculates
the jump offset accordingly. The advantage of relative addressing is that the program code is
easy to relocate and the address is relative to position in the memory.
Eg. SJMP LOOP1
JC BACK
7. Absolute addressing
Absolute addressing is used only by the AJMP (Absolute Jump) and ACALL (Absolute Call)
instructions. These are 2 bytes instructions. The absolute addressing mode specifies the lowest
11 bit of the memory address as part of the instruction. The upper 5 bit of the destination
address are
Debarati Chakraborty
Microcontroller notes– 64 15
CS/IT
the upper 5 bit of the current program counter. Hence, absolute addressing allows branching
only within the current 2 Kbyte page of the program memory.
Eg. AJMP LOOP1
ACALL LOOP2
8. Long Addressing
The long addressing mode is used with the instructions LJMP and LCALL. These are 3 byte
instructions. The address specifies a full 16 bit destination address so that a jump or a call
can be made to a location within a 64 Kbyte code memory space.
Eg. LJMP FINISH
LCALL DELAY
Debarati Chakraborty
Microcontroller notes– 64 16
CS/IT
2. SUBB A, #55H 2 2 µs
3. MOV DPTR, #2000H 2 2 µs
4. MUL AB 4 4 µs
2. 8051 Instructions
The instructions of 8051 can be broadly classified under the following
headings. 1. Data transfer instructions
2. Arithmetic instructions
3. Logical instructions
4. Branch instructions
5. Subroutine instructions
6. Bit manipulation instructions
Debarati Chakraborty
Microcontroller notes– 64 17
CS/IT
Debarati Chakraborty
Microcontroller notes– 64 18
CS/IT
Arithmetic instructions.
The 8051 can perform addition, subtraction. Multiplication and division operations on 8 bit
numbers.
Addition
In this group, we have instructions to
i. Add the contents of A with immediate data with or without carry.
i. ADD A, #45H
ii. ADDC A, #OB4H
ii. Add the contents of A with register Rn with or without carry.
i. ADD A, R5
ii. ADDC A, R2
iii. Add the contents of A with contents of memory with or without carry using direct and
indirect addressing
i. ADD A, 51H
ii. ADDC A, 75H
iii. ADD A, @R1
iv. ADDC A, @R0
Subtraction
In this group, we have instructions to
i. Subtract the contents of A with immediate data with or without carry.
i. SUBB A, #45H
ii. SUBB A, #OB4H
ii. Subtract the contents of A with register Rn with or without carry.
i. SUBB A, R5
ii. SUBB A, R2
iii. Subtract the contents of A with contents of memory with or without carry using direct and
indirect addressing
i. SUBB A, 51H
ii. SUBB A, 75H
iii. SUBB A, @R1
iv. SUBB A, @R0
Multiplication
MUL AB. This instruction multiplies two 8 bit unsigned numbers which are stored in A and B
register. After multiplication the lower byte of the result will be stored in accumulator and higher
byte of result will be stored in B register.
Eg. MOV A,#45H ;[A]=45H
MOV B,#0F5H ;[B]=F5H
MUL AB ;[A] x [B] = 45 x F5 = 4209
;[A]=09H, [B]=42H
Division
Debarati Chakraborty
Microcontroller notes– 64 19
CS/IT
DIV AB. This instruction divides the 8 bit unsigned number which is stored in A by the 8 bit
unsigned number which is stored in B register. After division the result will be stored in
accumulator and remainder will be stored in B register.
Eg. MOV A,#45H ;[A]=0E8H
MOV B,#0F5H ;[B]=1BH
DIV AB ;[A] / [B] = E8 /1B = 08 H with remainder 10H
;[A] = 08H, [B]=10H
When two BCD numbers are added, the answer is a non-BCD number. To get the result
in BCD, we use DA A instruction after the addition. DA A works as follows.
∙ If lower nibble is greater than 9 or auxiliary carry is 1, 6 is added to lower
nibble. ∙ If upper nibble is greater than 9 or carry is 1, 6 is added to upper
nibble.
Eg 1: MOV A,#23H
MOV R1,#55H
ADD A,R1 // [A]=78
DA A // [A]=78 no changes in the accumulator after da a
Eg 2: MOV A,#53H
MOV R1,#58H
ADD A,R1 // [A]=ABh
DA A // [A]=11, C=1 . ANSWER IS 111. Accumulator data is changed after DA A
INC increments the value of source by 1. If the initial value of register is FFh,
incrementing the value will cause it to reset to 0. The Carry Flag is not set when the
value "rolls over" from 255 to 0.
In the case of "INC DPTR", the value two-byte unsigned integer value of DPTR is
incremented. If the initial value of DPTR is FFFFh, incrementing the value will cause it to
reset to 0.
DEC decrements the value of source by 1. If the initial value of is 0, decrementing the
value will cause it to reset to FFh. The Carry Flag is not set when the value "rolls over"
from 0 to FFh.
Logical Instructions
Logical AND
ANL destination, source: ANL does a bitwise "AND" operation between source and
destination, leaving the resulting value in destination. The value in source is not affected.
"AND" instruction logically AND the bits of source and destination.
ANL A,#DATA ANL A, Rn
ANL A,DIRECT ANL A,@Ri
ANL DIRECT,A ANL DIRECT, #DATA
Logical OR
ORL destination, source: ORL does a bitwise "OR" operation between source and destination,
Debarati Chakraborty
Microcontroller notes– 64 20
CS/IT
leaving the resulting value in destination. The value in source is not affected. " OR
" instruction logically OR the bits of source and destination.
ORL A,#DATA ORL A, Rn
ORL A,DIRECT ORL A,@Ri
ORL DIRECT,A ORL DIRECT, #DATA
Logical Ex-OR
XRL destination, source: XRL does a bitwise "EX-OR" operation between source and
destination, leaving the resulting value in destination. The value in source is not
affected. " XRL " instruction logically EX-OR the bits of source and destination.
XRL A,#DATA XRL A,Rn
XRL A,DIRECT XRL A,@Ri
XRL DIRECT,A XRL DIRECT, #DATA
Logical NOT
CPL complements operand, leaving the result in operand. If operand is a single bit
then the state of the bit will be reversed. If operand is the Accumulator then all the
bits in the Accumulator will be reversed.
Rotate Instructions
RR A
This instruction is rotate right the accumulator. Its operation is illustrated below. Each bit
is shifted one location to the right, with bit 0 going to bit 7.
RL A
Rotate left the accumulator. Each bit is shifted one location to the left, with bit 7
going to bit 0
RRC A
Rotate right through the carry. Each bit is shifted one location to the right, with bit 0 going into
the carry bit in the PSW, while the carry was at goes into bit 7
RLC A
Rotate left through the carry. Each bit is shifted one location to the left, with bit 7 going into
the carry bit in the PSW, while the carry goes into bit 0.
Debarati Chakraborty
Microcontroller notes– 64 21
CS/IT
Relative Jump
Jump that replaces the PC (program counter) content with a new address that is greater than (the
address following the jump instruction by 127 or less) or less than (the address following the jump
by 128 or less) is called a relative jump. Schematically, the relative jump can be shown as follows:
-
JC <relative address>
JNC <relative address>
JB bit, <relative address>
JNB bit, <relative address>
JBC bit, <relative address>
CJNE <destination byte>, <source byte>, <relative address>
DJNZ <byte>, <relative address>
JZ <relative address>
JNZ <relative address>
In 8051, 64 kbyte of program memory space is divided into 32 pages of 2 kbyte each. The
hexadecimal addresses of the pages are given as follows:-
00 0000 - 07FF
01 0800 - 0FFF
02 1000 - 17FF
03 1800 - 1FFF
.
.
1E F000 - F7FF
1F F800 - FFFF
It can be seen that the upper 5bits of the program counter (PC) hold the page number and the
lower 11bits of the PC hold the address within that page. Thus, an absolute address is formed by
taking page numbers of the instruction (from the program counter) following the jump and
attaching the specified 11bits to it to form the 16-bit address.
Applications that need to access the entire program memory from 0000H to FFFFH use long
absolute jump. Since the absolute address has to be specified in the op-code, the instruction
length is 3 bytes (except for JMP @ A+DPTR). This jump is not re-locatable.
Example: -
1. The unconditional jump is a jump in which control is transferred unconditionally to the target
location. a. LJMP (long jump). This is a 3-byte instruction. First byte is the op-code and
second and third bytes represent the 16-bit target address which is any memory
location from 0000 to FFFFH eg: LJMP 3000H
b. AJMP: this causes unconditional branch to the indicated address, by loading the 11 bit
address to 0 -10 bits of the program counter. The destination must be therefore within
the same 2K blocks. c. SJMP (short jump). This is a 2-byte instruction. First byte is the op-
code and second byte is the relative target address, 00 to FFH (forward +127 and
backward -128 bytes from the current PC value). To calculate the target address of a
short jump, the second byte is added to the PC value which is address of the instruction
immediately below the jump.
Debarati Chakraborty
Microcontroller notes– 64 23
CS/IT
Bit level JUMP instructions will check the conditions of the bit and if condition is true, it
jumps to the address specified in the instruction. All the bit jumps are relative jumps.
JB bit, rel ; jump if the direct bit is set to the relative address specified.
JNB bit, rel ; jump if the direct bit is clear to the relative address specified.
JBC bit, rel ; jump if the direct bit is set to the relative address specified and then clear the bit.
location 09. With these the address (0x854B) which was in PC is stored in stack.
Debarati Chakraborty
Microcontroller notes– 64 24
CS/IT
f. [PC10-0]= address (11 bit); the new address of subroutine is loaded to PC. No
flags are affected.
RET instruction
RET instruction pops top two contents from the stack and load it to PC.
g. [PC15-8] = [[SP]] ;content of current top of the stack will be moved to higher byte
of PC. h. [SP]=[SP]-1; (SP decrements)
i. [PC7-0] = [[SP]] ;content of bottom of the stack will be moved to lower
byte of PC. j. [SP]=[SP]-1; (SP decrements again)
8051 has 128 bit addressable memory. Bit addressable SFRs and bit addressable PORT pins. It
is possible to perform following bit wise operations for these bit addressable locations.
1. LOGICAL AND
a. ANL C,BIT(BIT ADDRESS) ; ‘LOGICALLY AND’ CARRY AND CONTENT OF BIT
ADDRESS, STORE RESULT IN CARRY b. ANL C, /BIT; ; ‘LOGICALLY AND’ CARRY
AND COMPLEMENT OF CONTENT OF BIT ADDRESS, STORE RESULT IN CARRY
2. LOGICAL OR
a. ORL C,BIT(BIT ADDRESS) ; ‘LOGICALLY OR’ CARRY AND CONTENT OF BIT
ADDRESS, STORE RESULT IN CARRY b. ORL C, /BIT; ; ‘LOGICALLY OR’ CARRY AND
COMPLEMENT OF CONTENT OF BIT ADDRESS, STORE RESULT IN CARRY 3. CLR bit
a. CLR bit ; CONTENT OF BIT ADDRESS SPECIFIED WILL BE CLEARED.
b. CLR C ; CONTENT OF CARRY WILL BE CLEARED.
4. CPL bit
a. CPL bit ; CONTENT OF BIT ADDRESS SPECIFIED WILL BE
COMPLEMENTED. b. CPL C ; CONTENT OF CARRY WILL BE
COMPLEMENTED.
Debarati Chakraborty
Microcontroller notes– 64 25
CS/IT
UNIT 3
Assembler directives tell the assembler to do something other than creating the machine code
for an instruction. In assembly language programming, the assembler directives instruct the
assembler to
1. Process subsequent assembly language instructions
2. Define program constants
3. Reserve space for variables
ORG (origin)
The ORG directive is used to indicate the starting address. It can be used only when
the program counter needs to be changed. The number that comes after ORG can be
either in hex or in decimal.
Eg: ORG 0000H ;Set PC to 0000.
Debarati Chakraborty
Microcontroller notes– 64 26
CS/IT
2. Write a program to store data FFH into RAM memory locations 50H to 58H using
direct addressing mode
3. Write a program to subtract a 16 bit number stored at locations 51H-52H from 55H-
56H and store the result in locations 40H and 41H. Assume that the least significant
byte of data or the result is stored in low address. If the result is positive, then store
00H, else store 01H in 42H. ORG 0000H ; Set program counter 0000H
MOV A, 55H ; Load the contents of memory location 55 into A
CLR C ; Clear the borrow flag
SUBB A,51H ; Sub the contents of memory 51H from contents of A
MOV 40H, A ; Save the LSByte of the result in location 40H
MOV A, 56H ; Load the contents of memory location 56H into A
SUBB A, 52H ; Subtract the content of memory 52H from the content A
MOV 41H, ; Save the MSbyte of the result in location 415.
MOV A, #00 ; Load 005 into A
ADDC A, #00 ; Add the immediate data and the carry flag to A
MOV 42H, A ; If result is positive, store00H, else store 0lH in 42H
END
Debarati Chakraborty
Microcontroller notes– 64 27
CS/IT
4. Write a program to add two 16 bit numbers stored at locations 51H-52H and 55H-56H
and store the result in locations 40H, 41H and 42H. Assume that the least significant
byte of data and the result is stored in low address and the most significant byte of
data or the result is stored in high address.
5. Write a program to store data FFH into RAM memory locations 50H to 58H using
indirect addressing mode.
ORG 0000H ; Set program counter 0000H
MOV A, #0FFH ; Load FFH into A
MOV RO, #50H ; Load pointer, R0-50H
MOV R5, #08H ; Load counter, R5-08H
Start:MOV @RO, A ; Copy contents of A to RAM pointed by R0
INC RO ; Increment pointer
DJNZ R5, start ; Repeat until R5 is zero
END
6. Write a program to add two Binary Coded Decimal (BCD) numbers stored at locations
60H and 61H and store the result in BCD at memory locations 52H and 53H. Assume
that the least significant byte of the result is stored in low address.
Debarati Chakraborty
Microcontroller notes– 64 29
CS/IT
DJNZ R5,Loop
DIV AB
MOV 55H,A END
12. Write a program to find the cube of an 8 bit number program is as
follows ORG 0000H
MOV R1,#N
MOV A,R1
MOV B,R1
MUL AB //SQUARE IS COMPUTED
MOV R2, B
MOV B, R1
MUL AB
MOV 50,A
MOV 51,B
MOV A,R2
MOV B, R1
MUL AB
ADD A, 51H
MOV 51H, A
MOV 52H, B
MOV A, # 00H
ADDC A, 52H
MOV 52H, A //CUBE IS STORED IN 52H,51H,50H
END
13. Write a program to exchange the lower nibble of data present in external memory
6000H and 6001H
ORG 0000H ; S e t p r o g r a m c o u n t e r 0 0 h
MOV DPTR, #6000H ; Copy address 6000H to DPTR
MOVX A, @DPTR ; C o p y c o n t e n t s o f 6 0 0 0 8 t o A
MOV R0, #45H ; L o a d p o i n t e r , R 0 = 4 5 H
MOV @RO, A ; C o p y c o n t o f A t o R A M p o i n t e d b y 8 0
INC DPL ; I n c r e m e n t p o i n t e r
MOVX A, @DPTR ; C o p y c o n t e n t s o f 6 0 0 1 8 t o A
XCHD A, @R0 ; E x c h a n g e l o w e r n i b b l e o f A w i t h R A M p o
i n t e d b y R O MOVX @DPTR, A ; C o p y c o n t e n t s o f A t o 6 0 0
18
DEC DPL ; D e c r e m e n t p o i n t e r
MOV A, @R0 ; C o p y c o n t of R A M p o i n t e d b y R0 t o A
MOVX @DPTR, A ; C o p y c o n t o f A t o R A M p o i n t e d b y D P T R
END
14. Write a program to count the number of and o's of 8 bit data stored in location 6000H.
ORG 00008 ; Set program counter 00008
MOV DPTR, #6000h ; Copy address 6000H to DPTR
MOVX A, @DPTR ; C o p y n u m b e r t o A
MOV R0,#08 ; C o py 0 8 i n R O
MOV R2,#00 ; C o p y 0 0 i n R 2
MOV R3,#00 ; C o p y 0 0 i n R 3
CLR C ; Clear carry flag
BACK: RLC A ; R o t a t e A t h r o u g h c a r r y f l a g
Debarati Chakraborty
Microcontroller notes– 64 30
CS/IT
JC NEXT ; I f C F = 1 , b r a n c h t o n e x t
INC R2 ; I f C F = 0 , i n c r e m e n t R 2 AJMP NEXT2
NEXT: INC R3 ; I f C F = 1 , i n c r e m e n t R 3
NEXT2: DJNZ RO,BACK ; R e p e a t u n t i l R O i s z e r o
END
15. Write a program to shift a 24 bit number stored at 57H-55H to the left logically four
places. Assume that the least significant byte of data is stored in lower address.
ORG 0000H ; Set program counter 0000h
MOV R1,#04 ; Set up loop count to 4
again: MOV A,55H ; Place the least significant byte of data in A
CLR C ; Clear tne carry flag
RLC A ; Rotate contents of A (55h) left through carry
MOV 55H,A
MOV A,56H
RLC A ; Rotate contents of A (56H) left through carry
MOV 56H,A
MOV A,57H
RLC A ; Rotate contents of A (57H) left through carry
MOV 57H,A
DJNZ R1,again ; Repeat until R1 is zero
END
16. Two 8 bit numbers are stored in location 1000h and 1001h of external data memory.
Write a program to find the GCD of the numbers and store the result in 2000h.
ALGORITHM
∙ Step 1 :Initialize external data memory with data and DPTR with address
∙ Step 2 :Load A and TEMP with the operands
∙ Step 3 :Are the two operands equal? If yes, go to step 9
∙ Step 4 :Is (A) greater than (TEMP) ? If yes, go to step 6
∙ Step 5 :Exchange (A) with (TEMP) such that A contains the bigger number
∙ Step 6 :Perform division operation (contents of A with contents of TEMP)
∙ Step 7 :If the remainder is zero, go to step 9
∙ Step 8 :Move the remainder into A and go to step 4
∙ Step 9 :Save the contents 'of TEMP in memory and terminate the program
ORG 0000H ; Set program counter 0000H
TEMP EQU 70H
TEMPI EQU 71H
MOV DPTR, #1000H ; Copy address 100011 to DPTR
MOVX A, @DPTR ; Copy First number to A
MOV TEMP, A ; Copy First number to temp INC DPTR
MOVX A, @DPTR ; Copy Second number to A
LOOPS: CJNE A, TEMP, LOOP1 ; (A) /= (TEMP) branch to LOOP1
AJMP LOOP2 ; (A) = (TEMP) branch to L00P2
LOOP1: JNC LOOP3 ; (A) > (TEMP) branch to LOOP3
NOV TEMPI, A ; (A) < (TEMP) exchange (A) with (TEMP)
MOV A, TEMP
MOV TEMP, TEMPI
LOOP3: MOV B, TEMP
DIV AB ; Divide (A) by (TEMP)
MOV A, B ; Move remainder to A
CJNE A,#00, LOOPS ; (A)/=00 branch to LOOPS
LOOP2: MOV A, TEMP
MOV DPTR, #2000H
MOVX @DPTR, A ; Store the result in 2000H
END
Debarati Chakraborty
Microcontroller notes– 64 31
CS/IT
UNIT 5
ISR will always ends with RETI instruction. The execution of RETI instruction results in the
following.
Classification of interrupts.
Debarati Chakraborty
Microcontroller notes– 64 32
CS/IT
1. IE Register
This is an 8 bit register used for enabling or disabling the interrupts. The structure of IE
register is shown below.
2. IP Register.
This is an 8 bit register used for setting the priority of the interrupts.
Debarati Chakraborty
Microcontroller notes– 64 33
CS/IT
Timer in 8051 is used as timer, counter and baud rate generator. Timer always counts up
irrespective of whether it is used as timer, counter, or baud rate generator: Timer is always
incremented by the microcontroller. The time taken to count one digit up is based on master
clock frequency.
If Master CLK=12 MHz,
Timer Clock frequency = Master CLK/12 = 1 MHz
Timer Clock Period = 1micro second
This indicates that one increment in count will take 1 micro second.
The two timers in 8051 share two SFRs (TMOD and TCON) which control the timers, and each
timer also has two SFRs dedicated solely to itself (TH0/TL0 and TH1/TL1).
Debarati Chakraborty
Microcontroller notes– 64 34
CS/IT
TMOD Register
TCON Register
Timer/ Counter Control Logic.
Debarati Chakraborty
Microcontroller notes– 64 35
CS/IT
TIMER MODES
Timer Mode-1: This mode is similar to mode-0 except for the fact that the Timer operates in 16-
bit mode.
Debarati Chakraborty
Microcontroller notes– 64 36
CS/IT
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.
Control bits TR1 and TF1 are used by Timer-0 (higher 8 bits) (TH0) in Mode-3 while TR0 and TF0
are available to Timer-0 lower 8 bits(TL0).
Debarati Chakraborty
Microcontroller notes– 64 37
CS/IT
Mode 1:
∙ Load the TMOD value register indicating which timer (0 or 1) is to be used and
which timer mode is selected.
∙ Load registers TL and TH with initial count values.
∙ Start the timer by the instruction “SETB TR0” for timer 0 and “SETB TR1” for timer
1. ∙ Keep monitoring the timer flag (TF) with the “JNB TFx,target” instruction to see if
it is raised. Get out of the loop when TF becomes high.
∙ Stop the timer with the instructions “CLR TR0” or “CLR TR1”, for timer 0 and timer
1, respectively.
∙ Clear the TF flag for the next round with the instruction “CLR TF0” or “CLR TF1”, for
timer 0 and timer 1, respectively.
∙ Go back to step 2 to load TH and TL again.
Mode 0:
The programming techniques mentioned here are also applicable to
counter/timer mode 0. The only difference is in the number of bits of the initialization
value. Mode 2:
∙ Load the TMOD value register indicating which timer (0 or 1) is to be used; select
timer mode 2.
∙ Load TH register with the initial count value. As it is an 8-bit timer, the valid range
is from 00 to FFH.
∙ Start the timer.
Debarati Chakraborty
Microcontroller notes– 64 38
CS/IT
∙ Keep monitoring the timer flag (TFx) with the “JNB TFx,target” instruction to see if it
is raised. Get out of the loop when TFx goes high.
∙ Clear the TFx flag.
∙ Go back to step 4, since mode 2 is auto-reload.
1. Write a program to continuously generate a square wave of 2 kHz frequency on pin
P1.5 using timer 1. Assume the crystal oscillator frequency to be 12 MHz.
The period of the square wave is T = 1/(2 kHz) = 500 μs. Each half pulse = 250
μs. The value n for 250 μs is: 250 μs /1 μs = 250
65536 - 250 = FF06H.
TL = 06H and TH = 0FFH.
Debarati Chakraborty
Microcontroller notes– 64 39
CS/ITUNIT 6
6.1 SERIAL COMMUNICATION.
6.1.1. DATA COMMUNICATION
The 8051 microcontroller is parallel device that transfers eight bits of data simultaneously
over eight data lines to parallel I/O devices. Parallel data transfer over a long is very expensive.
Hence, a serial communication is widely used in long distance communication. In serial data
communication, 8-bit data is converted to serial bits using a parallel in serial out shift register and
then it is transmitted over a single data line. The data byte is always transmitted with least
significant bit first.
6.1.2. BASICS OF SERIAL DATA COMMUNICATION,
Communication Links
1. Simplex communication link: In simplex transmission, the line is dedicated for transmission.
The transmitter sends and the receiver receives the data.
Transmitter Receiver
2. Half duplex communication link: In half duplex, the communication link can be used for
either transmission or
reception. Data is transmitted in only one direction at a time.
Receiver
Transmitter
Transmitter
Receiver
3. Full duplex communication link: If the data is transmitted in both ways at the same time, it is
a full duplex i.e. transmission and reception can proceed simultaneously. This communication
link requires two wires for data, one for transmission and one for reception.
Serial data communication uses two
Transmitter types of communication.
Receiver
Receiver
Transmitter
Types of Serial communication:
1. Synchronous serial data communication: In this transmitter and receiver are synchronized. It
uses a common clock to synchronize the receiver and the transmitter. First the synch character is
sent and then the data is transmitted. This format is generally used for high speed transmission.
In Synchronous serial data communication a block of data is transmitted at a time.
Transmitter Receiver
Sync
Debarati Chakraborty
Microcontroller notes– 64 40
CS/IT
Data
Clock
2. Asynchronous Serial data transmission: In this, different clock sources are used for transmitter
and receiver. In this mode, data is transmitted with start and stop bits. A transmission begins with
start bit, followed by data and then stop bit. For error checking purpose parity bit is included just
prior to stop bit. In Asynchronous serial data communication a single byte is transmitted at a time.
Data
Clock 1 Clock2 Baud rate:
The rate at which the data is transmitted is called baud or transfer rate. The baud rate is the
reciprocal of the time to send one bit. In asynchronous transmission, baud rate is not equal to
number of bits per second. This is because; each byte is preceded by a start bit and followed by
parity and stop bit. For example, in synchronous transmission, if data is transmitted with 9600
baud, it means that 9600 bits are transmitted in one second. For bit transmission time = 1 second/
9600 = 0.104 ms.
CS/IT
3. PCON register: The SMOD bit (bit 7) of PCON register controls the baud rate in
asynchronous mode transmission.
Debarati Chakraborty
Microcontroller notes– 64 42
CS/IT
4. Mode 3
This is similar to mode 2 except baud rate is calculated as in mode 1
RS-232 standards:
To allow compatibility among data communication equipment made by various
manufactures, an interfacing standard called RS232 was set by the Electronics Industries
Association (EIA) in 1960. Since the standard was set long before the advent of logic family, its
input and output voltage levels are not TTL compatible.
In RS232, a logic one (1) is represented by -3 to -25V and referred as MARK while logic zero
(0) is represented by +3 to +25V and referred as SPACE. For this reason to connect any RS232 to
a microcontroller system we must use voltage converters such as MAX232 to convert the TTL
logic level to RS232 voltage levels and vice-versa. MAX232 IC chips are commonly
referred as line drivers.
In RS232 standard we use two types of connectors. DB9 connector or
DB25 connector.
Debarati Chakraborty
Microcontroller notes– 64 43
CS/IT
ORG 0000H
LJMP START
ORG 0030H
START: MOV TMOD, #20H ; select timer 1 mode 2
MOV TH1, #0FAH ; load count to get baud rate of 4800
MOV SCON, #50H ; initialize UART in mode 2
; 8 bit data and 1 stop bit
SETB TR1 ; start timer
AGAIN: MOV SBUF, #'A' ; load char ‘A’ in SBUF
BACK: JNB TI, BACK ; Check for transmit interrupt flag
CLR TI ; Clear transmit interrupt flag
SJMP AGAIN
END
Example 2. Write a program for the 8051 to transfer the message ‘EARTH’ serially at 9600
baud, 8 bit data, 1 stop bit continuously.
ORG 0000H
LJMP START
Debarati Chakraborty
Microcontroller notes– 64 44
CS/IT
ORG 0030H
START: MOV TMOD, #20H ; select timer 1 mode 2
MOV TH1, #0FDH ; load count to get reqd. baud rate of 9600 MOV SCON,
#50H ; initialise uart in mode 2
; 8 bit data and 1 stop bit
SETB TR1 ; start timer
LOOP: MOV A, #'E' ; load 1st letter ‘E’ in a
ACALL LOAD ; call load subroutine
MOV A, #'A' ; load 2nd letter ‘A’ in a
ACALL LOAD ; call load subroutine
MOV A, #'R' ; load 3rd letter ‘R’ in a
ACALL LOAD ; call load subroutine
MOV A, #'T' ; load 4th letter ‘T’ in a
ACALL LOAD ; call load subroutine
MOV A, #'H' ; load 4th letter ‘H’ in a
ACALL LOAD ; call load subroutine
SJMP LOOP ; repeat steps
END
The 8255A programmable peripheral interface (PPI) implements a general-purpose I/O interface
to connect peripheral equipment to a microcomputer system bus.
Features
• Three 8-bit Peripheral Ports - Ports A, B, and C
• Three programming modes for Peripheral Ports: Mode 0 (Basic Input/Output), Mode 1
(Strobed Input/Output), and Mode 2 (Bidirectional)
• Total of 24 programmable I/O lines
• 8-bit bidirectional system data bus with standard microprocessor interface
controls 6.2.1. ARCHITECTURE OF 8255A
Debarati Chakraborty
Microcontroller notes– 64 45
CS/IT Read/Write
Control Logic has six connections.
Read, Write: This control signal enables the Read/Write operation. When the signal is low, the
controller reads/writes data from/to a selected I/O Port of the 8255.
RESET: This is an active high signal; it clears the control register and sets all ports in the input
mode.
CS, A0 and A1: Theses are device select signals. Chip Select is connected to a decoded address,
and A0 and A1 are generally connected to MPU address lines A0 and A1 respectively
Debarati Chakraborty
Microcontroller notes– 64 46
CS/IT
Control register is an 8 bit register. The contents of this register called control word. This register
can be accessed to write a control word when A0 and A1 are at logic 1. This control register is not
accessible for a read operation.
Bit D7 of the control register specifies either I/O function or the Bit Set/Reset function. If bit
D7=1, bits D6-D0 determines I/O functions in various modes. If bit D7=0, Port C operates in the
Bit Set/Reset (BSR) mode. The BSR control word does not affect the functions of Port A and Port
B.
6.2.2. I/O ADDRESSING
8051 can be interfaced with the processor by two methods
∙ Isolated I/O, I/O mapped I/O.
In this addressing method, IN,OUT instructions (microprocessors) are used to access
the input/output devices.
∙ Memory mapped I/O.
The instructions used to access the memory itself will be used for accessing I/O devices.
The I/O devices are connected to the addresses where it can be accessed using simple
memory accessing mechanism.
ADDITIONAL NOTES
ADC Devices:
Debarati Chakraborty
Microcontroller notes– 64 47
CS/IT
Analog to digital converters are among the most widely used devices for data acquisitions. Digital
computers use binary (discrete) value but in physical world everything is analog (continuous). A
physical
quantity is converted to electrical signals using device called transducer or also called as sensors.
Sensors and many other natural quantities produce an output that is voltage (or current).
Therefore we need an
analog - to - digital converter to translate the analog signal to digital numbers so that the
microcontroller can read and process them.
An ADC has an n bit resolution where n can be 8, 10, 16, 0r even 24 bits. The higher resolution
ADC provides a smaller step size, where step size is smallest change that can be discerned by an
ADC. This is shown below.
In addition to resolution, conversion time is another major factor in judging an ADC. Conversion
time is defined as the time it takes the ADC to convert the analog input to digital (binary) number.
The ADC chips are either parallel or serial. In parallel ADC, we have 8 or more pins dedicated to
bring out the binary data, but in serial ADC we have only one pin for data out.
ADC 0808
ADC0808, has 8 analog inputs. ADC0808 allows us to monitor up to 8 different analog inputs
using only a single chip. ADC0808 has an 8-bit data output. The 8 analog inputs channels are
multiplexed and selected according to table given below using three address pins, A, B, and C.
Debarati Chakraborty
Microcontroller notes– 64 48
CS/IT
In ADC0808 Vref (+) and Vref (-) set the reference voltage. If Vref (-) = Gnd and Vref (+) = 5V, the
step size is 5V/ 256 = 19.53 mV. Therefore,to get a 10 mV step size we need to set Vref (+) =
2.56V and Vref(-) = Gnd. ALE is used to latch in the address. SC for start conversion. EOC is for
end-of conversion, and OE is for output enable (READ). Table shows the step size relation to the
Vref Voltage.
Debarati Chakraborty
Microcontroller notes– 64 49
Microcontrollers 4 Sem ECE
Assembly, C, Assembly+C projects for
MSP430 microcontrollers. Interrupt
UNIT 7: Motivation for
programming. 3 Hrs
MSP430microcontrollers – Low Power
Digital I/O – I/O ports programming using C
embedded systems, On-chip peripherals
and assembly, Understanding the muxing
(analog and digital), low-power RF
scheme of the MSP430 pins. 2 Hrs
capabilities. Target applications (Single-chip,
low cost, low power, high performance UNIT 8: On-chip peripherals. Watchdog
system design). 2 Hrs Timer,
MSP430 RISC CPU architecture, Compiler- Comparator, Op-Amp, Basic Timer, Real
friendly features, Instruction set, Clock Time Clock (RTC), ADC, DAC, SD16, LCD,
system, Memory subsystem. Key DMA. 2 Hrs
differentiating factors between different
Using Low-power features of MSP430. Clock
MSP430 families. 2 Hrs.
system, low-power modes, Clock request
Introduction to Code Composer Studio (CCS feature, Low power programming and
v4). Understanding how to use CCS for Interrupt. 2 Hrs
Interfacing LED, LCD, External memory. Case Studies of applications of MSP430 -
Seven segment LED modules interfacing. Data acquisition system, Wired Sensor
Example – Real time clock. 2 Hrs network, Wireless sensor network with
Chipcon RF interfaces. 3 Hrs
LOW POWER EMBEDDED SYSTEMS
Debarati Chakraborty
Microcontroller notes– 64 50
Microcontrollers 4 Sem ECE
Debarati Chakraborty
Microcontroller notes– 64 51
Microcontrollers 4 Sem ECE
6. The brownout protection comes into action if the supply voltage drops to a dangerous
level. Most devices include this but not some of the MSP430x1xx family.
7. There are ground and power supply connections. Ground is labeled VSS and is taken
to define 0V. The supply connection is VCC which is mostly in the range of 1.8–3.6V.
MSP 430 has sixteen 16-bit registers. These registers do not have address in the main
memory map. First four registers have dedicated alternate functions and the remaining 12
registers are used as working registers for general purposes.
Debarati Chakraborty
R0/PC (PROGRAM
COUNTER) R8 (GENERAL PURPOSE)
Microcontroller notes– 64 53
Microcontrollers 4 Sem ECE
Program counter, PC: This contains the address of the next instruction to be executed
Stack pointer, SP: MSP430 uses the top (high addresses) of the main RAM as stack memory. The
stack pointer holds the address of the most recently added word and is automatically adjusted
as the stack grows downward in memory or shrinks upward.
Status register, SR: This contains a set of flags (single bits), whose functions fall into three
categories. The most commonly used flags are C, Z, N, and V, which give information about the
result of the last arithmetic or logical operation. The Z flag is set if the result was zero and
cleared if it was nonzero, for instance. Setting the GIE bit enables maskable interrupts. The final
group of bits is CPUOFF, OSCOFF, SCG0, and SCG1, which control the mode of operation of the
MCU. All systems are active when all bits are clear.
Constant generator: This provides the six most frequently used values so that they need not be
fetched from memory whenever they are needed. It uses both R2 and R3 to provide a range of
useful values by exploiting the CPU’s addressing modes.
General purpose registers: The remaining 12 registers, R4–R15, are general working registers.
They may be used for either data or addresses because both are 16-bit values, which simplify
the operation significantly.
∙ The MSP430 von Neumann architecture has one address space shared with
o special function registers (SFRs),
o peripherals,
o RAM, and
o Flash/ROM memory
∙ Code access are always performed on even addresses.
Debarati Chakraborty
Microcontroller notes– 64 54
Microcontrollers 4 Sem ECE
ADDRESSING MODES
1. Register addressing mode. The address is formed by adding a constant base address to
the contents of a CPU register; the value in the register is not changed.
Eg: MOV R10, R11
Length: One or two words
Operation: Move the content of R10 to R11. R10 is not affected.
Before: After:
R10 - 0A023h R10 - 0A023h
R11 - 0FA15h R11 - 0A023h
PC - PC old PC - PC old + 2
2. Indexed addressing mode. In this case the program counter PC is used as the base
address, so the constant is the offset to the data from the PC.
Eg: MOV 2(R5),6(R6)
Length: 2 or 3 words
Operation: Move the contents of the source address (contents of R5 + 2) to the
destination address (contents of R6 + 6).
Debarati Chakraborty
Microcontroller notes– 64 55
Microcontrollers 4 Sem ECE
4. Absolute Mode: The constant in this form of indexed addressing is the absolute address of
the data. This is already the complete address required so it should be added to a register
that contains 0. Absolute addressing is shown by the prefix & and should be used for
special function and peripheral registers, whose addresses are fixed in the memory map.
Eg: mov.b &P1IN ,R6 ; copies the port 1 input register into register R6
7. Immediate Mode
Eg: MOV #45h,TONI: Operation: Move the immediate constant 45h, which is contained
in the word following the instruction, to destination address TONI. When fetching the
source, the program counter points to the word following the instruction and moves
the contents to the destination.
CLOCK SYSTEM
Figure below shows a simplified diagram of the Basic Clock Module+ (BCM+) for the
MSP430F2xx family. The clock module provides three outputs:
• Master clock, MCLK is used by the CPU and a few peripherals.
• Sub-system master clock, SMCLK is distributed to peripherals.
• Auxiliary clock, ACLK is also distributed to peripherals.
Most peripherals can choose either SMCLK, which is often the same as MCLK and in the
megahertz range, or ACLK, which is typically much slower and usually 32 KHz. A few
peripherals, such as analog-to-digital converters, can also use MCLK and some, such as
timers, have their own clock inputs. The frequencies of all three clocks can be divided in
the BCM+ as shown in figure.
Up to four sources are available for the clock, depending on the family and variant:
Low- or high-frequency crystal oscillator, LFXT1: Available in all devices. It is usually used
with a low-frequency crystal (32 KHz) but can also run with a high-frequency crystal
(typically a few MHz) in most devices. An external clock signal can be used instead of a
crystal if it is important to synchronize the MSP430 with other devices in the system.
Debarati Chakraborty
Microcontroller notes– 64 56
Microcontrollers 4 Sem ECE
High-frequency crystal oscillator, XT2: Similar to LFXT1 except that it is restricted to high
frequencies. It is available in only a few devices and LFXT1 (or VLO) is used instead if XT2
is missing. Internal very low-power, low-frequency oscillator, VLO: Available in only the
more recent MSP430F2xx devices. It provides an alternative to LFXT1 when the accuracy
of a crystal is not needed.
Digitally controlled oscillator, DCO: Available in all devices and one of the highlights of
the MSP430. It is basically a highly controllable RC oscillator that starts in less than 1µs
in newer devices.
SMCLK
up counter PUC
Control Register
Mode selection WDT CNTCL
WDT TMSEL (clear)
WDT SSEL
WDT CTL WDTIE & GIE =1
The watchdog counter is a 16-bit register WDTCNT, which is not visible to the user. It is
clocked from either SMCLK (default) or ACLK, according to the WDTSSEL bit. The watchdog
is always active after the MSP430 has been reset. By default the clock is SMCLK, which is
in turn derived from the DCO at about 1 MHz. The default period of the watchdog is the
maximum value of 32,768 counts, which is therefore around 32 ms. We must clear, stop,
or reconfigure the watchdog before this time has elapsed. If the watchdog is left running,
the counter must be repeatedly cleared to prevent it counting up as far as its limit. This is
done by setting the WDTCNTCL bit in WDTCTL. The watchdog timer sets the WDTIFG flag
in the special function register IFG1. This is cleared by a power-on reset but its value is
preserved during a PUC. Thus a program can check this bit to find out whether a reset
arose from the watchdog.
BASIC TIMER.
Basic Timer1 is present in all MSP430xF4xx devices. It provides the clock for the LCD
module and generates periodic interrupts. A simplified block diagram of basic timer is
shown in figure below. Newer devices contain a real-time clock driven by a signal at 1Hz
from Basic Timer1. The register BTCTL controls most of the functions of Basic Timer1 but
there are also bits in the special function registers IFG2 and IE2 for interrupts.
Debarati Chakraborty
Microcontroller notes– 64 57
Debarati Chakraborty
Microcontroller notes– 64 58
Microcontrollers 4 Sem ECE
– Port P1 input, P1IN: reading returns the logical values on the inputs if they are
configured for digital input/output. This register is read-only and volatile. It
does not need to be initialized because its contents are determined by the
external signals.
– Port P1 output, P1OUT: writing sends the value to be driven to each pin if it is
configured as a digital output. If the pin is not currently an output, the value is
stored in a buffer and appears on the pin if it is later switched to be an output.
This register is not initialized and you should therefore write to P1OUT before
configuring the pin for output.
– Port P1 direction, P1DIR: clearing a bit to 0 configures a pin as an input, which is
the default in most cases. Writing a 1 switches the pin to become an output.
This is for digital input and output; the register works differently if other
functions are selected using P1SEL.
– Port P1 resistor enable, P1REN: setting a bit to 1 activates a pull-up or pull-down
resistor on a pin. Pull-ups are often used to connect a switch to an input as in
the section “Read Input from a Switch” on page 80. The resistors are inactive
by default (0). When the resistor is enabled (1), the corresponding bit of the
P1OUT register selects whether the resistor pulls the input up to VCC (1) or
down to VSS (0).
– Port P1 selection, P1SEL: selects either digital input/output (0, default) or an
alternative function (1). Further registers may be needed to choose the
particular function.
– Port P1 interrupt enable, P1IE: enables interrupts when the value on an input
pin changes. This feature is activated by setting appropriate bits of P1IE to 1.
Interrupts are off (0) by default. The whole port shares a single interrupt vector
although pins can be enabled individually.
– Port P1 interrupt edge select, P1IES: can generate interrupts either on a positive
edge (0), when the input goes from low to high, or on a negative edge from
high to low (1). It is not possible to select interrupts on both edges
simultaneously but this is not a problem because the direction can be reversed
after each transition. Care is needed if the direction is changed while
interrupts are enabled because a spurious interrupt may be generated. This
register is not initialized and should therefore be set up before interrupts are
enabled.
– Port P1 interrupt flag, P1IFG: a bit is set when the selected transition has been
detected on the input. In addition, an interrupt is requested if it has been
enabled. These bits can also be set by software, which provides a mechanism
for generating a software interrupt (SWI).
Debarati Chakraborty
Microcontroller notes– 64 59
Microcontrollers 4 Sem ECE
Debarati Chakraborty
Microcontroller notes– 64 60
Microcontrollers 4 Sem ECE
Additional Questions:
1. Explain the following instructions.
a) DADD: DECIMAL ADD source and carry to the destination.
(Destination) = (carry) + (source) + (destination)
b) BIC: BIC(.b or .w) src, dst: not src and dst to dst.
c) CMP: CMP(.b or .w) src, dst: compare source and destination.
d) SXT dst. Extend bit 7 to bit 8-bit15 (sign extended destination.)
e) CALL (.b or .w) dst: SP-2 > SP, PC+2 > @SP, dst > PC (subroutine call to destination)
Eg: interface 8255A with 8051 microcontroller such that the control register is selected for the
address 1003H. find the address of port A,B and C
Solution
The control register is selected for the address 1003H. Address lines A15 to A0 for ports and
control register is as follows.
A1 A1 A1 A1 A1 A1 A A A A A A A A A A
5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 PORT
A
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 PORT
B
0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 PORT
C
0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 CR
Address of Port A is 1000h, Port B is 1001h, port C is 1002h and control word is 1003h. RD and
WR pins of 8051 is connected to RD and WR pins of 8255 as shown in fig. A0 and A1 from 8255
are directly connected to address lines of 8051. Remaining address lines are connected to the
decoder 74LS138 and the output of the decoder is connected to the CS pin of 8255. Data pins of
8255 is directly connected to the data bus of 8051 microcontroller.
Debarati Chakraborty
Microcontroller notes– 64 61