Modos de Endereçamento e Funcionamento do Microcontrolador 8051
Classificado em Computação
Escrito em em
português com um tamanho de 4,69 KB
Registradores de Funções Especiais
Os registradores de funções especiais incluem posições de acesso às portas de E/S, registradores de interrupção, registradores da porta serial, temporizadores e registradores aritméticos. Aqueles situados em endereços múltiplos de 8 também podem ser endereçados bit a bit.
Modos de Endereçamento
- Endereçamento Imediato: O valor do operando faz parte do corpo da instrução e segue o opcode na memória de programa. O operando deve ser precedido do símbolo #, a fim de evitar a confusão com o modo direto. Exemplo:
MOV B,#255- faz o registrador B igual a FFH. - Endereçamento Direto: Neste modo, a instrução especifica o endereço do operando, que deve ser um número de 8 bits. Somente dados dos primeiros 128 bytes da memória RAM interna e dos registradores de funções especiais são endereçados deste modo. Exemplo:
MOV A,25H- traz para o acumulador o conteúdo do byte 25H da RAM interna. - Endereçamento de Bits Individuais: As instruções que manipulam bits individuais especificam este bit de forma direta, quer sob a forma de um número, quer sob a forma de uma abreviatura, como no caso das portas de E/S ou de outros bits dos registradores de funções especiais. Exemplos:
SETB 0FH- seta o bit mais significativo do byte 21H da memória interna;CLR P1.0- zera o bit menos significativo da porta 1. - Endereçamento Indireto: A instrução especifica um registrador, cujo conteúdo é o endereço do operando. Este modo pode ser utilizado para endereçar tanto a memória interna quanto a memória externa. Se o endereço do operando for de 8 bits, os registradores que podem ser especificados no corpo da instrução são R0, R1 ou SP. Caso o endereço seja de 16 bits, o registrador a ser utilizado tem que ser DPTR. Exemplos:
MOV @R1,#15H- coloca o valor 15H no byte endereçado por R1;MOV @DPTR,A- copia o valor do acumulador para o byte endereçado por DPTR. - Endereçamento Indexado: Este modo serve apenas para endereçar a memória de programa (instrução
MOVC). Nesse tipo de acesso, o endereço do operando é dado pela soma do conteúdo de um registrador de base, que pode ser DPTR ou PC, com o conteúdo do acumulador. Dessa forma, DPTR ou PC apontam para a base de uma tabela enquanto o acumulador seleciona um elemento dentro da tabela. Exemplos:MOVC A,@A+DPTR- o acumulador indica o offset de um byte dentro da tabela que inicia em DPTR;MOVC B,@A+PC- o registrador B recebe uma cópia do valor do byte que está A posições à frente do PC. - Endereçamento de Registradores R0 a R7: Os opcodes das instruções de acesso aos registradores R0 a R7 utilizam três dos seus oito bits para especificar o registrador endereçado. Desta forma, este modo consegue instruções mais curtas do que o modo direto, por dispensar o byte com o endereço. O banco de registradores referenciado é aquele que está selecionado pelos bits RS1 e RS0 no instante em que a instrução é executada. Exemplo:
MOV A,R3- copia R3 para A.
Funcionamento da Pilha
É importante notar que SP é um registrador de 8 bits, e que por isso o tamanho da pilha do 8051 é bem menor do que o das pilhas normalmente usadas com outros microprocessadores. Além disso, SP endereça somente a RAM interna. O funcionamento da pilha também é diferente, pois aqui o armazenamento se faz no sentido dos endereços crescentes e os bytes são empilhados um a um, de acordo com as seguintes regras:
- Instrução PUSH: SP é incrementado e o byte é escrito na posição apontada por SP;
- Instrução POP: o byte da posição apontada por SP é copiado para o destino e em seguida SP é decrementado;
- Chamadas de sub-rotinas e interrupções: os dois bytes que formam o endereço de retorno são empilhados, com o byte menos significativo no endereço mais baixo;
- Retorno de sub-rotinas e interrupções: os dois bytes que formam o endereço de retorno são copiados para o PC.
Desta forma, o registrador SP aponta sempre para o topo da pilha.
Interrupções
O 8051 tem cinco fontes de interrupção: duas entradas externas (INT0 e INT1), dois temporizadores/contadores (Timer 0 e Timer 1) e o canal de comunicação serial. Conforme descrito na seção 0.6, as entradas das interrupções externas e o canal serial ocupam pinos da porta P3.