You are on page 1of 101

Microcontrolador 8051 Hardware

Curso Completo Hardware Software - Interfaceamento

1INTRODUO
Na Dcada de 70 comearam a ser utilizados microprocessadores em
microcomputadores para uma maior eficincia no processamento de dados. O
microprocessador Intel foi um dos precursores e, a partir da, houve uma preocupao
em melhorar cada vez mais o sistema de processamento de dados atravs desses
componentes. Baseado na arquitetura de um microprocessador e seus perifricos, foi
criado um componente que (fisicamente em uma unidade) comportasse todo um sistema
que equivalesse a um microprocessador e seus perifricos; assim surgiu o
microcontrolador.

1.1Unidade Central de Processamento (CPU)


A unidade central de processamento controla todas as funes realizadas pelo
sistema. A CPU de qualquer sistema de computador contm os seguintes grupos de
unidades
Funcionais:

Registradores e contadores

Os registradores e contadores so unidades funcionais usadas para


armazenamento temporrio de bits dentro da CPU.

Unidade lgica e aritmtica

A unidade lgica e aritmtica a unidade funcional da CPU que executa


operaes lgicas e aritmticas entre palavras binrias, gerando uma outra palavra na
sada.

Unidade de controle e sincronizao

A unidade de controle e sincronizao coordena e controla todas as unidades


funcionais em uma seqncia lgica e sincronizada.

1.2Processamento
O processador ou unidade central de processamento (CPU) a parte do sistema
que faz o processamento das informaes para que as instrues sejam executadas; as
instrues devem estar armazenadas na memria de programa em seqncia, formando
assim o programa.

A CPU possui um registrador chamado de CONTADOR DE PROGRAMA (PC)


que contm o endereo da prxima instruo que deve ser executada. Toda vez que uma
instruo retirada da memria pela unidade central de processamento,
automaticamente o contador de programa incrementado para que, aps o
processamento desta instruo, quando a CPU for buscar a prxima instruo, basta usar
o endereo contido no contador de programa.
Toda vez que a CPU ligada ou resetada, automaticamente o seu contador de
programa zerado, desta forma, a primeira tarefa que a CPU ir realizar a execuo da
instruo contida na posio de memria de endereo 0000. Cada instruo possui
duas fases distintas: o ciclo de busca e o ciclo de execuo. Durante o ciclo de uma
instruo a CPU faz com que o contedo do contador de programa seja colocado no
barramento de endereos, endereando, desta maneira, a posio de memria que
contm a instruo que deve ser executada.

1.3Unidades de Entrada e Sada (I/O)


As unidades de entrada/sada so os meios pelos quais o usurio se comunica
com o sistema. Essas unidades possuem interfaces que permitem a conexo com
dispositivos chamados de perifricos, tais como teclado, LCDs, etc.

1.4Arquitetura
A performance do microcontrolador depende da sua arquitetura interna, ou seja,
do modo em que o microcontrolador foi projetado tanto para o hardware como para
software. No hardware apresentaremos a arquitetura Von-Neumann, na qual se refere o
software CISC.

Arquitetura Von-Neumann

Na arquitetura Von-Neumann, os barramentos de dados e endereos so


compartilhados entre memrias de programas e memrias de dados na comunicao
com a CPU. Nesse tipo de arquitetura, quando a CPU est acessando a memria de
programa no pode acessar a memria de dados, porque usa os mesmos barramentos
para as duas memrias.

CISC (Complex Instruction Set Computer)

CISC: Computador com Set de Instruo mais Complexo, quanto maior a


complexidade da instruo que deve ser executada, mais espao ela ocupa no chip.
Desse modo, chegar um momento que passaremos e ter um set de instrues to
grande que comear a afetar o desempenho, dificultando a possibilidade de
implementar outras funes importantes. Ter um complexo (grande) set de instrues
CISC nem sempre interessante para um bom desempenho do processador.
Numa anlise feita pelo laboratrio da IBM sobre como estavam sendo usados
os diversos tipos de instrues, concluram que num microprocessador que usava um set
de instrues de, por exemplo, 200 instrues, a maior parte do processamento era feita
apenas com umas 10 instrues.

Uma grande parte das instrues era pouco usada, s vezes at uma nica vez
em um longo programa, de modo que elas poderiam ser implementadas pelas instrues
bsicas mais usadas.
Da o aparecimento da nova arquitetura com o set de instrues reduzido
RISC
(caracterstico dos microcontroladores da famlia PIC).

1.5Memrias
Memrias so os dispositivos que armazenam informaes e so usadas em
todos os sistemas microcontrolados. Existem vrios tipos de memrias que podem ser
classificadas por vrios itens diferentes.

1.5.1Acesso
As memrias armazenam informaes em lugares que se denominam
localidade de memria. Cada localidade de memria guarda um conjunto de bits e
tem um endereo. No acesso desses endereos podemos analisar:
-O tempo de acesso: o tempo que a memria necessita para que sejam escritos
ou lidos os dados em suas localidades
-Acesso seqencial: nas memrias que tem acesso seqencial, para acessar um
endereo de uma certa localidade, precisa-se passar por endereos intermedirios (as
memrias mais comuns desse tipo so as que utilizam fita magntica);
-Acesso aleatrio: as memrias que utilizam esse tipo de acesso so as
memrias que permitem que seja acessado qualquer dado em qualquer endereo sem a
necessidade de ter que passar por outros endereos intermedirios.

1.5.2Volatilidade
-Memrias volteis: so aquelas que perdem as informaes quando cortada
sua alimentao. So memrias que geralmente usam como elemento de memria o
Flip-Flop.
-Memrias no volteis: so memrias que mesmo desligando-se sua
alimentao, no perdem as informaes armazenadas. Dentre essas se destacam as
magnticas e as eletrnicas ROM, PROM, EPROM, EEPROM, e outras.

1.5.3Memrias de escrita/leitura ou somente leitura


-Escrita/Leitura: so memrias que podem ser acessadas pela CPU tanto para
leitura quanto para escrita; elas so usadas para armazenar dados que sero utilizados
durante a execuo do programa (memrias RAM, EEPROM)

-Somente Leitura: so a memrias que armazenam o programa, ou seja, so as


memrias que s sero lidas pela CPU e que j vm gravadas para o sistema (memrias
ROM, PROM, etc).

1.5.4Tipos de armazenamento
-Estticas: memrias estticas so aquelas nas quais as informaes
permanecem armazenadas enquanto no houver escrita ou no faltar energia.
-Dinmicas: memrias dinmicas so memrias que perdem informaes
armazenadas mesmo com alimentao. Na RAM dinmica (ou DRAM) isso acontece
porque cada clula tem um transistor MOSFET e um capacitor que armazena um dado
(1 bit).

1.5.5Tipos de Memrias
Veremos a seguir, alguns tipos de memrias existentes no mercado e que so
muito utilizadas:

Memrias RAM (Random Access Memory)

Essas memrias so de acesso aleatrio, que podem ser acessadas a qualquer


momento e em qualquer endereo. Elas podem ser estticas ou dinmicas e tambm
podem ser gravadas pelo sistema com a tenso de 5v. So memrias consideradas
volteis.

Memrias ROM (Read Only Memory)


Essas memrias so utilizadas somente para a leitura.

Memrias PROM (programable Read Only Memory)

Essas memrias so utilizadas no sistema somente para leitura; geralmente


usadas como memrias de programa, s podem ser gravadas com gravadores
especficos e s uma vez. So a memrias no Volteis.

Memrias EPROM( Erasable Programmable Read Only Memory)

Essas memrias so utilizadas no sistema somente para leitura, tambm


empregadas como memrias de programa e s podem ser gravadas com gravadores
especficos. Podem ser apagadas por raios ultravioleta e regravadas por muitas vezes.
So chamadas memrias no volteis.

Memrias EEPROM ou E2PROM (Electrically Erasable Programmable Read


Only Memory)

Essas memrias podem ser usadas no sistema tanto para leitura como para
escrita. Podem ser gravadas com programadores ou pelo sistema; so apagadas
eletricamente e regravadas por muitas vezes; so consideradas memrias no volteis.

Memrias PEROM (programable Read Only Memory)

Uma linha de memrias programveis apenas para leitura, de 3v e 5v, apenas


dentro do sistema. Fabricadas com avanada tecnologia CMOS, no volteis, suas
caractersticas incluem:
-Operao de leitura e programao em apenas 3v e 5v;
-Proteo de dados de software e hardware;
-Operao de programao por setor
-1000 ciclos de programa;
-Reteno de dados de 10 anos;
-Baixa dissipao de potncia;
-Tempo de ciclo de programa rpido;
-Deteco de fim de programa.

Memrias FLASH

A memria FLASH um dispositivo de armazenamento confivel, no voltil,


de boa relao custo/benefcio e que possui caractersticas de leitura da EPROM,
EEPROM e SRAM, porm quando se aplica 12v sobre o dispositivo, este pode ser
gravado com base em bytes. No caso da memria FLASH 5v estes dispositivos foram
projetados para serem programados dentro do sistema com fornecimento padro de 5V.
Em programadores de EPROM convencionais no h necessidade de 12vpp, nem para
programao, nem para apagamento. composta de uma arquitetura de apagamento de
setor (qualquer combinao pode ser apagada simultaneamente) e 100.000 ciclos de
apagamento/programao.

Memria FLASHFILE

A memria FLASHFILE, simetricamente bloqueada, da intel, oferece uma


soluo no voltil com leitura e programao de mais alta densidade para
armazenamento em massa. O armazenamento de aplicao de software e a operao
com cdigo de sistema em RFAs (Residential Flash Arrays) proporcionam execuo
instantnea , rpida e local (in Place). RFAs so protegidas tambm contra
envelhecimento do software, j que este pode ser atualizado no sistema. O software
RFA prolonga a vida da bateria e aumenta a confiabilidade do sistema atravs da
reduo do nmero de acessos ao disk-drive. 100.000 ciclos de
apagamento/programao.

Memrias Seriais

Estes dispositivos so de tamanho reduzido podendo ser ligados a um


barramento serial I2C (Inter-Integrated Circuit Bus) ou SPI (Serial Peripheral Interface)

junto com outros dispositivos seriais, com muitas vantagens em relao s memrias
paralelas.

2ESTRUTURA BSICA DA FAMLIA


8051
2.1A Famlia MCS-51
A famlia Intel MCS-51 dez vezes mais rpida que sua antecessora, a famlia
MCS- 48. A MCS-51 contm vrios componentes similares, cada um indicado para um
tipo de sistema especfico. Os diferentes membros da famlia MCS-51 esto listados na
tabela 2.1. O 8051 o componente base dessa famlia, tendo dois similares prximos, o
8751 e o 8031, e uma verso com mais memria, o 8052. Toda a verso contm a
mesma CPU e instrues. O 8051 possui 4KB de ROM, a qual gravada no processo de
fabricao do chip. J no 8751, a ROM substituda por uma EPROM, que pode ser
programada e apagada. O 8031 indicado para sistemas expandidos e usa memria de
programa externa. Por ltimo, pode-se destacar o 8052, que possui o dobro de memria
ROM e RAM do 8051.
Tabela 2.1: Membros da famlia 8051

MEMBRO

TECNOLOGIA

MEM. PROGRAMA

MEM. DE
DADOS (RAM)

8051

HMOS

4K ROM

128 bytes

8031

HMOS

No tem

128 bytes

8751H

HMOS I

4K EPROM

128 bytes

80C51

CHMOS

4K ROM

128 bytes

80C31

CHMOS

No tem

128 bytes

8052

HMOS

8K ROM

256 bytes

8032

HMOS

No tem

256 bytes

AT89C2051

CMOS

2K FLASH

128 bytes

AT89C51

CMOS

4K-FLASH

128 bytes

AT89C52

CMOS

8K-FLASH

256 bytes

Nesta apostila, no se pretende estabelecer os critrios usados na escolha deste


ou daquele componente da famlia MCS-51. Pretende-se apenas estudar a arquitetura
interna do chip 8051 e seus aspectos de programao, que so comuns a todos os
membros da famlia MCS-51. Os microcontroladores MCS-51 so tambm fornecidos
por outros fabricantes, alm da Intel, e todos so totalmente compatveis entre si.

2.2Recursos Gerais do 8051


A figura 2.1 mostra o diagrama de blocos do ncleo do 8051, enquanto a figura
2.2 mostra o diagrama de blocos detalhado do 8051.

O microcontrolador 8051 possui:

CPU de 8 bits otimizada para aplicaes de controle;

32 linhas de E/S bidirecionais e individualmente endereveis;

4 Kbytes de memria de programa interna;

128 bytes de RAM interna, destinada a dados;

64 Kbytes endereveis de memria externa, de programa ou dados;

2 temporizadores/contadores de 16 bits cada um;

Porta serial (UART) full-duplex, para comunicao com outro processador;

5 estruturas (fontes) de solicitao de interrupo, com 2 nveis de prioridade;

Oscilador de clock interno;

Freqncia de clock entre 1,2 MHz e 12 MHz.

Figura 2.1 Diagrama de blocos do 8051.


O 8051 um microcontrolador de 8 bits, pois tanto a ROM, RAM, ULA e via de
dados manipulam informao de 8 bits. O seu conjunto de instrues formado por 111
instrues, onde se incluem as de transferncia de dados, aritmtica, lgica, desvio de
fluxo de programa e booleanas. Estas so instrues de manipulao de variveis de um
bit do 8051 (lgica de bit nico).

Figura 2.2 - Diagrama de blocos detalhado do 8051.

2.3Principais Vantagens do Microcontrolador 8051

Popular: prontamente disponvel e amplo suporte. Gama completa de produtos


de suporte esto disponveis de graa e comercialmente, proporcionando
economia real em termos de ferramentas de treinamento e suporte para software.

Rpido e eficaz: a arquitetura se correlaciona de perto com o problema sendo


solucionado (sistemas de controle). Instrues especializadas significam que
menos bytes precisam ser buscados e menos jumps condicionais so
processados.

Baixo custo: alto nvel de integrao do sistema em um nico componente.


Poucos componentes a mais so necessrios para se criar um sistema que
funcione.

Compatibilidade: opcodes e cdigo binrio so os mesmos para todas as


variaes do 8051, diferente de outras famlias de microcontroladores.

Multi Sourced: mais de 12 fabricantes, centenas de variedades.

Aperfeioamentos constantes: melhorias na manufatura aumentam a


velocidade e reduzem o consumo de potncia. H ainda verses de 16 bits, de
diversos fabricantes.

2.4Linguagens de Programao para o 8051


As linguagens mais utilizadas na programao da famlia MCS-51 so C,
BASIC e Assembly. Especificamente para microcontroladores desta famlia, no tem
surgido muito texto de apoio sobre linguagens de programao. Todos os livros sobre
linguagem C que aparecem no mercado vm repletos de exemplos clssicos de
processamento de dados, os quais so, na sua grande maioria, imprprios para
microcontroladores.

2.4.1Linguagem C
C uma linguagem que surgiu com o sistema operacional Unix. Ela
estruturada, produz um cdigo compacto e permite atingir alguns detalhes de controle
da mquina sem recorrer ao Assembly. H seis fabricantes que oferecem compiladores
C para microcontroladores da famlia MCS-51. Destes compiladores, o Archimedes e o
Franklin esto no topo da lista. Aps estes, vm os da BTO/Tasking e Avocet. Isto para
mencionar apenas os quatro mais conhecidos.

2.4.2Linguagem Assembly
A linguagem Assembly do 8051 semelhante a outras linguagens Assembly de
microprocessadores. O conjunto de instrues dispe de um maior nmero de operaes
para manipular bits que os microprocessadores usuais, mas o fato de ter diferentes
regies de memria torna as coisas mais complicadas. As instrues de movimentao
de dados, lgicas e desvio de execuo so geralmente similares as da maioria dos
outros microprocessadores. Desta forma, para quem j trabalhou com linguagem
Assembly de microprocessador, o processo o mesmo, com suas vantagens e
desvantagens.

2.4.3Linguagem Basic
Basic atende bem ao seu propsito: ser uma linguagem de introduo
programao. Ela muito fcil de se usar. O uso de uma nova varivel faz com que esta
varivel persista pelo resto do programa. Erros podem ser detectados ao final de cada
linha, ao invs de mostr-los somente quando o programa termina de ser traduzido.
Porm, existem duas razes pelas quais o Basic no conveniente em sistemas
dedicados. Em primeiro lugar, como ele interpretado, ele naturalmente lento. Cada
linha deve ser convertida para o cdigo de mquina toda vez que for executada. O
processo de interpretao faz com que seja perdido muito tempo de processamento, que

deveria ser usada para a aplicao propriamente dita. Existem verses do Basic
compilado (QuickBasic, por exemplo), que evitam esse problema. Entretanto, no h
nenhuma verso do Basic compilado para o 8051.
Em segundo lugar, pode-se destacar a inconveniente simplificao no uso de
variveis.Todas as variveis so, usualmente, implementadas como ponto-flutuante. Isto
resulta na necessidade de se executar rotinas complexas, mesmo para valores tipo
inteiro. Isto torna os programas lentos e grandes. Pode-se dizer que o Basic, no contexto
de sistemas dedicados, deve ser indicado para aplicaes onde a facilidade de
programao seja mais importante que a eficincia ou velocidade.

3ORGANIZAO DE MEMRIA EM DISPOSITIVOS MCS 51

3.1Separao Lgica de Memria de Programa e de


Dados
Toda a famlia MCS-51 possui espaos de endereamento separados para
programas e dados, isto , uma memria de programa e uma memria de dados com
endereos independentes (configurao Harvard). Essa separao permite que a
memria de dados seja acessada por endereos de 8 bits, que podem ser mais
rapidamente manipulados pela CPU, tambm de 8 bits. Entretanto, endereos de 16 bits
tambm podem ser utilizados para a memria de dados, podendo ser gerados atravs do
registrador DPTR (Data Pointer Register).
O preo a pagar pela facilidade de manipulao dos endereos, dada pela
separao lgica das memrias, o de um aumento de complexidade no conjunto de
instrues; historicamente, esta separao presente na maioria dos dispositivos INTEL
foi a responsvel pela criao da arquitetura CISC, que vem h tempos sendo superada
pela maior elegncia de solues apresentada pela arquitetura RISC, que j est sendo
utilizada at pela prpria INTEL nos seus dispositivos mais recentes.

3.2Memria de Programa
A memria de programa composta por duas reas distintas: 4KB de ROM
interna e at mais 60KB externos. Entretanto, pode-se inibir os 4KB de ROM internos
atravs do pino 31 (EA - External Access), ficando a memria externa com todo o
espao de endereamento. A memria de programa pode ser apenas lida, no escrita.
Existem at 64K de memria de programa acessveis, sendo que os primeiros 4K so
disponveis internamente no 8051, e selecionveis atravs do sinal EA .
Os primeiros 4 Kbytes da memria de programas podem ser endereados interna
ou externamente. Se o pino EA estiver em nvel alto, esses bytes so acessados no chip.
Levando o pino EA a nvel baixo, o acesso a tais bytes feito na memria externa,
como mostrado na figura 3.
A Figura 3.2 mostra a configurao de hardware para a execuo de programas
externos; nesta configurao, duas das 4 portas de E/S disponveis (Portas 0 e 2) so
utilizadas com funo de barramento de endereo/dados, ou seja, essas 16 linhas de E/S
so dedicadas para desempenhar funo de bus durante buscas na memria de
programas. Isto se deve ao fato de que os endereos da memria de programa so
sempre de 16 bits, mesmo que o tamanho real desta seja menor que 64K bytes.
A porta 0 emite o byte menos significativo do contador de programas (PCL).
Nesse momento o sinal ALE (Address Latch Enable) funciona como clock para o latch,
armazenando o PCL. As linhas da Porta 0 entram em estado de alta impedncia.
Enquanto isso, a porta 2 emite o byte mais significativo do contador de programas
(PCH). O latch e a porta 2 formam portanto o endereo necessrio ao acesso da ROM

externa. O dispositivo emite o sinal PSEN (Program Store Enable) para ler a memria
de programa externa. Este sinal, em nvel baixo, habilita a ROM leitura. A porta 0
entra no modo entrada e a instruo da ROM do endereo correspondente enviada a
essa porta.

Figura 3.1 Estrutura de memria da famlia MCS-51.

Figura 3.2 Configurao de hardware para o uso de memria de programa


externa.
Evidentemente o ciclo de busca do 8051 projetado de forma que os primeiros
4096 endereos de memria de programa sejam acessados internamente. Da em diante,
o ciclo de busca gera os sinais de controle necessrios para acessar a memria de
programa externa.
Certas posies na memria de programa esto reservadas para situaes
especficas. Uma destas situaes a condio de reset, que fora o fluxo de execuo
para o endereo 0000H. Normalmente, usa-se as trs primeiras posies para efetuar o
desvio para a rotina de inicializao.
A seguir, esto alocadas as posies alvos de interrupes, ou seja, os endereos
de 0003H a 0023H so reservados para cinco rotinas de tratamento de interrupo. Em
cada uma dessas posies, deve-se armazenar a sub-rotina que atende respectiva
interrupo quando requisitada por um dispositivo. O espaamento entre essas posies
fixas de 8 bytes. Na maioria das aplicaes de controle, essas rotinas cabem
inteiramente nesse intervalo, de outra forma faz-se necessrio um jump nessas posies.
A figura 3.3 mostra um mapa da parte inferior da memria de programa dos dispositivos
MCS-51, com a localizao dos vetores de interrupo. Aps o reset, a CPU inicia a
execuo da posio 0000H.

Figura 3.3 Mapa da parte inferior da memria de programa.

3.3Memria de Dados
A memria de dados ocupa, como j foi dito, um espao de endereamento
separado da memria de programa, e at 64K bytes de RAM externa podem ser
acessados neste espao. Os 64 Kbytes de memria de dados externa so acessados pelo
dispositivo atravs dos sinais RD/WR. Os sinais PSEN e RD podem ser injetados na

entrada de uma porta AND e a sada dessa porta utilizada como sinal de requisio de
leitura a uma memria externa de dados e programas convencional.
A memria de dados, como mostra a figura 3.4, composta por uma rea interna
formada por 128 bytes, mais os registros de funo especial, e por at 64Kb de memria
externa.

Figura 3.4: Composio da memria de dados do 8051


De outra forma, pode-se visualizar a memria do 8051 como sendo parte interna
e parte externa. A memria interna constituda pelos 4 Kb de ROM, pelos 128 bytes de
RAM e pelos registros da CPU. J a memria externa formada por at 60 Kb (ou at
64 Kb, caso o pino EA seja aterrado) de memria de programa, e por at 64 Kb de
memria de dados. Caso o espao de memria interna seja suficiente para determinada
aplicao, o sistema pode trabalhar sem a memria externa.
Os 64 Kb de memria externa de dados so acessados automaticamente quando
a instruo MOVX (Move eXternal) for executada. J os 128 bytes da RAM interna
podem ser acessados por diferentes instrues, atravs de endereamento direto ou
indireto. Esta RAM interna pode ser subdividida em trs segmentos que so:
1. Banco de Registros: so quatro bancos de registros, numerados de 0 a 3,
ocupando as posies de 0 at 1FH (32 bytes no total). Cada banco contm oito
registros de um byte cada, numerados de 0 a 7. Por default o banco corrente
o 0, entretanto pode-se selecion-lo por software, atravs de dois flags, RS0 e
RS1, que fazem parte do registrador PSW, conforme a tabela 3.1.
Tabela 3.1 - Mapeamento dos bancos de registros

BANCO

RS1

RS0

REGISTRADORES

POSIO DE
MEMRIA

R7,R6, . . .,R0

1FH,1EH, . . .,18
H

R7,R6, . . .,R0

17H,16H, . . .,10H

R7,R6, . . .,R0

0FH,0EH, . . .,08
H

R7,R6, . . .,R0

07H,06H, . . .,00H

2. rea de bits Endereveis: este segmento composto por 16 bytes, ocupando as


posies de 20H a 2FH. Pode-se acessar os dados contidos neste segmento de
duas formas: individualmente cada um dos 128 bits do segmento; ou em grupos
de 8 bits, ou seja, byte a byte. A CPU dispe de instrues especficas para o
manuseio de bits, onde se designa diretamente o endereo do bit desejado.
3. rea de Propsito Geral: os bytes localizados nos endereos de 30H at 7FH
formam uma rea de propsito geral, porm parte deste segmento usado para
acomodar a pilha do sistema.
A figura 3.5 mostra a configurao de hardware para o acesso a at 2K de RAM
externa. Neste caso a CPU est executando a partir da ROM interna. Note o modo de
endereamento paginado a que esta configurao se prope, com o que apenas 11 linhas
de E/S so utilizadas como barramento. O endereo pode ter largura de 1 ou 2 bytes.
Quando utilizando 1 byte, uma ou mais outras linhas de E/S podem ser utilizadas, como
mostrado na figura 3.5. Quando utilizando 2 bytes de largura, o byte mais significativo
enviado pela porta 2.

Figura 3.5 Configurao de hardware para o uso de memria de dados


externa.
O mapeamento da memria de dados interna mostrado na figura 3.6. Ela
dividida em trs blocos, referidos como 128-Inferior (Lower 128), 128-Superior (Upper
128) e espao SFR (Special Function Register). Os registradores mapeados em memria
ocupam os primeiros 32 bytes do bloco Inferior, agrupados em quatro bancos de 8
registradores (R0 a R7). Dois bits na Palavra de Status de Programa (PSW, Program
Status Word) selecionam um dos bancos. Isto permite maior eficincia no espao do
cdigo, uma vez que instrues que se referem a registradores so menores do que
instrues de endereamento direto.

Figura 3.6 Mapa da memria de dados interna.


Os 16 bytes acima do banco de registradores formam o espao de bits
endereveis. O conjunto de instrues do 8051 inclui uma grande quantidade de
instrues de um nico bit, e os 128 bits dessa rea podem ser acessados por essas
instrues. O bloco 128-Inferior ocupa o intervalo de endereos de 00H at 7FH, e seu
mapeamento visto na Figura 3.7.

Figura 3.7 Mapeamento do bloco 128-Inferior.


Os bancos so selecionveis pelas instrues atravs de dois bits do registrador
PSW. Os prximos 16 bytes acima dos bancos de registradores formam um espao de

memria enderevel-por-bit. Todos os bytes no 128-inferior podem ser acessados por


endereamento direto ou indireto; j o 128-Superior s pode ser acessado por
endereamento indireto, e ficam disponveis como pilha nos dispositivos com 256 bytes
de RAM. Mas o bloco 128-Superior no est implementado no 8051.

Figura 3.8 Estrutura simplificada do espao SFR.


A Figura 3.8 mostra a estrutura simplificada do espao SFR; este inclui buffers
(latches) de E/S, temporizadores, controles de perifricos, etc. Tais registradores s
podem ser acessados por endereamento direto, sendo que 16 endereos so
simultaneamente endereados-por-bit e endereados-por-byte. O bloco SFR ocupa o
espao de endereamento 80H a FFH. Tais registradores podem ser acessados
exclusivamente por acesso direto.
Todos os membros da famlia 8051 executam o mesmo conjunto de instrues
classificadas como: aritmticas, lgicas, transferncia de controle, transferncia de
dados e booleanas. Dispem de uma variedade de modos de endereamento RAM
interna. Suporte a variveis de um bit tambm disponvel, permitindo manipulao
direta em sistemas de controle e lgica que requerem processamento booleano.

3.4Descrio dos Registros de Funo Especial


Os registros mapeados em memria incluem os latches das portas de E/S,
temporizadores/contadores, canal serial, registros ligados unidade de lgica e
aritmtica (ULA), registros apontadores, registros usados no sistema de interrupo,
alm de outros registros de funo especial. importante ressaltar que, com exceo do
contador de programa, todos os outros registros so mapeados em memria interna de
dados.
O 8051 possui 20 SFRs de 8 bits cada, mapeados em memria interna, e um
contador de programa (PC) de 16 bits. Na tabela 3.2 esto relacionados os 20 SFRs com

seus mnemnicos, nomes e endereos. Nesta tabela tambm esto destacados os


registros que podem ser endereados bit a bit.
Tabela 3.2: Registros de funo especial
MNEMNICO

NOME

ENDEREO

*ACC

Accumulator

0E0H

*B

Register B

0F0H

*PSW

Program Status Word

0D0H

SP

Stack Pointer

81H

DPTR

Data PointerRegister

DPL

Data Pointer Low

82H

DPH

Data Pointer High

83H

*P0

Port 0

80H

*P1

Port 1

90H

*P2

Port 2

0A0H

*P3

Port 3

0B0H

*IP

Interrupt Priority

0B8H

*IE

Interrupt Enable

0A8H

TMOD

Timer Mode

89H

*TCON

Timer/Counter Control

88H

TH0

Timer/Counter 0 high

8CH

TL0

Timer/Counter 0 low

8AH

TH1

Timer/Counter 1 high

8DH

TL1

Timer/Counter 1 low

8BH

*SCON

Serial Control

98H

SBUF

Serial Buffer

99H

PCON

Power Control

87H

Ser feita agora uma descrio funcional dos registros do 8051.

Contador de Programa (PC): os 16 bits deste registro controlam a seqncia na


qual as instrues armazenadas na memria de programa sero executadas. Este
registro manipulado pelas instrues de transferncia de fluxo (desvio), ou
seqencialmente incrementado, seguindo o fluxo normal de execuo.

Registro A ou ACC: o tradicional acumulador, fortemente ligado ULA.

Registro B: um acumulador auxiliar, usado principalmente nas instrues de


multiplicao e diviso.

Registro de flags (sinalizadores da CPU): os flags do 8051 fazem parte do


registrador Program Status Word (PSW). Este byte, localizado no espao SFR,
contm alguns bits de status que refletem o estado de manipulao da
informao e controle de operaes da CPU. Mostrado na figura 3.9, o PSW
contm os flags Carry (CY), Auxiliary Carry (AC) para operaes BCD,
Overflow (OV), Paridade (P), dois bits de seleo de banco de registradores
(RS0 e RS1) e dois bits de status definidos pelo usurio.

O bit de paridade reflete o nmero de 1s no acumulador; se P = 1, este


nmero mpar e, se P = 0, o contedo par. Ou seja, o nmero de 1s no acumulador
mais P sempre par.
O bit de Carry, alm de sua funo tradicional em operaes aritmticas,
tambm tem funo de acumulador em algumas operaes booleanas.

Figura 3.9 Flags do registrador PSW.

Apontador de Pilha (SP): como o prprio nome sugere, o registro que aponta
para o topo da pilha. manipulado pelas instrues de chamada e retorno de

sub-rotinas, alm de instrues especficas para insero ou retirada de dados da


pilha. Por conter apenas 8 bits, este registro enderea apenas a memria RAM
interna. Desta forma, a pilha do sistema fica limitada a esta rea.

Apontador de Dados (DPTR): usado basicamente para enderear contedos


dentro de uma memria externa (de dados ou programa), atravs da instruo
MOVX. Pode ser dividido em dois registros de 8 bits (DPL e DPH).

Portas - P0, P1, P2 e P3: so 4 registros usados para realizar as operaes de


E/S, compondo 32 linhas de interface com o mundo exterior.

Controle de Prioridade de Interrupo (IP): contm os bits de controle que


indicam a prioridade das interrupes.

Controle de Habilitao de Interrupo (IE): este registro controla as mscaras


de habilitao global de interrupes e de cada interrupo em particular.

Registros TCON e TMOD: so registros usados para programar os


temporizadores/contadores (T/C).

Registros TH1, TL1, TH0 e TL0: so os registros de dados dos T/Cs. Estes 4
registros podem ser lidos ou escritos, facilitando o acesso aos T/C.

Registro de Controle da Serial (SCON): serve para selecionar o modo de


operao da interface serial.

Buffers de dados da porta serial (SBUF): so dois registros mapeados no


mesmo endereo, entretanto um de leitura (recepo de dados) e o outro de
escrita (transmisso de dados).

3.5Modos de Endereamento
Para acessar um dado ou operando, as instrues dos microcontroladores MCS51 contam com seis modos de endereamento:

Endereamento Direto

Endereamento Indireto

Instrues de Registradores

Instrues de Registradores Especficos

Endereamento Imediato

Endereamento Indexado

Endereamento Direto: nesse modo, o endereo do operando especificado por


um campo de 8 bits na instruo. Somente a RAM de dados interna e a regio
SFR podem ser diretamente endereadas.

Endereamento Indireto: a instruo especifica um registrador que contm o


endereo do operando. Ambas as RAM's, externa e interna, podem ser
indiretamente acessadas. Se tal endereo possui 8 bits, seu valor armazenado
em R0 ou R1 do respectivo banco selecionado, ou no Stack Pointer. Por outro
lado, se tal endereo possui 16 bits, seu valor armazenado no registrador
DPTR.

Endereamento Direto por Registradores: realizado por instrues de


registradores, que so instrues que carregam uma especificao de 3 bits em
seu opcode, com referncia ao registrador a ser utilizado, podendo acessar
registradores de R0 a R7 dos bancos de registradores. Instrues deste tipo so
mais eficientes em termos de cdigo, uma vez que eliminam um byte de
endereo. Quando uma instruo desse tipo executada, um dos quatro bancos
de registradores selecionado pelos bits de seleo de banco, RS0 e RS1, do
PSW.

Endereamento Inerente ou por Registrador Especfico: algumas instrues so


especficas a certos registradores. O prprio opcode capaz de realizar tal tarefa.
As instrues de Registradores especficos nada mais so do que aquelas que
operam sempre num registrador em especial , como no acumulador, DPTR, etc.
Ou seja, no necessrio um byte de endereamento especfico para apontar
qual o registrador.

Endereamento Imediato: quando uma constante (o prprio dado) segue o


opcode.

Endereamento Indexado: somente a memria de programa, cuja nica operao


leitura, pode ser acessada por esse modo, usado para fazer leituras de tabelas
nessa memria. Um registrador de 16 bits (DPTR ou PC) aponta para o incio da
tabela, enquanto o acumulador ajustado para a n-sima posio da mesma. O
endereo de uma entrada para a tabela formado pela soma entre o acumulador
e o registrador de 16 bits. Uma outra aplicao desse tipo de endereamento na
formao do endereo destino de jumps pela soma do ndice e do valor do
acumulador.
Por exemplo, a instruo ADD A, <byte> pode ser escrita como:

ADDA,7FH(direto)
ADDA,@RO(indireto)
ADDA,R7(registrador)
ADDA,#127(imediato)

4HARDWARE DO 8051
4.1Anlise externa
O aspecto externo do 8051 o da figura 4.1. Os pinos com nomes da forma
P0.0, P0.1, etc. correspondem s quatro portas de E/S (P0 a P3). Note a dupla utilidade
das portas P0 e P2, que ficam comprometidas com o uso de memria externa, assim
como os pinos P3.6 e P3.7. O sinal ALE (Address Latch Enable) permite fazer a

demultiplexao de dados e endereos na porta P0, da maneira que foi mostrado


anteriormente.
Atravs do sinal PSEN (program storage enable), o controlador informa o
mundo externo se a operao em andamento uma leitura de instruo (acesso
memria de programa) ou um acesso memria de dados. Este sinal permite que o
processador tenha duas regies distintas de memria externa, uma para armazenar
cdigo e outra para dados. Ambas ocupam os endereos de 0 a FFFFH (64 kB), num
total de 128 kB.

Figura 4.1 Pinagem do 8051


O pino EA um sinal de entrada, atravs do qual o usurio escolhe se ser
utilizada a memria ROM interna ou se todo o programa ser armazenado
externamente.

Descrio dos Pinos do 8051:


Vcc (40) - Alimentao de +5V.
Vss (20) - Terra.

P0 (32-39) - Porta 0 (AD0...AD7). Alm de porta paralela, est multiplexada


com o byte menos significativo (LSB) dos endereos e dos dados.
Admite 8 cargas LS TTL.
P2 (21-28) - Porta 2 (A8...A15). Alm de porta paralela, est multiplexada com
o byte mais significativo (MSB) dos endereos. Admite 4 cargas
LS TTL.
P1 (1-8) - Porta 1. Admite 4 cargas LS TTL.
P3 (10-17) - Porta 3. Compartilhada com uma srie de recursos Admite 4 cargas
LS TTL.
Os pinos da porta P3 tambm so utilizados para realizar certas funes
especiais:

P3.0 - RxD/data - recepo serial assncrona ou E/S de dados sncronos;

P3.1 - TxD/clock - transmisso porta serial assncrona ou sada de clock p/ dados


sncronos;

P3.2 - INT0 - entrada da interrupo 0 ou bit de controle para o


temporizador/contador 0;

P3.3 - INT1 - entrada da interrupo 1 ou bit de controle para


temporizador/contador ;

P3.4 - T0 - entrada de clock externo para o temporizador/contador 0;

P3.5 - T1 - entrada de clock externo para o temporizador/contador 1;

P3.6 - WR - sinal de escrita na memria de dados externa;

P3.7 - RD - sinal de leitura na memria de dados externa.

RST (9) - Reset. Com o oscilador funcionando, deve ser mantido um nvel alto
durante 24 perodos.
ALE/PROG (30) - Address Latch Enable. Pulso para acionar o latch que
captura o LSB do endereo (com sua borda ascendente). Ele emitido razo de 1/6 da
freqncia do oscilador e pode ser usado para acionar entradas externas. Um ALE
omitido durante o acesso Memria de Dados Externa. Tambm usada na gravao da
ROM interna.
*PSEN (29) - Program Store Enable. Pulso de leitura para a Memria de
Programa Externa. Quando o programa est sendo executado na memria de programa
externa ele aparece como 1/6 da freqncia de clock. Quando h acesso memria de
dados externa, 2 PSEN so perdidos.

*EA/VPP (31) - External Access Enable. Informa CPU se o programa est na


Memria de Programa Externa ou na ROM Interna. Tambm usado para gravao da
ROM Interna.
*EA = 1 (Vcc) (0000H - 0FFFH) ROM Interna
(1000H - FFFFH) Memria de Programa Externa
*EA = 0 (Vss) (0000H - FFFFH) Memria de Programa Externa
XTAL1 (19) - Entrada do amplificador inversor do oscilador interno. Deve ser
conectado terra se for usado um clock externo (HMOS) ou ao clock externo
(CHMOS).
XTAL2 (20) - Sada do amplificador inversor do oscilador interno. Se for usado
clock externo, serve como entrada para o mesmo (HMOS) ou no conectado
(CHMOS).

4.2Oscilador do 8051
Todos os microcontroladores da familia MCS-51 possuem um oscilador interno
que pode ser utilizado, se desejado, como um gerador de clock para a CPU. Para se usar
o oscilador interno, basta conectar um cristal ou um ressonador cermico entre os pinos
XTAL1 e XTAL2 do microcontrolador, e capacitores ao terra como mostra a figura 4.2.

Figura 4.2: Utilizao do 8051 com cristal.


Exemplos de como se utilizar o clock com oscilador externo so mostrados
abaixo:

Figura 4.3: utilizao do 8051 com oscilador externo.

4.3Ciclos de Mquina
Um ciclo de mquina consiste de uma seqncia de 6 estados (S1 a S6). Cada
estado toma 2 perodos de clock e, portanto, um ciclo de mquina toma 12 perodos de
clock ou 1 s sob uma freqncia de 12MHz.
A figura 4.4 mostra a seqncia de busca/execuo para alguns tipos de
instrues. Normalmente dois ciclos de busca so executados em cada ciclo de mquina,
mesmo que a instruo sendo executada no o requeira, caso em que o byte buscado
ignorado e o PC no incrementado.

Figura 4.4 Ciclo de Mquina.


Instrues de um ciclo comeam em S1, em S4 gerada uma segunda busca e,
no fim de S6, a instruo est completa. O ciclo busca/execuo o mesmo com
memria de programa externa ou interna. A Figura 4.5 mostra os sinais e as
temporizaes envolvidas quando a memria de programas externa. Nesse caso, o
sinal PSEN ativo duas vezes por ciclo de mquina. Se um acesso memria de dados
externa ocorre, como mostrado na Figura 4.4, dois PSEN so pulados porque o bus de
endereos e o bus de dados esto sendo utilizados para acesso memria de dados. Note
que um ciclo de memria de dados externa toma duas vezes mais tempo que um ciclo de
memria de programas. A figura 4.5 mostra a dinmica dos endereos sendo enviados s

Portas 0 e 2 e dos sinais ALE e PSEN . O sinal ALE ativado indiferentemente se a


CPU est executando a partir da memria de programas externa ou interna, podendo ser
utilizado como uma sada de clock.

Figura 4.5 Ciclo de barramento para acesso memria externa.


A instruo MOVX gasta 2 ciclos mquinas a ser executadas, no sendo
necessria nenhuma busca do cdigo de programa feita durante o 2 ciclo mquina,
pois esta instruo ocupa 1 byte na memria de programa.

4.4Hardware para memria externa


Um exemplo de utilizao de memria externa mostrado na figura 4.6. No
caso, esto sendo utilizadas externamente tanto memria de programa como memria de
dados, mas possvel a utilizao de apenas uma delas (somente a ROM).

Figura 4.6 - Expandindo RAM e ROM


Como pode ser visto na figura 4.6, alm das memrias faz-se necessrio a
utilizao de um outro CI (no caso o 74373) para a multiplexao de dados e endereos.
Ocorre da seguinte forma: no primeiro ciclo de mquina, o 8051 coloca nos pinos AD0
a AD7 o byte menos significativo do endereo externo e leva o pino ALE (Address
Latch Enable Habilitador da Trava de Endereos) a nvel alto, de modo que o 74373
(oito Latches tipo D) coloque em suas sadas essa informao, e logo em seguida passa
este pino para nvel baixo, para que esse byte fique retido no 74373. Aps isso, os pinos
AD0 a AD7 estaro livres para o transporte dos dados.
O 8051 pode, no modo expandido (memria externa), utilizar toda a memria de
programa externa (com nvel lgico 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 verso 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 nvel lgico baixo.
Retornando a figura 4.6, nela estamos utilizando 8kB de RAM externa, alm dos
256 bytes de RAM interna. Alm disso, temos um total de 8kB de memria ROM que,
no caso do 8051, pode estar sendo utilizado apenas no CI externo ou com os 4096 bytes
menos significativos em memria interna e os 4096 bytes mais significativos na
memria externa.
Ainda em relao figura 4.6, para fazer uma leitura na ROM externa, o pino
PSEN ser levado a nvel baixo, para fazer uma leitura na RAM externa, o pino RD

ser levado a nvel baixo e, para fazer uma escrita na RAM externa, o pino WR ser
levado a nvel baixo.

4.5Reset
A entrada de Reset o pino RST que possui um Schmitt Triger na entrada. O
Reset realizado quando este pino se mantm em nvel alto pelo menos por 2 ciclos de
mquina (24 clocks) enquanto o oscilador estiver funcionando. A RAM Interna no
afetada pelo reset. Depois do RESET, a CPU inicializada com os seguintes dados:

ESTADO DOS REGISTROS APS O RESET

SP = 7
SBUF = ?
P0,P1,P2,P3 = FFH
OUTROS SFR = 0

Figura 4.7 Circuito de Reset para o 8051.


Um reset automtico pode ser obtido quando Vcc ligado ao pino RST passando
por um capacitor de 10F e ligados ao Vss passando por um resistor de 8.2K,
provocando um ascenso de Vcc no superior a 1ms e o start-up do oscilador no
superior a 10 ms, sendo mostrado na figura 4.7 o circuito adequado para gerar um
power on reset.
Quando a alimentao ligada o pino RST fica no estado alto por um tempo que
depende do valor do capacitor e da taxa de carga que aplicada ao mesmo. Para garantir
um bom reset deve-se garantir um tempo alto do pino RST maior que dois ciclos de
mquina, o que s ocorre aps o start-up do oscilador (normalmente poucos ms).

Note que o valor dos pinos fica em estado aleatrio antes do oscilador comear a
funcionar e durante o perodo que a rotina interna de reset est em progresso.

5CONJUNTO DE INSTRUES
Todos os componentes da famlia de microcontroladores Intel MCS-51
executam o mesmo conjunto de instrues, com o auxlio de seu Macro Assembler
ASM-51. O conjunto de instrues da famlia MCS-51 direcionado para aplicaes de
controle de 8 bits. Ele permite manipulao de dados de 1 ou 2 bytes, alm de fornecer
suporte para variveis de um bit em sistemas lgicos que necessitem de processamento
booleano.
O 8051 possui 111 instrues distintas; dessas, 49 possuem cdigo de operao
de um byte apenas, 45 de dois bytes e 17 de trs bytes. Logo abaixo, ser feito um
levantamento dessas instrues agrupadas nas categorias: transferncia de dados,
aritmticas, lgicas e transferncia de controle.
Para a exposio das instrues, utilizar-se-o as seguintes abreviaturas:

Rn

direto, dir

@Ri

#data, #dt

#data16, #dt16

adr16

adr11

rel

bit

Acc.

qualquer registro R0, R1, ...,R7

endereo da RAM interna (8 bits)

@R0 ou @R1, usado para endereamento indireto

constante de 8 bits (byte)

constante de 16 bits

endereo de 16 bits (enderea 64 KB)

endereo de 11 bits (enderea 2 KB)

deslocamento relativo (complemento a 2: -128 a +127)

endereo de um bit da RAM interna

acumulador (registro)

endereo do acumulador

5.1Modos de Endereamento
De acordo com o "Data Sheet" do MCS-51, existem 6 modos de endereamento
com a seguinte nomenclatura :

Imediato
Direto
Indireto
Registrador
Registrador Especfico
Indexado
Imediato:O valor da constante colocado no opcode.
MOV A, #100
Carrega 100 no acumulador (Acc=100). O byte 100 um dado imediato. Devese notar a presena do sinal # que indica operao imediata.

Direto:O operando especifica um endereo de 8 bits da RAM interna.


MOV A, 20

Transfere para o acumulador o contedo do endereo 20 da RAM Interna. Todo


endereamento direto usa a RAM Interna.
Indireto: Aqui se especifica um registro onde est o endereo do operando. S
pode ser usado para endereamento indireto: R0, R1 ou DPTR.
MOV A, @R0
Coloca no acumulador o contedo do endereo que est em R0
Registro: No cdigo de operao da instruo existe um campo de 3 bits (pois
so 8 registradores, de R0 a R7) onde especificado o registro a ser utilizado. Essa
forma eficiente e evita utilizar um byte adicional para indicar o registro.
MOV A,R0
Coloca no acumulador o contedo de R0. uma instruo de um s byte.
Registro Especifico: Algumas operaes so especificas para certos registros.
Por exemplo, algumas instrues sempre operam com Acc ou DPTR e no necessitam
de espao no opcode para especificar isto.
MOVX A,@DPTR
Esta uma instruo para leitura da Memria de Dados Externa. Coloca no
acumulador o contedo do endereo da RAM Externa que est no DPTR. Como sempre
so usados Acc e DPTR, no necessrio especific-los, o que faz com que a instruo
empregue apenas 1 byte.
Indexado: O endereo do operando formado pela soma de um endereo base
com um registro de indexao. Somente a Memria de Programa pode ser endereada
deste modo.
MOVC A,@A+DPTR
A -ndice,
DPTR -endereo base.
A soma do DPTR com o acumulador forma um endereo da Memria de
Programa e o contedo deste endereo transferido para o acumulador. Essa instruo
tima para "look up table".

5.2Instrues Aritmticas
As quatro operaes bsicas (soma, subtrao, multiplicao e diviso) podem
ser executadas pelo 8051, com operandos de 8 bits. Entretanto, atravs dos flags pode-se
realizar as duas primeiras operaes com nmeros com mais de 8 bits, sinalizados ou
no.

INC e DEC incrementam e decrementam, respectivamente, o contedo do


operando.
ADD e ADDC efetuam a soma do acumulador com um segundo operando,
colocando o resultado no primeiro. A instruo ADDC leva em conta o vai-um nesta
operao.
SUBB realiza a subtrao do acumulador com um segundo operando e com o
carry, colocando o resultado no acumulador.
DA ajusta o resultado da ltima operao aritmtica para o formato BCD; no
converte um nmero binrio em BCD, mas sim ajusta o resultado de uma operao
ADD ou ADDC envolvendo valores BCD.
MUL e DIV executam as operaes de multiplicao e diviso, respectivamente.
Os operandos so os registros A e B. O resultado conduzido aos mesmos registros,
conforme a tabela 5.1.
Tabela 5.1 Instrues aritmticas do 8051.
Addressing Modes
Mnemonic

Execution
Time (s)

Operation
Dir

Ind

Reg

Imm

ADD A,<byte>

A = A + <byte>

ADDC
A,<byte>

A = A + <byte> + C

SUBB
A,<byte>

A = A + <byte> - C

INC A

A=A+ 1

INC <byte>

<byte > = <byte> + 1

Accumulator only

INC DPTR

DPTR= DPTR + 1

Data Pointer only

DEC A

A=A 1

Accumulator only

DEC <byte>

<byte > = <byte> - 1

MUL AB

B:A= B x A

ACC and B only

ACC and B only

Accumulator only

A= Int [A/B]
DIV AB
B= Mod [A/B]

DA A

Decimal Adjust

5.3Instrues Lgicas e Booleanas


O 8051 realiza as operaes lgicas bsicas, tanto com operandos de 1 bit como
com operandos de 1 byte. As instrues lgicas podem ser divididas em:

1. Instrues com um nico operando

1. CLR: usado para introduzir o valor zero (0) no registro A, ou no flag


CY, ou em qualquer bit diretamente enderevel
2. SETB: introduz o valor 1 no CY ou em qualquer bit enderevel.
3. CPL: realiza o complemento de um. Os operandos so os mesmos da
instruo CLR.
4. RL, RLC, RR, RRC, SWAP: realizam as operaes de rotao e
deslocamento de bits, usando o acumulador como operando.

2. Instrues com dois operandos

1. ANL: realiza a operao lgica AND com operandos de 1 ou 8 bits, e


retorna o resultado para o primeiro operando
2. ORL: idem anterior, sendo que se realiza a operao lgica OR
3. XRL: executa o XOR entre dois operandos de 8 bits e retorna o resultado
para o primeiro operando.
As instrues lgicas realizam operaes booleanas (AND, OR, Exclusive OR e
NOT) bit a bit entre dois bytes. Elas tambm podem enderear seus operandos por
diversos modos como por exemplo, a instruo ANL A, <byte>:

ANLA,7FH(direto)
ANLA,@RI(indireto)
ANLA,R6(porregistrador)
ANLA,#53H(imediato)

Tabela 5.2 Instrues Lgicas do 8051.

Todas as instrues desse tipo que utilizam o acumulador como registrador


especfico tomam 1 s para serem executadas, enquanto as demais tomam 2 s. Os
modos de endereamento disponveis tornam desnecessrio carregar qualquer operando
que estiver na memria de dados interna para o acumulador. No utilizar o acumulador
economiza o tempo em empilhar seu contedo quando do atendimento a uma
interrupo.

5.4Instrues de Transferncia de Dados


Essas instrues so divididas em trs subgrupos, conforme a localizao do
dado: na RAM interna, na RAM externa ou na memria de programa (Lookup Tables).

5.4.1RAM Interna
Sob um clock de 12MHz, uma operao desse tipo realizada em 1 s ou 2 s.
Esse conjunto de instrues mostrado na tabela 3, conta com a facilidade, por exemplo,
de MOV <dest>,<src> que transfere dados entre duas posies de RAM interna ou na
regio SFR, dispensando qualquer carregamento do Acumulador. PUSH e POP utilizam
endereamento direto para identificar o byte a ser salvo ou restaurado, mas usam
endereamento indireto para acessar a pilha atravs do registrador SP. Em dispositivos
que no contam com a regio Upper 128, se a pilha tenta avanar sobre ela, bytes de
PUSH so perdidos e de POP so indeterminados.

Movimentao de 16 bits til para inicializar o DPTR, para acesso a Lookup


Tables na memria de programa ou acesso memria de dados externa.
As instrues de transferncia de dados em RAM interna podem ser
subdivididas em duas categorias:
Transferncia de propsito geral
MOV: realiza a transferncia de 1, 8 ou 16 bits do operando fonte para o
operando destino.
PUSH: incrementa o registro SP, e ento, transfere o operando fonte para o topo
da pilha.
POP: transfere o contedo do topo da pilha para o operando destino, e
decrementa o SP.
Transferncia especfica com o acumulador
XCH: permuta o byte do operando fonte com o do acumulador.
XCHD: permuta os 4 bits baixos do operando fonte com os 4 bits baixos do
acumulador.
MOVX: executa a transferncia de um byte entre a memria externa de dados e
o registro A. O endereo externo pode ser especificado pelos registros DPTR ou
R0 e R1.
MOVC: realiza a transferncia de um byte da memria de programa para o
registro A. Neste caso, usa-se o endereamento indexado, onde o prprio
acumulador o ndice e os registros DPTR ou PC so usados como base do
endereo.
Tabela 5.3 - Instrues de transferncia de dados em RAM interna.

5.4.2RAM Externa

A tabela 5.4 mostra a lista de instrues de transferncia de dados para acesso


memria externa, onde somente endereamento indireto pode ser utilizado. Pode-se
escolher o uso de endereos de 8 bits, @Ri, onde Ri pode ser o registrador R0 ou o
registrador R1, ou endereos de 16 bits, @DPTR. A desvantagem em se usar endereos
de 16 bits, quando poucos Kbytes de memria de dados externa esto envolvidos, o
sacrifcio de todos os 8 bits da Porta 2 (veja Figura 2). O acumulador sempre a fonte
ou o destino da transferncia.
Os sinais RD e WR s so gerados quando da execuo de uma instruo do tipo
MOVX, assim, se uma RAM externa no disponvel, tais sinais podem ser utilizados
como linhas de E/S extras.
Tabela 5.4 - Instrues de transferncia de dados em RAM externa.

5.4.3Memria de Programa
A tabela 5.5 mostra as duas nicas instrues disponveis para ler Lookup Tables
(Tabelas de Pesquisa), localizadas na memria de programa. Uma vez que residem na
memria de programa, tais tabelas podem apenas ser lidas, nunca atualizadas por tais
instrues. Se essas tabelas se encontrarem na memria de programas externa, o sinal de
leitura PSEN .
Tabela 5.5 - Instrues para leitura de Lookup Table em memria de programa

MOVC o mnemnico para Move Constant. A primeira instruo MOVC


pode
acomodar uma tabela de 256 entradas (0 a 255). O nmero da entrada
armazenado no acumulador e o registrador DPTR carregado com o endereo inicial da
tabela.
A segunda instruo utiliza o PC como a base da tabela, que acessada atravs
de subrotina. O acumulador carregado com o valor da entrada da tabela e a subrotina
chamada:
MOVA,#ENTRADA
CALLLOOKUP_TABLE

Sub-rotina:
LOOKUP_TABLE:MOVCA,@A+PC

A tabela em si segue imediatamente aps a instruo RET. Ela comporta 255


entradas (1 a 255), pois a entrada 0 enderea a instruo RET.

5.5Instrues Booleanas
Os dispositivos da famlia 8051 contam com um conjunto completo de
operaes booleanas (tabela 9) sob bits nicos. O espao Lower 128 da RAM interna
suporta 128 bits endereveis e o espao SFR pode suportar outros 128 bits
endereveis. Todas as linhas das portas so bits-endereveis e cada uma dessas linhas
pode ser tratada como uma porta de um nico bit. As instrues que acessam esses bits
no so apenas desvios condicionais mas uma completa lista de mov, set, clear,
complement, OR e AND. Esse tipo de operaes sobre bits no facilmente obtido em
outras arquiteturas sem uma razovel quantidade de cdigo.
Todos esses bits so endereados diretamente. Os bits de endereo entre 00H e
7FH acessam o espao Lower 128 enquanto entre 80H e FFH acessam o espao SFR.
Note como fcil um flag interno ser movido para um pino de uma porta:
MOVC,FLAG
MOVP1.0,C

onde FLAG o nome de qualquer bit enderevel em Lower 128 ou SFR. Nessa
seqncia, bit de FLAG movido para o bit menos significativo da Porta l. O bit Carry
do PSW utilizado como acumulador para operaes booleanas.
As operaes de jump desse conjunto testam um nico bit, que possa ser
diretamente enderevel, como condio. Uma vez que todos os bits de PSW so
endereados diretamente, pois esto no espao SFR, pode se utiliz-los como alguma
condio de jump.
Para jumps relativos, o endereo contido no cdigo somado ao PC em
complemento de dois se o jump executado. Portanto, distncia de salto pode variar
na faixa de 128 a +127 bytes a partir do endereo do byte de desvio.
Tabela 5.6 Instrues booleanas.

5.6Instrues de Transferncia de Controle (Desvio)


O conjunto de instrues de salto ou desvio pode ser dividido em dois
subgrupos: jumps condicionais e jumps incondicionais.

5.6.1Desvios Incondicionais
O conjunto de instrues de salto incondicional (tabela 5.7) possui seis
instrues em seu repertrio. JMP apenas um mnemnico genrico utilizado pelo
programador que no precisa saber como ele realmente interpretado pelo assembler.
Na realidade, JMP corresponde a trs instrues: SJMP, LJMP e AJMP, cada uma
indicada a situaes de endereo de desvio diferente.
Tabela 5.7 Instrues de desvio incondicional.

A instruo SJMP calcula o endereo destino como descrito acima, que pode
varrer uma largura de 128 a +127 bytes na memria de programa. A instruo LJMP
codifica o endereo destino como uma constante de 16 bits que pode ser qualquer
posio nos 64 Kbytes da memria de programas. A instruo AJMP codifica o
endereo destino como uma constante de 11 bits; a instruo consiste em 2 bytes: 3 bits
do endereo localizam-se no opcode enquanto os outros 8 bits localizam-se no prximo
byte. Os 11 bits assim formados simplesmente substituem os 11 bits menos
significativos do PC.
Em todos os casos, o programador especifica o endereo destino de duas
maneiras ou como um label ou como um constante de 16 bits. O assembler se encarrega
de colocar o endereo destino para o correto formato de instruo.
A instruo JMP @A + DPTR implementa o comando CASE. O endereo
destino computado em tempo de execuo como a soma do contedo do Acumulador
e o registrador DPTR. Tipicamente, DPTR carregado com o endereo de uma tabela
de jumps e, ao acumulador, dado o valor de um ndice dessa tabela.
Semelhante instruo JMP, a instruo CALL, na realidade, duas: LCALL e
ACALL, usadas para ativar uma sub-rotina, que diferem na forma como o endereo da
subrotina dado CPU. LCALL utiliza o endereo destino em 16 bits (instruo de 3
bytes) que pode ser qualquer localidade dos 64 Kbytes da memria de programas.
ACALL utiliza formatos de endereos em 11 bits (instruo de 2 bytes), o que significa
que o endereo destino deve estar no mesmo bloco de 2 Kbytes seguintes instruo. A
transparncia para o programador de CALL semelhante de JMP.
As instrues RET e RETI so as clssicas instrues de retorno de sub-rotinas.
A diferena entre elas que RETI informa ao sistema de controle de interrupes que a

interrupo em progresso terminou, sendo especfica para sub-rotinas de tratamento de


interrupo.

5.6.2Desvios Condicionais
O conjunto de jumps condicionais s permite endereamento de destino relativo,
o que limita a distncia de salto entre 128 e + 127 bytes de distncia em relao
instruo jump. importante notar que o programador especifica o endereo como um
label ou uma constante de 16 bits.
No h flag de zero, portanto JZ e JNZ testam o dado do acumulador para tal
condio. JC, JNC, JB, JNB, e JBC so outras instrues de salto condicional, que
testam flags ou bits endereveis antes de efetuar o desvio de execuo
As instrues DJNZ (Decrementa e Salta se No Zero) e CJNE (Compara e
Salta se No Igual) so utilizadas para controle de laos. Uma aplicao de CJNE est
em comparaes "maior que, menor que". Pelo valor do bit de Carry distingue-se entre
as duas situaes. Se o primeiro menor que o segundo, o bit de carry setado. Se o
primeiro maior ou igual ao segundo, o bit de carry zerado. As duas instrues so
usadas para realizar comparao entre operandos de 8 bits e repeties iterativas de um
bloco de instrues.
Tabela 5.8 - Instrues de desvio condicional.

5.7Look-Up Tables
Quando da programao de sistemas utilizando microprocessadores surge muitas
vezes a necessidade de se utilizar as look-up tables. Um exemplo converter um
numero numa base num outro noutra base, por exemplo converter um digito no seu
correspondente ASCII

30h

31h

35

36

32h

33h

34h

37

38

39

Um modo simples de converter um numero decimal no seu correspondente


ASCII, somar 30h ao numero, pois neste caso existe uma correspondncia direta entre
o numero convertido e o numero a converter. No entanto podemos utilizar uma tabela
com os valores j convertidos em que o valor a converter ser o deslocamento na tabela,
aqui temos de ter um ponteiro de referncia para o inicio da tabela. No 8051 este
ponteiro de referncia pode ser o PC ou o DPTR.

;*****************************************************************************
;*Nome:converte_ASCII*
;*Descrio:Fazaconversodeumnumerode09paraequivalenteASCII*
;*Entradas:EmAnumeroaconverter*
;*Sadas:EmAoseuequivalenteemASCII*
;*Registosutilizados:a,dptr*
;*****************************************************************************

converte_ASCII
lcalltabela
db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h;valoresparaatabela
tabela:
popdph;colocaodptraapontarparaoiniciodatabela
popdpl
movca,@a+dptr;vaitabelabuscaroseucorrespondenteemASCII
ret

Listagem 1- Rotina utilizando look-up table.

6TEMPORIZADORES E
CONTADORES
6.1Introduo
O 8051 tem dois registros contadores de 16 bits, denominados TIMER0 e
TIMER1, dedicados s funes de contagem e temporizao (counter/timercontador/temporizador). H uma importante distino entre os conceitos de contador e
temporizador.
Quando opera como temporizador, o registro incrementado a cada ciclo de
mquina (usa como base o cristal da CPU). O sinal de contagem aparece com 1/12 da
freqncia do clock.
Quando opera como contador, o registro incrementado de acordo com o sinal
que se coloca nas entradas T1 e T0, ou seja, o contador opera a cada transio de 1 para
0 (borda de descida _) na entrada T0 ou T1.
Deve-se ter um cuidado quando em operaes em modo contador: j se sabe que
as entradas so amostradas durante S5P2 de cada ciclo de mquina. Quando em um
ciclo de mquina a entrada detectada em 1 e depois em 0, no prximo ciclo o contador
incrementado. O incremento acontece em S3P1 do ciclo seguinte ao que foi detectada
a transio. Para garantir que o nvel correto tenha sido amostrado, necessrio que o
sinal de entrada (o sinal que vai acionar os contadores) permanea pelo menos um ciclo
de mquina em nvel alto e pelo menos outro ciclo de mquina em nvel baixo, quer
dizer, a mxima freqncia que responder o contador de 1/24 da freqncia de clock.
O sinal de entrada pode ter qualquer "duty cycle", desde que se respeite a restrio antes
mencionada.

6.2Registros Envolvidos
Dois registros SFR so utilizados para controlar as funes e operaes do
temporizador/contador: em TMOD especifica-se o modo de operao e em TCON
controla-se a operao. A figura 6.1 ilustra o registro TMOD e a figura 6.2 ilustra o
registro TCON.

Figura 6.1. Descrio do registro TMOD.


GATE: especifica como ser feito o controle:
se GATE = 1 - conta somente se TR1=1 e INT1=high, (idem para TR0 e INT0)
se GATE = 0 - conta somente se TR1=1 (controle somente por software)
(GATE especifica se INT1 ser usado para controlar o funcionamento do
contador/temporizador pode ser usado para medir a largura de pulsos externos ligados
a INT0 ou INT1)
C/T: seleciona modo contador ou temporizador:
se C /T = 1 - modo contador (conta usando a entrada T1)
se C /T = 0 - modo temporizador (conta a cada ciclo de mquina)

M0

M1

seleciona o modo de operao

THi temporizador/contador de 8 bits e TLi um pre-scaler de 5 bits,

THi e TLi formam um temporizador/contador de 16 bits,

contador/temporizador de 8 bits com auto-recarga (TLi conta e THi valor


para recarga),

-TL0 contador/temporizador de 8 bits (usando TR0, *INT0 e TF0) -TH0


contador/temporizador de 8 bits (usando TR1, *INT1 e TF1) -TH1 e TL1
parado (mas pode operar em outros modos)

Figura 6.2. Descrio do registro TCON.


TF1:flag de transbordamento (overflow) do contador/temporizador 1. Ativado
por hardware quando h transbordamento no timer 1. apagado por hardware quando o
processamento desviado para a rotina de interrupo.
TR1:bit de partida/parada (run/stop) do contador/temporizador 1.
TF0:flag de transbordamento (overflow) do contador/temporizador 0. Ativado
por hardware quando h transbordamento no timer 0. apagado por hardware quando o
processamento desviado para a rotina de interrupo.
TR0:bit de partida/parada (run/stop) do contador/temporizador 0.
IE1:flag da interrupo externa 1. Ativada por hardware quando detectada
uma interrupo. Apagado por hardware (somente se for modo borda) quando a
interrupo processada, ou seja, quando se desvia para a rotina de interrupo.
IT1:indica se a interrupo externa 1 opera por borda ou por nvel:
1 -borda de descida (),
0 -nvel baixo.

E0:flag da interrupo externa 0. Ativada por hardware quando detectada uma


interrupo. Apagado por hardware (somente se for modo borda) quando a interrupo
processada, ou seja, quando se desvia para a rotina de interrupo.
IT0:indica se a interrupo externa 0 opera por borda ou por nvel:
1 -borda de descida (),
0 -nvel baixo.

6.3Modos de operao
Os dois contadores/temporizadores (timer1 e timer0) podem trabalhar em 4
modos de operao que so selecionados empregando os bits M1 e M0 do registro
TMOD. Os modos 0, 1 e 2 so iguais para os 2 contadores/temporizadores mas o modo
3 diferente.

6.3.1Modo 0
Este modo idntico para os dois contadores/temporizadores. Neste modo temse um contador de 8 bits com um divisor (pre-scaler) de 5 bits. Resulta ento em um
contador/temporizador de 13 bits, compatvel com o que havia no MCS-48. Os 13 bits
so formados pelos 8 bits do registro THi e pelos 5 bits menos significativos do registro
TLi. Os outros 3 bits do TLi so indeterminados. O transbordamento (overflow)
gerador quando a contagem faz a transio de 1FFFH para 0000; neste instante ativa-se
o bit de overflow (TF1 ou TF0).
O controle da contagem simples:

se GATE = 0, TR1 controla o contador/temporizador (controle por software)

se GATE = 1, TR1 e INT1 controlam o contador/temporizador


(permite tambm um controle externo por hardware)

A figura 6.3 apresenta um diagrama em blocos do contador/temporizador 1


operando em modo 0. A mesma figura vlida para o contador/temporizador 0.

Figura 6.3. Diagrama em blocos para o TIMER 1 em MODO 0.

6.3.2Modo 1
Este modo de operao o mais simples e por isto muito utilizado. idntico
ao modo 0, mas os contadores so de 16 bits. A figura 6.4. ilustra o diagrama em blocos
para este modo, que idntico para os dois timers.

Figura 6.4. Diagrama em blocos para o TIMER 1 em MODO 1.

6.3.3Modo 2
Neste modo tem-se um contador/temporizador de 8 bits (TLi) com registro de
recarga (THi) para quando ocorre o transbordamento. Neste modo os dois
contadores/temporizadores operam de forma idntica. O transbordamento (overflow)
no somente ativa TFi como tambm recarrega TLi com o valor guardado em THi (este
permanece inalterado). O valor de recarga deve ser fornecido por software.

Figura 6.5. Diagrama em blocos para o TIMER 1 em MODO 2.

6.3.4Modo 3
Este o nico modo onde os contadores/temporizadores tm um comportamento
diferente. Neste modo, o contador/temporizador 1 simplesmente suspende a contagem
( como se estivesse com TR1=0), enquanto o contador/temporizador 0 se divide em
dois contadores de 8 bits:

TH0 contador/temporizador de 8 bits usando C/*T, GATE, TR0, *INT0 e


TF0,

TL0 contador/temporizador de 8 bits usando TR1 e TF1 (ou seja, provoca a


interrupo do timer 1).

como se existissem 2 contadores/temporizadores de 8 bits (TH0 e TL0) e


outro de 16 bits (timer 1). O timer 1, entretanto, pode ser usado para operar em qualquer
outro modo (0, 1 ou 2) e usa-se o modo 3 para det-lo. No h problemas porque os
modos so independentes. Tambm se pode usar o timer 1 (em modo 2) para gerar o
"baud rate" da porta serial.

Figura 6.6. Diagrama em blocos para o TIMER 0 em MODO 3.


EXEMPLO - LED_10HZ
Acender os leds vermelho, amarelo e verde a uma freqncia de 10 Hz. Para
solucionar esse exerccio necessrio gerar um retardo equivalente ao perodo de 10
Hz. A figura 8.7 ilustra o clculo do valor do contador para gerar esse retardo.

Figura 6.7 clculo do valor do contador.


Se F=10 Hz e CLOCK=3,575611 Hz, ento N=29797. Como este um contador
que conta para cima, temos que subtrair este valor de 65536. Com isto, N=6553629797=35739 ou 8B9BH. Na realidade, a freqncia gerada no ser exatamente 10 Hz
mas de um valor muito prximo:
F = 3,575611 / 12*29797 = 9,99 Hz
Ser utilizado o timer 0 no modo 1; a cada interrupo a rotina acende um novo
led e recarrega o timer.

Figura 6.8. Valor a ser programado em TMOD.

Figura 6.9. Valor a ser programado em IE.

;LED_10HZ.ASM
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
;

DEZ_HZEQU35739
;
ORGRESET
AJMPINIC
;
ORGTIMER0
AJMPTIM0
;
ORG50H
INIC MOV TL0,#LOW DEZ_HZ
MOVTH0,#HIGHDEZ_HZ
MOVTMOD,#1;TIMER0EMMODO1
MOVIE,#82H
MOVP1,#0;APAGARTODOSOSLEDS
MOVA,#01001001B
CLRC
SETBTR0
SJMP$
;
ORG100H
TIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZAR
MOVTH0,#HIGHDEZ_HZ;OCONTADOR
RLCA
MOVP1,A
RETI
END

Notar que na rotina de interrupo est a recarga dos temporizadores que feita
feita com a instruo "MOV direto,#data" mas que consome 2 ciclos de mquina, ou
seja, que h um retardo que se acumula. Para evitar ou corrigir isso, pode-se adicionar

ao contador o retardo da instruo; mais preciso usar "MOV TL0,# LOW


(DEZ_HZ+2).
Quando existem vrias interrupes, no se sabe com certeza quando uma
interrupo do temporizador pode ser aceita; isso implica um erro maior que se
acumula. H uma soluo simples porque depois do transbordamento o temporizador
segue contando e esta contagem exatamente o tempo que atrasou o servio da
interrupo; basta usar esse valor na recarga. As instrues a seguir ilustram a idia.

MOVA,#LOW(DEZ_HZ+2)
ADDA,TL0;1ciclo
MOVTL0,A;1ciclo
MOVTH0,#HIGH(DEZ_HZ+2)

7INTERRUPES
7.1Introduo
O 8051 apresenta 5 tipos de interrupes:

2 externas

2 timers

1 serial

Alguns outros membros da famlia MCS-51 podem apresentar outras


interrupes; por exemplo, o 8052 tem uma interrupo adicional dedicada ao timer 2.

7.2Registros Envolvidos
Os registros dedicados s interrupes permitem um controle total sobre as
mesmas. Cada interrupo pode ser habilitada ou desabilitada individualmente. Tambm
possvel desabilitar todas as interrupes de uma s vez. O registro IE (Interrupt
Enable) controla a habilitao das interrupes e ilustrado na figura 7.1.

Figura 7.1. Registro IE - habilitao de interrupes.


Cada interrupo pode ter dois nveis de prioridade: prioridade alta ou prioridade
baixa. Uma interrupo de alta prioridade pode interromper uma de baixa prioridade
mas no acontece o contrrio. Uma interrupo no pode interromper uma outra de
mesma prioridade. Se forem recebidas interrupes de diferentes prioridades, a de alta
prioridade atendida primeiro. Se forem recebidas duas interrupes de igual
prioridade, determina-se por uma seqncia interna de polling (consulta) qual ser
atendida primeiro. Assim, dentro de um mesmo nvel de prioridade, existe uma
seqncia de atendimento (a seqncia do polling). O contedo do registro IP define as
prioridades e ilustrado na figura 7.2.

Figura 7.2. Registro IP - prioridade das interrupes.


As duas interrupes externas (INT0 e INT1) podem ser acionadas por nvel ou
por borda de descida (). Isto definido atravs de dois bits do registro TCON. Este
registro tambm tem outra finalidade pois cada interrupo indica sua ativao usando
um bit do registro TCON.

Figura 7.3. Registro TCON - diversas funes para interrupes e


timers.
TF1:flag de transbordamento (overflow) do contador/temporizador 1. Ativado
por hardware quando h transbordamento no contador do timer 1 (timer/counter 1).
apagado por hardware quando o processador desviado para a rotina de atendimento da
interrupo.
TR1:bit de partida/parada (run/stop) do contador/temporizador 1.
TF0:flag de transbordamento (overflow) do contador/temporizador 0. Ativado
por hardware quando h transbordamento no contador do timer 0 (timer/counter 0).
apagado por hardware quando o processador desviado para a rotina de atendimento da
interrupo.

TR0: bit de partida/parada (run/stop) do contador/temporizador 0.


IE1: flag da interrupo externa 1. ativado (colocado em um) por hardware
quando se detecta uma interrupo externa 1. apagado (colocado em zero) por
hardware (s no modo borda) quando o processador desviado para a rotina de
atendimento da interrupo.
IT1:indica se a interrupo externa 1 opera por borda ou por nvel:
1 -borda de descida (),
0 -nvel baixo.
IE0:flag da interrupo externa 0. ativado (colocado um) por hardware
quando se detecta uma interrupo externa 0. apagado (colocado em zero) por
hardware (s em modo borda) quando o processador desviado para a rotina de
atendimento da interrupo.
IT0:indica se a interrupo externa 0 opera por borda ou por nvel:
1 _borda de descida (),
0 _nvel baixo.
O flag de interrupo da porta serial est em outro registro (SCON).

Figura 7.4. Esquema das interrupes na famlia MCS-51.

Todos os bits que geram interrupo podem ser ativados por software com os
mesmos resultados como se tivessem sido ativados por hardware. Isto quer dizer que
uma interrupo pode ser ativada por software e tambm que as interrupes pendentes
podem ser canceladas. Cada interrupo vetorizada em um endereo pr-definido:
RESET00H
Externa0IE003H
Timer0TF00BH
Externa1IE113H
Timer1TF11BH
SerialRI+TI23H(+indicaOU)

No endereo de vetorizao das interrupes h pouco espao, o suficiente para


colocar umas poucas instrues. Portanto normal colocar nestes endereos um desvio
(jump) para um outro local, onde est a rotina que atende interrupo.

7.3Manejo de Interrupes
Os flags das interrupes so amostrados na segunda fase do quinto estado
(S5P2) de cada ciclo de mquina. As amostras so submetidas a polling (consulta)
durante o prximo ciclo de mquina. A figura 7.5 ilustra a seqncia para atendimento
de uma interrupo.
Se um dos flags (de interrupo) est ativo durante S5P2, o prximo ciclo de
polling vai detectar e identificar a interrupo a ser atendida e ser gerada uma instruo
LCALL sempre que no seja bloqueada por:

uma interrupo de prioridade igual ou mais alta que a que est sendo atendida,

no tenha finalizado a instruo que se est processando no ciclo de polling


corrente,

a instruo em progresso um RETI ou uma escrita em IP ou IE.

Figura 7.5. Seqncia para atendimento a uma interrupo.


Na figura 7.5 ilustrada a resposta mais rpida a uma interrupo. Neste caso
CM2 o final de uma instruo e no um RETI nem uma escrita em IP ou IE. Quando
CM2 uma instruo RETI ou uma escrita em IP ou IE, uma instruo a mais ser
executada antes que a interrupo seja vetorizada.
A seqncia de polling se repete a cada ciclo de mquina e os valores
processados so aqueles que estaro presentes no instante S5P2 do ciclo de mquina
anterior. Deve-se observar que se um flag de interrupo foi ativado mas no pde ser
atendido (por uma das condies de bloqueio) e apagado antes da condio de
bloqueio ser removida, a interrupo no ser atendida. Quer dizer, o fato de um flag de
interrupo estar ativo e no ser atendido, no ser gravado.
O processador reconhece um pedido de interrupo atravs da execuo de um
LCALL gerado por hardware. Normalmente o flag que gerou o pedido zerado por
hardware, exceto para:

TI, RI da porta serial,

IE0, IE1 quando ativado por nvel

A instruo RETI usada para finalizar uma rotina de atendimento a


interrupes. Uma instruo RET funciona mas o sistema de controle de interrupes
no sabe que a rotina terminou, ou seja, sero bloqueadas todas as demais interrupes
de prioridade igual ou inferior.

7.4Interrupes Externas
As duas interrupes externas (0 e 1) podem ser programadas para funcionar por
nvel (ITX=0) ou por borda de descida () (ITX=1). Os pinos das interrupes so
amostrados em cada ciclo de mquina (1 ciclo de mquina=12 perodos de clock);
assim, uma interrupo externa deve permanecer constante por pelo menos 12 perodos
de clock, caso contrrio ela pode ser ignorada.
Quando a interrupo opera por borda de descida (), o pino deve permanecer
em alto por pelo menos 12 perodos de clock e depois em baixo por pelo menos 12
perodos de clock; isto garante a ativao do flag de interrupo. Os flags de
interrupes externas (IEX0 ou IEX1) sero automaticamente zerados pela CPU quando
uma rotina de servio chamada.
Quando a interrupo opera por nvel, o pino deve permanecer ativado (em
baixo) at que a interrupo seja atendida; depois disso, o pedido deve ser removido
antes que a rotina de servio de interrupo termine caso contrrio uma nova
interrupo ser gerada.
O tempo de latncia de uma interrupo depende, entre outras coisas, das
condies de bloqueio j vistas. No caso destas condies de bloqueio existirem, leva-se
entre 5 a 9 ciclos de mquina.

Figura 7.6. Latncia para as interrupes.

Como os flags de interrupo serial e dos temporizadores/contadores so


ativados em S5P2, o que foi estudado vlido para qualquer interrupo.
Caso seja necessrio, pode-se usar um esquema como o da figura 7.7 para
expandir as interrupes externas:

Figura 7.7 Expanso de interrupes externas.

7.5Passo A Passo
A estrutura de interrupo do MCS-51 permite, de forma muito simples, uma
implementao para a execuo de programas passo a passo (single step). Como j foi
visto, uma interrupo no ser atendida quando uma interrupo de igual prioridade

esteja sendo atendida e, quando esta interrupo termina com um RETI,


obrigatoriamente uma instruo ser executada antes que se aceite a nova interrupo.
Uma interrupo no ser re-atendida antes de terminar sua rotina. Essa rotina
deve terminar com RETI e, depois dessa instruo, uma outra dever ser executada
antes de ser atendida a interrupo. Imagine um sistema onde a interrupo 1 est
programada para trabalhar por nvel e que a entrada INT1 esteja conectada a terra, ou
seja, a interrupo est sempre sendo invocada. Se forem adicionadas a esse sistema
uma rotina principal e uma rotina de servio para a interrupo 1, cria-se o ambiente
para executar passo a passo o programa principal. Cada vez que voltar da rotina de
interrupo (com um RETI), ser executada uma nica instruo do programa principal
e, em seguida, desviar novamente para a rotina de interrupo. Pode-se usar uma chave
para marcar o instante de retorno da rotina de interrupo. O exerccio 7.6 ilustra a
utilizao do recurso de passo a passo.
A figura 7.8 mostra uma implementao possvel para a execuo passo a passo
sem bouncing na chave.

Figura 7.8 Implementao do Passo a passo.

7.6Exemplo PASSO_EXE.ASM
Escrever um programa que faa acender os leds em seqncia (vermelho,
amarelo e verde). Executar esse programa com um controle passo a passo usando a
interrupo 1. A soluo muito simples. No programa principal estar somente uma
seqncia de instrues que acende os leds segundo a ordem especificada (sem retardo).
A interrupo externa 1 estar programada para operar por nvel. A rotina de interrupo
aguarda que a chave SW3 seja acionada (v a zero); quando isto ocorre, retorna-se da
rotina de interrupo. Ao regressar, a entrada INT1 estar em zero (pela chave SW3) e
uma nova interrupo gerada. Ou seja, a cada acionamento da chave SW3,

executada uma instruo do programa principal. A primeira interrupo, para que o


programa entre em controle passo a passo, provocada por software ao ativar o bit IE1.

;PASSO_EXE.ASM
;
;PROGRAMAPARAILUSTRARAEXECUCAOPASSOAPASSO
;SERAUSADAACHAVESW3PARAEXECUTARPASSOAPASSOOLOOPPRINCIPAL
;CADAVEZQUESEACIONASW3,UMAINSTRUCAOEXECUTADA
;
RTDEQU100
SW3EQUP3.3
;
DEFSEGPROG,CLASS=CODE,START=0SEGPROG
;
ORGRESET
AJMPINIC
;
ORGEXTI1
AJMPEXT1
50
;
ORG50H
INICMOVA,#01001001B;CODIGOPARAACENDER
CLRC;LEDSEMSEQUENCIA
MOVP1,A
SETBEX1;HABILITARINT1
SETBEA;HABILITARGERAL
SETBIE1;PROVOCARINT1

NOP;AQUIOPROGINTERROMPE
PRINCIPAL
RLCA;RODARCODIGO
MOVP1,A;ACENDERLEDS
SJMPPRINCIPAL;RETORNAR
;
ORG100H
EXT1ACALLRBT_0_1;TRANSICAODE0A1
ACALLRBT_1_0;TRANSICAODE1A0
RETI
;
;ELIMINARBOUNCINGNASTRANSICOESDE0PARA1RBT_0_1
MOVR7,#RTD
LB1JNBSW3,RBT_0_1
DJNZR7,LB1
RET
;
;ELIMINARBOUNCINGNASTRANSICOESDE1PARA0RBT_1_0
MOVR7,#RTD
LB2JBSW3,RBT_1_0
DJNZR7,LB2
RET
END

8PORTA PARALELA
A famlia MCS-51 oferece 4 portas paralelas, denominadas P0, P1, P2 e P3 e
para cada porta existe um SFR. De acordo com a configurao do hardware, uma ou
mais portas estaro totalmente ou parcialmente disponveis.

8.1Registros Envolvidos
Os 4 registros, P0, P1, P2 e P3 so na realidade os latches das portas e no os
pinos da CPU. Algumas instrues operam com o contedo destes latches e outras com
os valores dos pinos. As portas paralelas so utilizadas pela CPU para efetuar vrias
tarefas:
P0 byte inferior de endereos e dados ==> BUS
P2 byte superior de endereos
P3 0 RXD - entrada serial
1 TXD - sada serial
2 *INT0 - interrupo externa 0
3 *INT1 - interrupo externa 1
4 T0 - entrada externa para o contador 0
5 T1 - entrada externa para o contador 1
6 *WR - strobe para escrita na memria de dados externa
7 *RD - strobe para leitura da memria de dados externa
Durante uma operao de escrita ou leitura de memria de dados, por exemplo,
os dados das portas P0 e P2 so removidos e por eles se emitem os endereos e dados.
Terminadas as operaes, o contedo do latch reaparece nos pinos da CPU. Existem

detalhes sobre a utilizao de cada porta como entrada ou sada mas, de uma
formageral, pode-se dizer que:
Sada: Basta escrever 0 ou 1 na porta que o nvel lgico aparece nos pinos
corretos.
Entrada: todos as portas (exceto P0) possuem um pull-up interno; quando se
escreve 1 em um bit da porta, diz-se que este bit est programado como entrada pois
dispositivos externos podem colocar (forar) este 1 em 0. Assim, para ter uma porta
como entrada, escreve-se 1 e depois com a leitura ser lido 1 ou 0 de acordo com o nvel
que externamente est aplicado no pino. Devido a isto, as portas so chamadas quasibidirecionais.

8.2Descrio Do Funcionamento
Cada porta paralela constituda por trs partes:

um registro latch (SFR ==> P0,P1,P2,P3)

um driver de sada

um buffer de entrada

Os drivers de sada de P0 e P2 e o buffer de entrada de P0 so usados para


acessar a memria externa de programa ou de dados.

8.2.1Porta P1
A figura 8.1 ilustra o esquema eltrico da porta 1.

Figura 8.1 - Esquema para um bit da porta P1.

O latch de um bit da porta P1 (um bit do SFR P1) representado por um flipflop D, no qual se escreve um valor do bus interno atravs de um pulso Write to Latch
gerado pela CPU. A sada do latch colocada no bus interno atravs de um sinal Read
Latch gerado pela CPU. O nvel do pino da porta colocado no bus interno atravs do
sinal Read Pin, tambm gerado pela CPU.
Algumas instrues que lem o estado da porta operam com Read Latch
enquanto outras operam com Read Pin. Isto ser visto com mais detalhes.
Quando escreve na porta:

0*Q=1 _FET ON sada=0

1*Q=0 _FET OFF sada=1 (pull-up)

Para ser usado como entrada, o latch da porta deve estar em 1; isso desconecta o
driver FET da sada. Assim, o pino da porta vai para um nvel alto, levado pelo pull-up.
Esse pino poder serlevado para o nvel baixo por qualquer elemento externo. Devido
ao pull-up interno, essa porta denominada "quasi-bidirecional". Quando est
configurado para entrada, este vai para 1 e, se externamente levado para baixo, ento
fornece corrente. Se a porta estivesse em alta impedncia quando configurado como
entrada, ento seria classificado como "bidirecional verdadeiro".

Figura 8.2 - Pino do microcontrolador sendo levado a 0 por uma sada TTL.

8.2.2Porta P3

Na figura 8.3 est o esquema eltrico da porta P3. Pela porta P3 tm-se diversas
funes alternativas: *RD, *WR, T0, T1, TXD, RXD, *INT0, *INT1.

Figura 8.3 - Esquema para um bit da porta P3.


Quando AOF=1, tem-se na sada a porta P3. Assim, se AOF=1 e for escrito:
0 - Q=0 - G=1 - FET ON - sada=0
1 - Q=1 - G=0 - FET OFF - sada=1 (pull-up)
Quando o latch de P3 contm 1, a sada pode ser controlada pelo sinal "Alternate
Output Function - AOF". J foram estudadas as funes alternativas geradas atravs de
P3. Se o latch de P3 est em 0, o pino da porta estar em zero e as diversas funes
alternativas no estaro disponveis. P3 tambm uma porta quasi-bidirecional.

8.2.3Porta P2
O esquema da figura 8.4 ilustra a porta P2. Por esta porta tambm sai o byte
mais significativo dos endereos.

Figura 8.4 - Esquema para um bit da porta P2.


O funcionamento muito semelhante aos casos anteriores.
Se o CONTROL = 0 e for escrito:
0 - Q=0 - M=0 - G=1 - FET ON - sada=0
1 - Q=1 - M=1 - G=0 - FET OFFsada=1 (pull-up)
Se o CONTROL=1, ADDRESS controla o nvel no pino. Assim, com
CONTROL=1:
ADDR=0 _M=0 _G=1 _FET ON _sada=0
ADDR=1 _M=1 _G=0 _FET OFF _sada=1 (pull-up)
De acordo com o nvel lgico do sinal de CONTROL, permite-se a sada ao
latch de P2 ou ao byte alto de endereo.

8.2.4Porta P0
A figura 8.5 ilustra o esquema eltrico da porta P0. Esta porta a mais complexa
pois atende a trs funes:

bus de dados da CPU

byte menos significativo dos endereos

porta paralela (bidirecional verdadeira)

Figura 8.5 - Esquema para um bit da porta P0.


A porta P0 difere das demais por ser utilizada para transportar dados durante as
operaes com a memria e portanto necessita ser bidirecional verdadeira. Se ela est
sendo utilizada como porta paralela, ento CONTROL = 0. Com isso G1=0 e F1 est
sempre cortado (no existe pull-up).
Se CONTROL=0 e for escrito:
0 - *Q=1 - G2=1 - F2 ON - sada=0
1 - *Q=0 - G2=0 - F2 OFF - a sada flutua (no h pull-up).
Note que, quando se escreve 1, a porta pode ser utilizada como uma entrada de
alta impedncia. Para transform-la em uma porta quase-bidirecional basta colocar
externamente resistores de pull-up.
Quando a porta utilizada para enviar endereos ou dados, CONTROL =1 e a
sada depende de ADDRESS/DATA (ADR/DT):
ADR/DT=0 - G1=0 - F1 OFF e G2=1 - F2 ON - sada=0
ADR/DT=1 - G1=1 - F1 ON e G2=0 - F2 OFF - sada=1
(nunca se ter F1 ON e F2 ON - curto-circuito).
Para que a porta possa ser usada na leitura de memria necessria alta
impedncia;
nesse caso CONTROL=0 e se fora uma escrita (com 1) no latch de P0.
Se CONTROL=0 - G1=0 - F1 OFF
Se Q=1 - *Q=0 - G2=0 - F2 OFF

Se F1 e F2 esto em OFF _alta impedncia.


A leitura da memria feita com o sinal READ PIN.

8.3Escrita Nas Portas


Na execuo de qualquer instruo que altere o latch de uma porta, o novo valor
chega ao latch durante S6P2, que o final do ciclo de instruo. Entretanto, os latches
so na realidade enviados at os buffers de sada durante a fase P2 de qualquer perodo
de clock (durante P1 se mantm o mesmo valor). Assim, o novo valor aparecer no pino
durante P1 do prximo ciclo (que S1P1).
Se for necessria uma mudana de 0 para 1 nas portas P1, P2 e P3, o PULL-UP
dever entregar bastante corrente para que essa transio seja rpida. Nas transies de
0 para 1, durante S1P1 e S1P2, entra em atividade um PULL-UP adicional que pode
fornecer 100 vezes mais corrente que o PULL-UP normal. Note que os PULL-UP so
FETs e no transistores bipolares.
O PULL-UP normal um FET (depletion-mode) com a porta (G) conectada
fonte (S). Quando est conectado terra, circula por ele uma corrente de 0,25 mA.

Figura 8.6 - O FET (depletion mode) usado como PULL-UP para as portas paralelas.
(HMOS).

Na figura 8.7. est o PULL-UP adicional que acelera as transies de 0 para 1.


Note que quando A=B=0, a sada S vai para 1 e com isto o transistor entra no circuito
fornecendo at 30 mA.

Figura 8.7 - Controle para o FET (enhanced mode). (HMOS).


Na figura 8.8 est o esquema completo da sada da porta paralela.

Figura 8.8 - Acionamento do FET (enhanced mode) nas transies de 0 _1.


(HMOS).
Note que se *Q vai de 1 0, durante dois perodos de clock a sada (S) da
porta NOR ser 1, permitindo que o enhancement mode FET entre em paralelo com o
FET (pull-up) normal, dando maior capacidade de corrente. Este esquema utilizado
em HMOS. Nas famlias CHMOS o esquema varia um pouco mas a idia a mesma.
Os buffers de sada das portas P1, P2 e P3 podem acionar at 4 cargas LS TTL.
Eles podem ser acionados (trabalhando como entrada) por circuitos TTL e NMOS.
Como possuem pull-up interno, essas portas tambm podem ser acionadas por TTL de
coletor aberto mas as transies de 0 1 no sero rpidas porque o pull-up tem baixa
capacidade de corrente. A porta P0 pode acionar at 8 LS TTL (modo BUS). Quando
opera como porta paralela, necessrio pull-up externo para acionar outras entradas.
Algumas instrues de leitura utilizam o dado armazenado no latch, enquanto outras
usam o estado do pino. As instrues que usam o dado do latch so aquelas que lem o
valor, (possivelmente) o alteram e o escrevem de novo (read-modify-write). Quando o

destino do operando uma porta ou um bit da porta, utilizado o dado do latch e no o


valor do pino. A seguir est uma lista destas instrues que operam com o dado do latch:
Instruo Exemplo
ANL ANL P1,A
ORL ORL P2,A
XRL XRL P3,A
JBC JBC P1.1,LB (pula se bit=1 e zera o bit)
CPL CPL P3.0
INC INC P2
DEC DEC P2
DJNZ DJNZ P3,label
MOV PX.Y,C MOV P1.0,C
CLR PX.Y CLR P1.2
SETB PX.Y SETB P1.3
Pode parecer que as 3 ltimas instrues no so do tipo "read-modify-write".
Na realidade, lido todo o byte da porta, o bit considerado alterado e o novo byte
devolvido para a porta.
Uma razo para usar o dado do latch e no o valor do pino evitar um equvoco
na interpretao do nvel de tenso do pino, como por exemplo, quando um bit de uma
porta est sendo usado para acionar a base de um transistor.

Figura 8.9 - Bit 0 da porta 1 sendo usado para acender um led atravs de um
transistor.

Quando P1.0=1 LED aceso


Quando P1.0=0 LED apagado
Sem dvida quando P1.0=1 a tenso no pino vai estar em 0,7 V, o que um 0
lgico em nvel TTL. Espera-se que a instruo CPL P1.0 inverta o estado do led.
Supondo que o led esteja aceso (P1.0=1), se a CPU usa o valor do pino, ela vai obter 0 e
isto far P1.0=1, quer dizer, no vai mudar o estado do led. O melhor usar o dado do
latch, que est em 1.

8.4Exemplo - PISCA1 E PISCA2


Acender os 3 leds em seqncia. No esquecer de colocar um retardo. O led se
acende quando se pe nvel alto em um bit da porta.
;PISCA1.ASM
;
RTDEQU60000;65536>RTD>256
VERMELHOEQUP1.0
AMARELOEQUP1.1
VERDEEQUP1.2
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
ORGRESET
INICMOVP1,#0;APAGAOSLEDS
AQUISETBVERMELHO
LCALLRETARD
CLRVERMELHO
SETBAMARELO
LCALLRETARD
CLRAMARELO
SETBVERDEL

CALLRETARD
CLRVERDE
SJMPAQUI
;
;ROTINAPARAGERARUMRETARDO
RETARD
MOVR7,#HIGHRTD
L1MOVR6,#LOWRTD
L2DJNZR6,L2
DJNZR7,L1
RET
END

Uma outra soluo, muito mais simples, pode ser utilizada. Como no so
usados os demais pinos da porta P1, pode-se escrever qualquer coisa neles. Usa-se ento
o Acc e o CY para obter um total de 9 bits e, atravs de rotaes, consegue-se gerar os
cdigos para acender os leds em seqncia. A figura 8.10 ilustra a idia.

Figura 8.10 - Uso do Acc e CY para acender leds em seqncia.

Se Acc e CY so inicializados com estes valores, basta uma rotao com CY


(RLC A) para mudar o led que deve ficar aceso. A cada rotao escreve-se o contedo
de Acc em P1.

;PISCA2.ASM
;
RTDEQU60000;65536>RTD>256
VERMELHOEQUP1.0
AMARELOEQUP1.1
VERDEEQUP1.2
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
ORGRESET
INICMOVA,#01001001B;01001001
CLRC
AQUIMOVP1,A
ACALLRETARD
RLCA
SJMPAQUI
;
;ROTINAPARAGERARUMRETARDO
RETARDMOVR7,#HIGHRTD
L1MOVR6,#LOWRTD
L2DJNZR6,L2
DJNZR7,L1
RET
END

8.5Exemplo - CHAVE1, CHAVE2 E CHAVE3


Usando os trs leds como um contador de trs bits, construir um programa que
conte os acionamentos da chave SW2 (a contagem ser observada nos trs leds). Note
que a chave no necessita de pull-up porque usa o pull-up interno da porta. A figura 8.11
ilustra as conexes.

Figura 8.11 - Conexes de leds e chave no circuito de prticas.

No primeiro programa ser usada uma soluo simples, que tem o problema de
bouncing.
;CHAVE1.ASM
;
SW2EQUP1.3
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
ORGRESET

INICCLRA;ZERARCONTADOR
MOVP1,A;APAGARLEDS
SETBSW2;PROGRAMARP1.3COMOENTRADA
AQUI1JBSW2,AQUI1;AGUARDARACIONAMENTO
INCA
MOVP1,A;DARSADAAOCONTADOR
SETBSW2;GARANTIRP1.3COMOENTRADA
AQUI2JNBSW2,AQUI2;AGUARDARLIBERARCHAVE
SJMPAQUI1
END

No segundo programa apresentada uma soluo para eliminar o bouncing


utilizando retardos. Ao detectar uma transio na chave, o programa aguarda um tempo
para que se extinga o bouncing. O tempo que se deve aguardar determinado de forma
emprica.
;CHAVE2.ASM
;
;NESTEPROGRAMASEPRETENDEELIMINAROBOUNCINGCOMRETARDOS
;OVALORDORETARDOPARTICULARPARACADACIRCUITO
;(DEPENDEDOTAMANHODOSCABOS,QUALIDADEDACHAVE,ETC)
;RECOMENDASE:DETERMINAREMPIRICAMENTEOMELHORRETARDOPARACADA
;CIRCUITO
;
RTDEQU500;RTD>256
SW2EQUP1.3
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
ORGRESET
INICCLRA;ZERARCONTADOR

MOVP1,A;APAGARLEDS
SETBSW2;PROGRAMARP1.3COMOENTRADA
AQUI1JBSW2,AQUI1;AGUARDARACIONAMENTO
INCA
MOVP1,A;DARSADAAOCONTADOR
SETBSW2;GARANTIRP1.3COMOENTRADA
ACALLRTD;ELIMINARBOUNCING
AQUI2JNBSW2,AQUI2;AGUARDARLIBERARCHAVE
ACALLRTD;ELIMINARBOUNCING
SJMPAQUI1
;
;ROTINAPARAGERARUMRETARDO
RETARDMOVR7,#HIGHRTD
L1MOVR6,#LOWRTD
L2DJNZR6,L2
DJNZR7,L1
RET
END

A soluo de aguardar um tempo depois de detetar uma transio na chave


funciona bem, mas oferece duas principais desvantagens. A primeira que se aguarda
um intervalo de tempo fixo, ou seja, se a chave de baixa qualidade trocada por uma de
melhor qualidade e que possua pouco bouncing, tem-se que mudar o programa. A
segunda desvantagem sua vulnerabilidade a rudos pois estes podem provocar
acionamentos indevidos. O programa chave 3, apesar de ser simples, soluciona estes
problemas. Usam-se duas rotinas que detectam transies de 0 1 e de 1 0; o que se
especifica quanto tempo a chave deve estar em 0 ou em 1 para que se considere o
acionamento vlido (para que se considere o fim do bouncing).
;CHAVE3.ASM
;
;SOLUCAOMAISEFICIENTEPARAELIMINAROBOUNCINGCOMRETARDOS
;USAMSEROTINASQUEAGUARDAMAESTABILIZACAODACHAVE
;HAUMAPARAASTRANSIESDE0PARA1EOUTRADE1PARA0

;ESTATECNICASEADAPTAMELHORASVARIACOESENTREOSCIRCUITOS
;
RTDEQU100
SW2EQUP1.3
;
DEFSEGPROG,CLASS=CODE,START=0
SEGPROG
ORGRESET
INICCLRA;ZERARCONTADOR
MOVP1,A;APAGARLEDS
SETBSW2;PROGRAMARP1.3COMOENTRADA
AQUIACALLRBT_1_0;TRANSICAOLIMPADE1PARA0
INCA
MOVP1,A;DARSADAAOCONTADOR
ACALLRBT_0_1;TRANSICAOLIMPADE0PARA
SJMPAQUI
;
;ELIMINARBOUNCINGNASTRANSIESDE0PARA1
RBT_0_1MOVR7,#RTD
LB1JNBSW2,RBT_0_1
DJNZR7,LB1
RET
;
;ELIMINARBOUNCINGNASTRANSIESDE1PARA0
RBT_1_0MOVR7,#RTD
LB2JBSW2,RBT_1_0
DJNZR7,LB2
RET

END

9PORTA SERIAL
9.1Comunicao Srie Sncrona E Assncrona
Uma comunicao srie de dados poder ser efetuada de dois modos, sncrono e
assncrono, na comunicao sncrona simples o transmissor e receptor partilham um
mesmo sinal de relgio que permite o sincronismo da transmisso com a recepo, neste

tipo de comunicao existem muitos formatos e protocolos. Na comunicao assncrona


os bits de dados so enviados a uma velocidade constante mas com um formato
especfico, no entanto os dados so transmitidos de um forma assncrona na linha.
As UARTs (universal Assncrona Recebe e Transmite), dispositivos que
permitem implementar uma comunicao srie funciona na sua essncia como registo
de deslocamento de srie para paralelo na recepo e ao inverso na transmisso de
paralelo para srie. O formato da transmisso srie mostrado na figura 9.1, e temos
que ter em conta a configurao de vrios parmetros, assim:

9.2Parmetros da comunicao assncrona


Velocidade de transmisso: indica o numero de bits transmitidos por segundo
representa-se em bits/s, tambm utilizada a designao inglesa baud-rate, que
significa o numero de smbolos transmitidos para a representao de cada bit por
segundo. No caso da UART do 8051 o numero de bits/s igual ao baud-rate (pois para
cada bit transmitido utilizado um smbolo 0 ou 1) , existem contudo situaes em
que os bits/s inferiores ao baud-rate, casos de modems e outros mecanismo de
transmisso em que se codifica vrios bits/s num nico smbolo. Como se mostra na
figura 9.1, o formato da transmisso assncrona de uma palavra :
start bit: nvel lgico zero, serve para indicar ao receptor que vai iniciar a
transmisso de uma palavra. No estado repouso a linha esta a nvel lgico 1 (idle
state). Para iniciar a transmisso de uma palavra o emissor coloca linha a zero durante o
tempo de 1 bit, O start bit sempre 0 e s um bit.
Numero de bits da palavra: o numero de bits de dados que constituem a
palavra. Aqui o bit menos significativo transmitido em primeiro lugar, sendo os outros
transmitidos consecutivamente at ao mais significativo. Tipicamente so 7 ou 8 bits de
dados, no entanto os dispositivos UARTs permitem a configurao de 5, 6, 7 e 8 bits de
dados.
Bit de paridade: este bit opcional e poder indicar paridade par ou impar,
recorde-se que o bit de paridade obtido no caso da paridade par pela soma dos bits 1s
da palavra de dados e do bit de paridade um numero par, no caso de paridade mpar a
soma de bits 1s e do bit de paridade um numero mpar. Como exemplo se a palavra de
dados tiver 3 bits 1s, o bit de paridade para a paridade par 1, o que faz na sua
totalidade 4 bits 1s - numero par, e ser 0 para paridade mpar o que faz 3 bits de 1s
numero mpar. A utilizao deste bit permite a identificao da existncia de erros na
comunicao.
stop bit : sempre a 1, e poder ser 1 ou 2 bits, tendo como funo guardar
margem entre duas palavras transmitidas consecutivamente. Para se estabelecer uma
comunicao srie entre dois equipamentos , pois necessrio considerar todos os
parmetros anteriormente referidos, velocidade, numero de bits de dados da palavra, bit
de paridade e numero de stop bits.

Figura 9.1- Formato da transmisso srie assncrona.

Uma comunicao srie assncrona entre dois dispositivos nunca utiliza a norma
TTL, devido sua baixa imunidade ao rudo, pois obrigaria a uma curta distncia entre
equipamentos ( um a dois metros). Devido a esse facto foram institucionalizadas vrias
normas elctricas para a transmisso tais como: RS232 ou V24, RS 422... A mais
utilizada e universalmente aceite pela esmagadora maioria dos fabricantes a RS232 ou
V24, tambm utilizada nas portas srie dos computadores pessoais PC.

Figura 9.2- Exemplo a transmisso do caractere A, em cdigo ASCII


01000001b, com o formato de 8 bits de dados, paridade mpar, e um stop bit,
para uma velocidade de transmisso de 300 baud, significa que cada bit
transmitido na razo de 1/300 bits/s.
Para estabelecer uma comunicao full-duplex (recepo e transmisso em
simultneo) entre dois dispositivos, so necessrias 3 ou 4 linhas como mostrado na
figura 9.3 e 9.4.

Figura 9.3- Para a transmisso entre dois equipamentos, so necessrias 3


ligaes Tx, Rx, GND, massa serve de referencial (caso de comunicao
R232).

Figura 9.4- Para a transmisso entre dois equipamentos, no caso de se utilizar


uma comunicao diferencial do tipo RS422, so necessrios 4 fios 2 para Tx
e 2 para Rx.

9.3A Porta Serial no 8051


A porta serial no 8051 full duplex o que significa que pode transmitir e receber
em simultneo. Existe um buffer de recepo, ou seja pode receber um segundo byte,
mesmo antes de o primeiro ser lido. Se, entretanto o byte que se encontra no registro de
recepo no for lido enquanto o 2 byte estiver a chegar este perde-se. Os registros de
transmisso e recepo, so acedidos atravs do mesmo registro SBUF. A escrita no
SBUF, faz com que se escreva no registro de transmisso podemos chamar-lhe TXD,
uma leitura do SBUF, faz com que se leia do registro de recepo RXD.

9.4Registros Envolvidos

A porta serial possui um registrador chamado SBUF, o mesmo que se usa para
enviar ou receber dados pela porta serial. Na realidade, o nome SBUF se refere a dois
registros, um somente para leitura por onde se recebem os dados que chegam pela porta
serial e outro somente para escrita por onde se transmitem dados pela porta serial. O
modo de operao da porta serial controlado pelo registro SCON, que ilustrado na
figura 9.6. A tabela 9.1 apresenta um resumo dos modos de operao.

Figura 9.5 - Descrio do registro SCON.


Tabela 9.1 Modos de operao

O registro PCON tambm toma parte na gerao do baud rate da porta serial.
Este registro ilustrado na figura 9.6

Figura 9.6 - Descrio do registro PCON.

9.5Modos de funcionamento
A porta srie pode funcionar em 4 modos:
MODO 0
Aqui 8 bits so transmitidos atravs do registo TXD, e so recebidos atravs do
RXD: sendo 8 bits de dados (LSB primeiro). O baud rate fixo a 1/12 da frequncia do
relgio.

Figura 9.7 - Esquema da porta serial em modo 0.

MODO 1
Aqui 10 bits so transmitidos atravs do registo TXD, e so recebido atravs do
RXD: sendo um start bit (nvel lgico 0), 8 bits de dados (LSB primeiro) e um stop bit
(nvel lgico 1). Na recepo, o stop bit fica no bit RB8 do registo SCON. O baud rate
varivel.

Figura 9.8. Frame de bits gerado pela porta serial em modo 1.

Figura 9.9. Esquema para a gerao do baud rate (BR) no modo 1.


MODO 2
Aqui 11 bits so transmitidos atravs do registo TXD, e so recebidos atravs do
RXD: sendo um start bit (nvel lgico 0), 8 bits de dados (LSB primeiro), um nono bit
programvel e um stop bit (nvel lgico 1). Na transmisso o nono bit o bit TB8 do
registo SCON, este poder ser o bit de paridade. Na recepo, o nono bit fica no bit RB8
do registo SCON. O baud rate configurado para ser 1/32 ou 1/64 da frequncia de
relgio, dependendo do valor do bit SMOD.

Figura 9.10 - Frame de bits gerado pela porta serial no modo 2.

Figura 9.11 - Esquema para a gerao do baud rate (BR) no modo 2.

MODO 3
Aqui 11 bits so transmitidos atravs do registo TXD, e so recebidos atravs do
RXD: sendo um start bit (nvel lgico 0), 8 bits de dados (LSB primeiro), um nono bit
programvel e um stop bit (nvel lgico 1). Na transmisso o nono bit o bit TB8 do
registo SCON, este poder ser o bit de paridade. Na recepo, o nono bit fica no bit RB8
do registo SCON. O baud rate varivel. Nos quatro modo de funcionamento, a
transmisso habilitada pela escrita no registo SBUF. A recepo iniciada no modo 0,
pelas condies RI=0 e REN=1, nos outros modos a recepo iniciada por REN=1.
REGISTO SCON (Serial CONtrol : 98h enderevel bit a bit )
Este registo permite a configurao do modo de funcionamento da porta, onde se
habilita a recepo onde so configurados os nonos bits da recepo e da transmisso,
esto tambm as flags RI e TI, usadas para indicar a recepo de dado e transmisso de
um dados respectivamente, tambm usadas pela interrupes associadas porta srie.

Figura 9.12. Frame de bits e gerao do baud rate para a porta serial no
modo

9.6Velocidade de Transmisso/Recepo ( baud-rate)


O baud rate no Modo 0 fixo a:

Modo 0:
Velocidade de transmisso

O baud rate no modo 2 depende do valor do bit SMOD no registo de funes


especiais PCON. Se SMOD igual a 0 (que o valor no RESET) o baud rate 1/64 da
frequncia de oscilao, se SMOD=1, ento o baud rate 1/32 da frequncia de
oscilao.

Modo 2:
Velocidade de transmisso:

Nos modos 1 e 3 a velocidade de transmisso determinada pelos overflow do


timer 1 ou timer 2, ou pelos 2, um para a transmisso e outro para a recepo.

Modos 1 e 3:
O timer 1 usado para gerar o baud rate, o baud rate nos modos 1 e 3, so
determinados pelo overflow do timer 1 e pelo valor do bit SMOD.

Velocidade de transmisso:

Quando se utiliza o timer 1 para gerar o baud rate, a interrupo associada a este
timer deve ser desabilitada. O temporizador pode ser configurado como temporizador

ou contador e em qualquer dos seus modos de funcionamento, de qualquer modo


habitual utilizar o modo 2 (auto - recarga), ento poderemos rescrever a expresso
anterior como:
Velocidade de transmisso

Tabela 9.2 - REGISTO PCON (Power CONtrol: 87h no enderevel bit a bit )

9.6 Exemplos de cdigo


O algoritmo de comunicao consiste em:
1) No incio, todos os escravos esto com SM2 = 1
2) Quando o mestre quiser enviar dados para algum escravo, ele escrever 1 em
seu bit TB8 e ento enviar serialmente o endereo do escravo desejado, e como
teremos todos os bits RB8 em 1, todos escravos sero interrompidos para verificar se
seu o endereo enviado.
3) O escravo selecionado zerar o seu bit SM2 e estar preparado para receber os
dados, os quais tero agora o nono bit (RB8) em 0.
4) Os demais escravos permanecero com SM2 em 1 e, dessa forma, no sero
mais interrompidos pois os dados tm RB8 = 0.

5) Em resumo, o mestre envia endereos com o nono bit em 1 e os dados com o


nono bit em 0, portanto, se o mestre desejar se comunicar com outro escravo basta
enviar o novo endereo com o nono bit em 1.
Rotina de inicializao da UART para transmisso a 9600,N,8,1.

;**********************************************************************
;**Nome:INIT_UARTconsidereseumcristalde11.0592MHz
;**Descrio:InicializaaUART
;**Funo:InicializaaUARTparatransmitira9600,N,8,1
;**Entradas:Nenhumas
;**Sadas:Nenhumas
;**Registosutilizados:PCON,SCON,TMOD,TH1,TCON
;**********************************************************************
INIT_UART:
movSCON,#50H;*modo1
setbTI;*inicializaTx
movTMOD,#20H;*configuratimer1emautorecarga
movTH1,#0FAH;*constantederecargaparavelocidadede9600
70
orlPCON,#80H;*colocabitSMODactivo
movTCON,#40H;*habilitaotimer1
ret;

Rotinas para transmitir e receber pela porta srie.


;**********************************************************************
;**Nome:envia_char
;**Descrio:enviacaractereparaaUART
;**Entradas:A=caractereaenviar
;**Sadas:Nenhumas
;**Registosutilizados:SBUF

;**********************************************************************
envia_char:
clrTI;resetflagdeTx
movSBUF,a;enviaocaracterequelhepassadoemA
jnbTI,$;esperaatacabaratransmisso
clrTI;resetflagdeTx
ret;retornadasubrotina
;*********************************************************************
;**Nome:recebe_char
;**Descrio:recebecaractereparaaUART
;**Entradas:Nenhumas
;**Sadas:devolveemA,ocaractererecebido
;**Registosutilizados:SBUF
;*********************************************************************
recebe_char:
jnbRI,$;esperaatquechegueumdado
mova,SBUF;locaracteredaUART,paraoregistoA
clrRI;resetflagdeRx
ret;retornadasubrotina

Rotinas para transmitir uma string (Microcontroladores) pela porta srie.


;*********************************************************************
;**Nome:envia_string
;**Description:enviaumconjuntodecaracterespelaportasrie
;**Chamadas:envia_char
;**Entradas:Nenhuma
;**Sadas:Nenhuma
;**Registosutilizados:A,DPTR
;*********************************************************************

envia_string:
movdptr,#ID_string;*ponteiropararotinaatransmitir
ciclo:
clra;garanteooffsetdoA=0
movca,@a+dptr;lovalordatabela
jzemvia_string_X;sefor00h,significaqueofimda
;stringesai
incdptr;senocontinua,actualizaoponteirodptr
lcallenvia_char;chamarotinaparaenviarumcaractere
ajmpciclo;cicloatacabar
envia_string_X:
ret
ID_string:
Db'Microcontroladores'
db0DH;caracterescontrolo:carriage return
db0AH;caracterescontrolo:linefeed
db00H;valor00h,paraindicarofimdasequncia
;atransmitir

10COMPARAO COM OUTROS MICROCONTROLADORES

10.1PIC16
Memria de programa (ROM)
A memria de programa dos PICs bastante diferente da do 8051.
Cada endereo de memria tem 14 bits. Ex.: quando se fala que um PIC tem 1K
de memria de programa, quer dizer que ele tem 1024 endereos com 14 bits cada.
Estes 14 bits contm, alm da instruo, os dados a ela associados.
Ex.: no 8051 MOV A,#0FF (74,FF) 2 endereos de 8 bits
no PIC MOVLW 0xFF (30FF) 1 endereo de 14 bits
Em um PIC de 1K de memria poder ser colocado 1K instrues. Em um 8051
a quantidade e definida pelo nmero de posies de memria que cada instruo ocupa
(entre 1 e 3), mas certamente a quantidade de instrues ser bem menor que 1K.
O PIC no suporta memria de programa externa.

H modelos de PIC com memria de programa tipo OTPROM, EEPROM e


FLASH.
Em PICs com memria maior que 2K a memria ROM dividida em pginas e
a troca de pginas no automtica, necessitando muita ateno do programador.

Memria RAM
Como o 8051 o PIC tambm possui memria RAM interna. Cada endereo
tambm possui 8 bits.
Geralmente os PICs tem sua memria RAM dividida em bancos. EX.: PIC16F84
com 3 bancos. PIC16C924 com 4 bancos.
Estes bancos so diferentes dos bancos de registradores do 8051. Entre eles
sempre h uma rea comum para troca de dados entre os bancos.
O PIC no suporta memria RAM externa.

I/O
Normalmente, como no 8051, os pinos dos PICs podem ser utilizados como
entrada ou sada. Porm nos PICs os pinos devem ser configurados. Esta configurao
pode ser alterada a qualquer momento de execuo do seu software, via software. Assim
como no 8051 as portas de I/0 so tratadas como endereos da memria interna.

Perifricos
Os PICs tem uma grande gama de perifricos.
Dependendo do modelo podem ter: EEPROM, interface serial SPI, I2C e CAN,
entradas analgicas, driver para LCD, contadores, timers, watchdog, etc.

Instrues
Os PICs possuem uma quantidade de instrues bem menor que o 8051. No h
instrues de multiplicao e diviso.
O PIC tem algo parecido com um cache de instrues fazendo com que a cada
ciclo de mquina seja encerrada uma instruo, apesar delas necessitarem de 2 ciclos.
Isto s no ocorre com instrues de salto, que realmente utilizam 2 ciclos de mquina.

Cada ciclo de mquina leva quatro ciclos de clock.


Importante: todos os bits de RAM podem ser acessados pelas instrues de teste
e manipulao. No 8031 isto s ocorre com os endereos de 20 a 3F e com os
especficos como o Acc, B, portas, TMOD, etc.

Custo
Um PIC 16F84 U$ 7,00
Um PIC 16C924 U$ 11,00
Ferramentas de Desenvolvimento
MPLAB - Software freeware para editar, simular e compilar os programas.
GRAVADOR - Vrios modelos esto disponveis na Internet, principalmente
para o PIC 16F84, que um dos mais comuns.
MPLAB-C - Compilador C para PIC, NO freeware.
C2C - Compilador C freeware para PIC. Est na pgina:
http://www.picant.com/c2c/c.html

Outros dados
Depois do 8051 a linha PIC a mais popular, muito devido ao fato de serem os
primeiros microcontroladores a possuirem verses com memria de programa flash.
A SCENIX (http://www.scenix.com) possui micontroladores compatveis com
os PICs que rodam com at 100MHz de clock.
Na figura 10.1, segue o diagrama interno do PIC16F86

Figura 10.1 Diagrama do PIC 16F86.

10.2Microcontroladores Motorola - HC05 e HC08


Memria
a famlia HC05 existe apenas uma memria, onde o endereo que determina
seu tipo (ROM, RAM, PORTS, TIMERS, etc.). O tamanho mximo da memria
principal no famlia HC05 64Kbytes.

Um exemplo genrico:
0000h - 001Fh - Portas de I/O , Timers, etc.
0020h - 00BFh - No usado
00C0h - 00FFh - RAM
0300h - 0700h - ROM

07F0h - 07FFh - Vetores de Partida.


No 8051, para cada tipo de dado existe um tipo de memria (ROM, RAM
externa, RAM interna).
Memria ROM
Esta localizada na memria principal. Por exemplo para o 68HC705JK1 est no
endereo de 300h at 700h e no 68HC908QY4 de EE00h at FDFFh.
Pode suportar ROM externa, dependendo do modelo.
A linha HC05 no possui memria rom flash. A linha HC08, mais moderna, tem
memria flash.
Memria RAM
Esta localizada na memria principal. No 68HC705JK1 de C0h at FFh e no
68HC908QY4 de 80h at FFh.
A famlia HC05 e HC08 no suportam memria RAM externa.
I/O
Normalmente, como no 8051, os pinos dos HC05 e HC08 podem ser utilizados
como entrada ou sada. Porm na famlia HC05 os pinos devem ser configurados. Esta
configurao pode ser alterada a qualquer momento de execuo do seu software, via
software. Assim como no 8051 as portas de I/0 so tratadas como endereos de
memria.
Perifricos
Tanto a famlia HC05, como a HC08, tem uma grande gama de perifricos.
Dependendo do modelo podem ter: EEPROM, interface serial SPI, I2C e CAN,
entradas analgicas, contadores, timers, watchdog, driver para LCD, etc.
Instrues
As famlia HC05 e HC08 contam com mais instrues que a famlia MCS51. As
instrues so mais amigveis o que torna o assembler muito fcil de ser programado e
entendido. O ciclo de mquina tem apenas 2 pulsos de clock para a linha HC05 e 4
pulsos para HC08 e as instrues levam de 2 a 5 ciclos de mquina para serem
executadas. A linha HC05 no conta com diviso em hardware.
Custo
Um MC68HC705KJ1A U$ 0,90
Um MC68HC705JIACS U$ 25,00

Um MC68HC908QY4 U$ 1,50
Ferramentas de Desenvolvimento
A Motorola fornece um software chamado MCUez, que um ambiente de
desenvolvimento completo, contando com assemblador, simulador e programador (para
a linha HC05 necessrio comprar o hardware do programador, para a linha HC08 o
gravador simples e h esquemas para o gravador na internet). O software gratuito.
Existem vrios ambientes de desenvolvimento disponveis por terceiros. Alguns
freeware e outros comerciais.
A Motorola no fornece o protocolo de gravao dos CIs da linha HC05, assim
necessrio adquirir um programador para esta linha, seja ele da Motorola ou de
terceiros.
No existe compiladores C grtis para os microcontroladores HC05, mas para a
linha
HC08 sim.
Outros dados
Os microcontroladores Motorola so amplamente usados em equipamentos
comercias devido a seu baixo custo.
A linha HC08 no necessita nem oscilador externo, nem reset externo. Um
oscilador e o reset externo podem ser utilizados, mas se no forem seus pinos podem ser
usados com I/O.
Na Figura 10.2, segue o diagrama interno do MC68HC705J1A.

Figura 10.2 Diagrama do MC68HC705J1A.


Na Figura 10.3, segue o diagrama interno do MC68HC908Q.

Figura 10.3 Diagrama do MC68HC908Q.

11REFERENCIAS BIBLIOGRFICAS
ZELENOVSKY, RICARDO. Micro Controladores MCS51 . Apostila do
Curso de Eletrnica da Escola Politcnica Superior do Exrcito Equatoriano.
INTEL CORPORATION. MCS 51 Microcontroller Family Users Manual.
USA. 1994.
MARINHO, JOS EDSON DOS SANTOS. MARINHO, EDNALDO DOS
SANTOS. Mini-Curso de Microcontrolador. Revista Saber Eletrnica Especial No.2.
Janeiro de 2001.

89
P rof. Ricardo Franco
www.engricardofranco.kit.net / engricardofranco@gmail.com

You might also like