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 04 3C 3E 25 RI PC ACC SP BC DE HL 04 – INR B 3C – INR A 3E 25 – MVI A 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 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
Monitor Eprom 0000H- 2000H RAM 2000H – 2400H Programa Rotinas do Monitor KIT 8085 Monitor Eprom 0000H- 2000H RAM 2000H – 2400H Programa
Rotinas do Monitor Letecla 02E7 A H L Ler p/A 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
Para contar com 4 dígitos ? JNC endereço ; 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
Porta paralela 8155 REGISTRO END. 8155 COMANDO 20H PORTA A 21H PORTA B
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 REGISTRO END. 8155 COMANDO 20H PORTA A 21H PORTA B
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 !!
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 DADO DB 0FFH END
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 Prioridade RST0 0000H 2000H ........ 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 usados IP – 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 RET ORG RST5.5 ; Evitar RST 5.5 ORG RST7.5 ; Desvio da RST 7.5 JMP T75 ORG TRAP ; não Mascarável 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 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
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 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 Local do tratador Tamanho - Pequeno Não alterar Registradores Não alterar a pilha
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 ....