EEL 7030
• Resumo do Programa
• 1 – Com 8085 – Subrotinas,
Pilha, Entrada e Saídas,
Interrupção
• Prova1
• 2 – Microcontroladores – 8051
• Timer, Interrupção e I/O.
• 3 – 8086 – Estrutura basica
• Prova2; Nota=raiz(lab*teoria)
• REC
Elementos de um computador
Linhas de Controle
CPU
Memória
I/O
Barramentos de endereços e dados
8 BIT >>>>
16 BIT >>>>>
20 BIT >>>>>>
Funcionamento basico
•
•
•
Memória
código
CPU
RI
ACC
BC
DE
HL
PC
SP
04 – INR B
3C – INR A
3E 25 – MVI A 25
04
3C
3E
25
Linguagem – Assembly
Características Gerais
• Uma linguagem de montagem
é uma representação simbólica
para uma linguagem de
máquina (numérica).
• É o primeiro nível a fazer uso
de palavras e abreviaturas
(mnemônicos) familiares às
pessoas para representar as
instruções de máquina.
• Cada comando em Assembly
de montagem corresponde a
uma instrução de linguagem
de máquina.
Linguagem – Assembly
• Permite a livre atribuição de nomes
simbólicos a dados e endereços.
• O que pode ser feito em linguagem
de máquina pode ser em Assembly.
• Este nível e os superiores são
suportados por tradução.
• O tradutor para uma linguagem de
montagem é denominado
montador (assembler).
• É o primeiro nível dirigido aos
programadores de aplicação.
• O programador em Assembly tem
acesso a todos os recursos e
instruções disponíveis na CPU.
• Os programas em Assembly têm
pouca ou nenhuma portabilidade.
Comparação entre Linguagem de
Montagem e Linguagem de Alto Nível
•
•
•
•
•
•
•
•
Será que os grandes programas comerciais, que serão
muito vendidos, precisam ser escritos inteiramente em
linguagem de montagem para serem eficientes?
O custo de desenvolver um grande programa
inteiramente em assembly é muito mais alto do que o
custo de desenvolvê-lo em uma linguagem de alto nível.
A produtividade do programador em uma linguagem de
alto nível é muito maior do que quando ele programa
em linguagem de montagem.
O programador tem uma visão muito melhor do
problema e do algoritmo quando utiliza uma linguagem
de alto nível.
Portabilidade do projeto entre plataformas e entre
diferentes programadores.
Facilidade de compreensão, depuração e atualização
de código-fonte em linguagem de alto nível.
Mas um programa feito em linguagem de montagem
ainda é bem mais rápido do que um equivalente feito
em linguagem de alto nível e compilado.
Solução: Combinar as duas linguagens!
Quando Utilizar Assembly?
• Quando for necessário extrair o
máximo desempenho dos
procedimentos críticos de um
programa em linguagem de alto
nível.
• Em microprocessadores voltados
para sistemas pequenos
(dedicados), o Assembly pode ser
a única alternativa.
• Geralmente os compiladores de
linguagens de alto nível também
executam o processo de
montagem.
• Portanto, entender de Assembly
é essencial para entender o
funcionamento dos
compiladores.
O Processo de Montagem
• É bastante semelhante entre máquinas
diferentes.
• O código assembly contém muitas
referências futuras.
• Os montadores podem ser de dois
passos ou de um passo.
• Montador de dois passos: Lê o
programa-fonte duas vezes.
•  No passo 1:
• Elimina todas as referências futuras;
• Coleciona as definições de todos os
símbolos em uma tabela.
•
 No passo 2:
• Cada comando pode ser lido, montado e
dar saída.
• Montador de um passo: Lê o programa-fonte
somente uma vez para fazer a montagem.
• Os comandos com referências futuras são
guardados em uma tabela para serem montados
após o término da leitura do programa.
• A maioria dos montadores é de dois passos.
Estrutura do 8085
•
•
•
•
•
Registradores
A – Acumulador
B C - podem formar o par B
D E - podem formar o par C
H L - Apontador de memória-H
• SP – Stack Pointer
• PC – Programm Counter
Estrutura do 8085
Instruções
• Só o Código
• 04 INR B
• Código e um byte de Dado
• 0E 22 MVI C22H
• Código e dois bytes de Dados
• CD 2541 CALL Soma; Comentário
Instruções
•
•
•
•
•
- Endereço
- Código
- Instrução
- Dado
- Comentário
•
•
•
•
•
INR A
MVI A,25H
2000 3C INR A ; Atualiza cont
2001 3E 25 MVI A,25; ????
2002 CD 2541 CALL Soma
Sub routinas
Rotinas do Monitor
KIT 8085
Eprom 0000H- 2000H
RAM 2000H – 2400H
Programa
Rotinas do Monitor
• Nome
endereço altera
•
•
•
•
02E7 A H L Ler p/A
036E todos MostraA
0363 todos MostraDE
05F1 A D E Atraso
( D=1 = 100ms)
( D=0 ???
)
Letecla
MostraA
MostraD
Delay
•
• LOOP
•
•
xxxx ; atraso
DCR D
JN Z LOOP
função
Sistema de
Desenvolvimento
•
•
•
•
•
•
Editor
Montador
Compilador
Simulador
Gravador
Emulador
• Crossware – Edita e Compila
• Abacus – Simulador
• PINNACLE – para 8051
; EXEMPLO CONT1.ASM
; Este programa realiza uma contagem decimal a
partir de 7
MOSTRAA equ 036EH
MOSTRAD equ 0363H
DELAY equ 05f1H
ORG 2000h
LXI SP,20C2H
LOOP: ADI 1 ; INCREMENTAR
DAA ; AJUSTE PARA DECIMAL
STA MEMORIA ; SALVAR Valor
MOV E,A
MVI D,0
CALL MOSTRAD ; Mostrar em DE
LDA MEMORIA ; RECUPERAR
JMP LOOP
MEMORIA DB 7
END
Para contar com 4 dígitos ?
JNC endereço
; Por fazer no programa anterior
CONT1.asm
1) Iniciar o contador com valor de 1 ou 2
dígitos lido ao iniciar o programa
2) Contador hexadecimal ou decimal (
Escolher por tecla ou INT)
3) Contador com 4 dígitos
4) Contagem deve ser zerada toda vez que
uma chave for pressionada
5) Contagem deve ser iniciada em 3344
toda vez que ocorrer a Int Trap
6) Controlar a velocidade do contador (
chave, tecla, Int ???)
7) Outras sugestões ??
Problemas no
desenvolvimento de
programas!!
•
•
•
•
Erros de Sintaxe
Não colocar END
Não definir a pilha
Definir a pilha em local
inadequado
• Definir endereços errados
• Erros de lógica !!!!!!!!!!!!!!!!!
Diretivas
• ORG 2000H - Origem
• END
• Dado DB 25H – define
dado=25
• Dado DW 25H – define
dado=0025
• MSG DB ‘ Microprocessador’
• DELAY EQU 05F1
• LETECLA EQU 02E7H
• CHAVES EQU 21H
• LEDS EQU 22H
Interrupções
• São desvios do programa
ocasionados por eventos
externos.
• Interrupção por Software
• Interrupção por Hardware
Nível
Borda Ascendente
Borda Descendente
Borda e nível
Interrupções no 8085
•
•
•
•
•
RST0
........
RST3
RST4
RST5
CPU
0000H
RAM
2000H
0018H
0020H
0028H
2018H
2020H
2028H
Prioridade
•
•
•
•
•
TRAP
RST5.5
RST6
RST6.5
RST7
RST7.5
0024 1
002C 4
0030
0034 3
0038H
003C 2
20D1H
20C8H
2030H
20CBH
2038H
20CEH
Interrupções no 8085
• Flags usados
IP – Interrupt Priority
5.5 6.5 7.5
IE – Interrupt Enable
EA 5.5 6.5 7.5
Interrupções no 8085
; A Interrupção 7.5 deve zerar o contador
• ; Teste quais são os problemas ????
•
LXI SP,2060H ; Inicializa pilha
•
MVI A,18H
; Habilita 5.5, 6.5 7.5
•
SIM
• inicio: MVI A,00H
•
EI
• LOOP: ADI 01H
; INR A não CY)
•
DAA
; utiliza CY flag na corr.
•
PUSH PSW
; Salva contagem
•
MVI D,0
•
MOV E,A
•
CALL MOSTRAD
•
MVI D,05H
; Atraso de 500ms
•
CALL DELAY
•
POP PSW
; Recupera A
•
JMP LOOP
•
Interrupções no 8085
•
T75
MVI A,0
•
EI
•
RET
ORG RST5.5 ; Evitar RST 5.5
•
EI
•
RET
ORG RST6.5 ; evitar RST 6.5
•
EI
•
RET
ORG RST7.5
; Desvio da RST 7.5
•
JMP T75
ORG TRAP
; não Mascarável
•
EI
•
RET
•
END
Interrupções no 8085
•
LXI SP,20C0H ; Inicializa pilha
•
MVI A,18H
; Habilita 5.5, 6.5 e7.5
•
SIM
•
EI
LOOP: LDA CONTA
•
ADI 01H
•
DAA
; Ajusta p/Decimal
•
STA CONTA
•
CALL MOSTRAA
•
MVI D,05H
; Atraso de 500ms
•
CALL DELAY
•
JMP LOOP
TRATADOR: MVI A,00H
•
STA CONTA
•
EI
•
RET
CONTA: DB 00H
•
ORG RST7.5 ; Desvio da RST 7.5
•
JMP TRATADOR
•
END
ints85a.asm
Interrupções no 8085
•
•
•
LXI SP,20C0H ; Inicializa pilha
MVI A,18H
SIM
; Habilita 5.5, 6.5 e 7.5
MVI A,00H
•
STA STATE
; Flag de contagem
•
STA COUNT
; Inicializa
•
EI
LOOP: LDA COUNT
•
ADI 01H
•
DAA
; Utiliza CY na correção
•
STA COUNT
•
CALL MOSTRAA
•
MVI D,05H
; Atraso de 500ms
•
CALL DELAY
•
LDA STATE
•
CPI 00H
; Testa se houve INT
•
JZ LOOP
; Continua contando
•
MVI A,00H
•
Interrupções no 8085
•
LDA STATE
•
CPI 00H
; Testa critério
•
JZ LOOP
; Continua
•
MVI A,00H
•
STA COUNT
; zera a contagem
•
STA STATE
; Reinicializa flag
•
JMP LOOP
HNDLR: PUSH PSW
•
MVI A,01H
•
STA STATE
•
EI
•
POP PSW
•
RET
STATE DB 00H
; Flag global INT
COUNT DB 00H
; Contagem
•
ORG RST7.5
; Desvio da RST
•
JMP HNDLR
•
END
Interrupções no 8085
Um contador cujo incremento deve
ser alternado entre 1 e 2 com int7.5
MVI A,00H
•
STA STATE
; Flag de reset
•
STA COUNT ; Inicializa cont.
•
EI
LOOP: LDA COUNT
LXI H,INCRE
•
ADD M
;
•
DAA
; Utiliza CY
•
STA COUNT
•
CALL MOSTRAA
•
MVI D,05H ; Atraso de 500ms
•
CALL DELAY
•
LDA STATE
CPI 00H ;Testa de houve INT
•
JZ LOOP ;Continua ate STATE = 0
Interrupções no 8085
LDA INCRE
•
CPI 1
•
JZ DOIS
•
MVI A,1
•
STA INCRE
•
JMP CONTINUA
DOIS: MVI A,2
•
STA INCRE
CONTINUA ; STA COUNT
; CASO
•
MVI A,0
•
STA STATE ; reinicializa Flag
•
JMP LOOP
T75:
PUSH PSW
•
MVI A,01H
•
STA STATE
•
EI
•
POP PSW
•
RET
Interrupções no 8085
STATE DB 00H ; Flag global
COUNT DB 00H
;
Contagem incremento DB
• ORG RST7.5 ;Desvio RST 7.5
• JMP T75
•
END
Interrupções
• Caracteristicas de um tratador
de interrupção
Lo
Pequeno
Não alterar Registradores
Não alterar a pilha
Porta paralela 8155
+Vcc
PB0
+Vcc
PB1
+Vcc
PB7
8155
PA0
PA1
PA7
+Vcc
REGISTRO
END. 8155
COMANDO
20H
PORTA A
21H
PORTA B
22H
Porta paralela 8155
;Chaves.asm - Utilização de I/O
• COMMAND EQU 20H
• CHAVES EQU 21H
• LEDS
EQU 22H
•
ORG 2000H
•
MVI A,02H ; Porta A entrada,
•
; B como saída
•
OUT COMMAND
LOOP: IN CHAVES ; Le chaves p/A
•
OUT LEDS ; Acende LEDs
•
JMP LOOP
•
END
Porta paralela 8155
• Deslocar um led para a Esq.
• A int TRAP alterna entre led ligado
ou apagado
• COMMAND EQU 20H
• CHAVES EQU 21H
• LEDS EQU 22H
•
MVI A,02H ; B é saída
•
OUT COMMAND
•
SIM
•
EI
LOOP: LDA DADO
•
OUT LEDS ; Acende o LEDs
•
RLC
; Rotaciona LED
•
STA DADO
•
MVI D,02H ; Atraso de 200ms
•
CALL DELAY ; p/ ver LED
•
JMP LOOP
Porta paralela 8155
TTRAP: PUSH PSW
•
LDA DADO
•
CMA
•
STA DADO
•
EI
•
POP PSW
•
RET
DADO DB 01 ; valor inicial
•
ORG TRAP
•
JMP TTRAP
•
END
• RSTxx – Alterna SENTIDO !!
Manipulação de bits
• Operações booleanas !!
• Manipulação com mascaras
•
•
•
•
Registro
11111x00
Mascara
00001110
Operação OR
00001110
SETAR o BIT definido na
mascara
Manipulação de bits
•
•
•
•
RESETAR UM ou mais bits
Registro
11111100
Mascara
00001111
Operação AND 00001100
• Reseta o BIT cuja mascara for
zero !!!!
Manipulação de bits
• COMPLEMENTAR UM ou
mais bits
• Registro
11111100
• Mascara
00001111
• Operação XOR 00000011
• Complementa os bits cuja
mascara for um !!!
Manipulação de bits
• TESTAR UM ou mais bits
• Registro
• Mascara
• Operação AND
•
• ANI 01
JZ SETA6
• Xxx
• ...................
ANI 03
•
JNZ SETA6
• YYY
1111100x
00000001
0000000x
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
;Testar o Bit0 de DADO
;Se tiver em 1 Resetar o BIT7
; e caso contrário Setar o BIT6
INICIO: LDA DADO
ANI 01
JZ SETA6
LDA DADO
ANI 7FH
;resetar bit7
STA DADO
JMP INICIO
SETA6: LDA DADO
ORI 01000000B;set B6
STA DADO
JMP INICIO
DADO DB 0FFH
END
Exercício1
• Deslocar um LED ligado para a
esquerda no conjunto de Leds.
• As chaves 7 e 8 definem a
velocidade de deslocamento.
• A chave 1 define o sentido.
Ligada – para a direita e
desligada para a esquerda.
• A chave 2 controla entre
deslocar um LED aceso e um
desligado !
• As chaves 3, 4 e 5 ....
Exercício2
• Deslocar um LED ligado para a
esquerda no conjunto de Leds.
• As chaves 7 e 8 definem a
velocidade de deslocamento.
• A chave 1 define o sentido.
Ligada – para a direita e
desligada para a esquerda.
• A chave 2 controla entre
deslocar um LED aceso e um
desligado !
• As chaves 3, 4 e 5 ....
Exercício3
• Deslocar um LED ligado para a
esquerda no conjunto de Leds.
• As chaves 7 e 8 definem a
velocidade de deslocamento.
• A chave 1 define o sentido.
Ligada – para a direita e
desligada para a esquerda.
• A chave 2 controla entre
deslocar um LED aceso e um
desligado !
• As chaves 3, 4 e 5 ....
Exercício4
• Deslocar um LED ligado para a
esquerda no conjunto de Leds.
• As chaves 7 e 8 definem a
velocidade de deslocamento.
• A chave 1 define o sentido.
Ligada – para a direita e
desligada para a esquerda.
• A chave 2 controla entre
deslocar um LED aceso e um
desligado !
• As chaves 3, 4 e 5 ....
Download

8085_V12