SPONSORED LINKS
 
Google
 
SERIAL INTERFACE
 SERIAL INTERFACE

Once of the 8051's many powerful features is its integrated DART, known as a serial port. The essential operation of a DART is to perform parallel to-serial conversion for output data, and serial-to parallel conversion for input data. The fact that the 8051 has an integrated serial port means that one may very easily read and write values to the serial port. If it were not for the integrated serial port, writing a byte to a serial line would be a rather tedious process requiring turning on and off one of the I/O lines in rapid succession to properly "clock out" each individual bit, including start bits, stop bits, and party bits.

However, we do not have to do this. Instead, we simply need to configure the serial port's operation mode and baud rate. Once configured, all we have to do is write to an SFR (SBUF) to write a value to the serial port or read the same SFR to read a value from the serial port. Register SCON controls data communication, register PCON controls data rates, and pins RXD and TXD connect to the serial data network. The 8051 will automatically let us know when it has finished sending the character we wrote and will also let us know whenever it has received a byte so that we can process it. We do not have to worry about transmission at the bit level which saves quite a bit of coding and processing time.

SETTING THE SERIAL PORT MODE
The first things we must do when using the 8051's integrated serial port is configure it. This lets us tell the 8051 how many data bits we want, the baud rate we will be using, and how the baud rate will be determined.

the "Serial Port Control" (SCON) and "PowerControl" SFRs. Are:
Bit Name Bit Address Explanation of Function
7 SM0 9Fh  Serial port mode bit 0
6 SM1 9Eh  Serial port mode bit 1.
5 SM2  9Dh Multiprocessor Communications enable
4 REN  9Ch Receiver Enable. This bit must be set in order to receive characters.
3 TB8  9Bh Transmit bit 8. The 9th bit to transmit in mode 2 and 3.
2 RB8  9Ah Receive bit 8. The 9th bit received in mode 2 and 3.
1 TI  99h Transmit Flag. Set when a byte has been completely transmitted.
0 RI  98h Receive flag. Set when a byte has been completely received.

The functions of SM0 and SM1 is given in the following table:

SM0 SM1 Serial Mdoe Explanation Baud rate
0 0 0 8-bit shift Register Oscillator /12
0 1 1 8-bit UART Set by Timer 1(*)
1 0 2 9-bit UART Oscillator /32 (*)
1 1 3 9-bit UART Set by Timer 1 (*)

(*) Note: The baud rate indicated in this table is doubled if PCON.7 (SMOD) is set.

Bit Name Explanation of Function
7 SM0D Serial baud rate modify bit. (Double Baud rate bit)
6 - Not implemented
5 - Not implemented
4 - Not implemented
3 GF1 General purpose user flag bit 1.
2 GF0 General purpose user flag bit 0.
1 PD Power down bit.
0 IDL Idle mode bit.

The SCON SFR allows us to configure the Serial Port. The functionality of each bit is given as follows.

The first four bits (bits 4 through 7) are configuration bits.

Bits SM0 and SM1 let us set the serial mode to a value between 0 and 3, inclusive. The four modes are defined in the table immediately above. As one can see, selecting the Serial Mode selects the mode of operation (8-bit/9-bit, DART or Shift Register) and also determines how the baud rate will be calculated. In modes 0 and 2 the baud rate is fixed based on the oscillator's frequency. In modes 1 and 3 the baud rate is variable based on how often Timer 1 overflows.

The next bit, SM2, is a flag for "Multiprocessor communication." Generally, whenever a byte has been received the 8051 will set the "RI" (Receive Interrupt) flag. This lets the program know that a byte has been received and that it needs to be processed. However, when SM2 is set the "RI" flag will only be triggered if the 9th bit received was a "I". That is to say, ifSM2 is set and a byte is received whose 9th bit is clear, the RI flag will never be set. This can be useful in certain advanced serial applications. Normally 9th bit is kept clear so that the flag is set upon reception of any character.

The next bit, REN, is "Receiver Enable." This bit is very straightforward: If one want to receive data via the serial port, this bit must be set.

The last four bits (bits 0 through 3) are operational bits. They are used when actually sending and receiving data, they are not used to configure the serial port.

The TB8 bit is used in modes 2 and 3. In modes 2 and 3, a total of nine data bits are transmitted. The first 8 data bits are the 8 bits of the main value, and the ninth bit is taken from TB8 is set and a value is written to the serial port, the data's bits will be written to the serial line followed by a "set" ninth bit. IfTB8 is clear the ninth bit will be "clear."

The RB8 also operates in modes 2 and 3 and functions essentially the same way as TB8, but on the reception side. When a byte is received in modes 2or 3, a total of nine bits are received. In this case, the first eight bits received are the data of the serial byte received and the value of the ninth bit received will be placed in RB8.

TI means "Transmit Interrupt." When a program writes a value to the serial port, a certain amount of time will pass before the individual bits of the byte are "clocked out" the serial port. If the program write another byte to the serial port before the first byte was completely output, the data being sent would be corrupted. Thus, the 8051 let the program know that it has "clocked out" the last byte by setting the TI bit. When the TI bit is set, the program may assume that the serial port is "free" and ready to send the next byte.

Finally, the RI bit means "Receive Interrupt." It functions similarly to the "TI" bit, but it indicates that a byte has been received. That is to say, whenever the 8051 has received a complete byte it will trigger the RI bit to let the program know that it needs to read the value quickly, before another byte is read.

SETTING THE SERIAL PORT BAUD RATE
The serial port baud rate depends upon oscillator frequency and timer 1 overflow. Once the serial Port mode has been configured, the program must configure the serial port's baud rate. This only applies to Serial Port modes_1 and 3.

The Baud Rate is determined based on the oscillator's frequency when in mode 0 and 2.

In mode 0, the baud rate is always the oscillator frequency divided by 12. This means if crystal is 11.059Mhz, mode 0 baud rate will always be 921,583 baud. 

In mode 2 the baud rate is always the oscillator frequency divided by 64, so an 11.059
Mhz crystal speed will yield a baud rate of 172,797.

In modes 1 and 3, the baud rate is determined by how frequently timer 1 overflows. The more frequently timer 1 overflows, the higher the baud rate. There are many ways one can cause timer 1 to overflow at a rate that determines a baud rate, but the most common method is to put timer 1 in 8-bit auto-reload mode (timer mode 2) and set a reload value (TH1) that causes Timer 1 to overflow at a frequency appropriate to generate a baud rate.

To determine the value that must be placed in TH1 to generate a given baud rate, we may use the following equation (assuming PCON.7 is clear).

            TH1 = 256-((Crystal / 384) I Baud)
If PCON.7 is set then the baud rate is effectively doubled, thus the equation becomes:
            TH1 = 256- ((Crystal / 192) / Baud)
For example, if we have an 11.059Mhz crystal and we want to configure the serial port to 19,200 baud we try plugging it in the first equation:
           TH1 = 256-((Crystal / 384) / Baud)
           TH1 = 256-((11059000/384) / 19200)
           TH1 = 256-((28,799) /19200)
           TH1 = 256-1.5 = 254.5
As one can see, to obtain 19,200 baud on an 11.059Mhzcrystal we'd have to set TH1 to 254.5. If we set it to 254 we will have achieved 14,400 baud and if we set it to 255 we will have achieved 28,800 baud. To achieve 19,200 baud we simply need to set PCON.7 (SMOD). When we do this we double the baud rate and utilize the second equation mentioned above. Thus we have:

            TH1 = 256-((Crystal / 192) / Baud)
            TH1 = 256-((11059000/192) / 19200)
            TH1 = 256-((57699) /19200)
           TH1 = 256-3 = 253
Here we are able to calculate even TH1 value. Therefore, to obtain 19,200 baud with an
1l.059MHz crystal we must:

1. Configure Serial Port mode 1 or 3.
2. Configure Timer 1 to timer mode 2 (8-bit auto-reload).
3. Set TH1 to 253 to reflect the correct frequency for 19,200 baud.
4. Set PCON.7 (SMOD) to double the baud rate.

WRITING TO THE SERIAL PORT
Once the Serial Port has been properly configured, the serial port is ready to be used to send data and receive data.

To write a byte to the serial port one must simply write the value to the SBUF (99h) SFR. For example, if one wanted to send the letter "A" to the serial port, it could be accomplished as easily as:

MOV SBUF, #'A'
Upon execution of the above instruction the 8051 will begin transmitting the character via the serial port. Obviously transmission is not instantaneous, it takes a measurable amount of time to transmit. And since the 8051 do not have a serial output buffer we need to be sure that a character is completely transmitted before we try to transmit the next character.

The 8051 let us know when it is done transmitting a character by setting the TI bit in
SCON. When this bit is set we know that the last character has been transmitted and that we may send the next character, if any.
Consider the following example:
CLR TI; be sure the bit is initially clear
MOV SBUF, # 'A'; Send the letter 'A' to the serial port
JNB TI, $; Pause until the TI bit is set.
The above three instructions will successfully transmit a character and wait for the TI bit to be set before continuing. The last instruction says "Jump if the TI bit is not set to $, in most assemblers, '$' means "the same address of the current instruction." Thus the 8051 will pause on the JNB instruction until the TI bit is set by the 8051 upon successful transmission of the character.

NOTE: In serial interface baud rate is fixed in modes 0 & 2, variable in modes 1 & 3 while data bits are eight in mode 1, nine in modes 2 & 3 respectively.

BACK

SPONSORED LINKS