Chip Directory
Mirror sites
Mailing list
Have this site translated
 Datasheet Archive
 Embedded Systems
Host site

About UART's and selecting one for a project.

Go to the UART Overview

UARTs (Universal Asynchronous Receiver Transmitters) or SIO*'s (Serial Input Output) or ACIA*'s (Asynchronous Communication Interface Adapters) are used to send data serially over one single line per direction.

The protocol that is used is simple:

There is also a synchronous protocol and many UART's can handle this too, but it is seldomly used since it requires both sides to have synchronized clocks.

UART's are generally used with RS-232 hardware which converts the 5V to -12V and the 0V to +12V and vice-versa. If -12V and +12V is available in a system, then an 1488 and 1489 are generally used as driver and receiver.
Otherwise the MAX232 is a good solution because it generates it's own -12V and +12V from 0 and 5V and because it integrates both driver and receiver.

Early UART's like General Instruments' AY5-1013A used to be stand-alone devices which could be used in processorless printers for example. Later UART's had a processor interface which means that the processor can instruct the UART what to do by filling memory-like registers with commands and settings.

Other (mainly compatible) stand-alone UART's are:
AMI S1883
GI AY3-1015, AY5-1013
Philips/Signetics 2536
SMC COM2017, COM2502, COM8017, COM8502
TI TMS6011
WD TR1402, TR1602

If you need a UART for some project the 16450, 16550, 2661, 2681, 2698, 6551(?), 6850, 68661(?), 68681, 8250(+), 8251 or Z8530 are likely candidates. Each with their own pro's and con's.

The main design choices are, I guess:

Most controllers today already contain one UART and sometimes two. If you need an external UART, you will likely choose a UART with an internal Baudrate* generator unless you will use it for Midi* for example which always operates at the same Baudrate* (32 kbps (?)).

In some UART's you can choose from a preprogrammed range of external clock to Baudrate* divisors, which forces you to supply the correct external clock rate. More universal UART's let you program the divisor from 1 to 64k, with sometimes even an added predivisor with a factor of 1, 4, 16 or 64.

If you need a single UART, have a look at the 8250(+), which was used in the PC, so can easily be found second hand at PC-fairs etc. (Just buy a cheap PC-com-board with one on it. When you want a dual* UART have a look at the 'industry standard' Z8530. If you need a lot of UART channels, try the 2698 Octal* UART, which contains four 2681 Dual* UART's or the very recent OX10864 from Oxford Semiconductor.

Some relevant abbreviations:
ACIA* Asynchronous Communications Interface Adapter (=UART)
DART* Dual* Asynchronous Receiver Transmitter (=2*UART)
DUART* Dual* Universal Asynchronous Receiver Transmitter (=2*UART)
MUART* Multifunctions Universal Asynchronous Receiver Transmitter
SIO* Serial Input Output (=UART)
UART Universal Asynchronous Receiver Transmitter
USART* Universal Synchronous/Asynchronous Receiver/Transmitter

Latest developments

Date:    19951214
From:    Ulf Samuelsson
Subject: New UART

NSC is releasing a new UART for Infrared communication.
This is the PC87108.
It is upwards compatible with the NS16550 UART but will allow higher speed
than the typical 115kbps available with the NS16550.

Best Regards
Ulf Samuelsson
IRaD (?) is (also) claiming to do 1 Mb/s and 4 Mb/s.

UART's on the net FAQ* about the serial port by Christian Blum, very thorough! MS-Windows COM and NS16550A UART FAQ*
Date:    19960306
From:    yishai kagan
Subject: Startech

If you look at the Exar ( page, you will find some great
UARTs made by Startech: 16C654, 68C654

Serial interface with serial interface from Maxim!

Maxim will be releasing a new UART this quarter called the max-3100. It is in a 14 pin package, the smallest, and supports irda, 230 kbaud and has a low power shutdown and wake.
It will be out by january and you'll see it on our website.
The biggest difference with it is that it interfaces with the host system with an SPI like serial interface vs a parallel interface.
Its kind of hard to explain to people what a serial interfaced serial interface is.
It should be useful for PIC systems, multiple UARTs or UARTs in small systems that want fast operation and low power like 8051 systems.
I'm writing some code now to connect one to a tms-320c050 dsp*, since these don't have a UART.
An insider from Maxim.

More news from Maxim

Another new product we have out is the MAX3221- this is a 1 TX/1RX MAX-232 type device that is very small (SSOP-16, size of an SO-8). It runs on very low current and shuts itself down automatically when nothing is connected to it. We also offer this "autoshutdown" feature in 2TX,2RX & 3/5, 5/3 and other counts. The 3221 is the smallest though and maybe just right for a microcontroller guy.
An insider from Maxim.

The newest and fastest PC UART

This is a 2-channel UART with the fastest data rate available (3Mbps) the deepest FIFOs (128-byte) and many programmable features. - Please see our web site for more details: - - Look under ASSPs and there is a product guide and data sheets
Please see our web site for more details:
Look under ASSPs and there is a product guide and data sheets
James Lewis <>

Date:    19970618
From:    James Lewis <>
Subject: UARTs

Please take a look at Oxford Semiconductor's revised web pages. We now
offer the world's fastest 8-channel UART (OX10864) and the world's
fastest PC compatible 2-channel UART (OX16C952).

Full information is on our web site at:

Marketing Director
Oxford Semiconductor Ltd        Tel:    +44 (0)1235 861461
68 Milton Park                  Fax:    +44 (0)1235 821141
Oxfordshire OX14 4RX            E-mail:
United Kingdom        

Date:    20000223
From:    Jaap van Ganswijk []
To:      Ewen Dave
Subject: Re: Chip Question

On 20000223 Ewen Dave wrote:

Would you happen to know if there is a way to tell when a 16550-compatible UART is ready to accept one more TX character? I am looking at the 16550 status bits and it seems you can tell that the TX fifo is empty but there is no way to tell when it is full. This seems strange to me.

You seem to be right. I just checked the datasheet again. Was some years ago that I programmed for it and that was mostly before the FIFO* was commonly present in PC's...

It seems to be that the philosophy is that you only get an interrupt when the write FIFO* is completely empty. Then you can fill it guaranteed with 16 (or in later versions 64) bytes so you don't have to poll during filling it, which makes the driver a lot more efficient.

This philosophy is different from the philosophy used in the case of the receiving FIFO*, in the case of receiving it may be that during the interrupt routine is started more bytes may have to be put in the receiver FIFO*. Therefore it's possible to set a level of fullness at which an interrupt is generated.

The same principe with a threshold might also been used in the case of the transmit FIFO*, but it's not necessary as with the receiving FIFO*, since output can generally wait... So they choose between using the threshold system (which might give a slightly higher throughput) or the easy of always being able to put 16 bytes in the FIFO* once an interrupt occurs (which saves a lot of cycles in the interrupt routine).

When you're using the UART polled, it seems a bit silly, but on the other hand: Serious applications only use the UART in interruption mode... A polling CPU* is always fast enough to fill the transmit register anyway and doesn't really need a FIFO*. Condider also that there is already a buffer for the transmitter: While one byte is being shifted out, you can already fill the transmitter holding register. Even at 115k bps* you have about 100 us to do this, which is a long time in MCU* terms when it's polling.

From: Jaap van Ganswijk

On 20000224 Ewen Dave wrote:

Thank you for the response. I guess it is as you say -- everyone uses interrupts. I just don't see as much need for TX interrupts as I do for RX interrupts.

You're right. When I was porting my software on a new embedded platform I would do it in the following order:

The reason for doing the output on interrupt basis also can for example be that it will not tie up the foreground process, which may be needed for other processes. However once the software UART output buffer is full, it will slow down the foreground anyway since it will start polling the output buffer for available space...

See also Elan has released a single UART with a PCMCIA interface

Tip from Beverly Wade of InnovASIC (on 20010227):

Here's an InnovASIC UART product to add to your list:
Part Number = IA82510
Part Name = Asynchronous Serial Controller
Description: UART for modem* and serial port communications, 288K Baud* Rate, Error Detector, MCS-51 Protocol Support(Compatible with Intel 82510)

SY6551 and CDP65C51

Someone asked me for a replacement for the SY6551 and I suggested to him to use the CDP65C51 which Farnell still seemed to sell. I turns out that the CDP65C51 is not always compatible and that it also no longer produced by Intersil since 200109. By the way, if you click on 'Order: Chips' at the bottom of this page, you can check if these parts are still available on the obsolete chips market. At the moment (200205) both chips are still available. The SY6551 in the hundreds and the CDP65C51 in the thousands.

Ad for PCI video capturing boards by Dektec.
Goto: Main Mirror About Author
Register: Yourself Company
Feedback: Correction Addition Question
Request quote: Chips (Deutsch) Chips (English) Chips (Nederlands)

Advertisement by Adprov

Viewable with any browser

page modified: 20030727
page compiled: 20080306
site compiled:  Version GIF
(external) links checked: 20030727