Apostila de 8051

download Apostila de 8051

of 137

description

Apostila 8051

Transcript of Apostila de 8051

O microcontrolador 8051

PAGE 14Microcontrolador 8051 Teoria e Prtica

ESCOLA TCNICA ESTADUAL GETLIO VARGASPROFESSOR: MILTON BARREIRO JUNIORMicrocontrolador 8051 Teoria e PrticaSo Paulo2006ESCOLA TCNICA ESTADUAL GETLIO VARGASPROFESSOR: MILTON BARREIRO JUNIORMicrocontrolador 8051 Teoria e Prtica

So Paulo 2006

SUMRIO

1 INTRODUO........................................................................................... 1

2 ARQUITETURA BSICA DE UM MICROCONTROLADOR GENRICO.. 2

3 A FAMLIA 8051......................................................................................... 3

3.1 Organizao de Memria................................................................ 4

3.2 Memria de Programa..................................................................... 6

3.3 Memria de Dados.......................................................................... 8

3.4 Conjunto de Instrues da Famlia 8051....................................... 103.5 Registrador da palavra de controle (Program Status Word)......... 103.6 Modos de Endereamento............................................................ 113.7 Instrues Aritmticas................................................................... 123.8 Instrues Lgicas........................................................................ 14

3.9 Transferncia de Dados Interna e Externa................................... 15

3.10 Instrues Booleanas.................................................................. 173.11 Instrues de Salto..................................................................... 183.12 Oscilador Interno......................................................................... 203.13 Estrutura de Interrupes............................................................ 214 DESCRIO DO HARDWARE................................................................ 244.1 Registradores de funo especial (SFR)...................................... 244.2 Acumulador (ACC)......................................................................... 254.3 Registrador B (B)............................................................................ 254.4 Registrador da palavra de controle (PSW).................................... 254.5 Stack Pointer (SP) e Data Pointer (DPTR)..................................... 264.6 Buffer Serial (SBUF)....................................................................... 264.7 Ports de I/O (P0, P1, P2, P3)........................................................ 284.8 Registradores de Timer e de Controle........................................... 294.9 Estrutura e operao dos ports de I/O........................................... 324.10 Acesso memria externa.......................................................... 354.11 Temporizadores e Contadores..................................................... 354.12 Modos de operao..................................................................... 364.13 Interface Serial............................................................................. 384.14 Modos de Operao..................................................................... 384. 15 Registrador de Controle.............................................................. 434.16 Baud Rates................................................................................... 434.17 Interrupes................................................................................. 444.18 Estrutura de prioridades............................................................... 464.19 Interrupes externas.................................................................. 464.20 Circuitos de Controle.................................................................... 474.21 Reset............................................................................................ 474.22 Clock............................................................................................ 484.23 Operao passo a passo............................................................. 494.24 Descrio da pinagem................................................................. 505 PROGRAMAO E SIMULAO............................................................ 52

5.1 Compilao E Linkagem............................................................ 52

5.2 Diretivas (Ou Pseudo-Instrues).................................................. 53

5.3 Uso Do Compilador E Do Linker (Passo A Passo)........................ 54

5.4 Simulador dos Microcontroladores da famlia 8051....................... 55

5.5 Operao bsica do simulador...................................................... 56

6 TABELA DE INSTRUES COMPLETA................................................. 587 ESQUEMA DA CPU MNIMA PARA TESTE E CARREGAMENTO DE PROGRAMA.............................................................................................................. 708 PROGRAMA TESTE DO SISTEMA MNIMO........................................... 719 REFERNCIAS BIBLIOGRFICAS......................................................... 72APNDICE A............................................................................................................. 73APNDICE B............................................................................................................. 80ANEXO 1................................................................................................................... 84

1 Introduo

Podemos considerar os microcontroladores, como sendo uma CPU dedicada e incorporada em um s chip, ou seja, todos os perifricos que nos microprocessadores se encontravam em chips independentes, assim como memrias, temporizadores, portas de comunicao serial, dispositivos de entrada/sada, esto presentes em um nico componente.

Isso torna o projeto mais compacto, mais dinmico e com o custo final reduzido, devido aos dispositivos integrados em um s chip.

O chip a ser apresentado nessa apostila ser o microcontrolador da famlia 8051, o qual ser estudado com mais detalhes nos captulos a seguir.

2 Arquitetura bsica de um microcontrolador genricoUm microcontrolador genrico composto pelos seguintes blocos:

Unidade Central de Processamento (CPU);

Memria de Programa (ROM ou EPROM);

Memria de dados (RAM);

Linhas de I/O (PORTs);

Controle de interrupes;

Gerador de clock;

Temporizadores (Timers) e Contadores (counters).

representada na figura abaixo constituio clssica de um microcontrolador contendo os blocos citados e suas respectivas interligaes.

As diferenas bsicas entre os diversos tipos de microcontroladores disponveis no mercado so relacionadas capacidade e tipos de memrias, na quantidade de ports disponveis, velocidade de operao, e alguns recursos especficos como por exemplo, portas seriais, maior nmero de contadores, opo de baixo consumo, entre outros.

Existem tambm, os componentes chamados derivativos que, como o prprio nome diz, so microcontroladores derivados dos tipos mais comuns (8048 e 8051), ou seja, a clula bsica o microcontrolador e este acrescido de outros componentes de acordo com as necessidades.

3 A Famlia 8051Quando temos vrios microcontroladores utilizando uma mesma clula, chamamos esse conjunto de componentes de famlia. Desta forma temos vrias famlias como, por exemplo, a famlia do 8048, do 8051, do 8096, entre outras.

Vamos tratar aqui da famlia do 8051, que ser utilizado em nossas aplicaes. A tabela abaixo descreve os principais componentes dessa famlia:Nome do

ChipVerso sem

ROMVerso

EPROMBytes de

ROMBytes de

RAMTimers

16 BitsTipo de

Circuito

8051803187514K1282NMOS

80C5180C3187C514K1282HMOS

80CL514K1282SACMOS

805280328K2563NMOS

80C5280C3287C528K2563CMOS

83C52880C52887C52832K5123+1CMOS

83C65280C65287C6528K2562CMOS

83C75187C7512K641CMOS

83C45280C45287C4528K2562CMOS

O elemento bsico desta famlia o chip 8051, cujo diagrama interno serviu como ilustrao quando falamos sobre um microcontrolador genrico. Os outros componentes desta famlia esto descritos nos manuais dos fabricantes. Atualmente, a tendncia mundial no uso de componentes de baixo consumo, torna sensvel o desenvolvimento de projetos baseados na tecnologia CMOS, facilitando assim a interligao de seus blocos. Todos os componentes que apresentarem um C em seu cdigo (80C31, 87C452, etc) pertencem a esta famlia, a qual representa o que existe de mais avanado em microcontroladores de 8 bits, permitindo a continuidade de sua linha de produo por um longo perodo.

As caractersticas desta famlia so:

CPU de 8 bits com conjunto de instrues otimizado para aplicaes de controle de processos;

Capacidade de processamento Booleano (manipulao de bit individualmente);

32 linhas de I/O bidirecionais e individualmente endereveis;

128 bytes de RAM on-chip (mnimo);

Dois contadores / temporizadores programveis de 16 bits;

Interface serial full-duplex;

Estrutura de interrupes com at 5 entradas permitindo 2 nveis de prioridade;

Gerador de clock;

Mnimo de 4Kbytes de memria de programa (ROM ou EPROM);

Capacidade de endereamento externo de at 64Kbytes.

3.1 Organizao de Memria

O 8051 possui intervalos de endereos separados para a memria de programa e para a memria de dados. Esta separao lgica permite que os dados acessados pelos endereos de 8 bits sejam armazenados e manipulados mais rapidamente. possvel tambm enderear 16 bits, utilizando para isso, o registrador DPTR, que ser estudado posteriormente.

A figura abaixo ilustra a estrutura de memria utilizada num microcontrolador 8051:

Nota: a RAM externa no endereada diretamente pela CPU. O endereo de acesso deve estar em um registrador usado pela CPU como ndice.

A memria de programa do tipo ROM e no podemos escrever dados nela. Podemos ter at 64Kbytes de memria, e normalmente encontramos pelo menos 4K de memria interna no chip em forma de ROM, EPROM ou OTP (One Time Program). Os tipos OTP representam uma opo economicamente atraente, pois so mais baratos comparados aos do modelo EPROM, e podem ser programados pelo usurio. Nas verses ROMLESS, esta memria encontra-se externa ao microcontrolador. O pulso de leitura para a memria externa o sinal PSEN (Program Store Enable).

A memria de dados ocupa um espao de endereamento separado da memria de programa. At 64Kbytes de memria externa podem ser endereados, e a CPU gera sinais de read e write, necessrios durante o acesso memria externa.

3.2 Memria de Programa

A figura abaixo mostra o mapa da parte inferior da memria de programa. Aps o reset, a CPU comea a executar as instrues a partir do endereo 0000H.

Como pode ser visto na figura, cada interrupo alocada num endereo fixo da memria de programa. A interrupo direciona o contador de programa da CPU para o seu respectivo endereo, onde se encontra a rotina de interrupo, conforme controle proporcionado pelo vetor de interrupes.Os primeiros 4Kbytes de memria podem estar localizados no chip, ou num chip (ROM ou EPROM) externo. O controle de acesso interno/externo feito pelo sinal EA (External Access). O sinal de strobe para acesso memria externa o sinal PSEN, ativo apenas quando da ocorrncia de acessos externos (EA ligado a terra), no sendo, portanto utilizado quando se utiliza apenas a rea de memria interna.

A configurao de hardware necessria para acesso memria externa ilustrada a seguir. Note que 16 linhas de I/O (port 0 e port 2) so dedicadas transio de sinais durante buscas memria externa. O port 0 opera como um barramento de dados endereo multiplexado, emitindo o byte low do program counter como endereo e aguarda o recebimento do byte de cdigo da memria de programa. Durante o tempo em que o byte low est vlido no port 0, o sinal ALE coloca este byte no latch de endereos, enquanto o port 2 emite o byte alto de endereos. O sinal PSEN pulsa, e o cdigo de byte lido pelo microcontrolador.

O endereo de memria de programa sempre de 16 bits, mesmo quando a quantidade de memria externa inferior 64Kbytes. Desta forma, sempre que utilizarmos memria externa, dois ports (port 0 e port 2) sero sacrificados em funo do endereamento das mesmas.

possvel utilizarmos tambm os portos que foram sacrificados, porm, no uma operao to confortvel.3.3 Memria de dados

A figura abaixo mostra o hardware necessrio para o acesso memria RAM externa.

A CPU, neste caso est executando um programa a partir da ROM interna. O port 0 serve como um barramento multiplexado de dados/endereo para a RAM, e 3 linhas do port 2 so utilizadas para as pginas da RAM. Os sinais de RD e WR so gerados pela CPU para comandar as operaes.

Podemos enderear at 64Kbytes de memria RAM, em endereos de 1 ou 2 bytes. Os endereos de 1 byte so geralmente utilizados em conjunto com 1 ou mais linhas de I/O, para definir a pgina que est sendo utilizada na RAM. Endereos de 2 bytes, quando utilizados demandam que o port 2 gere o byte alto de endereos.

A memria de dados interna est mapeada como indica a figura a seguir. O espao de memria est dividido em 3 blocos, normalmente denominados, Lower 128, Upper 128 e SFR (Special Function Register). A memria de dados interna tem sempre 1 byte de endereamento apenas, o que significa que temos um mximo de 256 bytes de memria interna.

Entretanto, os modos de endereamento permitem o uso de at 384 bytes utilizando um truque simples. Atravs de endereamento direto, acessamos um espao de memria e atravs de endereamento indireto, acessamos um espao de memria diferente. Desta forma, os registradores de funo especial (SFR) e os ltimos 128 bytes (Upper Space) so acessados nos mesmos endereos (de 80H at FFH) apesar de serem fisicamente separados. Nas clulas bsicas 8051, a rea de memria alta no existe no chip, desta forma, consideramos apenas a rea de memria baixa (Lower Space) para as nossas experincias (melhores referencias a estas reas altas podem ser encontradas nos manuais dos fabricantes).

Os primeiros 128 bytes de memria interna esto mapeados como indica a figura abaixo:

Os primeiros 32 bytes esto agrupados em 4 bancos de 8 registradores, chamados R0 at R7. Dois bits no registrador da palavra de controle (PSW) selecionam qual o banco de registradores est em uso. Este recurso permite um uso mais eficiente do espao de cdigo.

Os prximos 16 bytes acima do banco de registradores formam o bloco conhecido como memria enderevel por bit (bit addressable space). O conjunto de instrues do 8051 inclui vrios tipos de instrues de um s bit, e os 128 bits presentes nessa rea podem ser diretamente endereados por estas instrues.

Todos os bytes nos primeiros 128 bytes de memria podem ser endereados direta ou indiretamente. Os prximos 128 bytes s podem ser acessados indiretamente nos dispositivos que os possuem.

A rea de memria acima de 128 bytes constitui o registrador de funes especiais (SFR) cuja descrio detalhada faremos posteriormente.

3.4 Conjunto de Instrues da famlia 8051

Todos os membros da famlia 8051 executam o mesmo conjunto de instrues. Este conjunto composto por instrues otimizadas para aplicaes de controle, facilitando as operaes de dados atravs de vrios modos de endereamento. Capacita ainda a operao de variveis de um bit, permitindo operao em sistemas que demandam processamento booleano. Vamos descrever rapidamente o modo de operao de vrias das instrues contidas neste conjunto. Maiores informaes podem ser encontradas nos manuais dos fabricantes, os quais descrevem detalhadamente o conjunto de instrues.

3.5 Registrador da palavra de controle (Program Status Word)O registrador da palavra de controle (PSW) contm vrios bits de status que indicam o estado atual da CPU. A tabela a seguir indica a posio dos bits dentro do registrador.

CYACF0RS1RS0OV-P

CY (PSW7): Carry flag, indica vai um nas operaes aritmticas.

AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio.

F0 (PSW5): Flag de uso geral.

RS1 (PSW4): Seleo do banco de registradores.

RS0 (PSW3): Seleo do banco de registradores.

OV (PSW2): Overflow em operaes aritmticas.

- (PSW1): Flag definvel pelo usurio.

P (PSW0): Flag de paridade

O bit de carry, entre outras funes serve como vai um em operaes aritmticas, e tambm como acumulador para um nmero de operao booleana. Os bits RS0 e RS1 so utilizados para selecionar um entre quatro bancos de registradores, disponveis nos primeiros 128 bytes de RAM. O bit de paridade indica a quantidade de bits em um no acumulador: se P=1, o acumulador contm um nmero mpar de uns; se P=0, o nmero de uns no acumulador par. Dois bits do PSW esto disponveis e podem ser utilizados como flags de uso geral. O PSW encontra-se localizado na rea denominada SFR, no endereo D0H.

3.6 Modos de endereamento

Podemos ter seis modos distintos de endereamento no 8051. Estes modos so adequados s operaes de controle.

Endereamento direto: Neste modo, o operando especificado por 8 bits de endereo na instruo. Somente a RAM interna e os SFRs podem ser acessados diretamente.

Endereamento indireto: No modo indireto, a instruo especifica um registrador que contm o endereo do operando. Ambas as memrias, interna e externa podem ser acessadas desta forma. O registrador de endereo, para operaes de 8 bits, pode ser R0 ou R1, ou ainda o Stack Pointer. Endereos de 16 bits podem ser acessados somente pelo Data Pointer.

Instrues de registrador: Os bancos de registradores contm os registradores de R0 at R7, que podem ser acessados por certas instrues que levam a especificao do registrador junto com o opcode da instruo. As instrues que acessam os registradores dessa forma so eficientes, pois eliminam o byte de endereo. Quando a instruo executada, um dos oito registradores do banco selecionado acessado e a seleo do banco feita por dois bits (RS0 e RS1) no PSW.

Instrues de registrador especfico: Algumas instrues so especificadas para certos registradores, por exemplo, as instrues que operam com acumulador ou Data Pointer no necessitam um byte de endereo para apont-las, pois o prprio opcode faz isso.

Constantes imediatas: Podemos carregar um registrador com uma constante, diretamente por um simples comando, como por exemplo, mov A, #100, que coloca no acumulador o valor 100 (decimal).

Endereamento indexado: Somente a memria de programa (ROM) pode ser acessada desta forma e somente pode ser lida. Este modo de endereamento destinado leitura de tabelas. Um registrador de 16 bits (DPTR ou PC) indica o endereo de base da tabela e o acumulador carregado com o valor da tabela.

3.7 Instrues aritmticas

O conjunto de instrues aritmticas listado na tabela a seguir. A tabela indica o modo de endereamento que pode ser utilizado com cada instruo, para acessar o byte operando. Por exemplo, a instruo Add A, ; pode ser escrita como:

Add A, 7FH(endereamento direto)

Add A, @R0(endereamento indireto)

Add A, R7(endereamento por registrador)

Add A, #127(constante imediata)

MnemnicoOperaoModo de

EndereamentoTempo de

Execuo

ADD A, A = A + Dir / Ind / Reg / Imm1

ADDC A, A = A + + CDir / Ind / Reg / Imm1

SUBB A, A = A - - CDir / Ind / Reg / Imm1

INC AA = A + 1Acumulador1

INC = + 1Dir / Ind / Reg1

INC DPTRDPTR = DPTR + 1Data Pointer2

DEC AA = A - 1Acumulador1

DEC = - 1Dir / Ind / Reg1

MUL ABB e A = B x AAcumulador e B4

DIV ABA = INT [A/B]

B = MOD [A/B]Acumulador e B4

DA AAjuste decimalAcumulador1

Os tempos de execuo indicados consideram um clock de 12MHz. Todas as instrues aritmticas so executadas num tempo de 1(s com exceo da instruo INC DPTR que consome 2(s, e as instrues de multiplicao e diviso que so efetuadas em 4(s.

Perceba que qualquer byte no espao de memria interno pode ser incrementado ou decrementado sem o uso do acumulador. Inclusive o registrador de 16 bits DPTR pode ser incrementado desta forma. A instruo MUL AB opera com os registradores A e B e pe o resultado (16 bits) nos registradores B (byte high) e A (byte low) concatenados. A instruo DIV AB divide A por B e coloca o quociente (resultado da diviso inteiro em 8 bits) no acumulador e o resto (8 bits) no registrador B.

Devido s suas caractersticas, a operao de diviso mais utilizada em converses de radicais e operaes de deslocamento programveis, do que na diviso aritmtica propriamente dita.

A instruo de ajuste decimal DA A utilizada na aritmtica BCD, quando utilizamos esta aritmtica, as operaes ADD e ADDC devem, obrigatoriamente, ser seguidas por uma operao de ajuste decimal, para que os resultados continuem em BCD. Note que o ajuste decimal no converte o nmero binrio em BCD, mas corrige os erros de aproximao ocorridos nos registradores.

3.8 Instrues lgicas

A tabela a seguir mostra uma lista de instrues lgicas do 8051.

MnemnicoOperaoModos de

OperaoTempo de

Execuo

ANL A, A = A and Dir / Ind / Reg / Imm1

ANL , A = and ADireto1

ANL , #DATA = and #DATADireto2

ORL A, A = A or Dir / Ind / Reg / Imm1

ORL , A = or ADireto1

ORL , #DATA = or #DATADireto2

XRL A, A = A xor Dir / Ind / Reg / Imm1

XRL , A = xor ADireto1

XRL , #DATA = xor #DATADireto2

CLR AA = 00HAcumulador1

CPL AA = not AAcumulador1

RL ARoda Acum. esquerda 1 bit Acumulador1

RLC ARoda Acum. esquerda c/ carryAcumulador1

RR ARoda Acum. direita 1 bit Acumulador1

RRC ARoda Acum. direita c/ carryAcumulador1

SWAP ASwap nibbles in AAcumulador1

Todos os modos de endereamento podem ser utilizados e as instrues so executadas em tempo de 1 a 2 (s. Estas instrues podem ser executadas em qualquer byte de memria interna ou na rea de SFR. O conjunto de instrues permite que sejam realizadas todas as operaes lgicas e ainda a instruo SWAP A, que inverte os nibbles alto e baixo do acumulador, operao til quando operamos com o cdigo BCD.

3.9 Transferncia de dados interna e externa

A tabela a seguir mostra as instrues disponveis para movimentao de dados entre os espaos de memria interna.

MnemnicoOperaoModo de

EndereamentoTempo de

Execuo

MOV A, A = Dir / Ind / Reg / Imm1

MOV , A = ADir / Ind / Reg1

MOV , = Dir / Ind / Reg / Imm2

MOV DPTR, #DATADPTR = 16 bit ConstConstante imediata2

PUSH INC SP: MOV @SP, Direto2

POP MOV , @SP: DEC SPDireto2

XCH A, Acc e trocam os dadosDir / Ind / Reg1

XCHD A, @RIAcc e trocam os nibbles

baixosIndireto1

A instruo MOV , permite que os dados sejam transferidos entre quaisquer dos registradores da RAM interna ou dos SFR, sem o uso do acumulador, lembrando que os 128 bytes superiores podem ser acessados apenas por endereamento indireto e os SFR apenas por endereamento direto.

A rea de stack reside na prpria RAM interna e as instrues de PUSH primeiro incrementam o stack pointer, ento copia o byte no stack. As instrues de PUSH e POP usam apenas o endereamento direto para identificar o byte que est sendo manipulado, enquanto que o stack acessado por endereamento indireto atravs do registrador SP. Isto significa que o stack vai para os 128 bytes altos (se existirem) mas no para a rea de SFR. Nos dispositivos onde no est implementado a rea alta, os bytes PUSHed so perdidos e os bytes POPed so indeterminados.

As transferncias de dados incluem movimentaes em 16 bits, que podem ser utilizadas para inicializar o Data Pointer (DPTR), para o uso de tabelas na memria de programa, ou para acesso memria de dados externa.

A instruo XCH A, resulta na troca dos dados entre o acumulador e o byte endereado. A instruo XCHD A, @RI similar, com a diferena que apenas os nibbles baixos esto envolvidos na operao. Esta instruo facilita a manipulao de dados, de forma a economizar instrues nos programas.

A memria externa pode ser acessada por endereamento indireto, utilizando 8 ou 16 bits de endereo. A escolha recai no uso de endereamento de um byte, atravs de @Ri, onde Ri pode ser R0 ou R1 do banco de registradores selecionado, ou um endereo de 2 bytes (16 bits) colocado no Data Pointer (DPTR). A desvantagem do uso do endereamento de 16 bits est no fato de que, se utilizarmos um pequeno espao de memria, ainda assim o port 2 ser inteiramente indisponibilizado para uso. No endereamento de 8 bits, sacrificamos apenas algumas linhas do port 2.

A tabela abaixo indica as instrues de movimentao de dados em memria externa. Todas as instrues so executadas em 2(s, com um clock de 12MHz.

Largura do EndereoMnemnicoOperao

8 BitsMOVX A, @RiL RAM Externa (Ri)

8 BitsMOVX @Ri, AEscreve RAM Externa (Ri)

16 BitsMOVX A, @DPTRL RAM Externa (DPTR)

16 BitsMOVX @DPTR, AEscreve RAM Externa (DPTR)

Em todos os acessos RAM externa, utilizamos sempre o acumulador como registrador intermedirio. Os pulsos de READ ou WRITE so ativos somente durante a execuo da instruo MOVX. Normalmente estes sinais esto inativos e se no forem utilizados, podem ser configurados como linhas de I/O extra.

Existem ainda duas instrues que esto disponveis para leitura de tabelas na memria de programa. Estas instrues permitem apenas a leitura de dados na memria de programa (ROM), no permitindo a atualizao dos mesmos. O mnemnico MOVC (mov constant), e pode se apresentar de duas formas:

MOVC A, @A + DPTR

MOVC A, @A + PCA diferena est no registrador auxiliar utilizado durante a leitura, que pode ser o DPTR ou o PC. A primeira instruo permite o acesso a tabelas de at 256 itens, sendo que o DPTR indica o incio da tabela, e o acumulador indica o off-set do endereo desejado. Com a variao (incremento) do acumulador, podemos ler a tabela inteira mantendo o DPTR fixo. A outra instruo, utiliza o acumulador como base de endereamento e o PC como off-set, de forma que a leitura de tabelas deve ser feita por sub-rotinas como a que se segue:

MOV A, valor inicial

CALL tabela

A rotina tabela seria:

tabela:MOVC A, @A + PC

RET

Este tipo de tabela pode conter at 255 itens, lembrando que neste caso, no podemos utilizar o valor 0 da tabela, que variar entre 1 e 255. Um valor colocado no off-set 0 no ser lido.

3.10 Instrues Booleanas

A famlia 8051 contm um processador booleano completo. Um processador booleano consiste num elemento que permite a manipulao direta de um nico bit dentro da palavra que pode ser de 8 ou mais bits (byte). A RAM interna contm 128 bits endereveis e o espao SFR contm mais 128. Todos os ports so bits endereveis, e cada um pode ser tratado como um port separado. As instrues que acessam esses bits no so apenas seqncias de desvios condicionais, mas um completo conjunto de instrues como indicado na tabela abaixo:

MnemnicoOperaoTempo de

Execuo

ANL C, bitC = C and bit2

ANL C, /bitC = C and not bit2

ORL C, bitC = C or bit2

ORL C, /bitC = C or not bit2

MOV C, bitC = bit1

MOV bit, Cbit = C2

CLR CC = 01

CLR bitbit = 01

SETB CC = 11

SETB bitbit =11

CPL CC = not C1

CPL bitbit = not bit1

JC RELJump If C = 12

JNC RELJump If C = 02

JB bit, RELJump If bit = 12

JNB bit, RELJump If bit = 02

JBC bit, RELJump If bit = 1 : CLR bit2

Este tipo de operao de bit no facilmente obtido em arquiteturas de microprocessador. Todos os bits so acessados diretamente nos endereos 00H at 7FH na rea dos 128 bytes inferiores e de 80H at FFH no espao SFR. Desta forma podemos com as instrues de programa, implementar circuitos lgicos dentro do microcontrolador, evitando o uso de circuitos discretos ou PALs.

3.11 Instrues de Salto

Podemos utilizar 3 tipos de instrues de desvio, quando endereamos um programa no microcontrolador. Estas instrues diferem entre si no formato do endereo de destino. A instruo SJMP (Short Jump) composta por dois bytes, constituindo um byte de opcode e um byte de off-set. Este fato limita o espao de endereamento em valores de -127 at +127 bytes em torno da instruo seguinte ao SJMP.

Quando utilizamos a instruo LJMP (Long Jump) temos um comprimento de 3 bytes, que consiste de dois bytes de endereo e um byte de opcode, permitindo o endereamento de 64Kbytes de memria de programa.

A instruo AJMP (Absolute Jump) codificada em 2 bytes sendo que o endereo formado por 11 bits e os 5 bits restantes utilizados no opcode.

A tabela abaixo indica as instrues de salto disponveis.

MnemnicoOperaoTempo de

Execuo

JMP endSalto para end2

JMP @A + DPTRSalto para A + DPTR2

CALL endChama subrotina no endereo end2

RETRetorno de subrotina2

RETIRetorno de interrupo2

NOPSem operao1

Em todos os casos, o programador especifica o endereo de destino para o assembler da mesma forma, por um label ou uma constante de 16 bits. O assembler colocar o endereo de destino no formato correto para cada instruo, e se o formato no comportar o valor, aparecer a mensagem Destination out of range.

Temos ainda as instrues LCALL, que permite a chamada de subrotinas em qualquer posio dos 64Kbytes de memria, e ACALL, que se utiliza do mesmo formato de endereamento de 11 bits utilizado no AJMP. As subrotinas devem ser finalizadas com o comando RET, e deve-se lembrar que cada chamada necessita de um RET, sem o qual o programa se perde.

A instruo RETI utilizada como retorno da rotina de interrupo. A nica diferena entre a instruo RET e a RETI, que a RETI informa ao sistema de controle de interrupo que a interrupo em progresso foi atendida.

Os saltos acima listados so chamados de saltos incondicionais, pois no dependem de nenhuma verificao de condies anteriores. Os chamados saltos condicionais, dependentes da verificao de certos bits de controle, e esto listados a seguir:

MnemnicoOperaoModo de

EndereamentoTempo de

Execuo

JZ relSalto se A=0Acumulador2

JNZ relSalto se A no 0Acumulador2

DJNZ , relDecrementa e salta se no 0Direto Registrador2

CJNE A, , relSalta se A diferente de Direto Imediato2

CJNE , #DATA, relSalta se diferente de #DATAIndireto Registrador2

No existe bit de zero no registrador PSW, portanto as instrues JZ e JNZ devem testar o dado do acumulador para estas condies. A instruo DJNZ adequada para controle de loops, pois sua configurao de dupla funo (decrementa e testa) torna fcil a execuo de loops.

A instruo CJNE pode ser utilizada para controle de loops ou para teste condicional de bytes, na forma de maior que ou menor que, pois existe a indicao de maior ou menor pelo bit de CARRY, localizado no PSW.

3.12 Oscilador Interno

Todos os membros da famlia 8051 possuem um oscilador interno que pode ser utilizado como fonte de clock para a CPU, bastando para isso que se implemente a configurao abaixo:

Se ao invs de utilizarmos o oscilador interno, utilizamos outro gerador qualquer (para sincronizar com outros circuitos, por exemplo) devemos ter o cuidado de interligar a entrada no pino certo. Este fato importante, pois este pino muda conforme o tipo de chip utilizado, por exemplo, com chips HMOS (8051) devemos ligar a entrada de clock ao pino XTAL2, enquanto que em circuitos CMOS (80C51), o clock deve ser colocado no pino XTAL1. A figura abaixo indica a correta montagem destas entradas nos diversos componentes.

3.13 Estrutura de Interrupes

A famlia 8051 atende a cinco entradas de interrupes distintas, duas externas, duas relativas aos dois timers, e uma relativa ao canal serial interno. Cada interrupo pode ser habilitada ou desabilitada individualmente, setando ou resetando um bit no registrador denominado IE (Interrupt Enable) dentro do SFR. Este registrador contm ainda um bit que habilita todas as interrupes, e sua estrutura completa mostrada abaixo. O bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo.

EA--ESET1EX1ET0EX0

EA (IE.7) Habilita todas as interrupes globais quando em 1; ES (IE.4) Interrupo do port serial;ET1 (IE.3) Interrupo do timer 1;EX1 (IE.2) Interrupo externa 1;ET0 (IE.1) Interrupo do timer 0;EX0 (IE.0) Interrupo externa 0.

Cada fonte de interrupo pode ser programada quanto sua prioridade de atendimento, por um outro registrador localizado na rea de SFR e denominado IP (Interrupt Priority).

A rotina de prioridade de interrupo determina que se uma interrupo de baixo nvel estiver sendo executada, esta pode ser interrompida por uma interrupo de alto nvel, sendo continuada aps o trmino da mesma. O contrrio no verdadeiro, ou seja, uma interrupo de alto nvel no interrompida por uma interrupo de nvel inferior, nem igual ao dela. Se duas interrupes de mesmo nvel so recebidas simultaneamente, uma sequncia de pool interna determina qual ser atendida em primeiro lugar. A figura abaixo ilustra o contedo do registrador IP. O Bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo.

---PSPT1PX1PT0PX0

PS (IP.4) Prioridade de interrupo do canal serial;PT1 (IP.3) Prioridade de interrupo timer 1;PX1 (IP.2) Prioridade de interrupo externa 1;PT0 (IP.1) Prioridade de interrupo do timer 0;PX0 (IP.0) Prioridade de interrupo externa 0.

Quando em operao, todos os flags de interrupo esto retidos no sistema de controle de interrupo durante o estado de cada ciclo de mquina. As amostras so pooladas durante o ciclo seguinte, e se uma delas se encontrar setada, o sistema de interrupo gera um LCALL para o endereo apropriado na memria de programa, a menos que outra condio bloqueie a interrupo.

Esta LCALL gerada por hardware resulta na transferncia do contedo do registrador PC para o Stack e recarrega o PC com o primeiro endereo da rotina de interrupo. Cada rotina de uma dada interrupo comea num endereo fixo. Somente o PC transferido automaticamente para o stack, ento devemos nos lembrar de salvar os registradores importantes em cada rotina de interrupo. Salvando apenas o PC, torna-se mais simples a aplicao destas rotinas nas funes mais comuns de controle, onde no necessitamos grandes recursos de software, pois precisamos apenas setar um pino, ou recarregar um timer, ou ler um canal serial, por exemplo.

A figura a seguir indica como atuam os registradores no controle do hardware de interrupo:

4 Descrio do Hardware

A descrio a seguir mostra as caractersticas construtivas do microcontrolador 8051.

4.1 Registradores de funo especial (Special Function Register SFR)

A figura abaixo indica a disposio do registrador de funes especiais (SFR).

Na rea de SFR, nem todos os endereos esto ocupados, de forma que estes endereos no esto implantados no chip. Estes espaos destinam-se a acessrios que encontramos em outros componentes da famlia.

Vamos descrever os nomes e funes de cada registrador.

EndereoF8HF9HFAHFBHFCHFDHFEHFFH

Funo

EndereoF0HF1HF2HF3HF4HF5HF6HF7H

FunoB

EndereoE8HE9HEAHEBHECHEDHEEHEFH

Funo

EndereoE0HE1HE2HE3HE4HE5HE6HE7H

FunoACC

EndereoD8HD9HDAHDBHDCHDDHDEHDFH

Funo

EndereoD0HD1HD2HD3HD4HD5HD6HD7H

FunoPSW

EndereoC8HC9HCAHCBHCCHCDHCEHCFH

FunoT2CONRCP2LRCP2HTL2TH2

EndereoC0HC1HC2HC3HC4HC5HC6HC7H

Funo

EndereoB8HB9HBAHBBHBCHBDHBEHBFH

FunoIP

EndereoB0HB1HB2HB3HB4HB5HB6HB7H

FunoP3

EndereoA8HA9HAAHABHACHADHAEHAFH

FunoIE

EndereoA0HA1HA2HA3HA4HA5HA6HA7H

FunoP2

Endereo98H99H9AH9BH9CH9DH9EH9FH

FunoSCONSBUF

Endereo90H91H92H93H94H95H96H97H

FunoP1

Endereo88H89H8AH8BH8CH8DH8EH8FH

FunoTCONTMODTL0TL1TH0TH1

Endereo80H81H82H83H84H85H86H87H

FunoP0SPDPLDPHPCON

4.2 Acumulador (ACC) (Registrador A)O acumulador o registrador onde se processam a maioria das operaes de um processador, comumente encontradas num microprocessador de 8 bits.

4.3 Registrador B (B)

um registrador utilizado durante as operaes de multiplicao e diviso, podendo ser utilizado como registrador de uso geral em outras operaes.

4.4 Registrador da palavra de controle (PSW)

chamado de Program Status Word e contm basicamente, os flags de controle de fluxo do programa. Por isso utilizado em desvios e saltos condicionais, sendo tambm alterado na maioria das instrues. Seu contedo indicado na figura abaixo.

CYACF0RS1RS0OV-P

CY (PSW7): Carry flag, indica vai um nas operaes aritmticas.

AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio.

F0 (PSW5): Flag de uso geral.

RS1 (PSW4): Seleo do banco de registradores em uso.

RS0 (PSW3): Seleo do banco de registradores em uso.

OV (PSW2): Overflow em operaes aritmticas.

- (PSW1): Flag definvel pelo usurio.

P (PSW0): Flag de paridade, indica o nmero de bits em 1 no acumulador.

RS0RS1Banco SelecionadoEndereo

00Banco 000H at 07H

01Banco 108H at 0FH

10Banco 210H at 17H

11Banco 318H at 1FH

4.5 Stack Pointer (SP) e Data Pointer (DPTR)

O Stack Pointer (ponteiro de pilha) incrementado antes do armazenamento dos dados em uma instruo PUSH ou CALL. Observe que o Stack pode ser alocado em qualquer regio da memria RAM, o ponteiro sempre inicializado no endereo 07H, e o Stack comea no endereo 08H.

O Data Pointer consiste em dois registradores de 8 bits (DPH byte alto, e DPL byte baixo), que podem ser manipulados tanto como dois registradores separados de 8 bits como um nico de 16 bits.

4.6 Buffer Serial (SBUF)

O Buffer de dados serial (Serial data BUFfer) consiste de dois registradores separados, o buffer de transmisso e o buffer de recepo. Quando um dado colocado no buffer serial, ele vai diretamente para o buffer de transmisso serial, e quando ele chega ao buffer de recepo, ele colocado diretamente no SBUF.

Existe um registrador que controla todas as operaes da interface serial chamado SCON (Serial CONtrol). Seu contedo descrito a seguir.

SM0SM1SM2RENTB8RB8TIRI

SM0 (SCON.7): Modo de operao da interface serial.

SM1 (SCON.6): Modo de operao da interface serial.

SM2 (SCON.5): Modo de operao da interface serial.

REN (SCON.4): Habilitao de recepo.

TB8 (SCON.3): o nono bit transmitido (stop bit).

RB8 (SCON.2): o nono bit recebido.

TI (SCON.1): Flag indicando fim de transmisso.

RI (SCON.0): Flag indicando buffer de recepo cheio.

SM0SM1ModoDescrioFrequncia

000Shift RegisterFreq. Oscilador /12

0118 bit UARTVarivel

1029 bit UARTFreq. Oscilador /64 ou 32

1139 bit UARTVarivel

4.7 Portos de E/S (P0, P1, P2, P3)

Os portos P0, P1, P2 e P3 so latches dos seus respectivos portos fsicos. Escrevendo um bit 1 no SFR, o pino de sada do porto respectivo ir para 1 imediatamente. Quando este port for acessado para leitura, o estado do pino externo armazenado no registrador correspondente. A estrutura dos ports ilustrada abaixo.

Todos os 4 ports so bidirecionais e consistem num latch (que o prprio SFR), num driver de sada e num driver de entrada. Os drivers de sada dos ports P0 e P2 e o driver de entrada do port P0, so utilizados durante o acesso memria externa.

4.8 Registradores de Timer e de Controle

Os pares de registradores (TH0, TL0, e TH1, TL1) so registradores de contagem de 16 bits, nos quais programamos os valores de contagem/temporizao dos respectivos contadores.

Existem outros registradores de funes especficas de controle de alguns mdulos do microcontrolador. Vamos descrever cada um desses registradores.

O registrador IP (Interrupt Priority), define um dos dois nveis possveis para cada interrupo, de acordo com a descrio abaixo.

--PT2PSPT1PX1PT0PX0

PT2 (IP5): Define nvel de prioridade do timer 2 (somente no 8052).

PS (IP4): Define o nvel de prioridade do port serial.

PT1 (IP3): Define o nvel de prioridade do timer 1.

PX1 (IP2): Define o nvel de prioridade da interrupo externa 1.

PT0 (IP1): Define o nvel de prioridade do timer 0.

PX0 (IP0): Define o nvel de prioridade da interrupo externa 0.

J o registrador IE (Interrupt Enable), permite a habilitao ou desabilitao individual de cada uma das fontes de interrupo. Atravs de um bit neste mesmo registrador podemos atuar sobre todas as interrupes de maneira global.

EA-ET2ESET1EX1ET0EX0

EA (IE7): Desabilita todas as interrupes quando em 0.

ET2 (IE5): Habilita ou desabilita a interrupo do timer 2 (somente 8052).

ES (IE4): Habilita ou desabilita a interrupo do port serial.

ET1 (IE3): Habilita ou desabilita a interrupo do timer 1.

EX1 (IE2): Habilita ou desabilita a interrupo externa 1.

ET0 (IE1): Habilita ou desabilita a interrupo do timer 0.

EX0 (IE0): Habilita ou desabilita a interrupo externa 0.

O registrador TMOD (Timer MODe), permite o controle do modo de operao dos timers existentes no microcontrolador, bem como a definio quanto operao como timer ou como contador.

Gate (1)C/T (1)M1 (1)M0 (1)Gate (0)C/T (0)M1 (0)M0 (0)

Gate: Permite o disparo do timer por hardware (gate=1), ou por software (gate=0), via registrador TCON.

C/T: Em 0 opera como timer, em 1 opera como contador.

M1: Modo de operao.

M0: Modo de operao.

M1M0Modo de Operao

000 Timer de 13 bits compatvel com o 8048.

011 Timer/counter de 16 bits.

102 Timer/counter de 8 bits auto reload.

113 No timer 0, TL0 define um contador de 8 bits e TH0 controlado pelos bits de controle do timer 1. O timer 1 est parado.

A operao dos timers/counters dependem tambm de um registrador denominado TCON (Timer CONtrol), utilizado para configur-lo e monitorar suas condies de funcionamento. Neste mesmo registrador encontramos os flags de interrupes externas, os quais esto ativos quando da ocorrncia da interrupo.

TF1TR1TF0TR0IE1IT1IE0IT0

TF1 (TCON.7): Flag de overflow do timer 1. Seta quando overflow.

TR1 (TCON.6): Bit de disparo do timer 1.

TF0 (TCON.5): Flag de overflow do timer 0. Seta quando overflow.

TR0 (TCON.4): Bit de disparo do timer 0.

IE1 (TCON.3): Flag da interrupo externa 1.

IT1 (TCON.2): Seleciona o tipo de interrupo 1 (borda ou nvel).

IE0 (TCON.1): Flag da interrupo externa 0.

IT0 (TCON.0): Seleciona o tipo de interrupo 0 (borda ou nvel).

O registrador de controle da interface serial SCON (Serial CONtrol), permite a programao das caractersticas funcionais da interface serial do microcontrolador. Normalmente devemos utilizar este registrador para definir que tipo de UART vamos utilizar, e verificar o status da transmisso pelos bits de controle, presentes neste mesmo registrador.

SM0SM1SM2RENTB8RB8TIRI

SM0 (SCON.7): Modo de operao do port serial.

SM1 (SCON.6): Modo de operao do port serial.

SM2 (SCON.5): Usado nos modos 2 e 3 para multiprocessamento.

REN (SCON.4): Habilita ou desabilita a recepo definido por soft.

TB8 (SCON.3): o nono bit transmitido (stop bit) definido por soft.

RB8 (SCON.2): o stop bit recebido do hardware para sinalizao.

TI (SCON.1): Setado pelo hardware no fim da transmisso.

RI (SCON.0): Setado pelo hardware no fim da recepo.

SM0SM1ModoDescrioFrequncia

000Shift RegisterFreq. Oscilador /12

0118 bit UARTVarivel

1029 bit UARTFreq. Oscilador /64 ou 32

1139 bit UARTVarivel

Existe ainda um registrador para controle genrico das funes de alimentao do microcontrolador. O registrador PCON (Power CONtrol) bastante utilizado quando optamos pela utilizao da tecnologia CHMOS (80C51 por exemplo), para garantir baixo consumo em circuitos alimentados por bateria, ou ainda que permaneam um grande perodo em stand-by.

SMOD---GF1GF0PDIDL

SMOD: Dobra o baud rate quando utilizamos o timer 1.

GF1: Flag de uso geral.

GF0: Flag de uso geral.

PD: Ativa o modo de operao Power Down (s nos CHMOS).

IDL: Ativa o modo de operao IDLE (s nos CHMOS).

4.9 Estrutura e operao dos ports de I/O

Os quatro ports presentes no 8051 so bidirecionais, consistindo cada um de um latch (que o prprio registrador Px no SFR), em um driver de sada e em um buffer de entrada. Para acessar a memria externa, utilizamos os ports P0 e P2, sendo que o port P0 leva os dados e endereos multiplexados, enquanto que o port P2 leva memria o restante dos endereos. Fica claro que quando utilizamos os microcontroladores sem memria interna (80C31 por exemplo) o port P2 tem seu uso restrito para endereamento. O port P3 um port multifuncional, ou seja, seus pinos no so apenas pinos de entrada e sada, mas tem diversas funes especficas, que esto listadas abaixo:

P3.0 RXD entrada do port serial

P3.1 TXD sada do port serial

P3.2 INT0 entrada da interrupo externa 0

P3.3 INT1 entrada da interrupo externa 1

P3.4 T0 entrada do Timer/counter 0

P3.5 T1 entrada do Timer/counter 1

P3.6 WR sinal de escrita para memria externa

P3.7 RD sinal de leitura para memria externa

Os portos 1, 2 e 3 so providos de resistores pull-up internos, enquanto que o port 0 apresenta sadas em open drain. Qualquer uma das linhas pode ser usada independentemente como entrada ou sada, uma vez que os ports so endereveis por bit (bit addressable). Para utilizarmos os ports como entradas, devemos colocar nvel lgico 1 no latch de entrada, para que o pino fique em nvel alto pelo resistor de pull-up, mas possa ser colocado em nvel baixo pela ao de um sinal externo.

No port 0, no existe o resistor de pull-up interno, de forma que torna-se obrigatrio o uso de pull-ups externos. Quando ocorre o endereamento, a estrutura do port permite que sejam colocados 1s ou 0s conforme a necessidade. A estrutura dos ports est representada a seguir, ilustrando o funcionamento dos mesmos.

Para escrever um dado em um dispositivo atravs de um dos ports, devemos simplesmente mover o dado para o registrador respectivo no SFR. Devemos lembrar sempre que os valores de corrente fornecidos pelos ports so da ordem de miliampres, de forma que precisamos de drivers de corrente na maioria dos casos. Os resistores pull-up internos fornecem baixos valores de corrente e na maioria dos projetos determinamos a ativao dos dispositivos de sada em nveis baixos, pois neste caso a corrente pode ser significativamente maior.

Os buffers de sada dos ports 1, 2 e 3 fornecem corrente suficiente para 4 cargas TTL cada um, enquanto que o port 0 pode fornecer corrente para at 8 cargas TTL.

Algumas instrues de leitura no port, realizam uma leitura no latch (registrador), enquanto outras realizam a leitura diretamente no pino do CI. As instrues que realizam a leitura no latch, lem este valor, processam, e depois se for necessrio rescrevem-no no latch. So chamadas de read-modify-write, e esto listadas a seguir:

ANL E lgico

ORL Ou lgico

XRL Ou Exclusivo lgico

JBC Jump se bit =1 e limpa o bit

CPL Complementa o bit

INC Incremento

DEC Decremento

DJNZ Decrementa e salta se no zero

MOV, Px,y, C Move carry bit para o bit y do port x

CLR Px,y Limpa bit y do port x

SETB Px,y Seta bit y do port x

A razo pela qual as instrues acima so direcionadas preferencialmente ao latch evitar uma m interpretao do nvel lgico no pino. Um exemplo disso quando utilizamos transistores na sada dos microcontroladores, e escrevemos nvel 1 na base do mesmo. A tenso neste pino pode ser confundida com nvel 0 facilmente, enquanto que se a mesma for lida no latch, representar o valor real do sinal no pino.

4.10 Acesso memria externa

Podemos ter dois tipos de acesso memria externa, acesso memria de programa externa (ROM, EPROM) e acesso memria de dados externa (RAM). Acessos ROM externa utilizam o sinal PSEN como strobe de leitura, enquanto que utilizamos o sinal RD ou WR como strobe quando acessamos a memria RAM.

Buscas memria externa de programa utilizam sempre endereos de 16 bits, e os acessos memria de dados podem utilizar 8 ou 16 bits de endereo.

Quando utilizamos acessos de 16 bits, o byte alto de endereo exibido pelo porto 2, que fica indisponvel como port de I/O genrico. Quando utilizamos acessos em 8 bits, o valor do port 2 existente no latch do seu respectivo SFR mantido de forma que podemos implementar um sistema de gerenciamento com facilidade.

Em qualquer dos casos, o port 0 contm o byte baixo de endereos multiplexado com os dados, e nesta funo utilizamos um dos FETs internos com pull-up de forma que no se orna necessria a adio de pull-up externo (se forem realizadas apenas operaes de busca na memria, o que no muito comum). O sinal de ALE deve ser utilizado para capturar o endereo vlido no latch externo.

Durante qualquer acesso memria externa, escrito o byte 0FFH no latch do port 0 (SFR), destruindo a informao presente neste port, portanto, devemos salvar qualquer informao til existente no port 0 antes de acessar a memria externa.

A memria de programa externa acessada sempre em duas condies: quando o sinal EA estiver ativo (nvel baixo), ou o contador de programa PC apresentar um nmero maior do que 0FFFH.

4.11 Temporizadores e Contadores

O microcontrolador 8051 tem 2 temporizadores/contadores de 16 bits, timer 0 e timer 1. Os dois podem ser programados para operar como temporizadores ou contadores independentemente.

Na funo de timer, o registrador incrementado a cada ciclo de mquina, de forma que podemos imaginar o timer como um contador de ciclos de mquina. Como um ciclo de mquina consiste de 12 perodos do oscilador, podemos calcular facilmente a frequncia do nosso timer.

Na funo de contador, o registrador incrementado a cada transio de 1 para 0 no correspondente pino de entrada. Desta forma, cada leitura toma o tempo de dois ciclos de mquina, limitando a frequncia mxima de amostragem a 1/24 da frequncia de clock.

4.12 Modos de operao

Podemos ter quatro modos distintos de operao dos timers selecionados pelo registrador TMOD.

Modo 0:

No modo 0, o timer um contador de 8 bits com um divisor por 32, executando na realidade, um timer de 13 bits, compatvel com o timer do 8048, como indicado na figura abaixo:

Neste modo, quando o contador passa de todos os bits em 0, o flag respectivo TFx setado no registrador TCON. O disparo do timer feito por outro bit no registrador TCON, o bit TRx (Timer Run). O bit Gate, presente no registrador TMOD permite o uso de uma interrupo conjuntamente com o timer. Devemos lembrar sempre de programar TMOD antes de programar TCON para disparo do timer.

O registrador de 13 bits consiste nos 8 bits de THx e nos 5 bits mais baixos de TLx, sendo os 3 bits restantes do registrador TLx ignorados.

Modo 1:

No modo 1, os timer se comportam da mesma forma que no modo 0, exceto pelo fato de que os registradores agora utilizam a totalidade dos 16 bits disponveis para cada um dos contadores.

Modo 2:

O modo 2 configura o registrador do timer como um contador de 8 bits (TLx) com recarga automtica, como mostrado na figura abaixo:

Quando ocorre o overflow de TLx, o flag TLx setado e o contedo de TLx recarregado com o valor de THx, que deve ser anteriormente carregado por software. O valor de THx permanece inalterado.

Modo 3:

O modo 3 deve ser utilizado quando necessitamos de um outro contador no 8051. Quando ativamos o modo 3, estabelecemos dois contadores separados, um para o THx e outro para o TLx. O timer procedente de TLx utiliza para seu controle, os bits C/T, Gate, TR0, INTx e TFx, relativos ao timer 0, enquanto que o timer relativo ao registrador THx, utiliza os bits de controle relativos ao timer 1. A figura abaixo ilustra a lgica de atuao deste modo.

4.13 Interface Serial

A interface serial presente no microcontrolador do tipo full-duplex, pode transmitir e receber dados simultaneamente, com buffer de recepo, ou seja, pode comear a receber um segundo byte antes de ler o primeiro byte do buffer. Os buffers de transmisso e recepo so comandados pelo registrador SBUF no SFR. Escrita no SBUF carrega o buffer de transmisso, enquanto que leituras no SBUF acessam um registrador de recepo separado fisicamente.

A interface serial pode operar em 4 modos distintos, e em qualquer dos modos a transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. A recepo se d quando chega um dado no SBUF.

4.14 Modos de Operao

Podemos operar com a interface serial interna do microcontrolador, de quatro modos diferentes:

Modo 0:

Neste modo, os dados manipulados entram pelo pino RXD, enquanto que o pino TXD utilizado como sada. Temos ento a transmisso de 8 bits, sendo que o primeiro bit o LSB, e a frequncia de baud rate fixa em 1/12 da frequncia do oscilador.

A transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de destino. Imediatamente aps esta instruo, colocado um bit 1 na nona posio do shift register e o bloco de controle de transmisso comea a transmisso. Os bits de dados so deslocados para a direita e so colocados zeros nas posies desocupadas, at que se chegue no MSB. Esta condio avisa para o bloco de controle que deve ser efetuado um deslocamento, e em seguida setada a flag TI. Todo este processo ocorre no tempo de 10 ciclos de mquina.

A recepo comea quando a condio REN igual a 1 e o flag RI igual a 0. Os dados recebidos so deslocados e aps a chegada do ltimo bit, o flag de recepo RI setado, indicando que existem dados no buffer de recepo. A figura abaixo ilustra o processo.

Modo 1:

Dez bits so recebidos pelo pino RXD, ou transmitidos pelo pino TXD; um start bit (0), 8 bits de dados (LSB primeiro), e um stop bit. Na recepo, o stop bit vai para a posio RB8 no registrador SCON, e o baud rate determinado pelo timer 1, na maioria dos casos (podem ser utilizados tambm o timer 2 ou ambos no 8052).

A transmisso ocorre da mesma forma que no modo anterior, exceto ao fato de que no existe uma linha de clock sincronizando os dois circuitos. Este sincronismo funo de bits de start e stop, presentes em cada transmisso. Aps a transmisso do ltimo bit (stop bit) o flag TI setado no registrador SCON.

A recepo iniciada com a deteco da transio de 1 para 0 na linha RXD, indicando a presena do start bit na linha. Para esta funo, a linha RXD amostrada a uma taxa de 16 vezes a frequncia determinada para o baud rate. Aps esta deteco, o sinal comea a ser deslocado a partir da frequncia gerada pelo timer 1. Quando for recebido o ltimo bit (stop bit), este colocado em RB8, e o flag TI setado. A figura a seguir ilustra o diagrama de sinais da recepo do modo 1.

Modos 2 e 3:

Nestes dois modos so transmitidos 11 bits pelo pino TXD, ou recebemos 11 bits atravs do pino RXD: um start bit 0, 8 bits de dados (LSB primeiro), um nono bit programvel e um stop bit 1. A diferena entre os modos 2 e 3 que no modo 3 a frequncia de baud rate varivel, enquanto que no modo 2 a frequncia fixa em 1/32 ou 1/64 da frequncia do oscilador. Os processos de transmisso e recepo dos dados so semelhantes aos outros modos anteriormente mostrados. A figura abaixo ilustra o processo.

4. 15 Registrador de Controle

O controle da interface serial feito pelo j descrito registrador SCON, com a atuao do registrador PCON, (utilizando o bit SMOD). Por este registrador podemos monitorar o funcionamento da interface serial pelos bits TI, RI, TB8 e RB8, que indicam o estado da interface serial nas operaes de transmisso ou recepo.

4.16 Baud Rates

A taxa de transmisso (baud rate), tem seus valores definidos de acordo com o modo de operao estabelecido para o interface serial. No modo 0, o baud rate fixo e tem seu valor estabelecido como sendo 1/12 da frequncia do oscilador.

No modo 2, a frequncia pode ter dois valores distintos, dependendo do valor do bit SMOD no registrador PCON. Se SMOD for igual a 0, o baud rate igual a 1/64 da frequncia do oscilador, se o SMOD for igual a 1, o baud rate passa a ser 1/32 da frequncia do oscilador.

Quando utilizamos o timer 1 como gerador de baud rate, o baud rate nos modos 1 e 3 tem seu valor determinado pela taxa de overflow do prprio timer 1, obedecendo a frmula:

Baud rate = [(2Smod)/32] x (timer 1 overflow rate)

A interrupo do timer 1 deve ser desabilitada neste caso para evitar sinalizao indevida. O timer pode ser configurado para operao como timer ou como contador em qualquer um dos trs modos. O modo mais comumente utilizado o modo de operao como timer de auto-recarga. A frmula para se obter diretamente a frequncia do baud rate a seguinte:

Baud Rate = {[(2Smod)/32] x [Fosc./[12 x (256 - TH1)]]}

A tabela abaixo indica os valores mais utilizados a partir de uma dada frequncia de cristal, e os valores de recarga dos timers para facilitar a programao.

Baud RateFreq. Osc.SMODModoValor de Recarga

19,2K11,059 MHz12FDH

9,6K11,059 MHz02FDH

4,8K11,059 MHz02FAH

2,4K11,059 MHz02F4H

1,2K11,059 MHz02E8H

137,511,968 MHz021DH

1106 MHz0272H

11012 MHz01FEEBH

Devemos observar os valores de mxima frequncia para cada um dos modos, e respeit-los, pois o uso de frequncias acima destes valores acarretariam perdas de informao na comunicao serial. A tabela abaixo indica estas frequncias:

ModoFrequncia Mxima

01 MHz

1 e 362,5 KHz

2375 KHz

4.17 Interrupes

Os microcontroladores da famlia 8051 so providos de 5 fontes de interrupo, como mostradas na figura a seguir. As interrupes externa INT0 e INT1 podem ser ativadas por nvel lgico ou por transio (borda), dependendo para isto, dos bits IT0 e IT1 no registrador TCON. Os flags que indicam a presena da interrupo nos pinos externos so IE0 e IE1 no mesmo registrador TCON. Quando uma interrupo externa recebida, o respectivo flag limpo quando a rotina de servio vetorada para o endereo da interrupo, somente se a interrupo for do tipo ativa por transio. Se a interrupo for ativa por nvel , o dispositivo externo que solicitou a interrupo se encarrega do seu controle.

As interrupes dos timers so geradas quando houver overflow dos mesmos, e so reestabelecidas ao seu estado inativo por hardware quando a interrupo j se encontrar devidamente vetorada.

A interrupo da interface serial gerada por um OU lgico entre os flags de RI e TI, e estes flags no so limpos aps o vetoramento da interrupo, devendo ser feito este procedimento por software, aps o recebimento ou transmisso do dado.

Todos os bits que geram interrupo podem ser habilitados ou no pelo registrador de habilitao de interrupo IE.

Os vetores de endereo das interrupes, ou seja, os endereos para qual o PC direcionado quando ocorre uma interrupo so fixos e seus valores so indicados a seguir:

FonteEndereo

IE00003H

TF0000BH

IE10013H

TF1001BH

Serial0023H

4.18 Estrutura de prioridades

Cada uma das fontes de interrupo pode ser individualmente programada para atender a um dos dois possveis nveis de interrupo, mediante um bit especfico no registrador IP. Colocando um valor 0 no bit correspondente, definimos esta interrupo como de menor prioridade, e vice-versa.

Quando temos duas interrupes de mesma prioridade, no mesmo instante, elas sero atendidas pelo pool select que realizado na seguinte ordem:

IE0 TF0 IE1 TF1 Serial

4.19 Interrupes externas

As fontes externas de interrupo podem ser programadas para serem ativadas por nvel ou por borda, desde que os pinos de interrupo externa sejam amostrados uma vez a cada ciclo de mquina, a entrada de interrupo deve manter-se estvel por pelo menos 12 perodos do oscilador para que a interrupo seja reconhecida. No caso da interrupo ser ativa por transio, deve-se manter em um nvel por um ciclo de mquina e mudar para outro nvel, mantendo-se nele por outro ciclo de mquina.

Aps o reconhecimento, o flag IEx setado no registrador TCON sendo automaticamente resetado pela CPU quando a rotina de servio da interrupo chamada.

Se a interrupo ativa por nvel, este nvel deve ser mantido pelo tempo necessrio para que seja reconhecida a interrupo, e depois deve ser desativada antes que a rotina de tratamento da interrupo se complete, para evitar que outro pedido de interrupo seja gerado.

4.20 Circuitos de Controle

Existem outros circuitos que devem ser considerados quando da elaborao do hardware de um microcontrolador. Alm dos j citados circuitos de decodificao de dados/endereos, utilizado para acesso a memria externa, pull-ups e buffers nas linhas de dados e endereos, alguns merecem especial cuidado e ateno na construo.

4.21 Circuito de Reset

A entrada do reset se d pelo pino RST, quando este mantido em nvel alto por pelo menos dois ciclos de mquina, aps o circuito do oscilador comear a funcionar. Logo aps o reset, os valores colocados nos registradores so os indicados abaixo:

FonteEndereo

PC0000H

Acc00H

B00H

PSW00H

SP07H

DPTR0000H

P0-P3FFH

IPXXX00000b

IE0XX00000b

TMOD00H

TCON00H

TH000H

TL000H

TH100H

TL100H

SCON00H

SBUFIndeterminado

PCON (HMOS)0XXXXXXXb

PCON (CHMOS)0XXX0000b

Normalmente utilizamos um circuito conhecido como Power On Reset, para que o microcontrolador seja inicializado ao ligarmos o equipamento. O circuito abaixo ilustra um exemplo tpico de circuito para uma tenso de 5Vcc, e frequncia de 10MHz. Devemos notar que para os circuitos CHMOS, devido caractersticas construtivas do dispositivo, no se faz necessrio o uso do resistor externo, simplificando ainda mais o circuito.

4.22 Circuito de Clock

Podemos utilizar o oscilador interno ao microcontrolador como indicado anteriormente neste mesmo manual. Devemos utilizar um cristal com as seguintes caractersticas:

Co (Shunt Capacitance) mx. 7pF

Cl (Load Capacitance) 30 pF (10%)

Potncia 1mWA resistncia equivalente em srie depende da frequncia do cristal, tendo seus valores prticos demarcados no grfico a seguir:

4.23 Operao passo a passo

Este modo de operao muito til durante a construo de programas, e desenvolvimento do hardware, para solucionar eventuais problemas surgidos no decorrer destes processos.

Podemos entender esta operao, lembrando o funcionamento da j conhecida estrutura das interrupes do microcontrolador. Quando uma interrupo est em progresso, outra interrupo de mesmo nvel no pode ser ativada simultaneamente. O fato que a prxima interrupo s ocorre aps a execuo de pelo menos uma instruo do programa interrompido, de forma que, colocando a interrupo INT0 (por exemplo) em nvel baixo e acrescentando algumas linhas de programa nas rotinas de tratamento da interrupo. As linhas so as seguintes:

JNB P3.2,$ ; aguarda at que a interrupo v para alto

JB P3.2,$ ; aguarda at que a interrupo v para baixo

RETI ; volta e executa uma instruo

Desta forma, quando a INT0 ativada em nvel baixo, a CPU vai para a rotina de tratamento da interrupo e fica at que o sinal INT0 pulse (de baixo para alto e novamente para baixo). Desta forma ela executa o comando de retorno da interrupo, executa uma instruo e imediatamente retorna a rotina de interrupo, permanecendo nesta at que o sinal INT0 pulse novamente.

Esta uma forma simples de acompanhar a execuo das rotinas de um programa passo a passo, mas normalmente vamos executar estas rotinas atravs de um software de simulao apropriado, onde sero detectadas as principais falhas na programao.

4.24 Descrio da pinagem

A figura abaixo ilustra a pinagem do controlador 8051 nas duas formas de encapsulamento mais comuns:

A descrio da pinagem deste componente, no invlucro DIP dada abaixo:

PinoDescrio

1Port 1, Dado 0

2Port 1, Dado 1

3Port 1, Dado 2

4Port 1, Dado 3

5Port 1, Dado 4

6Port 1, Dado 5

7Port 1, Dado 6

8Port 1, Dado 7

9Entrada de Reset

10Port 3, Dado 0 (RXD da interface serial interna)

11Port 3, Dado 1 (TXD da interface serial interna)

12Port 3, Dado 2 (Interrupo externa INT0)

13Port 3, Dado 3 (Interrupo externa INT1)

14Port 3, Dado 4 (Entrada do Timer 0)

15Port 3, Dado 5 (Entrada do Timer 1)

16Port 3, Dado 6 (Sinal de escrita para memria exemploterna)

17Port 3, Dado 7 (Sinal de leitura para memria externa)

18Entrada do cristal do oscilador

19Entrada do cristal do oscilador

20Alimentao Terra

21Port 2, Bit0 (Endereo A8)

22Port 2, Bit1 (Endereo A9)

23Port 2, Bit2 (Endereo A10)

24Port 2, Bit3 (Endereo A11)

25Port 2, Bit4 (Endereo A12)

26Port 2, Bit5 (Endereo A13)

27Port 2, Bit6 (Endereo A14)

28Port 2, Bit7 (Endereo A15)

29Sinal PSEN (Program Search Enable)

30Sinal ALE (Address Latch Enable) *Prog no 8751

31Sinal EA (External Access) *Tenso de Prog no 8751

32Port 0, Bit 7 (Dado 7)

33Port 0, Bit 6 (Dado 6)

34Port 0, Bit 5 (Dado 5)

35Port 0, Bit 4 (Dado 4)

36Port 0, Bit 3 (Dado 3)

37Port 0, Bit 2 (Dado 2)

38Port 0, Bit 1 (Dado 1)

39Port 0, Bit 0 (Dado 0)

40Alimentao de +5V

5 PROGRAMAO E SIMULAO

5.1 COMPILAO E LINKAGEM

Um programa escrito em linguagem assembly (PROGRAMA FONTE), no pode ser diretamente processado pelo microcontrolador do sistema, devendo primeiramente ser traduzido para a sua linguagem de mquina, com o uso de tabelas ou por meio de um programa destinado para tal tarefa chamado de COMPILADOR, que fornece ento como sada o PROGRAMA OBJETO.

Define-se COMPILADOR como um programa aplicativo que transforma um arquivo constitudo por cdigos ASCII (PROGRAMA FONTE: obrigatoriamente com extenso .ASM), gerado normalmente por um editor de textos, em um arquivo binrio que contm os bytes correspondentes s instrues (cdigos de mquina) do microcontrolador.

Como resultado da compilao so criados dois arquivos:

- Arquivo de mesmo nome, porm com a extenso .OBJ (PROGRAMA OBJETO).

- Arquivo de mesmo nome, porm com a extenso .LIST, que corresponde a um arquivo texto que mostra o resultado da compilao, contendo para cada linha de programa, o cdigo de mquina correspondente instruo, sendo muito til na depurao de erros de compilao.

A linkagem tem a finalidade de reunir, em um nico arquivo, todos as rotinas escrita em um ou vrios arquivos diferentes.

Aps a linkagem so gerados dois arquivos:

- Arquivo de mesmo nome, sem extenso, usado pelo programa simulador.

- Arquivo de mesmo nome, porm com a extenso .HEX, usado por gravadores de memrias e microcontroladores e tambm pelo programa simulador.

PROGRAMA COMPILADOR PROGRAMA LINKER PROGRAMA

FONTE OBJETO EXECUTVEL

.ASM .OBJ .HEX

O compilador, o Linker e o Simulador usados no laboratrio so produzidos pela AVOCET.

5.2 DIRETIVAS (ou PSEUDO-INSTRUES) de CompilaoAlm das instrues pertencentes ao microcontrolador em questo, a linguagem assembly possui ainda algumas instrues especiais, pseudo-instrues ou diretivas, que so usadas apenas para a estruturao do programa.

Estas instrues especiais, que no so traduzidas para o cdigo de mquina por no pertencerem ao conjunto de instrues do microcontrolador escolhido, possuem apenas funes especiais no programa como: definir smbolos, estabelecer o endereo inicial do programa, reservar rea de memria etc, no sendo, portanto, processadas.

PSEUDO-INSTRUES MAIS USADAS

ORG (ORIGIN)

Formato: Pseudo-instruo operando

ORG endereo

Funo:

Usado para o endereo inicial de memria, no qual o programa ou um trecho de programa ser armazenado.

Exemplo: ORG 0100H

Assim o programa objeto ser carregado na memria a partir do endereo

0100H

DB (DEFINE BYTE)

Formato: Pseudo-instruo operando

DB byte

Funo:

O byte do operando carregado diretamente na posio de memria escolhida pelo ORG.

Exemplo:

ORG 0050H

DB 3FH

DB 1AH

Assim os bytes 3FH e 1AH foram armazenados nas posies de memria 0050H e 0051H respectivamente.

END

Formato: Pseudo-instruo

END

Funo:

Indica o final do programa.5.3 USO DO COMPILADOR E DO LINKER (PASSO A PASSO)

OBS: Comandos digitados na linha de prompt do DOS.

1. Com o NE ou EDIT escrever um programa em assembly nomeado obrigatoriamente com a extenso .ASM (criando assim programa fonte).

OBS: No editor de textos deve-se obrigatoriamente reservar as colunas de 1 a 6 para os labels ou tags que representam os endereos do programa, de entrada de loops, chamada de sub-rotinas etc.

2. Com o X8051 (compilador) obter os arquivos com extenso .OBJ (programa objeto) e .LST (listagem) da seguinte forma:X8051 [ENTER]

Listing Destination (..........): D [ENTER]

Generate cross reference [ENTER]

Input file name:.........nome do arquivo.ASM [ENTER]

Output file name: ...... nome do arquivo [ENTER]

3. Com o LINK ligar o arquivo .OBJ, gerando um arquivo .HEX da seguinte

forma:LINK [ENTER]

Input file name: ........ .OBJ [ENTER]

Enter offset for ....... [ENTER]

Input file name: [ENTER]

Output file name: [ENTER]

Options (..........): H [ENTER]4. No simulador:Load

Avocet

.... .HEX

Simulation

F1 (total)

F10 (passo a passo)

5.4 Simulador dos Microcontroladores da famlia 8051****** TELA DE ENTRADA DO SIMULADOR: ******

Deve-se selecionar uma opo em funo da cpu escolhida para o projeto.

****** TELA DE SIMULAO: ******

5.5 Operao bsica do simuladorPara uma rpida ambientao com o programa simulador, apresentada uma seqncia de testes para as principais teclas e/ou comandos:

Visualizao geral da tela, visando reconhecer os seus principais campos (coloridos) e funes correspondentes.

Teclas: ESC

CTRL C

Comandos: Help CommandsDisplay

Simulation

Avocet

Registration

Load Avocet

Quit Exit

setUp Cursor Yes

No

View Memory-map

Symbols Alpha

Registers

Data

Bit

SFR

eXecute

Seqncia para carregar um arquivo no simulador e informaes sobre a simulao:

Load Avocet ... .OBJ Help Simulation Teclas para a simulao

F1: executa o programa inteiro.

F10: executa um programa instruo por instruo.

F9: volta para a condio anterior, aps a execuo de uma instruo.6 Tabela de Instrues completa

Temos na tabela a seguir o set de instrues do 8051, indicando o seu opcode, conforme j explicado, o nmero de bytes da instruo, os perodos de clock necessrios e os flags afetados.

Temos a seguinte codificao na tabela:

@ significa endereado pelo valor de ...;

#Dado indica valor constante de 8 bits;

#Dado 16 indica valor constante de 16 bits;

Direto indica um endereamento de memria de 8 bits (primeiras 256 posies interna ou externas)

rel indica que o endereamento relativo;

? indica depende do resultado ou da operao;

- indica no afetado;

1 indica setado;

0 indica zerado.

OpcodeMnemnicoFunoBytesPulsosFlags afetados

CYAC0V

00NOPNenhuma operao112---

01AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

02LJMP End16Desvia para qualquer posio da memria de programa.324---

03RR ADesloca acumulador direita

112---

04INC ASoma 1 ao acumulador112---

05INC DiretoSoma 1 posio de memria212---

06INC @R0Soma 1 RAM endereada por R0112---

07INC @R1Soma 1 RAM endereada por R1112---

08INC R0Soma 1 ao contedo de R0112---

09INC R1Soma 1 ao contedo de R1112---

0AINC R2Soma 1 ao contedo de R2112---

0BINC R3Soma 1 ao contedo de R3112---

0CINC R4Soma 1 ao contedo de R4112---

0DINC R5Soma 1 ao contedo de R5112---

0EINC R6Soma 1 ao contedo de R6112---

0FINC R7Soma 1 ao contedo de R7112---

10JBC bit, relDesvia se o bit endereado estiver setado e depois zera o bit324---

11ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

12LCALL End16Chama sub-rotina em qualquer posio da memria de programa324---

13RRC ADesloca o acumulador direita atravs do carry

112?--

14DEC ASubtrai 1 do acumulador112---

15DEC DiretoSubtrai 1 da posio de memria212---

16DEC @R0Subtrai 1 da RAM endereada por R0112---

17DEC @R1Subtrai 1 da RAM endereada por R1112---

18DEC R0Subtrai 1 do contedo de R0112---

19DEC R1Subtrai 1 do contedo de R1112---

1ADEC R2Subtrai 1 do contedo de R2112---

1BDEC R3Subtrai 1 do contedo de R3112---

1CDEC R4Subtrai 1 do contedo de R4112---

1DDEC R5Subtrai 1 do contedo de R5112---

1EDEC R6Subtrai 1 do contedo de R6112---

1FDEC R7Subtrai 1 do contedo de R7112---

20JB bit, relDesvio se o bit endereado estiver setado324---

21AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

22RETRetorne da sub-rotina124---

23RL ADesloca o acumulador esquerda

112---

24ADD A, #DadoSoma o dado ao acumulador212???

25ADD A, DiretoSoma o contedo da posio de memria ao acumulador212???

26ADD A, @R0Soma o contedo da RAM endereada por R0 ao acumulador112???

27ADD A, @R1Soma o contedo da RAM endereada por R1 ao acumulador112???

28ADD A, R0Soma o contedo de R0 ao acumulador112???

29ADD A, R1Soma o contedo de R1 ao acumulador112???

2AADD A, R2Soma o contedo de R2 ao acumulador112???

2BADD A, R3Soma o contedo de R3 ao acumulador112???

2CADD A, R4Soma o contedo de R4 ao acumulador112???

2DADD A, R5Soma o contedo de R5 ao acumulador112???

2EADD A, R6Soma o contedo de R6 ao acumulador112???

2FADD A, R7Soma o contedo de R7 ao acumulador112???

30JNB bit, relDesvia se o bit endereado estiver zerado324---

31ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

32RETIRetorne da interrupo124---

33RLC ADesloca o acumulador esquerda atravs do carry

112?--

34ADDC A, #DadoSoma o dado e o carry ao acumulador212???

35ADDC A, DiretoSoma o contedo da posio de memria e o carry ao acumulador212???

36ADDC A, @R0Soma o contedo da RAM endereada por R0 e o carry ao acumulador112???

37ADDC A, @R1Soma o contedo da RAM endereada por R1 e o carry ao acumulador112???

38ADDC A, R0Soma o contedo de R0 e o carry ao acumulador112???

39ADDC A, R1Soma o contedo de R1 e o carry ao acumulador112???

3AADDC A, R2Soma o contedo de R2 e o carry ao acumulador112???

3BADDC A, R3Soma o contedo de R3 e o carry ao acumulador112???

3CADDC A, R4Soma o contedo de R4 e o carry ao acumulador112???

3DADDC A, R5Soma o contedo de R5 e o carry ao acumulador112???

3EADDC A, R6Soma o contedo de R6 e o carry ao acumulador112???

3FADDC A, R7Soma o contedo de R7 e o carry ao acumulador112???

40JC relDesvia se o carry estiver setado224---

41AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

42ORL Direto, AOu entre acumulador e memria; resultado na memria212---

43ORL Direto, #DadoOu entre dado e memria324---

44ORL A, #DadoOu entre dado e acumulador212---

45ORL A, DiretoOu entre memria e acumulador212---

46ORL A, @R0Ou entre a RAM endereada por R0 e o acumulador112---

47ORL A, @R1Ou entre a RAM endereada por R1 e o acumulador112---

48ORL A, R0Ou entre o contedo de R0 e o acumulador112---

49ORL A, R1Ou entre o contedo de R1 e o acumulador112---

4AORL A, R2Ou entre o contedo de R2 e o acumulador112---

4BORL A, R3Ou entre o contedo de R3 e o acumulador112---

4CORL A, R4Ou entre o contedo de R4 e o acumulador112---

4DORL A, R5Ou entre o contedo de R5 e o acumulador112---

4EORL A, R6Ou entre o contedo de R6 e o acumulador112---

4FORL A, R7Ou entre o contedo de R7 e o acumulador112---

50JNC relDesvia se o carry estiver zerado224---

51ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

52ANL Direto, AE entre acumulador e memria; resultado na memria212---

53ANL Direto, #dadoE entre dado e memria324---

54ANL A, #DadoE entre dado e acumulador212---

55ANL A, DiretoE entre memria e acumulador212---

56ANL A, @R0E entre RAM endereada por R0 e acumulador112---

57ANL A, @R1E entre RAM endereada por R1 e acumulador112---

58ANL A, R0E entre o contedo de R0 e o acumulador112---

59ANL A, R1E entre o contedo de R1 e o acumulador112---

5AANL A, R2E entre o contedo de R2 e o acumulador112---

5BANL A, R3E entre o contedo de R3 e o acumulador112---

5CANL A, R4E entre o contedo de R4 e o acumulador112---

5DANL A, R5E entre o contedo de R5 e o acumulador112---

5EANL A, R6E entre o contedo de R6 e o acumulador112---

5FANL A, R7E entre o contedo de R7 e o acumulador112---

60JZ relDesvia se o acumulador for zero224---

61AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

62XRL Direto, AOu exclusivo entre acumulador e memria; resultado na memria212---

63XRL Direto, #DadoOu exclusivo entre dado e memria324---

64XRL A, #DadoOu exclusivo entre dado e acumulador212---

65XRL A, DiretoOu exclusivo entre memria e acumulador212---

66XRL A, @R0Ou exclusivo entre RAM endereada por R0 e acumulador112---

67XRL A, @R1Ou exclusivo entre RAM endereada por R1 e acumulador112---

68XRL A, R0Ou exclusivo entre contedo de R0 e acumulador112---

69XRL A, R1Ou exclusivo entre contedo de R1 e acumulador112---

6AXRL A, R2Ou exclusivo entre contedo de R2 e acumulador112---

6BXRL A, R3Ou exclusivo entre contedo de R3 e acumulador112---

6CXRL A, R4Ou exclusivo entre contedo de R4 e acumulador112---

6DXRL A, R5Ou exclusivo entre contedo de R5 e acumulador112---

6EXRL A, R6Ou exclusivo entre contedo de R6 e acumulador112---

6FXRL A, R7Ou exclusivo entre contedo de R7 e acumulador112---

70JNZ relDesvia se o acumulador no for zero224---

71ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

72ORL C, bitOu entre o bit endereado e o carry224?--

73JMP @A+DPTRDesvia para o endereo obtido da soma do acumulador e do DPTR124---

74MOV A, #DadoMova o dado para o acumulador212---

75MOV Direto, #DadoMova o dado para a memria324---

76MOV @R0, #DadoMova dado para RAM endereada indiretamente por R0212---

77MOV @R1, #DadoMova dado para RAM endereada indiretamente por R1212---

78MOV R0, #DadoMova o dado para o registro R0224---

79MOV R1, #DadoMova o dado para o registro R1224---

7AMOV R2, #DadoMova o dado para o registro R2224---

7BMOV R3, #DadoMova o dado para o registro R3224---

7CMOV R4, #DadoMova o dado para o registro R4224---

7DMOV R5, #DadoMova o dado para o registro R5224---

7EMOV R6, #DadoMova o dado para o registro R6224---

7FMOV R7, #DadoMova o dado para o registro R7224---

80SJMP relDesvio curto relativo224---

81AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

82ANL C, bitE entre o bit endereado e o carry224?--

83MOVC A, @A+PCSoma A + PC obtendo um endereo de 16 bits na memria de programa; carrega o acumulador com esta memria124---

84DIV ABDivide A e B; resultado: A inteiro e B resto1480?0

85MOV Direto1, Direto2Mova o contedo da memria direta2 para a memria direta1324---

86MOV Direto, @R0Mova RAM endereada por R0 para memria224---

87MOV Direto, @R1Mova RAM endereada por R1 para memria224---

88MOV Direto, R0Mova registro R0 para memria224---

89MOV Direto, R1Mova registro R1 para memria224---

8AMOV Direto, R2Mova registro R2 para memria224---

8BMOV Direto, R3Mova registro R3 para memria224---

8CMOV Direto, R4Mova registro R4 para memria224---

8DMOV Direto, R5Mova registro R5 para memria224---

8EMOV Direto, R6Mova registro R6 para memria224---

8FMOV Direto, R7Mova registro R7 para memria224---

90MOV DPTR, #Dado 16Mova dado de 16 bits para o DPTR324---

91ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

92MOV bit, CMova o carry para o bit endereado224---

93MOVC A, @A + DPTRSoma A + DPTR obtendo um endereo de 16 bits na memria de programa; carrega o acumulador com esta memria124---

94SUBB A, #DadoSubtrai o dado e o borrow do acumulador212???

95SUBB A, DiretoSubtrai o contedo da posio de memria e o borrow do acumulador212???

96SUBB A, @R0Subtrai o contedo da RAM endereada por R0 e o borrow do acumulador112???

97SUBB A, @R1Subtrai o contedo da RAM endereada por R1 e o borrow do acumulador112???

98SUBB A, R0Subtrai o contedo de R0 e o borrow do acumulador112???

99SUBB A, R1Subtrai o contedo de R1 e o borrow do acumulador112???

9ASUBB A, R2Subtrai o contedo de R2 e o borrow do acumulador112???

9BSUBB A, R3Subtrai o contedo de R3 e o borrow do acumulador112???

9CSUBB A, R4Subtrai o contedo de R4 e o borrow do acumulador112???

9DSUBB A, R5Subtrai o contedo de R5 e o borrow do acumulador112???

9ESUBB A, R6Subtrai o contedo de R6 e o borrow do acumulador112???

9FSUBB A, R7Subtrai o contedo de R7 e o borrow do acumulador112???

A0ORL C, /bitOu entre o complemento do bit endereado e o carry224?--

A1AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

A2MOV C, bitMova o bit endereado para o carry212?--

A3INC DPTRSoma 1 ao registro DPTR124---

A4MUL ABMultiplica A e B; resultado: BA1480-?

A5

A6MOV @R0, DiretoMova a memria para a RAM endereada por R0224---

A7MOV @R1, DiretoMova a memria para a RAM endereada por R1224---

A8MOV R0, DiretoMova memria para o registro R0224---

A9MOV R1, DiretoMova memria para o registro R1224---

AAMOV R2, DiretoMova memria para o registro R2224---

ABMOV R3, DiretoMova memria para o registro R3224---

ACMOV R4, DiretoMova memria para o registro R4224---

ADMOV R5, DiretoMova memria para o registro R5224---

AEMOV R6, DiretoMova memria para o registro R6224---

AFMOV R7, DiretoMova memria para o registro R7224---

B0ANL C, /bitE entre o complemento do bit endereado e o carry224?--

B1ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

B2CPL bitInverte o estado do bit endereado212---

B3CPL CInverte o estado do carry112?--

B4CJNE A, #Dado relCompara e desvia se o acumulador for diferente do dado324?--

B5CJNE A, Direto relCompara e desvia se o acumulador for diferente da memria endereada324?--

B6CJNE @R0, #Dado relCompara e desvia se a RAM endereada por R0 for diferente do dado324?--

B7CJNE @R1, #Dado relCompara e desvia se a RAM endereada por R1 for diferente do dado324?--

B8CJNE R0, #Dado relCompara e desvia se o registro R0 for diferente do dado324?--

B9CJNE R1, #Dado relCompara e desvia se o registro R1 for diferente do dado324?--

BACJNE R2, #Dado relCompara e desvia se o registro R2 for diferente do dado324?--

BBCJNE R3, #Dado relCompara e desvia se o registro R3 for diferente do dado324?--

BCCJNE R4, #Dado relCompara e desvia se o registro R4 for diferente do dado324?--

BDCJNE R5, #Dado relCompara e desvia se o registro R5 for diferente do dado324?--

BECJNE R6, #Dado relCompara e desvia se o registro R6 for diferente do dado324?--

BFCJNE R7, #Dado relCompara e desvia se o registro R7 for diferente do dado324?--

C0PUSH DiretoIncrementa o SP e ento coloca a memria no Stack224---

C1AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

C2CLR bitZera o bit endereado212---

C3CLR CZera o carry1120--

C4SWAP ATroca os nibbles do acumulador. Equivale a 4 RR A ou 4 RL A

112---

C5XCH A, DiretoTroca memria com o acumulador212---

C6XCH A, @R0Troca a RAM indiretamente endereada por R0 com o acumulador112---

C7XCH A, @R1Troca a RAM indiretamente endereada por R1 com o acumulador112---

C8XCH A, R0Troca entre si o contedo do acumulador e o registro R0112---

C9XCH A, R1Troca entre si o contedo do acumulador e o registro R1112---

CAXCH A, R2Troca entre si o contedo do acumulador e o registro R2112---

CBXCH A, R3Troca entre si o contedo do acumulador e o registro R3112---

CCXCH A, R4Troca entre si o contedo do acumulador e o registro R4112---

CDXCH A, R5Troca entre si o contedo do acumulador e o registro R5112---

CEXCH A, R6Troca entre si o contedo do acumulador e o registro R6112---

CFXCH A, R7Troca entre si o contedo do acumulador e o registro R7112---

D0POP DiretoRetira dado do stack e coloca na memria, depois decrementa SP224---

D1ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

D2SETB bitSeta o bit endereado212---

D3SETB CSeta o carry1121--

D4DA AAjuste decimal do acumulador112??-

D5DJNZ Direto, relDecrementa a memria e desvia se for diferente de zero324---

D6XCHD A, @R0Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R0 entre si112---

D7XCHD A, @R1Troca nibble menos significativo do acumulador com a RAM endereada indiretamente por R1 entre si112---

D8DJNZ R0, relDecrementa o registro R0 e desvia se for diferente de zero224---

D9DJNZ R1, relDecrementa o registro R1 e desvia se for diferente de zero224---

DADJNZ R2, relDecrementa o registro R2 e desvia se for diferente de zero224---

DBDJNZ R3, relDecrementa o registro R3 e desvia se for diferente de zero224---

DCDJNZ R4, relDecrementa o registro R4 e desvia se for diferente de zero224---

DDDJNZ R5, relDecrementa o registro R5 e desvia se for diferente de zero224---

DEDJNZ R6, relDecrementa o registro R6 e desvia se for diferente de zero224---

DFDJNZ R7, relDecrementa o registro R7 e desvia se for diferente de zero224---

E0MOVX A, @DPTRMova RAM externa indiretamente endereada pelo DPTR (16 bits) para o acumulador124---

E1AJMP End11Desvia para outro endereo numa fai-xa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

E2MOVX A, @R0Mova RAM endereada indiretamente por R0 (8 bits) para o acumulador124---

E3MOVX A, @R1Mova RAM endereada indiretamente por R1 (8 bits) para o acumulador124---

E4CLR AFaz o acumulador = zero112---

E5MOV A, DiretoMova memria para o acumulador212---

E6MOV A, @R0Mova RAM endereada indiretamente por R0 para o acumulador112---

E7MOV A, @R1Mova RAM endereada indiretamente por R1 para o acumulador112---

E8MOV A, R0Mova registro R0 para o acumulador112---

E9MOV A, R1Mova registro R1 para o acumulador112---

EAMOV A, R2Mova registro R2 para o acumulador112---

EBMOV A, R3Mova registro R3 para o acumulador112---

ECMOV A, R4Mova registro R4 para o acumulador112---

EDMOV A, R5Mova registro R5 para o acumulador112---

EEMOV A, R6Mova registro R6 para o acumulador112---

EFMOV A, R7Mova registro R7 para o acumulador112---

F0MOVX @DPTR, AMova o acumulador para a RAM externa indiretamente endereada pelo DPTR (16 bits)124---

F1ACALL End11Chama sub-rotina numa faixa de 2Kbytes da atual posio (3 primeiros bits MSB do OpCode so os bits MSB do endereo)224---

F2MOVX @R0, AMova acumulador para RAM externa indiretamente endereada por R0 (endereo 8