Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Tutorial MC 8051, Notas de estudo de Engenharia Informática

tutorial microcontrolador 8051 detalhado

Tipologia: Notas de estudo

2010

Compartilhado em 02/09/2010

caio-santos-1
caio-santos-1 🇧🇷

5

(2)

5 documentos

Pré-visualização parcial do texto

Baixe Tutorial MC 8051 e outras Notas de estudo em PDF para Engenharia Informática, somente na Docsity! MICROCONTROLADOR 8051 Alessandro de Souza Lima Vagner Santos da Rosa NOTA IMPORTANTE: Esta documentação está em processo de revisão. Estamos trabalhando duro para assegurar que todas as informações contidas neste documento estejam corretas. Não nos responsabilizamos por qualquer dano ou perda provocado pelo uso deste material. 1 - Introdução aos Microcontroladores Inicialmente, é importante frisarmos três conceitos: a) Microprocessador: chip responsável pelo processamento em um microcomputador. É um elemento complexo, contendo, entre outras coisas, uma unidade lógica e aritmética (ULA) e diversos registros (registradores) especiais. b) Microcomputador-de-um-só-chip: como o nome indica, reúne no mesmo chip os diversos elementos de um microcomputador: microprocessador, RAM, ROM, temporizadores, contadores, canal de comunicação serial e portas de I/O. c) Microcontrolador: microcomputador-de-um-só-chip que pode ainda conter elementos para uso industrial, tais como conversores A/D e D/A, PLL, PWM, etc. 1.1 – Motivação para o Estudo de um Microcontrolador O microcontrolador, hoje em dia, é um elemento indispensável para o engenheiro elétrico, eletrônico ou ainda para o técnico de nível médio da área, em função de sua versatilidade e da enorme aplicação. Entre algumas das aplicações de um microcontrolador podemos citar automação industrial, telefones celulares, auto-rádios, fornos de microondas e videocassetes. Além disso, a tendência da eletrônica digital é de se resumir a microcontroladores e a chips que concentram grandes circuitos lógicos, como os PLDs (Programmable Logic Devices). Para sistemas dedicados, o microcontrolador apresenta- se como a solução mais acessível, em função do baixo custo e facilidade de uso. 1.2 – O 8051 O 8051, da Intel, é, sem dúvida, o microcontrolador mais popular atualmente. O dispositivo em si é um microcontrolador de 8 bits relativamente simples, mas com ampla aplicação. Porém, o mais importante é que não existe somente o CI 8051, mais sim uma família de microcontroladores baseada no mesmo. Entende-se família como sendo um conjunto de dispositivos que compartilha os mesmos elementos básicos, tendo também um mesmo conjunto básico de instruções. 2 - Sistemas Microprocessados Sistemas microprocessados são aqueles que têm por elemento central um microprocessador. O microprocessador funciona como um sistema seqüencial síncrono, onde a cada pulso, ou grupos de pulsos de clock, uma instrução é executada. Entre os microprocessadores mais conhecidos podemos citar o 8080 e 8085, Z-80, 8088, 8086, 80286, 68000, 80386 e superiores. Embora já existam microprocessadores que trabalhem a centenas de MHz, o 8051 utiliza tipicamente um clock de 12 MHz, com tempos de execução de cada instrução variando entre 1µs e 4µs. 2.1 – Diagrama em Blocos de um Sistema Genérico com Microprocessador Figura 3.1 Um exemplo de utilização do modo expandido é mostrado na figura 3.2. No caso, estão sendo utilizadas externamente tanto memória de programa como memória de dados, mas é possível a utilização de apenas uma delas (somente a ROM). Figura 3.2 - Expandindo RAM e ROM Como pode ser visto na figura 3.2, além das memórias faz-se necessário a utilização de um outro CI (no caso o 74373) para a multiplexação de dados e endereços. Ocorre da seguinte forma: no primeiro ciclo de máquina, o 8051 coloca nos pinos AD0 a AD7 o byte menos significativo do endereço externo e leva o pino ALE (Address Latch Enable - Habilitador da Trava de Endereços) a nível alto, de modo que o 74373 (oito Latches tipo D) coloque em suas saídas essa informação, e logo em seguida passa este pino para nível baixo, para que esse byte fique retido no 74373. Após isso, os pinos AD0 a AD7 estarão livres para o transporte dos dados. O 8051 pode, no modo expandido, utilizar toda a memória de programa externa (com nível lógico 0 aplicado ao pino 31 - External Address NOT) ou ainda utilizar os primeiros 4 kB internos e o restante externo (com 1 em EA). O CI 8031 é a versão sem ROM interna do 8051. O mesmo é muito utilizado em fase de desenvolvimento ou quando se quer produzir em pequenas quantidades. Como o 8031 tem a mesma pinagem que o 8051, o mesmo possui o pino EA, que deverá sempre ser utilizado em nível lógico baixo. Retornando a figura 3.2, nela estamos utilizando 8kB de RAM externa, além dos 256 bytes de RAM interna. Além disso, temos um total de 8kB de memória ROM que, no caso do 8051, pode estar sendo utilizado apenas no CI externo ou com os 4096 bytes menos significativos em memória interna e os 4096 bytes mais significativos na memória externa. Ainda em relação à figura 3.2, para fazer uma leitura na ROM externa, o pino PSEN será levado a nível baixo, para fazer uma leitura na RAM externa, o pino RD será levado a nível baixo e, para fazer uma escrita na RAM externa, o pino WR será levado a nível baixo. 4 - A Organização da Memória As figuras 4.1 e 4.2 ilustram, respectivamente, a organização da memória de programa e da memória de dados do 8051. Como pode ser visto pela figura, os bytes 20 a 2F da RAM interna tem bits endereçáveis individualmente. Podemos, com os mesmos, executar várias instruções de bits. Por exemplo, a instrução SETB 3CH coloca em nível alto o bit 3C ou seja, o bit 4 da posição de memória 27 H da RAM interna. 5 - Os Registros de Função Especial Os Registros de Função Especial (SFRs - Special Function Registers) são responsáveis pela maior parte do controle do 8051. Os mesmos são mostrados na figura 5.1, sendo que alguns deles possuem bits endereçáveis. Note que alguns dos bits endereçáveis possuem inclusive um nome mnemônico, para maior facilidade de desenvolvimento de software em compiladores. Figura 5.1 A função básica de cada registro especial é descrita abaixo. Ao lado do registro está seu endereço na RAM. P0 (80H), P1 (90H), P2 (A0H) e P3 (B0): São as posições na RAM que contém os dados das 4 portas de I/O do microcontrolador, caso as mesmas sejam utilizadas com esse fim. Se for feita uma escrita em um desses registros, o conteúdo nos pinos correspondentes à porta será automaticamente alterado. Já uma leitura dos mesmos verifica o estado dos pinos. SP (81H): É o apontador de pilha (Stack Pointer), que aponta para o alto da pilha. DPL (82H) e DPH (83H): Em conjunto formam o DPTR, utilizado para endereçamento indireto de 16 bits. PCON (87H): O registro PCON (Power Control) permite adaptar o microcontrolador para redução de consumo com segurança. TCON (88H) e TMOD (89H): Registros dos Temporizadores/Contadores. Permitem a programação dos mesmos. TL0 (8AH), TH0 (8CH), TL1 (8BH) e TH1 (8DH): São os registros dos dados dos dois Temporizadores/Contadores (T0 e T1). SCON (98H) e SBUF (99H): Registros para uso da porta de comunicação serial. IE (A8H) e IP (B8H): Registro para programação (habilitação/desabilitação, prioridade etc.) das interrupções. PSW (D0H): O PSW (Program Status Word - palavra de status do programa) é o registro dos Flags do 8051 ACC (E0H): É o acumulador. B ( F0H): Registro auxiliar B. A seguir, são mostrados com mais detalhes alguns dos registros de função especial. 5.1 – Palavra de Status de Programa ( P S W ) A palavra de status de programa ( PSW ) contém vários bits de status que refletem o estado corrente da CPU. O registro PSW é acessado pelo endereço D0h e também é bit endereçavel. A figura abaixo apresenta a estrutura do registro PSW, que reside no espaço de endereçamento de registros de função especial. D7h D6h D5h D4h D3h D2h D1h D0h CY AC F0 RS1 RS0 OV - P Neste modo o operando é especificado na instrução por um campo de endereço de 8 bits. Somente a RAM de dados interna e os registros de função especial ( primeiras 256 posições de memória ) é que poderão ser endereçados diretamente. Exemplo 6.1.a : MOV A, 25h A ← ( 25h ) Exemplo 6.1.b : ADD A, 7Fh A ← A + ( 7F ) Exemplo 6.1.c : MOV 90h, A Obs.: 90h = porta 1 ( 90h ) ← A 6.2 – Modo de endereçamento de registro ou modo REGISTRADOR Os bancos de registros, contendo de R0 a R7, serão acessados por certas instruções onde a especificação do registro será feita por três bits do próprio opcode. As instruções de acesso aos registros são eficientes, visto que nenhum endereço será necessário. Quando o instrução for executada, um dos oito registros do banco selecionado será acessado. Um dos quatro bancos de registro será selecionado pelos bits de seleção de bancos do registro PSW ( bits RS1 e RS0 ). Exemplo 6.2.a : MOV R5, A R5 ← A Exemplo 6.2.b : ADD A, R0 A ← A + R0 6.3 – Modo de endereçamento INDIRETO Neste modo a instrução especifica que o registro contém o endereço do operando. Tanto a memória interna quanto a externa poderão ser endereçadas indiretamente. O registro de endereçamento usado para endereços de 8 bits deverá ser o registro R0 ou R1 do banco selecionado e para endereços de 16 bits será somente o registro apontador de dados ( DPTR ). Exemplo 6.3.a : MOV @ R1, 15h ( R1 ) ← ( 15h ) Exemplo 6.3.b : ADD A, @ R0 A ← A + ( R0 ) Exemplo 6.3.c : MOVX @ DPTR, A ( DPTR ) ← A Obs.: @ é utilizado para indicar endereçamento indireto. @ = endereçado pelo conteúdo de ... 6.4 – Modo de endereçamento de registros específicos ou ESPECÍFICO A REGISTRO Algumas instruções referem-se a certos registros. Por exemplo algumas instruções operam o acumulador, o registro DPTR, etc., assim nenhum byte de endereço será necessário, o opcode já define qual o registro que será afetado. Exemplo 6.4.a : DA A Faz o ajuste decimal do acumulador Exemplo 6.4.b : CLR A A ← 00h ( zera o acumulador ) Exemplo 6.4.c : INC DPTR DPTR ← DPTR + 1 6.5 – Modo de endereçamento IMEDIATO ou CONSTANTE IMEDIATA Neste modo de endereçamento o opcode é seguido de um valor de uma constante que será operada. Na linguagem assembly, este modo é indicado através do simbolo #. Exemplo 6.5.a : MOV B, #252 B ← FCh Exemplo 6.5.b : MOV A, #100 A ← 64h Exemplo 6.5.c : MOV DPTR, #05FEh DPTR ← 05FEh Obs.: # indica valor constante; Quando após a constante aparecer um "H", o valor da constante é hexadecimal, quando tiver um "B" é binário, e quando a letra for omitida ou aparecer um "D" o valor será decimal. 6.6 – Modo de endereçamento INDEXADO Somente a memória de programa ( ROM ) poderá ser acessada com endereçamento indexado e somente poderá ser lida. O endereço efetivo é a soma do acumulador e um registro de 16 bits ( DPTR ou PC ). Este modo é usado para leituras de tabelas colocadas na memória de programa ( ROM ). Por exemplo tabelas de conversão, ou de mensagens. Um registro base de 16 bits, tal como o registro DPTR, ou contador de programa ( PC ), aponta para a base da tabela e o acumulador recebe o deslocamento dentro da tabela. Assim o endereço de entrada da tabela será formado com a soma do conteúdo do acumulador e o registro base. Exemplo 6.6.a : MOVC A, @ A + DPTR A ← ( A+DPTR ) da ROM Exemplo 6.6.b : MOVC A, @ A + PC A ← ( A + PC ) da ROM Outro tipo de endereçamento indexado é usado nas instruções de "case jump". Neste caso o endereço destino do salto (jump) é calculado com a soma do conteúdo do acumulador e do conteúdo do apontador base. Assim o valor base do endereço do salto será carregado no apontador base ( DPTR ) e o valor de indexação do salto que realiza a condição (case) será carregado no acumulador. Exemplo : JMP @ A + DPTR Faz um salto para o endereço dador por A + DPTR PC ← A + DPTR 7 - RESET NO 8051 O RESET é conseguido mantendo-se nível alto no pino 9 ( RST ) por pelo menos dois ciclos de máquina ( 24 pulsos de clock ). Para a versão CMOS ( 80C51 ) o resistor se torna desnecessário. Se existir não interfere em nada. O RESET afetará os registros de função especial da seguinte forma: REGISTRO VALOR REGISTRO VALOR PC 0000 H TMOD 00 H ACC 00 H TCON 00 H B 00 H TH0 00 H PSW 00H TL0 00 H SP 07 H TH1 00 H bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 "0" Prioridade BAIXA / "1" Prioridade ALTA - PS ( Priority Serial ) - Nível de prioridade para o canal serial; - PT1 ( Priority Timer 1 ) - Nível de prioridade para o temporizador 1; - PX1 ( Priority External 1 ) - Nível de prioridade para a interrupção externa 1; - PT0 ( Priority Timer 0 ) - Nível de prioridade para o temporizador 0; - PX0 ( Priority External 0 ) - Nível de prioridade para a interrupção externa 0; Uma interrupção de nível baixo poderá ser interrompida por outra de nível alto, mas não por outra de nível baixo. Uma interrupção de nível alto não poderá ser interrompida por qualquer outra fonte de interrupção. Se ocorrerem dois pedidos de interrupções simultaneamente ( quase impossível ), e ambas forem de mesma prioridade, ocorrerá uma outra seleção interna, que escolherá qual interrupção será atendida primeiro. INTERRUPÇÃO PRIORIDADE INTERNA Externa 0 MAIOR Temporizador 0 Externa 1 Temporizador 1 Serial MENOR As interrupções EXTERNAS no 8051 podem ser ativadas por transição 1 para 0 ( borda de descida ) ou por nível ( nível lógico baixo ). O ajuste da forma de ativar as interrupções externas estão no registro TCON ( Controle do Temporizador ). 8Fh 8Eh 8Dh 8Ch 8Bh 8Ah 89h 88h 88 H TF1 TR1 TF0 TRO IE1 IT1 IE0 IT0 TCON bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 IT 0 = "0" - ativa a interrupção com nível lógico baixo no pino INT0\ ( pino P3.2 ); = "1" - ativa a interrupção com borda de descida no pino INT0\; - IT 1 = "0" - ativa a interrupção com nível lógico baixo no pino INT1\ ( pino P3.3 ); = "1" - ativa a interrupção com borda de descida no pino INT1\; - IE x - fica em "1"quando for detectado uma borda de descida ( pedido de interrupção ). É resetado após o atendimento da rotina de tratamento da interrupção. OBS.: Caso a interrupção seja ativada por nível lógico baixo, o pino INTx\ poderá permanecer em "0" durante a execução da rotina de tratamento da interrupção, só que deve estar em "1" antes do término da RTI para evitar um novo pedido de interrupção. 10 - TEMPORIZADORES E CONTADORES no 8051 O 8051 possui internamente 2 Contadores/Temporizadores denominados como TEMPORIZADOR 0 E TEMPORIZADOR 1. Ambos podem ser configurados para operar como temporizador ou contador de eventos, individualmente. Podem ter a operação habilitada por software ou hardware. Na função de temporizador, um registro será incrementado a cada ciclo de máquina. Considerando que cada ciclo de máquina consiste em 12 períodos do clock, a taxa de contagem será de 1/12 da freqüência do clock. Na função de contador, um registro será incrementado em resposta a uma transição de "1" para "0" (borda de descida) de seu correspondente pino de entrada externa, T0 (P3.4) e T1 (P3.5). Nesta função, os pinos externos (T0 e T1) são amostrados a cada ciclo de máquina. Quando uma amostragem indicar um nível alto em um ciclo de máquina e um nível baixo no próximo ciclo, o contador será incrementado. A máxima taxa de contagem será de 1/24 da freqüência do clock, visto que são necessárias dois ciclo de máquina para o reconhecimento de uma transição de "1" para "0". A operação dos Contadores/Temporizadores terão quatro modos possíveis. A seleção de Temporizador ou Contador, é realizada através do registro de função especial TMOD (Modo do Temporizador). O registro TMOD é dividido em duas partes iguais que controlam o TEMPORIZADOR 1 e TEMPORIZADOR 0. O registro TMOD é acessado pelo endereço 89h e não é bit endereçável. TMOD é o registro de controle de modo Temporizador / Contador, é neste registro que é feita a seleção de função Temporizador ou Contador e a seleção do modo de operação ( modo 0, 1, 2 ou 3 ). O registro TMOD é mostrado abaixo, assim como a função de cada bit. GATE.1 C/T.1 M1.1 M0.1 GATE.0 C/T.O M1.0 M0.0 89H bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Controle do C/T 1 Controle do C/T 0 C/T.x → Seleciona a função, TEMPORIZADOR (timer) ou CONTADOR. Será selecionado como TEMPORIZADOR se este bit estiver em "0". Se em "1" a operação será como CONTADOR. GATE.x → Quando GATE.x = 1 e TRx = 1, o temporizador irá operar somente enquanto o pino INTx = 1 (controle por circuito). Quando GATE.x = 0, o temporizador irá operar somente quando TRx = 1 (controle por software). Obs.: TRx é um bit de TCON (palavra de controle do Contador/Temporizador) que será vista a seguir. M1.x e M0.x → Bits de seleção de modo de operação. O registro TCON (Timer Control – Controle do Temporizador) é mostrado abaixo. TCON é um registro acessado pelo endereço 88H e é bit endereçável. 8Fh 8Eh 8Dh 8Ch 8Bh 8Ah 89h 88h TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88H TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0 - TFx → Bit de overflow do temporizador. É ativado ( setado ) pelo circuito quando ocorrer um overflow no temporizador, gerando um pedido de interrupção. É ressetado pelo hardware após o terminada a rotina de interrupção. - TRx → Bit de controle de operação do temporizador. É o bit que liga e desliga o C/T. Para ligar o temporizador, o software deverá setar este bit, e para desligar deverá ressetá- lo. 10.1 - Modos de Operação dos Contadores / Temporizadores M 1.x M 0.x Modo de operação Característica 0 0 Modo 0 C/T de 13 bits 0 1 Modo 1 C/T de 16 bits 1 0 Modo 2 C/T de 8 bits com recarga automática outro modo funciona normalmente, mas fica permanentemente ligado, ou seja, como se TR1 = "1". O modo 3 atua como se existisse um temporizador extra de 8 bits. O temporizador 1 poderá ser usado em aplicações que não necessite de interrupções, como por exemplo, geração de taxa de transmissão para a porta serial. OBS.: Para ativar as interrupções dos Contadores/Temporizadores, os bits EA, ET1 e ET0 do registro IE (Interrupt Enable) deverão ser ajustados. Para habilitar a interrupção do C/T 1, além do bit EA =1, ET1 = 1 e para o C/T 0, EA =1 e ET0 = 1. 11 - O ASSEMBLER DO 8051 INSTRUÇÕES DO MICROCONTROLADOR 8051 * Rn → Indica RegistroR0 a R7 genericamente, dependente de "n". * Ri → Indica RegistroR0 ou R1, dependendo de "i". * @ → Significa "endereçado pelo valor de ...." * #Dado → Indica valor constante de 8 bits. * #Dado 16 → Indica valor constante de 16 bits. * Direto → Indica um endereço de memória de 8 bits ( 256 posições internas - RAM interna e Registros de Função Especial ). * rel → Indica que endereçamento é relativo. * ? → Indica que o flag indicado é afetado pela instrução e depende do resultado. 11.1 - INSTRUÇÕES DE TRANSFERÊNCIA DE DADOS MOV A,Rn – Move o Registro n para o Acumulador. (1 byte – 12 pulsos); MOV A,Direto – Move o conteúdo da posição de memória para o Acumulador. (2 bytes – 12 pulsos); MOV A,@Ri – Move o conteúdo da RAM interna endereçada po Ri para o Acumulador. (1 byte – 12 pulsos); MOV A,#Dado – Move o Dado para o Acumulador. (2 bytes – 12 pulsos); MOV Rn,A – Move o conteúdo do Acumulador para o Registro n. (1 byte – 12 pulsos); MOV Rn,Direto – Move o conteúdo da memória para o Registro n. (2 bytes – 24 pulsos); MOV Rn,#Dado – Move o Dado para o Registro n. (2 bytes – 12 pulsos); MOV Direto,A – Move o conteúdo do Acumulador para a posição de memória. (2 bytes – 12 pulsos); MOV Direto,Rn – Move o conteúdo do Registro n para a posição de memória. (2 bytes – 24 pulsos); MOV Direto1,Direto2 – Move o conteúdo da posição de memória 2 para a posição de memória 1. (3 bytes– 24 pulsos); MOV Direto,@Ri – Move o conteúdo da posição de memória endereçada por Ri para a posição de memória. (2 bytes – 24 pulsos); MOV Direto,#Dado – Move o Dado para a posição de memória. (3 bytes– 24 pulsos); MOV @Ri,A – Move o conteúdo do Acumulador para a posição de memória endereçada por Ri. (1 byte – 12 pulsos); MOV @Ri,Direto – Move o conteúdo da posição de memória para a posição de memória endereçada por Ri. (2 bytes – 24 pulsos); MOV @Ri,#Dado – Move o Dado para a posição de memória endereçada por Ri. (2 bytes – 12 pulsos); MOV DPTR,#Dado 16 – Move o Dado de 16 bits para o Registro DPTR. (3 bytes– 24 pulsos); MOVC A,@A+DPTR – Move o conteúdo da posição de memória da ROM endereçada por A + DPTR. O endereço será de 16 bits. (1 byte – 24 pulsos); MOVC A,@A+PC – Move o conteúdo da posição de memória da ROM endereçada por A + PC. O endereço será de 16 bits. (1 byte – 24 pulsos); MOVX A,@Ri – Move o conteúdo da posição de memória da RAM externa endereçada por Ri para o Acumulador. (1 byte – 24 pulsos); MOVX A,@DPTR – Move o conteúdo da posição de memória da RAM externa endereçada por DPTR para o Acumulador. (1 byte – 24 pulsos); MOVX @Ri,A – Move o conteúdo do Acumulador para a posição de memória da RAM externa endereçada por Ri. (1 byte – 24 pulsos); MOVX @DPTR,A – Move o conteúdo do Acumulador para a posição de memória da RAM externa endereçada por DPTR. (1 byte – 24 pulsos); PUSH Direto – Coloca na pilha o conteúdo da posição de memória. Incrementa o SP (Stack Pointer) e escreve na pilha. (2 bytes – 24 pulsos); POP Direto – Retira da pilha o Dado e coloca na posição de memória. (2 bytes – 24 pulsos); XCH A,Rn – Troca entre si os conteúdo do Acumulador e do Registro n. (1 byte – 12 pulsos); XCH A,Direto – Troca entre si os conteúdo do Acumulador e do Registro n. (2 bytes – 12 pulsos); XCH A,@Ri – Troca entre si os conteúdo do Acumulador e da posição de memória endereçada por Ri. (1 byte – 12 pulsos); XCHD A,@Ri – Troca os nibbles menos significativos do conteúdo do Acumulador e da posição de memória endereçada por Ri. (1 byte – 12 pulsos). 11.2 - Instruções para Variáveis Booleanas CLR C – Zera o Carry. (1 byte – 12 pulsos) (CY=0); CLR Bit – Zera o bit Endereçado. (2 bytes – 12 pulsos); SETB C – Seta o Carry. (1 byte – 12 pulsos) (CY=1); SETB Bit – Seta o bit endereçado. (2 bytes – 12 pulsos); CPL C – Complementa o Carry. (1 byte – 12 pulsos) (CY=?); CPL Bit – Complementa o bit endereçado. (2 bytes – 12 pulsos); ANL C,Bit – Operação AND entre o Carry e o bit endereçado. (2 bytes – 24 pulsos) (CY=?); ANL C,/Bit – Operação AND entre o Carry e o complemento do bit endereçado. (2 bytes – 24 pulsos) (CY=?); ORL C,Bit – Operação OR entre o Carry e o bit endereçado. (2 bytes – 24 pulsos) (CY=?); ORL C,/Bit – Operação OR entre o Carry e o complemento do bit endereçado. (2 bytes – 24 pulsos) (CY=?); MOV C,Bit – Move o bit endereçado para o Carry. (2 bytes – 12 pulsos) (CY=?) MOV Bit,C – Move o Carry para o bit endereçado. (2 bytes – 24 pulsos); JC rel – Salta se o Carry for "1". O jump é relativo. (2 bytes – 24 pulsos); JNC rel – Salta se o Carry for "0". O jump é relativo. (2 bytes – 24 pulsos); JB Bit, rel – Salta se o bit endereçado estiver em "1". (3 bytes – 24 pulsos); JNB Bit,rel – Salta se o bit endereçado estiver em "0". (3 bytes – 24 pulsos); JBC Bit,rel – Salta se o bit endereçado estiver em "1" depois zera o bit. (3 bytes– 24 pulsos). 11.3 - Instruções Aritméticas ADD A,Rn – Soma o conteúdo do Registro n ao Acumulador. (1 byte – 12 pulsos) (CY=?, AC=?, OV=?); ADD A,Direto – Soma o conteúdo da posição de memória ao Acumulador. (2 bytes – 12 pulsos) (CY=?, AC=?, OV=?); ANL A,Rn – Executa a operação AND entre o Registro n e o Acumulador. (1 byte – 12 pulsos); ANL A,Direto – Executa a operação And entre o conteúdo da posição de memória e o Acumulador. (2 bytes – 12 pulsos); ANL A,@Ri – Executa a operação AND entre o conteúdo da posição de memória endereçada por Ri. (1 byte – 12 pulsos); ANL A,#Dado – Executa a operação AND entre o Dado e o Acumulador. (2 bytes – 12 pulsos); ANL Direto,A – Executa a operação AND entre o conteúdo da posição endereçada e Acumulador. (2 bytes – 12 pulsos); ANL Direto,#Dado– Executa a operação AND entre a posição de memória endereçada e Dado. (3 bytes – 24 pulsos); ORL A,Rn – Executa a operação OR entre o Registro n e o Acumulador. (1 byte – 12 pulsos); ORL A,Direto – Executa a operação OR entre o conteúdo da posição de memória e o Acumulador. (2 bytes – 12 pulsos); ORL A,@ Ri – Executa a operação OR entre o conteúdo da posição de memória endereçada por Ri. (1 byte – 12 pulsos); ORL A,#Dado – Executa a operação OR entre o Dado e o Acumulador. (2 bytes – 12 pulsos); ORL Direto,A – Executa a operação OR entre o conteúdo da posição endereçada e Acumulador. (2 bytes – 12 pulsos); ORL Direto,#Dado – Executa a operação OR entre a posição de memória endereçada e o Dado. (3 bytes – 24 pulsos); XRL A,Rn – Executa a operação "OU EXCLUSIVO" entre o Registro n e o Acumulador. (1 byte – 12 pulsos); XRL A,Direto – Executa a operação "OU EXCLUSIVO" entre o conteúdo da posição de memória e o Acumulador. O resultado fica no Acumulador. (2 bytes – 12 pulsos); XRL A,@Ri – Executa a operação "OU EXCLUSIVO" entre o conteúdo da posição de memória endereçada por Ri e o Acumulador. (1 byte – 12 pulsos); XRL A,#Dado – Executa a operação OU EXCLUSIVO" entre o Dado e o Acumulador. (2 bytes – 12 pulsos); XRL Direto,A – Executa a operação "OU EXCLUSIVO" entre o conteúdo da posição de memória e o Acumulador O resultado fica na posição de memória. (2 bytes – 12 pulsos); XRL Direto,#Dado – Executa a operação "OU EXCLUSIVO" entre o Dado e o conteúdo da posição de memória. O resultado fica na posição de memória. (3 bytes – 24 pulsos); CLR A – Zera o Acumulador. (1 byte – 12 pulsos); CPL A – Complementa o Acumulador. (1 byte – 12 pulsos); RL A – Desloca o Acumulador à esquerda. (1 byte – 12 pulsos); RLC A – Desloca o Acumulador à esquerda através do Carry. (1 byte – 12 pulsos) (CY=?); RR A – Desloca o Acumulador à direita. (1 byte – 12 pulsos); RRC A – Desloca o Acumulador à direita através do Carry. (1 byte – 12 pulsos) (CY=?); SWAP A – Troca o nibble inferior do Acumulador com o superior. Equivale a 4 vezes RR A ou RL A. (1 byte – 12 pulsos).
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved