EXPERIÊNCIA 6:
COMUNICAÇÃO SERIAL
Prof. Dr. André Riyuiti Hirakawa e Prof. Dr. Paulo Sérgio Cugnasca
Versão 11/2014
1. OBJETIVO
Esta experiência visa à familiarização com o recurso de comunicação serial disponível no 80C51, envolvendo as configurações permitidas e respectivas aplicações.
2. SUBSÍDIOS
Os conceitos básicos associados à transmissão e recepção serial foram amplamente discutidos e treinados em experiências de laboratório das disciplinas “Laboratório Digital I e II”. [10] [11]
Os itens seguintes resumem os principais recursos de comunicação serial disponíveis no 80C51.
2.1. Comunicação Serial
A interligação de dois sistemas digitais pode ser realizada basicamente de duas formas, paralela ou serial. No caso da interligação paralela, como o próprio nome sugere, os dois sistemas são conectados fisicamente através de fios conectados em paralelo, um para cada bit de dado. Como exemplo pode-se citar a conexão de um computador com uma impressora, onde a proximidade física dos equipamentos e as necessidades de alta velocidade, face à quantidade de dados transferida, justificam tal configuração.
Em casos de interligação de sistemas geograficamente distantes, a conexão por fios em paralelos apresentaria custos proibitivos (tanto envolvendo os próprios cabos, como os circuitos requeridos para viabilizar tecnicamente tal ligação face às distâncias envolvidas), tornando-a inviável. Nestas situações a conexão serial é a recomendada. É o caso das conexões via modem, onde as informações são serialmente enviadas ou recebidas (bit a bit), através de um mecanismo de comunicação adequado, envolvendo tanto programas como circuitos e meios de comunicação (fios, rádio, etc).
Na transmissão serial, podem ocorrer basicamente duas formas de comunicação: o síncrono e assíncrono. O síncrono prevê não apenas o transporte serial dos bits de dados, mas também caracteres de
sincronismo, que ao serem detectados no receptor, ajustam os seus clocks internos para receberem os bits de dados na taxa de comunicação estabelecida.
Já na comunicação assíncrona, representada a seguir, cada caractere é transmitido individualmente, e para cada um tem-se os bits de início (START BIT) e os bits de parada (STOP BITS):
1 2 3 em que: 1 – Start Bit (nível 0)
2 – São os bits de dados 3 – Stop bits (nível 1)
Esse agrupamento se repete para cada caractere a ser transmitido/recebido, ou seja, o estado de espera (nível 1 – stop bit) é interrompido com o envio/chegada de um start bit que indica um novo caractere será transmitido ou recebido. As taxas de comunicação devem ser previamente definidas entre os elementos que se comunicam.
2.2. Modos de Interligação Serial
Existem basicamente três maneiras de interligação de sistemas digitais: simplex, half-duplex e
full-duplex.
No simplex, cada elemento é caracterizado como transmissor ou receptor: um sempre transmite e outro sempre recebe (exemplo: um esquema teclado-micro).
No caso de half-duplex, os dois sistemas são capazes de transmitir e de receber, porém as duas operações não podem ser realizadas simultaneamente. É o caso, por exemplo, dos walkies-talkies onde os dois pontos podem receber ou transmitir, mas enquanto um fala, outro apenas recebe e vice-versa.
No caso de full-duplex, os dois sistemas podem transmitir e receber simultaneamente.
2.3. A Comunicação Serial no 80C51
O 80C51 permite que equipamentos sejam interligados no modo full-duplex. Os dados recebidos ou transmitidos utilizam-se de um registrador especial chamado de SBUF (serial buffer). Uma escrita no SBUF implicará numa transmissão automática do dado. Um dado que chega ao pino de recepção implicará na recepção automática, desde que o canal serial esteja habilitado. Internamente ele é implementado com dois registradores em separado (um para transmissão e outro para recepção), permitindo a operação no modo full-duplex.
A recepção inicia-se quando o bit REN do registro SCON estiver em 1, nos modos 1, 2 ou 3 de comunicação serial, e o sistema detecte um start bit (nível 0).
2.4. Configuração do Canal Serial
O canal serial tem a sua configuração baseada no registrador de controle denominado SCON, que apresenta a seguinte estrutura:
Bit 7 6 5 4 3 2 1 Bit 0 SM0 SM1 SM2 REN TB8 RB8 TI RI
Onde a combinação de SM0 e SM1 estabelecem o modo de comunicação serial, conforme a tabela a seguir:
Modo de Funcionamento SM0 SM1 Taxa de Transmissão
0 0 0 Fclock/12
1 0 1 Variável
2 1 0 Fclock/32 ou Fclock/64
3 1 1 Variável
O bit SM2: é utilizado para comunicação multi-processadores;
O bit REN: reception enable – Habilita a recepção, quando em nível 1. Se estiver em nível 0, desabilita a recepção e o pino RXD pode ser usado como entrada ou saída;
O bit TB8: nos modos 2 e 3, indica o estado do nono bit a ser transmitido: 0 ou 1; O bit RB8: Nos modos 2 e 3, indica o estado que deve estar o nono bit de cada dado;
O bit TI: é um flag de requisição de interrupção de transmissão. No modo 0, ele é levado para nível 1 automaticamente após a transmissão do oitavo bit; já nos demais modos, ele é levado para nível 1 quando o stop bit é transmitido. (ATENÇÃO: ele deve ser é levado para nível 0 na rotina de tratamento da
interrupção de transmissão de caracter, para liberar novas transmissões).
O bit RI: é um flag de requisição de interrupção de recepção. No modo 0, ele é levado para nível 1 automaticamente após a recepção do oitavo bit; já nos demais modos, ele é levado para nível 1 quando o
stop bit é recebido. (ATENÇÃO: ele deve ser levado para nível 0 na rotina de tratamento da
2.5. Modos de Comunicação e os Formatos dos Dados
MODO 0: operação do canal serial em modo síncrono, onde o pino RXD é utilizado para a transmissão e recepção de dados. O clock de sincronismo é gerado no pino no TXD;
MODO 1: operação do canal serial em modo assíncrono, onde o pino RXD é utilizado para a recepção de dados, e o pino TXD para a transmissão. Cada caracter transmitido ou recebido envolve tipicamente 10 bits:
• 1 start bit (nível 0); • 8 bits de dados; • 1 stop bit (nível 1).
Neste caso, a taxa de transmissão é variável.
MODO 2: operação do canal serial assíncrono – RXD é o pino de recepção de dados e o TXD é o pino de transmissão. Cada pacote de dados implica em 11 bits:
• 1 start bit (nível 0); • 8 bits de dados;
• nono bit (0 ou 1 - TB8 ou RB8) • 1 stop bit (nível 1).
Neste caso, a taxa de transmissão é 1/32 ou 1/64 da freqüência de clock do 80C51. MODO 3: Idem ao modo 2, porém com taxa de transmissão variável.
2.6. Geração das Taxas de Comunicação
Para configurar as taxas de comunicação é preciso entender o registrador PCON, representado a seguir, e em especial o seu bit 7 chamado de SMOD. O seu valor influi no valor da taxa de comunicação.
Bit 7 6 5 4 3 2 1 Bit 0 SMOD - - - GF1 GF2 PD IDL
Esse registrador não é endereçável por bits. O bit IDL ativa o Modo Idle, e o bit PD, o Modo
Na comunicação serial, o bit SMOD define as taxas de transmissão da seguinte maneira, de acordo com o modo de operação escolhido:
• no Modo 0: a taxa é fixada em 1/12 da freqüência do clock do 80C51. • no Modo 2:
• se SMOD = 0, a taxa de comunicação é 1/64 da freqüência do clock; • se SMOD = 1, a taxa de comunicação é 1/32 da freqüência do clock.
Nos Modos 1 e 3, a taxa de comunicação pode ser fornecida pelo Timer/Counter 1, onde cada ordem de transmissão é gerada pela ocorrência de overflow de contador. O mais comum é o uso do modo de recarga automática de 8 bits para o timer.
Taxa = ((2 SMOD)/32) * ( freq. clock) / (12*(256-TH1) )
Exemplo: para uma freqüência de operação do 80C51 igual a 11.0592 Mhz, e o valor de recarga do contador TH1 igual a 0E8H. Caso:
• SMOD = 0, então a taxa de comunicação será igual a 1200 bps; • SMOD = 1, então a taxa de comunicação será igual a 2400 bps
O Anexo I apresenta os valores de TH1 para vários modos de operação e taxas de comunicação.
3. PARTE EXPERIMENTAL
Para os diversos itens descritos a seguir será necessário o uso de um terminal de vídeo ou um programa emulador de terminar em um microcomputador (por exemplo, o Hyperterminal do Windows). Haverá a necessidade de reconfigurá-lo para a taxa e padrão de comunicação utilizado.
3.1 Parte 1: Familiarização com os modos de comunicação serial
a) O programa prog1.c, apresentado no Anexo II, faz a transmissão da letra A indefinidamente a uma taxa de 9600 bauds. Re-escreva o programa em linguagem Assembly, monte, carregue e teste o seu funcionamento.
b) Alternar o programa do item a) para que a transmissão seja realizada em 4800 bauds. Re-configurar o
Hyperterminal e verificar o resultado. Sugestão: colocar no início do programa um atraso de vários segundos, para dar tempo de se reconfigurar o Hyperterminal para a nova taxa de comunicação (lembrar de desconectá-lo, alterar a velocidade e reconectá-lo novamente).
d) Alternar o programa do item c) para que a recepção e a transmissão sejam realizadas em 4800 bauds. Re-configurar o Hyperterminal e verificar o resultado.
e) Adaptar o programa da experiência 5 para que o acionamento do cronômetro seja dado pelo pressionar de uma tecla no PC. A contagem dos 10 segundos deve aparecer no Display e no Terminal.
4. PLANEJAMENTO
a) Para a elaboração do planejamento deve-se, após a leitura desta apostila, efetuar o estudo dos itens da literatura referenciados.
b) Para os programas pedidos, pede-se:
• Elaborar os fluxogramas ou os diagramas estruturados para programas.
• Definir a seqüência de tarefas a realizar, e o processo de depuração dos programas.
5. BIBLIOGRAFIA
[1] NATIONAL Linear Databook 2 National Semiconductor Corporation, 1988, rev1. [2] NATIONAL Home Page http://www.national.com
[3] JAMES W. STEWART The 8051 Microcontroller Prentice Hall, 1993.
[4] TOCCI WIDMER Digital Systems – Principles and Applications Prentice Hall, 7ª ed., 1998. [5] HOROWITZ e HILL The art of Electronics Cambridge University Press, 2ª ed., 1998.
[6] PHILIPS 80C51-Based 8-bit Microcontrollers Philips Semiconductors Data Handbook,1995.
[7] PHILIPS Application Notes and Development Tools for 80C51 Microcontrollers Philips Semiconductors Data Handbook,1995.
[8] INTEL. Embedded Microcontrollers Intel Datasheet 1995. [9] INTEL. Embedded Applications Intel Datasheet V.2 1995/1996.
[10] Apostilas de PCS 305, Departamento PCS, 1999: Transmissão e comunicação serial. [11] Apostilas do PCS 308, Departamento PCS, 1999: Modem.
[12] Andréa M. Matsunaga e Maurício 0. Tsugawa Projeto de Formatura Sistema de Pesagem Dinâmica. PCS-588 1997.
ANEXO I - INFORMAÇÕES SOBRE COMUNICAÇÃO SERIAL
As informações abaixo relacionadas auxiliam na programação dos timers e canal serial do 80C51. Maiores detalhes podem ser obtidos em www.intel.com.
I - Tabela 1 – Valores de TH1 para algumas taxas de transmissão
Baud Rate Freq(Mhz) SMOD1 TH1
56.800 11.059 1 FF 19.200 11.059 1 FD 9.600 11.059 1 FA 4.800 11.059 1 F4 2.400 11.059 1 E8 1.200 11.059 1 D0 600 11.059 1 A0 300 11.059 1 40 9.600 11.059 0 FD 4.800 11.059 0 FA 2.400 11.059 0 F4 1.200 11.059 0 E8 600 11.059 0 D0 300 11.059 0 A0
II – Estrutura de Software de Comunicação Serial
Uma interrupção do canal ocorre quando estando globalmente as interrupções habilitadas bem como a interrupção do canal serial, um dos bits RI ou TI do registrador SCON for levado ao nível 1. Isso significa que respectivamente ou foi recebido ou foi transmitido um caracter. A análise desses bits esclarece a origem do pedido. O registrador SCON deve ter sido previamente configurado. A habilitação do canal serial deve ser feita colocando-se o valor 1 no bit ES do registrador IE. Na inicialização, o bit TI deve receber o valor 1 (buffer de transmissão vazio, pronto para transmitir) e o bit RI o valor 0 (nenhum caractere recebido). A posição da interrupção do canal serial no vetor de interrupções do 80C51 é 0023h. Na placa experimental nessa posição existe uma instrução de desvio incondicional para a posição da RAM 0FFFCH.
A elaboração da subrotina de tratamento dessa interrupção deve obedecer aos seguintes passos:
• Identificação da origem da interrupção: recepção de um dado ou pronto para transmitir
um dado:
Caso seja recepção, retirar o dado de SBUF; Caso seja transmissão, colocar o dado em SBUF;
• Limpa o bit que causou a interrupção (RI ou TI).
Observação: para que o compilador gere o código adequadamente, caso o modelo L seja utilizado, deve-se
definir inicialmente a área de XRAM e depois a de ROM: por exemplo, XRAM de 8000H a 9FFFH e ROM de A000H a FFFFH, e o endereço inicial do programa estará em A000H. Isso deve ser feito para evitar a superposição da área da RAM externa com a área de código associado ao vetor de interrupções, que na placa experimental encontra-se em FFFxH. A não observância desta recomendação pode acarretar em um
ANEXO II
Programa Exemplo 1 – Comunicação serial no 8051 usando o modo 1, com timer 1, sem interrupção (*)
Este programa transmite o código ASCII da letra “A” repetidamente, a uma taxa de 9.600 baud: /* Configure Timer 1
- Mode = 2
- Interrupt = DISABLED - Clock Source = INTERNAL
- Enable Gating Control = DISABLED */
void init_serial(void) {
PCON = 0x00; /* SMOD = 0, no modo 1, divide clock por 32 */
SCON = 0x42; /* Seleciona modo 1: UART, 8 bits, clock do Timer 1 */
TMOD = 0X20; /* Configura timer 1: modo 2, 8 bits, autoload */
TH1 = 0XFD; /* value set by user */
TR1 = 1; /* TCON.6 start timer */
} void main(void) { init_serial(); while(1) { while (!TI); TI = 0; SBUF = 0x41; } }
Programa Exemplo 2 – Comunicação serial no 8051 usando o modo 1, com timer 1 e recepção com interrupção (*)
Este programa recebe e envia dados a 9600 bauds, usando interrupção.
/*Mode = 1 /8-bit UART Serial Port Interrupt = Enabled */ /*Receive = Enabled, Auto Addressing = Disabled */
void init_serial(void) {
PCON = 0x00; /* SMOD=0, no modo 1, divide o clock por 32*/
SCON = 0X52; /* REN=1, TI=1, RI=0, */
TMOD = 0X20; /*Timer 1 é utilizado para gerar a taxa de comunicação */
TH1 = 0XFD;
TR1 = 1; /*TCON.6*/
IE = 0x90; /*IE.4 and global */
} void main(void) { init_serial( ); while(1); }
void interrupt serial(void) { if (RI ==1) { RI = 0; AUX = SBUF; while (!TI); TI = 0; SBUF = AUX; } }