MIC29004-lista2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Arquitetura do Microcontrolador 8051 e Mapa de Memória

  1. Em termos de hardware e software, o que diferencia o acesso à memória do programa do acesso à memória externa de dados, no 8051?
  2. Desenhe o mapa de memória RAM interna do 8051, mostrando a área SFR e a memória de 128 bytes baixos, os bancos de registradores e a área acessível por bits. Aproveite e explique a diferença de acesso entre o endereço 0h da memória interna dados e 0h da memória externa de dados.
  3. Qual é o papel do pino EA no 8051?
  4. Para que servem as entradas XTAL1 e XTAL2 no no 8051?
  5. Para que serve a entrada RST no 8051? Quando ela é utilizada e o que acontece no processador ao ser ativada? Aproveite e diga qual o valor de reset do registrador SP.

Procedimentos para armazenamento e transferência de dados

Nível Elementar - Implementar pedaços de código para:

  1. Incrementar em uma unidade os conteúdos das posições de memória RAM 15H,16H e 17H usando endereçamento indireto.
  2. Armazenar o conteúdo do registrador DPTR na memória externa posições 8000H (DPL) e 9980H(DPH);
  3. Armazenar em DPTR os valores da memória RAM externa 50FAH (DPL) e 6EFD (DPH);
  4. Ler o conteúdo da memória de programa, posição 0154H, para o registrador R6;
  5. Implementar um programa para somar 1 a todos os conteúdos da memória RAM externa entre 1000H e 2000 (obs:use inc DPTR e cjne );
  6. Implementar um programa para copiar as posições de memória externa de dados, posições A000h, A001h e A002h, para as posições BFF1h, E000h e DFACh respectivamente.
  7. Repetir o exercício anterior para copiar as posições A000h, A001h e A002 para as posições de memória interna E0h, E1h e E2h. Use também a instrução;
  8. Quantos bytes possue a instrução movx A,@DPTR ? Justifique.
  9. Quantos bytes possue a instrução mov DPTR,\#FF77H? Justifique.
  10. Qual a diferença entre as instruções abaixo. Explique detalhadamente como o microprocessador executa cada uma delas, citando o Contador de Programa, PSEN, RD e WR, barramento de endereço e de dados.

movc A,@A+DPTR, movx A,@DPTR mov A,@R0 </syntaxhighlight>

  1. Do ponto devista funcional as duas instruções abaixo são idênticas. Por quê? Qual é o código gerado para cada uma delas? Que modo de endereçamento é usado em seus operandos?

mov A,#55h mov E0h,#55H </syntaxhighlight>

Montagem de programa

  • Considere o programa inútil abaixo

ITEM equ 03h

       ORG 0H
       sjmp main

ORG 10h frase: db 'IFSC SJ',0 nums: db 20,35,32 main: mov r1,#3

       mov dptr,#frase
       mov a,#ITEM

loop1: push acc movc a,@a+dptr

       mov b,a
       pop acc
       inc dptr
       djnz r1, loop1
       mov a,b 

loop: ljmp loop

       END

</syntaxhighlight>

  1. Desenhe a memória de programa com os bytes associados ao programa (faça a tradução manual para o código de máquina).
  2. Ao entrar no loop eterno qual o valor de A?
  3. Quantas vezes a memória interna RAM foi acessada (não considere a área SFR)?
  4. Qual o significado da declaração abaixo?

ITEM1 equ 03h </syntaxhighlight>

Controle de Fluxo, Pilha e Subrotinas

  1. Explique o que é a pilha do microprocessador e como funciona as instruções PUSH e POP com apoio do SP ("stack pointer");
  2. Considere o programa inútil abaixo:
       ORG 0H
       mov R0,#05h
       mov R1,#FFh
       push 00h ;R0 banco 0
       lcall rot1

loop: ljmp loop rot1: push 00h ;R0 banco 0

       push 01h ;R1 banco 0
       lcall rot2
       pop 00h ;R0 banco 0
       pop 01h ;R1 banco 0
       ret

rot2: mov R0,#AAh

       ret
       END

</syntaxhighlight>

  1. Suponha que o SP está com valor 07H. Desenhe a memória interna mostrando o estado da pilha (o que tem antes e depois de SP) no momento em que é executada a instrução:

mov R0,#AAH </syntaxhighlight>

  1. Qual o valor de R0 e R1 no momento em que o programa entra em loop eterno?
  2. Implementar um programa para mover o byte AFH para as posições de memória 30H,31H,32H e 33H usando instruções PUSH (dica: inicie SP com 29H);
  3. Implementar um fluxograma e um programa comentado em assembly , na forma de subrotina, para copiar uma frase armazenada na memória de programa, para uma posição da memória interna RAM. Use DPTR e R0 para passar parâmetros.
  4. Implementar um fluxogram e uma subrotina que recebe como parâmetro um endereço de memória RAM externa de dados que é o início de uma cadeia de caracteres terminada em NULL. A rotina deve então contar o número de ocorrências do caracter 'A'. Retornar em R0 o número destas ocorrências.
  5. Implementar um fluxograma e uma subrotina em assembly para copiar gericamente cadeias de caracteres terminadas em "null" (zero) armazenadas na memória de programa para um determinado destino na memória RAM interna ou externa. Use o registrador R0 com 0 ou 1 como parâmetro para detectar o destino dos dados.
  6. Implementar um fluxograma e uma subrotina para copiar blocos de dados da memória externa de dados para a memória interna. A interface desta rotina deve permitir passar o endereço fonte de dados, o destino e o número de bytes a serem copiados.

Contador/Temporizador e Interrupções

  1. Faça uma subrotina em assembly para programar o timer 0 do 8051 para que funcione com as seguintes características: modo 1, controle externo de contagem e funcionamento como temporizador.
  2. Programe o timer 0 para recarga automática e que estoure a cada 100us (suponha clock de 12Mhz). Prepare uma rotina de interrupção que entra a cada estouro deste timer e que complemente a porta P1.0.
  3. Faça duas subrotinas (coloque-as nos endereços corretos) associadas as interrupções externas 0 e 1. Um botão aciona a interrupção externa 0 e acende um LED ligado a porta P1.0. Outro botão, associado a interrupção 1 apaga o LED. Prepare uma subrotina para iniciar estas duas interrupções.
  4. Estude o programa de controle da bomba proposto na aula de interrupções. Proponha uma modificação de forma que a bomba, após ligada, permaneça liga no máximo por 1 minuto.
  5. Proponha uma solução para construir um flip-flop tipo D usando interrupção para detecção da borda do CLK.