Microcontrolador 8051 Assembly 8051 UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 ● ● ● Num sistema microprocessado, geralmente, não existe um sistema operacional; O programa desenvolvido pelo programador deve cuidar tanto da lógica do programa, bem como da configuração e acesso ao hardware e do gerenciamento de memória; Geralmente existe limitação de espaço de memória; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 ● UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Linguagem Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 ● ● ● ● A Linguagem Assembly É a codificação dos códigos de máquina para uma linguagem mais próxima da linguagem entendida pelo ser humano; As instruções do processador são codificadas em mnemônicos para facilitar a identificação de sua funcionalidade; A tradução da linguagem assembly para os códigos de máquina do processador é feita através de um programa chamado assembler (ou montador) UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 ● ● A Linguagem Assembly É totalmente atrelada ao processador, ou seja, cada processador possui a sua própria linguagem; ● UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Linguagem Assembly do uC 8051 UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 ● As instruções do 8051 podem ser classificadas em 5 tipos diferentes: – Transferência de dados; – Aritméticas; – Lógicas; – Booleanas; – Desvio; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Define o modo como os dados são acessados; ● O 8051 possui 5 modos de endereçamento: – Endereçamento direto; – Endereçamento indireto; – Endereçamento via registrador; – Endereçamento por constante imediata; – Endereçamento indexado; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Endereçamento imediato: o dado é especificado na própria instrução: mov A, #31 – ; carrega o valor 31 no acumulador O operando é identificado pelo símbolo #; Acumulador 31 UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Endereçamento direto: o endereço do dado é especificado diretamente na instrução: mov A, 31 Memória 29 98 30 73 31 1 32 128 UTFPR / DAELN ; carrega o conteúdo do endereço 31 no acumulador Acumulador 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Endereçamento indireto: o dado é acessado através do endereço contido nos registradores R0 ou R1. – Quando o conteúdo do registrador é um endereço, este registrador é precedido pelo símbolo @; – Neste caso, os registradores R0 e R1 atuam como ponteiros para o dado UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento mov A, @R0 ; carrega o conteúdo da posição ; de memória indicada no ; registrador R1 no acumulador Memória R0 31 UTFPR / DAELN 29 98 30 73 31 1 32 128 Microcontroladores 1 Acumulador 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Endereçamento indexado: o dado é acessado através do endereço contido no registrador DPTR. movc A, @A+DPTR movx A, @DPTR – ; carrega o conteúdo da ; posição de memória de ; programa indicada no ; registrador DPTR no acumulador ; carrega o conteúdo da posição ; de memória RAM externa indicada ;no registrador DPTR no acumulador Neste caso, o registrador DPTR atua como ponteiro para o dado UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento movx A, @DPTR ; carrega o conteúdo da posição ; de memória RAM externa indicada ;no registrador DPTR no acumulador Memória DPTR 1A31 UTFPR / DAELN 1A29 98 1A30 73 1A31 1 1A32 128 Microcontroladores 1 Acumulador 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Modos de Endereçamento ● Endereçamento via Registrador: o dado é acessado através dos registradores R0 a R7. mov A, R5 ; carrega o conteúdo do ;registrador R5 no acumulador Banco de Registradores R7 98 R6 73 R5 1 Acumulador 1 ... R0 UTFPR / DAELN 128 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● ● ● ● A pilha é uma estrutura de armazenamento de dados em que cada novo dado é colocado sempre no topo da pilha; O registrador stack-pointer (SP) aponta para o topo da pilha; A cada novo dado colocado na pilha, o registrador SP é incrementado, para apontar o topo da pilha; A cada dado retirado da pilha, o registrador SP é decrementado. UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● ● As instruções PUSH e POP inserem e retiram respectivamente os dados da pilha; Nos microprocessadores, a pilha é usada principalmente para guardar o estado do processador na chamada de sub-rotinas e interrupções; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Estado atual da pilha R0 Memória 1Ah A 2Fh 32h 31h SP 30h UTFPR / DAELN 33h 30h Microcontroladores 1 Dado 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução push ACC – Passo 1: o registrador SP é incrementado, apontando para a próxima posição de memória: R0 Memória 1Ah A 2Fh 32h 31h SP 31h UTFPR / DAELN 33h 30h Microcontroladores 1 Dado 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução push ACC – Passo 2: o conteúdo do acumulador é copiado para a posição apontada pelo registrador SP: R0 Memória 1Ah A 2Fh SP 31h UTFPR / DAELN 33h 32h 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução push R0 – Passo 1: o registrador SP é incrementado, apontando para a próxima posição de memória: R0 Memória 1Ah A 2Fh SP 32h UTFPR / DAELN 33h 32h 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução push R0 – Passo 2: o conteúdo do registrador R0 é copiado para a posição apontada pelo registrador SP: R0 Memória 1Ah A 2Fh SP 32h UTFPR / DAELN 33h 32h 1Ah 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Novo estado da pilha: R0 Memória 1Ah A 2Fh SP 32h UTFPR / DAELN 33h 32h 1Ah 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução pop R0 – Passo 1: o conteúdo da posição apontada pelo registrador SP é copiado para o registrador R0: R0 Memória 1Ah A 2Fh SP 32h UTFPR / DAELN 33h 32h 1Ah 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Funcionamento da PILHA ● Executando uma instrução pop ACC – Passo 2: o conteúdo da posição de memória apontada pelo registrador SP é copiado para o acumulador: R0 Memória 1Ah A 2Fh SP 31h UTFPR / DAELN 33h 32h 31h 2Fh 30h Dado 1 Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● Um programa em linguagem assembly possui os seguintes elementos básicos: – Instruções: são os mnemônicos das instruções do processador; – Operandos: são as informações referentes aos dados processados pelas instruções; – Pseudo-instruções: são declarações inseridas no código fonte para orientar o montador; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) – Definições: são declarações que atribuem um nome a algumas constantes, tornando mais fácil a referềncia no resto do programa; – Rótulos (labels): são nomes atribuídos à endereços no programa; – Comentários: informações colocadas pelo programador para documentar o programa. É qualquer texto colocado após um sinal de ponto-e-vírgula; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● ● A formatação de um programa em assembly é bastante rígida; Cada linha do programa contém uma informação para o montador; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● A estrutura da linha é a seguinte: – Os rótulos são colocados próximos a margem esquerda da linha. Podem vir seguidos do sinal : (dois pontos); – Seguindo o rótulo, está o mnemônico da instrução e os operandos; – Após os operandos estão os comentários; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● Exemplo: inicio: mov SP, #30h mov A, #45 UTFPR / DAELN ; inicializa a pilha ; atribui o valor inicial ; ao acumulador Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● Estruturas básicas de um programa em assembly: – Subrotinas: uma porção de código executada várias vezes no programa. São chamadas por instruções no programa e causam um desvio da sequência normal de execução do programa; – Interrupções: causam o desvio do fluxo normal de execução do programa devido a um evento de hardware. São como as subrotinas, mas não são causadas por instruções do processador, mas sim por eventos de hardware. UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● Estruturas básicas de um programa em assembly: – Decisões: são estruturas de programação que permitem desviar o fluxo de execução de um programa conforme o estado de determinadas condições. Estas condições são verificadas pelos flags; – Repetições: são estruturas de programação que permitem executar um pedaço de código várias vezes; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Microcontrolador 8051 Estrutura Básica de um programa em Linguagem Assembly (para o uC 8051) ● Estruturas básicas de um programa em assembly: – Pseudo-instruções: ● ● ● ● ORG: definem um endereço de memória, onde a instrução da linha seguinte será alocada; END: indica o fim de um programa; EQU: Atribuem um valor a um rótulo. São usados para definir constantes; DB, DW: definem (reservam) espaços de memória para alocar dados. São usados para definir variáveis; UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk