Microcontroladores MCS–51: modelo de programa, estrutura, comandos. Microcontroladores MCS–51. Diagrama de blocos, ALU, memória de dados Programação de microcontroladores mcs 51 em C

A base do microcontrolador (ver Fig. 1) é uma unidade lógica aritmética (ALU) de 8 bits. A memória MK possui arquitetura Harvard, ou seja, logicamente dividida em: memória de programa - PP (interna ou externa), endereçada por um contador de programa (SC) de 16 bits e memória de dados - interna (Resident Data Memory - RPD) 128 (ou 256) bytes, bem como externa (Externa Memória de Dados – VPD) até 64 KB. Fisicamente, a memória do programa é implementada em ROM (somente leitura) e a memória de dados é implementada em RAM (os dados podem ser gravados e lidos).

A recepção e saída de sinais externos são realizadas através de 4 portas P0..P3 de oito bits. Ao entrar em contato memória externa programas (VPP) ou memória de dados (DVD), as portas P0 e P2 são usadas como um barramento de endereço/dados externo multiplexado. As linhas da porta P3 também podem executar funções alternativas (ver Tabela 1).

O registro DPTR de 16 bits forma o endereço VPD ou endereço base da memória do programa no comando de conversão do acumulador. O registrador DPTR também pode ser usado como dois registradores independentes de 8 bits (DPL e DPH) para armazenar operandos.

O registrador de comando interno (RC) de 8 bits recebe o código do comando que está sendo executado; este código é decifrado pelo circuito de controle, que gera sinais de controle (ver Fig. 1).

O acesso aos registradores de funções especiais - RSF (SFR - na Fig. 1 eles estão circulados com uma linha pontilhada) só é possível usando endereçamento direto de bytes na faixa de endereços de 128 (80h) e mais.


A memória de dados residente (RDM) nos primeiros modelos de microcontroladores da família MCS-51 tinha volume de 128 bytes. Os 32 bytes inferiores do RPD também são registradores de uso geral – RON (4 bancos de 8 RONs cada). O programa pode entrar em contato com um dos 8 RONs do banco ativo. A seleção do banco RON ativo é realizada através da programação de dois bits no registrador de status do processador - PSW.


Tabela 1 – Atribuições de pinos MCS–51

Pino nº. Designação Propósito
1..8 P1 Porta de E/S quase bidirecional de 8 bits
9 RST

Sinal de reset (nível ativo – alto);

O sinal RST reinicializa: o PC e a maioria dos Registros de Funções Especiais (SFRs), desativando todas as interrupções e temporizadores; seleciona Banco RON 0; escreve “todos” nas portas P0_P3, preparando-os para entrada; escreve o código 07H no stack pointer (SP);

10..17

Porta de E/S quase bidirecional de 8 bits; após a gravação na categoria correspondente “1” – executa funções adicionais (alternativas):

Entrada porta serial– RxD;

Saída porta serial – TxD;

Entrada de interrupção externa 0 – ~INT0;

Entrada de interrupção externa 1 – ~INT1;

Entrada temporizador/contador 0 – T0;

Entrada temporizador/contador 1 – T1;

Saída estroboscópica sinal ao escrever para VPD – ~ WR;

Saída estroboscópica sinal ao ler do VPD – ~ RD;

18, 19 X1, X2 Pinos para conectar um ressonador de quartzo ou circuito LC;
20 GND Conclusão geral;
21..28 P2 Porta de E/S quase bidirecional de 8 bits; ou endereçar a saída A no modo de operação com memória externa (VPP ou VPD);
29 PME Strobe para leitura de Memória de Programa Externa, emitido somente ao acessar ROM externa;
30 ALE Estroboscópio de endereço de memória externa (VPP ou VPD);
31 EA Desabilitar o RPP, nível “0” nesta entrada transfere o MK para comando de amostragem só da pista ;
39..32 P0 Porta de E/S bidirecional de 8 bits; ao acessar a memória externa, ele emite os endereços A (que são escritos em um registro externo usando o sinal ALE) e depois troca um byte de forma síncrona com o sinal ~PME (para comandos) ou ~WR,~RD (para dados em VPD) , ao acessar a Memória Externa todas as unidades são escritas no registrador da porta P0, destruindo as informações ali armazenadas;
40 Ucc Saída de tensão de alimentação

A troca de bancos RON simplifica a execução de sub-rotinas e o tratamento de interrupções, porque não há necessidade de enviar o conteúdo dos RONs do programa principal para a pilha ao chamar uma sub-rotina (basta ir para outro banco de RONs ativo na sub-rotina).

O acesso ao RPD é possível usando endereçamento indireto ou direto de bytes (o endereçamento direto de bytes permite acessar apenas os primeiros 128 bytes do RPD).

A área RPD estendida (para microcontroladores da família MCS-52 e famílias subsequentes) do endereço 128 (80h) ao 255 (FFh) só pode ser endereçada pelo método de endereçamento indireto.

Tabela 2 – Bloco de Registradores de Funções Especiais (s f r)

Código mnemo Nome
0E0h * ACC Bateria
0F0h *B Registrar expansor de acumulador
0D0h *PSW Palavra de status do processador
0B0h *P3 Porta 3
0A0h *P2 Porta 2
90h *P1 Porta 1
80h *P0 Porta 0
0B8h * IP Registro de prioridade de interrupção
0A8h *IE Registro de máscara de interrupção
99h SBUF Buffer do transceptor serial
98h * ESCONHA Registro de status/controle de porta serial
89h TMOD Registro do modo temporizador/contador
88h *TCON Controle de temporizadores/contadores/registro de status
8Dh TH1 Temporizador 1 (byte alto)
8Bh TL1 Temporizador 1 (byte baixo)
8 canais TH0 Temporizador 0 (byte alto)
8Ah TL0 Temporizador 0 (byte baixo)
83h DPH Registro de ponteiro de dados (DPTR) (byte alto)
82h DPL Registro de ponteiro de dados (DPTR) (byte baixo)
81h SP Registro de ponteiro de pilha
87h PCON Registro de controle de consumo de energia

2. MODELO DE SOFTWARE MCS–51


TIPOS DE COMANDO MCS–51

Quase metade das instruções são executadas em 1 ciclo de máquina (MC). Com uma frequência de oscilador de quartzo de 12 MHz, o tempo de execução de tal comando é de 1 μs. As instruções restantes são executadas em 2 ciclos de máquina, ou seja, em 2 μs. Somente as instruções de multiplicação (MUL) e divisão (DIV) são executadas em 4 ciclos de máquina.

Durante um ciclo de máquina ocorrem dois acessos à Memória de Programa (interna ou externa) para leitura de dois bytes de um comando ou um acesso à Memória Externa de Dados (EDM).

3. MÉTODOS (FORMAS) DE ENDEREÇAR MCS-51

1. ENDEREÇO ​​DE REGISTRO – o operando de 8 bits está localizado no RON do banco de registros selecionado (ativo);

2 ENDEREÇO ​​DIRETO (indicado pelo sinal – #) – o operando está localizado no segundo (e para um operando de 16 bits no terceiro) byte do comando;

3 ENDEREÇO ​​INDIRETO (indicado pelo sinal – @) – o operando está localizado na Memória de Dados (RDM ou VPD), e o endereço da célula de memória está contido em um dos RONs de endereçamento indireto (R0 ou R1); nos comandos PUSH e POP o endereço está contido no ponteiro de pilha SP; o registro DPTR pode conter um endereço VPD de até 64K;

4 DIRECT BYTE ADDRESSING – (dir) – é utilizado para acessar células RPD (endereços 00h...7Fh) e registradores de funções especiais SFR (endereços 80h...0FFh);

5 DIRECT BITS ADDRESSING – (bit) – é usado para acessar 128 bits endereçáveis ​​separadamente localizados em células RPD nos endereços 20H...2FH e para bits endereçáveis ​​separadamente de registradores de funções especiais (ver Tabela 3 e modelo do programa);

6 ENDEREÇO ​​DE ÍNDICE INDIRETO (indicado pelo sinal – @) – simplifica a visualização de tabelas na Memória de Programa, o endereço PP é determinado pela soma do registrador base (PC ou DPTR) e do registrador de índice (Acumulador);

7 ENDEREÇO ​​IMPLÍCITO (INTERRUPTO) – o código de comando contém uma referência implícita (por padrão) a um dos operandos (mais frequentemente ao Acumulador).

4. FORMATO DA PALAVRA DE STATUS DO PROCESSADOR (PSW)

C – carry (CARY) ou flag de empréstimo, também desempenha as funções de “Acumulador Booleano” em comandos que operam com bits;

AC – flag de carry auxiliar (adicional) – é colocado em “1” se no comando de adição (ADD, ADDC) houve transferência da tétrade baixa para a tétrade alta (ou seja, do 3º bit para o 4º bit);

F0 – flag do usuário – configurado, resetado e verificado por software;

RS1 RS0 Banco Endereço (diretório)
0 0 0 00h..07h
0 1 1 08h..0Fh
1 0 2 10h..17h
1 1 3 18h..1Fh

RS1,RS0 – Cadastro de seleção de banco:

OV – Flag de overflow aritmético; seu valor é determinado pela operação “OU Exclusivo” dos sinais de transferência de entrada e saída do bit mais significativo da ALU; um único valor deste sinalizador indica que o resultado de uma operação aritmética em código adicional ultrapassou os limites permitidos: –128…+127; quando é realizada uma operação de divisão, o flag OV é zerado e, no caso de divisão por zero, é zerado; na multiplicação, o flag OV é acionado se o resultado for maior que 255 (0FFH);

Bit PSW – Reserva, contém um trigger, acessível por escrita ou leitura;

P – sinalizador de paridade – é a adição do número de bits unitários no acumulador ao par; gerado por um circuito combinacional (software acessível apenas por leitura).

Os microcontroladores MCS-51 não possuem o sinalizador “Z”. Mas nos comandos de salto condicional (JZ, JNZ), o conteúdo atual (zero ou diferente de zero) do acumulador é verificado pelo circuito combinacional.

Todos os comandos de transferência e troca de operandos podem ser realizados através do Acumulador (ver Fig. 3). Além disso, as transferências de/para a memória externa (memória de programa ou memória de dados) só podem ser realizadas através da bateria.

A maioria das transferências também pode ser feita através de um byte direto (dir). Existem até transferências dir–dir (veja a Figura 3).

As transferências ausentes de RON para RON podem ser implementadas como transferências de RON para um diretório de bytes endereçado diretamente (levando em consideração que os RONs estão localizados na área inicial da memória de dados residente, cujas células podem ser endereçadas como dir).

As instruções de troca XCH permitem que bytes sejam transferidos sem destruir ambos os operandos.

As instruções aritméticas são executadas apenas no acumulador. Portanto, primeiro o primeiro operando deve ser colocado no Acumulador e depois somar ou subtrair o segundo operando. O resultado é colocado no acumulador.


O comando de subtração SUBB é executado apenas com um empréstimo (ou seja, o sinalizador Cary também é subtraído do resultado). Portanto, para executar um comando de subtração sem empréstimo, você deve primeiro emitir o comando C flag clear (CLRC).

A instrução para multiplicar operandos de byte único - MULAB - coloca um resultado de dois bytes (16 bits): o byte baixo no acumulador, o byte alto no registrador B.

O resultado da execução do comando de divisão de operandos de byte único - DIVAB - é colocado: o quociente - um Acumulador, o restante - no registro B.

A instrução aritmética INC adiciona um ao operando selecionado. A instrução aritmética DEC subtrai um do operando selecionado. O comando Decimal Accumulator Adjustment (DAA) ajuda a adicionar números decimais codificados binários (BCD) sem convertê-los para o formato hexadecimal (formato hexadecimal). Os operandos de origem devem estar no formato BCD, ou seja, Cada tétrade de um byte contém apenas números de 0 a 9 (não pode haver números hexadecimais: A, B, C, D, E, F). Portanto, um byte pode conter números de 00 a 99 para números BCD compactados ou números de 0 a 9 para números BCD descompactados.

O comando DA A - correção decimal executa ações no conteúdo do acumulador após adicionar números BCD no processador (os números foram somados de acordo com as leis da aritmética hexadecimal) da seguinte forma (ver exemplo):

· se o conteúdo da tétrade baixa do acumulador for maior que 9 ou o sinalizador de transporte auxiliar estiver definido (AC = 1), então 6 é adicionado ao conteúdo do acumulador (ou seja, os seis dígitos faltantes em formato hexadecimal);

· se depois disso o conteúdo da tétrade mais alta do Acumulador for maior que 9 ou a bandeira C for definida, então o número 6 é adicionado à tétrade mais alta do Acumulador.

O comando de correção decimal DA A não é usado após o comando de incremento (INC) porque o comando de incremento não afeta (altera) os flags C e AC.

Comandos lógicos:

"E" lógico - ANL,

"OU" lógico – ORL,

Comandos lógicos XOR - XRL - são executados no Acumulador (assim como os aritméticos), mas é possível executar comandos lógicos também no byte direto (dir). Neste caso, o segundo operando pode ser:

Na bateria ou

O operando imediato de um comando.

Comandos de rotação (RR A, RL A) e comandos de rotação através do sinalizador CARY (RRC A, RLC A) deslocam ciclicamente o conteúdo do acumulador em 1 bit. As transferências de operandos de bit são realizadas apenas através do sinalizador C.

Arquitetura do microcontrolador

Compreender a arquitetura do microcontrolador é fundamental ao aprender linguagens de programação assembly. A estrutura do montador, o formato de suas instruções, o endereçamento dos operandos, etc. são totalmente determinados pela arquitetura. O objetivo de estudar arquitetura é:

· identificação do conjunto de registros disponíveis para programação, sua finalidade funcional e estruturas;

compreensão da organização memória de acesso aleatório e o procedimento para sua utilização;

· familiaridade com tipos de dados;

· estudar o formato dos comandos de máquina;

· clarificação da organização do tratamento de interrupções.

A arquitetura da família MCS-51 é em grande parte determinada pelo seu propósito - a construção de dispositivos digitais compactos e baratos. Todas as funções do MK são implementadas em um único microcircuito. A família MCS-51 inclui uma variedade de chips dos mais microcontroladores simples bastante complexo. Os microcontroladores da família MCS-51 permitem realizar ambas as tarefas de controle vários dispositivos e implementar componentes individuais do circuito analógico. Todos os microcircuitos desta família funcionam com o mesmo sistema de comando, a maioria deles são implementados nos mesmos pacotes com a mesma pinagem (numeração de pinos do pacote). Isso permite usar microcircuitos de diferentes fabricantes (como Intel, Dallas, Atmel, Philips, etc.) para o dispositivo desenvolvido sem modificação diagrama esquemático dispositivos e programas.

MCS-51 é baseado na arquitetura Harvard, onde os espaços de endereço da memória de programa e de dados são separados.

O diagrama de blocos do controlador é apresentado na Fig. 2.3 e consiste nas seguintes unidades funcionais principais: unidade de controle, unidade lógica-aritmética, unidade temporizador/contador, interface serial e interrupções, contador de programa (contador de programa), memória de dados e programa memória.

A comunicação bidirecional é realizada por meio de um barramento de dados interno de 8 bits. Vamos dar uma olhada mais de perto no propósito de cada bloco. Quase todos os membros da família MCS-51 são construídos de acordo com este esquema. Vários microcircuitos desta família diferem apenas em registros para fins especiais (incluindo o número de portas). O sistema de comando de todos os controladores da família MCS-51 contém 111 comandos básicos com formato de 1, 2 ou 3 bytes e não muda ao passar de um chip para outro. Isto garante excelente portabilidade do programa de um chip para outro.

Unidade de controle e sincronização(Tempo e Controle) é projetado para gerar sinais de sincronização e controle que garantem a coordenação colaboração Blocos OEVM em todos os modos permitidos de sua operação. A unidade de controle inclui:


  • dispositivo para formar intervalos de tempo,
  • circuito combinacional de entrada-saída,
  • registro de comando
  • decodificador de comando.

Entrada e saída sinais da unidade de controle e sincronização:

1 PSEN- permissão memória de programa;

2 ALE– sinal de saída de permissão de fixação de endereço;

3 PROG.– sinal de programação;

4 E.A.– bloqueando o trabalho com memória interna;

5 PPV– tensão de programação;

6 RST– sinal de reinicialização geral.

O dispositivo para formação de intervalos de tempo é necessário para sincronizar a sequência de estados da CPU que formam o ciclo da máquina, bem como para operação apropriada todas as travas internas e buffers de saída das portas. O ciclo da máquina consiste em seis estados consecutivos (Estados) de S1 a S6, cada um dos quais, por sua vez, é dividido em duas fases:

fase 1 (Fase 1 - P1) e fase 2 (Fase 2 - P2). Assim, um ciclo de máquina pode ser definido como uma sequência de intervalos de tempo S1P1, S1P2, S2P1,...,S6P2. A duração da fase é igual ao período dos pulsos de clock, portanto o ciclo da máquina leva 12 períodos de clock.

O número de ciclos da máquina determina a duração das instruções. Quase todas as instruções são executadas em um ou dois ciclos de máquina, exceto as instruções de multiplicação e divisão, que levam quatro ciclos de máquina para serem executadas. A lógica de E/S é projetada para receber e emitir sinais que garantem a troca de informações com dispositivos externos através das portas de entrada/saída P0-P3.

Registro de comando projetado para registrar e armazenar o código de operação de 8 bits do comando que está sendo executado. O código de operação, com o auxílio de um decodificador de comando e lógica de controle computacional, é convertido em microprograma para execução do comando.

Figura 2.3. Diagrama de blocos de um microcontrolador de chip único Intel 8051

(família MCS-51)

Unidade lógica aritmética(ALU) é uma unidade paralela de oito bits que executa operações aritméticas e lógicas. A ULA consiste em:

  • registros de armazenamento temporário - TMP1 e TMP2,
  • Constantes ROM,
  • adicionador,
  • registro adicional - registro B,
  • bateria - ACC,
  • registrador de palavra de status do programa (registro de sinalizador) - PSW.

Registradores de armazenamento temporário TMP1, TMP2- registradores de oito bits projetados para receber e armazenar operandos durante a execução de operações neles. Esses registros não são acessíveis programaticamente.

ROM Constante garante a geração de um código de correção para representação decimal binária dos dados, um código de máscara para operações de bits e um código constante.

Somador paralelo de oito bitsé um circuito do tipo combinacional com carry sequencial, projetado para realizar operações aritméticas de adição, subtração e operações lógicas de adição, multiplicação, disparidade e identidade.

Registro B- um registrador de oito bits usado durante operações de multiplicação e divisão. Para outras instruções, pode ser tratado como um registro adicional em tempo real.

Bateria- um registrador de oito bits projetado para receber e armazenar o resultado obtido ao realizar operações lógicas-aritméticas ou operações de deslocamento.

Registro de status do programa PSW (palavra de status do programa) projetado para armazenar a palavra de status dos comandos executados. Quando muitas instruções são executadas na ALU, são gerados vários atributos de operação (flags), que são registrados no registrador PSW (palavra de status do programa). Na tabela 1 fornece uma lista de bandeiras do PSW, seus nomes simbólicos e descreve as condições para sua formação.

Bloco de interrupção e interface serial - UART (Receptor/Transmissor Assíncrono Universal) projetado para organizar a entrada e saída de fluxos de informações sequenciais e organizar um sistema de interrupção do programa.

Por definição, uma interrupção significa interromper temporariamente o processo principal de computação para executar alguma ação planejada ou não programada causada pela operação de hardware ou software.

Estas ações podem ser de natureza de serviço, ser solicitações do programa do usuário para realizar manutenção ou ser uma resposta a situações de emergência.

Os microcontroladores da família MCS-51 são construídos na arquitetura Harvard, na qual a memória de programa e a memória de dados são separadas e possuem seus próprios espaços de endereço e formas de acessá-los.

Memória de programa


A capacidade máxima de memória é de 64K bytes, dos quais 4K, 8K, 16K ou 32K bytes de memória (Tabela 7.3.1) estão localizados no chip, o restante está fora do chip.
Quando a tensão no pino EA = V CC São utilizadas memória interna e externa, com EA = V CC = 0 - apenas memória externa.
A Tabela 7.3.1 mostra endereços de acesso à memória do programa para os casos especificados.
A área inferior da memória do programa é alocada para iniciar a operação do microcontrolador (endereço inicial 0000h após reset) e para processar interrupções (os endereços de interrupção estão localizados em intervalos de 8 bytes: 0003h, 000Bh, 0013h, etc.).


A memória do programa é somente leitura e quando acessada:

● para memória externa programas, o sinal ¯PSEN é gerado e um endereço de 16 bits é sempre formado.
O byte baixo do endereço é transmitido pela porta P0 na primeira metade do ciclo da máquina e é corrigido pelo corte do estroboscópio ALE no registrador.
Na segunda metade do ciclo, a porta P0 é usada para inserir um byte de dados da memória externa no MCU.
O byte alto do endereço é transmitido pela porta P2 durante todo o tempo de acesso à memória (Fig. 7.1.11);

● para memória interna o sinal de leitura não é gerado e os ciclos de troca são utilizados no barramento interno do microcontrolador.

Memória de dados

Memória interna Os dados podem ser divididos em três blocos (Tabela 7.3.2).

A memória interna é sempre endereçada por um byte, que fornece endereçamento para apenas 256 células de memória.
Portanto, como pode ser visto na Tabela 7.3.2, para endereçar as células superiores de 8 bits da RAM interna e os registradores de função especial SFR, que ocupam o mesmo espaço de endereço, os comandos utilizam jeitos diferentes endereçamento: indireto e direto.

Características de organização da área inferior da RAM interna estão refletidos na Tabela 7.3.3.

Os baixos 32 bytes de RAM interna com endereços 00h.
1Fh estão agrupados em quatro bancos de oito registros (R0.R7).
Os próximos 16 bytes de RAM com endereços 20h.
2Fh representam uma área de memória com capacidade de 8x16= 128 bits, que permite acesso a cada bit individual.
Para selecionar um endereço de registro bancário, use seu nome R0.
R7, para seleção de banco - bits RS0, RS1 do registrador de status word PSW.

Endereços de bits

Endereços de bits são apresentados na Tabela 7.3.3.

O endereçamento é realizado direto caminho.

Uma lista de todos os registradores de funções especiais SFR com seus endereços é fornecida na Tabela 7.2.2.
Para maior clareza, na Tabela 7.3.

4 é dado registrar mapa de endereçoRSF microcircuitos da família MCS-51 em consideração.
O endereço SFR é determinado pela combinação de dígitos de coluna e linha em sistema hexadecimal Acerto de contas

Por exemplo, o registrador CMOD possui endereço D9h.

Para registradores SFR cujos endereços terminem em 0h ou 8h (estão em negrito), além de byte permitido bit a bit endereçamento.

Neste caso, o endereço do bit que ocupa o registrador Enésima classificação, é definido como XXh + ​​​​0Nh, onde XXh é o endereço do registrador SFR, N = 0,7.
Os endereços de bits nesta área possuem valores de 80H a FFH.
Por exemplo, os endereços de bits do acumulador ACC estão na faixa E0h-E7h.

Memória externa dados (até 64 KB) são criados microcircuitos adicionais memória conectada ao MK.
Para trabalhar com memória de dados externa são utilizados comandos especiais, para que os espaços de endereçamento da memória externa e interna não se sobreponham e, portanto, os dois tipos de memória de dados possam ser utilizados simultaneamente.

Para acessar células externas de memória de dados, use (Fig. 7.1.8):
● comandos com endereçamento indireto;
● leitura de sinais ¯RD e escrita ¯WR;
● porta P0 para transmissão do byte baixo do endereço e recepção/transmissão do byte de dados;
● porta P2 para transmissão do byte alto do endereço.
Métodos de endereçamento.
O sistema de comando usa:
● endereçamento direto, indireto, registro, registro indireto, imediato e índice (endereçamento indireto pela soma dos registros base e índice) operandos fonte;
● endereçamento de registro direto, de registro e indireto operandos de destino.
A combinação destes métodos (endereçamento) fornece 21 modos de endereçamento.
Nesta e nas tabelas do sistema de comandos abaixo, é utilizada a seguinte notação:

Endereçamento direto.

Com este método de endereçamento, a localização do byte ou bit de dados é determinada pelo endereço de 8 bits do segundo (e terceiro) byte do comando.
O endereçamento direto é usado apenas para acessar a memória de dados interna (menos de 128 bytes de RAM) e registros de funções especiais.

Registrar endereçamento.


Este método de endereçamento fornece acesso aos dados armazenados em um dos oito registradores R0.
R7 do atual banco de registros de trabalho.
Ele também pode ser usado para acessar A, B, AB (registro duplo), registro de ponteiro DPTR e sinalizador de transporte C.
O endereço dos registradores especificados está incluído no código de operação, reduzindo assim o número de bytes de comando.

Endereçamento de registro indireto.


Neste caso, o endereço dos dados é armazenado em um registrador de ponteiro, cuja localização é determinada pelo código de operação.
Este método O endereçamento é usado para acessar a RAM externa e a metade superior da RAM interna.
Os registros de ponteiro para endereços de 8 bits podem ser os registros R0, R1 do banco de registros de trabalho selecionado ou o ponteiro de pilha SP para endereçamento de 16 bits, apenas o registro de ponteiro de dados DPTR é usado;

Endereçamento direto.


Com este método de endereçamento, os dados são indicados diretamente no comando e estão localizados no segundo (ou no segundo e terceiro) bytes do comando, ou seja,
nenhum endereçamento de memória é necessário.
Por exemplo, o comando MOV A,#50 carrega o número 50 na bateria A.

Endereçamento de índice.


Este método é um endereçamento de registro indireto, no qual o endereço de um byte de dados é determinado como a soma do conteúdo dos registros base (DPTR ou PC) e índice (A).
Caminho usado apenas para acessar a memória do programa e somente no modo de leitura; facilita a visualização de tabelas armazenadas na memória do programa.

Estrutura da equipe.

O comprimento do comando é um (49 comandos), dois (45 comandos) ou três (17 comandos) bytes.
O primeiro byte do comando sempre contém o código de operação (OC), e o segundo e terceiro bytes são os endereços dos operandos ou os valores imediatos dos dados.

Bits únicos, tétrades, bytes e palavras de byte duplo podem ser usados ​​como operandos.
Existem 13 tipos de comandos, mostrados na Tabela 7.3.5:

● A, PC, SP, DPTR, Rn (n = 0, 7) - acumulador, contador de programa, ponteiro de pilha, registrador de ponteiro de dados e registrador de banco de corrente;
● Rm (m = 0, 1) — registro do banco atual, utilizado para endereçamento indireto;
● direto — endereço de 8 bits do operando endereçado diretamente;
● bit — endereço do bit endereçado diretamente;
● rel — endereço relativo da transição;
● addr11, addr16 — endereço de salto absoluto de 11 e 16 bits;
● #data8, #data16 — dados imediatos (operandos) de comprimento de 8 e 16 bits;
● A10, A9, A0 – bits individuais de um endereço de 11 bits;
● (.) — conteúdo da célula de memória no endereço especificado entre colchetes;
● SB, MB - bytes altos e baixos do operando de 16 bits.

Informações gerais sobre o sistema de comando.

O sistema de comando oferece maiores capacidades de processamento de dados na forma de bits, tétrades, bytes, palavras de byte duplo e também controle em tempo real.
A linguagem macroassembler ASM51 é usada para descrever comandos. A sintaxe da maioria dos comandos consiste em um mnemônico (abreviatura) da operação que está sendo executada, seguido de operandos.
Operandos são usados ​​para indicar várias maneiras endereçamento e tipos de dados.

Em particular, a abreviatura MOV possui 18 comandos diferentes projetados para processar três tipos de dados (bits, bytes, endereços) em diferentes espaços de endereço.
O conjunto de comandos possui 42 mnemônicos de 111 tipos de comandos para especificar 33 funções MK.

Das 111 instruções, 64 são executadas em um ciclo de máquina, 45 em dois ciclos, e apenas duas instruções (MUL - multiplicação e DIV - divisão) são executadas em 4 ciclos. Com uma frequência de gerador de clock de 12 MHz, a duração do ciclo da máquina (12 ciclos de clock) é de 1 μs. Por sinal funcional As equipes podem ser divididas em cinco grupos. Abaixo segue uma descrição dos comandos de cada grupo, apresentados em forma de tabelas. Para tornar as tabelas mais compactas, destacamos um grupo de comandos (Tabela 7.3.6), cuja execução influências(marcado com um sinal +) sobre o estado das bandeiras Registro de palavra de status PSW.

Comandos de transferência de dados

Os comandos de encaminhamento podem ser divididos em subgrupos separados.
Comandos para transferência e troca de dados entre células da memória interna(Tabela 7.3.7).

Os comandos 1-16, tendo o mnemônico MOV dest, src, destinam-se a encaminhamento um byte ou dois bytes (comando 16) de dados do src de origem para o destino de destino, enquanto:
● para indicar fonte(src) são utilizados quatro métodos de endereçamento: registrado (comandos 2-4, 6, 8), direto (comandos 1, 7, 9, 11), indireto (comandos 5, 10) e imediato (comandos 12-16);
● para indicar receptor(destino) São utilizados três métodos: registro (comandos 1, 3...5, 9, 12, 14, 16), direto (comandos 2, 7, 8, 10, 13), indireto (comandos 6, 11, 15).

As equipes 17-20 fornecem intercâmbio informações entre duas células da memória interna de dados (ou transferência bidirecional).
Ao executar comandos HSN, bytes são trocados e comandos XCHD trocam tétrades de operandos de bytes de ordem inferior.

Uma das células é sempre o acumulador A. Como outra célula na troca de bytes, é utilizado um dos registradores Rn do banco atual, A também é uma célula de memória interna endereçada direta ou indiretamente; ao trocar notebooks - apenas uma célula de memória interna endereçável indiretamente.

Como em todos os MKs a pilha está localizada na RAM interna, este subgrupo inclui equipes(20, 21) acessos de pilha PUSH origem, POP destino.
Esses comandos usam apenas endereçamento direto, escrevendo um byte na pilha ou restaurando-o da pilha.
Deve-se ter em mente que nos MKs que não possuem os 128 bytes superiores na RAM, aumentar a pilha além de 128 bytes leva à perda de dados.

Comandos para transferência de dados entre memória de dados interna e externa(Tabela 7.3.8).

Estas instruções usam apenas endereçamento indireto, enquanto um endereço de byte único pode estar localizado em P0 ou R1 do banco de registradores atual, e um endereço de byte duplo pode estar localizado no registrador de ponteiro de dados DPTR.
Durante qualquer acesso à memória externa, o papel de receptor ou fonte de operandos na memória interna é desempenhado pelo acumulador A.

Comandos para transferência de dados da memória do programa(Tabela 7.3.9).

Esses comandos são projetados para ler tabelas da memória do programa.

O comando MOVC A,@A + DPTR é usado para acessar uma tabela com um número de entradas de 0 a 255.

O número da entrada da tabela necessária é carregado no acumulador e o registro DPTR é definido como o ponto inicial da tabela. Uma característica distintiva do outro comando é que o contador de programa PC é usado como ponteiro base e a tabela é acessada a partir de uma sub-rotina. Primeiro, o número do ponto de entrada necessário é carregado no acumulador, depois a sub-rotina é chamada com o comando MOVC A,@A + PC. A tabela pode ter 255 entradas com números de 1 a 255, pois 0 é utilizado para o endereço do comando RET para sair da sub-rotina.

Comandos de processamento de dados aritméticos. Todos os comandos aritméticos são executados em números inteiros sem sinal. Operações em dois operandos(Tabela 7.3.10). Em operações Adição ADICIONAR. adição com transporte ADDC e deduções tendo em conta o empréstimo SUBB:

● o acumulador serve como origem de um operando de 8 bits e destino do resultado;
● a fonte de outro operando é um dos registradores de trabalho Rn (n = 0-7) do banco atual, ou diretamente direto ou indiretamente @Rm (m = 0, 1) a célula de memória RAM endereçada, ou dados diretos #data.

Operações multiplicação MUL e divisões DIVs são executados no conteúdo dos registradores A e B. Ao multiplicar, os 8 bits mais significativos do resultado são gravados no registrador B e os 8 bits menos significativos no registrador A.
Se o produto for maior que 255, o flag de overflow OV é acionado; O sinalizador de carry C é sempre desmarcado. A instrução DIV divide o operando de 8 bits do acumulador A pelo operando de 8 bits do registrador B.
Ao dividir, o quociente (bits de ordem superior) é escrito no registrador em A, o restante (bits de ordem inferior) é escrito em B. Os sinalizadores de transporte C e overflow OV são redefinidos.
Ao tentar dividir por 0, o sinalizador de estouro OV é definido. A operação de divisão é mais frequentemente usada para mudanças e conversões de bases numéricas.

Quando um número binário é dividido por 2 N, ele é deslocado N bits para a esquerda.
Os bits extras são transferidos para o registrador B.

Operações em operandos de byte único(Tabela 7.3.11).

A instrução DA é usada para realizar operações BCD. Os comandos INC e DEC permitem aumentar ou diminuir respectivamente o conteúdo de uma célula de memória em um.
Eles se aplicam ao conteúdo do acumulador A, a um dos registradores de trabalho Rn ou a uma célula de memória endereçada direta ou indiretamente.
A operação de incremento também se aplica ao conteúdo do registrador de ponteiro de 16 bits DPTR.

Comandos de operações lógicas.

Operações duplas

(Tabela 7.3.12).

Os comandos AML, ORL, XRL permitem realizar três operações lógicas duplas em operandos de 8 bits: ANL - multiplicação lógica (AND), ORL - adição lógica (OR), XRL - OR exclusivo (XOR).
As operações são executadas em bits individuais dos operandos. A fonte de um dos operandos e ao mesmo tempo o receptor do resultado é um acumulador (A) ou uma célula de memória endereçável diretamente (direta).
Para a origem do outro operando é utilizado o método de endereçamento registrador, direto, indireto ou imediato.

Operações únicas

(Tabela 7.3.13).
O grupo também inclui uma série de operações de lugar único no conteúdo do acumulador A: operações de compensação (CLR), adição ou inversão lógica (CPL), deslocamentos cíclicos e cíclicos estendidos de 1 bit para a direita (RL, RLC) e esquerda (RR, RRC), troca de tétrades ou deslocamento cíclico de bytes em 4 bits (SWAP), bem como uma operação vazia (NOP), como resultado da qual o estado de todos os registradores MK (exceto o contador do programa) permanece inalterado.

Comandos de transferência de controle

Comandos de salto incondicionais

(Tabela 7.3.14).

Os comandos 1 a 3 diferem apenas no formato do endereço de destino.

O comando LJMP (L - Long) executa um salto “longo” incondicional ao longo endereço especificado addr16, carregando o contador do PC com o segundo e terceiro bytes do comando.
O comando fornece uma transição para qualquer ponto no espaço de endereço de 64K bytes.

O comando AJMP (A - Absoluto) fornece um salto “absoluto” para um endereço dentro de uma página de 2K bytes, cujo endereço inicial é especificado pelos cinco bits mais significativos do contador do programa do PC (inicialmente, o conteúdo do PC é aumentado em 2).

O comando SJMP (S - Short) permite realizar um salto incondicional “curto” para o endereço, que é calculado adicionando o offset assinado rel no segundo byte do comando com o conteúdo do contador do PC, previamente aumentado em 2 .

O endereço de salto está entre -128+127 bytes em relação ao endereço de comando.
Para ir para qualquer outro ponto no espaço de endereço de 64 kilobytes, o comando 4 também pode ser usado com endereçamento indireto @A+DPTR.
Neste caso, o conteúdo de A é interpretado como um número inteiro sem sinal.

Uma operação nula (NOP), como resultado da qual o estado de todos os registros do microprocessador (exceto o contador do programa) permanece inalterado.

Comandos de salto condicional

(Tabela 7.3.15).

As instruções JZ e JNZ saltam se o conteúdo do acumulador for respectivamente igual ou diferente de zero.
O endereço da ramificação é calculado adicionando o deslocamento do sinal relativo rel ao conteúdo do contador do programa do PC após adicionar 2 (o comprimento da instrução em bytes).

O conteúdo da bateria permanece inalterado.
Os comandos não afetam os sinalizadores.

Os comandos CJNE (3-6) são utilizados para implementar um salto condicional baseado no resultado da comparação de dois operandos de 8 bits, cuja localização é indicada nos comandos.
Se seus valores não forem iguais, é feita uma transição.

O endereço de salto é calculado adicionando o deslocamento rel ao conteúdo do contador do PC, previamente aumentado em 3.
Caso contrário, o seguinte comando será executado.

A coluna Algoritmo mostra a influência dos valores dos operandos de 8 bits comparados no sinalizador de transporte C.
Comandos DJNZ (7, projetados para organizar ciclos de programas.

O registro Rn ou célula endereçada diretamente representa o contador de repetição do ciclo, e o deslocamento rel (no segundo e terceiro bytes dos comandos) é o endereço relativo da transição para o início do ciclo.
Quando os comandos são executados, o conteúdo do contador é decrementado em um e verificado quanto a zero.
Se o conteúdo do contador não for zero, é realizada a transição para o início do loop.
Caso contrário, o seguinte comando será executado.

O endereço de salto é calculado adicionando o deslocamento ao conteúdo do contador, previamente aumentado pelo comprimento do comando (em 2 ou 3).
Os sinalizadores de comando não são afetados.

Comandos para chamar sub-rotinas e retornar de programas

(Tabela 7.3.16).
As instruções LCALL “chamada longa” e ACALL “chamada absoluta” realizam uma chamada incondicional a uma sub-rotina localizada no endereço especificado.

A diferença entre esses comandos e os comandos de salto incondicional discutidos acima é que eles salvam o endereço de retorno (o conteúdo do contador) no programa principal na pilha.
O comando de retorno da sub-rotina RET restaura o valor do conteúdo do contador do programa da pilha, e o comando RETI também permite interrupções do nível de serviço.

Os comandos de transferência de controle fazem uso extensivo de endereçamento relativo, que suporta módulos de programa relocáveis.
O endereço relativo é um rel de deslocamento assinado de 8 bits, que fornece ramificação da posição atual do contador do PC em ambas as direções em ±127 bytes.

Para mover para qualquer outro ponto no espaço de endereço de 64K bytes, o endereço direto addr16 ou o endereço indireto @A+DPTR podem ser usados.
Neste último caso, o conteúdo de A é interpretado como um número inteiro sem sinal.

A opção curta de endereçamento direto addr11 dentro da página atual de 2K bytes foi introduzida para compatibilidade com a arquitetura MK48.

Todos esses tipos de endereçamento só podem ser aplicados à operação de salto e, para a operação de chamada, somente os métodos de endereçamento direto addr16 e interno addr11 são permitidos.
Todas as operações condicionais só podem usar endereçamento relativo.

Quando o MK51 reconhece uma solicitação de interrupção, ele emite um dos comandos LCALL addr16, que armazena automaticamente o endereço de retorno na pilha.
No entanto, ao contrário do MK48, o MK51 não possui informações de status salvas automaticamente.

Neste caso, a lógica de interrupção deixa de responder às solicitações do nível que foi aceito para serviço.
Para diminuir o nível de interrupção, utiliza-se o comando de retorno de interrupção RETI, que, além da operação equivalente ao RET, inclui a operação de habilitação da interrupção deste nível.
As operações condicionais típicas do MK51 também incluem as operações JZ, JNZ.
No entanto, existe uma nova operação “Compare and Go” CJNE.

Para este comando, o operando é primeiro comparado de acordo com as regras de subtração de inteiros com uma constante e, de acordo com o resultado da comparação, o flag CY é definido. Em seguida, em caso de discrepância com a constante, é realizada a ramificação. . Comparando um acumulador, registrador ou célula de memória com uma sequência de constantes, obtemos forma conveniente Verificações de correspondência, por exemplo, para identificar casos especiais.

Em essência, o comando CJNE é um elemento de um operador de linguagem de alto nível como CASE.

A equipe DJNZ recebeu maior desenvolvimento.
Agora o programador pode usar não apenas um dos registros de trabalho Rn como contador, mas também qualquer célula de memória DSEG.

Instruções de operações de bits.

O grupo consiste em 12 comandos que permitem realizar operações em um ou dois bits (reset, set, inversão de bits, A e AND e OR lógicos) e 5 comandos projetados para implementar transições condicionais (Tabela 7.3.17).

As instruções fornecem endereçamento direto de 128 bits localizados em dezesseis células internas de RAM com endereços 20h.
2Fh (Tabela 7.3.3) e 128 bits localizados em registradores de uso especial, cujos endereços são múltiplos de oito (mostrados em negrito na Tabela 7.3.4).

Ao realizar operações em dois operandos de bit único, o gatilho do registrador PSW é usado como um acumulador lógico, armazenando o sinalizador de transporte C (Tabela 7.1.2).

Os comandos MOV (1,2) implementam encaminhamento bit de uma célula de bits diretamente endereçável da RAM interna para o flip-flop C ou na direção oposta.
Comandos CRL (3, 4), SETB (5, 6) respectivamente reiniciar para zero ou instalar O sinalizador de transporte C ou o bit especificado é definido como um.
Utilizando os comandos CPL, ANL, ORL (7-12), são realizadas operações lógicas de inversão, adição e multiplicação.

O grupo também inclui comandos (13-17) para implementar operações de salto condicional com um deslocamento relativo de 8 bits rel.
As transições podem ser implementadas quando o bit ou sinalizador de transporte é definido (comandos 13, 16) e quando é redefinido (comandos 14, 17).

O comando JBC, além de passar para o endereço calculado quando a condição (bit) = 1 for atendida, redefine esse bit para o estado zero.
Ao executar comandos de salto condicional, o endereço de salto é calculado após adicionar os números 3 ou 2 (refletindo o número de bytes no comando) ao conteúdo do contador.

A Intel é a fundadora da arquitetura da família MCS-51, que leva o nome do primeiro representante desta família - o microcontrolador 8051, lançado em 1980 baseado na tecnologia n-MOS. Conjunto de sorte dispositivos periféricos, a capacidade de selecionar com flexibilidade a memória de programa externa ou interna e um preço acessível garantiram o sucesso deste microcontrolador no mercado. Do ponto de vista tecnológico, o microcontrolador 8051 era um produto muito complexo para a época - 128 mil transistores foram usados ​​no cristal, o que era 4 vezes o número de transistores do microprocessador 8086 de 16 bits. a família MCS-51 até hoje.

Os principais elementos da arquitetura básica da família (arquitetura do microcontrolador 8051) são:

ALU de 8 bits;

4 bancos de registros, 8 em cada;

Memória de programa interna (residente) 4 KB, tipo ROM ou EPROM (8751);

Memória de dados interna (residente) 128 bytes;

21 registros de funções especiais;

Processador booleano;

Dois temporizadores/contadores de 16 bits;

Controlador de porta serial (UART);

Controlador de interrupção com dois níveis de prioridade;

Quatro portas de E/S de 8 bits, duas das quais são usadas como barramento de endereço/dados para acessar programas externos e memória de dados;

Gerador de relógio integrado.

Em seguida, foi lançado o microcontrolador 8052, que apresentava uma quantidade maior de programa residente e memória de dados, um terceiro temporizador e um controlador de interrupção correspondentemente expandido.

O próximo passo fundamental no desenvolvimento do MCS-51 foi a transferência da tecnologia de fabricação para o CMOS (modificação 8xC51). Isso possibilitou a implementação dos modos Idl (ocioso) e Power Down (consumo reduzido), que proporcionam uma redução acentuada no consumo de energia do cristal e abriu caminho para o uso do microcontrolador em aplicações dependentes de energia, por exemplo, em dispositivos autônomos alimentados por bateria.

E a última etapa importante no desenvolvimento do 8051 MK pela Intel foi o lançamento dos microcontroladores 8xC51FA/FB/FC e 8xC51RA/RB/RC, que, por questões de brevidade, são frequentemente chamados de 8xC51Fx e 8xC51Rx. A principal característica distintiva deste grupo de cristais é a presença de um temporizador/contador especializado (SCA). Além disso, os microcontroladores 8xC51Rx contêm adicionalmente um temporizador de vigilância (WDT). Vejamos a arquitetura e a funcionalidade do PCA com mais detalhes.

O RSA inclui:

Temporizador/contador de 16 bits;

Cinco módulos de amostra e comparação de 16 bits, cada um conectado à sua própria linha de porta de E/S do microcontrolador.

O temporizador/contador serve todos os cinco módulos de amostragem e comparação, que podem ser programados para executar uma das seguintes funções:

Amostragem de 16 bits do valor do temporizador na borda positiva de um sinal externo;

Amostragem de 16 bits do valor do temporizador na borda negativa de um sinal externo;

Amostragem de 16 bits do valor do temporizador em qualquer borda de um sinal externo;

Temporizador programável de 16 bits;

Dispositivo de saída de alta velocidade de 16 bits;

PWM de 8 bits.

Todas as funções acima são executadas no PCA no nível do hardware e não carregam CPU. Isso permite aumentar o rendimento geral, melhorar a precisão das medições e do processamento de sinais e reduzir o tempo de resposta do microcontrolador a eventos externos, o que é especialmente importante para sistemas em tempo real. O PCA implementado em 8xC51Fx (8xC51Rx) acabou sendo assim

Designação

Máx.

frequência (MHz)

ROM/EPROM (byte)

contadores

Foi uma sorte que a arquitetura desses microcontroladores se tornou um padrão da indústria, e o próprio PCA foi reproduzido muitas vezes em várias modificações do MK 8051.

Algumas características de vários microcontroladores MCS-51 fabricados pela Intel são fornecidas na Tabela 1.1.

Inicialmente, os maiores gargalos da arquitetura MCS-51 eram a ALU baseada em bateria de 8 bits e a execução relativamente lenta de instruções (as instruções mais rápidas requerem 12 processadores para serem executadas).

Tabela 1.1

ADC, entradas x bits

periferia,

peculiaridades

Você poder (EM)

Opção de baixa tensão

4 níveis de IRQ, saída de relógio

4 níveis de IRQ, saída de relógio

Versão de baixa tensão 8xC51Fx

4 níveis de IRQ, saída de relógio

4 níveis de IRQ, saída de relógio

4 níveis de IRQ, saída de relógio

Rios frequência do relógio(frequência de sincronização MK)). Isso limitou o uso de microcontroladores da família em aplicações que exigem maior velocidade e cálculos complexos (16 e 32 bits). A questão da modernização fundamental da arquitetura MCS-51 tornou-se urgente. O problema da modernização foi complicado pelo facto de no início dos anos 90 já terem sido criados muitos desenvolvimentos na área do software e hardware família MCS-51 e, portanto, uma das principais tarefas no projeto da nova arquitetura foi a implementação da compatibilidade de hardware e software com desenvolvimentos baseados no MCS-51.

Para resolver este problema, foi criado um grupo conjunto de especialistas da Intel e da Philips, mas posteriormente os caminhos destas duas empresas divergiram. Como resultado, em 1995, surgiram duas famílias significativamente diferentes: MCS-251/151 da Intel e MCS-51XA da Philips (ver subseção 1.2).

Principais características da arquitetura MCS-251:

Espaço de endereço linear de 24 bits, endereçando até 16 MB de memória;

Arquitetura de registradores que permite que os registradores sejam acessados ​​como bytes, palavras e palavras duplas;

Modo de endereçamento de página para acelerar a busca de instruções da memória externa do programa;

Fila de instruções;

Conjunto estendido de instruções, incluindo operações aritméticas e lógicas de 16 bits;

Espaço de endereço de pilha estendido (até 64 KB);

Execute o comando mais rápido em 2 ciclos de clock.

O conjunto de instruções MCS-251 inclui dois conjuntos de instruções - o primeiro conjunto é uma cópia do conjunto de instruções MCS-51 e o segundo consiste em instruções estendidas que aproveitam a arquitetura MCS-251. Antes de usar o microcontrolador, ele deve ser configurado, ou seja, usando o programador, “queime” os bits de configuração que determinam qual conjunto de instruções ficará ativo após ligar a energia. Se você instalar o primeiro conjunto de instruções, neste caso a família MCS-251 será compatível com o MCS-51 no nível do código binário. Este modo é denominado Modo Binário. Se você instalar inicialmente um conjunto de instruções estendidas (modo fonte), os programas escritos para o MCS-51 exigirão recompilação usando ferramentas cruzadas para o MCS-251. O Modo Fonte permite usar a arquitetura MCS-251 com máxima eficiência e obter o mais alto desempenho.

Para usuários focados no uso de microcontroladores MCS-251 como substitutos mecânicos do MCS-51, a Intel produz microcontroladores MCS-151 já programados no estado de modo binário.

Algumas características de vários microcontroladores MCS-251/151 são fornecidas na Tabela 1.1.

Atualmente, a Intel, voltada ao mercado de processadores Pentium, está restringindo a produção de cristais MCS-51. Em geral, para um determinado desenvolvedor isso pode passar despercebido, a menos que ele utilize microcontroladores 8xC51GB e 80C152Jx, que não possuem análogos exatos entre produtos de outras empresas. Assim como todos os demais microcontroladores da família MCS-51, todos foram replicados diversas vezes por outras empresas.

O sistema de comando OMEVM oferece excelentes capacidades de processamento de dados, garante a implementação de operações lógicas e aritméticas, bem como controle em tempo real. O processamento de dados bit a bit, tétrade (4 bits), byte a bit (8 bits) e 16 bits é implementado.

LSI da família MCS-51 é um OMEVM de 8 bits: ROM, RAM, registradores de propósito especial, ALU e barramentos externos são baseados em bytes. Os dados de dois bytes são usados ​​apenas pelo registrador de ponteiro (DPTR) e pelo contador de programa (PC). Deve-se notar que o registrador de ponteiro de dados pode ser usado como um registrador DPTR de dois bytes ou como dois registradores de propósito especial de um byte, DPH e DPL. O contador do programa é sempre usado como um registrador de dois bytes.

O conjunto de comandos OMEVM possui 42 mnemônicos de comando para especificar as 33 funções deste sistema.

A sintaxe da maioria dos comandos da linguagem assembly consiste em um mnemônico de função, seguido por operandos que indicam métodos de endereçamento e tipos de dados. Vários tipos os dados ou modos de endereçamento são determinados pelos operandos definidos, não por alterações nos mnemônicos.

O sistema de comando pode ser dividido em cinco grupos:

Existem os seguintes tipos de endereçamento de operando de origem:

  • Endereçamento de registro indireto baseado na soma dos registros base e índice

Tabela de notações e símbolos usados ​​no sistema de comando

Designação, símbolo Propósito
A Bateria
Rn Registros do banco de registros atualmente selecionado
R O número do registro carregado especificado no comando
direto Endereço de célula de dados internos de 8 bits diretamente endereçável, que pode ser uma célula RAM de dados interna (0-127) ou SFR (128-255)
@Rr Célula RAM de dados interna de 8 bits endereçável indiretamente
dados8 Dados imediatos de 8 bits incluídos no CPC
dadosH Bits mais significativos (15-8) dos dados imediatos de 16 bits
dadosL Bits menos significativos (7-0) de dados imediatos de 16 bits
endereço11 Endereço de destino de 11 bits
endereçoL Bits menos significativos do endereço de destino
disp8 Byte de deslocamento assinado de 8 bits
pedaço Um bit diretamente endereçável cujo endereço contém o COP localizado na RAM de dados interna ou SFR
a15, a14...a0 Bits de endereço de destino
(X) Conteúdo do elemento X
((X)) Conteúdo no endereço armazenado no elemento X
(X)[M] Bit M do elemento X

+
-
*
E
OU
XOR
/X
Operações:
Adição
subtração
multiplicação
divisões
multiplicação lógica (operação AND)
adição lógica (operação OR)
módulo de adição 2 (OU exclusivo)
inversão do elemento X

Os mnemônicos de função estão associados exclusivamente a combinações específicas de métodos de endereçamento e tipos de dados. No total, existem 111 combinações possíveis no sistema de comando. A tabela mostra uma lista de comandos, classificados em ordem alfabética.

Mnemônicos Função Bandeiras
Comando ACALL Chamada absoluta de sub-rotina
Adição AC, C, OV
Adição com transporte AC, C, OV
Equipe AJMP Transição absoluta
"E" lógico
"AND" lógico para variáveis ​​de bit C
Compare e pule se não for igual C
Comando CLR A Reinicialização da bateria
Comando CLR Redefinir bit C, pouco
Equipe CPL A Inversão de bateria
Equipe CPL Inversão de bits C, pouco
Equipe DA A Correção do acumulador decimal para adição CA, C
Equipe DEC<байт> Diminuir
Equipe DIV AB Divisão C, OV
Equipe DJNZ<байт>, <смещение> Diminuir e saltar se não for igual a zero
Equipe INC<байт> Incremento
Comando INC DPTR Incremento do ponteiro de dados
Equipe JB , Pule se o bit estiver definido
Equipe JBC , Pule se o bit estiver definido e redefina-o
Equipe JC Transição se a transferência estiver definida
Comando JMP@A+DPTR Transferência indireta
Equipe JNB , Pule se o bit não estiver definido
Equipe JNC Pule se o carry não estiver definido
Equipe JNZ Salte se o conteúdo do acumulador não for zero
Equipe JZ Pule se o conteúdo do acumulador for 0
Comando LCALL Chamada longa
Equipe LJMP Passagem longa
Variável de byte de encaminhamento
Enviar bit de dados C
Comando MOV DPTR,#data16 Carregar um ponteiro de dados com uma constante de 16 bits
Comando MOVC A,@A+( ) Envia byte da memória do programa
Enviar dados para memória externa (da memória externa)


gastroguru 2017