Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila 8051 - cap9, Notas de estudo de Engenharia Elétrica

apostila de microcontrolador 8051 completa

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 11/09/2010

geovani-nogueira-5
geovani-nogueira-5 🇧🇷

4.6

(26)

23 documentos

1 / 11

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
CAPÍTULO IX PORTA SERIAL
MICROCONTROLADORES (MCS-51) 9 - 1
CAPÍTULO IX
PORTA SERIAL
9.1. INTRODUÇÃO
A porta serial existente na família MCS-51 é "full duplex", quer dizer, pode transmitir e
receber dados simultaneamente. Tem um buffer que permite receber um segundo byte antes que o
byte previamente recebido tenha sido retirado (lido) do registro de recepção. Mas, se o primeiro byte
não tiver sido lido no tempo em que o segundo byte se completa, um dos dois será perdido.
9.2. REGISTROS ENVOLVIDOS
A porta serial possui um registrador chamado SBUF, o mesmo que se usa para enviar
ou receber dados pela porta serial. Na realidade, o nome SBUF se refere a dois registros, um
somente para leitura por onde se recebem os dados que chegam pela porta serial e outro somente
para escrita por onde se transmitem dados pela porta serial.
O modo de operação da porta serial é controlado pelo registro SCON, que é ilustrado na
figura 9.1. A figura 9.2 apresenta um resumo dos modos de operação.
SM0 SM1 SM2 REN
BIT 0 DO MODO
SCON
COMUNICAÇÃO MULTIPROCESSADOR
BIT 1 DO MODO
TB8 RB8 TI RI
HABILITAR RECEPÇÃO SERIAL
OITAVO BIT PARA A TRANSMISSÃO
INTERRUPÇÃO POR TRANSMISSÃO
OITAVO BIT RECIBIDO
INTERRUPÇÃO POR RECEPÇÃO
7654 3210
Figura 9.1. Descrição do registro SCON.
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Apostila 8051 - cap9 e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

MICROCONTROLADORES (MCS-51) 9 - 1

CAPÍTULO IX

PORTA SERIAL

9.1. INTRODUÇÃO

A porta serial existente na família MCS-51 é "full duplex", quer dizer, pode transmitir e receber dados simultaneamente. Tem um buffer que permite receber um segundo byte antes que o byte previamente recebido tenha sido retirado (lido) do registro de recepção. Mas, se o primeiro byte não tiver sido lido no tempo em que o segundo byte se completa, um dos dois será perdido.

9.2. REGISTROS ENVOLVIDOS

A porta serial possui um registrador chamado SBUF, o mesmo que se usa para enviar ou receber dados pela porta serial. Na realidade, o nome SBUF se refere a dois registros, um somente para leitura por onde se recebem os dados que chegam pela porta serial e outro somente para escrita por onde se transmitem dados pela porta serial. O modo de operação da porta serial é controlado pelo registro SCON, que é ilustrado na figura 9.1. A figura 9.2 apresenta um resumo dos modos de operação.

SM0 SM1 SM2 REN

BIT 0 DO MODO

SCON

COMUNICAÇÃO MULTIPROCESSADOR BIT 1 DO MODO

TB8 RB8 TI RI

HABILITAR RECEPÇÃO SERIAL

OITAVO BIT PARA A TRANSMISSÃO

INTERRUPÇÃO POR TRANSMISSÃO OITAVO BIT RECIBIDO

INTERRUPÇÃO POR RECEPÇÃO

7 6 5 4 3 2 1 0

Figura 9.1. Descrição do registro SCON.

9 - 2 MICROCONTROLADORES (MCS-51)
SM0 SM1 MODO DESCRIÇÃO FREQÜÊNCIA

0 0 0 registro de deslocamento clock/ 0 1 1 UART de 8 bits variável 1 0 2 UART de 9 bits clock/12 ou clock/ 1 1 3 UART de 9 bits variável Figura 9.2. Modos de operação da porta serial.

SM2 → comunicação multiprocessador (habilitada com SM2=1): SM2=1 e em modo 1 ==> interrupção (RI=1) com o bit de parada (stop bit) igual a 1 SM2=1 e em modo 2 ou 3 ==> interrupção (RI=1) se for recebido RB8=1. REN → habilita a recepção serial (Reception Enable) TB8 → oitavo bit a ser transmitido nos modos 2 e 3. RB8 → oitavo bit recebido nos modos 2 e 3. TI → flag de interrupção por término de transmissão pela porta serial: MODO 0 → ativado no final do oitavo bit DEMAIS → ativado no começo do bit de parada RI → flag de interrupção por recepção pela porta serial MODO 0 → ativado no final do oitavo bit DEMAIS → ativado na metade do bit de parada Observação : os flags TI e RI não são apagados por hardware e por isso a rotina de interrupção deve fazê-lo, ou seja, estes flags devem ser zerados por software.

O registro PCON também toma parte na geração do baud rate da porta serial. Este registro é ilustrado na figura 9.2.

SMOD - - -
DOBRADOR DE BAUD RATE

PCON (^) GF1 GF0 (^) PD IDL

BIT DE FINALIDADE GERAL
ATIVA MODO POWER DOWN
BIT DE FINALIDADE GERAL
ATIVA MODO IDLE

Figura 9.3. Descrição do registro PCON.

9 - 4 MICROCONTROLADORES (MCS-51)

9.3.2. Modo 1 (assíncrono, 8 bits)

No Modo 1 são operados 10 bits com um baud rate programável. Recebe-se pelo pino RXD e transmite-se pelo pino TXD. A figura 9.5 ilustra o frame de bits serial. O bit de partida (START) é sempre zero e o bit de parada (STOP) é sempre um na transmissão. Na recepção o bit de parada é colocado no bit RB8.

START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 STOP

Figura 9.5. Frame de bits gerado pela porta serial em modo 1.

Neste modo o baud rate é gerado pelo contador/temporizador 1. A cada 16 (SMOD=1) ou 32 (SMOD=0) transbordamentos (overflows) é enviado um pulso para o circuito serial. A figura 9. ilustra o esquema do gerador do baud rate e também apresenta algumas fórmulas para o cálculo do valor a ser programado no contador/temporizador.

1/12 1/N
RX CONTROL
TX CONTROL
RXD
PIN
TXD
PIN
CLOCK
TIMER 1 SMOD=
SMOD=
BAUD
RATE
(BR)
BR = 12N(1+SMOD)16CLOCK N = 192BR*(1+SMOD)CLOCK

Figura 9.6. Esquema para a geração do baud rate (BR) no modo 1.

Usando o contador/temporizador 1 programa-se qualquer baud rate. Na grande maioria dos casos tem-se o baud rate e é buscado o valor N a ser programado no contador/temporizador 1 (o mais cômodo é usar o modo 2 - auto recarga). Um problema que sempre existe é o erro gerado pela aproximação do valor a ser programado no contador/temporizador. Isto provoca a geração de baud rates ligeiramente diferentes.

Exemplo: Usando um cristal de 3,575611 MHz, qual é o valor a ser programado no timer 1 para operar a 9600 bauds (usar SMOD=0)? N = 3575611 / (384*9600) = 0,9699 (aproximadamente 1) Usando timer 1 no modo 2 tem-se: 256 - 1 = 255 (TH1=TL1=255).

Observação : a transferência do dado recebido para o registro SBUF (e RB8, que guarda o stop bit) e a ativação do flag RI somente acontecerá se: RI = 0 e (SM2= 0 ou o bit de parada =1).

MICROCONTROLADORES (MCS-51) 9 - 5

9.3.3. Modo 2 (assíncrono, 9 bits, baud rate fixo)

Este modo opera com 11 bits e o baud rate pode ser de 1/32 ou 1/64 do clock. O bit TB8/RB8 serve para transmitir a paridade ou gerar um segundo bit de parada (TB8=1). O frame de bits usado neste modo é ilustrado na figura 9.7.

START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP

Figura 9.7. Frame de bits gerado pela porta serial no modo 2.

O único controle que se tem sobre o baud rate é através do uso do bit SMOD. Se SMOD=0, trabalha-se com BR=clock/32 e se SMOD=1, trabalha-se com BR=clock/64. A figura 9. ilustra o esquema para geração do baud rate no modo 2.

RX CONTROL
TX CONTROL
RXD
PIN
TXD
PIN
CLOCK
SMOD=
SMOD=
BAUD
RATE
(BR)

Figura 9.8. Esquema para a geração do baud rate (BR) no modo 2.

Na transmissão o bit 8 é copiado do bit TB8. Na recepção o bit 8 é copiado para o bit RB8. Os bits TB8 e RB8 estão no registro SCON. O dado recebido somente é carregado no SBUF (e RB8) se: RI=0 e (SM2=0 ou bit 9 (stop bit) = 1).

9.3.4. Modo 3 (assíncrono, 9bits, baud rate variável)

É idêntico ao modo 2, exceto que a geração do baud rate é idêntico ao modo1. A figura 9.9 ilustra o frame de bits e a geração do baud rate.

START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TB8 STOP

1/12 1/N
RX CONTROL
TX CONTROL
RXD
PIN
TXD
PIN
CLOCK
TIMER 1 SMOD=
SMOD=
BAUD
RATE
(BR)
BR = 12N(1+SMOD)16CLOCK N = 192BR*(1+SMOD)CLOCK

Figura 9.9. Frame de bits e geração do baud rate para a porta serial no modo 3.

MICROCONTROLADORES (MCS-51) 9 - 7

erros pois diversos fatores, particulares para cada caso, precisam ser levados em consideração. Como um valor prático e que funciona na grande maioria dos casos arbitra-se que o valor do erro, para o último bit, deve ser menor que 40% da duração de um bit (usando BR exato).

11 11 40 100

1 BRp BR BR

− ≤ *

BRp → baud rate programado BR → baud rate exato

A equação pode ser simplificada para :

1 1 1 BRp BR 27 5 BR

− ≤ , *

Como pode ser verificado, com um cristal de 4 MHz não se conseguirá transmitir a 9600 pois o erro do baud rate será muito grande. 1 10416 7

1 9600

1 , 27 5, * 9600

− ≤

8,167 μs ≤ 3,788 μs → falso.

9.5. Comunicação entre vários 8051

9 - 8 MICROCONTROLADORES (MCS-51)

Os modos 2 e 3 permitem interligar vários 8051, sendo um mestre e vários escravos. Nestes modos temos:

  • 1 start bit;
  • 8 bits de dados;
  • um nono bit que vai para o bit RB8 ( na recepção) ou pode ser escolhido 0 ou 1 na transmissão escrevendo-se em TB8;
  • 1 stop bit Note que se SM2 = 1 e RB8 = 1, a interrupção da serial será atendida.

O algoritmo de comunicação consiste em:

  1. No início, todos os escravos estão com SM2 = 1
  2. Quando o mestre quiser enviar dados para algum escravo, ele escreverá 1 em seu bit TB8 e então enviará serialmente o endereço do escravo desejado, e como teremos todos os bits RB em 1, todos escravos serão interrompidos para verificar se é seu o endereço enviado.
  3. O escravo selecionado zerará o seu bit SM2 e estará preparado para receber os dados, os quais terão agora o nono bit (RB8) em 0.
  4. Os demais escravos permanecerão com SM2 em 1 e, dessa forma, não serão mais interrompidos pois os dados têm RB8 = 0.
  5. Em resumo, o mestre envia endereços com o nono bit em 1 e os dados com o nono bit em 0, portanto, se o mestre desejar se comunicar com outro escravo basta enviar o novo endereço com o nono bit em 1.

9.6. Comunicação serial entre o 8051 e o PC

Devido à diferença de tensão entre os níveis TTL e os usados no padrão RS-232C (PC), é necessário usar circuitos conversores para interfacear o microcontrolador com a porta serial do PC. A conversão pode ser feita através de circuitos transistorizados discretos (veja as figuras 11.10, 11.11 e 11.12 e leia a seção 11.4) ou através de circuitos integrados como o 1488 (conversor de TTL para RS-232C) e o 1489 (conversor de RS-232C para TTL). A seguir estão os esquemas dos dois integrados e o esquema básico de interligação entre o 8051 e a serial do PC.

9 - 10 MICROCONTROLADORES (MCS-51)

SCON^ SM0^ SM1^ SM2^ REN TB8^ RB8^ TI^ RI

1 1 0 0 1 0 0 0

GATE C/*T M1 M

TMOD

GATE C/*T (^) M1 M 0 0 1 0 0 0 0 0

IE EA - - ES ET1 EX1 ET0 EX

1 - - 1 0 0 0 0 Figura 9.11. Inicialização de os registros para o exercício 9.1.

Cálculo do divisor formado pelo contador/temporizador 1: N = 3575611/(384*9600) = 0,9699 → 1. (TH1 = TL1 = 256 - 1 = 255).

;TX_SER.ASM DEFSEG PROG, CLASS=CODE, START= SEG PROG ;BR_9600 EQU 255 ; ORG RESET AJMP INIC ; ORG SINT

; AJMP^ SERIAL INIC ORGMOV^ 50HTMOD,#20H ;TIMER 1 EM MODO 2 MOV TH1,#BR_9600 ;PROGRAMAR BAUD RATE MOVSETB TL1,#BR_9600TR1 ;INICIAR TIMER 1 MOVMOV SCON,#0C8HIE,#90H ;MODO;HAB INTERRUP 3 COM TB8=1 SERIAL MOVSETB A,#"0"TI ;PRIMERO;TX PRIMEIRO ASCII ASCII SJMP $ ;LOOP INFINITO ; ORG 100H SERIAL CLRMOV TISBUF,A ;APAGAR;TRANSMITIR FLAG INC A CJNEMOV A,#"Z"+1,SER1A,#"0" ;FOI;REINICIALIZAR O ULTIMO? SER1 ACALLRETI RETARDO ;ATRASAR TRANSMISSAO ;RETARDO MOV R7,# AQUI DJNZ R7,AQUI RETEND

Exercício 9.2. RX_SER

O circuito deverá responder aos seguintes comandos que chegam pela porta serial: 1 → acender todos os leds 0 → apagar todos os leds R → acender led vermelho r → apagar led vermelho A → acender led amarelo a → apagar led amarelo V → acender led verde v → apagar led verde

MICROCONTROLADORES (MCS-51) 9 - 11

Estes comandos vão chegar pela porta serial usando o formato: 1 bit de partida, 8 bits de dados, 2 bits de parada, com um baud rate de 9600.

;RX_SER.ASM DEFSEG PROG, CLASS=CODE, START= ; SEG^ PROG BR_9600LED_VERMELHO EQUEQU (^255) P1. LED_AMARLED_VERDE EQUEQU P1.1P1. CHEGOU EQU 32. ; ORG RESET

; AJMP^ INIC ORGAJMP SINTSERIAL ; INIC ORGMOV^ 50HTMOD,#20H ;TIMER 1 EM MODO 2 MOVMOV TH1,#BR_9600TL1,#BR_9600 ;PROGRAMAR BAUD RATE SETB TR1 ;INICIAR TIMER 1 MOVMOV SCON,#0D0HIE,#90H ;MODO;HAB INTERRUP 3 COM REN=1 SERIAL

ESPERA CLRJNB^ CHEGOUCHEGOU,ESPERA^ ;APAGAR;AGUARDAR^ FLAG UM COMANDO ; CLR^ CHEGOU CJNE A,#"0",LB CLRCLR LED_VERMELHOLED_AMAR ;CHEGOU 0 CLRSJMP LED_VERDEESPERA ;LB1 CJNE A,#"1",LB SETB LED_VERMELHO ;CHEGOU 1 SETBSETB LED_AMARLED_VERDE

; SJMP^ ESPERA LB2 CJNE A,#"R",LB SETBSJMP LED_VERMELHOESPERA ;CHEGOU R LB3 CJNECLR A,#"r",LB4LED_VERMELHO ;CHEGOU r

; SJMP^ ESPERA LB4 CJNE A,#"A",LB SETBSJMP LED_AMARESPERA ;CHEGOU A LB5 CJNECLR A,#"a",LB6LED_AMAR ;CHEGOU a SJMP ESPERA ;LB6 CJNE A,#"V",LB SETBSJMP LED_VERDEESPERA ;CHEGOU V LB7 CLRSJMP LED_AMARESPERA ;CHEGOU v ; SERIAL CLRMOV RIA,SBUF ;APAGAR;COLOCAR FLAG DADO DE NO INTERRUP Acc SETBRETI CHEGOU END