Você está na página 1de 51

Interfaces Seriais

Conteúdo

!
" #
!
! !
$ " % "
!
Como conectar equipamentos uns aos
outros?

"
& '
!!
( !
)
Interface
Paralela

Dados + controle

Equipamento 1 Equipamento 2
Interface
Paralela
Todos os bits de uma palavra são
transmitidos simultaneamente
Cada canal necessita de diversos fios

Vantagens: Desvantagens:
- Muitos fios > custo
- Maior velocidade. - Ruído, perda de
- Simplicidade sincronismo ®
das interfaces. Menores distâncias
Interface Serial

Dados
+
controle
Equipamento 1 Equipamento 2

Síncrona
Assíncrona
Isócrona
Tipos de Interfaces Seriais - 1
Síncrona

Transmissor e receptor utilizam o mesmo clock com


mesma freqüência e fase
Transferência de blocos
Cada bloco:
Caracteres de sincronismo
Dados
Checagem de erro
Pequeno overhead:
para cada bloco: + 3 bytes (2 sincronismo, 1 checksum)
ex.: bloco=1024 bytes + 3 bytes = 1027 bytes
0,3% de tempo extra !
Tipos de Interfaces Seriais - 2
Assíncrona

Clocks do transmissor e do receptor podem estar


ligeiramente diferentes
ressincronismo a cada byte
Transferência de bytes
Para cada byte mais 2 ou 3 bits:
start bit
bit de paridade
stop bits (1 a 2)
Grande overhead:
para cada byte + 3 bits = 11 bits
= 37,5% de tempo extra!
= < velocidade
Tipos de Interfaces Seriais - 3
Isócrona

Clock incluído ou incorporado ao dado


ressincronismo a cada pacote
Transferência de pacotes
Contínuo e sem checagem dos dados
Útil para aplicações de transferência de grande
quantidade de dados e sem precisão.
Ex: Vídeo conferência
Padrões de Comunicação Serial

(í í ó

(- / * *
(-1 * *
(-13 * *
2() * *
$$$-./01 * *
&+ *
( !, *
Padrões de Comunicação Serial

(í í ó

$, $ +$, *
( *
& *
(4# *
4 5( *
( !
Embora as interfaces seriais síncronas
sejam mais rápidas, as interfaces
seriais assíncronas são mais utilizadas.

Facilidade de implementação
Menor Custo
Atualmente alcança velocidades compatíveis
com as síncronas
Comunicação Serial
Assíncrona
Código:

Conjunto de regras pelas quais informações ou dados (ex:


números, letras) podem ser convertidos a uma
representação do código e vice-versa.
Para transmitir a informação através de uma interface é
necessário que ela esteja codificada de alguma forma.
A unidade mais básica de informação para nós é o bit, que
pode ter valores 0 ou 1. Toda informação utilizada pelos
computadores é codificada de alguma forma em
seqüências de bits.
Comunicação Serial Assíncrona

Código ASCII:

Abreviação de: American Standard Code for Information


Interchange.
Código universal para intercâmbio de informações,
concebido especialmente para utilização em transmissão,
recepção e processamento de dados.
ASCII para 7 bits: 27 = 128 caracteres podem ser
representados.
ASCII para 8 bits: 28 = 256 caracteres diferentes.
ex.: o código ASCII 0100 0001 = 65D = 41H representa o caractere "A" .
Comunicação Serial Assíncrona

Paridade:(1)

Bit acrescentado ao dado, destinado à detecção de


erros.
Paridade par: número par de bits no estado 1.
Paridade ímpar: número ímpar de bits no estado 1.
ex.: caractere "A”em ASCII de 7 bits: 1 0 0 0 0 0 1.
com paridade ímpar:
como tem-se 2 bits no estado 1, o bit de paridade também será 1,
de forma que no total tem-se 3 bits em 1 (ímpar).
bit de paridade: 1 1 0 0 0 0 0 1.
Comunicação Serial Assíncrona

Paridade:(2)

Ex.: dado com bit de paridade: 1 1 0 0 0 0 0 1.


vamos supor que por um erro de transmissão, um
dos bits 0 transformou-se em 1:
1 1 0 0 0 0 0 1 -------> 1 1 0 0 1 0 0 1.
ao verificar a paridade, o receptor perceberá que
há um número par de 1, e indicará que houve
algum erro na transmissão, e que esse byte é
inválido.
E se houver um número par de mudanças?
Comunicação Serial Assíncrona
Transmissão de um Caractere:
Ex.:
Transmissão do caractere A em ASCII com paridade ímpar e dois
stop bits:
1 1 0 0 0 0 0 1 = b7 b6 b5 b4 b3 b2 b1 b0

Start b0 b1 b2 b3 b4 b5 b6 b7 Stop Stop


Comunicação Serial Assíncrona
Transmissão de um Caractere:

Quando não há dados sendo transmitidos, a linha fica em nível


lógico 1.
Paridade: par, ímpar ou sem paridade.
Normalmente se usa 1 ou 2 stop bits. Estes devem garantir que
o receptor terá tempo de receber e armazenar o caractere,
antes de receber o próximo.
A quantidade de bits na informação transmitida também pode
variar: de 5 a 8 bits.
Obs: Transmissor e receptor devem ter as mesmas
configurações quanto a velocidade, tamanho da palavra,
paridade e número de stop bits!
Comunicação Serial Assíncrona
Transmissão de um Caractere:
O receptor reconhece a borda de descida do Start Bit e sincroniza seu clock.
Após 1 ciclo e meio começa a fazer a leitura dos demais bits a cada clock.
Se as freqüências do transmissor e do receptor estiverem perfeitamente
sincronizadas, as leituras serão efetuadas exatamente no meio de cada ciclo.
Tolerância a pequenas variações dos clocks de Tx e Rx.

Start b0 b1 b2 b3 b4 b5 b6 b7 Stop Stop

Sincroniza demais leituras


Comunicação Serial Assíncrona
Bit Rate:

É o número de bits por segundo


transmitidos através da interface serial.
Baud Rate:

É o número de transições (ou eventos) por


segundo.
Cada evento pode transmitir mais de 1 bit:
ex.: modems, onde a variação de fase da portadora poderia
representar dois ou mais bits.

Quando cada evento representa apenas 1 bit,


então o Bit Rate e o Baud Rate são iguais.
RS-XXX
Comunicação Serial Assíncrona

RS-232:
Padrão físico e elétrico.
Conector DB25 (no caso dos computadores PC, usa-se normalmente um DB9,
com os principais sinais).
6) 6)0 ç !
/ , 6 - ,*6
/ 7 6 - *6
1 8 9 ( - ,(
3 &! ( - 6,(
6 ( 5- 6(
8 ( : !; - ;+6
3 . 6 & 6 - 6&6
. , &! - ,*&
.8 7 &! - *&
1 6 , ! 5- 6,
1 <! 5&!
0 : -
Comunicação Serial Assíncrona

RS-232
Null Modems: Conector simplificado, usado para transferência de dados
Hyperterminal do Windows: permite desabilitar sinais de controle de fluxo.
Comunicação Serial Assíncrona
RS-232:
Padrão físico e elétrico
Opera com tensões referenciadas ao terra.
Nível lógico 0 : tensão entre +3 e +15V
Nível lógico 1: tensão entre - 3 e - 15V
Faixas de tensão
inválido
+ 15V
nível lógico
0
+3V
0V inválido
- 3V
nível lógico
1
- 15V
inválido
Valores típicos: + 12V e - 12V
Comunicação Serial Assíncrona
RS-232:
"Single ended": sinal referenciado à terra

Tx
Rx
Terra = 0 V

Problemas:
Quedas de tensão ao longo do fio
Susceptível a ruídos e diferenças de potencial de terras
Limite de distância +/- 15m (depende da taxa e qualidade do cabo)
Taxa máxima: 20Kbps
Comunicação Serial Assíncrona
RS-422:
"Differencial Voltage Pairs": Sinal Diferencial

Tx + Va - Vb < - 0.2V = 0
Tx - Va - Vb > +0,2V = 1

par trançado
Vantagens:
Mais imune a cross-talk
Mais resistente a quedas de tensão
Limite de distância: +/- 1200m (depende da taxa e cabo)
Taxa máxima: 10Mbps
Não define conector
Comunicação Serial Assíncrona
RS-485:
Semelhante ao RS-422, mas com drivers tri-state:
Permite topologias de redes multiponto.
Rede do tipo “mestre-escravo”.
Até 64 dispositivos.

Componentes para RS 422 e RS 485:


Am26LS32 – driver.
Am26LS32 – receiver.
MAX 481 / 483 / 485 / 487 / 1487 - transceivers.
Comunicação Serial Assíncrona
RS-485:
Exemplo de topologia de rede com RS 485

Mestre
End. 0

Tx Rx

Tx Rx Tx Rx

Escravos End. 1 End. n - 1


Comunicação Serial Assíncrona
RS-485:
Filosofia Mestre-Escravo:
1 mestre, n - 1 escravos, cada um com o seu endereço.
Mestre: toma a iniciativa da comunicação.
Escravos: só respondem às mensagens a eles endereçadas.
TxD do mestre: Chega a todos RxD dos escravos.
TxD dos escravos:
Em alta impedância, quando um escravo for responder,
conecta seu transmissor.
Mestre: fica ciclicamente interrogando um por um os escravos,
que respondem com seus dados, se possuírem.
Boa solução para sistemas com poucos dispositivos, baixo
tráfego ou onde a velocidade não for crítica.
Comunicação Serial Assíncrona
UART:
Universal Asynchronous Receiver / Transmiter.
Conversão paralela / serial.
Inserção / retirada automática do Start-bit e Parity bit.
Velocidades programáveis.
Interrupções para transmissão / recepção.
Indicação de erros.

Exemplos:
8251 e 82C51, da Intel.
16550 (usado nos PCs).
Comunicação Serial – 80C51
UART interna:

Muitos microcontroladores possuem UARTs internas, como o


80C51.
Existem modelos de 80C51 com duas UARTs, como o DS80C320 da
DALLAS.

UART do 80C51:
Pode-se facilmente escrever ou ler dados via interface serial.

Realiza todo o processo de serialização, adição de start bits e stop bit.

Permite transferência via interrupções ou “wait for flag”.


Estrutura da UART do 80C51
Comunicação Serial – 80C51

Usando a UART:
São necessários os seguintes passos para configurar
corretamente a UART interna do 80C51:
Definir a taxa de comunicação.

Definir a origem do clock de comunicação.

Programar o canal serial.

Habilitar / desabilitar interrupções, caso se deseje (a técnica de “wait for


flag” também pode ser utilizada).
Comunicação Serial – 80C51

Usando a UART:
Modos de Operação:
Modo 0: Shift Register de 8 bits

dado: RXD

clock: TXD = 1/12 clock do 80C51(fixo)


Comunicação Serial – 80C51

Usando a UART:
Modos de Operação:
Modo 1: UART de 8 bits com taxa de comunicação variável.

dado: TXD e RXD.

clock: ajustável através do Timer 1 (não pode ser o Timer 0).

10 bits: 1 start bit, 8 bits de dado, 1 stop bit.

paridade: opcional, por software.


Comunicação Serial – 80C51

Usando a UART:
Modos de Operação:
Modo 2: UART de 9 bits com taxa de comunicação fixa.

dado: TXD e RXD.

clock: 1/32 ou 1/64 clock do 80C51 (fixo).

11 bits: 1 start bit, 8 bits de dado, 9o. bit programável, 1 stop bit.

paridade: opcional, por software.


Comunicação Serial – 80C51
Usando a UART:
Modos de Operação:
Modo 3: UART de 9 bits com taxa de comunicação variável.

dado: TXD e RXD.

clock: ajustável através do Timer 1 (não pode ser o Timer 0).

11 bits: 1 start bit, 8 bits de dado, 9o. bit programável, 1 stop bit.

paridade: opcional, por software.


Comunicação Serial – 80C51
Usando a UART:
Modos de Operação:
Modo 2 e Modo 3: permitem comunicação multiprocessadores.
1 mestre, n escravos, cada um com seu endereço.
9o. bit: =1 indica que a mensagem do mestre é de endereço (todos a
examinam, e o escravo selecionado passa a pegar as mensagens
seguintes de dados, com o 9o. bit = 0; os demais as ignoram, até o
9o. bit voltar a ser 1).
o escravo pode também transmitir mensagens ao mestre, após
estabelecida a conexão, mas para tanto não deve setar o 9o. bit.
Comunicação Serial – 80C51
Usando a UART:
Programar o Timer1 para gerar o "Baud Rate“ (Modo 1 e Modo 3).
Comunicação Serial – 80C51
Programando o Timer
Timer1 no modo 2 (auto-reload)
Cálculo:
Baud Rate = k x FreqOsc
32 x 12 x [256 - (TH1)]

se SMOD = 0, k=1 SMOD = bit 7 de PCON


se SMOD = 1, k=2

Ou seja:
se SMOD = 0 TH1 = 256 - ((FreqOsc / 384) / Baud)
se SMOD = 1 TH1 = 256 - ((FreqOsc / 192) / Baud)
Comunicação Serial – 80C51
Programando o Timer - exemplo:
Ex.: cristal de 11.0592 Mhz e deseja-se 19200bps.
Supondo SMOD = 0.
TH1 = 256 - ((11059000 / 384) / 19200)
TH1 = 256 - 1,5 = 254.5.
Impossível! Se usarmos para 254 teremos 14.400bps, se
setarmos para 255 teremos 28.800bps! O que fazer?
Basta mudar SMOD para 1.
TH1 = 256 - ((11059000 / 192) / 19200)
TH1 = 256 - 3 = 253.
Comunicação Serial – 80C51
Programando o Timer:
Timer/Counter mode:
TMOD (89h) – bit endereçável
7------T1------4 | 3-----T0--------0

Gate C/T M1 M0
1 0 (modo 2)
contador out timer

TH1 (8Dh) = valor de recarga em TL1

TCON (88h) – byte endereçável

---T1---|---T0----|---T1----|---T0----

TF1 TR1TF0 TR0 IE1 IT1 IE0 IT0


TF = overflow
TR = liga /desliga
IE = habilitação de interrupção

Timer 1: sem interrupção: 0100 xxxx


Comunicação Serial – 80C51
Programando o Canal Serial:
Modo Serial:
SCON (98h) – bit endereçável.
7--------------------------------------0

SM0 SM1 SM2 REN TB8 RB8 TI RI


0 1 0 1

modo enable receive interrupt flags


serial reception transmite interrupt flags
(devem ser limpos por software).

SM0 e SM1 definem o modo


0 0 modo 0 = 8 bit Shift Register = Oscillator / 12
0 1 modo 1 = 8 bit UART = Baud Rate set by Timer 1
1 0 modo 2 = 9 bit UART = Oscillator / 32
1 1 modo 3 = 9 bit UART = Set by Timer 1.

SM2 = flag para "Multiprocessor comunication". Caso esteja setada, RI somente será setado caso o
nono bit recebido seja 1. Nos usos mais comuns, SM2 = 0.

REN = deve estar setado para que a recepção seja habilitada.


Comunicação Serial – 80C51
Programando o Canal Serial:
Modo Serial – continuação:
SCON (98h) – bit endereçável.
7--------------------------------------0

SM0 SM1 SM2 REN TB8 RB8 TI RI


0 1 0 1
modo enable receive interrupt flags
serial reception transmite interrupt flags
(devem ser limpos por software).
TB8 é usado nos modos 2 e 3. O nono bit a ser transmitido é o nele contido.
RB8: idem a TB8 para recepção. O nono bit recebido será nele armazenado.
TI: Transmit Interrupt
Quando TI está setado, o programa pode assumir que a porta serial está pronta para
transmitir o próximo byte.
RI: Receive Interrupt
Sempre que o 80C51 receber um byte completo, RI será setado, informando ao
software que o byte precisa ser lido, antes que seja recebido um novo valor.
Comunicação Serial – 80C51
Programando o Canal Serial:
Modo Serial – continuação:
PCON (87h) – byte endereçável
7--------------------------------------0

SM0D X X X X X X X
SMOD = 0: Modo 2: divide clock do 80C51 por 64
SMOD = 0: Modos 1 e 3: divide saída Timer 1 por 32

SMOD = 1: Modo 2: divide clock do 80C51 por 32


SMOD = 1: Modos 1 e 3: divide saída Timer 1 por 16
Comunicação Serial – 80C51
Programando o Canal Serial:
Interrupções.
IE (A8h) – bit endereçável.
7----------------4----------------------0
.

EA ES ET1 EX1 ET0 EX0

Por que usar interrupções?


Qual a alternativa? Um esquema do tipo: wait for flag, onde o
programa fica em loop perguntando ao dispositivo: "- Já recebeu
dado?“, ou “- Acabou de transmitir o último dado?”
No caso do wait for flag, o tempo de processamento gasto no pooling
dos dispositivos é considerável: poderia ser usado no caso de
programas pequenos e simples.
As interrupções são uma maneira mais simples e limpa de fazer o
mesmo serviço...
Comunicação Serial – 80C51
Programando o Canal Serial:
Lendo e enviando dados:
Os dados devem ser lidos ou escritos em SBUF (99h), por
exemplo, se quisermos escrever o caractere "A" na porta
serial, isso pode ser feito como a seguir:
MOV SBUF,#'A' ou MOV SBUF, #41H
Comunicação Serial – 80C51
Programando o Canal Serial:
Exemplo de configuração sem interrupção:

; inicializacoes.
MOV TMOD,#00100000B ; Timer 1 no modo 2
MOV TH1,#0FDH ; configura para 9600bps
MOV TCON,#01000000B ; Ativa Timer 1
MOV PCON,#00000000B ; SMOD recebe 0 (Timer 1/32)
MOV SCON,#01000000B ; canal serial no modo 1
MOV IE,#00000000B ; desabilita interrupções
Comunicação Serial – 80C51
Usando o Canal Serial com “wait for flag”:
Envio de caracteres - rotina CO (character output):

CO: JNB TI,$ ; lê estado TI da serial


CLR TI ; Se TI OK, limpa TI
MOV SBUF,B ; escreve dado
JNB TI,$ ; espera sua transmissao
RET

Recebimento de caracteres - CI (character input):

CI: JNB RI,$ ; lê estado RI da serial


CLR RI ; Se RI OK dado está presente,
; limpa RI
MOV B,SBUF ; lê dado
RET
Comunicação Serial – 80C51
Usando o Canal Serial com “wait for flag”:
Exemplo de rotina para imprimir uma mensagem (da ROM para
a serial):

PRINT: MOV A,#00h


MOVC A,@A+DPTR
JZ PFIM
MOV B,A
ACALL CO
INC DPTR
SJMP PRINT
PFIM: RET
Usando o Canal Serial com interrupções
Recebimento de caracteres
MOV TMOD,#00100000B ; Timer 1 no modo 2
MOV TH1,#0FDH ; configura para 9600bps
MOV TCON,#01000000B ; Ativa Timer 1
MOV PCON,#00000000B ; SMOD recebe 0 (Timer 1/32)
MOV SCON,#01010000B ; canal serial no modo 1, com interrupção
MOV DPTR,#9000H ; ponteiro para dado recebido
MOV IE,#10010000B ; habilita interrupções
CLR C ; limpa carry
JNC $ ; aguarda fim de string
LJMP 0000H ; volta ao Programa Monitor...
CIINT: JNB RI, FIM2 ; se for interrupção de transmissão,
MOV A, SBUF ; lê dado
MOVX @DPTR, A ; caso contrário armazena-o
INC DPTR ; incrementa ponteiro de dados
FIM1: CLR RI ; limpa RI=pedido interrupção de recepção
FIM2: CLR TI ; limpa TI=pedido interrupção de transmissão
RETI
FIM3: SETB C ; indica fim de string
AJMP FIM1

Você também pode gostar