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: - Maior velocidade. - Simplicidade das interfaces. Desvantagens: - Muitos fios > custo - Ruído, perda de sincronismo 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 s sejam mais rápidas, r 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
Código: Comunicação Serial Assíncrona 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: 2 7 = 128 caracteres podem ser representados. ASCII para 8 bits: 2 8 = 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: Baud Rate: É o número de bits por segundo transmitidos através s da interface serial. É 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 / 76- *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 0 +3V 0V - 3V 1-15V Valores típicos: + 12V e - 12V nível lógico inválido nível lógico inválido
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 Vantagens: par trançado 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 serial reception receive interrupt flags 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 serial reception receive interrupt flags 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