Microcontrolador 8051: SFRs e Modos de Endereçamento

Classificado em Computação

Escrito em em português com um tamanho de 6,77 KB

Registos de Funções Especiais (SFRs) do 8051

Os processadores da família do 8051 possuem um conjunto de registos dedicados para funções específicas, que são designados por Registos de Funções Especiais (ou SFRs). Todos os SFRs são registos de oito bits, exceto o DPTR e o PC, que têm comprimento igual a 16 bits. As operações de escrita e de leitura do conteúdo dos SFRs processam-se byte a byte, mediante a execução de instruções do tipo MOV – por exemplo, MOV A, TH0 ou MOV A, #byte; ou ainda, no caso concreto do DPTR, MOV DPTR, #byte2, #byte3. Os registos ACC, B, PSW, P0, P1, P2, P3, IP, IE, TCON e SCON podem também ser escritos, lidos e testados bit a bit.

Registo B

Registo dedicado às operações de multiplicação e divisão inteira, que também pode ser usado como registo de uso geral.

Registo de Palavra de Estado (PSW)

O Registo de Palavra de Estado (PSW) possui quatro flags, cujos estados são afetados pelo resultado de algumas operações efetuadas pela ALU, uma flag de uso geral - F0 - e dois bits - RS0 e RS1 - que são usados para selecionar quatro bancos de memória de dados. No conjunto das quatro flags acima referido, encontram-se: uma flag de carry (CY), que sinaliza a ocorrência de carry (transporte) ao nível de bytes; uma flag de auxiliary carry (AC), que indica a existência de carry do nibble de menor peso para o de maior peso; e as flags P e OV, que sinalizam, respetivamente, a ocorrência de paridade e de overflow (P = "1" indica paridade ímpar). Mediante a atribuição dos valores 00, 01, 10 ou 11 à parelha de bits RS1 e RS0, seleciona-se o acesso aos bancos de memória 0, 1, 2 ou 3, respetivamente. Os bits do PSW e outros bits que, na descrição de alguns registos que se apresentam adiante, são assinalados com "_", estão reservados para desenvolvimentos futuros; segundo indicações do fabricante, não se devem escrever "1"s nessas posições.

PSW.7 | CY | AC | F0 | RS1 | RS0 | OV | - | P | PSW.0

Stack Pointer (Ponteiro de Pilha)

O Stack Pointer (Ponteiro de Pilha) é utilizado para apontar uma pilha de registos localizada na memória RAM interna do processador. É incrementado quando se executam instruções como LCALL e PUSH, e decrementado quando se executam instruções como RET, RETI ou POP. Quando o processador é reiniciado (reset), o Stack Pointer é inicializado com o valor 07H.

Modos de Endereçamento do 8051

A execução de instruções pelos processadores implica o endereçamento de posições de memória e/ou de SFRs, que contêm operandos, ou para os quais se pretende transferir informação. Nesta família de microcontroladores, são possíveis seis modos de endereçamento:

  1. Endereçamento Direto

    Neste modo, acede-se a um registo, cujo endereço é especificado por um byte da própria instrução; este byte sucede o código de operação. O endereçamento direto pode ser utilizado para aceder aos registos da memória interna de dados e aos SFRs. Por exemplo, na instrução ADD A, 50H, é usado este modo de endereçamento; quando esta instrução é executada, o conteúdo do acumulador é somado aritmeticamente ao do registo de memória com endereço 50H, e o resultado da operação é registado no acumulador.

  2. Endereçamento por Registo

    Neste modo de endereçamento, a instrução especifica um registo – R0 a R7 – que contém o operando. Trata-se de instruções codificadas com apenas um byte; o registo que contém o operando é o especificado por três bits desse byte. Para exemplificar este modo de endereçamento, refere-se a instrução ADD A, R5, que, ao ser executada, conduz à escrita de um valor no acumulador que é a soma do seu conteúdo (antes da execução da instrução) com o conteúdo do registo R5 do banco selecionado.

  3. Endereçamento Indireto

    Neste modo de endereçamento, a instrução especifica um registo, cujo conteúdo é o endereço da posição de memória que vai ser acedida. O endereço pode ser o conteúdo de um registo R0 ou R1 (endereçamento da RAM interna ou externa, com 8 bits) ou do DPTR (endereçamento de memória externa, com 16 bits). A instrução ADD A, @R1 constitui um exemplo das que utilizam este modo de endereçamento; quando esta instrução é executada, o conteúdo do acumulador é somado com o da posição de RAM interna cujo endereço é o conteúdo do registo R1 do banco selecionado.

  4. Endereçamento Específico de Registos

    A execução de instruções, nas quais é utilizado este modo de endereçamento, afeta o conteúdo de um registo determinado (por exemplo, o acumulador, o registo B ou o DPTR). Neste caso, não é necessário nenhum byte de endereço na instrução. Uma instrução na qual se utiliza este modo de endereçamento é INC B (incremento do conteúdo do registo B).

  5. Endereçamento Imediato

    Neste modo de endereçamento, o código de operação é seguido por uma constante, que é um operando. A título de exemplo, refere-se a instrução MOV A, #100, cuja execução provoca a escrita do valor 100 (decimal) no acumulador.

  6. Endereçamento Indexado

    Este modo de endereçamento é muito usado para proporcionar o acesso a tabelas de valores que são memorizados em memória de programa (look-up tables). Neste caso, o endereço da base da tabela é constituído por 16 bits e é escrito no DPTR ou no PC; o endereço relativo é registado no acumulador. Por exemplo, se no DPTR e no acumulador estiverem registados os valores FF00H e 10H, respetivamente, pretende-se transferir o conteúdo da posição de memória de programa com endereço FF10H para o acumulador, mediante a execução da instrução MOVC A, @A+DPTR. Este modo de endereçamento é também usado na determinação de endereços quando se executam instruções de salto condicional.

Entradas relacionadas: