Special Function Registers:
The 8051
is a flexible microcontroller with a relatively large number of modes of
operations. Your program may inspect and/or change the operating mode of the
8051 by manipulating the values of the 8051's Special Function Registers
(SFRs).
SFRs are
accessed as if they were normal Internal RAM. The only difference is that
Internal RAM is from address 00h through 7Fh whereas SFR registers exist in the
address range of 80h through FFh. Each SFR has an address (80h through FFh) and
a name.
The
following chart provides a graphical presentation of the 8051's SFRs, their
names, and their address. As you can see, although the address range of 80h
through FFh offer 128 possible addresses, there are only 21 SFRs in a standard
8051. All other addresses in the SFR range (80h through FFh) are considered
invalid. Writing to or reading from these registers may produce undefined
values or behavior.
SFR Types
SFRs
related to the I/O ports: The 8051 has four I/O ports of 8 bits, for a total of
32 I/O lines. Whether a given I/O line is high or low and the value read from
the line are controlled by the SFRs.
The SFRs
control the operation or the configuration of some aspect of the 8051. For
example, TCON controls the timers,
SCON controls the serial port, the remaining SFRs, are auxillary SFRs in the
sense that they don't directly configure the 8051 but obviously the 8051 cannot
operate without them. For example, once the serial port has been configured
using SCON, the program may read or
write to the serial port using the SBUF
register.
SFR Descriptions
P0 (Port 0, Address 80h, Bit-Addressable): This is
input/output port 0. Each bit of this SFR
corresponds to one of the pins on the microcontroller. For example, bit 0 of
port 0 is pin P0.0, bit 7 is in P0.7. Writing a value of 1 to a bit of this SFR
will send a high level on the corresponding I/O pin whereas a value of 0 will
bring it to a low level.
SP (Stack Pointer, Address 81h): This is
the stack pointer of the microcontroller. This SFR indicates where the next value to be taken from the stack will
be read from in Internal RAM. If you push a value onto the stack, the value
will be written to the address of SP + 1. This SFR is modified by all
instructions which modify the stack, such as PUSH, POP, LCALL, RET, RETI, and
whenever interrupts are provoked by the microcontroller. The Stack Pointer,
like all registers except DPTR and PC, may hold an 8-bit (1-byte) value.
When you
pop a value off the stack, the 8051 returns the value from the memory location
indicated by SP, and then decrements the value of SP.
This
order of operation is important. When the 8051 is initialized SP will be
initialized to 07h. If you immediately push a value onto the stack, the value
will be stored in Internal RAM address 08h.
First the
8051 will increment the value of SP (from 07h to 08h) and then will store the
pushed value at that memory address (08h). It is also used intrinsically
whenever an interrupt is triggered .
DPL/DPH (Data Pointer Low/High,
Addresses 82h/83h): The SFRs DPL and DPH work together to represent a 16-bit value called the Data Pointer. The data pointer is used
in operations regarding external RAM and some instructions involving code
memory. Since it is an unsigned two-byte integer value, it can represent values
from 0000h to FFFFh (0 through 65,535 decimal).
PCON (Power Control, Addresses 87h): The Power
Control SFR is used to control the 8051's
power control modes. Certain operation modes of the 8051 allow the 8051 to go
into a type of "sleep" mode which requires much less power. These
modes of operation are controlled through PCON. Additionally, one of the bits
in PCON is used to double the effective baud rate of the 8051's serial port.
TCON (Timer Control, Addresses 88h,
Bit-Addressable): The Timer Control SFR is used to configure and modify the way in which the 8051's two
timers operate. This SFR controls whether each of the two timers is running or
stopped and contains a flag to indicate that each timer has overflowed.
Additionally, some non-timer related bits are located in the TCON SFR. These
bits are used to configure the way in which the external interrupts are
activated and also contain the external interrupt flags which are set when an
external interrupt has occurred.
TMOD (Timer Mode, Addresses 89h): The Timer
Mode SFR is used to configure the mode
of operation of each of the two timers. Using this SFR your program may
configure each timer to be a 16-bit timer, an 8-bit autoreload timer, a 13-bit
timer, or two separate timers. Additionally, you may configure the timers to
only count when an external pin is activated or to count "events"
that are indicated on an external pin.
TL0/TH0 (Timer 0 Low/High, Addresses 8Ah/8Bh): These two
SFRs, taken together, represent
timer 0. Their exact behavior depends on how the timer is configured in the
TMOD SFR; however, these timers always count up. What is configurable is how
and when they increment in value.
TL1/TH1 (Timer 1 Low/High, Addresses 8Ch/8Dh): These two
SFRs, taken together, represent
timer 1. Their exact behavior depends on how the timer is configured in the
TMOD SFR; however, these timers always count up. What is configurable is how
and when they increment in value.
P1 (Port 1, Address 90h, Bit-Addressable): This is
input/output port 1. Each bit of this SFR
corresponds to one of the pins on the microcontroller. For example, bit 0 of
port 1 is pin P1.0, bit 7 is pin P1.7. Writing a value of 1 to a bit of this
SFR will send a high level on the corresponding I/O pin whereas a value of 0
will bring it to a low level.
SCON (Serial Control, Addresses 98h,
Bit-Addressable): The Serial Control SFR is used to configure the behavior of the 8051's on-board serial port. This
SFR controls the baud rate of the serial port, whether the serial port is
activated to receive data, and also contains flags that are set when a byte is
successfully sent or received.
SBUF (Serial Control, Addresses 99h): The
Serial Buffer SFR is used to send and receive data via the on-board serial port. Any value written to SBUF will
be sent out the serial port's TXD pin. Any value which the 8051 receives via
the serial port's RXD pin will be delivered to the user program via SBUF. In
other words, SBUF serves as the output port when written to and as an input
port when read from.
P2 (Port 2, Address A0h, Bit-Addressable): This is
input/output port 2. Each bit of this SFR
corresponds to one of the pins on the microcontroller. For example, bit 0 of
port 2 is pin P2.0, bit 7 is pin P2.7. Writing a value of 1 to a bit of this
SFR will send a high level on the corresponding I/O pin whereas a value of 0
will bring it to a low level.
IE (Interrupt Enable, Addresses A8h): The
Interrupt Enable SFR is used to enable and
disable
specific
interrupts. The low 7 bits of the SFR are used to enable/disable the specific
interrupts, where as
the
highest bit is used to enable or disable ALL interrupts. Thus, if the high bit
of IE is 0 all interrupts are
disabled
regardless of whether an individual interrupt is enabled by setting a lower
bit.
P3 (Port 3, Address B0h, Bit-Addressable): This is
input/output port 3. Each bit of this SFR
corresponds to one of the pins on the microcontroller. For example, bit 0 of
port 3 is pin P3.0, bit 7 is pin P3.7. Writing a value of 1 to a bit of this
SFR will send a high level on the corresponding I/O pin whereas a value of 0
will bring it to a low level.
IP (Interrupt Priority, Addresses B8h,
Bit-Addressable): The Interrupt Priority SFR is used to specify the relative priority of each interrupt. On the
8051, an interrupt may either be of low (0) priority or high (1) priority. An
interrupt may only interrupt interrupts of lower priority. For example, if we
configure the 8051 so that all interrupts are of low priority except the serial
interrupt, the serial interrupt will always be able to interrupt the system,
even if another interrupt is currently executing. However, if a serial
interrupt is executing no other interrupt will be able to interrupt the serial
interrupt routine since the serial interrupt routine has the highest priority.
PSW (Program Status Word, Addresses D0h,
Bit-Addressable): The Program Status Word is used to store a number of important bits that are set and
cleared by 8051 instructions. The PSW SFR contains the carry flag, the
auxiliary carry flag, the overflow flag, and the parity flag. Additionally, the
PSW register contains the register bank select flags which are used to select
which of the "R" register banks
are
currently selected.
ACC (Accumulator, Addresses E0h, Bit-Addressable): The
Accumulator is one of the most used
SFRs on the 8051 since it is involved in so many instructions. The Accumulator
resides as an SFR at E0h, which means the instruction MOV A,#20h is really the same as MOV E0h,#20h. first method requires two bytes whereas the second
option requires three
bytes.
It can
hold an 8-bit (1-byte) value and More than half of the 8051’s 255 instructions
manipulate or use the accumulator in some way.
For
example, if you want to add the number 10 and 20, the resulting 30 will be
store in the Accumulator. Once you have a value in the Accumulator you may
continue processing the value or you may store it in another register or in
memory.
B (B Register, Addresses F0h, Bit-Addressable): The
"B" register is used in two instructions:
the
multiply and divide operations. The B register is also commonly used by
programmers as an auxiliary register to temporarily store values. Thus, if you
want to quickly and easily multiply or divide A by another number, you may
store the other number in "B" and make use of these two instruction
Aside from the MUL and DIV instructions, the "B" register is often
used as yet another temporary storage register much like a ninth "R"
register.
8051 Basic Registers
The "R" registers: The
"R" registers are a set of eight registers named R0 to R7. These registers are used as auxiliary
registers in many operations. To continue with the above example, perhaps you
are adding 10 and 20. The original number 10 may be stored in the Accumulator
whereas the value 20 may be stored in, say, register R4. To process the
addition you would execute the command: ADD A, R4 After executing this
instruction the
Accumulator
will contain the value 30. The "R" registers are also used to
temporarily store values. For example, let’s say you want to add the values in
R1 and R2 together and then
subtract the values of R3 and R4. One way to do this would be: MOV A,
R3; Move the value of R3 into the accumulator ADD A, R4; add the value of R4
MOV R5,
A; Store the resulting value temporarily in R5 MOV A, R1; Move the value of R1
into the accumulator ADD A, R2; Add the value of R2
SUBB A,
R5; Subtract the value of R5 (which now contains R3 + R4)
As you
can see, we used R5 to temporarily hold the sum of R3 and R4. Of course, this
isn’t the most efficient way to calculate (R1+R2) - (R3 +R4) but it does
illustrate the use of the "R" registers as a way to store values
temporarily.
The Program Counter (PC)
The
Program Counter (PC) is a 2-byte address which tells the 8051 where the next
instruction to execute is found in memory. When the 8051 is initialized PC
always starts at
0000h and
is incremented each time an instruction is executed.
PC isn’t
always incremented by one. some instructions require 2 or 3 bytes the PC will
be incremented by 2 or 3 in these cases.
The
Program Counter has no way to directly modify its value. But if you execute
LJMP 2340h you can make PC=2340h.
You may
change the value of PC (by executing a jump instruction, etc.) there is no way
to read the value of PC.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.