






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
apostila de microcontrolador 8051 completa
Tipologia: Notas de estudo
1 / 11
Esta página não é visível na pré-visualização
Não perca as partes importantes!







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.
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
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.
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.
PCON (^) GF1 GF0 (^) PD IDL
Figura 9.3. Descrição do registro PCON.
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.
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.
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).
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.
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.
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).
É 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
Figura 9.9. Frame de bits e geração do baud rate para a porta serial no modo 3.
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
Os modos 2 e 3 permitem interligar vários 8051, sendo um mestre e vários escravos. Nestes modos temos:
O algoritmo de comunicação consiste em:
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.
1 1 0 0 1 0 0 0
GATE C/*T M1 M
GATE C/*T (^) M1 M 0 0 1 0 0 0 0 0
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
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
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