Você está na página 1de 13

MCS51

Módulo 3 Prof. Celso

PORTAS PARALELAS

O 8051 possui 4 portas paralelas (P0, P1, P2 e P3) de 8 bits cada uma. Além
de poderem ser configuradas como pinos de entrada e/ou de saída, algumas portas
podem ser usadas para outras funções:

P0 – byte inferior de endereço e dados. Para acessar memória externa.


P2 – byte superior de endereço. Para acessar memória externa.
P3 – Bit 0 – RXD – entrada serial
Bit 1 – TXD – saída serial
Bit 2 – INTO – Interrupção externa 0
Bit 3 – INT1 – Interrupção externa 1
Bit 4 – T0 – entrada externa contador 0
Bit 5 – T1 – entrada externa contador 1
Bit 6 – WR – escrita memória externa de dados
Bit 7 – RD – leitura memória externa de dados

OPERAÇÕES DE ESCRITA E LEITURA NA PORTA

Escrita: basta escrever 0 ou 1 na porta. Exemplo;


MOV P1, #03h ; escrevendo nos 8 pinos da porta P1 o valor 0000 0011
SETB P1.6 ; escrevendo o valor “1” no bit 6 da porta P1
CLR P1.0 ; escrevendo o valor “0” no bit 0 da porta P1

Leitura: para configurar como leitura é só escrever o valor “1” nos bits de interesse.
Por default, quando se liga o microcontrolador, todas as portas possuem o valor “1”
nos seus bits.

** Se a porta for utilizada como leitura, não pode escrever “0” nela. **

Configuração PORTA P1

31
MCS51
Módulo 3 Prof. Celso

CONFIGURAÇÃO PORTA P3

CONFIGURAÇÃO PORTA P2

32
MCS51
Módulo 3 Prof. Celso

CONFIGURAÇÃO DA PORTA P0

** Para a porta P0 é necessário resistores de Pull-up.**

Exemplo 1: Ler o pino 3 da porta P2, se for 1 escrever o conteúdo do acumulador na


porta P3, se for 0 não fazer nada. Deixar o programa em loop.

Fluxograma:

Inicio Org 0h

Inicio: JNB P2.3, salta ; se o pino=0 pula


S MOV P3,A ; senão (P3)  (A)
P2.3 = 1
Salta: SJMP Inicio ; volta para inicio
N
P3  A
END ; fim de programa

33
MCS51
Módulo 3 Prof. Celso

Exemplo 2: Utilizando a figura abaixo fazer um contador de 0 até FFh. A contagem


será incrementada cada vez que a chave Ch1 for pressionada. Se o contador for igual a
“1h” ligar motor, se for igual a “81h” desligar motor. Deixar o programa em loop.

Definição: - Quando a chave Ch1 for pressionada o


bit P1.0 recebe o nível lógico “0” (vide figura).
- necessidade de uma variável para o
contador. Escolhendo o acumulador.
P3.2 = 1  Motor ligado

Inicio

Passos: (A)0h
- Ler o bit 0 da porta P1 (30h) 0H
- se for 0, incrementar contador
senão voltar a ler o pino da porta
- Contador igual a 01h? N
Ch1 = 0
- se sim liga motor e volta ler a porta
senão continua S
- Contador igual a 81h?
- se sim desliga motor e volta ler a porta AA+1
senão volta a ler o pino da porta
N
A=01h?

N S
A=81h?
Liga motor P3.2=1
S

Liga motor P3.2=0

PROGRAMA:
Ch1 EQU P1.0 ; atribui o rótulo Ch1 ao pino P1.0.
motor EQU P3.2 ; atribui o rótulo motor ao pino P3.2
ORG 00h ; posiciona o programa na posição 00h da mem. Flash
Inicio: MOV A, #00h ; inicializa o contador (acumulador) com 0.
Volta: JB Ch1, Volta ; se a chave Ch1 estiver em “1”, não foi pressionada
; fica esperando a chave ser pressionada
JNB Ch1, $ ; espera a chave Ch1 ser solta
INC A ; Ch1 pressionada, incrementa contador (A)
CJNE A, #01h, pula ; se contador ≠ 01h, salta para verificar se é 81h
SETB motor ; se contador = 01h, liga motor
SJMP Volta ; retorna para ler o pino novamente
CJNE A, #81h, Volta ; se contador ≠ 81h, volta ler pino
CLR motor ; se contador = 81h, desliga motor
SJMP Volta ; retorna para ler o pino novamente
END ; fim de programa.

34
MCS51
Módulo 3 Prof. Celso

Conclusão: os comandos JB e JNB são úteis para verificar (LER) os estados dos
pinos (bit) da entrada.
JB P1.2, salta ; testando se o bit P1.2 = 1, se for vai para “salta”
...... ; senão continua o processamento na linha de baixo
JNB P2.5, salta ; testando se o bit P2.5 = 0, se for vai para “salta”
...... ; senão continua o processamento na linha de baixo

Para escrever nos pinos (bit) são utilizados os comandos: SETB e CLR
SETB P1.1 ; escrevendo “1” no bit P1.1 (setando)
CLR P3.5 ; escrevendo “0” no bit P3.5 (zerando)

Exemplo 3: Ler a porta P1 e verificar se P1 é igual a 03h, ou 76h, ou FEh. Se for igual
a um desses três valores, jogar na porta P2 o valor FFh, senão jogar em P2 o valor
00h. Deixar o programa em loop.

Inicio
Org 0h ; posiciona o programa na
; posição 00h da mem. Flash
inicio: mov p2,#00h ; inicializa P2 com 00h (P2)  0h
LER: mov a, p1 ; lê a porta P1
cjne a,#03h, T76 ; se a≠03h, testa com 76h
sjmp setar ; se a=03h, pula p/”setar” P2
T76: cjne a,#76h, TFE ; se a≠76h, testa com FEh A  P1
sjmp setar ; se a=76h setar porta P2
TFE: cjne a,#0feh, LMP ; limpar P2 S
(A)=03h
setar; mov p2,#0ffh ; setando P2
sjmp LER ; volta ler P1 N
LMP: mov p2,#00h ; zerando P2 S
sjmp LER ; volta ler P1 (A)=76h

END N
S
Conclusão: Comando MOV usado (A)=FEh
para ler ou escrever na porta toda:
Escrevendo na porta: N
MOV P1, #0Fh
Lendo da porta: P2=FFh P2=00h
MOV A, P3

Para comparar valor da porta: jogar


valor no acumulador (ou Rn) e usar
o comando CJNE
MOV A, P2
CJNE A,#00h, volta
(enquanto conteúdo do A≠ 0h, pula
para “volta” senão continua)

35
MCS51
Módulo 3 Prof. Celso

Exercício 1) Dado o esquema abaixo, fazer um programa que mostre o valor em


binário nos leds de quantas vezes a chave Ch foi pressionada. Neste exercício,
esperar a chave Ch ser solta para contar. Como há 4 leds a contagem irá de 0
(0000b) até Fh (1111h).

OBS: Note que nesta


configuração, o
acendimento do led é
invertido, isto é:

Para ter todos leds


apagados o valor na
porta tem que ser 0Fh,

Para acender todos os


leds o valor na porta
tem que ser 00h

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

36
MCS51
Módulo 3 Prof. Celso

Exercício 2) Dado o esquema abaixo, fazer um programa que acenda o led 0 e que
leia a chave Ch. Se a chave Ch estiver aberta (P3.1=1), o led aceso deve ficar
rotacionando à esquerda a cada 1 segundo. Se a chave Ch estiver fechada
(P3.1=0), o led aceso deve ficar rotacionando à direita a cada 1 segundo.

Para o atraso, faça uma rotina em loop. Calcule quantos ciclos de máquina devem
ser utilizados para obter o atraso de 1 segundo, considerando um clock de 12 MHz

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

37
MCS51
Módulo 3 Prof. Celso

Exercício 3) Uma caixa d’água possui 2 sensores (A e B). Quando a água bate no
sensor, ela gera um nível lógico “1” caso contrário é gerado um nível lógico “0”.
Deve-se ligar uma bomba d’água (S = 1) para encher a caixa até o nível B quando,
então, a bomba é desligada (S=0). A bomba deve permanecer desligada até que
não haja água no sensor A (A=0). A figura seguinte mostra um sistema automático
para realizar esta automação. Faça o programa para o sistema.

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

38
MCS51
Módulo 3 Prof. Celso

Exercício 4) Faça um programa utilizando o diagrama abaixo para mostrar no


display de sete segmento a conversão dos números binários que estão na porta P2:

Notar que os leds do display são acesos em nível lógico “0”. Por exemplo, para
mostrar o número 2, deve-se acender os leds “a, b, d, e, g”, portanto:

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0


g f e d c b a
X 1 1 0 0 1 0 0

P1 = 64h ou B4h, caso P1.7 seja 0 ou 1


Faça o programa utilizando uma tabela (DPTR)

________ _____________ ; posiciona o programa na posição 00h da mem. Flash

________ _____________ ; carregue DPTR com o endereço inicial da tabela


________ _____________ ; lê a porta P2
________ _____________ ; mascara os 4 bits mais significativos (AND)

________ _____________ ; busca o valor na tabela do endereço DPTR+Indice


________ _____________ ; mova o valor para a porta 1 p/mostrar no display

________ _____________ ; voltar para ler novamente a porta P2


; Valores da tabela:
________ ________________________________________________________
________ ________________________________________________________
________ _____________ ; fim de programa

39
MCS51
Módulo 3 Prof. Celso

Exercício 5) Faça uma calculadora com 2 bytes (um da porta P1 e outro da porta
P2). Utilize a seguinte seleção de operação e os seguintes armazenamento:
P0.0 =1 – soma (30h) – acumulador (31h) - carry
P0.1 =1 – subtração (30h) – acumulador (31h) – carry
P0.2 =1 – multiplicação (30h) – MSB (B) (31h) – LSB (A)
P0.3 =1 – divisão (30h) – quociente (A) (31h) – resto (B)
Dica: faça no início do programa um menu verificando esses bits de seleção. Se
um dos bits estiver em “1” saltar para a rotina adequada.

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

40
MCS51
Módulo 3 Prof. Celso

Exercício 6) Um estacionamento possui 100 vagas e possui uma porta de entrada e


uma porta de saída. Fazer um programa para automatizar o estacionamento
considerando o esquema abaixo:

considere:
Sensor A = 1  carro querendo entrar Sensor E = 1  carro querendo sair
Sensor B = 1  carro entrando Sensor F = 1 carro saindo
Fim de curso C = 1  porta aberta FC G = 1  porta aberta (saída)
Fim de curso D = 1  porta fechada FC H = 1  porta fechada (saída)

Motores M1A/M2A M1B/M2B Motor


0 0 motor travado
0 1 gira sentido anti-horário
1 0 gira sentido horário
1 1 motor livre

Funcionamento: se houver um carro querendo entrar (sensor A=1), o sistema deve


abrir a porta de entrada se:
- houver vagas disponíveis,
- ou caso não exista vaga, houver um carro querendo sair.
Para abrir a porta o motor deve ser acionado no sentido anti-horário e deve
permanecer ligado até atingir o fim de curso C, quando então deve ser desligado.
Deve-se esperar o carro entrar verificando o sensor B que deverá ir de 0 para 1 e
novamente para 0, onde então o motor é ligado em sentido horário até fechar a
porta (FC D=1). A porta de saída tem funcionamento idêntico.

41
MCS51
Módulo 3 Prof. Celso

Exercício 7) Considere o esquema abaixo com um teclado simples. Faça um


programa que abre e fecha uma trava se for pressionada a seqüência das teclas; 1-
7-2. Caso não seja pressionada a seqüência certa, o programa deve acionar um
buzzer. (OBS: espere sempre a tecla ser solta para que a mesma não seja lida mais
de uma vez). Estude o esquema, qual valor deve ter na porta P1 para ler a tecla 5?

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

42
MCS51
Módulo 3 Prof. Celso

Exercício 8) Considere o esquema abaixo com um teclado em matriz. Faça um


programa que abre e fecha uma trava se for pressionada a seqüência das teclas; 1-
7-2. Caso não seja pressionada a seqüência certa, o programa deve acionar um
buzzer. (OBS: espere sempre a tecla ser solta para que a mesma não seja lida mais
de uma vez). Estude o esquema, por exemplo, com se deve ler a tecla 5?

________ _____________ ; __________________________________________


________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________
________ _____________ ; __________________________________________

43

Você também pode gostar