Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1 Primeira Unidade 7
1.1 Explicação Intuitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Princı́pios Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Conceitos Básicos da Computação . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.2 Blocos Básicos de microcomputadores . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Arquitetura do Microprocessador/Microcontrolador . . . . . . . . . . . . . . . . . . . . 12
1.4 A CPU Internamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 O Microcontrolador 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1 Memória . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5.2 Circuito de Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.3 O Gerador de Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.5.4 Interrupção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.5 Registro de Controle das Interrupções . . . . . . . . . . . . . . . . . . . . . . . 29
1.5.6 Tempo para Atendimento das Interrupções . . . . . . . . . . . . . . . . . . . . 32
1.5.7 Ajuste das Interrupções Externas para serem Ativas em Nı́vel ou Transição . . 32
1.5.8 Hardware para expandir as possibilidade de Interrupção Externa . . . . . . . . 33
1.5.9 Exercı́cios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.5.10 Conjunto de Instruções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2 Segunda Unidade 41
2.1 Ciclos de Máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2 Portas de I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.1 Princı́pio de Funcionamento e Utilização . . . . . . . . . . . . . . . . . . . . . . 42
2.2.2 Caracterı́sticas Gerais e de Tempo dos Ports . . . . . . . . . . . . . . . . . . . 45
2.2.3 Uso das Portas de I/O para a Expansão da Memória de Dados e Programa . . 46
2.2.4 Seleção de Programa Externo ou Interno . . . . . . . . . . . . . . . . . . . . . . 47
2.2.5 Uso dos Pinos da Porta 3 como funções Alternativas . . . . . . . . . . . . . . . 47
2.2.6 Capacidade de Corrente nos Pinos de I/O . . . . . . . . . . . . . . . . . . . . . 48
2.3 Modos de Endereçamento das Instruções . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.1 Endereçamento por Registrador . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.2 Endereçamento Direto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.3 Endereçamento Indireto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.3.4 Endereçamento Imediato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.5 Endereçamento Relativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.6 Endereçamento Absoluto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.7 Endereçamento Longo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.8 Endereçamento Indexado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4 Temporizadores e Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4.2 Registros Envolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4.3 Modos de operação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.4.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3
4 SUMÁRIO
3 Terceira Unidade 65
3.1 Comunicação Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.2 Registros Envolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.3 Modos de Operação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.1.4 Cuidados com a Porta Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.1.5 Comunicação entre vários 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.1.6 Comunicação serial entre o 8051 e o PC . . . . . . . . . . . . . . . . . . . . . . 73
3.1.7 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.2 Programação em Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.1 Introdução teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.2 Estratégias de elaboração de programas . . . . . . . . . . . . . . . . . . . . . . 77
3.2.3 Fluxogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Referências Bibliográficas
SILVA, V. P. da. Aplicações Práticas do Microcontrolador 8051. [S.l.]: Editora Érica, 1998.
5
Capı́tulo 1
Primeira Unidade
O que é Microcontrolador
Tudo bem até aqui. E agora como vamos acessar a receita da torta? De que se compõe uma receita?
Pois bem, vamos procurar a página que contém o tı́tulo ”Torta de Chocolate”, encontra-se
então a receita que é equivalente a um ”software” de construção da torta, que está gravada em um
página ”ABC” do livro de receitas. Notemos que, na página, apenas lemos; não escrevemos nada
lá, ou seja, em trocado de miúdo será a nossa futura ”ROM” - Read Only Memory - e página o nosso
endereço, pois toda vez quisermos tal informação basta acessar tal endereço e obtê-lá.
Poderı́amos ainda necessitar de uma cobertura para a torta caso fossemos mostrar serviço para
o chefe da casa, vejamos que no livro de receita exista em uma outra página a rotina ”Cobertura
para Tortas” e que esta por sua vez estava seperada por servir para mais de um tipo de torta, e
poderı́amos partir para a sua execução e depois retornar a torta, o que é chamado também como
subrotina de um programa.
Agora se fossemos complicar um pouco mais a nossa receita e fossemos fazer uma receita e meia da
torta? Precisarı́amos de uma folha de rascunho (a memória ”RAM”) para ajustarmos a receita,uma
vez que na receita da torta não devo anotar nada nela. Esta memória temporária, será utilizada para
cálculos, e depois podemos nos desfazer do seu conteúdo, ou seja, jogar no lixo.
Quais são as diferenças sutis e importantes entre o microprocessador e o cozinheiro e suas an-
otações?
Bem, é que o microprocessador, por ser uma máquina limitada, não atende ao rico vocabulário
do ser humano cozinheiro que, além de rico, é sofisticado, impreciso e de múltipla interpretação, que
só uma máquina inteligente como o homem entede ( vejamos o exemplo: para o homem as seguintes
palavras são equivalentes: fazer = realizar = trabalhar. Para o microprocessador, o vocabulário é bem
reduzido e especı́fico; não existem adjetivos, sinônimos, etec...).
Então vimos que o microprocessador entende apenas algumas instruções básicas e se nos quisermos
que ele faça alguma coisa precisamos estudar e compreender precisamente a sua linguagem e limitar-
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
HARDWARE SOFTWARE
WRITE M
i
c
r
Perifericos: ROM
o
p
Teclado,mouse r (Programa de
Etc.... o So Linguagem
c. Leio Especifica
HARDWARE SOFTWARE
se a ela para fazer a máquina trabalhar. Este é o ASSEMBLER do microprocessador, que é o seu
conjunto de instruções.
1.Bit: abreviação de dı́gito binário (binary digit), que corresponde ao valor zero lógico(0) ou ao
valor um lógico(1). Podemos fazer uma analogia ao sistema numérico como sendo uma unidade
de um valor qualquer.
Página 8
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
5.Instrução: define uma única ação (tarefa) que o microcomputador pode executar por vez. As
ações das instruções podem corresponder a operações de leitura e escrita nos conteúdos dos reg-
istradores ou nas posições de memórias, a operação lógica e aritméticas, etc.
8.Firmware: programa (software) que está exclusivamente armazenado em uma memória não-
volátil(ROM/PROM/EPROM/E2PROM) de um equipamento inteligente. No mı́nimo o firmware
tem a finalidade principal de programar a forma de operação do hardware (número de portas de
entrada e saı́da, forma de comunicação serial, forma de operação dos timers/contadores etc.) e
de definir suas condições iniciais de operação.
9.Hardware: são as partes eletrônicas que compõem um microcomputador, como a mother board
(placa mãe que contém pelo menos o microprocessador ou o microcontrolador de um microcom-
putador), a placa de vı́deo de um microcomputador etc.
Página 9
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
CPU
A CPU é responsável pela inteligência da máquina, ou seja, é ela que tem a capacidade de tomar
decisões (ações) no sistema microcomputadorizado, por meio da execução de um programa. É ela que
executa o programa armazenado na memória do microcomputador, que foi projetado por um progra-
mador. Ao executar um programa, ela é responsável pela obtenção das informações a serem analisadas
por meio de dispositivos de entrada (teclado, canal de comunicação serial etc.), pelo processamento
(interpretação, manipulação, ordenação, modificação, cálculos lógicos ou matemáticos etc.) das in-
formações e pela resposta (ação) do sistema microcomputadorizado a uma determinada situação de
controle para a qual ele foi projetado a fim de controlar, por meio de um dispositivo de saı́da (escrita
na memória de vı́deo, transmissão de dados para outro microcomputador, acionamento de um relé,
acionamento de um bip,etc.). Assim, por exemplo, um microcomputador projetado para funcionar
como um caixa eletrônico de banco deve fazer as seguintes operações: leitura das informações conti-
das no cartão magnético (obtenção de informações), decodificação da senha digitada no teclado pelo
usuário, busca de saldo bancário nos bancos de dados do banco (processamento), disponibilização do
saldo bancário no monitor de vı́deo e a impressão em papel do referido saldo bancário (resposta do
sistema por meio da ação de gerar informações no monitor de vı́deo e também pela impressão em
papel das informações organizadas solicitadas pelo usuário).
b)Execução do programa, instrução por instrução: a palavra execução de uma instrução pode
significar a transferência de dados dos registradores internos do microprocessador/CPU para a
memória ou para os dispositivos de entrada e saı́da, e vice-versa. Pode também significar a ex-
ecução de operações lógicas e aritméticas etc.
Esse processo de buscar, interpretar e executar instrução por instrução é uma atividade contı́nua do
microprocessador e, dessa forma, um programa é processado por inteiro. A unidade de processamento
central (microprocessador) é constituı́da por três partes principais: a unidade lógica e aritmética, os
registradores internos e o bloco de temporização e controle.
a)Unidade Lógica e Aritmética (ULA): muitas vezes, também é chamada de ALU (Arithmetic
Logic Unit). Ela é responsável, principalmente, pela execução das instruções correspondentes às
operações aritméticas e lógicas. Além disso, uma caracterı́stica muitı́ssimo importante que deve
ser destacada, referente à ULA, é que, ao executar uma instrução de uma operação aritmética ou
lógica, ela também define a condição numérica do resultado por meio de alguns bits sinalizadores,
chamados de flags de sinalização, tornando-os iguais a um (setando-os) ou tornando-os iguais a
zero (resetando-os), e pela utilização de outras instruções que são ca- pazes de testar esses flags de
sinalização. Isso faz com que o sistema microcomputadorizado possa gerenciar uma determinada
situação de projeto ou desempenhar uma determinada tarefa bem-definida.
(p. ex.: 32 registrado- res de 8 bits etc.). Como são formados por flip-flops, é possı́vel realizar
operações de leitura e escrita de informações. Quando a CPU é ”desenergizada”por apresentar car-
acterı́sticas voláteis, essas informações são perdidas. Geralmente, eles são capazes de armazenar:
Unidades de Memórias
As unidades de memórias são divididas em duas partes: memória de armazenamento de programa
e memória de armazenamento de informações (dados, bytes, bits etc.).
de leitura e escrita na memória, para a realização dessa tarefa. Assim, é preciso utilizar uma
memória que tenha a caracterı́stica de realizar leitura e escrita de informações. Portanto, deve-se
utilizar memórias RAM (Random Access Memory). Lembre-se de que essas memórias apresentam
a caracterı́stica de se- rem voláteis. Portanto, sempre que o microcomputador for desenergizado, as
informações contidas nesse tipo de dispositivo serão perdidas.
Assim, ao programarmos a ROM com os códigos compatı́veis com a linguagem ou famı́lia perten-
centes ao microprocessador, ele será capaz de executar as tarefas por esse código designadas. Cabe ao
projetista entender perfeitamente o conjunto de instruções da máquina (o tão famoso ASSEMBLER)
e a sua estrutura fisica, e de interfaces, também conhecida como hardware.
Vejamos como os três blocos visto até aqui se comunicam entre si para dar funcionalidade ao
microprocessador. As vias de comunicação entre os blocos básicos são chamadas de barramentos ou
do inglês bus. Cada barramento é constituı́do por um número de vias (trilhas de cobre), nas quais
fluem informações em paralelo. São três os barramentos existentes: o barramento de endereços, de
temporização e controle e o de dados.
1.Barramento de endereços: A CPU utiliza esse barramento para definir os endereços das
posições de memória de programa em que ela irá buscar as instruções a serem executadas e
também para definir os endereços de memória de dados ou dos dispositivos de entrada e saida
para a troca de informações. Esse barramento é unidirecional.
3.Barramento de dados: A CPU utiliza esse barramento para receber as informações vindas da
memória ou dos dispositivos de entrada e saida ou então definir as informações para a memória
ou para os dispositivos de entrada e saı́da. Esse barramento é bidirecional. Vale ressaltar que
Página 12
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
4.Oscilador: É o elemento que gera o ”marcapasso”da CPU, que permite que o microprocessador
realize as suas tarefas internas e externas de maneira sincronizada e com velocidade predetermi-
nada.
5.Reset: É o elemento que faz a CPU iniciar suas rotinas internas e realizar também a primeira
leitura de instrução no endereço 0000h.
6.Interrupções: São pinos de acesso externo que permitem interromper o microprocessador, que
então interrompe suas tarefas atuais e atende aquelas planejadas pela interrupção solicitada.
Microprocessador Mem´oria
Oscilador
E/S
ou Nao−Volatil ou
Reset (ROM)
Unidade Cental de I/O
Processamento
Interupcao Volatil (RAM)
BUS Dados
BUS de Temp.
Controle
Bus Endereco
Como o computador só interpreta códigos binários, não existe a necessidade que nós programadores
converse no mesmo nı́vel, podemos utilizar os outros tipos de codificação Octal, Hexadecimal, Deci-
mal e por Nomes Simbólicos, que representam uma instrução, como por exemplo: ”add”= ”Soma”=
Código Hexa 24 ou 00100100 em binário (no exemplo, add=add A,#valor), para o microprocessador
8051. A CPU só entende dı́gitos binários, mas nós a memorizarmos por ”add”, que é mais fácil de
se lembrar. Assim através de um software (interpretador) irá transformar este ”add”em 00100100,
quando gravamos a ROM.
a)Registradores: São equivalentes a uma RAM, só que interna à CPU. Servem para armazenamento
temporário de informações de utilidade interna e externa à CPU. Existem registradores com função
definida: por exemplo, aquele que é imagem ou espelho de uma porta de ”I/O”. O sinal na porta
de I/O pode ser lido diretamente no registrador equivalente; por exemplo, a porta P̈O”tem um reg-
istrador imagem de ”PO”, cujo conteúdo é o reflexo do que há na entrada fı́sica dessa porta. Existem
registradores de Função Geral, que podem ser acessados pelas instruções do Mp (microprocessador)
e ainda podem ser conhecidos por nomes (registradores R0, R1 etc.) ou sem nomes (registradores
20h, 21h, etc.).
Página 13
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
e)Unidade Lógica e Aritmética (ALU-Arithmetic Logic Unit): É o local em que são realizadas
as operações de: lógica, aritmética e decisão/comparação. É o ”cérebro”da máquina.
g)Unidade de Controle (Control Unit): É o local em que se processa o controle do fluxo das
informações a fim de realizar a instrução recebida.
Exemplo de Funcionamento: Suponha que o Mp foi ler uma instrução na ROM. Os seguintes
passos serão dados:
1.O endereço de PC é posto na via de endereço (que é o endereço desta próxima instrução a ser
lida).
2.O sinal de controle da ROM, é ativado (pois vamos ler a ROM e não a RAM).
3.A instrução é lida da ROM, no endereço dado pelo PC (no caso, o endereço ”n”), e é lida pela
via de dados. Estes três itens correspondem ao ciclo de busca ou fetch.
6.Inicia-se outro ciclo, o de execução interna da instrução, auxiliado pela Unidade de Controle e
pelos registradores, decodificado pela Unidade de Decodificação e executado pela ALU.
[*] ”Nesting”é o nome que se dá ao processo pelo qual uma interrupção pode interromper outra que
já estiver sendo atendida, desde que tenha maior prioridade.
Há um tempo não muito distante, para realizar um projeto utilizando microcontroladores com
todas estas funcionalidades, era necessário agrupar diversas pastilhas com as funções descritas ante-
riormente. Isto tornava protótipo fisicamente maior, aumentaria o consumo de energia, diminuindo a
autonomia das baterias e inviabilizando a sua portabilidade que hoje são fundamentais para os sis-
temas embarcados.
Para compreendermos melhor o 8051 torna-se necessário conhecer a estrutura interna do micro-
controlador e estudarmos cada uma delas detalhadamente. Para isso nos dividiremos da seguinte
forma:
1)Memória
2)Circuito de Reset
3)Gerador de Clock
4)Controlador de Interrupção
5)Conjunto de Instruções
Com esta divisão ficará mais claro definirmos todas as instruções realizadas pelo 8051 e, o fun-
cionamento dos demais componentes associados ao microcontrolador.
1.5.1 Memória
Vejamos, o diagrama de blocos do 89C2051 na figura 1.3. Neste diagrama de blocos, temos uma
noção geral dos elementos internos ao 8051 e de suas ligações com o mundo externo.
A memória de programa do 8051 é do tipo Flash ROM (E2PROM), podendo sofrer um ciclo de
escrita/apagamento de 1000 vezes. Este tipo de memória de programa torna as tarefas de teste e
depuração dos programas bastante agradáveis, pois a antiga etapa de apagar a memória em luz ultra-
violeta não se faz mais necessária.
O segmento de programa da memória se inicia no endereço 0000h e pode ocupar todos os 2048
bytes da memória, a ATMEL oferece também outros modelos de microcontroladores com uma ROM
interna maior para que possamos utilizar programas maiores.
A CPU trata os registros de funções especiais da mesma forma que trata a RAM, podendo ali
efetuar alterações e, o mais importante, endereçar algumas dessas posições como bit.
Esta facilidade de endereçar bits é muito interessante, pois facilita a vida do programador. Vamos
supor que temos de zerar o quinto bit de uma certa posição de memória. O método tradicional consiste
em fazer uma operação AND entre o conteúdo da memória especificada e o numero binário 11011111,
Página 15
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
pois 1 AND X resulta X, logo não alteramos os bits 7, 6, 4, 3, 2, 1 e 0. Mas temos que 0 AND X
resulta 0, e desta forma zeramos o quinto bit.
Quando o sistema trabalha com bits, basta dar uma instrução do tipo ”zere o bit 5 na posição N”e
teremos efetuado a operação, sem nos preocuparmos com os demais bits.
A parte baixa da memória RAM interna (daqui a diante chamaremos apenas de RAM) está di-
vidida em porções distintas, que incluem 4 bancos de registradores de 8 bytes cada, uma porção de
16 bytes cujos bits são individualmente endereçáveis pela CPU e o restante da memória, que somente
pode ser endereçado byte a byte.
Os bancos de registradores são simples posições de memória RAM que permitem seu endereçamento
pelo nome dado a cada registro, além de seu endereçamento pela posição de memória.
Página 16
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
A vantagem dos bancos de registradores está em seu uso pelo sistema, como ı́ndice para en-
dereçamento e pela facilidade de lembrança de seu nome, além de serem amplamente utilizados por
compiladores de linguagem de alto nı́vel.
Por exemplo, é mais fácil lembrar que um certo dado está no registro R2 do que lembrar que o
mesmo está na posição 02 de memória (Supondo Banco 0).
Página 17
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
A seleção de um certo banco de registradores se dá pelo valor dos bits RS1 e RS0 conforme a
tabela a seguir:
Conforme visto anteriormente, temos 16 bytes na RAM cujos bits são individualmente endereçáveis
pela CPU, conforme podemos ver pela tabela abaixo, dispostos da seguinte forma.
Página 18
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Temos também alguns registros de funções especiais que têm seus bits endereçáveis, sendo que al-
guns deles têm, inclusive, um nome mnemônico, para maior facilidade de desenvolvimento de software
em compiladores.
Antes de estudarmos o mapa de memória dos registros de funções especiais, vamos estudar cada
um deles em separado para melhor compreensão do funcionamento interno do 89C2051.
P1 (90) - Porta P1
P3 (B0) - Porta P3
São posições da RAM que contêm os dados das portas de I/O do micro, caso as mesmas sejam
usadas como tal.
Uma escrita num desses registros altera automaticamente o conteúdo presente na saı́da do chip, e
uma leitura dos mesmos coloca o estado presente nos pinos (ou nos latchs de saı́da, conforme veremos
adiante) dentro da posição desejada. Essa operação é possı́vel devido aos buffers e latchs de cada
porta, que só são ativos na leitura ou escrita das mesmas.
Página 19
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
É um registrador de 8 bits que contém o endereço de topo de uma ”pilha”realizada com os registradores,
em que se acumulam endereços de retorno, quando se trabalha com sub-rotinas e interrupções. Você
pode EMPURRAR (PUSH) dados para a pilha (STACK) ou TIRAR (POP) dados da pilha
(STACK).
A instrução PUSH incrementa o SP ”antes”de escrever os dados e a instrução POP lê o dado
da pilha e ”depois decrementa”o SP. A pilha é formada inicialmente dentro da RAM interna quando
se tem o RESET da máquina, e neste caso o SP é carregado com valor 07h. Isto é, qualquer dado
a ser armazenado na pilha causará primeiro o incremento do SP, isto é, irá para 08h, e depois será
gravado o dado na pilha nesta posição 08h. Isto é, ela estará ocupando a posição 08h da RAM que é
o registrador R0 do banco 1! Se você quiser utilizar esse banco e os outros seguintes, é melhor, logo
de ı́nicio, carregar o SP com outro valor de ponteiro, a partir do qual ele irá formar a pilha.
Este registro permite-nos adaptar o chip para situações em que não há processamento, mas não
desejamos perder o conteúdo das memórias internas do chip, como pode ocorrer numa falha da ali-
mentação, assim podemos controlar o consumo de energia do sistema.
No SCON, colocamos os bits que nos permitirão trabalhar com a porta de comunicação serial con-
forme desejamos, e o SBUF é o registro no qual a porta armazenará o dado recebido, ou escrevemos
o dado a ser transmitido.
Estes registros permitem-nos escolher qual ou quais interrupções serão habilitadas (ou desabili-
tadas) e qual a prioridade (maior ou menor) de cada uma.
Página 20
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
O Program Status Word contém bits que indicam quais as ocorrências da ALU na ultima operação
lógica e aritmética, alem de indicar qual banco de registradores foi acessado pela ultima vez. Equivale
aos Flags dos microprocessadores de 8bits.
B (F0)
Estes dois registros de 8 bits podem ser referenciados como um registro de 16 bits, chamado DPTR
-Data Pointer. Este registro é usado quando desejamos fazer endereçamento indireto para a leitura de
constantes armazenadas na memória de programa, para ler ou escrever variáveis na memória externa
de dados e para desvio para memória de programa de até 64 Kbytes.
Não são todos os registros de funções especiais que tem seus bits individualmente endereçáveis.
Temos na tabela abaixo, os registros e seus bits com seus respectivos endereços. Assim como nos
registros endereçáveis (que são bytes), alguns destes bits também tem um nome mnemônico.
Este componente possui um poderoso conjunto de instruções que permite usar diversos modos de
endereçamento, admitindo desvios e leitura/escrita em toda a memória.
No momento oportuno, veremos como é acessada uma posição de memória, e também como a CPU
faz para acessar fisicamente essas posições.
Embora o RESET não seja propriamente uma interrupção, muitas vezes é assim chamado devido
à semelhança de suas ações, já que o RESET interrompe o processamento e reinicializa o sistema.
O RESET no 89C2051 é ativo quando o pino 1 (RST/VPP) permanecer em nı́vel alto por dois ou
mais ciclos de maquina.
Neste caso, a CPU executa o que chamamos de reset interno, que consiste em preencher seus reg-
istros internos com os valores predeterminados, a saber:
a)O PC, o acumulador, o registro B, os flags, o DPTR e todos os registros dos tempo-
rizadores/contadores são ZERADOS.
Página 21
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
CY AC FD RS1 RS0 OV P
D7 D6 D5 D4 D3 D2 D0 PSW
d)O SBUF estará com conteúdo indeterminado e o registro de controle da porta serial SCON
será zerado.
e)O registro PCON terá apenas seu bit mais significativo zerado.
f)Os registros de controle de interrupção (IE e IP) terão ambos o valor binário XXX00000,
onde X = irrelevante (pode ser 0 ou 1).
A RAM interna não é afetada pelo reset forçado, sendo que ao ligar (power-up), o seu valor é
aleatório, mas pode ser lido por software.
Geralmente, ao ligarmos o sistema, desejamos que o mesmo execute uma seqüência de funções de
inicialização, dividida em dois blocos, inicialização do sistema básico, que sempre ocorre no RESET,
e a inicialização do sistema montado, que prepara o equipamento para a operação para o qual foi
projetado, por exemplo, ajustando os contadores, as portas entre outros.
Embora estas funções sejam executadas pelo software que começa a rodar após o RESET, no en-
dereço 0000h da memória de programa, costumamos chamá-lo de rotina de inicialização.
O 89C2051 pode ser automaticamente resetado ao ligar a fonte, pela colocação de um resistor de
8,2 kΩ entre seu pino seu pino de RESET e o terra, e pela colocação de um capacitor (preferencial-
mente de tântalo) de 10 µF entre o pino e o +Vcc, o que garante que este pino estará em nı́vel alto
por mais de 2 ciclos de maquina após a ligação da alimentação, pois o capacitor comporta-se como
um curto-circuito, provocando uma circulação de corrente pelo resistor, que terá uma tensão inicial
da ordem de +Vcc.
Após algum tempo, o capacitor ”estará carregado”e não circulará mais corrente na resistência, e
desta forma a diferença de potencial sobre a mesma será nula, garantindo que o pino RST/VPP esteja
Página 22
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
no nı́vel 0.
Na eventualidade de necessitarmos provocar o reset (reset forçado), basta então colocarmos uma
chave de contato momentâneo NA (push-botton NA) em paralelo com o capacitor, e ao pressiona-la
e soltá-la teremos provocado uma nova operação de reset.
Na entrada, o chip possui um Schmidt Trigger para garantir rejeição a ruı́do, sendo que a saı́da do
mesmo é amostrada a cada ciclo de maquina pelo hardware, para ver a ocorrência de reset.
Durante o reset, o nı́vel lógico dos pinos é indeterminado, indo a nı́vel lógico 1 ?após? a execução
da rotina interna de reset, de tal forma que devemos prever esta situação no projeto do hardware,
para evitar acionamento indesejável de qualquer periférico externo.
Página 23
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
O uso do clock externo ajuda a economizar componentes quando do uso do sistema junto de outros
que já possuam um sinal TTL que possa ser aproveitado, como por exemplo, para trabalho junto a
contadores e outros equipamentos seqüenciais rápidos.
Sua implementação é simples, bastando desconectar o pino 4 (XTAL2) (deixar em aberto), e inje-
tar o sinal externo no pino 5 (XTAL1), que desta forma irá diretamente para o sistema de controle e
temporização do chip (conforme a figura 1.7).
Se utilizarmos o clock gerado pelo oscilador interno, deveremos intercalar aos pinos XTAL1 e
XTAL2 um cristal ou um filtro cerâmico (o cristal e o mais indicado) na freqüência desejada, e dois
capacitores de realimentação conforme a figura 1.8
Página 24
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Quanto ao layout do circuito deve-se destacar o fato de que as ligações devem ser mantidas as
mais curtas possı́veis, para evitar capacitâncias parasitas que venham a interferir no funcionamento
do circuito, assim como uma boa malha de terra deve ser providenciada em toda a placa.
1.5.4 Interrupção
A interrupção é, provavelmente, uma das mais importantes ferramentas nos sistemas de controle
microprocessados, pois é o processo pelo qual a execução de um programa é interrompida (ou não),
de acordo com as necessidades de eventos externos ou internos.
Temos dessa forma, que existem três fontes de interrupção: a interrupção por Software (instrução),
a pedida por periférico externo e a interrupção pedida por periférico interno (timer/counter, porta
serial, etc. . .).
A interrupção é um sinal, gerado de uma das três formas acima descritas, que pede para a CPU
parar o processamento corrente e efetuar outro, referente à interrupção solicitada, desde que a mesma
esteja habilitada e possa ser aceita.
A vantagem da interrupção está na simplificação do Hardware, pois não precisamos fazer com que
nosso sistema fique monitorando o funcionamento de certos dispositivos periféricos. Por exemplo, nos
computadores didáticos simples, e mesmo em alguns sistemas industriais, o teclado é um periférico
que é lido constantemente pelo monitor do sistema, para verificar se alguma tecla foi ou não apertada.
Página 25
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Já nos computadores da linha IBM-PC, isso não ocorre, pois o teclado é um periférico inteligente, que
possui um microcontrolador interno que, caso uma tecla seja pressionada, pede uma interrupção ao
microprocessador para poder enviar o código da tecla pressionada para o mesmo.
Muitas vezes as entradas de interrupção são as principais entradas do sistema. Para o perfeito
entendimento das interrupções, devemos antes relembrar os seguintes conceitos:
a)Mascaramento
É a possibilidade de impedirmos, geralmente por Software, que uma certa interrupção seja atendida.
Existem sistemas que possuem interrupções não-mascaráveis, ou seja, jamais podem ser desabilitadas
por Software.
b)Prioridades
No caso do sistema poder atender mais de uma interrupção, devemos ter uma tabela de seqüência
de prioridades, para que o microprocessador saiba como agir, no caso de duas ou mais interrupções
chegarem simultaneamente.
As interrupções vetoradas são aquelas que possuem o vetor de interrupção (endereço de inı́cio da
interrupção) fixo, e não pode ser mudado pelo usuário. É o caso do 8051, onde cada vetor de in-
terrupção já está definido pelo fabricante. As interrupções não vetoradas são aquelas nas quais os
endereços de desvios do programa são escolhidos pelo programador, como é o caso do COP 68705.U3
da Motorola, por exemplo.
Existem três maneiras pelas quais um sistema pode reconhecer um sinal lógico:
O canal serial e as interrupções externas usam alguns pinos da porta três, conforme a seguir:
1.Porta 3, pino 0 = Receptor de dados seriais (RX);
Página 26
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
OBSERVAÇÃO: Dessa forma, se usarmos algumas dessas interrupções, devemos tratar a porta
três como porta de I/O apenas bit endereçável.
No 8051, cada interrupção pode ser individualmente habilitada ou não, e podemos também desabil-
itar todas de uma só vez.
As interrupções podem ter apenas dois nı́veis de prioridade, e dessa forma, se duas ou mais ocor-
rerem ao mesmo tempo (algo ”praticamente”impossı́vel), a de maior prioridade será atendida primeiro.
Caso uma interrupção de prioridade 0 (menor) esteja em andamento, uma interrupção de priori-
dade 1 (maior) interromperá aquela e será atendida. Ao seu fim, a CPU retorna ao atendimento da
interrupção de nı́vel 0 que foi interrompida.
Este Microcontrolador possui ainda um processo de prioridade interno, para o caso de duas inter-
rupções de mesma prioridade estarem aguardando atendimento.
Se a interrupção que chegar for de nı́vel igual ou menor da que já está sendo atendida, ficará
aguardando o fim desta para ser servida.
Quando atende uma interrupção, 0 8051 salva no Stack o valor do PC, ”mas não salva o acu-
mulador e o registro Program Status Word (PSW)”. Os mesmos devem ser salvos e devolvidos pela
rotina de interrupção, se assim for necessário, assim como qualquer outro registro importante.
Endereços de Desvio
Neste Microcontrolador, cada interrupção é desviada para um certo endereço fixo, no qual começa
a nossa rotina de interrupção.
1.INT0\ −→ 03h
2.Timer/Counter 0 −→ 0Bh
3.INT1\ −→ 13h
4.Timer/Counter 1 −→ 1Bh
Como vimos, o Reset inicia em 00h, e desta forma, por exemplo, se usarmos todas as interrupções
teremos que usar os três Bytes disponı́veis para o reset, num desvio incondicional para outra parte da
memória, onde realmente teria inı́cio o programa.
Página 27
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
00h ←− Inicio
01h
02h
03h ←− End. de INT0\
04h
05h
06h Diferença de 8 bits
..
.
0Ah ↓
0Bh ←− End. do Timer/Counter 0
0Ch
0Dh
..
.
11h
12h
13h ←− End. de INT1\
14h
..
.
1Ah
1Bh ←− End. do Timer/Counter 1
1Ch
1Dh
..
.
22h
23h ←− End. do Canal Serial
24h
25h
Figura 1.10: Mapa parcial da memória de programa do 8051 com destaque ao inı́cio das interupções
Página 28
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Sempre que uma interrupção é requisitada, um certo bit de controle dessa interrupção será setado
e assim permancerá até que essa interrupção seja atendida.
Exceção é a esta regra é a interrupção serial, que deve ter seu bit de controle resetado
pelo Software.
O primeiro de todos estes registros é o IE que tem por função indicar qual das interrupções está
ou não habilitada.Vejamos a figura 1.11
EA - Enable All: Localizado no bit número 7, significa habilitar todos. Quando o em nı́vel 0,
desabilita todas as interrupções de forma geral, independente de qualquer outro controle. Se em nı́vel
1, permite-nos escolher qual interrupção em particular será habilitada, em função dos bits de controle
individuais a seguir.
ES: Enable Serial: Localiza-se no bit 4, significa habilitar a serial, quando em nı́vel lógico 1,
libera a interrupção pedida pelo canal serial.
ET1 - Enable Timer 1: Localiza-se no bit 3, significa habilitar a interrupção do timer 1 e quando
em nı́vel lógico 1, libera a interrupção pedida pelo Timer/Counter 1.
EX1 - Enable External 1: Localiza-se no bit 2, significa habilitar a interrupção externa (INT1\
e quando em nı́vel lógico 1, libera a interrupção pedida pelo dispositivo externo ligado a INT1\.
ET0 - Enable Timer 0: Localiza-se no bit 1, significa habilitar a interrupção do timer 0 e quando
em nı́vel lógico 1, libera a interrupção pedida pelo Timer/Counter 0.
EX1 - Enable External 0: Localiza-se no bit 0, significa habilitar a interrupção externa (INT0\
e quando em nı́vel lógico 1, libera a interrupção pedida pelo dispositivo externo ligado a INT0\.
1.INT0\
2.TIMER/COUNTER0
3.INT1\
4.TIMER/COUNTER1
5.Serial
Veremos agora o registro IP, nele fixaremos qual o nı́vel de prioridade de nossas interrupções. Ve-
jamos o formato deste registro.
PS: Priority Serial: Localiza-se no bit 4, significa prioridade serial, quando em nı́vel lógico 1,
indica prioridade alta à interrupção gerada pelo canal serial, se a mesma estiver habilidade. Quando
Página 29
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
PX1 - Priority External 1: Localiza-se no bit 2, significa habilitar a interrupção externa (INT1\
e quando em nı́vel lógico 1, indica prioridade alta à interrupção externa 1, se a mesma estiver habili-
dade. Quando em nı́vel 0, indica prioridade baixa.
PX1 - Priority External 0: Localiza-se no bit 0, significa habilitar a interrupção externa (INT0\
e quando em nı́vel lógico 1, indica prioridade alta à interrupção externa 0, se a mesma estiver habili-
dade. Quando em nı́vel 0, indica prioridade baixa.
Página 30
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
CY - Carry É um indicador de ”vai um”em operações aritméticas: vai para 1 quando uma soma
com A ”estoura”na sua capacidade (isto é, o sétimo bit ou ACC.7 vai um para uma próxima casa que
não existe; seria um nono bit, que é um ”estouro”da conta). Vai para ”1”se existir um empréstimo do
7 bit no caso de uma subtração com o acumulador.
Por exemplo:
Se ACC=FFh e após isto aparece a instrução: acc A,#01h: A soma de FFh com 01h fará com que
o resultado de A seja 00h e ”vai 1”para o carry, isto é,”CY”é setado no registrador PSW.
O carry ”CY”também é utilizado como se fosse o ”acumulador para um só bit”. Existem várias
instruções booleanas que usam o ”C”, isto é, o carry, como operando, em que se posiciona o resultado
das operações. Por exemplo:
anl C,ACC.0: Executa um AND booleano entre o carry e o bit ACC.0. O resultado da operação
fica em ”C”(ele é equivalente ao acumulador para operação com bytes), isto é, o resultado volta para
ele mesmo.
AC - Auxiliary Carry É um indicador de ”vai um”entre os quatro primeiros bit do acumulador,
isto é, é o ”vai um”de um ”nible”para outro ”nible”do acumulador.
Isto é muito útil em aritmética BCD em que os nibbles que correspodem a 4 bits são representados
por um número codificado em binário, mas que representa um decimal de 0 a 9.
Flag 0 É um bit registrador de uso geral, não tem nenhuma função especial e não indica nada.(literalmente
”sobrou”dentro do PSW, sem função)
RS1 e RS0 São dois bits que fazem mudar o banco de registradores a que se referem os nomes
R0 a R7, utilizados nas instruções que trabalham com esses registradores (por ex.: mov A,R0 = move
para o ”A”o conteúdo de ”R0”; mas qual R0? Os bits RS0 e RS1 é que dizem a qual R0 de qual banco
está se referindo).Vejamos na tabela 1.4
Quando se dá o reset da máquina, ele aponta para o banco 0, isto é, as instruções que se referirem
a R0,R1,. . .R7 estão se referindo ao ”Rn”do banco O. Podemos utilizar a mudança de bancos e usar os
mesmos apelidos de R0 a R7 para o outro banco, ou usar o endereço absoluto de cada registrador. Em
geral, deixa-se que o microcontrolador aponte para o banco 0 direto e os outros registradores utilizam
os endereços absolutos deles, só para não ter i trabalho de mudar toda hora de banco. Isto depende
do gosto do programador.Quando se ”reseta”a máquina, os bits RS1 e RS0 ficam em 00h,
isto é, estão se referindo ao banco 0.
Página 31
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
OV É um bit que vai para 1 quando, após um adição ou subtração, acontece um ”estouro”da
conta. Resultados maiores que +127 ou menores que -128 ”setarão”o bit ”OV”. Paor exemplo:
0F ⇒ +15
+7F ⇒ +127
8E e ”OV” +142
Note que 8E é -116, que não é a resposta desejada +142, por isto OV é setado.
N de ”1s” = Ímpar
A= 1001 1110 −→ P=1
N de ”1s” = Ímpar
A= 1001 1111 −→ P=0
É útil quando se trabalha com o canal serial, pois ele muitas vezes necessita desta informação. Outra
maneira de saber se P é ”1”ou ”0”, é pensar que a soma dos bits ”1”do acumulador mais o
”P”tem sempre que ser par.
O pior caso ocorre se a interrupção chegar após os 14 últimos perı́odos da instrução em vigor, e
se a próxima instrução for multiplicação ou divisão, que consomem 48 perı́odos de clock, que resulta
num atraso de 86 perı́odos, ou 7.2 µs para clock de 12 MHz.
1.5.7 Ajuste das Interrupções Externas para serem Ativas em Nı́vel ou Transição
Podemos ajustar as interrupções externas para serem detectadas por transição de 1 para 0, ou pelo
nı́vel 0. Os bits de controle das interrupções externas estão no registro TCON (Controle do Timer),
e os que nos interessam são os quadro bits menos significativos.
IT0 - Interrupção Externa 0 (INT0\) : Localizado no bit 0 do TCON, indica qual o processo
para a chamada da interrupção INT0\ será aceita na transição de 1 para 0 do nı́vel pino, devendo
permanecer em 0 por pelo menos 12 perı́odos de clock. Se em nı́vel 0, INT0\ será aceita apenas pelo
nı́vel 0 presente no pino.
Página 32
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
IT1 - Interrupção Externa 1 (INT1\) : Localizado no bit 2 do TCON, indica qual o processo
para a chamada da interrupção INT1\ será aceita na transição de 1 para 0 do nı́vel pino, devendo
permanecer em 0 por pelo menos 12 perı́odos de clock. Se em nı́vel 0, INT1\ será aceita apenas pelo
nı́vel 0 presente no pino.
Como vimos, se a interrupção for ativa pela transição, é a esta que a CPU deverá detectar para aten-
der à interrupção, por isso temos que esperar um perı́odo de 12 ciclos de clock, porque na amostragem
anterior, a CPU detectou nı́vel 1 e agora devemos esperar que a mesma detecte o nı́vel 0.
Já na detecção por nı́vel, a entrada deverá estar em nı́vel 0, apenas durante a amostragem que
ocorre ao fim de cada instrução executada. O interessante é que neste caso, o pino pode permanecer
em nı́vel 0 durante a execução da rotina de interrupção, mas deve estar em nı́vel 1 ao fim desta, senão
o sistema atenderá novamente à interrupção, visto que na amostragem da última instrução da rotina,
encontrará este pino em nı́vel adequado para a interrupção, o que não ocorre no caso anterior, pois lá
a CPU deve sentir a TRANSIÇÃO do nı́vel 1 para o O.
A saı́da desta porta será ligada diretamente ao pino de interrupção externa INT0\, por exemplo,
e também a um inversor, e daı́ ao ”gate”do lacth, e as saı́das do lacth estão ligadas à porta P1.
Caso ocorra uma transição de 1 para 0 na porta AND, teremos sua saı́da indo para o nı́vel 0
também, ocasionando o pedido de interrupção e ”travando”o estado dos pinos I1 a I8 no lacth.cc
No momento do atendimento da interrupção, o valor a ser lido na porta P1 conterá o estado dos
bits que geraram a interrupção, e uma rotina verificará qual bit está em 0. Este bit é responsável pelo
pedido de interrupção, e basta ao Software encarregar-se de executar a rotina apropriada.
Página 33
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
+Vcc
I8
7430
INT0\
I1
8051
D0 Q0 P1.0
D1 Q1
D2
74LS374 Q2
D3 Q3
D4 Q4
D5 Q5
D6 Q6 P1.7
D7 Q7
Questão 2 Obter a outra representação do endereço do bit 5Dh? (Ver tabela 1.2) Solução:
•Dividir o valor do endereço em decimal (93 10 ) por 8 → 93/8, obtendo o quociente q=11 10 e o
resto r=510
•Transformar o quociente (q) e o resto (r) em hexadecimal: q=11 10 =Bh e r=510 =5h.
•Obter o quociente e o resto. O quociente (q) é obtido subtraindo 2Xh de 20h e transformando-o
em decimal, e o resto é obtido através do número após o ponto (.) de tal representação. Multi-
plicando o quociente em decimal por 8 e somando com o resto em decimal, obtém-se o endereço
em decimal. O valor do endereço em decimal deve ser transformado para hexadecimal.
Questão 3 Obter a outra representação do endereço do bit 2Ah.3? (Ver tabela 1.2)
Questão 4 Defina o tipo de endereçamento de cada uma das instruções dadas a seguir:
a)ADDC A,20h
Resposta: Endereçamento direto.
b)MOV @R0,55h
Resposta: Endereçamento combinado (misto), formado pelos endereçamentos direto e indireto ou
indexados por registrador.
c)MOV R7,6Ah
Resposta: Endereçamento indireto, pois R7 (Rn) é um registrador indexado (mnemônico).
Questão 6 Crie um programa que faça a operação OR-Exclusivo entre o conteúdo do acumulador
(A) e a constante 33h. O resultado deve ser armazenado no conteúdo do registrador R5 do segundo
banco de registradores.
Resposta:
XRL A,#33h (A)←−(A)or-ex #33h
MOV PSW,#08h (PSW)←−#08h=#00001000 =⇒ (RS1)=0 e (RS0)=1=⇒ define o se-
gundo banco de registradores (B1).
MOV R5,A Armazena, no conteúdo do registrador R5 do segundo banco de reg-
istradores, o conteúdo do acumulador A.
Página 35
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Página 36
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Operações Lógicas
Opcode Bytes Clocks Flags Afetados
Mnemônico Função
CY AC OV
ANL A,Rn ”e”entre registro e acumulador 0101/1 B 1 12 - - -
abc
ANL A,DIRETO ”e”entre memória e acumulador 55 H 2 12 - - -
ANL A,@Ri ”e”entre RAM indireta e acumu- 0101/011iB 1 12 - - -
lador
ANL A,#DADO ”e”entre dado e acumulador 54 H 2 12 - - -
ANL DIRETO,A ”e”entre acumulador e memória. 52 H 2 12 - - -
Resultado na memória
ANL DI- ”e”entre dado e memória 53 H 3 12 - - -
RETO,#DADO
ORL A,Rn ”ou”entre registro e acumulador 0100/1 B 1 12 - - -
abc
ORL A,DIRETO ”ou”entre memória e acumulador 45 H 2 12 - - -
ORL A,@Ri ”ou”entre RAM indireta e acumu- 0100/011iB 1 12 - - -
lador
ORL A,#DADO ”ou”entre DADO e acumulador 44 H 2 12 - - -
ORL DIRETO,A ”ou”entre acumulador e memória. 42 H 2 12 - - -
Resultado na memória
ORL DI- ”ou”entre DADO e memória 43 H 3 12 - - -
RETO,#DADO
XRL A,Rn ”ou exclusivo”entre registro e acu- 0110/1 B 1 12 - - -
mulador abc
XRL A,Direto ”ou exclusivo”entre memória e acu- 65 H 2 12 - - -
mulador
XRL A,@Ri ”ou exclusivo”? entre RAM indireta 0110/011iB 1 12 - - -
e acumulador
XRL A,#DADO ”ou exclusivo”entre dado e acumu- 64 H 2 12 - - -
lador
XRL DIRETO,A ”ou exclusivo”entre acumulador e 62 H 2 12 - - -
memória. Resultado na memória
XRL DI- ”ou exclusivo”entre dado e memória 63 H 3 12 - - -
RETO,#DADO
CRL A Faz A = 0 E4 H 1 12 - - -
CPL A Inverte o estado dos bits do acumu- F4 H 1 12 - - -
lador
RL A Desloca o acumulador à esquerda 23 H 1 12 - - -
RL C Desloca o acumulador à esquerda 33 H 1 12 ? - -
através do carry
RR A Desloca acumulador à direita 03 H 1 12 - - -
RRC A Desloca acumulador à direta através 13 H 1 12 ? - -
do carry
SWAP A Troca os nibbles do acumulador. C4 H 1 12 - - -
Equivale a 4 RR A ou 4 RL A
Página 37
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Página 38
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Página 39
Microprocessadores e Microcontroladores - 1a Unidade - Prof. Vitor Leão Filardi
Instruções de Desvio
Opcode Bytes Clocks Flags Afetados
Mnemônico Função
CY AC OV
ACALL END11 Chama sub-rotina numa faixa de - - 2 24 - - -
2kbytes da atual posição
LCALL END16 Chama sub-rotina em qualquer 12 H 3 24 - - -
posição da memória de programa
RET Retorne da sub-rotina 22 H 1 24 - - -
RETI Retorne da interrupção 32 H 1 24 - - -
AJMP END11 Desvia para outro endereço numa - - 2 24 - - -
faixa de 2kbytes da atual posição
LJMP END16 Desvia para qualquer posição da 02 H 3 24 - - -
memória de programa
SJMP rel Desvio curto relativo 80 H 2 24 - - -
JMP @A + Desvia para o endereço obtido da 73 H 1 24 - - -
DPTR soma do acumulador e do DPTR
JZ rel Desvia se o acumulador for zero 60 H 2 24 - - -
JNZ rel Desvia se o acumulador não for zero 70 H 2 24 - - -
CJNE A,Direto, Compara e desvia se o acumulador B5 H 3 24 ? - -
rel for diferente da memória endereçada
CJNE Compara e desvia se o acumulador B4 H 3 24 ? - -
A,#Dado,rel for diferente do dado
CJNE Compara e desvia se o registro for 1011/1 B 3 24 ? - -
Rn,#Dado,rel diferente do dado abc
CJNE Compara e desvia se a RAM indi- 1011/011iB 3 24 ? - -
@Ri,#Dado, reta for diferente do dado
rel
DJNZ Rn, rel Decrementa o registro e desvia se for 1101/1 B 2 24 - - -
diferente de zero abc
DJNZ Direto, rel Decrementa a memória e desvia se D5 H 3 24 - - -
for diferente de zero
NOP Nenhuma Operação 00 H 1 12 - - -
Página 40
Capı́tulo 2
Segunda Unidade
Dispositivos do 8051
Um ciclo de máquina se constitui de seis estados (S1 a S6) que, por sua vez, correspondem a
doze pulsos P do ”clock”.
1 Ciclo de Maquina
Estados
S1 S2 S3 S4 S5 S6
P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2
1 Estado 2 Pulsos X
Por exemplo, o instante marcado como ”X”na figura é o ”S6P1”. Assim podemos ter um linguagem
comum de definição de instantes de um ciclo de máquina. Cada pulso P1 depende da frequência do
clock. Por exemplo, se o circuito oscilador for a cristal de 12MHz, teremos um ciclo de máquina = 12
x (Perı́odo de Clock) = 12 x (1/12*10 6 )= 1µs.
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Isto ocorre porque cada linha é, na realidade, um Buffer tri-state de um bit. Já no caso da escrita,
temos associado a esta linha um flip-flop D (latch) de um bit.
Na figura 2.2, temos um esquema simplificado de um bit de I/O, que nos ajudará a compreender
o funcionamento da porta. Os circuitos reais são ligeramente diferentes para cada uma das portas, e
mais complexos do que o apresentado aqui, mas para fins ditáticos e de entendimento este diagrama
básico é suficiente.
LE LATCH
VIA DE
DADOS D Q
INTERNA +
PINO
ESCREVE CLK Q
LE PINO
Quando escrevemos um bit na porta, o mesmo vai pela via interna até a entrada D do flip-flop, e
então um pulso de clock em CLK coloca este bit em Q, que através da eletrônica associada leva este
nı́vel ao pino externo.
Já no caso da leitura, algumas instruções lêem o pino enquanto outras lêem o estado do latch, em Q.
As instruções que lêem o latch são aquelas que costumam ler, modificar e reescrever o bit, a saber
: INC, DEC, CPL, JBC, DJNZ, ANL, ORL, XRL, MOV Px.n,C, CLR Px.n e ainda SETB Px.n,
conforme vimos na unidade anterior.
As demais instruções de acesso aos ports lêem o estado presente nos pinos. E dai, qual a diferença
então?
Vamos supor que temos a base de um transistor NPN sendo acionada pelo pino de I/O. Quando
escrevemos 1 neste pino o transistor entrará em condução, e se a CPU ler o estado deste pino para
eventual confirmação, lerá a tensão na base do transistor e interpretará como nı́vel ZERO, então neste
Página 42
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
caso deve ser lido o valor de latch, que estará corretamente indicando nı́vel UM.
Um exemplo simples de conexão das linhas seria um sistema que em função de um certo bit, por
exemplo o bit 5 da porta 3 (escrito como P3.5), fará com que os leds colocados nos 8 pinos da porta
1 sejam acesos sequencialmente, conforme o estado daquele bit. Na figura 2.3, temos um diagrama
simples para este exemplo, e a seguir o Software simbólico para esta função.
Página 43
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
+ + +
P1.0
P1.1
8051 P1.7
P3.5
SOFTWARE SIMBÓLICO
Inicio:
Faz acu-
mulador =
00000001
binário
Lebit:
Se P3.5 = 0
então
roda acumulador à esquerda (coloca o bit D0 em D1, e assim
por diante, até colocar o bit D7 em D0).
move acumulador para a porta 1
perde um tempo
volta para ”lebit”
Senão (só pode
ser P3.5 =1)
roda acumulador à direita (coloca o bit D7 em D6, e assim
por diante, até colocar o bit D0 em D7).
move acumulador para a porta 1
perde um tempo
volta para ”lebit”
Página 44
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Port P0
O P0 é uma estrutura de port bidirecional. Um certo pino ”i”do port Po é tomado como ilus-
tração. O barramento interno do MC é utilizado para ler/escrever no latch interno, ou ler o pino fı́sico
”P0.i”em questão. Quando se utiliza uma instrução que ”escreve”um valor no Port P0.i, o dado se
apresenta na entrada D do flip-flop. Um pulso de ”escreve”(o ”CLK”do flip-flop) é imposto no fli-flop,
que transfere esse dados às saı́das ”Q”e ”Q”do latch.
O sinal de ”controle”atua para permitir que esse dado saia fisicamente no pino P0.i. Este sinal
de controle simboliza o gerenciamento que esse port tem para apresentar o dado fisicamente à saı́da.
Existem instruções que lêem o conteúdo armazenado no latch. Existem instruções que lêem o estado di-
retamente do pino. Em geral, as instruções que ”lêem o latch”são do tipo ”READ-MODIFY-WRITE”,
isto é, lê o conteúdo do latch, modifica conforme a instrução imposta e escreve de novo no latch. São
as instruções INC, DEC, CPL, JBC, DJNZ, ANL, ORL e XRL.
Quando P0 é usado como port, é como se ele fosse ”dreno aberto”, isto é, devemos utilizar resistores
de ”Pull-Up”nesses pinos para podermos excitar devidamente o ambiente externo ao MC. Quando ele
é usado apenas para controle de memória externa, esses resistores não são necessários, e neste caso o
port P0 é visto como um port ”Tri-State”.
Port P1
Para finalizar este item, basta dizer que as possibilidades de uso destas linha de I/O são pratica-
mente ilimitadas, ficando a cargo do projestista desenvolver novas aplicações para tal.
Os ports 1,2 e 3 possuem pull-ups internos e são chamadas de quase bidirecionais. Esta carac-
terı́sticas faz com que seus pinos tenham sempre um estado definido, ou seja, 0 ou 1, de forma que
mesmo quando as usamos como entrada, podemos medir seu nı́vel como se fosse de saı́da. Os ports
P1 e P3 podem ser configurados, pino a pino (bit a bit), ou totalmente (byte) como entrada ou saı́da.
Não se pode esquecer que o port P3 é utı́lizado como meio de comunicação externa entre os periféricos
”Timers”e ”Serial”e então os pı́nos só estarão disponı́veis para I/0, dependendo de utilizar ou não os
periféricos desse Mc.
O port 0 não possui estas caracterı́sticas, e quando configurada como entrada, terá seu nı́vel flu-
tuando na ausência de nı́vel fixo no pino. Entretanto, para todos os efeitos de uso, podemos considerar
as portas como simples portas de I/O bidirecionais como veremos a seguir.
É necessário ter cuidado com as instruções do tipo ”Read-Modify-Wrı̀te”citadas neste item, quando
são manipuladas diretamente com os ports. Por exemplo, a operação:
orl P1,#11111110b ; vai executar a leitura do Port P1 pelo ”latch”, vai operar a instrução
”OR”com o dado e devolver o resultado em P1.
Se a intenção é só realizar uma ”máscara”para ler o bit ”P1.0”, esta instrução está sendo mal apli-
cada, pois ela, além de realizar a máscara, pos valor ”1”em todos os outros bits do port P1, alterando
seus valores originais!
Página 45
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Assim, se queremos só uma ”máscara”, devemos operar ”fora de P1”, isto é:
mov A,Pi ;lê P1 e carrega em A
orl A,11111110b ;faz a ”máscara”sem alterar P1
Esta e outras instruções abaixo listadas correm este ”perigo”de utilização e precisamos saber ex-
atamente o que queremos antes de aplicá-las direto aos ports:
Tabela 2.1: Instruções que afetam diretamente os ports quando aplicadas junto a eles.
Cada pino do port é amostrado perto da ”descida”do pulso ”ALE”no instante de leitura de in-
strução, entre o perı́odo S5 do ciclo de máquina. É possı́vel que, se o pino, neste instante, estiver em
transição, o Mc possa ler dado errado. Quando se ”escreve”um dado no latch do pino do port, ele já
aparece efetivamente na saı́da do latch durante o perı́odo S6P2 do último ciclo de máquina necessário
para finalização da referida instrução. Assim, só aparecerá fisicamente no pino, no instante S1P1 do
próximo ciclo de máquina.
Observe que só se pode ler com confiabilidade um dado no pino do port que fique presente por
tempo acima de 1 valor de ”S”(com clock de 12 MHz teremos → perı́odo S ¿ 1 µs ou genericamente,
perı́odo maior que 1 ciclo de máquina).
2.2.3 Uso das Portas de I/O para a Expansão da Memória de Dados e Programa
As portas 0 e 2 possuem como função alternativa, endereçar memória extema, para que possamos
expandir a capacidade de dados e de programas no 8051. Neste caso, a porta 2 fornece a parte alta do
endereço (A8-A15) e a porta 0 fornece, multiplexada no tempo, a parte baixa de endereço (AO-A7) e
a via de dados (DO-D7).
0 pino 30 fornece o sinal ALE, que habilitará o latch de endereços a segurar a parte baixa do
mesmo, para que os dados possam transitar peia porta 0. Os outros sinais de controle são o PSEN\,
o RD\ e o WR\.
0 sinal PSEN\ habilita a saı́da da memória de programa (permite a (eitura na Eprom externa) de
forma que é ativo quando a CPU deseja ler programa da memória externa. Neste instante, os sinaı́s
RD\ e WR\ estão em nı́vel 1.
Os sinais RD\ e WR\ somente são ativos caso a CPU execute instruções de leitura e escrita na
memória de dados externa (lembre-se de que as instruções para memória externa são diferentes das
instrúções para memória interna). Temos então, que para leitura o pino RD\ irá a nı́vel 0, mantendo
o pino WR\ = 1, e vice-versa para escrita. LEMBRETE: OS SINAIS RD\ E WR\ S ÃO GER-
ADOS ATRAVÉS DE PINOS DA PORTA 3 CONFORME VEREMOS NO ITEM 2.2.5
Página 46
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
OBSERVAÇÃO:
Não confundir este pino com o bit EA, presente no registro IE.
Esta é a opção utilizada quando se usa o 8031, que é um 8051 mas que não tem a ROM interna,
ou quando não se deseja arcar com as despesas de encomendar grande quantidade de peças do 8051
gravadas em fábrica.
DEVE FICAR CLARO QUE QUANDO SE UTILIZA MEM ÓRIA EXTERNA DE PROGRA-
MAS, EM QUALQUER OPÇÃO NÃO PODEREMOS MAIS UTILIZAR OS PINOS DAS PORTAS
0 E 2 COMO I/0.
Na figura 2.4, temos um esquema de Hardware onde colocamos 8 KBytes de programa e 8 KBytes
de dados externos, sendo que neste caso, temos toda a memória de programa externa, utilizando 0 8031.
Quando usamos os temporizadores internos como contadores de eventos, são outros dois pinos
desta porta que servem como entrada para o sinal de contagem. Se nosso projeto necessitar de inter-
rupção extema, será através de dois pinos desta porta que as mesmas serão sinalizadas à CPU.
E finalmente, nos dois pinos restantes, temos os que permitem a implementação do canal serial. A
maneira pela qual utilizamos ou não uma função especial da porta 3, será vista no momento em que
a estudarmos o canal serial.
Com relação aos pinos RD\ e WR\ são os únicos com os quais não precisamos nos preocupar, pois
seu controle é efetuado pela CPU, e fica claro que se desejamos utilizar memória de dados externa,
não utilizaremos estes pinos como I/0.
Página 47
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
1.Registrador
2.Direto
3.Indireto
4.Imediato
5.Relativo
6.Absoluto
7.Longo
8.Indexado
OP CODE RN
1 BYTE
Página 48
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
2 BYTE
RAM
INT
CONTEUDO
Posicao de Memoria
05 30h
CONTEUDO
R1 30 01h
00h
•mov 30h,#05h: Carrego a posı́ção da RAM interna de endereço ”30h”, com o valor ”05”(conteúdo=05).
•mov A,@Rl: Carrego ou movo para ”A”o conteúdo da memória apontada por R1,que é 30h,
isto é, ele sabe que é endereço indireto. Logo, ele sabe que o valor ”30h”dentro de R1 é um
endereço e não um conteúdo. Assim, ele vai na posição de memória com endereço ”30h”, pega
Página 49
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Olhando a ilustração da figura 2.5 deste item para melhor compreensão e leia este texto de novo.
Este tipo de instrução é codificado em 1 byte.
OP CODE Ri
1 BYTE
1 BYTE 1 OU 2 BYTES
A única exceção é a ı̀nstrução [mov DPTR,#data(16)], que é de 3 bytes, pois o endereço dela é de
2 bytes (16 bits).
Página 50
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
PC+3
OBS: Em geral, não fazemos estas contas, pois o compilador, quando usamos ”la-
bels”(nomes) como desvio, calcula tudo isto sozinho automaticamente.
jmp @A+DPTR: Salta para a posição dada pelo DPTR + conteúdo de ”A”, isto é, o ”A”pode
ser um contador de passos e o DPTR um ponteiro de faixas. Supondo que: ”DPTRH = meses do
ano e ”An = dias do mês. Logo, o DPTR aponta para a ucabeça”da tabela de cada mês, e em ”A”eu
insiro 0 ”ı́ndice”do dia do mês desejado. Assim, se vario ”An, já estou alterando o dia daquele mês
fixo, sem alterar mais o DPTR.
Página 51
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Quando opera como temporizador, o registro é incrementado a cada ciclo de máquina (usa como
base o cristal da CPU). O sinal de contagem aparece com 1/12 da freqüência 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 transição de 1 para 0 (borda de descida ↓) na
entrada T0 ou T1.
Deve-se ter um cuidado quando em operações em modo contador: já se sabe que as entradas são
amostradas durante S5P2 de cada ciclo de máquina (figura 2.1). Quando em um ciclo de máquina a
entrada é detectada em 1 e depois em 0, no próximo ciclo o contador é incrementado. O incremento
acontece em S3P1 do ciclo seguinte ao que foi detectada a transição. Para garantir que o nı́vel correto
tenha sido amostrado, é necessário que o sinal de entrada (o sinal que vai acionar os contadores) per-
maneça pelo menos um ciclo de máquina em nı́vel alto e pelo menos outro ciclo de máquina em nı́vel
baixo, quer dizer, a máxima freqüência que responderá o contador é de 1/24 da freqüência de clock. O
sinal de entrada pode ter qualquer ”duty cycle”, desde que se respeite a restrição antes mencionada.
Página 52
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Página 53
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Página 54
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Modo 0
Este modo é idêntico para os dois contadores/temporizadores. Neste modo tem-se um contador
de 8 bits com um divisor (pre-scaler) de 5 bits. Resulta então em um contador/temporizador de 13
bits, compatı́vel com o que havia no MCS-48. Os 13 bits são formados pelos 8 bits do registro THi
e pelos 5 bits menos significativos do registro TLi. Os outros 3 bits do TLi são indeterminados. O
transbordamento (overflow) é gerador quando a contagem faz a transição de 1FFFH para 0000; neste
instante ativa-se o bit de overflow (TF1 ou TF0).
A figura 2.8 apresenta um diagrama em blocos do contador/temporizador 1 operando em modo 0. A
mesma figura é válida para o contador/temporizador 0.
Página 55
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Modo 1
Este modo de operação é o mais simples e por isto é muito utilizado. É idêntico ao modo 0, mas
os contadores são de 16 bits. A figura 2.9 ilustra o diagrama em blocos para este modo, que é idêntico
para os dois timers.
Modo 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
idêntica. O transbordamento (overflow) não somente ativa TFi como também recarrega TLi com o
valor guardado em THi (este permanece inalterado). O valor de recarga deve ser fornecido por software.
Página 56
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Modo 3
Este é o único modo onde os contadores/temporizadores têm 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:
•TL0 → contador/temporizador de 8 bits usando TR1 e TF1 (ou seja, provoca a interrupção do
timer 1).
É como se existem 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. Não há problemas porque os modos são independentes. Também se pode usar o timer
1 (em modo 2) para gerar o ”baud rate”da porta serial.
Página 57
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
2.4.4 Exercı́cios
LED 10HZ
Acender os leds vermelho, amarelo e verde a uma freqüência de 10 Hz. Para solucionar esse
exercı́cio é necessário gerar um retardo equivalente ao perı́odo de 10 Hz. A figura 2.12 ilustra o cálculo
do valor do contador para gerar esse retardo.
Se F=10 Hz e CLOCK=3,575611 Hz, então N=29797. Como este é um contador que conta para
cima, temos que subtrair este valor de 65536. Com isto, N=65536-29797=35739 ou 8B9BH. Na
realidade, a freqüência gerada não será exatamente 10 Hz mas de um valor muito próximo:
F = 3,575611 / 12*29797 = 9,99 Hz Será utilizado o timer 0 no modo 1; a cada interrupção a rotina
acende um novo led e recarrega o timer.
;LED_10HZ.ASM;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 35739
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INIC
MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H
MOV P1 ,#0 ;APAGAR TODOS OS LEDS
MOV A,#01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ ;O CONTADOR
RLC A
MOV P1,A
RETI
END
Página 58
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
Notar que na rotina de interrupção está a recarga dos temporizadores que é feita com a instrução
”MOV direto,#data”mas que consome 2 ciclos de máquina, ou seja, que há um retardo que se acu-
mula. Para evitar ou corrigir isso, pode-se adicionar ao contador o retardo da instrução; é mais preciso
usar ”MOV TL0,# LOW (DEZ HZ+2)”.
Quando existem várias interrupções, não se sabe com certeza quando uma interrupção do tempo-
rizador pode ser aceita; isso implica um erro maior que se acumula. Há uma solução simples porque
depois do transbordamento o temporizador segue contando e esta contagem é exatamente o tempo
que atrasou o serviço da interrupção; basta usar esse valor na recarga.
As instruções a seguir ilustram a idéia.
Página 59
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
LED 1HZ
Acender os leds vermelho, amarelo e verde a uma freqüência de 1 Hz. A solução é idêntica ao
exercı́cio anterior, mas vai surgir uma dificuldade ao calcular os valores de recarga:
CLOCK=3575611 Hz e F=1 Hz
N=3575611 / 12*1 = 297968
Como se pode ver, o valor de recarga é muito grande (297 968 > 65 536) e impede a utilização do
temporizador. Uma boa saı́da é utilizar o esquema do exercı́cio anterior (com 10 Hz) e adicionar, por
software, um divisor por 10.
;LED_1HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU 32203
DIVISOR EQU 10
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INIC MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV R7,#DIVISOR ;PREPARAR DIVISAO POR 10
MOV TMOD,#1 ;TIMER 0 EM MODO 1
MOV IE,#82H
MOV P1,#0 ;APAGAR TODOS OS LEDS
MOV A,#01001001B
CLR C
SETB TR0
SJMP $
;
ORG 100H
TIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ ;O CONTADOR
DJNZ R7,FIM ;DIVIDIR POR 10
MOV R7,#DIVISOR
RLC A
MOV P1,A
FIM RETI
END
Página 60
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
ONDA1
Gerar através de P1.7 uma onda com o seguinte formato:
Página 61
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
ONDA2
Gerar através de P1.7 uma onda com o seguinte formato:
;ONDA2.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA EQU P1.7
R_600MICRO EQU 77 ;RETARDO DE 600 MICROSEG
R_25MICRO EQU 249 ;RETARDO DE 25 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO MOV TL0,#R_600MICRO ;PRIMEIRA CONTAGEM
MOV TH0,#R_25MICRO ;CONTAGEM SEGUINTE
MOV TMOD,#2 ;TIMER 0 EM MODO 2
MOV IE,#82H ;EA=1 E ET0=1
CLR SAIDA
SETB TR0 ;PARTIDA DO TIMER 0
SJMP $ ;LOOP INFINITO
;
TIM0 JB SAIDA,LB1 ;2 CICLOS
MOV TH0,#R_25MICRO ;2 CICLOS
SETB SAIDA ;1 CICLOS
RETI ;2 CICLOS
;
LB1 MOV TH0,#R_600MICRO
CLR SAIDA
RETI
END
Página 62
Microprocessadores e Microcontroladores - 2a Unidade - Prof. Vitor Leão Filardi
LEDS1
Acender os leds vermelho, amarelo e verde em seqüência, mudando a cada 10 pulsos em T1. Será
usado o contador/temporizador 1 como contador e programado para operar em modo 2, com um valor
de recarga igual a 246 (256-10). O acumulador e carry serão usados para acender os leds na seqüência
correta.
A chave SW3 aciona diretamente a entrada T1, mas há bouncing e por isso serão notadas mu-
danças nos leds antes de 10 acionamentos. Para esse caso especı́fico o bouncing deverá ser eliminado
por hardware.
Página 63
Capı́tulo 3
Terceira Unidade
Porta Serial
O modo de operação da porta serial é controlado pelo registro SCON, que é ilustrado na figura
3.1. A figura 3.2 apresenta um resumo dos modos de operação.
•SM2=1 e em modo 1 ==¿ interrupção (RI=1) com o bit de parada (stop bit) igual a 1.
Observação: Os flags TI e RI não são apagados por hardware e por isso a rotina de interrupção
deve fazê-lo, ou seja, estes flags devem ser zerados por software.
O registro PCON também toma parte na geração do baud rate da porta serial. Este registro é
ilustrado na figura 3.2.
Este modo pode ser utilizado para expandir as portas de I/O do microcontrolador, utilizando o
esquema a seguir:
Página 67
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
START Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 STOP
Usando o contador/temporizador 1 programa-se qualquer baud rate. Na grande maioria dos casos
tem-se o baud rate e é buscado o valor N a ser programado no contador/temporizador 1 (o mais
cômodo é usar o modo 2 - auto recarga). Um problema que sempre existe é o erro gerado pela aprox-
imação do valor a ser programado no contador/temporizador. Isto provoca a geração de baud rates
ligeiramente diferentes.
Exemplo: Usando um cristal de 3,575611 MHz, qual é o valor a ser programado no timer 1 para
operar a 9600 bauds (usar SMOD=0)?
N = 3575611 / (384*9600) = 0,9699 (aproximadamente 1)
Usando timer 1 no modo 2 tem-se: 256 - 1 = 255 (TH1=TL1=255).
Observação: a transferência do dado recebido para o registro SBUF (e RB8, que guarda o stop
bit) e a ativação do flag RI somente acontecerá se:
RI = 0 e (SM2= 0 ou o bit de parada =1).
Página 68
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
START Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 TB8 STOP
O único controle que se tem sobre o baud rate é através do uso do bit SMOD. Se SMOD=0,
trabalha-se com BR=clock/32 e se SMOD=1, trabalha-se com BR=clock/64. A figura 3.6 ilustra o
esquema para geração do baud rate no modo 2.
Na transmissão o bit 8 é copiado do bit TB8. Na recepção o bit 8 é copiado para o bit RB8. Os
bits TB8 e RB8 estão no registro SCON.
Página 69
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
START Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 TB8 STOP
Deve-se testar os flags RI e TI para determinar se a interrupção foi por transmissão ou por recepção.
Os flags RI e TI devem ser apagados por software.
Um outro cuidado muito importante é com a geração do baud rate. Muitas vezes não se consegue
a comunicação serial devido à imprecisão do baud rate. Portanto o problema a seguir é proposto:
Programar o contador/temporizador 1 para gerar 9600 bauds para a porta serial operando em modo
3, sendo que o cristal é de 4 MHz.
Na solução calculou-se que N=1,085 mas somente podem ser programados números interos; assim,
caso se aproxime para 1, o baud rate gerado será de BR=4000000/384=10416,7. Será que irá funcionar
bem com esse baud rate ?
Para responder esta pergunta é necessário compreender o que acontece com a transmissão serial.
Esta transmissão é assı́ncrona, quer dizer, pode iniciar em qualquer instante; o inicio é caracterizado
pela presença de um bit de partida (START). Uma vez iniciada, deve-se garantir a duração de cada
bit. Para cada byte é transmitido um bit de partida, os bits de dados e um ou dois bits de parada.
O que se deve buscar é garantir que não haja um erro muito grande neste frame de bits. A figura 3.8
ilustra o caso da porta serial operando em modo 3.
Página 70
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
A fase mais critica é a recepção do último bit porque poderá apresentar uma defasagem muito
grande (rotuladas de E1 e E2 na figura). Não se pode especificar um valor limite para esses erros pois
diversos fatores, particulares para cada caso, precisam ser levados em consideração. Como um valor
prático e que funciona na grande maioria dos casos arbitra-se que o valor do erro, para o último bit,
deve ser menor que 40% da duração de um bit (usando BR exato).
11 11 40 1
| − |≤ ∗
BRp BR 100 BR
11 11 1
A equação pode ser simplificada para: | − |≤
BRp BR 27, 5 ∗ BR
Como pode ser verificado, com um cristal de 4Mhz não se conseguirá transmitir a 9600 pois o baud
rate será muito grande.
11 11 1
| − |≤
10416, 7 9600 27, 5 ∗ 9600
8,167 µs≤3,788µs→falso
Página 71
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
Os modos 2 e 3 permitem interligar vários 8051, sendo um mestre e vários escravos. Nestes modos
temos:
*1 start bit;
*8 bits de dados;
*um nono bit que vai para o bit RB8 ( na recepção) ou pode ser escolhido 0 ou 1 na transmissão
escrevendo-se em TB8;
*1 stop bit
2)Quando o mestre quiser enviar dados para algum escravo, ele escreverá 1 em seu bit TB8 e
então enviará serialmente o endereço do escravo desejado, e como teremos todos os bits RB8
em 1, todos escravos serão interrompidos para verificar se é seu o endereço enviado.
3)O escravo selecionado zerará o seu bit SM2 e estará preparado para receber os dados, os quais
terão agora o nono bit (RB8) em 0.
4)Os demais escravos permanecerão com SM2 em 1 e, dessa forma, não serão mais interrompidos
pois os dados têm RB8 = 0.
5)Em resumo, o mestre envia endereços 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 endereço
com o nono bit em 1.
Página 72
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
Página 73
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
3.1.7 Exercı́cios
TX SER
Usando um loop infinito, transmitir pela porta serial todos os caracteres ASCII de ”0”a ”Z”. Usar
9600 bauds, 8 bits de dados, 1 bit de partida e 2 bits de parada.
Para este caso o modo 3 é o mais adequado e TB8=1 será usado para gerar um bit de parada. A
transmissão será feita por interrupção, quer dizer, a cada byte transmitido haverá uma interrupção.
O contador/temporizador 1 será programado para modo 2 (auto-recarga).
RX SER
O circuito deverá responder aos seguintes comandos que chegam pela porta serial:
Estes comandos vão chegar pela porta serial usando o formato: 1 bit de partida, 8 bits de dados,
2 bits de parada, com um baud rate de 9600.
;
LB5:
CJNE A,#"a",LB6 ;CHEGOU a
CLR LED_AMAR
SJMP ESPERA
;
LB6:
CJNE A,#"V",LB7 ;CHEGOU V
SETB LED_VERDE
SJMP ESPERA
:
LB7:
CLR LED_AMAR ;CHEGOU v
SJMP ESPERA
;
SERIAL:
CLR RI ;APAGAR FLAG DE INTERRUP
MOV A,SBUF ;COLOCAR DADO NO Acc
SETB CHEGOU
RETI
END
Uma vez que nós aprendemos e praticamos as técnicas de programação ensinadas, poderemos
aplicar tal metodologia de implementação de programas a qualquer outra linguagem de programação,
seja ela de baixo, médio ou alto nı́vel.
Existem muitas linguagens de programação que podem ser utilizadas na programação de sistemas
inteligentes, utilizando mierocontroladores, além do Assembly (nı́vel baixo), tais como as linguagens
estruturadas de programação C (nı́vel médio), BASIC e PL/M (nı́vel alto). A escolha de uma delas
na elaboração de um projeto de software é muito importante é envolve o conhecimento técnico espe-
cializado.
Página 76
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
A caracterı́stica de uma linguagem de nı́vel alto é a de ser muito mais próxima da linguagem do
ser humano. Trata-se de uma linguagem descritiva, cujas instruções são palavras escritas em inglês e
que estão muito longe das instruções em Assembly. Cada instrução de uma linguagem de nı́vel alto
é representada por muitas instruções de uma linguagem de nı́vel baixo. Programar utilizando uma
linguagem de nı́vel alto é muito mais fácil que programar com uma linguagem de nı́vel baixo ou médio.
Mas quando se utiliza uma linguagem de programação de nı́vel alto, são gerados programas maiores e
com menor velocidade de processamento. Outra desvantagem da linguagem de nı́vel alto, que muitas
vezes é interpretada como vantagem, é a de não exigir do programador o conhecimento completo e
detalhado do dispositivo que se deseja programar.
Viabilidade do projeto
a)Obter e entender claramente as especificações do cliente (desejos do cliente, caracterı́sticas
do produto e do sistema, modo de funcionamento etc.);
b)Elaborar diferentes estratégias de soluções para o projeto. Isso pode ser feito utilizando-se
diagramas de fluxo de dados (DFD), diagramas de blocos, desenhos etc.;
d)Escolher a melhor solução junto com o cliente, ou seja, aquela que utilizará o menor número
de componentes e a que apresenta maior velocidade de processamento. Isso afeta diretamente
o custo final do hardware e traz uma maior flexibilidade funcional do produto.
Página 77
Microprocessadores e Microcontroladores - 3a Unidade - Prof. Vitor Leão Filardi
Implementação do projeto
a)Elaborar o fluxograma do programa em Assembly: os fluxogramas devem ser implementados
desde o nı́vel de ’macrodetalhamento’ até o nı́vel de ’microdetalhamento’. Um fluxograma
representando o nı́vel de ’macrodetalhamento’ deve conter as idéias e os objetivos dentro dos
blocos representativos. Um fluxograma representando o nı́vel de ’microdetalhamento’ deve
utilizar as representações simbólicas dos mnemônicos das instruções dentro dos blocos repre-
sentativos. Exemplo: dentro de um bloco do fluxograma, representar (A) ← (B): significa
a instrução MOV A,B;
d)Fazer a linkagem dos arquivos binários para agrupar de maneira organizada, os diferentes
blocos de programa que compõem o programa final;
e)Efetuar a simulação do programa para verificar seu funcionamento e corrigir os possı́veis erros
de lógica. Nessa fase, não é necessário 0 hardware do produto;
f)Realizar a gravação da EPROM, inserção no hardware do produto e teste fı́sico de sua fun-
cionalidade;
g)Efetuar a emulação do programa (é necessário um sistema emulador) para corrigir erros de
lógica ou eventuais falhas de algum componente, utilizando o próprio hardware do produto;
3.2.3 Fluxogramas
Essa ferramenta de programação é fundamental para a implementação de qualquer rotina de um
programa de microcomputador. É por meio dessa ferramenta que se pode observar como foi imple-
mentada a estratégia de solução de uma necessidade de programação elaborada por um programador.
O fluxograma representa como o fluxo de informações será processado pelo microprocessador.
Página 78