Page 254
DS007-0.4-NOV02
AdvancedInformation
C8051F060/1/2/3
DVANCD
address “11110101”, only slave #1 would recognize the address as valid. If a master were to then send an address of
“11111111”, all three slave devices would recognize the address as a valid broadcast address.
21.2.
Multiprocessor Communications
Modes 2 and 3 support multiprocessor communication between a master processor and one or more slave processors
by special use of the ninth data bit and the built-in UART0 address recognition hardware. When a master processor
wants to transmit to one or more slaves, it first sends an address byte to select the target(s). An address byte differs
from a data byte in that its ninth bit is logic 1; in a data byte, the ninth bit is always set to logic 0. UART0 will recog-
nize as “valid” (i.e., capable of causing an interrupt)
two
types of addresses: (1) a
masked
address and (2) a
broadcast
address
at any given time
. Both are described below.
21.2.1. Configuration of a Masked Address
The UART0 address is configured via two SFR’s: SADDR0 (Serial Address) and SADEN0 (Serial Address Enable).
SADEN0 sets the bit mask for the address held in SADDR0: bits set to logic 1 in SADEN0 correspond to bits in
SADDR0 that are checked against the received address byte; bits set to logic 0 in SADEN0 correspond to “don’t
care” bits in SADDR0.
Setting the SM20 bit (SCON0.5) configures UART0 such that when a stop bit is received, UART0 will generate an
interrupt only if the ninth bit is logic 1 (RB80 = ‘1’) and the received data byte matches the UART0 slave address.
Following the received address interrupt, the slave will clear its SM20 bit to enable interrupts on the reception of the
following data byte(s). Once the entire message is received, the addressed slave resets its SM20 bit to ignore all trans-
missions until it receives the next address byte. While SM20 is logic 1, UART0 ignores all bytes that do not match the
UART0 address and include a ninth bit that is logic 1.
21.2.2. Broadcast Addressing
Multiple addresses can be assigned to a single slave and/or a single address can be assigned to multiple slaves,
thereby enabling "broadcast" transmissions to more than one slave simultaneously. The broadcast address is the logi-
cal OR of registers SADDR0 and SADEN0, and ‘0’s of the result are treated as “don’t cares”. Typically a broadcast
address of 0xFF (hexadecimal) is acknowledged by all slaves, assuming “don’t care” bits as ‘1’s. The master proces-
sor can be configured to receive all transmissions or a protocol can be implemented such that the master/slave role is
temporarily reversed to enable half-duplex transmission between the original master and slave(s)..
Note in the above examples 4, 5, and 6, each slave would recognize as “valid” an address of 0xFF as a broadcast
address. Also note that examples 4, 5, and 6 uses the same SADDR0 and SADEN0 register values as shown in the
examples 1, 2, and 3 respectively (slaves #1, 2, and 3). Thus, a master could address each slave device individually
using a masked address, and also broadcast to all three slave devices. For example, if a Master were to send an
Example 1, SLAVE #1
SADDR0
SADEN0
UART0 Address
Example 2, SLAVE #2
SADDR0
SADEN0
UART0 Address
Example 3, SLAVE #3
SADDR0
SADEN0
UART0 Address
= 00110101
= 00001111
= xxxx0101
= 00110101
= 11110011
= 0011xx01
= 00110101
= 11000000
= 00xxxxxx
Example 4, SLAVE #1
SADDR0
SADEN0
Broadcast Address = 00111111
Example 5, SLAVE #2
SADDR0
SADEN0
Broadcast Address = 11110111
Where all ZEROES in the Broadcast address are don’t cares.
Example 6, SLAVE #3
SADDR0
SADEN0
Broadcast Address = 11110101
= 00110101
= 00001111
= 00110101
= 11110011
= 00110101
= 11000000