Conceitos envolvidos: a) Contadores e Temporizadores b) Interface serial RS232 c) Interrupções Lista de Exercícios 2 1. Fazer um contador hexadecimal que coloque o valor de contagem na porta P1 em intervalos de 640 ciclos de máquina. Utilize o Timer 1. 2. Fazer um programa que gere uma onda quadrada na porta P1.7 com período de 2.56ms, considerando que o oscilador do microcontrolador é alimentado por um cristal de 12MHz. Utilize Timer 0 no Modo 0. 3. Fazer um programa que utilize um timer interno do 8051 para criar um tempo de atraso de 0.05 segundos. Utilizando este programa como uma sub-rotina, escrever um programa que atrase 5 segundos. 4. Um sistema baseado no 8051 utiliza as duas interrupções externas disponíveis e ainda a interrupção gerada por 1 dos Temporizadores/Contadores. As condições em que se pretende que o sistema funcione são as seguintes: a interrupção externa 0 deve ser sempre atendida imediatamente e deve copiar o que está na posição de RAM externa 4000H para a posição 4200H; a interrupção externa 1 deve escrever o que está em 4200H na porta P1; a interrupção gerada pelo timer deve executar uma rotina que copie o que está na porta P2 para a posição 4000H da RAM externa; No caso de duas interrupções acontecerem simultaneamente, deve ser atendida a interrupção externa. 5. Considere o Controlador de Nível da figura operando da seguinte maneira: a) Dois sensores S1 e S2 emitem nível lógico zero se estiverem fora do líquido e nível lógico 1 se estiverem imersos no líquido.
b) Uma válvula V1, acionada pelo bit P1.0 de um microcontrolador 8051 drena o reservatório e uma válvula V2 acionada pelo bit P1.1 enche-o com líquido. c) Inicialmente o reservatório está vazio, ou seja, com os dois sensores em nível lógico zero. Escrever um programa em Assembly do 8051 que mantenha o nível do líquido próximo à metade do reservatório (1/2 H) automaticamente, utilizando as entradas de Interrupções assinaladas, observando que as mesmas sentem a mudança de borda (descida) quando o líquido passa pelos sensores (S1 Drenando e S2 enchendo) 6. Escrever um programa em Assembly do 8051 que controle o dispositivo de teste térmico de materiais, mostrado na figura. Um recipiente, com determinada substância sob teste, deve ser baixado (Dir = P2.7 = 1) através de um Motor (Ligar = P2.6 = 1), dentro de um forno. O Sensor1 detecta a presença do recipiente e envia uma descida de borda ao pino Int0 do microprocessador. O micro pára o Motor (Ligar = P2.6 = 0) e aciona o aquecimento do forno (P1.2 =1) durante aproximadamente 500 ms. Desliga o aquecimento, inverte o sentido do Motor (Ligar = P2.6 = 1) (Dir = P2.7 = 0), erguendo o recipiente até a posição do Sensor2, que opera da mesma forma que o Sensor1, mas usando a Interrupção Int1. Quando Int1 receber uma descida de borda, o micro deve parar o Motor (Ligar = P2.6 = 0) e acionar o resfriamento (P1.0 =1) durante aproximadamente 500 ms. O ciclo deve ser repetido 3 vezes e parar. Considerar o Cristal da CPU de 12 MHz. a) Fornecer o programa em Assembly b) Fornecer os parâmetros de programação dos tempos envolvidos. 7. Dado o programa em Assembly do 8051 abaixo responder a cada um dos itens: ORG 0 SJMP PROG ORG 000BH MOV TL1,#00
MOV TH0,#7FH CLR TR0 SETB TR1 RETI ORG 001BH MOV TH0,#7FH MOV TL0,#00 CLR TR1 SETB TR0 RETI PROG: SETB EA SETB ET0 SETB ET1 MOV TMOD,#11H MOV TH0,#7FH MOV TL0,#00 SETB TR0 LOOP: MOV P1,TH0 MOV P2,TH1 SJMP LOOP END a) Se a frequência do oscilador for de 12Mhz, qual o tempo aproximado em milissegundos que o Timer T0 contará até solicitar uma interrupção pela primeira vez? b) Como os contadores mostrados nas portas P1 e P2 do microcontrolador serão vistos externamente considerando-se o tempo de interrupção de cada temporizador? 8) Dois monitores de vídeo estão conectados a um microcontrolador 8051 sendo selecionados através do pino de porta P1.0. Se P1.0 = 0 a comunicação serial RS232 se faz com o monitor de vídeo 1 na velocidade 9600,N,8,1. Se P1.0 = 1 a comunicação via SBUF é com o monitor de vídeo 2 na velocidade 4800,N,8,1. Desenvolver um programa em Assembly do 8051 que ordene crescentemente uma sequencia de números inteiros de 8 bits, armazenada na memória de programa e envie
alternadamente seus valores em ASCII para cada um dos monitores, começando do primeiro número (o menor) para o monitor 1, segundo para o monitor 2 e assim por diante até encontrar o último número da sequencia que obrigatoriamente deve ser FF, parando o programa. Sequencia na memória de Programa: SEQ: DB 89h,56h,0d3h,4eh,0a7h,23h,0ffh,00h,99h,7fh,12h,0ceh,0bch,02h,0fdh,66h 9) Dois microcontroladores 8051 estão se comunicando através de uma interface padrão RS232 com handshaking via RTS e CTS. No esquema abaixo conectar os fios do cabo de comunicação corretamente e responder aos itens: Qual o valor de TH1 em ambos os micros se a taxa de comunicação é de 19200 bauds? Desenhar o formato do caractere se a transmissão é do tipo 19200,N,8,1 Qual o valor de tensão na linha de comunicação quando esta está em repouso? Qual o tamanho, em microssegundos, do Start Bit? 10) Um sistema baseado no Microcontrolador 8051 utiliza as duas interrupções externas e as interrupções geradas pelos Timers/Counters. Escrever um programa em Assembly tal que: A interrupção externa 0, atendida prioritariamente, deve trocar o que está na Porta P1 com o que está contido na posição de RAM externa 5000h. A interrupção externa 1, com baixa prioridade, deve transferir o que está armazenado na RAM externa do endereço 5000h para a RAM interna no endereço 7Fh; A interrupção gerada pelo T/C 0 (a cada 10 ms) com alta prioridade, deve executar uma rotina que copie o que está no endereço da RAM interna 7Fh para a posição 5200h da RAM externa;
A cada 60 milissegundos (aproximadamente) e controlado pelo T/C 1 com interrupção de baixa prioridade, o dado armazenado na RAM externa no endereço 5200h deve ser enviado para a posição de memória externa 5000h. O programa deve ficar em Loop infinito sempre executando o algoritmo acima. Considerar o cristal do oscilador de 12 MHz. 11) Usando sub-rotinas de atraso gerar uma onda quadrada no pino P1.4 de 50 ms de pulso positivo e de 50 segundos de pulso negativo. A onda deve ser disparada somente se o bit da porta P1.3 for igual a 1 e repetida em loop infinito. Considerar o cristal do oscilador de 12 MHz. 12) Fazer um programa em Assembly do 8051 que calcule o valor da frequência de uma onda quadrada entrando pelo pino da Interrupção Externa 0 e envie-e o para a interface serial RS232 a uma taxa de 4800,N,8,1. Considerar o cristal da CPU de 11,0592 MHz. Utilizar a interrupção Int0 sensível à descida de borda. O valor da frequência a ser enviada para a interface serial é um número hexadecimal de 16 Bits. 13) Escrever um programa em Assembly do 8051 que armazene uma tabela com 10 números na memória de programa. Ler cada um dos números e se o número for par, enviar para a porta P1 e para a interface serial RS232 a uma velocidade de 9600,N,8,1. Se o número for ímpar enviar para a porta P2 e para a interface serial RS232, a uma taxa de 4800,N,8,1. Contar o número de números pares e ímpares encontrados e armazenar o valor na RAM externa, nos seguintes endereços: (2030h) = quantidade de números pares e (2031h) = quantidade de números ímpares. O cristal é de 11.0592 MHz.