Serial 8051

10

Click here to load reader

Transcript of Serial 8051

Page 1: Serial 8051

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais - PCS

EXPERIÊNCIA 8:

COMUNICAÇÃO SERIAL

AUTOR: PROF. DR. REGINALDO ARAKAKI

Revisão: Prof. Dr. André Riyuiti Hirakawa e Prof. Dr. Jorge Kinoshita

Ver. 5.1 - 2007 - Prof. Dr. Carlos Eduardo Cugnasca

1. OBJETIVO

Esta experiência visa a familiarização com o recurso de comunicação serial disponível no 80C51, envolvendo as configurações permitidas e respectivas aplicações, bem como o fornecimento de uma taxa de comunicação configurável.

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 diretamente 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 exemplos pode-se citar a conexão de um computador com uma impressora, onde a proximidade física dos equipamentos e as necessidades de velocidade alta face à quantidade de dados transferida justifica 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).

Page 2: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

2

Na transmissão serial, podem ocorrer dois mecanismos 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 recebidos pelo 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

onde: 1 – Start Bit (nível 0)

2 – São os bits de dados

3 –Stop bits (nível 1)

Este agrupamento se repete para cada caracter 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 caracter 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: uma micro-impressora).

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 chegue no pino de recepção implicará na recepção automática, desde que o canal serial esteja habilitado. Internamente ele é implementado com

Page 3: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

3

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 estabelece 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 interrupção de recepção de caracter, para liberar novas recepções).

Page 4: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

4

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

Este registrador não é endereçável em bits. O bit IDL ativa o Modo Idle, e o bit PD, o Modo Power

Down. Os bits GF1 e GF2 são flags de uso geral. 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.

Page 5: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

5

• 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 para o timer configurado para de 8 bits.

Taxa = ((2SMOD)/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 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 Pesquisa Efetue uma pesquisa em livros, manuais e sites especializados, e acrescente um anexo no relatório contendo:

• Um resumo de cada modo de operação do canal serial do 80C51.

• Uma explicação sobre como o modo 0 do canal serial poderia ser utilizado para expandir a capacidade de linhas de saída do 80C51. Esboce um diagrama exemplificando.

• Calcular o erro para as taxas de comunicação apresentadas na Tabela 1 do Anexo 1, caso o clock do 80C51 fosse alterado para 12 MHz.

• Erros de comunicação, como frame e paridade no 80C51: eles são tratados automaticamente?

o Caso afirmativo, explique como isso é feito.

o Caso negativo, indique como a paridade ela poderia ser gerada na transmissão e tratada na recepção. Esboce os programas necessários.

Page 6: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

6

3.2 Parte 1: Familiarização com os modos de comunicação serial

a) Testar o programa prog1.c apresentado no Anexo II, fazendo as alterações e complementações que eventualmente sejam necessárias.

b) Dado o programa prog2.c do Anexo II, inclua uma rotina de tratamento de interrupção que, ao receber um caractere pela porta serial, retorne o mesmo caractere para o Hyperterminal . Faça as alterações e complementações que eventualmente sejam necessárias.

c) Adaptar o programa prog2.c para que possa receber um conjunto de caracteres até que um CR (carriage return) seja encontrado. O usuário deve digitar cada um dos caracteres (no mínimo 16 caracteres) no terminal e finalizar com CR. Após isso, o conjunto de caracteres deve ser enviado da Placa Experimental para o terminal.

3.3 Parte 2: Alteração da velocidade de comunicação

a) Alternar o prog1.c para que a transmissão seja realizada em 4800 baud. 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). No relatório, comente o seguinte caso: “Um aluno realizou esse item, sem colocar o atraso sugerido. Após executar o programa, reconfigurou o Hyperterminal e esperava visualizar na tela uma seqüência de letras “A” maiúsculas. Contudo visualizou uma seqüência de letras “P” maiúsculas. Isso é possível? Explique.

b) Alternar o prog2.c para que a recepção e a transmissão sejam realizadas em 4800 baud. Reconfigurar o Hyperterminal e verificar o resultado.

3.4 Parte 3: Interface Remota para o Cronômetro

a) Adaptar o programa do cronômetro elaborado em experiências anteriores para apresentar o valor da contagem no terminal de vídeo. Sugestão: escrever cada atualização sempre na mesma posição (antes de escrever enviar um “CR”, sem enviar “LF”).

b) Definir teclas do terminal de vídeo que possam fazer o papel das escolhidas para o teclado da placa experimental. Assim, a interface do cronômetro será remota (vídeo e teclado).

c) Utilizar o canal serial com interrupções. Estudar a programação de prioridades do 80C51 e propor a prioridade mais conveniente para cada uma, justificando.

d) Incorporar no mesmo programa simultaneamente, apresentação no display e terminal, e uso dos dois teclados. Sugestão: utilizar a interrupção de recepção de dados pelo canal serial para tratar as teclas de comando recebidas.

Page 7: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

7

3.5 Parte 4: Desafio opcional - Recepção de um bloco de caracteres

a) Projetar e codificar um programa que envia um bloco de caracteres (mínimo de 256 bytes) colocados em posições de memória consecutivas da memória RAM externa da Placa Experimental. Os caracteres recebidos no Hyperterminal devem ser salvos em um arquivo utilizando o recurso de recepção e armazenamento de arquivo texto. Sugestão: colocar no início do programa um atraso de vários segundos, para dar tempo de se ativar a captura de arquivo texto no Hyperterminal.

b) Projetar e codificar um programa que recebe um bloco de caracteres (os mesmos do item a)) enviados pelo Hyperterminal (utilizando o recurso de envio de arquivo texto), e os coloca em posição distinta da item a), de forma consecutiva da memória RAM externa da Placa Experimental. Após a recepção, deve ser feita uma comparação dos blocos para verificar se algum erro foi introduzido na seqüência.

c) Quando acontece “overrun”, a Placa Experimental não consegue processar todos os caracteres enviados pelo Hyperterminal , perdendo caracteres. Possíveis soluções para esse problema: • uso de uma fila circular de dados; • uso do protocolo XON/XOFF para a comunicação serial; • uso de uma combinação das duas alternativas anteriores. Detalhar essas alternativas no relatório e propor formas de provocar o “overrun” na experiência para poder tratá-lo.

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.

• Colocar comentários em todos os programas.

• Editar os programas e levá-los em disquete para a aula.

• Definir a seqüência de tarefas a realizar, e o processo de depuração dos programas.

• Relatar os resultados e eventos esperados.

5. BIBLIOGRAFIA

[1] NATIONAL. Linear Databook 2 - rev1. National Semiconductor Corporation. 1988.

[2] NATIONAL. Home Page http://www.national.com.

Page 8: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

8

[3] STEWART, J.W. The 8051 Microcontroller. Prentice Hall, 1993. ISBN: 0-13-584046-5.

[3] TOCCI, R.J. Digital Systems – Principles and Applications Prentice Hall, 7ª ed., 1998.

[4] HOROWITZ, P.; HILL, W. The art of Electronics. Cambridge University Press, 2ª ed., 1998.

[5] PHILIPS. 80C51-Based 8-bit Microcontrollers. Philips Semiconductors Data Handbook, 1995.

[6] PHILIPS. Application Notes and Development Tools for 80C51 – Data Handbook. Philips Electronics North America Corporation, USA, 1997.

[6] INTEL. Embedded Microcontrollers Intel Datasheet. 1995.

[7] INTEL. Embedded Applications. Intel Datasheet V.2. 1995/1996.

[8] Apostilas de PCS 305, Departamento PCS, 1999: Transmissão e comunicação serial.

[9] Apostilas do PCS 308, Departamento PCS, 1999: Modem.

[10] MATSUNAGA, A.M.; TSUGAWA, M.O. Sistema de Pesagem Dinâmica. Projeto de Formatura (disciplina PCS-588). Escola Politécnica da USP, 1997.

[10] INTEL HOME PAGE. Programa Application Builder - ApBUILDER. http://developer.intel. com/design/builder/apbldr/.

Page 9: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

9

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) SMOD TH1 56.800 11,0592 1 FF 19.200 11,0592 1 FD 9.600 11,0592 1 FA 4.800 11,0592 1 F4 2.400 11,0592 1 E8 1.200 11,0592 1 D0 600 11,0592 1 A0 300 11,0592 1 40

9.600 11,0592 0 FD 4.800 11,0592 0 FA 2.400 11,0592 0 F4 1.200 11,0592 0 E8 600 11,0592 0 D0 300 11,0592 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 é 0x0023. Na placa experimental nessa posição existe uma instrução de desvio incondicional para a posição da RAM 0xFFFC. 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 SDCC gere o código adequadamente, caso o modelo large seja utilizado, deve-se definir inicialmente a área de xram e depois a de code: por exemplo, xram de 0x8000 a 0x9FFF e code de 0xA000 a 0xFFFF. O endereço inicial do programa estará em 0xA000 e o vetor de interrupções deslocado de 0xA000. 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 (caso seja feita a colocação através de programa do LJMP), que na placa experimental encontra-se em 0xFFFx.

Page 10: Serial 8051

Laboratório de Processadores-I - Experiência 8

Escola Politécnica da USP/Departamento de Engenharia de Computação e Sistemas Digitais – PCS

10

ANEXO II Programa Exemplo 1 – prog1.c - 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:

/* Timer 1 é utilizado para gerar a taxa de comunicação, sem uso de interrupção */ /* Canal serial: mode = 1 (8-bit UART Serial Port) sem uso de interrupção */ 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, auto reload */ TH1 = 0XFD ; /* divisão para 9.600 baud */

TR1 = 1; /* TCON.6 - dispara timer */ TI = 1; /* Inicia TI – transmissor pronto */

} void main(void) {

init_serial(); while(1) { while (!TI); /* Espera transmissor estar pronto para transmitir */ TI = 0; /* Bloqueia transmissor */ SBUF = 0x41; /* Envia caractere */ } /* Após a transmissão, o canal serial fará TI = 1 */

} Programa Exemplo 2 – prog2.c - Comunicação serial no 8051 usando o modo 1, com timer 1 e recepção com interrupção (*) Este programa recebe dados a 9600 bauds, usando interrupção.

/* Timer 1 é utilizado para gerar a taxa de comunicação, sem uso de interrupção */ /* Canal serial: mode = 1 (8-bit UART Serial Port) com uso de interrupção */ void init_serial(void) { /* Timer 1 é utilizado para gerar a taxa de comunicação */

PCON = 0x00; /* SMOD=0, no modo 1, divide o clock por 32 */ SCON = 0X52; /* Seleciona modo 1: UART, 8 bits, clock do Timer 1 */

/* SCON.4 - REN=1(habilita a recepção) */ /* SCON.1 - TI=1 (transmissor pronto) */ /* SCON.0 - RI=0 (receptor vazio)*/

TMOD = 0X20; /* Configura timer 1: modo 2, 8 bits, auto reload */ TH1 = 0XFD /* divisão para 9.600 baud */ TR1 = 1; /* TCON.6 - dispara timer 1 */ IE = 0x90; /* IE.4– habilita interrupção do canal serial e IE.7- global */

} void int_serial (void) interrupt 4 using 1 {

if (RI ==1) { /* Se for interrupção de recepção: */ RI = 0; /* limpa pedido de interrupção de recepção */ AUX = SBUF; /* Retira caractere recebido do bufer */ while (!TI); /* Espera transmissor estar pronto para transmitir */ TI = 0; /* Bloqueia transmissor */ SBUF = AUX; /* Envia caractere recebido (eco) */ }

} void main(void) {

init_serial( ); while(1); }

(*) Programas de referência. Não estão representados: includes, declarações de variáveis, etc. Canal serial: interrupção 4, endereço 0x0023, desviado para 0xFFFC.