NOTAS DE AULA
06
MICROCONTROLADOR 8051
VOL. 04
9 COMUNICAÇÃO SERIAL
É o periférico que converte informações em paralelo (geralmente oriundas de computadores) para informações seriais (geralmente oriundas de modems, linhas telefônicas ou para placa serial de outro micro).
§ Comunicação micro a micro:
§ Padrão RS 232
Foi definido em 1969 pela Eletronic Industries Association (EIA). Especifica as características elétricas dos circuitos e fornece nome e números às linhas necessárias à conexão entre equipamentos. Os microcomputadores utilizam somente 9 pinos conectados em lugar dos 25 pinos necessários para o circuito completo RS232. Além disso, o padrão define:
1. Para que periféricos possam “conversar” através da me sma linha, eles são divididos em 02 tipos: o tipo terminal: que usa o pino 2 para mandar dados e o tipo modem que usa o pino 2 para receber dados;
2. periféricos terminais devem ser acoplados de um conector macho e periféricos modem de um conector fêmea.
§ Padrão conector DB-25
1. Periférico Terminal (IBM-PC) - DTE
TxD à Dados Transmitidos SG à Sinal Ground
RxD à Dados Recebidos DTR à Pronto Terminal de Dados RQS à Pedido para Enviar CD à Detecção de Portadora CTS à Limpar para Enviar RI à Indicador de Chamada DSR à Está pronto para conjunto de dados
Pino CD: indica quando o modem recebe um sinal de portadora de outro modem que está localizado remotamente;
Pino RI: indica quando o terminal recebe um sinal de chamada pela linha telefônica (indicação de chamada);
Pinos 4 e 5: são utilizados no reconhecimento entre o tipo terminal e tipo modem. Sempre que o terminal deseja transmitir dados, o pino 4 vai para 0. Em seguida omodem envia um 0 através do pino 5 (permissão para o envio), assim que estiver pronto para transmissão.
§ Padrão conector DB-9 Linhas Funções 2 e 3 TxD à Transmite Dados RxD à Recebe Dados 4 e 5 RQS à Handshaking CTS à Handshaking 6 e 20 DSR à Handshaking DTR à Handshaking 7 SG à Sinal Ground 8 CD à Presença de Portadora 22 RI à Telefone Chamando
Handshaking: método pelo qual periféricos que se comunicam podem controlar o fluxo de transmissão de dados entre eles.
§ Comunicação entre transmissor e receptor
Em sistemas em que somente um periférico transmite e o outro somente recebe, a comunicação ocorre apenas entre dois sinais em cada ponto:
- TxD e SG (2 e 7) no transmissor; - RxD e SG no receptor.
§ Comunicação nas duas direções
Neste caso, cada um dos periféricos transmite e recebe, sendo portanto, necessário o número mínimo de 3 linhas necessárias em cada periférico: TxD, RxD e SG (pode-se adicionar os pinos DSR e DTR para controlar o fluxo de transmissão de dados à handshaking).
§ Comunicação micro a micro
Conector DB25 Conector DB25 Conector DB9 Pino 2 ligar no Pino 3 Pino 2
3 2 3 4 8 1 5 8 1 6 20 4 7 7 5 8 4 7 8 5 8 20 6 6 Ou Conector DB9 Conector DB9 Pino 3 ligar no Pino 2
2 3 7 1 8 1 6 4 5 5 1 7 1 8 4 6
§ UART (Universal Asynchronous Receiver Transmitter)
Circuito Integrado considerado o “coração da porta serial”. Seu trabalho é transformar cada byte de informação paralela numa corrente de bits seriais como também executar a operação inversa (C.I. 8250 da National).
Configura-se a UART segundo a necessidade de nossa comunicação: - taxa de transmissão: 300bps, 1200 bps, 2400 bps até 115200bps;
- número de bits de dados: formato texto = 7 bits e no formato binário = 8 bits;
- paridade: se transmitir 7 bits de dados, o oitavo bit pode ser usado para indicar a paridade; - start bit (1 bit) e stop bit (1 ou 2 bits): quando a serial recebe um caractere, deve ser capaz
de identificar quando o envio do caractere começa e quando termina. Quando não há caracteres sendo enviados, o estado dos bits da porta será sempre 1 (inativo). Para sinalizar a chagada de um caractere, enviamos um bit de início com o valor 0. Em seguida, são enviados os 7 ou 8 bits de dados, o bit de paridade de 1 ou 2 bits de finalização com o valor 1.
9.1 Conexão do 8051 a RS 232
Primeira ponto a considerar que a RS232 não é padrão TTL, portanto, necessita de um driver, tal como, o MAX232 para converter os níveis de tensão da RS232 para níveis TTL e vice-versa.
Pinos RxD e TxD no 8051:
O 8051 possui 2 pinos que são utilizados especialmente para transferência e recepção de dados serialmente pelo 8051 (TxD e RxD à P3.1 e P3.0). Não podemos esquecer que esses pinos são compatíveis com níveis TTL.
O integrado MAX232 (conversor de tensão)
Aconselho pesquisarem na página da Maxim (www.maxim-ic.com). Serve para converter os níveis de tensão da RS232 (1 à -3 a –25V, 0 à +3 a +25V) para TTL e vice-versa. A sua alimentação é +5V (é interessante, pois é a mesma do 8051). A figura abaixo da Maxim:
O MAX232 necessita de 2 capacitores na faixa de 1 a 22µF (normalmente se usa 22µF). A Maxim possui também o conversor MAX233 que não necessita de capacitores externos.
9.2 Programando o 8051 para comunicação serial
Como já descrito no material do 80x86 as taxas típicas (baud rates) para transmissão serial são: 110, 150, 300, 600, 1200, 2400, 4800, 9600 e 19200 (para PC’s 486 e Pentium).
Exemplo_1: Com XTAL = 11,0592MHz, encontrar o valor necessário de TH1 para ter as seguintes razões baud: (a) 9600, (b) 2400 e (c) 1200.
Solução:
Com XTAL = 11,0592MHz, temos: o ciclo de máquina do 8051 = 11,0592MHz ÷12 = 921,6KHz.
921,6KHz ÷ 32 = 28800Hz é a freqüência fornecida pela UART para o timer 1 setar a razão baud.
(a) 28800 ÷ 3 = 9600 à onde –3 = FDH é carregado em TH1 (b) 28000 ÷ 12 = 2400 à onde –12 = F4H é carregado em TH1 (c) 28800 ÷ 24 = 1200 à onde –24 = E8H é carregado em TH1
Valores típicos para os registros TH1 (XTAL = 11,0592MHz).
Razão baud TH1 (decimal) TH1 (hexadecimal)
9600 -3 FD
4800 -6 FA
2400 -12 F4
1200 -24 E8
Registro SBUF: é um registro de 8 bits usado somente para comunicação serial do 8051. Para um byte ser transferido usando a linha TxD é necessário coloca-lo no registro SBUF. Similarmente, SBUF pode armazenar o byte de dado quando é recebido pela linha RxD do 8051. Exemplos:
MOV SBUF, #’D’ ; carrega SBUF = 44H (ASCII para D) MOV SBUF, A ; copia o acumulador para SBUF MOV A, SBUF ; copia SBUF para o A
Registro SCON (Serial Control): é um registro de 8 bits usado para programar o start bit, stop bit e os bits de dados do pacote (frame). Os vários bits do SCON (bit endereçável) são:
SMO e SM1: determinam o pacote de dados especificados (o frame de dados), ou seja, determinam o número de bits por caractere e os bits de start e stop.
SM0 SM1 Modos
0 0 0
0 1 1 – 8 bits de dados, 1 stop bit e 1 start bit
1 0 2
1 1 3
SM2: permite ha bilitar a capacidade multiprocessamento do 8051 (para aplicações com apenas 1 microcontrolador à SM2 = 0).
REN (Receive Enable): quando o REN = 1 (nível alto) permite que o 8051 receba dados do pino RxD. Se desejamos que o 8051 transfira e receba dados, REN é setado (REN = 1). Fazendo REN = 0 o receptor está desabilitado à instruções usadas: SETB SCON.4 e CLR SCON.4.
TB8 (Transfere 8 bits): não é utilizado no modo 1, ou seja, TB8=0.
RB8 (receive bit 8): no modo serial 1, este bit copia o stop bit quando um dado de 8 bits é recebido (normalmente não é utilizado no modo 1, ou seja, TB8=0).
TI (Transmit Interrupt): extremamente importante, pois quando o 8051 termina a transferência do caractere de 8 bits, o TI indica que está pronto para transferir outro byte (é alterado no bit de início (start) e no de fim (stop)).
RI (Receive Interrupt): extremamente importante, pois quando o 8051 recebe dados serialmente via RxD utiliza o RI para indicar que um byte foi recebido.
Programando o 8051 para transferir dados serialmente
Utilize as seguintes dicas para realizar a transferência de dados no 8051 via serial:
1. o registro TMOD é carregado com o valor 20H, indicando o uso do timer 1 no modo 2 (8 bits auto -carregável) para setar a taxa de transmissão (razão baud);
2. o TH1 é carregado com um dos valores da Tabela Valores típicos para os registros TH1 (XTAL = 11,0592MHz) para setar a taxa de transmissão (página 96);
3. o registro SCON é carregado com o valor 50H, indicando o modo serial 1, onde o pacote é constituído por 8 bits, 1 start bit e 1 stop bit;
5. TI é limpo (resetado) à instrução CLR TI;
6. o byte (caractere) para ser transferido serialmente deve ser escrito no registro SBUF; 7. o flag TI é monitorado com o uso da instrução JNB TI, rótulo para verificar se o
caractere foi transferido completamente;
8. para transferência do próximo caractere vá para o passo 5.
Exemplo_1: Escrever um programa para transferir a letra “A” serialmente a uma taxa de 4800 baud, continuamente.
Solução:
MOV TMOD, #20H ; timer 1, modo 2 (auto-carregável) MOV TH1, #-6 ; taxa 4800 baud
MOV SCON, #50H ; 8bits, 1 stop bit, REN habilitado SETB TR1 ; início do timer1
VOLTA: MOV SBUF, #”A” ; caractere a ser transferido
AQUI: JNB TI, AQUI ; monitoramento – espera até terminar CLR TI
SJMP VOLTA Observe a importância do TI:
1. o caractere (byte) para ser transferido é escrito no registro SBUF; 2. transfere o start bit;
3. o caractere é transferido 1 bi por vez;
4. o stop bit é transferido. Durante a transferência do stop bit o 8051 torna TI = 1, indicando que o último caractere foi transmitido e está pronto para transferir o próximo byte (caractere);
5. monitorando o TI evitamos de reescrever no registro SBUF, em outras palavras, evitamos perdas de dados;
6. após o SBUF é carregado com o novo byte e o TI precisa ser forçado para baixo (CLR TI) para novo byte ser transmitido.
Programando o 8051 para receber dados serialmente
Utilize as seguintes dicas para realizar a recepção de dados no 8051 via serial:
1. o registro TMOD é carregado com o valor 20H, indicando o uso do timer 1 no modo 2 (8 bits auto -carregável) para setar a taxa de transmissão (razão baud);
2. o TH1 é carregado com um dos valores da Tabela Valores típicos para os registros TH1 (XTAL = 11,0592MHz) para setar a taxa de transmissão (página 96);
3. o registro SCON é carregado com o valor 50H, indicando o modo serial 1, onde o pacote é constituído por 8 bits, 1 start bit e 1 stop bit;
4. TR1 é setado (TR1 = 1) para iniciar o timer 1; 5. RI é limpo (resetado) à instrução CLR RI;
6. o flag RI é monitorado com o uso da instrução JNB RI, rótulo para verificar se o caractere foi recebido completamente;
7. quando RI = 1, SBUF possui o byte;
8. para recepção do próximo caractere vá para o passo 5.
Exemplo_1: programar o 8051 para receber bytes serialmente, e coloca-los em P1. Setar a taxa de transmissão para 4800.
Solução:
MOV TMOD, #20H MOV TH1, #-6 MOV SCON, #50H SETB TR1
AQUI: JNB RI, AQUI MOV A, SBUF MOV P1, A CLR RI SJMP AQUI
Exemplo_2: assumir que a porta serial do 8051 est á conectada a porta COM (serial) do PC (ver programa do 80x86, pois poderia utiliza -lo para conversação entre PC-8051). Considere que o PC está rodando um programa para enviar e receber dados serialmente. P1 e P2 do 8051 estão conectadas a LED’s e chaves, respectivamente. Escrever um programa para o 8051 que realize (a) enviar ao PC a mensagem “Grande Tricolor”, (b) receber qualquer dado enviado pelo PC e acionar os LEDS em função dos dados e (c) pegar o dado das chaves conectadas a P2 e enviar este dado para o PC serialmente. O programa deve realizar o item (a) uma vez apenas, mas os itens (b) e (c) continuamente (usar a taxa de 4800baud).
Próximos assuntos: Interrupções
Interfaceamento de dispositivos externos com o 8051 Memória externa e o 8051