Mudanças entre as edições de "MIC29004-2013-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 150: Linha 150:
  
 
= Aula 25/09/2013: Instruções de Movimentação 8051  =
 
= Aula 25/09/2013: Instruções de Movimentação 8051  =
* Análise das Instruções
+
 
 +
* [http://www.8052.com/set8051 Instruction Set]
 +
 
 +
* Endereçamento Imediato (#)
 +
* Endereçamento IDATA:
 +
**Direto
 +
**Registro
 +
**Indireto (@)
 +
 
 
* Prática com o [http://mcu8051ide.sourceforge.net/ MCU8051IDE].
 
* Prática com o [http://mcu8051ide.sourceforge.net/ MCU8051IDE].
* [http://www.8052.com/set8051 Instruction Set]
 
  
 +
 +
== Endereçamento direto da IDATA ==
 
<code>
 
<code>
 
;INSTRUÇÕES DO 8051
 
;INSTRUÇÕES DO 8051
Linha 159: Linha 168:
 
mov  20h,#30h ;Ender. Imediato (valor constante esta' no opcode)
 
mov  20h,#30h ;Ender. Imediato (valor constante esta' no opcode)
 
mov  30h,#07ah ;Ender. Imediato (valor constante esta' no opcode)
 
mov  30h,#07ah ;Ender. Imediato (valor constante esta' no opcode)
mov  r0,30h ;Ender. Direto  (operando especifica ENDERECO de 8 bits da RAM interna)
+
mov  r0,30h ;Ender. Direto  (operando especifica ENDERECO de 8 bits da RAM interna)
  
mov  a,r0   ;Ender. via registrador (opcode contem 3 bits indicando qual registrador usar)
+
mov  a,r0   ;Ender. via registrador (opcode contem 3 bits indicando qual registrador usar)
mov  a,20h   ;Ender. Direto  (operando especifica ENDERECO de 8 bits da RAM interna)
+
mov  a,20h   ;Ender. Direto  (operando especifica ENDERECO de 8 bits da RAM interna)
mov  a,#20h   ;Ender. Imediato (valor constante esta' no opcode)
+
mov  a,#20h   ;Ender. Imediato (valor constante esta' no opcode)
mov  a,@r0   ;Ender. Indireto (registrador R0, R1, contem endereco do operando)
+
mov  a,@r0   ;Ender. Indireto (registrador R0, R1, contem endereco do operando)
  
 
mov  dptr,#tabela ;Ender. Imediato (valor constante esta' no opcode)
 
mov  dptr,#tabela ;Ender. Imediato (valor constante esta' no opcode)
Linha 175: Linha 184:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Endereçamento direto da IDATA ==
+
== Exercícios ==
 +
 
 +
# Construir um trecho de código para colocar a mensagem "ALO" na memória RAM interna, a partir do endereço '''30H'''. Usar endereçamento imediato e direto.
 +
# Construir um trecho de código para copiar 5 bytes consecutivos da memória RAM interna a partir do endereço '''50H''' para um destino a partir de '''42H'''. Usar somente endereçamento direto e por registrador.
 +
# Repetir o exercício anterior usando somente endereço direto.
 +
# Copiar 5 bytes consecutivos de uma área interna de memória de dados, a partir da posição '''40H''' para a posição '''66H'''. Usar endereçamento indireto e imediato.
 +
 
 +
 
 +
<!--
 +
Desta forma, a unidade de controle do 8051, ao executar a instrução
 +
\begin{verbatim} MOVX A,@DPTR\end{verbatim},
 +
inicialmente lê o contéudo de $DPTR$ para o barramento de endereços externo e
 +
aplica o comando $\overline{RD}$ ou ($\overline{WR}$) conforme o sentido da
 +
transferência de dados. Os dados são então transferidos para ou do registrador '''A'''.
 +
 
 +
#Zerar as posições de memória RAM externa (XDATA) de número '''80FFH''', '''9765H''' e '''FEA5H'''.
 +
 
 +
#Copiar os bytes das posições '''4654H''', '''7687H''' e '''FADEH''' da XDATA para as posições '''0000H''', '''0005H''' e '''A000H''' respectivamente.
 +
 
 +
#Por vezes é necessário acessar dados que estão na memória de programa de forma ordenada. A instrução
 +
<code>MOVC A,@A+DPTR </syntaxhighlight>
 +
permite também acessar dados da área de código de forma indireta.
  
* Construir um trecho de código para colocar a mensagem "ALO" na memória RAM interna, a partir do endereço '''30H'''. Usar endereçamento imediato e direto.
+
#A execução desta instrução implica no seguinte procedimento por parte da unidade de controle. O conteúdo do registrador '''DPTR''' é somado com o conteúdo de '''A'''. O resultado desta soma é colocado no barramento de endereços e o comando de leitura da memória de programa ('''PSEN''') é acionado. A memória de programa libera o dado correspondente no barramento de dados que é então lido para o registrador '''A'''.
  
* Construir um trecho de código para copiar 5 bytes consecutivos da memória RAM interna a partir do endereço '''50H''' para um destino a partir de '''42H'''. Usar somente endereçamento direto e por registrador.
+
#Com esta instrução pode-se armazenar dados tal como uma tabela ASCII ou uma mensagem na memória de programa que normalmente é não volátil.
 +
#Uma mensagem "ALO" foi gravada na área CODE a partir da posição de memória '''5465H'''. Copie esta mensagem para a área de memória interna de dados, a partir das posições '''76H'''.
 +
#Repetir o exercício anterior mas agora copiando para a RAM externa de dados para um destino a partir de '''F555H'''.
  
* Repetir o exercício anterior usando somente endereço direto.
+
-->

Edição das 15h08min de 25 de setembro de 2013

Microprocessadores: Diário de Aula 2013-2

Professor: Roberto de Matos
Encontros: 4ª feira 9:40 e 6ª feira 9:40
Atendimento paralelo: 4ª feira das 13:30 às 15:20.

Aula 16/08/2013: Apresentação

  • Apresentação do professor.
  • Apresentação dos alunos: Nome, perfil, preferências, etc.
  • Apresentação da disciplina: conteúdo, bibliografia e avaliação.
  • Aula Introdutória: Projetos práticos com Microcontroladores

Aula 21/08/2013: Histórico

  • Evolução dos processadores

Aula 23/08/2013:

  • Introdução a Arquitetura de Computadores
  • Conceito de Processador (Unidade de Controle + Unidade de Processamento)
  • Memória, Registradores, Barramentos

Aula 28/08/2013: IAS

  • Arquitetura Von Neumann
  • Arquitetura IAS
  • Execução de um Programa (Acesso a memória, Registradores Internos, Sinais de Controle)
  • Assembly IAS (Classes de Instruções)

Aula 30/08/2013: Não Houve Aula

  • Paralisação

Aula 04/09/2013: IAS Sim

Objetivo

Ao final da aula o aluno deverá:

  • Entender na prática a organização da memória do IAS e a diferença na representação de instruções e dados.
  • Se familiarizar com o simulador acadêmico IAS Sim (rodar o simulador, carregar programa, janela de memória, registradores, etc.)
  • Conseguir criar e executar um programa simples em Assembly.

Memória IAS

IAS memoria.png


Instalação=

  • Link Download:
http://www.cs.colby.edu/djskrien/IASSim/IASSim2.0.4.zip
  • Rodar no Linux:
java -cp IASSim2.0.4.jar:jhall.jar:IASSimHelp2.0.jar iassim.Main -m IAS.cpu

Exercício: Instruções de Transferência e Aritméticas

  • Faça um programa que execute o seguinte conjunto de instruções:

g = 3; h = 5; i = 2; j = 1; f = (g+h) – (i+j); </syntaxhighlight>

  • Solução:

S(x)->Ac+ g S(x)->Ah+ h S(x)->Ah- i S(x)->Ah- j At->S(x) f halt

g: .data 3 h: .data 5 i: .data 2 j: .data 1 f: .data 0 </syntaxhighlight>

Aula 06/09/2013: IAS Sim (continuação)

Estrutura do IAS

IAS estrutura.png

Registradores IAS Sim

Registradores "Visíveis" ao programador:

  • Accumulator (AC)
  • Arithmetic Register (AR)

Registradores internos:

  • Control Counter (CC): Contador de Programa.
  • Control Register (CR): Instrução em execução.
  • Function Table Register (FR): Opcode em execução.
  • Memory Address Register (MAR): Posição de memória que sofrerá ação do Opcode.
  • Selectron Register (SR): O valor lido ou escrito na memória.

Exercício: Instruções de Desvio

  • Reproduza cada um dos seguintes programas para assembly, atribuindo às variáveis valores que lhe permitam testar o seu programa.

a) if (a>=b) b=b+1;

b) if (a>b) a=a+1;

c) if (a==b) a=a+1;

d) Adicione "else" nos exercícios anteriores.

e) a=0;c=5;

  while (a<c){

a=a+1;

  }

f) a=0;

  for (i=0; i<5 ;i++){

a=a-1;

  }

</syntaxhighlight>

Exercício: Instruções para modificação de Instrução

  • Faça um programa que contenha o vector v = {1,2,3,4,5} na memória e substitua todos os elementos pelo seu dobro.

Aula 11/09/2013: IAS Sim (continuação)

  • Problemas na rede de computadores
  • Correção do último Exercício
  • Detecção de problema na compreensão da estrutura de memória (Revisão Próxima Aula)

Aula 13/09/2013: Revisão IAS

Aula 18/09/2013: Microcontroladores

  • Microcontrolador vs Microprocessador
  • Aplicações
  • Limitações

Aula 20/09/2013: 8051

  • Introdução
  • Arquitetura Interna
  • Memória

Aula 25/09/2013: Instruções de Movimentação 8051

  • Endereçamento Imediato (#)
  • Endereçamento IDATA:
    • Direto
    • Registro
    • Indireto (@)


Endereçamento direto da IDATA

INSTRUÇÕES DO 8051

mov 20h,#30h ;Ender. Imediato (valor constante esta' no opcode) mov 30h,#07ah ;Ender. Imediato (valor constante esta' no opcode) mov r0,30h ;Ender. Direto (operando especifica ENDERECO de 8 bits da RAM interna)

mov a,r0 ;Ender. via registrador (opcode contem 3 bits indicando qual registrador usar) mov a,20h ;Ender. Direto (operando especifica ENDERECO de 8 bits da RAM interna) mov a,#20h ;Ender. Imediato (valor constante esta' no opcode) mov a,@r0 ;Ender. Indireto (registrador R0, R1, contem endereco do operando)

mov dptr,#tabela ;Ender. Imediato (valor constante esta' no opcode)


tabela: db 10h,20h,30h,0BBh,0AAh

end

</syntaxhighlight>

Exercícios

  1. Construir um trecho de código para colocar a mensagem "ALO" na memória RAM interna, a partir do endereço 30H. Usar endereçamento imediato e direto.
  2. Construir um trecho de código para copiar 5 bytes consecutivos da memória RAM interna a partir do endereço 50H para um destino a partir de 42H. Usar somente endereçamento direto e por registrador.
  3. Repetir o exercício anterior usando somente endereço direto.
  4. Copiar 5 bytes consecutivos de uma área interna de memória de dados, a partir da posição 40H para a posição 66H. Usar endereçamento indireto e imediato.