Instituto Superior de Engenharia Electrónica e Computadores Computadores
Microcontrolador 8051 Sistemas Digitais (Exercícios de apoio às aulas de laboratório)
Miguel Leitão
[email protected] http://dee.isep.ipp.pt/~jml
Lino Figueiredo
[email protected]
Outubro 1996
Paula Viana
[email protected] http://dee.isep.ipp.pt/~pviana
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 3 2 2 5 2 7 1 0
OcorrTab:
1 3 1 0 2 0 1 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 43H 29H 97H
8300H
06H 04H 03H 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 43H 00H 97H A0H 7FH 29H
8300H
06H 03H 00H 05H 02H 07H 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 índice de uma posição do buffer (0 a 15)
3
2 1 0 código de um dos bits (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 das duas entradas
Valor do Contador
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 0 0 1
P1.5 0 1 0
Humidade Muito seco Seco 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.
8