MIC29004-lista-final

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
  1. Explique e dê exemplos de endereçamento direto, indireto, imediato e por registrador. Adicione aos exemplos em Assembly o código de máquina que seria gerado pelo montador.
  2. Quais as regiões de memória são acessadas com a instrução abaixo. Comente sobre essas regiões.
    MOVC A, @A+DPTR </syntaxhighlight>
  3. A funcionalidade das 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 ; opcode = 74H MOV ACC,#55H ; opcode = 85H ; Endereço Acumulador = E0H </syntaxhighlight>

  1. Construir uma estrutura em assembly equivalente a um comando case do C;
  2. Considerando o programa abaixo:
    1. Desenhe a memória de programa fazendo 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. Quais pseudo-instruções (do montador) foram usadas? Explique-as.

ITEM EQU 02h

ORG 0H ljmp main

ORG 08h main: mov dptr,#NUMS inc dptr inc dptr mov a,#00h movc a,@a+dptr mov r1,#ITEM dec r1 add a,r1 loop: sjmp loop

NUMS: db 20h,35h,32h

END </syntaxhighlight>

  1. Implemente uma sub-rotina que copie o conteúdo do banco 3 para o banco 2 de registradores usando a instrução PUSH. Lembre-se do processo que é feito para chamar/retornar de uma sub-rotina.
  2. Implemente um programa em Assembly para resolver a função lógica onde A, B, C, D e Y são pinos do 8051. Deixe claro, usando as pseudo-instruções EQU, quem são os pinos associados a cada entrada e saída.
    Y =(A+B)CD+(BC) </syntaxhighlight>
  3. Proponha uma solução para construir um flip-flop tipo D usando interrupção para detecção da borda do CLK na porta P3.2 (int0). Use a pseudo-instrução EQU para definir a entrada D e as saídas Q e Q\.
  4. 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.
  5. 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.
  6. 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. Implemente duas versões: temporização bloqueante (polling) e temporização por interrupção.