MIC29004-2014-2

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

Microprocessadores: Diário de Aula 2014-2

Material


Listas de Exercício

Aula 03/08: 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 07/08: Introdução a Memória

  • Projetos práticos com Microcontroladores
  • 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


Aula 11/08: Não Houve Aula – Licença Médica

Aula 14/08: Proteus e Memória

  • Introdução a Memória (cont.):
    • Tamanho da memória e Largura da Palavra (N x M)
    • Capacidade em bits
    • Associação de Memórias

Proteus

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 17/08: Tipos de Memória

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

Exercícios (cont.)

  • 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 21/08: Exercícios Memória e Apresentação TCCs

Aula 25/08: Introdução a Arquitetura e Organização de Computadores

Aula 28/08: Arquitetura do BIP I

Aula 01/09: Organização do BIP I

Aula 04/09: Decoder BIP I

Aula 08/09: Arquitetura e Organização do BIP II


Aula 22/09: Prova Teórica

Aula 25/09: Microcontroladores

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

Aula 29/09: Prova Prática

Aula 02/10: Troca com Prof. Francisco (POO)

Aula 06/10: 8051

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

Aula 09/10: 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 13/10: 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/10: 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.


Exemplo:

  • Simule a execução do programa abaixo e confira o uso das instruções de jump e de endereços absolutos e relativos de long e short range.

.

   1:          N      0000             org 0H
   2:    0000  21 00                   ajmp BGN
   3:          N      0100             org 100h
   4:    0100  74 30           BGN:    mov A,#30H
   5:    0102  75 50 00                mov 50H,#00H
   6:    0105  B5 50 02        AGN:    cjne A,50H,AEQ
   7:    0108  80 04                   sjmp NXT
   8:    010A  D5 50 F8        AEQ:    djnz 50H,AGN
   9:    010D  00                      nop
  10:    010E  78 FF           NXT:    mov R0,#0FFH
  11:    0110  D8 FE           DWN:    djnz R0,DWN
  12:    0112  E8                      mov A,R0
  13:    0113  70 03                   jnz ABIG
  14:    0115  02 10 00                ljmp  AZR0
  15:    0118  00              ABIG:   nop
  16:          N      1000             org 1000H
  17:    1000  74 08           AZR0:   mov A,#08H
  18:    1002  90 10 00                mov DPTR,#1000H
  19:    1005  73                      jmp @A+DPTR
  20:    1006  00                      nop
  21:    1007  00                      nop
  22:    1008  01 00           HERE:   ajmp AZR0
  23:                                  END

</syntaxhighlight>


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