MIC29004-lista-final
Ir para navegação
Ir para pesquisar
- 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.
- 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>
- 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>
- Construir uma estrutura em assembly equivalente a um comando case do C;
- Considerando o programa abaixo:
- Desenhe a memória de programa fazendo a tradução manual para o código de máquina.
- Ao entrar no loop eterno qual o valor de A?
- Quantas vezes a memória interna RAM foi acessada (não considere a área SFR)?
- 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>
- 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.
- 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>
- 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\.
- 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.
- 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.
- 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.