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 - cap6, 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 / 12

Toggle sidebar

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

Não perca as partes importantes!

bg1
CAPÍTULO VI PORTAS PARALELOS
MICROCONTROLADORES (MCS-51) 6 - 1
CAPíTULO VI
PORTAS PARALELAS
A família MCS-51 oferece 4 portas paralelas, denominadas P0, P1, P2 e P3 e para cada
porta existe um SFR. De acordo com a configuração do hardware, uma ou mais portas estarão
totalmente ou parcialmente disponíveis.
6.1. REGISTROS ENVOLVIDOS
Os 4 registros, P0, P1, P2 e P3 são na realidade os latches das portas e não os pinos da
CPU. Algumas instruções operam com o conteúdo destes latches e outras com os valores dos pinos.
As portas paralelas são utilizadas pela CPU para efetuar várias tarefas:
P0 byte inferior de endereços e dados ==> BUS
P2 byte superior de endereços
P3 0 RXD - entrada serial
1 TXD - saída serial
2 *INT0 - interrupção externa 0
3 *INT1 - interrupção externa 1
4 T0 - entrada externa para o contador 0
5 T1 - entrada externa para o contador 1
6 *WR - strobe para escrita na memória de dados externa
7 *RD - strobe para leitura da memória de dados externa
Durante uma operação de escrita ou leitura de memória de dados, por exemplo, os
dados das portas P0 e P2 são removidos e por eles se emitem os endereços e dados. Terminadas as
operações, o conteúdo do latch reaparece nos pinos da CPU.
Existem detalhes sobre a utilização de cada porta como entrada ou saída mas, de uma
forma geral, pode-se dizer que:
Saída: Basta escrever 0 ou 1 na porta que o nível lógico aparece nos pinos corretos.
Entrada: todos as portas (exceto P0) possuem um pull-up interno; quando se escreve 1 em um bit da
porta, diz-se que este bit está programado como entrada pois dispositivos externos podem colocar
(forçar) este 1 em 0. Assim, para ter uma porta como entrada, escreve-se 1 e depois com a leitura
será lido 1 ou 0 de acordo com o nível que externamente está aplicado no pino. Devido a isto, as
portas são chamadas quasi-bidirecionais.
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

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

MICROCONTROLADORES (MCS-51) 6 - 1

CAPíTULO VI

PORTAS PARALELAS

A família MCS-51 oferece 4 portas paralelas, denominadas P0, P1, P2 e P3 e para cada

porta existe um SFR. De acordo com a configuração do hardware, uma ou mais portas estarão

totalmente ou parcialmente disponíveis.

6.1. REGISTROS ENVOLVIDOS

Os 4 registros, P0, P1, P2 e P3 são na realidade os latches das portas e não os pinos da

CPU. Algumas instruções operam com o conteúdo destes latches e outras com os valores dos pinos.

As portas paralelas são utilizadas pela CPU para efetuar várias tarefas:

P0 → byte inferior de endereços e dados ==> BUS

P2 → byte superior de endereços

P3 → 0 → RXD - entrada serial

1 → TXD - saída serial

2 → *INT0 - interrupção externa 0

3 → *INT1 - interrupção externa 1

4 → T0 - entrada externa para o contador 0

5 → T1 - entrada externa para o contador 1

6 → *WR - strobe para escrita na memória de dados externa

7 → *RD - strobe para leitura da memória de dados externa

Durante uma operação de escrita ou leitura de memória de dados, por exemplo, os

dados das portas P0 e P2 são removidos e por eles se emitem os endereços e dados. Terminadas as

operações, o conteúdo do latch reaparece nos pinos da CPU.

Existem detalhes sobre a utilização de cada porta como entrada ou saída mas, de uma

forma geral, pode-se dizer que:

Saída : Basta escrever 0 ou 1 na porta que o nível lógico aparece nos pinos corretos.

Entrada : todos as portas (exceto P0) possuem um pull-up interno; quando se escreve 1 em um bit da

porta, diz-se que este bit está programado como entrada pois dispositivos externos podem colocar

(forçar) este 1 em 0. Assim, para ter uma porta como entrada, escreve-se 1 e depois com a leitura

será lido 1 ou 0 de acordo com o nível que externamente está aplicado no pino. Devido a isto, as

portas são chamadas quasi-bidirecionais.

6 - 2 MICROCONTROLADORES (MCS-51)

6.2. DESCRIÇÃO DO FUNCIONAMENTO

Cada porta paralela é constituída por três partes:

  • um registro latch (SFR ==> P0,P1,P2,P3)
  • um driver de saída
  • Um buffer de entrada

Os drivers de saída de P0 e P2 e o buffer de entrada de P0 são usados para acessar a

memória externa de programa ou de dados.

6.2.1. Porta P

A figura 6.1 ilustra o esquema elétrico da porta 1.

READ LATCH

PULL-UP

INTERNO

BUS INTERNO

WRITE

TO LATCH

D Q

CLK

Q

PINO

DA CPU

READ PIN

G FET

S

D

Vcc

LATCH

SFR P

P1.i

Figura 6.1. Esquema para um bit da porta P1.

O latch de um bit da porta P1 (um bit do SFR P1) é representado por um flip-flop D, no

qual se escreve um valor do bus interno através de um pulso Write to Latch gerado pela CPU. A

saída do latch é colocada no bus interno através de um sinal Read Latch gerado pela CPU. O nível

do pino da porta é colocado no bus interno através do sinal Read Pin, também gerado pela CPU.

Algumas instruções que lêem o estado da porta operam com Read Latch enquanto outras operam

com Read Pin. Isto será visto com mais detalhes.

Quando escreve na porta:

0 → *Q=1 → FET ON → saída=

1 → *Q=0 → FET OFF → saída=1 (pull-up)

Para ser usado como entrada, o latch da porta deve estar em 1; isso desconecta o driver

FET da saída. Assim, o pino da porta vai para um nível alto, levado pelo pull-up. Esse pino poderá ser

6 - 4 MICROCONTROLADORES (MCS-51)

Quando AOF=1, tem-se na saída a porta P3. Assim, se AOF=1 e for escrito:

0 → Q=0 → G=1 → FET ON → saída=

1 → Q=1 → G=0 → FET OFF → saída=1 (pull-up)

Quando o latch de P3 contém 1, a saída pode ser controlada pelo sinal "Alternate Output

Function - AOF". Já foram estudadas as funções alternativas geradas através de P3. Se o latch de P

está em 0, o pino da porta estará em zero e as diversas funções alternativas não estarão disponíveis.

P3 também é uma porta quasi-bidirecional.

6.2.3. Porta P

O esquema da figura 6.4 ilustra a porta P2. Por esta porta também sai o byte mais

significativo dos endereços.

READ LATCH ADDRESS

CONTROL PULL-UP

PINO DA CPU

INTERNO

M

I

CTRL

BUS INTERNO

WRITE TO LATCH

D Q CLK Q

Q I

MUX 2/

READ PIN

G (^) FET

S

D

Vcc

SFR P

LATCH

P2.i

Figura 6.4. Esquema para um bit da porta P2.

O funcionamento é muito semelhante aos casos anteriores.

Se o CONTROL = 0 e for escrito:

0 → Q=0 → M=0 → G=1 → FET ON → saída=

1 → Q=1 → M=1→ G=0 → FET OFF → saída=1 (pull-up)

Se o CONTROL = 1, ADDRESS controla o nível no pino. Assim, com CONTROL = 1:

ADDR=0 → M=0 → G=1 → FET ON → saída=

ADDR=1 → M=1 → G=0 → FET OFF → saída=1 (pull-up)

De acordo com o nível lógico do sinal de CONTROL, permite-se a saída ao latch de P

ou ao byte alto de endereço.

MICROCONTROLADORES (MCS-51) 6 - 5

6.2.4. Porta P

A figura 6.5 ilustra o esquema elétrico da porta P0. Esta porta é a mais complexa pois

atende a três funções:

  • bus de dados da CPU
  • byte menos significativo dos endereços
  • porta paralela (bidirecional verdadeira)

READ LATCH ADDRESS Y DATO CONTROL^

Vcc

PINO BUS INTERNO

WRITE TO LATCH

D Q CLK Q

I

I

CTRL DA CPU

MUX 2/

READ PIN

F

G

S

D

F

G

S

D

SFR P

LATCH

P0.i

Figura 6.5. Esquema para um bit da porta P0.

A porta P0 difere das demais por ser utilizada para transportar dados durante as

operações com a memória e portanto necessita ser bidirecional verdadeira. Se ela está sendo

utilizada como porta paralela, então CONTROL = 0. Com isso G1=0 e F1 está sempre cortado (não

existe pull-up).

Se CONTROL=0 e for escrito: :

0 → *Q=1 → G2=1 → F2 ON → saída=

1 → *Q=0 → G2=0 → F2 OFF → a saída flutua (não há pull-up).

Note que, quando se escreve 1, a porta pode ser utilizada como uma entrada de alta

impedância. Para transformá-la em uma porta quase-bidirecional basta colocar externamente

resistores de pull-up.

Quando a porta é utilizada para enviar endereços ou dados, CONTROL =1 e a saída

depende de ADDRESS/DATA (ADR/DT):

ADR/DT=0 → G1=0 → F1 OFF e G2=1 → F2 ON → saída=

ADR/DT=1 → G1=1 →F1 ON e G2=0 → F2 OFF → saída=

(nunca se terá F1 ON e F2 ON ==> curto-circuito).

Para que a porta possa ser usada na leitura de memória é necessária alta impedância;

nesse caso CONTROL=0 e se força uma escrita (com 1) no latch de P0.

MICROCONTROLADORES (MCS-51) 6 - 7

Na figura 6.8 está o esquema completo da saída da porta paralela.

VCC

RETARDO

2 CLOCKS 1

ENHANCEMENT

MODE FET

DEPLETION

MODE FET

PINO DA

Q

Vss

G

S

D

G FET

S

D

G

S

D

(Q = 0 -- >1)

CPU

Figura 6.8. Acionamento do FET (enhanced mode) nas transições de 0→1. (HMOS)

Note que se *Q vai de 1→0, durante dois períodos de clock a saída (S) da porta NOR

será 1, permitindo que o enhancement mode FET entre em paralelo com o FET (pull-up) normal,

dando maior capacidade de corrente. Este esquema é utilizado em HMOS. Nas famílias CHMOS o

esquema varia um pouco mas a idéia é a mesma.

Os buffers de saída das portas P1, P2 e P3 podem acionar até 4 cargas LS TTL. Eles

podem ser acionados (trabalhando como entrada) por circuitos TTL e NMOS. Como possuem pull-up

interno, essas portas também podem ser acionadas por TTL de coletor aberto mas as transições de 0

→1 não serão rápidas porque o pull-up tem baixa capacidade de corrente.

A porta P0 pode acionar até 8 LS TTL (modo BUS). Quando opera como porta paralela,

é necessário pull-up externo para acionar outras entradas.

Algumas instruções de leitura utilizam o dado armazenado no latch, enquanto outras

usam o estado do pino. As instruções que usam o dado do latch são aquelas que lêem o valor,

(possivelmente) o alteram e o escrevem de novo (read-modify-write). Quando o destino do operando

é uma porta ou um bit da porta, é utilizado o dado do latch e não o valor do pino. A seguir está uma

lista destas instruções que operam com o dado do latch:

Instrução Exemplo

ANL ANL P1,A

ORL ORL P2,A

XRL XRL P3,A

JBC JBC P1.1,LB (pula se bit=1 e zera o bit)

CPL CPL P3.

INC INC P

DEC DEC P

6 - 8 MICROCONTROLADORES (MCS-51)

DJNZ DJNZ P3,label

MOV PX.Y,C MOV P1.0,C

CLR PX.Y CLR P1.

SETB PX.Y SETB P1.

Pode parecer que as 3 últimas instruções não são do tipo "read-modify-write". Na

realidade, é lido todo o byte da porta, o bit considerado é alterado e o novo byte é devolvido para a

porta.

Uma razão para usar o dado do latch e não o valor do pino é evitar um equívoco na

interpretação do nível de tensão do pino, como por exemplo, quando um bit de uma porta está sendo

usado para acionar a base de um transistor.

VCC

LED

R

P1.0 (^) NPN

Figura 6.9. Bit 0 da porta 1 sendo usado para acender um led através de um transistor.

Quando P1.0=1 → LED aceso

Quando P1.0=0 → LED apagado

Sem dúvida quando P1.0=1 a tensão no pino vai estar em 0,7 V, o que é um 0 lógico em

nível TTL. Espera-se que a instrução CPL P1.0 inverta o estado do led. Supondo que o led esteja

aceso (P1.0=1), se a CPU usa o valor do pino, ela vai obter 0 e isto fará P1.0=1, quer dizer, não vai

mudar o estado do led. O melhor é usar o dado do latch, que está em 1.

6 - 10 MICROCONTROLADORES (MCS-51)

Se Acc e CY são inicializados com estes valores, basta uma rotação com CY (RLC A)

para mudar o led que deve ficar aceso. A cada rotação escreve-se o conteúdo de Acc em P1.

;PISCA2.ASM

RTD EQU 60000 ;65536>RTD>

VERMELHO EQU P1.

AMARELO EQU P1.

VERDE EQU P1.

DEFSEG PROG, CLASS=CODE, START=

SEG PROG

ORG RESET

INIC MOV A,#01001001B ; 01 001 001

CLR C

AQUI MOV P1,A

ACALL RETARD

RLC A

SJMP AQUI

;ROTINA PARA GERAR UM RETARDO

RETARD MOV R7,# HIGH RTD

L1 MOV R6,# LOW RTD

L2 DJNZ R6,L

DJNZ R7,L

RET

END

EXERCÍCIO 6.2. CHAVE1, CHAVE2 E CHAVE

Usando os três leds como um contador de três bits, construir um programa que conte os

acionamentos da chave SW2 (a contagem será observada nos três leds). Note que a chave não

necessita de pull-up porque usa o pull-up interno da porta. A figura 6.11 ilustra as conexões.

VCC

P1.O

P1.

3 U5B 4

74LS

5 U5C 6

74LS

R

R

LEDVERMELHO

LEDAMARELO

R

LEDVERDE

U5D

74LS

P1.

P1.

SW

PUSHBUTTON

Figura 6.11. Conexões de leds e chave no circuito de práticas.

No primeiro programa será usada uma solução simples, que tem o problema de

bouncing.

MICROCONTROLADORES (MCS-51) 6 - 11

;CHAVE1.ASM

SW2 EQU P1.

DEFSEG PROG, CLASS=CODE, START=

SEG PROG

ORG RESET

INIC CLR A ;ZERAR CONTADOR

MOV P1,A ;APAGAR LEDS

SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA

AQUI1 JB SW2,AQUI1 ;AGUARDAR ACIONAMENTO

INC A

MOV P1,A ;DAR SAÍDA AO CONTADOR

SETB SW2 ;GARANTIR P1.3 COMO ENTRADA

AQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVE

SJMP AQUI

END

No segundo programa é apresentada uma solução para eliminar o bouncing utilizando

retardos. Ao detectar uma transição na chave, o programa aguarda um tempo para que se extinga o

bouncing. O tempo que se deve aguardar é determinado de forma empírica.

;CHAVE2.ASM

; NESTE PROGRAMA SE PRETENDE ELIMINAR O BOUNCING COM RETARDOS

; O VALOR DO RETARDO É PARTICULAR PARA CADA CIRCUITO

; (DEPENDE DO TAMANHO DOS CABOS, QUALIDADE DA CHAVE, ETC)

; RECOMENDA-SE: DETERMINAR EMPIRICAMENTE O MELHOR RETARDO PARA CADA CIRCUITO

RTD EQU 500 ;RTD>

SW2 EQU P1.

DEFSEG PROG, CLASS=CODE, START=

SEG PROG

ORG RESET

INIC CLR A ;ZERAR CONTADOR

MOV P1,A ;APAGAR LEDS

SETB SW2 ;PROGRAMAR P1.3 COMO ENTRADA

AQUI1 JB SW2,AQUI1 ;AGUARDAR ACIONAMENTO

INC A

MOV P1,A ;DAR SAÍDA AO CONTADOR

SETB SW2 ;GARANTIR P1.3 COMO ENTRADA

ACALL RTD ;ELIMINAR BOUNCING

AQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVE

ACALL RTD ;ELIMINAR BOUNCING

SJMP AQUI

;ROTINA PARA GERAR UM RETARDO

RETARD MOV R7,# HIGH RTD

L1 MOV R6,# LOW RTD

L2 DJNZ R6,L

DJNZ R7,L

RET

END

A solução de aguardar um tempo depois de detetar uma transição na chave funciona

bem, mas oferece duas principais desvantagens. A primeira é que se aguarda um intervalo de tempo

fixo, ou seja, se a chave de baixa qualidade é trocada por uma de melhor qualidade e que possua

pouco bouncing, tem-se que mudar o programa. A segunda desvantagem é sua vulnerabilidade a

ruídos pois estes podem provocar acionamentos indevidos. O programa chave 3, apesar de ser

simples, soluciona estes problemas. Usam-se duas rotinas que detectam transições de 0→1 e de 1→

0; o que se especifica é quanto tempo a chave deve estar em 0 ou em 1 para que se considere o

acionamento válido (para que se considere o fim do bouncing).