Mudanças entre as edições de "MIC29004-2013-2"
Linha 150: | Linha 150: | ||
= Aula 25/09/2013: Instruções de Movimentação 8051 = | = Aula 25/09/2013: Instruções de Movimentação 8051 = | ||
− | * | + | |
+ | * [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]. | ||
− | |||
+ | |||
+ | == 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 | + | mov r0,30h ;Ender. Direto (operando especifica ENDERECO de 8 bits da RAM interna) |
− | mov a,r0 | + | mov a,r0 ;Ender. via registrador (opcode contem 3 bits indicando qual registrador usar) |
− | mov a,20h | + | mov a,20h ;Ender. Direto (operando especifica ENDERECO de 8 bits da RAM interna) |
− | mov a,#20h | + | mov a,#20h ;Ender. Imediato (valor constante esta' no opcode) |
− | mov a,@r0 | + | 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> | ||
− | == | + | == 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. | ||
− | + | #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'''. | |
− | + | #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'''. | ||
− | + | --> |
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
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
- Instruções com Opcode 1 a 12, 17, 20 e 21 do conjunto de instruções
- 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
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
- Instruções com Opcode 13 a 16 do conjunto de instruções
- 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
- Instruções com Opcode 18 a 19 do conjunto de instruções
- 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 (@)
- Prática com o MCU8051IDE.
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
- 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.