Escolar Documentos
Profissional Documentos
Cultura Documentos
Interface Serial - Apostila PDF
Interface Serial - Apostila PDF
Ribeiro
INTERFACE SERIAL
A comunicao serial de dados tornou-se to popular, que um grupo de fabricantes e companhias
telefnicas, em meados de 1960, formaram a Associao de Indstrias Eletrnicas (EIA) para concordarem
sobre as formas padronizadas de se enviar e receber dados. O padro que se tornou mais usado chamado de
RS-232C.
As portas seriais geralmente utilizam conectores de 25 pinos ou conectores de 9 pinos, chamados de
conectores do tipo De muitas vezes referenciados como DB-9 ou DB25.
Uma porta serial transmite bits individuais um aps os outros sobre uma conexo simples (2 fios
basicamente). Devido a essa caracterstica a velocidade de transmisso, em relao a comunicao paralela,
se torna um incoveniente (baixa).
Dentro do micro os dados esto paralelos, estes so convertidos em serial (placa serial) e mandados
para fora do micro um aps o outro. No outro lado, na recepo, os dados so convertidos de serial (placa
serial) para paralelo (dentro do micro).
Geralmente neste tipo de padro usamos a transmisso padro (assncrona) mostrada abaixo:
MSB
LSB
Start Bit
5, 6, 7 ou 8 bits de dados
Bit de paridade
Observaes:
* Os dispositivos seriais se dividem em duas categorias: DCE (Data Communication Equipament)
que so os Modems entre outros dispositivos. E temos o DTE (Data Terminal Equipament) que so os
Terminais ou computadores;
* O padro de comunicao o RS232C, que especifica que o conector DTE deve ser do tipo macho,
e o conector DCE do tipo fmea. No passado usava-se muito o conector DB-25, porm hoje em dia usam-se
mais o DB-9.
As tenses so: # Lgica alta : -3V a -15V (com carga) e -25V (sem carga, no mximo)
# Lgica baixa : +3V a +15V (com carga) e +25V (sem carga, no mximo)
# A regio entre -3V e +3VC indefinida
# A corrente da porta no deve exceder os 500mA
Os sinais gerados no PC so de -12V para nvel lgico 1 e de +12V para nvel lgico 0.
SINAIS DO RS-232C
Abaixo nos temos seus pinos e seus respectivos nomes:
1
Conector de 25 Pinos
Conector de 9 Pinos
Abreviaao Nome
TD
Transmit Data
RD
Receive Data
RTS
Request To Send
CTS
Clear To Send
DSR
SG
Signal Ground
CD
Carrier Detect
20
DTR
22
RI
DTR (Data Terminal ready - Terminal esta pronto): um pino usado em controle de fluxo (handshaking).
o contrrio do pino DSR. um Sinal que indica que o terminal (micro/UART) est pronto para iniciar troca
de informaes. Este sinal tem comportamento anlogo ao sinal RTS, permanecendo em nvel 1 quando a
transmisso se d atravs de protocolos.
DCD (Data Carrie Detec - Deteco do transportador de dados): Sinal de deteco do sinal de portadora Linha telefnica esta ativa (carrier), no caso de ligao com MODEM (se no tiver o MODEM no h por
que usar este pino).
DSR (Data System Ready): usado em controle de fluxo (handshaking). Sinal que indica sistema
(modem/micro) esta pronto (micro ligado, etc). Geralmente ligado ao DTR do micro ou impressora.
GND ou SG: Sinal de terra (referncia) da transmisso
UMA COMUNICAO SIMPLES
Quando um perifrico somente transmite e outro somente recebe, a comunicao necessita apenas de
dois sinais em cada equipamento: O TXD e SG (3 e 5) no que transmite (ex.: micro) e de RXD e SG (2 e 5)
no que recebe os dados (ex.: modem).
COMUNICAO NAS DUAS DIREES
Se cada um dos dois equipamentos interligados podem transmitir e/ou receber dados, no mnimo
temos 3 linhas de cada: TXD, RXD e SG.
As vezes necessrio controlar o fluxo de dados na transmisso, para isto deve-se usar ento as
linhas DSR e DTR em cada equipamento. Se por acaso estas linhas de fluxo no forem suficiente,
deveremos usar ento mais duas linhas extras em cada equipamento: RTS e CTS. Neste modo para se ter
uma comunicao serial nos dois sentidos com 2 linhas de handshaking deveremos ter em cada equipamento
7 linhas de comunicao.
Quando estamos usando MODEM podemos ter ainda mais duas linhas extras: a RI e DCD que
indicam: modem chamando e modem esta pronto (respectivamente). Estas linhas no so muito utilizadas
hoje em dia.
Geralmente em projetos eletrnicos conectados ao micro temos apenas a comunicao simples nas
duas direes sem controle de fluxo, estes devem ser ligados nos respectivos pinos do prprio micro.
Para tais ligaes usamos um cabo chamado de Null modem, que visto abaixo:
3
Agora veremos os modelos de ligaes dos conectores dos micros. Em cada tipo, temos ligao de 3
fios ( 3-wire) ou full conection. A ligao 3-wire usada quando temos uma comunicao sem protocolo, ou
seja, o sinal transmitido diretamente sem que haja controle de erros e verificaes. A full conection para
uma comunicao mais complexa, onde temos o uso de protocolos de verificao de status e erros.
LIGAO DTE-DTE
Abaixo temos uma ligao a 3 fios (micro-mouse):
A principio temos os dois conectores do tipo fmea. No caso de uma ligao entre micro e mouse, o
conector da direita ligado ao micro (macho) e o da direita no existe pois interno ao mouse.
Abaixo temos a ligao full conection (micro-impressora):
A principio temos os dois conectores do tipo fmea. Eles so fmea pois nos DTEs o conector
macho.
LIGAO DTE-DCE
Abaixo temos a ligao a 3 fios:
Neste tipo temos conector femea(conector que liga no micro)-macho(conector que liga no modem).
Abaixo temos a ligao full conection:
Este desenho do conector pelo lado interno (dentro do conector; aqui que os fios sero soldados).
As ligaes vistas anteriormente servem tambm para conectores do tipo DB9 (macho ou fmea).
Neste caso a numerao vista anteriormente no ir bater, ento abaixo temos os desenho do conector DB9
com os respectivos nomes de cada pino, observando estes nomes voc poder fazer as ligaes anteriores
tranqilamente.
6 - DSR
7 - RTS
8 - CTS
9 - RI
6
Devemos lembrar novamente que este o lado de dentro do conector, onde os fios devero ser
ligados.
As vezes necessrio fazer a conexo entre conectores diferentes, exemplo um DB25 com um DB9,
abaixo temos uma figura ilustrando esta ligao:
UARTS
Numa comunicao serial usamos um CI especial que transforma os sinais paralelos de dentro do
computador numa seqncia de pulsos seriais. Este CI chamado de Universal Asynchronous
Receiver/Transmitter (Transmissor/Receptor Asscrono Universal), ou UART, este chip aceita 8 linhas de
dados paralela e possui uma sada serial.
Um CI muito utilizado no passado o 8250 (usado em XTs e alguns modems). Logo aps (com a
vinda do AT) foi lanado o UART 16450, uma verso melhorada do 8250, mas ainda compatvel com ele.
Depois veio o UART 16550, de alto desempenho.
Este chip dever ser configurado antes de qualquer transmisso ou recepo. Os elementos de
configurao que devem ser considerados so os seguintes:
TAXA DE TRANSMISSO: a velocidade de transmisso dos dados. Neste caso devemos
observar que os dois equipamentos devem estar com a mesma velocidade. Esta velocidade poder ser de:
110, 150, 300, 600, 1200, 2400, 4800, 9600. Em alguns casos poderemos ter velocidades maiores.
NMERO DE BITS DE DADOS: o nmero de bits que teremos num dado em questo. Este valor
pode ser de 5, 6, 7 ou 8 bits.
PARIDADE: O bit de paridade usado como um simples esquema de deteco de erro. Pode ser
mpar, par ou nenhuma, neste caso no gerado o bit de paridade.
7
STOP BIT: O stop bit poder ser configurado como 1, 1.5 ou 2 bits, sendo que na maioria das vezes
usa-se o 1 ou 2.
CONTROLE DE FLUXO (HANDSHAKING)
Para que a comunicao seja corretamente completada (sem erros) necessrio que os equipamentos
estejam na mesma velocidade, e com o mesmo tipo de protocolo de comunicao; caso contrrio dever
ocorrer algum erro de comunicao ou a comunicao no ser completada.
A soluo mais fcil usar um fio especial como linha de sincronizao, de modo que o sistema
receptor possa indicar que est pronto a receber os dados. Como este mtodo exige um hardware modificado
- fio de controle de fluxo - ele chamado de handshaking de hardware.
Alguns canais de comunicao no permitem o uso deste fio extra, exemplo a conexo telefnica.
Neste caso temos caracteres embutidos na transmisso de dados. Como estes caracteres de controle podem
ser acrescentados atravs de programao pelo sistema emissor, esse mtodo costuma ser chamado de
handshaking de software.
Na maioria dos esquemas de controle por soft, o sistema receptor usa dois caracteres diferentes para
sinalizar quando est pronto para receber dados e quando no pode mais aceitar dados, pelo menos
temporariamente (XON/XOFF)
Para que o controle por soft seja eficiente necessrio que os aplicativos possuam estes mtodos de
controle. Caso contrario devemos ter em mos alguns drivers especiais.
AS PORTAS SERIAIS
As portas seriais so ligaes existentes entre o computador e o mundo exterior. Geralmente no
micro temos duas portas seriais: COM1 e COM2. As portas so identificadas para os nossos softs atravs de
2 atributos: um endereo de hardware e uma linha de solicitao de interrupo (IRQ) atribuda porta. O
endereo a localizao onde ficar armazenado o contedo dos registros da UART. A IRQ a maneira de
conseguir a ateno do processador.
Os endereos para a COM1 e COM2 so padronizados.
Endereos das portas seriais:
PORTA
IRQ
ENDEREO
COM1
3F8h
COM2
2F8h
COM3
3E8
COM4
2E8
Abaixo temos um programa que retornar na tela as portas seriais que seu micro possui, bem como
seus respectivos endereos.
#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr; /* Pointer to location of Port Addresses */
unsigned int address;
/* Address of Port */
int a;
ptraddr=(unsigned int far *)0x00000400;
for (a = 0; a < 4; a++)
{
address = *ptraddr;
if (address == 0)
printf("Port no encontrado em COM%d \n",a+1);
else
printf("Endereo associado a COM%d o endereo %Xh\n",a+1);
*ptraddr++;
}
}
Bits de dados: Especifica o tamanho do byte a ser transmitido - 5,6, 7 ou 8 (mais usado 7 e 8)
Bits de parada (stop bit) : Especifica o nmero de stop bits da transmisso - 1 ou 2
Exemplo: C:\>MODE COM1:300,O,8,1
Neste caso estamos configurando a COM1 para 300 baud de velocidade, paridade mpar, com 8 bits a
palavra e 1 stop bit. Lembre-se que quando a velocidade de transmisso for alta, poderemos ter problemas de
sincronismo e a comunicao acaba no sendo efetuada, por isso de praxe que se coloque uma velocidade
menor de transmisso.
CONHECENDO OS REGISTRADORES SERIAIS
Abaixo temos uma tabale com os registrados que podem ser usados numa comunicao/controle
serial.
Endereo Bit DLAB Read/Write
Abr.
Nome do registrador
Write
Buffer de Transmisso
Read
Buffer de Recepo
Read/Write
Read/Write
IER
Read/Write
Read
IIR
Write
FCR
Base+3
Read/Write
Base+4
Read/Write
Base+5
Read
LSR
Base+6
Read
Base+7
Read/Write
Base
Base+1
Base+2
Scratch Register
10
Os registradores mais usados so o Base, Base+1, Base+3 e Base+5. O registrador Base usado para
Transmitir ou receber dados, o Base, o Base+1 e Base+3 usado para configurar a porta e o Base+5 o
status da porta, ou seja, nele que vou verificar se chegou dado ou no.
Para que se possa fazer um programa transmitir/receber, devemos primeiro configurar ambos
equipamentos para a mesma configurao. Caso um deles estejam com configurao errada, a comunicao
no ser feita. Configurar a porta ser ajustar a velocidade, no. de bits de dados, bit de paridade e quantida
de stop bit.
Abaixo, ento, temos a seqncia usada para fazer um programa de comunicao serial usando
liguagem C e outports (podemos usar outros mtodos, porm este acho o mais vivel).
Configurao da Porta: Deve-se configurar 4 itens:
Velocidade
Paridade
N de Bits da palavra de dado
N de Stop Bit
Para configurar a velocidade devemos primeiro setar o BIT 7 em 1 no registrador LCR. Este
registrador acessado pelo endereo base + 3. Por exemplo: Endereo Base = 3F8, ento para acessar o
LCR devemos fazer Base + 3 = 3F8 + 3 = 3FB.
Deveremos ento mandar para 3FB o dado 80h, isto ir setar em 1 o Bit 7 do 3FB. Vejamos:
80h = 1000 0000, pelo Debug faramos: - O 3FB,80. Isto ir idicar ao micro que agora iremos configurar
velocidade.
A velocidade dividida em dois registradores de 8 Bits (total de 16 Bits), sendo um chamado de
parte Baixa e outro chamado de parte Alta. A parte alta da velocidade dever ser colocada no endereo
base+1 e a parte baixa no endereo base. o Clculo da velocidade ser:
Tx =
115200
Baud
Sendo o Baud a velocidade a ser transmitida (1200, 2400, 4800, 9600, etc...)
Por exemplo:
Parte Baixa
115200
Tx =
= 12 001210 000C16
9600
Parte Alta
11
Deveremos ento mandar para 3F9h o valor 00h e para 3F8h o valor 0Ch, pelo Debug faramos:
- O 3FB,80
Divisor (Dec)
50
2304
09h
00h
300
384
01h
80h
600
192
00h
C0h
2400
48
00h
30h
4800
24
00h
18h
9600
12
00h
0Ch
19200
00h
06h
38400
00h
03h
57600
00h
02h
115200
00h
01h
Depois de configurado a velocidade, devemos configurar o resto. Para tanto usamos o endereo
Base+3, que o Registrado LCR, abaixo temos a descrio de cada bit deste registrador.
D7
D6
D5
D4
D3
D2
D1
D0
D0
00
5 Bits
6 Bits
12
7 Bits
8 Bits
1 Stop Bit
2 Stop Bit
Com a configurao definida, consigo montar a palavra que dever ser mandada para 3FB. Por
exemplo: Seja uma comunicao onde temos 6 Bits de dados, 2 stop Bit e paridade par. Desenhando de uma
forma melhor teremos:
D7
D6
D5
D4
D3
D2
D1
D0
1
6 Bits de dados
2 Stop Bit
Indica que no
vou configurar a
velocidade
Habilita a paridade
Na grande
maioria das
vezes ficam em
zero
(D5 e D6)
Transformando esta seqncia de Bits para hexa temos: 1Dh. Devemos ento mandar para 3FBh o
dado 1Dh. Pelo debug teramos:
- O 3FB,1D
Exemplo Completo: Configure a porta COM1 para uma velocidade de 1200 baud, com 8 Bits de
dados, 2 Stop Bit e sem paridade.
Tx =
115200
= 9610 = 11000002 = 006016
1200
D6
D5
D4
D3
D2
D1
D0
# include <dos.h>
void main()
{
outport(0x3fb,0x80);
outport(0x3f8,0x60);
outport(0x3f9,0x00);
outport(0x3fb,0x07);
}
Mandando um dado para a porta (Transmisso do dado): Basta colocar na porta o respectivo dado. Vamos
supor que voc queira mandar a letra A do micro 1 para o micro 2. Vejamos:
A = 41h, a porta COM1 possui endereo 3F8, ento:
Pelo debug seria:
- O 3F8, 41
Pela linguagem C seria:
# include <dos.h>
void main()
{
outport(0x3f8,0x41);
}
Recebendo um dado da porta (Recepo do dado): Para receber um dado basta dar um IMPORT no endereo
base (3F8) e guardar este dado numa varivel e depois exibir o dado. Veja que neste caso no estou
verificando o status da porta (endereo base + 5) e poder acontecer de lermos algum dado e este no ser
14
verdadeiro e sim lixo ! Ento antes de lermos no endereo base, deveremos primeiro ler o status da porta
(Base+5) e verificar se chegou algum dado, se for verdadeiro, que iremos ler o dado no endereo base,
caso for falso no poderemos ler.
Para acessar o registrador de status iremos usar o endereo base + 5, ou seja, 3F8 + 5, o que resulta
em 3fdh. A funo dos Bits mostrada abaixo:
D7
D6
D5
D4
D3
D2
D1
D0
Dado
recebido
1: Sim
0 : No
de
dados
(erro
de
paridade)
Erro de framing: O caracter recebido no tem
Stop Bit.
Sinal Break recebido: Os Bits recebidos so maiores dos
que selecionados
Buffer de transmisso vazio: O caracter j foi mandado e a UART j
pode mandar outro para transmisso
Registrador de converso Paralelo/Serial esta vazio e esta pronto para receber outro
dado interno para virar serial
Sempre dever estar em zero.
Na verdade o nico BIT que deveremos observar o Bit D0, pois indica se um dado foi recebido ou
no. Os outros so usados para controle de erros.
Podemos concluir que s deveremos ler um dado na porta base se antes verificarmos o BIT 0 do
endereo Base+5:
#include <dos.h>
#include <string.h>
int x, porta;
void main()
{
outport(0x3fb,0x80);
outport(0x3f8,0x60);
outport(0x3f9,0x00);
outport(0x3fb,0x07);
clrscr();
porta=0x3fd;
x=inport(porta);
printf("\n O valor recebido na porta %x e' de %x",porta,x);
getch();
}
Programa exemplo para configurao da porta e recebimento de dado na porta COM1:
#include <dos.h>
#include <string.h>
int x, porta;
void main()
{
outport(0x3fb,0x80);
outport(0x3f8,0x60);
outport(0x3f9,0x00);
outport(0x3fb,0x07);
clrscr();
porta=0x3f8;
x=inport(porta);
printf("\n O valor recebido na porta %x e' de %x",porta,x);
getch();
}
16