Você está na página 1de 9

Instituto Superior de Engenharia

Electrónica e Computadores

Microcontrolador 8051
Sistemas Digitais
(Exercícios de apoio às aulas de laboratório)

Miguel Leitão Lino Figueiredo Paula Viana


jml@dee.isep.ipp.pt lino@dee.isep.ipp.pt pviana@dee.isep.ipp.pt
http://dee.isep.ipp.pt/~jml http://dee.isep.ipp.pt/~pviana

Outubro 1996
Sistemas Digitais Microcontrolador 8051

1.
a) Construa uma rotina que copia uma string colocada na RAM externa, com início na
posição 8200H e terminada com o byte 0, para a posição 8300H.
b) Determine o número de bytes da string. Coloque o resultado na posição 40H da
RAM interna.

2.
Elabore uma rotina que faça a soma de dois números com 24 bits (3 bytes) cada um. O
primeiro está contido nas posições (R0+2), (R0+1), (R0) da RAM externa. O segundo
número está nas posições (R1+2), (R1+1), (R1). O resultado deve ser colocado na
posição do primeiro número.

3.
Utilizando a rotina feita em 2, elabore um programa que determine a soma de 6
números de 3 bytes cada um. Os números a somar estão colocados a partir da posição
8200H. O resultado deve ser colocado em 8300H.

4.
Considere que dispõe de uma tabela de números entre 1 e 255 (um número por byte)
que começa na posição 8200H e termina com o byte 0 (zero).
a) Faça uma rotina que conte o número de ocorrências do valor contido no registo R7
na tabela e retorne o resultado no registo R6.
b) Utilize a rotina efectuada em a) para gerar uma tabela de ocorrências para todos os
valores possíveis. Esta tabela deverá ter 255 elementos, sendo o primeiro elemento o
número de ocorrências do valor 1 na tabela original. O segundo elemento será o
número de ocorrências do valor 2 na tabela original, etc..

Exemplo:
8200H: 5 OcorrTab: 1
3 3
2 1
2 0
5 2
2 0
7 1
1 0
0 0

1
Sistemas Digitais Microcontrolador 8051

5.
a) Utilize um timer interno do 80535 para criar uma rotina de espera de 0.05
segundos.
b) Utilizando a rotina feita em a), crie uma pausa de 5 segundos.

6.
A figura representa um depósito medidor de gasolina.

A bomba B1 destina-se a trazer a gasolina de I para o depósito. A bomba B2 retira


gasolina do depósito e transporta-a para II. N1 e N2 são sensores de nível de gasolina
no depósito. Entre o nível N1 e o nível N2, o depósito tem a capacidade de 10 litros.

Pretende-se que quando o operador pressiona o botão P, sejam fornecidos


exactamente 50 litros de gasolina ao receptor colocado em II.

Faça um programa para 8051 que controle as bombas B1 e B2 de maneira a obtermos


o funcionamento desejado.

7.
Construa uma rotina que ordene por ordem crescente os elementos de uma tabela de
bytes terminada com o byte 0 (zero).
Sugestão: Utilize a rotina desenvolvida em 4. para gerar uma tabela de ocorrências.

2
Sistemas Digitais Microcontrolador 8051

8.
A figura abaixo representa uma máquina automática de furar.

A parte eléctrica da máquina é constituída por dois motores (MA, MB), um botão de
pressão (m) e três sensores de fim de curso (a, b, c). O veio do motor MB está
directamente acoplado à broca. MA é um motor com dois sentidos de rotação, e
destina-se a movimentar verticalmente a broca. O movimento ascendente da coluna é
obtido activando MAa. Quando se liga MAd a coluna desce.
Funcionamento:
- A peça a furar é colocada no posto de carga.
- Logo que operador accione o botão de pressão m, o pistão V é activado
deslocando a peça até que o fim de curso c seja accionado.
- O motor de deslocamento de coluna MA entra em funcionamento 3 segundos
depois da activação do pistão V.
- A coluna desce até tocar em b, altura em que MA é desligado
- Após uma pausa de 3 segundos, MA é ligado em sentido contrário subindo a
coluna até accionar a.
- Neste momento V é desligado e a peça é retirada do posto de carga. A máquina
fica pronta para novo ciclo de funcionamento.

Implemente um programa que controle MB, MAd, MAa e V.

3
Sistemas Digitais Microcontrolador 8051

9.
Dispõem-se na posição 8200H da memória uma string de dígitos em BCD
empacotado (2 dígitos por byte). Pretende-se desempacotar os dígitos, criando uma
nova tabela na posição 8300H com um dígito por byte. Os dígitos desempacotados
devem ser colocados nos quatro bit menos significativos de cada byte. A primeira
posição de cada string indica o número de bytes de comprimento.

Exemplo:

8200H 03H 8300H 06H


43H 04H
29H 03H
97H 02H
09H
09H
07H

10.
Faça uma rotina que realize a função inversa à da rotina feita em 9.

11.
a) Construa uma rotina que retorne no registo R6 o número de bits do registo R4 que
estão a um (set bits).
b) Para uma tabela de bytes com início em 8201H e comprimento em 8200H, utilize a
rotina realizada em a) para gerar uma nova tabela na posição 8300H em que cada
elemento indica o número de bits a um (set bits) do elemento respectivo da tabela
original.

Exemplo:

8200H 06H 8300H 06H


43H 03H
00H 00H
97H 05H
A0H 02H
7FH 07H
29H 03H

12.
Construa uma subrotina em assembly 8051 que determine o produto de dois números
de 16 bits cada um.
Utilize a função mult do 8051.

4
Sistemas Digitais Microcontrolador 8051

13.
a) Construa a rotina GET_BIT que recebe no registo R3 um número entre 0 e 7,
destinado a seleccionar um de entre os 8 bits de um byte. A rotina deverá retornar na
flag de Carry o estado do bit R3 do byte apontado por R0.

b) Construa a rotina PUT_BIT que recebe no registo R3 um número entre 0 e 7,


destinado a seleccionar um de entre os 8 bits de um byte. A rotina deverá actualizar o
bit R3 do byte apontado por R0 com o estado da flag de Carry.

14.
Desconhece-se o conteúdo de um buffer em memória constituído por 128 bits (16
bytes * 8 bits), com início na posição 8200H.

a) Escreva em Assembly 8051 a rotina READ_BIT que retorna na flag de Carry o bit
seleccionado pelo código do registo A. Os bits 7 a 4 do registo A, identificam a
posição (0 a 15) no buffer, do byte a utilizar. Os bits 2 a 0 identificam um dos bits (0 a
7) do byte referido.
Sugestão: utilize a rotina GET_BIT realizada em 14. a).

7 6 5 4 3 2 1 0
índice de uma posição do código de um dos bits
buffer (0 a 15) (0 a 7)

b) Escreva em Assembly 8051 a rotina WRITE_BIT que coloca o bit 3 do registo A


numa posição do buffer. A posição a utilizar é seleccionada como na alínea anterior.
Sugestão: utilize a rotina PUT_BIT realizada em 14. b).

15.
Implemente um controlador de semáforos para automóveis, aplicável num cruzamento
de 4 ruas. Pretende-se que a autorização de passagem (luz verde) seja atribuída a uma
rua de cada vez. Durante o tempo em que é atribuída luz verde a uma rua, todas as
outras terão obrigatoriamente luz vermelha. O tempo em que a luz verde está acesa é
constante para todas as ruas e igual a 20 segundos. A luz amarela deve acender
durante 2 segundos.

16.
Um sistema baseado no 8051 utiliza as duas interrupções externas disponíveis e ainda
a interrupção gerada por 1 dos timers.
As condições em que se pretende que o sistema funciona são as seguintes:
• uma interrupção externa deve ser sempre atendida imediatamente e deve copiar o
que está na posição 8200H para a posição 8300H
• a outra interrupção externa deve escrever o que está em 8300H na porta P1

5
Sistemas Digitais Microcontrolador 8051

• a interrupção gerada pelo timer deve executar uma rotina que copia o que está na
porta P1 para A
• No caso de estas duas interrupções acontecerem em simultâneo, deve ser atendida a
interrupção externa.

Faça o software de programação das interrupções a ser incluido no programa principal


e as rotinas de atendimento das interrupções.

17.
Considere um microcontrolador a monitorizar um sistema em que se utiliza o porto 1
como I/O e os pinos TXD e RXD para comunicar com um PC.

P1.0
TXD

Porta de entrada P1.3 PC


RXD
Sensor de saída
Sensor de entrada P1.7

O porto 1 tem os 4 bits mais significativos definidos como entradas sendo os restantes
saídas. Os bits P1.7 e P1.6 são utilizados para controlar o nº de pessoas existentes num
edifício (P1.7 detecta saída de pessoas e P1.6 detecta entrada de pessoas). Sempre que
o número de pessoas no interior do edifício atinge 64, deve ser trancada a porta de
entrada através de P1.3.

A comunicação com o PC é do tipo master-slave, em que o PC é o master, e a


comunicação faz com 1 baudrate de 4800 bits/s, paridade par e 1 stop bit.

PC pode dar 2 tipos de instruções ao 8051:

• Escrita - actualização das saídas do 8051

1 0 1 0 Valor a colocar nas


saídas
Código de escrita

• Leitura - pede ao 8051 que lhe envie o estado das duas entradas e o valor do
contador

0 1 0 1
Código de leitura

6
Sistemas Digitais Microcontrolador 8051

Resposta do 8051 a um pedido de leitura:

Estado Valor do Contador


das duas
entradas

Sempre que haja erro de paridade na recepção de informação, esta deve ser ignorada.
Elabore o software que implementa este protocolo de comunicação.

18.
Um sistema automático de rega é controlado por um microcontrolador 8051 com um
clock de 12MHz. O sistema é constituído por 10 pontos de saída de água organizados
em 3 circuitos distintos, como mostra a figura.

A interface ao 8051 é efectuada da seguinte forma:

• P1.0, P1.1 e P1.2 activam respectivamente os circuitos de água 1, 2 e 3.


• INT0 está ligado a um relógio externo que controla os horários de rega gerando
um impulso sempre que é atingida a hora programada.
• INT1 permite uma paragem de emergência
• P1.7 permite dar ordens de arranque do sistema de rega fora dos horários
programados
• P1.5 e P1.6 fornecem valores de humidade do solo:

P1.6 P1.5 Humidade


0 0 Muito seco
0 1 Seco
1 0 Húmido

7
Sistemas Digitais Microcontrolador 8051

Dependendo do valor de humidade do solo, deve ser executada uma das seguintes
sequências de rega:
Piso Muito Seco Circuito1 - 2 minutos
Circuito2 - 4 minutos
Circuito3 - 2 minutos
Piso Seco Circuito1 - 2 minutos
Circuito2 - 2 minutos
Piso Molhado Circuito1 - 1 minutos
Circuito2 - 1 minutos
Durante a execução de uma sequência de rega devem ser ignoradas novas ordens de
rega que possam surgir.
Implemente o software para o 8051 que faz o controlo do sistema de rega.

19.
Um sistema utiliza um microcontrolador 8051 com um CLK a 12MHz para controlar
a entrada e saída de pessoas num edifício. Para tal existem 2 sensores, S1 ligado à
porta P1.0 e S2 ligado a P1.1, que indicam respectivamente a entrada e saída de
pessoas.
Foram utilizados sensores ópticos que quando detectam a presença de uma pessoa
ficam no nível lógico 1, mantendo-se neste estado até que a pessoa deixe de ser
detectada.

a) Desenvolva o programa, em linguagem do 8051, que controla a entrada/saída de


pessoas actualizando um contador que indica o número de pessoas dentro do edifício.

b) Sempre que o nº de pessoas no edifício for igual ou superior a 128, deve ser
activada uma sirene. Para isso deve ser gerada uma onda quadrada de frequência de
10KHz (na porta P1.7) que deve ser desactivada quando o nº de pessoas for inferior a
128.
Faça as alterações que ache necessárias ao programa da alínea a) de forma a que este
faça o controlo completo do sistema.

Nota: durante o período de geração da onda quadrada, deve manter-se o controlo das
entradas/saídas do edifício.