EEL 7030 Resumo do Programa 1 – Com 8085 – Subrotinas, Pilha, Entrada e Saídas, Interrupção...
Transcript of EEL 7030 Resumo do Programa 1 – Com 8085 – Subrotinas, Pilha, Entrada e Saídas, Interrupção...
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
CPU Memória I/O
Barramentos de endereços e dados
Linhas de Controle
8 BIT >>>>
16 BIT >>>>>20 BIT >>>>>>
Funcionamento basico
• Memória
• código
• CPURI PCACC SPBC DE HL
043C3E25
04 – INR B3C – INR A3E 25 – MVI A 25
Linguagem – AssemblyCaracterí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 de 8 Bit
• 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 – 16 bit
• PC – Programm Counter – 16b
Estrutura do 8085
Instruções
• Só o Código da instrução
• 04 INR B
• Código e um byte de Dado
• 0E 22 MVI C22H
• Código e dois bytes de Dados ou endereço
• 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
MonitorEprom 0000H- 2000H
RAM 2000H – 2400H Programa
Rotinas do Monitor
• Nome endereço altera função
• Letecla 02E7 A H L Ler p/A• MostraA 036E todos MostraA
• MostraD 0363 todos MostraDE
• Delay 05F1 A D E Atraso ( D=1 = 100ms)
• ( D=0 ??? )
• LOOP xxxx ; atraso• DCR D
• JN Z LOOP
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 036EHMOSTRAD equ 0363HDELAY 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 7END
Para contar com 4 dígitos ? JNC endereço
; Por fazer no programa anterior CONT1.asm1) 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
Porta paralela 8155
+Vcc
PA0
PA1
PA7
PB0
PB1
PB7
8155+Vcc
+Vcc
+Vcc
0 1 2 3 4 5 6 7
TM2
PAPB
0 - entrada 1 - saída
PC00 - ALT1 11 - ALT2 01 - ALT3 10 - ALT4
0 - desabilita 1 - habilita
controle do timer
TM1 PAPBPC1 PC2 IEA IEB
Interrupção PBInterrupção PA
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 COMMANDLOOP: IN CHAVES ; Le chaves p/A• OUT LEDS ; Acende LEDs
• JMP LOOP• END
Porta paralela 8155
+Vcc
PA0
PA1
PA7
PB0
PB1
PB7
8155+Vcc
+Vcc
+Vcc
0 1 2 3 4 5 6 7
TM2
PAPB
0 - entrada 1 - saída
PC00 - ALT1 11 - ALT2 01 - ALT3 10 - ALT4
0 - desabilita 1 - habilita
controle do timer
TM1 PAPBPC1 PC2 IEA IEB
Interrupção PBInterrupção PA
REGISTRO END. 8155
COMANDO 20H
PORTA A 21H
PORTA B 22H
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• EILOOP: 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 !!
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 11111110
• SETAR o BIT definido com 1 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 !!!
• ;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
Interrupções
• São desvios do programa ocasionados por eventos externos.
• Interrupção por Software
• Interrupção por HardwareNívelBorda AscendenteBorda DescendenteBorda e nível
Interrupções no 8085 CPU RAM
• RST0 0000H 2000H • ........• RST3 0018H 2018H• RST4 0020H 2020H• RST5 0028H 2028H
Prioridade• TRAP 0024 1 20D1H
RST5.5 002C 4 20C8H• RST6 0030 2030H• RST6.5 0034 3 20CBH• RST7 0038H 2038H• RST7.5 003C 2 20CEH
Interrupções no 8085
• Flags usadosIP – Interrupt Priority
IE – Interrupt Enable
5.5 6.5 7.5
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• RETORG RST5.5 ; Evitar RST 5.5• EI• RETORG RST6.5 ; evitar RST 6.5• EI• RETORG RST7.5 ; Desvio da RST 7.5• JMP T75ORG 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• EILOOP: LDA CONTA• ADI 01H • DAA ; Ajusta p/Decimal• STA CONTA• CALL MOSTRAA• MVI D,05H ; Atraso de 500ms• CALL DELAY• JMP LOOPTRATADOR: MVI A,00H• STA CONTA• EI• RETCONTA: DB 00H• ORG RST7.5 ; Desvio da RST 7.5• JMP TRATADOR• END ints85a.asm
Interrupções no 8085LXI 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 • EILOOP: 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 LOOPHNDLR: PUSH PSW• MVI A,01H• STA STATE• EI• POP PSW• RETSTATE DB 00H ; Flag global INTCOUNT 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.• EILOOP: 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 8085LDA INCRE
• CPI 1• JZ DOIS• MVI A,1• STA INCRE• JMP CONTINUADOIS: MVI A,2• STA INCRECONTINUA ; STA COUNT ; CASO • MVI A,0 • STA STATE ; reinicializa Flag• JMP LOOPT75: PUSH PSW• MVI A,01H• STA STATE• EI• POP PSW• RET
Interrupções no 8085
STATE DB 00H ; Flag globalCOUNT DB 00H ;
Contagem incremento DB • ORG RST7.5 ;Desvio RST 7.5
• JMP T75• END
• Caracteristicas de um tratador de interrupção
Local do tratadorTamanho - PequenoNão alterar RegistradoresNão alterar a pilha
Interrupções
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 ....