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