Mudanças entre as edições de "MIC29004-2014-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 225: Linha 225:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Exercícios ==
+
= Aula 19/05: Exercícios Movimentação de Dados  =
  
 
'''Transferência de dados IDATA'''
 
'''Transferência de dados IDATA'''
Linha 241: Linha 241:
 
*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.
 
*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 mas agora copiando para a RAM externa de dados para um destino a partir de F555H.
 +
 +
 +
= Aula 20/05:  Instruções de desvio =
 +
 +
*Introdução as instruções de desvio e loop.
 +
**Desvio Incondicional:
 +
*** AJMP adr11
 +
*** LJMP adr16
 +
*** SJMP Rel
 +
*** JMP @A+DPTR
 +
**Desvio Condicional:
 +
***JZ rel
 +
***JNZ rel
 +
***CJNE A, direto ,rel
 +
***CJNE A, #data ,rel
 +
***CJNE Rn,#data ,rel
 +
***CJNE Ri,#data ,rel
 +
**Desvio baseado em bits:
 +
***JC rel
 +
***JNC rel
 +
***JB bit, rel
 +
***JNB bit, rel
 +
***JBC bit, rel
 +
**Loop:
 +
***DJNZ Rn, rel
 +
***DJNZ direto, rel
 +
 +
*Observações:
 +
**adr16 –> endereço de 16 bits (endereça 64 KB)
 +
**adr11 –> endereço de 11 bits (endereça 2 KB)
 +
**rel –> deslocamento relativo (complemento a 2: -128 a +127)
 +
**Nas instruções CJNE o flag CARRY é setado caso o conteúdo do primeiro operando seja menor que o segundo operando. Nas demais instruções o CARRY não é afetado.
 +
 +
 +
= Aula 21/05:  Instruções de desvio – Exercícios =
 +
 +
*Assumindo que '''alfa''' é o registrador A e '''beta''' é um dado armazenado em 20H. Mapear em assembly as seguintes estruturas decisórias:
 +
:<code>
 +
if (alfa==beta) {
 +
        /* bloco1 */
 +
} else {
 +
        /* bloco2 */
 +
}
 +
</syntaxhighlight>
 +
 +
:<code>
 +
if (alfa>=beta) {
 +
        /* bloco1 */
 +
} else {
 +
        /* bloco2 */
 +
}
 +
</syntaxhighlight>
 +
 +
:<code>
 +
if (alfa>beta) {
 +
        /* bloco1 */
 +
} else {
 +
        /* bloco2 */
 +
}
 +
</syntaxhighlight>
 +
 +
*Construir uma estrutura equivalente a um "for"conforme mostrado abaixo. Use o acumulador como variável de controle.
 +
:<code>
 +
for (i=5;i<100;i++) {
 +
  /* bloco */
 +
}
 +
</syntaxhighlight>
 +
 +
*Construir uma estrutura em assembly equivalente a um comando ''case'' do C;
 +
 +
*Faça um programa que escreva os números de 1 a 15H na memória interna de dados a partir do endereço 50H e na memória externa de dados a partir do endereço 2200H. Utilize modo de endereçamento indireto para escrita nas duas regiões de memória.
 +
 +
*Faça um programa que copie os dados da região de memória de dados externa de 2100H a 210FH para a região de memória de dados externa que inicia em 2300H.
 +
 +
*Faça um programa que copie os dados da área de memória de programa que devem estar armazenados a partir do endereço "TAB:" para a memória interna de dados a partir do endereço 30H. A seqüência de dados na memória de programa deve ser finalizada com o código 00. O programa deve contar o número de dados da seqüência, menos o último valor = 00, e armazenar o resultado no endereço 20h da RAM interna.

Edição das 17h07min de 20 de maio de 2014

Microprocessadores: Diário de Aula 2014-1

Professor: Roberto de Matos
Encontros: 3ª e 5ª feira às 15:40.
Atendimento paralelo: 2ª feira das 15:40 às 17:30.

Material

Listas de Exercício

Aula 11/02: 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 13/02: Histórico

  • Evolução dos processadores

Aula 18/02: Introdução a Memória

  • Latch D e Tristate
  • Célula básica de memória
  • Circuito genérico de memória
  • Barramentos de dados, endereços e controle
  • Tamanho da memória e Largura da Palavra (N x M)
  • Capacidade em bits
  • Associação de Memórias

Aula 20/02: Lab. Proteus – Memória

Multiples of bytes
Decimal
Value Metric
1000 kB kilobyte
10002 MB megabyte
10003 GB gigabyte
10004 TB terabyte
10005 PB petabyte
10006 EB exabyte
10007 ZB zettabyte
10008 YB yottabyte
Binary
Value JEDEC IEC
1024 KB kilobyte KiB kibibyte
10242 MB megabyte MiB mebibyte
10243 GB gigabyte GiB gibibyte
10244 - - TiB tebibyte
10245 - - PiB pebibyte
10246 - - EiB exbibyte
10247 - - ZiB zebibyte
10248 - - YiB yobibyte
Fonte: http://en.wikipedia.org/wiki/Kilobyte
  • Consolidar o conhecimento sobre memórias e barramentos de endereços, dados e controle através de um experimento no Proteus.
  • Roteiro:
  1. Entrar no Windows.
  2. Baixe o arquivo de projeto. Coloque em um diretório conhecido.
  3. Clique sobre o arquivo. O PROTEUS será executado e o projeto aberto.
  4. Observe que o projeto está parcialmente pronto. Você pode entrar em modo simulação. O sistema está preparado para que se possa inserir ou ler manualmente posições de memória.
  5. Grave o dado Ah na posição 0 de memória e Bh na posição 8.
  6. Note o Chip Select está habilitado sempre. Coloque uma chave adicional para colocar o Chip Select e repita a operação de gravação anterior.
  7. Utilize a nova configuração para gravar o seu número de matrícula a partir da posição 0.

Exercícios

  • Usando a memória do experimento como bloco base, realize a ligação entre elas de modo que se construa um banco de memória de 32 palavras de 8 bits.
  • Usando a memória do experimento como bloco base, realize a ligação entre elas de modo que se construa um banco de memória de 64 palavras de 4 bits.
  • Quais os tamanhos dos barramentos de endereço e dado para uma Memória de 512x8 bits?
  • Determine a capacidade final em bits e o endereço inicial e final em Hexadecimal das memórias com as seguintes características:
    • 512x4
    • 4Kx8
    • 128Kx8
    • 2Mx16

Aula 25/02: Lab. Proteus – Memória (cont.)

Exercícios

  • Usando a memória do experimento como bloco base, realize a ligação entre elas de modo que se construa um bancos de memórias de:
    • 16 palavras de 8 bits.
    • 32 palavras de 4 bits.

Aula 27/02: Tipos de Memória

  • ROM (PROM, EPROM, EEPROM, FLASH);
  • RAM (DRAM, SRAM, DDR)
  • Diferença das células

Aula 04/03: Não Houve Aula - CARNAVAL

Aula 06/03: Introdução à Arquitetura de Computadores

Aula 11/03: Não Houve Aula

Aula 13/03: Não Houve Aula - Treinamento Proteus

Aula 17/03: Arquitetura BIP

Aula 20/03: Organização BIP

Aula 25/03: Exercício Proteus

  1. Executar código da memória manualmente? Qual o valor final do Acumulador?
  2. "Desmontar" o conteúdo da memória de programa.
  3. Montar os exercícios de Assembly da lista de exercícios e executar.
  4. Implementar o circuito decodificador da Unidade de Controle.
  5. Quais são as BOM da UC e UE?

Proteus

  • Barramentos (conexão, bifurcação)
  • Terminal Mode
  • Labels
  • Teclas de atalhos

Aula 27/03: Exercício Proteus (cont.)

  • Simulação das instruções (busca, decodificação e execução)
  • Montagem de programa
  • Criação do Circuito decodificador

Proteus

  • Arquivos de Inicialização da Memória
  • Watch window (16-bits)


Aula 01/04: Integração do Decodificador

  • Geração da decodificação do BIP a partir do Opcode.
  • Compreensão do conceito de "monociclo" (busca, decodificação e execução).

Proteus

  • Criação de componente
  • Criação de modelos de componentes simuláveis

Aula 08/04: BIP II - Organização e arquitetura

ALU Bip I


Aula 10/04: BIP II - Modificações PC, Decodificador e ALU

Solving Large Karnaugh Maps with Smaller Ones

Aula 17/04: BIP II - Projeto Decodificador BIP II

Aula 22/04: BIP II - Teste Decodificador BIP II

  • Teste decodificador.
  • 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>


Aula 24/04: BIP II - Teste Decodificador BIP II

Aula 25/04: Revisão para Prova – Dúvidas Lista de Exercício

Aula 29/04: Não Houve Aula – Convocação RDP

Aula 01/05: Não Houve Aula – Dia do Trabalhador

Aula 06/05: 1ª Prova

Aula 08/05: Microcontroladores

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

Aula 13/05: 8051

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

Aula 15/05: Assembly 8051

    • Imediato
    MOV A, #100</syntaxhighlight>
    • Direto
    MOV A, 20</syntaxhighlight>
    • Indireto
    MOV A, @R0</syntaxhighlight>
    • Registro
    MOV A, R0</syntaxhighlight>
    • Registro Específico
    MOVX A, @DPTR</syntaxhighlight>
    • Indexado
    MOVC A, @A+DPTR</syntaxhighlight>


Exemplo:

INSTRUÇÕES DO 8051

ORG 0 Inicio: 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>

Aula 19/05: Exercícios Movimentação de Dados

Transferência de dados IDATA

  • 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 direto.

Transferência de dados XDATA

  • Zerar as posições de memória RAM externa (XDATA) de número 80FFH, 9765H e FEA5H.
  • Colocar a mensagem "ALO" nas posições de memória externa de dados 0670h,0671h e 0672h.
  • Copiar os bytes das posições 4654H, 7687H e FADEH da XDATA para as posições 0000H, 0005H e A000H respectivamente.

Leitura da memória CODE

  • 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.


Aula 20/05: Instruções de desvio

  • Introdução as instruções de desvio e loop.
    • Desvio Incondicional:
      • AJMP adr11
      • LJMP adr16
      • SJMP Rel
      • JMP @A+DPTR
    • Desvio Condicional:
      • JZ rel
      • JNZ rel
      • CJNE A, direto ,rel
      • CJNE A, #data ,rel
      • CJNE Rn,#data ,rel
      • CJNE Ri,#data ,rel
    • Desvio baseado em bits:
      • JC rel
      • JNC rel
      • JB bit, rel
      • JNB bit, rel
      • JBC bit, rel
    • Loop:
      • DJNZ Rn, rel
      • DJNZ direto, rel
  • Observações:
    • adr16 –> endereço de 16 bits (endereça 64 KB)
    • adr11 –> endereço de 11 bits (endereça 2 KB)
    • rel –> deslocamento relativo (complemento a 2: -128 a +127)
    • Nas instruções CJNE o flag CARRY é setado caso o conteúdo do primeiro operando seja menor que o segundo operando. Nas demais instruções o CARRY não é afetado.


Aula 21/05: Instruções de desvio – Exercícios

  • Assumindo que alfa é o registrador A e beta é um dado armazenado em 20H. Mapear em assembly as seguintes estruturas decisórias:

if (alfa==beta) {

       /* bloco1 */

} else {

       /* bloco2 */

} </syntaxhighlight>

if (alfa>=beta) {

       /* bloco1 */

} else {

       /* bloco2 */

} </syntaxhighlight>

if (alfa>beta) {

       /* bloco1 */

} else {

       /* bloco2 */

} </syntaxhighlight>

  • Construir uma estrutura equivalente a um "for"conforme mostrado abaixo. Use o acumulador como variável de controle.

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

 /* bloco */

} </syntaxhighlight>

  • Construir uma estrutura em assembly equivalente a um comando case do C;
  • Faça um programa que escreva os números de 1 a 15H na memória interna de dados a partir do endereço 50H e na memória externa de dados a partir do endereço 2200H. Utilize modo de endereçamento indireto para escrita nas duas regiões de memória.
  • Faça um programa que copie os dados da região de memória de dados externa de 2100H a 210FH para a região de memória de dados externa que inicia em 2300H.
  • Faça um programa que copie os dados da área de memória de programa que devem estar armazenados a partir do endereço "TAB:" para a memória interna de dados a partir do endereço 30H. A seqüência de dados na memória de programa deve ser finalizada com o código 00. O programa deve contar o número de dados da seqüência, menos o último valor = 00, e armazenar o resultado no endereço 20h da RAM interna.