Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
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
Fluxograma:
Inicio Org 0h
33
MCS51
Módulo 3 Prof. Celso
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
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
35
MCS51
Módulo 3 Prof. Celso
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
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:
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
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)
41
MCS51
Módulo 3 Prof. Celso
42
MCS51
Módulo 3 Prof. Celso
43