Anda di halaman 1dari 258

SA LVADOR P ..

GI MEN EZ

PEARSON
Prentice
Hall

São Paulo

Brasil Argentina Colômbia Costa Rica Chile Espanha


Guatemala México Peru Porto Rico Venezuela
© 2002 by Pearson Education do Brasil
Todos os direitos reservados
Editor: RogerTrimer
Gerente de Produção: Silas Camargo
Produtora Editorial: Sandra Cristina Pedri
Capa: Marcelo da Silva Françozo

Dados Internacionais de Catalogação na Publicação (CIP)


(Câmara Brasileira do Livro, SP, Brasil)

Gimenez, Salvador Pinillos


Microcontroladores 8051: Teoria do hardware e do software/ Aplica-
ções em controle digital/ Laboratório e simulação.

2002 - São Paulo - Pearson Education do Brasil Ltda.

1. Intel 8051 (Microprocessadores)


2. Microcontroladores 1. Título

ISBN: 85.87918-28-1

02-2834 CDD - 004.16

'
lndice para catálogo sistemático

1. Microcontroladores 8051 : Microcomputadores


digitais : Ciências da computação . 004.16

2005
Direitos exclusivos para a língua portuguesa cedidos à
Pearson Education do Brasil,
uma empresa do grupo Pearson Education
Av. Hermano Marchetti, 1435
Cep: 05038-001 - São Paulo - SP
Tel : (11) 3613-1222 - Fax: (11) 3611-0444
e-mail: vendas@pearsoned.com.br
SUMÁRIO

. ..
A gra d ec1mentos ................................................................................................. v1_1
, . .
P re f ac10 .................................................................................................................. 1x
Introd uçao - .......................................................................................................... x1... 11
Capítitlo 1 Fund.a 1nentos de microcomputadores .......................................... 1
Capítitlo 2 A família de microcontroladores MCS-51 da Intel ................... 17
Capítulo 3 O conjunto de i11struções da fa 1nília de microcontroladores
MCS-51 da Intel ............................................................................. 49
Capítulo 4 Fluxograma e progra1nação em Assembly, aplicados à família
de microcontroladores MCS-51 da Intel .................................... 77·
Capítulo 5 Sub-roti11as e estruturação da linguagem de programação
Asse1nbly ...................................................................................... 101
Capítulo 6 As portas (portes) de entrada e saída e suas aplicações no
controle digital de máquina e de processo ................................ 125
Capítitlo 7 Os tíniers / contadores .................................................................. 147
Capítitlo 8 A mterface de comunicação serial ............................................. 167
Apêndice A Experiência 01: Implementação e execução de programas
em Assembly por meio do simulador A VS1M51 ou do Kit
de Desenvolvimento AES-51 ..................................................... 189
Apêndice B Experiência 02: Modos de endereça1nento da família de
microcontroladores MCS-51 da Intel ........................................ 205
Apêndice C Experiência 03: Fluxograma e programação e1n Assembly
aplicados à família de microcontroladores MCS-51
da Intel .......................................................................................... 209
Apêndice D Experiência 04: Sub-rotina e estruturação da linguagem
Assembly aplicados à família de microcontroladores
MCS-51 da Intel ........................................................................... 213
Apêndice E Experiência 05: As portas de entrada e saída da família
de microcontroladores MCS-51 d.a Intel e suas aplicações
no co11trole d igital de máquina e de processo ......................... 219
VI MICR0C0NTR0LAD0RES 8051

Apê11dice F Experiê11cia 06: Os timers/ contadores da família de


microcontroladores MCS-51 da Intel ........................................ 225
Apêndice G Experiência 07: A interface de comunicação serial da
família de microcontroladores MCS-51 da Intel ..................... 233
,
ln dice. Remissivo ............................................................................................... 241
AGRADECIMENTOS

D edico esta obra à mii,ha família, razão de 1ninha vida, à minha que-
rida esposa Valéria e às n1i1u1as duas qtteridas, lindas e especiais fill1as,
Giovanna e Giorgia, pelos seus incansáveis e gra11diosos incentivos em todos
os 1no1ne11tos no decorrer da elaboração deste livro.
A meus pais, Salvador Gimenez e Maria Jesus P. Gimenez, minha eter11a
gratidão por tudo o que fizeram e contit1uam fazendo por mim.
Aos meus queridos sobrin.h os Ana Carolina Gimenez de Godoy e Felipe
Gimenez de Godoy, à minl1a querida irmã Maria Clara P. Gimenez d.e Godoy
e ao seu marido, At1tônio Cury de Godoy.
Aos n1eus eternos 'anjos da guarda' e colaboradores, Dona Leonice Dei
Santi, Dona Leonor Dei Santi, Mirtes Ribeiro e Milto11 Ribeiro, pela formidá-
vel irtfra-estrutura.
Ao Prof. Dr. João Antônio Martino, pela confiança depositada em mi-
nha pessoa ao longo de todos esses anos.
Ao Prof. Aldo Belardi, pelo grand.e apoio e incentivo para a publicação
desta obra.
Ao Prof. Devair Arrabassa, pelo imenso ince11tivo para a realização des-
te trabalho.
Aos professores Aderbal A. Penteado Jr., Fausto de Freitas Del Monte,
Mario Cesar Ramos, Herald Barbuy, Renato Faria, Marco A. Fumagalli, Wilto11
Ney Amaral Pereira, Marcelo Pavanello, Marcelo Bellodi, Aparecido Nicollet,
Vítor Sonnemberg, Luciano Camillo, Paulo H. Tetsuo, Jorge Na barrete, M. A.
Assis, Orlando Del Bianco, Orlando Onofre e Fabrízio Leonardi, tarnbé1n pe-
los incessantes ince11tivos para a realização desta obra.
A todos os grandes amigos professores da FEI, da OMEC/UMC e do
grupo SOI CMOS do LSI-EPUSP, que direta ou indireta1nente contribuíram
para a finalização desta obra.

Salvador Pinillos Gimenez


PREFÁCIO

.,
E uma realidade que os microcomputadores são os grandes persona-
gens de nossa sociedade. Eles visam principalmente facilitar e agilizar as ati-
vidades básicas do cotidiano. Parte desses microcomputadores integra a maio-
ria dos equipamentos residenciais, comerciais, auto1notivos e industriais e
são, em gra11de parte, implementados com 1nicroco11troladores. Isso ocorre
principalmente por serem baratos e por reunirem características de hardware
e software dedicadas a aplicações simples de automação, tais como:
a) As de uso pessoal: relógios de pulso digitais, agendas eletrônicas,
pagers, telefones celulares, handhelds etc.
b) As de uso residencial: portões auto1náticos, alarmes residenciais, te-
levisores, rádios digitais, equipa1nentos de áudio, vídeo e DVD, for-
nos de microondas, máqui11as de lavar e secar roupas, máquinas de
lavar pratos, rádio-relógios digitais etc.
c) As de itso i1idustrial: CLPs (Controladores Lógicos Programáveis),
equipamentos digitais de medição de tensão, corrente, resistência
ôhmica, pressão, te1nperatura e umidade, relógios de ponto,
co11troladores de acesso restrito etc.
d) As de uso automotivo (eletrônica embarcada): computadores de
bordo, alarmes de carros, rádios automotivos, i11jeções eletrônicas
de automóveis e caminl1ões, controle de freios ABS etc.
e) As de uso geral: caixas eletrônicos de bancos, catracas eletrônicas de
ônibus urbanos e de 1netrô, impressoras, teclados de computadores,
computadores pessoais etc.
Nota-se que a quantidade de aplicações é bastante grande, e visando
disponibilizar as ilúormações sobre essa tec11ologia tão importante nos dias
de l1oje, este livro foi desenvolvido para capacitar os leitores para a tecnologia
dos microcontroladores, pril1cipal1nente os da família MCS-51 da Intel, em
nível técnico-profissionalizante. Este livro pode ser usado também por estu-
dantes de escolas técnicas profissionalizantes, al unos de escolas de engenha-
ria elétrica (eletrônica, computação e telecomunicações) e mecatrônica.
Cabe aqui ressaltar que o conl1ecimento dessa tec11ologia não é mais
uma especialização adicional de poucos profissionais de sucesso no mercado
X MICR0C0NTR0LAD0RES 8051

de traball10, mas sim un1 requisito básico e fundamental para os profissio-


nais que desejam fazer parte de um mercado de trabalho competitivo. Além
disso, sabe-se que os profissionais especialistas nessa área obtêm grand.e pe-
netração profissional em e1npresas de média e alta tecnologia, e em todos os
países do mundo existem grandes oportu11idades profissionais para os re-
cursos humanos capacitados nessa área.
Após a leitura, o entendimento e a si1nulação prática sugerida neste
livro, o leitor será capaz de desenvolver projetos de hardware e software de
equipamentos inteligentes que utilizam microcontroladores, visando princi-
palme11te ao estudo da família de microcontroladores MCS-51 da Intel. A
partir daí, o leitor também poderá executar se1n muito esforço projetos com
microco11troladores de fornecedores como Microchip, ATMEL, Texas
Instruments e Motorola, pois os princípios eletrônicos básicos são exatamen-
te os mesmos qt1e os aqui aprese11tados. Para isso, o leitor só terá de co1u1ecer
a estrutura interna, a pinagem e as instruções de tais microcontroladores.
Assim, o objetivo principal deste livro é o estudo da família de
microcontroladores MCS-51 da Intel. Após apresentar em detalhes sua estru-
tura interna relacionada ao hardware, sua pi11agem e suas instruções, aborda
a programação Assembly aplicada a essa família de microco11troladores (flu-
xograma, programa-fonte, programa-objeto e simulação) e, finalmente, e11si-
na como implementar projetos de equipamentos inteligentes com a utiliza-
ção dos 1nicroco11troladores MCS-51 da 111.tel.
A teoria sobre a família de microcontroladores MCS-51 é novamente
abordada nos exercícios resolvidos e propostos. O livro traz também um con-
junto de apêndices relacionados a cada capítulo que apresenta1n aplicações
práticas por meio do uso do simulador A VSIM51 da AVOCET ou do kit de
desenvolvimento AES-51. Essas aplicações práticas podem ser utilizadas como
aulas de laboratório e1n cursos técnicos profissionalizantes ou em cursos de
engenharia, para que o leitor possa entender, visualizar e praticar a utiliza-
ção dos microcontroladores da família MCS-51 da Intel em projetos de con-
trole digital de máquina, processo e automação.
Os exemplos foram implementados utilizando-se a linguagem de pro-
gramação Assembly, e foram editados pelo editor de textos Edit, do DOS,
compilados e linkados com o compilador e linkador produzidos pela AVOCET.
Todos esses exemplos foram implementados e testados pelo autor, a fim de
eliminar qualquer risco de este livro conter illformações incorretas.
Por estar diretamente relacionado a cadeiras de cursos de graduação e
pós-graduação de grande parte dos cursos técnicos e de engenl1aria elétrica e
mecatrônica, este livro sugere um co11junto de oito apêndices com aulas prá-
ticas, para que o leitor desenvolva, de maneira gradativa, suas 11.abilidades
PREFÁCIO XI

práticas co1n o estudo da teoria apresentada em cada capítulo, como mostra-


do na Tabela l, apresentada a seguir.

Tabela 1 Execução de aulas práticas de simulação após a leitura do(s) capítulo(s).

Após leitura e Aula prática


entendin1ento seguindo o Nome da experiência
do(s) capítulo(s): Apêndice:
1 e2 A Implementação e execução de progran1as en1 Assembly ou por
n1eio do sin1ulador A \IS/J\1151 da A VOCET ou do kit didático
AES-51.
3 B Modos de endere.çamento da fam ília de n1icrocontroladores
MCS-51 da Intel.
4 e Pluxogran1a e programação em Assembly, aplicados à família
de n1icrocontroladores MCS-51 da Intel.
5 D Sub-rotinas e estruturação da linguage1n Asse1nbly.
6 E As portas de entrada e saída da fa1nília de microcontroladores
MCS-51 da Intel e suas aplicações no controle digital de
1náquina e de processo.
7 F Os 1i111ers/contadores da família de microcontroladores
MCS-51 da Intel.
8 G A interface de con1unicação serial da fa,n ília de
microconu·oladores MCS-51 da Intel.

Após a leitura e o entendime11to de cada capítulo é recomendado que o


leitor pratique por meio da simulação, utilizando um dos simuladores
disponibilizados na World Wide Web (basta procurar em uma das ferramen-
tas de busca, utilizando as seguit1tes palavras-cl1ave: 8051 siniulator) ou por
meio d.e um kit didático ou de desenvolvimento, se existirem em sua institui-
ção de ensino. A fim de facilitar a aplicação prática dessa tecnologia, serão
for11ecidas i11for1nações sobre o simulador A VSIM51 da A VOCET e sobre o
kit de desenvolvi1nento A ES-51.

Observação: não existe ligação comercial entre o autor e a editora des-


te livro com os fornecedores do simulador e do kit de desenvolvimen-
to. Eles foram utilizados e citados aqui porque estavam disponíveis
para o autor no momento da elaboração desta obra. Este livro não se
propõe a recomendar a compra de nenhuma espécie de simulador ou
de kit de desenvolvimento. Isso fica por conta do leitor.

Espera-se que o leitor possa, ao final da leitura deste livro, com o enten-
dimento dos exercícios resolvidos, com a prática dos exercícios propostos e
co1n a simulação prática aprese11tada nos apêndices, se tornar um especialis-
ta em projetos de produtos inteligentes, tanto no que se refere ao l1ardware
co1no ao software. Lembre-se de que co11hecimento nu11ca é de1nais.
1NTRODlJCÃO
,

A expectativa da sociedade moderna é cada vez mais buscar e con-


quistar uma 1nell1or qualidade de vida em todos os níveis relacionados ao ser
humano e ao meio em que vive. Tal qualidade de vida, em grande parte, está
associada à pesquisa e ao desenvolvimento das diferentes áreas da ciência e
da tecnologia. Uma vez adquirida tal tecnologia pelos cientistas e dispo-
nibilizada para as pessoas por meio de equipamentos e máquinas, pode-se
dizer que direta ou indireta1nente ela é alcançada pelos diversos setores da
sociedade (habitação, medici11a, transporte, segurança, entrete11-imento etc.).
Uma das tecnologias que vêm cresce11do em uma velocidade bastante
impressionante é a tecnologia da engenharia eletrônica. Repare também. que
ela se tornou u1na tecnologia-base, pois suporta, hoje en1 dia, as demais áreas
de conhecimer1to. Isso se deve principalmente à descoberta e à melhoria con-
tínua do que se pode chamar de tecrzologia do conzputador.
Com o desenvolvimento muito rápido da tecnologia de integração de
circuitos eletrô1ucos, que corresponde à área da engenl1aria elétrica chamada
de microeletrônica, foi possível integrar as partes básicas de um computador
(unidade central de processame11to, unidades de armazename11to de infor-
mações e unida.d esde e11trada e saída). Conseqüentemente, foi possível im-
ple1ne11tar computadores n1ais compactos, co1'lfiáveis e baratos, da11do ori-
gem a.o s chamados microcotnputadores.
Os primeiros microcomputadores foram implementados fisicamente com
diferentes circuitos integrados, cada um com sua fu11ção, microprocessador,
memória não-volátil (ROM/PROM/EPROM/EEPROM) e volátil (RAM) e
portas de entrada e saJda (E/S). Esses circuitos integrados formava1n as par-
tes básicas de u1n co1nputador digital. Cada componente foi interligado en-
tre si, formando os primeiros microcomputadores.
O prilneiro microprocessador ou a prilneira unidade de processame11to
central (CPU, Central Processing Unit) foi um microprocessador de 4 bits, o 4004
da Intel. Seu sucesso foi tal que os projetistas solicitavam unidades com n1aiores
capacidades d.e processamento para aplicações 1nais sofisticadas. Depois, a I11tel
implementou os microprocessadores de 8 bits 8008, 8080 e fu1al1nente o 8085.
Outros fabricantes, co1n.o Motorola e Zilog, la11çaram ta1nbém microprocessadores
de 8 bits, no caso o 6800 e o Z80, respectivamente, para concorrer com a Intel.
Depois viera1n os microprocessad.o res de 16, 32 e 64 bits. Cada vez mais a
microeletrô1uca foi sendo desenvolvida, e cada vez mais l1avia um número
XIV MICR0C0NTR0LAD0RES 8051

maior de co1npo11entes Í11tegrados por urudade de área. Co1n isso foi possível
integrar todos os blocos básicos de u1n microco1nputador digital em un1a única
pastilha de silício, originando assim os 1nicrocoritroladores.
O 1nicroco11trolador nada mais é que um microcomputador implemen-
tado em um único circuito integrado, no qual estão i11tegradas todas as uni-
dades básicas de wn computador.
Esses microcontroladores são utilizados principalmente em equipamen-
tos portáteis de baixo custo e são os grandes contribuidores para a automação
do mundo atual, por isso o nosso i11teresse e1n estudá-los nesta obra.
Repare que isso não tem mais parada e nem tampouco volta. Hoje se
pode dizer que o ser l1umano é totalmente dependente dessa tecnologia. Ima-
gine o homem de hoje em dia viver sem as máquinas e os equipamentos
disponíveis atualmente (carros, aviões, trens, barcos, telefones celulares,
microcomputadores, equipamentos médicos etc.). Dessa maneira, pode-se per-
guntar como ficaria a qualidade de vida se n.ã o pudéssemos contar mais com
essas máquinas e equipamentos.
Tais máqui11as e equipamentos, em sua grande maioria, usatn a
tecnologia de co1nputador. Quanto àquelas que ainda não foram implemen-
tadas com tal tec11ologia, pode-se dizer que existe aí u1na grai1de oporturuda-
de de 11egócio, pois certa1ne11te, se i1nplementadas, ficarão mais compactas,
baratas e confiáveis, co1n gra11des perspectivas de 1nercado.
Assim, os leitores, futuros técnicos em eletrônica ou futuros engenheiros
nas mais diversas áreas de conl1ecimento da engenharia elétrica, principalmei1te
no que diz respeito às áreas de eletrônica, computação, telecomunicações e
mecatrônica, não podem e nã.o devem ficar fora do contexto da tecnologia do
computador, pois corresponderia a ficar fora do mercado de traball10.
Assim, esta obra foi criada co1n o objetivo de suprir u.ma necessidade
de 1nercado, sendo u1n 1naterial bibliográfico que apresenta teoria e exercí-
cios resolvidos e propostos, além de aulas práticas em que o leitor pode
praticar seus conhecimentos utilizando os simuladores disponíveis gratui-
tamente na Internet. Este livro també1n apresenta co1no características prin-
cipais sua maneira simples, objetiva e gradativa de ensinar ao aluno de cur-
sos técnico-profissionalizantes e de cursos de e11genharia elétrica (eletrô11ica,
computação, telecomunicações e mecatrônica) a tecnologia do con1.putador.
Esta obra reúne o conhecimento acumulado pelo autor em quil1ze anos
de experiência tanto em empresas de desenvolvimento de produtos inteli-
gentes como em instituições de ensi110 de e.n genharia co1n significativo su-
cesso na formação de recursos humanos.
Assim, espera-se que o leitor, ao final do estudo e da prática da tecnologia
aqui apresentada, se torne um projetista de l1ard\.\rare e software de equipa-
mentos inteligentes que utilizam microco11troladores.
capítulo

FUNDAMENTOS DE
MICROCOMPUTADORES

1.1 Objetivos
•:• Especificar as definições básicas da computação
•:• Apresentar e definir a estrutura básica dos microcomputadores
•:• Apresentar a arquitetura do sistema microcomputadorizado e como
os blocos básicos se comunicam entre si

1.2 lntroducão

teórica
1.2.1- Conceitos básicos da computação: ai1tes de iniciarmos o estudo detalha-
do d.a teoria dos microcontroladores é necessário, em primeiro lugar, relembrar
alguns conceitos básicos funda1nentais para o entendimento dos assuntos
que serão abordados nos diferentes capítulos e apêndices deste livro. Mesmo
considerando tais definições co1no pré-requisitos para atingir as metas deste
livro, o objetivo de descrevê-las é evitar que o leitor tenha de recorrer a ou-
tras obras durante a leitura deste livro.

Bit: abreviação de dígito binário (binary digit), que corresponde ao valor zero
(O) lógico ou ao valor um (1) lógico. Zero lógico geralmente corresponde
a zero volt (V) e um lógico, a 5 ou 3 volts (V).
Byte: representação numérica composta de 8 bits. Pode representar números
de OOh (= 010) a FFh (= 25510). Essa representação é vasta1nente Lttilizada
e1n quase todos os capítulos deste livro, mas é principalmente
empregada na representação das instruções que o microcontrolador é
capaz de executar.
2 MICR0C0NTR0LAD0RES 8051 Cap. 1

Registradores: conjunto de jlip-jlops, geralmente do tipo D (unidade básica


de armaze11ame11to de informação), que são interligados em paralelo
entre si. Eles são responsáveis pelo armazenamento de urna informação
que pode ter 8, 16, 32, 64 ou 128 bits, dependendo de quantos jlip-jlops
do tipo D estão interligados er1tre si. Os registradores apresentam
características voláteis e, quando eles são desenergizados,
perdem suas informações. Embora bastante conl1ecido, esse conceito fa-
cilitará o entendimento do leitor à medida que este livro definir os regis-
tradores de funções especiais (SFRs, Special Furzctio·n Registers) e tam-
bé1n durante a descrição da me1nória RAM interna do microcontrolador.
Microcomputador: equipamento compacto cujo objetivo principal é si1nular
(imitar) eletronicamente o siste1na chamado ser hu1nano. Suas principais
vantagens são: grande velocidade do processamento das informações e
alta confiabilidade nas ativid.ades executadas. Ele é i.m plementado por
três blocos bá.sicos: Unidade Ce11tral e de Processamento, Unidade de
Memória e U1údade de Entrada e Saída de Informações. Essa definição
é de primordial importância, pois a principal meta deste livro é trans-
formar o leitor em um projetista de l1ard ware e software de
microcomputadores i1nplementados com os 1nembros da família de
microcontroladores MCS-51 da Intel.
Instrução: define uma única ação (tarefa) que o microcomputador pode exe-
cutar por vez. As ações das instruções podem corresponder a opera-
ções de leitura e escrita nos conteúdos dos registradores ou nas posi-
ções de me1nórias, a operações lógicas e aritméticas etc. Exemplo: co-
piar um byte do conteúdo de uma posição de memória para outra,
escrever um byte de um registrador para outro, adicionar dois bytes
etc. Uma instrução pode ser constituída ou representada por t1m ou
1nais bytes. Exemplo: a i11strução MOV A,RO é defi11ida por um byte,
E8h, e11qua11to a i11strução MOV A,#25h é definida por dois bytes, 74h
e 25h. Elas são definidas por seus fabricantes. Essa definição será utili-
zada para entender co1no um microcomputador fu11ciona e o que vem
a ser um conjunto de instruções que o microcontrolador é capaz de
executar.
Equipamento inteligente: equipame11to implementado com microproces-
sador ou com microcontrolador.
Programa ou software: definido por um conjitnto de instruções arranjadas de
maneira organizada por um programador (profissio11.al especialista em
computação), com o objetivo de infor1nar ao 1nicrocomputador o que
FUNDAt\'1ENTOS DE MICROCOMPUTADORES 3

ele deve exect1tar, ou seja, o programa i11forma ao microcomputador


quais as tarefas que devem ser executadas ao longo do tempo. Exis-
tem várias classificações de programas: os programas básicos
(softwares básicos), os utilitários e os aplicativos. Exemplos de pro-
gramas básicos: DOS, o programa de um forno de mjcroondas etc.
Exem.plos de programas utilitários: PCShell, Doctor Norton Utilities etc.
Exe1nplos de progra1nas aplicativos: editores de texto, como o MS-
WORD; as plarulhas eletrôrucas, como o MS-EXCEL, etc. O programa
sempre deve estar armaze11ado em uma urudade de ar1nazenamento
de i11formações, ou seja, em uma memória. Essa defirução é básica e
funda1nental para os leitores que se tor11arão responsáveis pela im-
plementação do software de equipamentos que utilizam micro-
controladores (equipamentos i11teligentes).
Firmware: programa (software) que está exclusivamente ar1nazenado em
uma mem.ória 11ão-volátil (ROM/PROM/EPROM/EEPROM) de um
equipamento inteligente. No mírumo, o firmware tem a finalidade
priri.cipal de programar a forma de operação do 11.ardware (número
de portas de e11trada e saída, forma de comunicação serial, forma de
operação dos timers/ co11tadores etc.) e de definir suas condições ini-
ciais de operação. Essa definição também é de fundame11tal impor-
tância, pois o leitor será orientado justamente para ser especialista
110 desenvolvimento e na implementa.ç ão do firmware de equipamen-
tos i11teligentes.
Hardware: são as partes eletrônicas que compõem um 1nicrocomputador,
como a 1nother board (placa mãe que contém pelo menos o micro-
processador ou o microcontrolador de um microco1nputador), a placa
de vídeo de um microcomputador etc. Essa definição é básica e será
utilizada e1n quase todos os capítulos e apê11dices deste livro.
Microprocessador ou Unidade Central de Processamento (CPU): mais co-
11.hecido como CPU (Central Processing Unit). Faze11do a11alogia com o
sistema ser hurnano, o microprocessador, ou CPU, de um microcomputa-
dor corresponde ao cérebro de um ser humano. Fisicamente é um dispo-
sitivo semico11.dutor (circuito integrado, CI ou IC, abreviação do no1ne
e1n inglês: lntegrated Circitit) constituído por milhões de tra.n sistores que
implementam uma variedade de circuitos (registradores, máquinas
seqüenciais, circuitos lógicos etc.). Ele é responsável pela busca de um
programa 11.a 1nemória e por sua execução. Esse conceito será sempre
e1npregado 110 decorrer desta obra, mas será et1fatizado principal1nente
4 MICR0C0NTROLAD0RE$ 8051 Cap. 1

dura11te a definição do pri11cípio de funcionamento dos equipamentos


inteligentes e na definição do ciclo de busca e execução das instruções
do 1nicrocontrolador.
Microcontrolador: dispositivo semicondutor em forma de CI, que integra
todas as partes básicas de um microcomputador - microprocessador
(CPU), 1ne1nórias não-voláteis (ROM/PROM/EPROM/EEPROM), me-
mórias voláteis (RAM, SRAM, DRAM, Flash RAM), portas de entrada e
saída (portas de co1nunicação paralela, portas de comt111icação serial,
conversores analógicos/ digitais, conversores digitais/ analógicos etc.).
Ele é conhecido como um microcomputador implementado em um úni-
co CI. Geralmente, é limitado em ter1nos de quantidade de memória,
pri11cipalme11te no que diz respeito à memória de dados, e é utiliz ado
em aplicações específicas, ou seja, naquelas que não necessitam armaze-
nar grandes quantidades de dados, como em automação residencial (for-
11os de 1nicroondas, máquinas de lavar louça, máqui11as de lavar roupa,
telefones, alarmes residenciais, automação de portões etc.), en1
automação predial (elevadores, controla.dores de energia elétrica etc.),
em automação industrial (robótica, controladores lógicos programáveis,
ou CLPs, controladores de acesso restrito, relógios de ponto) e na
auto1nação embarcada (computadores de bordo, alar1nes etc.). Apresen-
ta um cus to bastante baixo, e1n torno de US$ 4,00 (em 2001). São vários
os fornecedores de microcontroladores. Os principais, atualmente, em
termos de volume de vendas, são: Motorola, Microchip, Mitsubishi, NEC,
Pl1ilips, SGS, I11tel, Hitachi, Toshiba etc. Esse conceito é indispensável
ao leitor com qualqu.e r nível de conl1ecimento e é o objetivo primordial
do estudo desta obra.

Com os co11ceitos descritos anteriormente, espera-se qt1e o leitor te-


nha u1na maior facilidade ta11to na leitura como no entendi1nento dos as-
su11tos relacionados a microcontroladores, que serão apresentados aqui.
1.2.2-Blocos básicos de microcomputadores: todos os com.putadores, sejam
eles n1icrocomputadores, computadores de médio porte ou ai11da computado-
res de grand.e porte, são constitufd.os por três blocos básicos: a u.n idade cen-
tral de processamento (CPU ou microprocessador), a unidade de
memória (na qual são armazenados os progra1nas e as informações) e a unida-
de de e11trada e saída (dispositivos que fazem a comunicação com o mundo
externo), como está apresentado na Figura 1.1. A diferença entre esses equipa-
FUNDAMENTOS DE MICROCOMPUTADORES 5

Unidade de Unidade Unidade


processamento de memória de entrada e saída
central (CPU) (E/S)
Microprocessador

Unidade lógica e Memória de


aritmética (ALU) armazenamento
de programa Saída de
(não-volátil) informação

Registradores

Entrada de .
Memória de -
informação
armazenamento
Temporizadores e de dados
controles (volátil)

Figura 1.1 Blocos básicos de microcomputadores.


mentos está na va riação das características de cad.a bloco básico que os com-
põem (p. ex.: o fornecedor do microprocessador/ microcontrolador pode ser
a Intel, a Motorola ou a Microchip; a velocidade de processamer1to pode ser a
de um microcomputador de 10 MHz, 500 MHz etc., a capacidade de memó-
ria para o armazenamento de programas e informações pode ser de 8 Kbytes,
32 Mbytes etc., a quantidade de dispositivos de entrada e saída analógicas e
digitais etc.). Repare que a arquitetura desse sistema é análoga ao sistema
cl1a1nado ser huniano, ou seja, ela te1n u1n pseudocérebro, 1ne1nórias e interfa-
ces com o mu11do externo. A seguir, será dad.a e1n detall1es a descrição de
cada bloco básico.
Unidade Central de Processamento (CPU) ou Microprocessador: fazendo
11ovamente a analogia co1n o sistema ser hu1nano esse bloco corresponde
1

ao cérebro do microcomputador. A CPU é responsável pela inteligência


dessa 1náquina, ou seja, é ela que tem a capacidade de tomar decisões
(ações) no sistema microcomputadorizado, por meio da execução de un1
programa. É ela que executa o programa armaze11ado na memória do
microco1nputador, que foi projetado por um programador. Ao executar
um progra1na, ela é responsável pela obte11ção das infor1nações a serem
analisadas por meio de dispositivos de entrada (teclado, canal de comu-
11icação serial etc.), pelo processamento (interpretação, manipulação, or-
denação, modificação, cálculos lógicos ou matemáticos etc.) das infor-
mações e pela resposta (ação) do sistem.a microcomputadorizado a uni.a
determinada situação de co11trole para a qual ele foi projetado a fim de
6 MICR0C0NTROLAD0RES 8051 Cap. 1

co11trolar, por meio de u1n dispositivo de saída (escrita na n1emória de


vídeo, trai1smissão de dados para outro microcomputador, acionamento
de um relé, acionamento de um bip etc.). Assim, por exemplo, um
microcomputador projetado para funcio11ar como um caixa eletrônico
de banco deve fazer as segL1intes operações: leitura das informações con-
tidas 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 bai1co (processame11to), 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 infor1nações no
monitor de vídeo e também pela impressão em papel das informações
organizadas solicitadas pelo usuário).

De 1naneira simplificada, pode-se dizer que a unidade de processamen-


to central (microprocessador) apresenta duas funções básicas:

a) Leitura (busca) e interpretação do prograrna alocado na rnernória, instr·ução


por instrução: como o programa fica alocado na memória do microcom-
putador, e 11ão d.entro do microprocessador/CPU, e1n primeiro lugar, o
microprocessador precisa buscar as instruções, wna por uma, na memó-
ria. Isso é feito por meio da operação de leitura de um byte 11a memória
que correspo11de a uma determi11ada instrução e depois é realizada a
interpretação d.a ir1strução lida (decodificação), pois o 1nicroprocessador
tem uma determinada quantidade de instnlções que ele é capaz de exe-
cutar. Dessa ma11eira, ele precisa verificar qual dessas iI1struções deve
ser executada. Assim, ao finalizar essa etapa, o microprocessador/CPU
sabe o que deve fazer. O próxi1no passo é a execução da instrução.
b) Execução do programa, instrução por i11strução: a palavra exec ução de uma
instrução pode significar a transferência de dados dos registradores i11-
ternos do microprocessador/CPU para a memória ou para. os dispositi-
vos de entrada e saída, e vice-versa. Pode também sigrrificar a execução
de operações lógicas e arit1néticas etc.

Esse processo de buscar, interpretar e executar instrução por instrução é


uma atividade contínua do microprocessador e, dessa forma, u1n programa é
processado por inteiro.
A unidade de processamento central (microprocessador) é constituída
por três partes principais: a unidade lógica e arit111ética, os registradores internos
e o bloco de te1nporização e coritrole.
FUNDAMENTOS DE MICROCOMPUTADORES 7

a) Unidade Lógica e Aritmética (ULA): muitas vezes, també1n é cha1nada de


ALU (Arithmetic Logic Unit). Ela é responsável, principalmente, pela exe-
cução das i11struções correspondentes às operações aritméticas e lógi-
cas. Além disso, uma característica 1nuitíssimo importante que deve ser
destacada, referente à ULA, é que, ao executar um.a instrução de uma
operação aritm.ética ou lógica, ela também define a co11dição numérica
do resultado por meio de alguns bits sinalizadores, cl1a1nados de fiags de
sinalização, torrlando-os iguais a um (setando-os) ou tor11a11do-os iguais
a zero (resetando-os), e pela utilização de outras iI1struções que são ca-
pazes de testar esses fiags de sinalização. Isso faz com que o siste1na
microcomputadorizado possa gerenciar uma determinada situação de
projeto ou desempenhar u1na determinada tarefa be1n-definida.
b) Registradores i11ten1os: são compostos por 1n registradores de 11 bits inter-
ligados em paralelo entre si. Os valores me n dependem das caracterís-
ticas de cad.a microprocessador/ microcontrolador (p. ex.: 32 registrado-
res de 8 bits etc.). Como são formados por flip-fiops, é possível realizar
operações de leitura e escrita de informações. Quando a CPU é
1
desenergizada 1 por apresentar características voláteis, essas iitlorma-
ções são perdidas. Geralmente, eles são capazes de armazenar:
um byte, se forem constituídos por registradores de 8 bits;
u1n duplo byte ou address ou word, se forem constituídos por
registradores de 16 bits;
um d.uplo address ou duplo zvord, se fore.m constituídos porre-
gistradores de 32 bits etc.
Um microcomputador é chamado de n1.icrocomputador de 8 bits se ele for
capaz de processar informações de oito e1n oito bits por vez (operações
de 1novimentação de informações e operações aritméticas e lógicas). Ana-
logamente, para os microcomputadores de 16 e 32 bits, qua11to maior for
a quantidade de bits processados em paralelo por vez, maior será sua
capacidade de processamento. A unidade utilizada para medir a capaci-
dade de processamento é o M·ips (milhões de informações por segu11do).
Cabe ressaltar que o microprocessador/CPU não é wna unidade de arma-
zename11to de informações (memória), pois apresenta apenas alguns regis-
tradores internos que são utilizados, normalme11te, para o armazenainento
temporário de informações, ou seja, sua fw1ção não é o armazenamento de
grandes quantidades de dados. Grandes quantidades de dados devem ser
alocados nas memórias disponíveis no sistema microcomputadorizado.
8 MICR0C0NTR0LAD0RES 8051 Cap. 1

O tempo de acesso às infor1nações que estão alocadas 11esses registrado-


res internos é me11or que o tempo de acesso às informações que estão
alocadas na memória. Isso se justifica pelo fato de as informações já es-
tarem dentro do próprio microprocessador/CPU. Com isso, em aplica-
ções que necessitam de grandes velocidades de processa1nento, por exem-
plo, na leitura de uma tarja magnética d.e cartão de banco etc., recomen-
da-se a utilização desses registradores 11a composição do progra1na, para
ati11gir altas velocidades de processamento, melhorando o desempe11ho
da tarefa a ser realizada.
c) Bloco de teniporização e co11trole: responsável pelo controle do fluxo de
infor1nações do microprocessador, para as unidades de me1nória e para
as unidades de entrada e saída. E esse bloco que define os sinais de
controle de temporização para o sincronismo do fluxo de informa-
ções no sistema microcomputadorizado (p. ex.: liberação de informa-
ções da ULA para os registradores, memória e unidades de entrada e
saída etc.) por meio da definição dos sinais de leitura (read), de escri-
ta ('lvrite), de i11icialização do sistema (reset), de liberação dos
barramentos de dados e endereços, entre outros.
Unidades de memória: são divididas em duas partes: 1ne1nória de armazena-
mento de programa e 111.ernória de ar1nazenan1.ento de i11formações (dados, bytes,
bits etc.).
a) Meniória de armazena1nento de programa: todo microcomputador deve
ter u1na área de memória na qual será armaze11ado o programa que
definirá as tarefas que o microcomputador/CPU deve executar. Esse
programa define a função de um microcomputador e também diz ao
microcomputador, instrução por instrução, o que ele deve fazer ao lon-
go do tempo. Esse programa deve ser ilnple1nentado por um progra-
mador técnico, conhecedor do l1ard ware do sistema micro-
computadorizado e das instruções do microprocessador.
O microcomputador não fun.c ionará se não existir um programa arma-
zenado em sua memória de programa. Assim, u1na vez energizado o
microcomputador, esse programa será buscado e executad.o pelo mi-
croprocessador. Esse programa define a característica funcional do
microcomputador (p. ex.: operar como u1n forno de microondas, como
u1na máquina de lavar roupas ou como uma injeção eletrônica de au-
tomóvel etc.). Esse programa não pode ser perdido na ausência de ener-
gia elétrica, pois isso acarretaria a perda da funcionalidade desse
FUNDAMENTOS DE MICROCOMPUTADORES 9

microco1nputador, para o qual foi projetado. Assim, o tipo de memória


em que esse programa deve ser armaze11ado é a memória não-volát-il.
Dessa maneira, sempre que o 1nicrocomputador for 'desenergizado\
esse prograrna não poderá ser perdido e quando ele for 'energizado'
novamente, deverá voltar a funcionar co1n a m.e sma característica fun-
cional. Memórias não-voláteis normalmente utilizadas em
microcomputadores são as memórias ROM (Read Only Memory),
PROM/ OTP (Progra1nrnable Read Only Met11ory/One Tínie Program111íng),
EPROM (Erasable a1'zd Programniable, Read Only Me111on;) e EEPROM
(Electrical, Erasable and Program1nable, Read Only Me·niory). Geral1nente,
essas memórias são utilizadas somente para leitura e conseqüentemente
não é possível realizar operações de escrita.
b) Me1nória de armazenaniento de inforniações: todo microcomputador deve
ter uma área de armazen.amento de informações. Essa memória deve
permitir a escrita e a leitura de informações. Para e11tender melhor,
considere um microcomputador controlando uma determinada ativi-
dade. Caso exista1n infor1nações definidas pelo mundo externo por
meio de chaves, sensores, teclados etc., elas devem ser lidas e ar1naze-
nadas na memória, para depois serem lidas novamente e analisadas
(tratadas) pelo microprocessad.o r por meio de um programa. Como
exemplo, considere o acionamento das teclas do teclado de um
microcom.putador, ou seja, u.1na vez acionada uma tecla, a CPU deverá
ler a informação que foi gerada pelo l1ardware associado a essa tecla e
executar o armaze11amento dessa informação na memória. Depois,
deverá fazer a leitura dessa informação, a fim de a11alisá-la (interpretá-
la), para verificar qual tecla foi acio11ada. Além disso, a informação
deverá ser mostrada no monitor de vídeo. Repare que foram necessá-
rias, nesse exemplo, várias operações 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 infor1nações.
Portanto, deve-se utilizar memórias RAM (Random Access Me1nory).
Lembre-se de que essas memórias apresentam a característica d e se-
rem voláteis. Portanto, sempre que o 1nicrocomputador for
desenergizado, as infor1nações contidas nesse tipo de dispositivo se-
rão perdidas.
1O MICR0C0NTROLAD0RES 8051 Cap. 1

Unidade de entrada e saída (E/S): ta1nbém chamada pela abreviação de


I/0 (Input/Output), é responsável pelo interfaceamento das informa-
ções entre o microcomputador e o inundo externo. Geralmente são
circuitos integrados (Cis) capazes de ler e armazenar as informações
vindas do mu11do externo, por exem.p lo, informações originárias do
teclado, do ca11a] d.e comu11icação serial de um microcomputador etc.;
e que também podem definir informações do microcomputador para
o inundo exter110, por exemplo, o acionamento de bips, alto-falantes,
leds indicadores, displays, interfaces de co1nunicação seriais e para-
lelas etc.
1.2.3 -Arquitetitra de sistemas microprocessados/microcontrolados: a Figu-
ra 1.2 mostra como os três blocos básicos se co1nunicam entre si para dar
fu11cionalidade ao microcomputador. As vias de co1nunicação entre os
blocos básicos são cl1amadas de barramentos. Cada barramento é co11s-
tituído por um número de vias (trilhas de cobre), nas quais fluem infor-
mações em paralelo. São três os barramentos existentes: o barramento
de endereços, o barramento de temporização e controle e o barramento
de dados.
Barramento de endereços: a CPU utiliza esse barrame11to para definir os en-
dereços das posições de memória de progra1na em que ela vai 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 saída para a troca
de i11formações. Esse barramento é unidirecional.
Barramento de temporização e controle: a CPU utiliza esse barram.e nto para
definir os sinais de te1nporização e controle para gerenciar o tempo e a
direção do fluxo de informações nas operações de leitura e escrita nos
dispositivos (u11idades de me1nória ou unidades de e11trada e saída).
Esse barramento é unidirecional, por exemplo, o sinal de leitura (RD/ -
read), o sinal de escrita (WR/ - write) etc.
Barramento de dados: a CPU utiliza esse barramento para receber as infor-
mações vindas da memória ou dos dispositivos de enh·ada e saída ou
então para definir as informações para a me1nória ou para os dispositi-
vos de entrada e saída. Esse barra1nento é bidirecional. É i1nportante
frisar que, em alguns microprocessadores ou microcontroladores, a
memória não troca informações direta1nente com os dispositivos de
de entrada e saída.
FUNDAMENTOS DE MICROCOMPUTADORES 11

Memória
Microprocessador
ou Não-volátil
unidade de (ROM) E/S
processamento
.
central
Volátil (RAM)

• • • ' . .
' •
Barramento de dados
' ' '

.
Barramento de
' temporização e controle
..
Barramento de endereços
1 1 ..

FiQura 1.2 Arquitetura de sistemas microprocessados/ microcontrolados.

No sistema apresentado na Figura 1.2, cada memória ou dispositivo de


entrada e saída tem, pelo menos, um endereço. O microprocessador u tiliza o
barramento de endereços para acessar a posição de memória ou o dispositi-
vo de entrada e saída. Assim, a seqüência de eve11tos para que o micropro-
cessador execute uma operação de leitura na memória ou em um dispositivo
de e11trada e saída é:
a CPU, por meio do bloco de temporização e controle, define o endereço
de me1nória ou do dispositivo de entrada e saída no barramento de en-
dereços por um certo te.m po. Com isso, o hardware agregad.o ao sistema
selecionará o dispositivo e u1na posição de memória específica;
a CPU, por meio do bloco de temporização e controle, defi11e o sil1al de
controle de leitura (Read-RD/, por exemplo) no barramento de
temporização e controle por um certo tempo;
a memória ou o dispositivo de entrada e saída disponibiliza a informação
(um byte, por exemplo), por um certo te1npo, no barramento de dados,
para que a CPU possa capturá-la (operação de leitura) e armazená-la
em um dos seus registradores internos, para depois ser processada e
analisada.
Da mes111a maneira, a seqüência de eventos para que o microprocessador
execute uma operação de escrita na memória ou e1n um dispositivo de entra-
da e saída é:
12 MICROC0NTR0LAD0RES 8051 Cap. 1

a CPU define o e11dereço de 1ne1nória ou do dispositivo de entrada e


saída no barrame11to de endereços. Com isso, o hardware agregado ao
sistema selecionará o dispositivo e urna posição de memória específica;
a CPU define a informação (um byte, por exemplo) no barramento de
dados;
a CPU, por meio do bloco de temporização e controle, define o siI1al de
controle (Write-WR/, por exe1nplo) no barramento de te1nporização e
controle, para que essa informação seja armazenada na memória ou no
dispositivo de entrad.a e saída.
1.2.4-Funcionamento de um sistema microprocessado/1nicrocontrolado: o
microcomputador é uma máquina eletrônica capaz de buscar e executar
instruções de programas alocados em memória. Cada instrução tem urna
fu11ção bem-definida. Após a energização de um microcomputador, é gera-
do un1 sinal de inicialização do sistema, geralmente chamado de sinal de
reset (por exetnplo, o sinal de 1 lógico por um certo tempo e depois fica
estável, igual a O lógico), por um circuito externo obrigatório ao sistema,
cl1a1nado de circuito de reset. Esse circuito externo está ligado ao pino reset
do microprocessador (CPU) ou do microcontrolador (qualquer micropro-
cessador ou 1nicrocontrolador obrigatoriame11te tem esse pino). U1na das
pri11cipais funções desse sinal é a inicialização de um registrador interno
do microprocessador (CPU) ou do 1nicrocontrolador, chamado de contador
de programa (PC - Prograni Counter ou similar). Esse registrador existe em
todos os microprocessadores ou microco11troladores e, por definição, ele
sempre co11tém o endereço da próxima instrução a ser buscada na memória
de programa e executada pelo microprocessador ou 1nicroco11trolador, cujo
valor inicial, após o sinal de reset, é predefinido pelo fabrica11te (p. ex.: igual
a 0000h para o microprocessador 8085, corno também para os microcon-
troladores da família MCS-51 da Intel). Para que o sistema funcione ade-
quadamente nesse endereço é necessário que o projetista de hardware te-
nha mapeado uma 1nemória não-volátil (por exemplo, EPROM de 8Kx8,
cujo endereço n1icial é 000011) e que exista um programa previamente gra-
vado a partir desse endereço de memória de programa (0000h), que defini-
rá a funcionalidade do microco mputado r. Assim, sempre que o
microcomputador for energizado existirá u.m sinal de reset que inicializará
o contador de programa. O microprocessador ou microcontrolador fará uma
operação de leitura da i11strução 110 endereço de 1nemória defi11ido pelo
contador de programa (PC) e decodificará e executará essa instrução. Cada
FUNDAi\.\ENTOS DE MICROCOMPUTADORES 13

vez que uma i11strução é executada, o contador de programa (PC) é ajus-


tado para apontar para a próxi1na instrução do progrruna. Esse processo é
cíclico, e o programa alocado na memória é executado por inteiro, instru-
ção por instrução, fazendo com que o microcomputador alcance seu objeti-
vo funcional desejado.
Os eventos que ocorrem no sistema microprocessado/microco11trolado
para que seja realizada a busca e a execução de uma ú11.i.ca instrução são cha-
1nados de ciclos de instrução. O ciclo de instrução é composto por outros dois
ciclos: o ciclo de busca e o ciclo de execução. Para explicar os ciclos de busca e de
execução detalhadamente, considere um n1icroprocessador de 8 bits.
A - Ciclo de busca:
Al - De instruções de um byte (instruções que ocupam mais de uma posi-
ção de memória na memória de progra1na):

a) a CPU faz a operação de leitura de um byte (código de máquina da


instrução) no endereço da memória de programa especificado pelo re-
gistrador contador de programa (PC) e depois armaze11a esse byte no
registrador de função especial, cl1amado registrador de instrução (IR).
A1nbos os registradores (PC e IR) são registradores inter11os de contro-
le da CPU;
b) a CPU decodifica e interpreta tal byte. Decodificar e iI1terpretar u1n byte
de iI1strução sig11.i.fica reconl1ecer a instrução, ou seja, se é uma operação
de 1novimentação de informações, de adição, de subtração etc. Depois
de reconhecida a instrução, a CPU gera um co11junto de sinais de con-
trole para a execução da instrução (p. ex.: mover um byte da CPU para
um e11dereço de memória, adicionar dois bytes etc.);
c) a CPU adiciona uma unidade ao conteúdo do registrador contador de
programa (PC). Isso sig11ifica definir o e11dereço de memória de progra-
ma da próxima instrução a ser buscada e executada no próxi1no ciclo de
instrução.

Al - De instruções de mais de u1n byte (instruções que oct1pam rnais de


uma posição de memória na memória de progra1na):

a) idem ao item a anterior;


b) idem ao item b anterior, exceto que são feitas outras operações de leitura
na memória de programa, e1n endereços subseqüentes, dos argumentos
de certas instruções dos microprocessadores ou microcontroladores
14 MICR0C0NTROLAD0RES 8051 Cap. 1

(p. ex.: ttm byte de valor constante a ser adicionado e1n algt1m regis-
trador interno da CPU, uma certa posição de 1nemória de dados em
que será armazenado t1m dado etc.). Esses argu.mentos são definidos
11a própria me1nória de prograina;
c) a CPU adiciona a quantidade de bytes que compõem a instrução ao
conteúdo do registrador contador de programa (PC); por exemplo,
adiciona 2 ou 3 bytes ao conteúdo do registrador PC, se a instrução
for de 2 ou 3 bytes, respectivamente.
B - Ciclo de execução: é o ciclo qu.e executa a instrução. A execução consiste
e1n operações de leitura e escrita de informações em diferentes regis-
tradores internos da CPU, entre a CPU e memórias ou dispositivos de
entrada e saída, e vice-versa, em operações lógicas e aritméticas etc.
Nesse sistema microprocessado ou .microcontrolado não pod.e m existir dois
dispositivos (memória ou wudade de entrada e saída) com o 1nes1no endereço.
Isso acarretaria a queima de um dos dispositivos por curto-circuito, por meio do
barramento de dados, durante uma operação de leitura de informações nesse
endereço, caso esses dispositivos não apresentem as mesmas informações.

Exercícios resolvidos
1 - Dê exemplos de equipamentos inteligentes.
Resposta: os de uso pessoal: relógios digitais, calculadoras, agendas ele-
trônicas, telefones celulares, l1andhelds etc.; os de uso residencial:
forno de microondas, máquina de lavar, televisão, sistemas de con-
trole de portão automático etc.; os de uso industrial: micro-
computadores aplicados ao controle de manufatura, CLPs, robôs
etc.; eletrônica embarcada: alarmes de carro, computadores de bor-
do, injeção eletrônica etc.
2 - Quais as vantagens de se utilizar um microcomputador?
Resposta: a sua grande rapidez de processamento e sua alta confiabilida-
de nas tarefas executadas.
FUNDAMENTOS DE MICROCOMPUTADORES 15

Exercícios e questões propostos


1 - O que é um microcomputad.or?
2 - O que é um programa de computador?
3 - O que é uma instrução?
4 - Defina software, firmware e hardware.
5 - Qual é a d iferen.ç a entre software e firmware?
6 - Qual é a estrutura básica de um microcomputador? Descreva a fun-
ção de cada bloco básico.
7 - O que é um microprocessador? Quais são os outros nomes com que
geralmente ele é chamado?
8 - Quais são as partes que compõem o microprocessador? Quais as fun-
ções de cada parte?
9 - Qual é a diferença entre um microcomputador e um microprocessador?
10 - Qual é a diferença entre um microprocessador e um microcontrolador?
11 - Quais são os barramentos em um sistema microprocessado? Qual é a
função de cada um deles?

12 - Como um programa é executado por um microcomputador?

13 - O que é ciclo de i11strução?


14 - O que é ciclo de busca?
15 - O que é ciclo de execução?

16 - Descreva u1na operação de escrita em memória.


17 - Descreva uma operação de leitura em memória.
18 - O que é um microcontrolador?
19 - Qual é a diferença entre um microcomputador e um microcontrolador?
capítulo

A FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL

2.1 Objetivos
•:• Apresentação da família de microcontroladores MCS-51 da Intel
•:• Descrição da pinagem do microcontrolador 8051/31
•:• Organização da memória nos dispositivos da família de
microcontroladores MCS-51 da Intel
•:• Mapeamento de memória para uso de memória externa
•:• Mapeamento de E/S como memória
•:• Uso de E/S externa
•:• O sinal de inicialização (reset) da família de microcontroladores
MCS-51 da Intel
•:• O sinal de relógio (c/ock) da família de microcontroladores MCS-51
da Intel
•:• A operação de executar um programa passo a passo
•:• Operação de redução da potência consumida (modo /d/e e de bai-
xa potência)

2.2 lntroducão
'
teórica
2.2.1 - Apresentação da faniília de microcontroladores MCS-51 da Intel: o
microco11trolador 8051 é 1ne1nbro origi11al da família de microcontroladores
MCS-51 da Intel. Suas características principais são:
CPU de 8 bits otinúzada para aplicações de controle;
poderosa capacidade de processamento booleano, incluindo lógica in-
dividual de bits;
64 Kbytes de endereçamento de memória de programa;
18 MICR0C0NTR0LAD0RES 8051 Cap. 2

64 Kbytes de endereçamento de memória de dados;


4 Kbytes de memória de programa interna;
128 bytes de m e1nória RAM de dados interna;
32 linhas de E/S bidirecionais, endereçáveis iI1dividualmente;
2 tiniers/ contadores de 16 bits;
5 entradas de interrupções (três internas e duas externas) com dois ní-
veis de prioridade;
1 oscilador interno de relógio.
A arquitetura básica do membro original da fatnília de microcontroladores
MCS-51 da Intel, ou seja, a do microcontrolador 8051, é 1n.o strada na Figura 2.1.
'j 'i
i
! !

lnterrupçõ~s ipternas (3) e externas (2) Entradas de

•• • • •
Controle de
. ....
!
'i
!
;
i
ROM RAM
contadores. •

Timer O Timer 1

interrupções
•• • ••
'

CPU '• •• • ••
•• •
' • ' . '•
• •

' • •
Barramento
osc de controle ... 4 Portas de E/S Porta serial
•• •• •• •• ••

' • ·po ' ' P1 ' ·p2 '' P3 TX RX

Figura 2.1 Arquitetura básica do 1njcroco11trolador 8051.


A Tabela 2.1, na página 20, apresenta a família de microcontroladores
MCS-51 da Intel.

Dispositivos CHMOS: a letra C no meio do nome do 8051 (80C51) significa


que os dispositivos foram iinplementados com tecnologia CHMOS e que
são totalmente co1npatíveis com o 8051 além de absorverem menos cor-
rente do que o HMOS. Eles têm dois modos de potência reduzida:

a) Modo Idle (ocioso) programado por software: a CPU é desligada, enquanto


a RAM e outros dispositivos i11ternos conti11uam a operar. Nesse modo,
a corrente é reduzida em 15 por cento
b) Modo de baixa potência programado por software: todos os dispositivos
internos são desligados. A RAM interna continua a operar. Nesse modo,
o consumo de corrente elétrica é inferior a 10 uA.
'Tabela 2.1 A família de microcontroladores MCS-51 de 8 bits da Intel.

Dispositivo Versão sen1 Versão con1 Capac.idade Capacidade Portas de Ti111ersf i\·latrizes de UART Canais de Canais A/D Fontes de l\llodos de
ROlVI EPRO~·l da ROI\'I da RA~1 E/Sde Contadores contadores 0 1\11;\ interrupção baixo

(en1 bytes) 8 bits de 16 bits programa' veis consumo
e ldle
8051 8031 - 4K 128 4 2 ,/ 615

8051AH 8031AH 8751AH 4K 128 4 -


? ,/ 615

- - 8751BH - - - - - - - );o

~
8052Al·I 8032AH 87528H 8K 256 4 3 ,/ 8/6 ?!:
,...
~

-
)>
80C51BH 80C3 I BH 87C5 1 4K 128 4 2 ,/ 615 ,/ o
m
?!:
80C52 80C32 - 8K 256 4 3 ,/ 8/6 ,/ -
íl
~
íl
83C51FA 80C51FA 87C51FA 8K 256 4 3 ,/ ,/ 14/7 ,/ oz
-1

83C51FB 80C51FA 87C51FB 16K 256 4 3 ,/ ,/ 14/7 ,/ ~


,...
)>
o
83Cl52JA 80Cl52JA - 8K 256 5 2 ,/ 2 19/ 11 ,/ o
~
m
V,

- 80Cl52JB - - 256 7 2 ,/ 2 19/1 l ,/ s:


Cl•
83Cl52JC 80Cl52JC - 8K 256 5 2 ,/ 2 19/ 11 ,/ ....
VI

§;!
- 80Cl52JD - - 256 7 2 ,/ 2 19/ 11 ,/
~
m
r-
83C452 80C452 87C452P 8K 256 5 2 ,/ 9/8 ,/

_.
..t,
20 MICROC0NTR0LAD0RES 8051 Cap. 2

As letras BH são funcionalinente co1npatíveis com o HMOS. As diferen-


ças são de projeto, e é possível fazer o iI1tercâmbio entre os dispositivos HMOS
e CMOS.
2.2.2 - Pinagem: o 8051/31 é um chip de 40 pi11os (Figura 2.2).

A pinagem desse dispositivo é descrita na Tabela 2.2.

Entrada do sinal externo de Reset EA/ Sinal de saída para acesso externo à
reset. 9 31 memória de programa.
Entrada 2 do circuijo oscilador X2 ALE Sinal de saída habilílador de captura
externo a cristal. 18 30 externa do byte de endereço menos
significativo que está multiplexado com
o byte de dados.
Entrada 1 do circuito oscilador X1 PSENI Sinal de saída de controle de leitura da
externo a cristal. 19 29 memória de programa externa (ROM)
Porta Oou barramento de P0.0/ADO P2.0/A8 Porta 2 ou barramento de endereços
endereços menos significativos e 39 21 mais signilicativos:
dados (multiplexados): Bit o da Bit Oda porta 2 ou A8
porta oou AO e DO.
Bit 1 daportaOouA1 e01 P0.1/AD1 P2.1/A9 Bit 1 da porta 2 ou A9
38
8 22
Bit 2 da porta oou A2 e 02 P0.2/AD2 P2.2/A10 Bit 2 da porta 2 ou A10
37 23
Bit 3 da porta oou A3 e 03 P0.3/AD3 P2.3/A1 1 Bit 3da porta 2 ou A11
36 24
Bit 4 da porta oou A4 e D4 P0.4/AD4 P2.4/A12 Btt 4 da porta 2 ou A12
35 25
Bit 5 da porta oou AS e D5
34
P0.5/AD5
o P2.5/A13
26
Btt 5 da porta 2 ou A13

Bit 6 da porta oou A6 e D6 P0.6/AD6 P2.6/A14 Btt 6 da porta 2 ou A14


33 27
Bit 7 da porte oou A7 e D7 P0.7/ AD7 P2.7/A15 Bit 7 da porta 2 ou A15
32 28
Bit o da porta 1 P1.0 P3.0IRXD Bit oda porta 3 ou pino de recepção de
1
5 10 dados seriais.
Bit 1 da porta 1 P1 .1 P3.1/TXD Bit 1 da porta 3 ou pino de transmissão
2 11 de dados seriais.
Bit 2 da porta 1 P1.2 P3.2/INTOI Bit 2 da porta 3 ou sinal de entrada
3 12 externa da interrupção O.
Bit 3 da porta 1 P1.3 P3.3/INT1/ Bit 3 da porta 3 ou sinal de entrada
4
1 13 externa da interrupção 1.
Bit 4 da porta 1 P1.4 P3.4/TO Bit 4 da porta 3 ou sinal de entrada de
5 14 clock do límero.
Bit 5 da porta 1 P1 .5 P3.5/T1 Bit 5 da porta 3 ou sinal de entrada de
6 15 clock do timer 1.
Bit 6 da porta 1 P1.6 P3.6/WR/ Bit 6 da porta 3 ou sinal de saída de
7 16 controle de escrita de memória de
dados ex1ema (RAM).
Bit 7 da porta 1 P1 .7 P3.7/RD/ Bit 7 da porta 3 ou sinal de saída de
8 17 controle de leijura de memória de
dados ex1ema (RAM).

Figura 2.2 Pinagem do 8051.


A FAMÍLIA DE MICROCONTROLADORES /\i\CS-51 DA 11\ITEL 21

Tabela 2.2 Descrição da Pinagem do 8051/31.

Nome Sín1bolo Numeração Descrição/Função dos Pinos


Fon1.e de vcc 40 Entrada do positivo da fon1e de alin1entação
alin1entação
Te1Ta vss 20 Entrada do terra do circuito (GND)
Porta Oou P0.0 a PO. 7 39 a 32 A porta O é uma porta de en1rada e saída bidirecional de 8 bits de
barramento ou dreno aberto. Operando con10 un1a po1ta de saída, cada pino pode
de endereços ADO-AD7 absorver oito entradas LS TIL. Escrevendo o I lógico nos pinos
111enos da porta O, eles flutuam, e esses estados pode1n ser utilizados
significativos como entradas de aha irnpedância.
e dados A porta zero é tan1bé1n o barra1nento de endereços n1enos signifi-
multiplexados cativos muhiplexados no 1en1po com o ba1Tamento de dados du-
no ten1po, rante o acesso a tuna rnen1ória de progran1a ou de dados exte111a.
quando se Nessa aplicação, util izam-se puU-up.f internos ao escrever o I ló-
utiliza gico e pode-se fornecer ou absorver até oito entradas LS TIL.
rr1emória A porra O tan1bé1n recebe os bytes de códigos durante a progra-
ROM elott n1ação da EPROM e envia os bytes de códigos durante a verifi -
RA!vf cação do progran1a gravado na RólVI e EPROM . Pull-ups ex-
exte111a tern os são necessários durante a verificação do progran1a.
Porta I ou PI.OaP l.7 la 8 A porta I é un1a porta de entrada e saída bidirecional de 8 bits
T2,T2EX e com pu/1-ups internos. Os buffers de saída podern fornecer ou
(entrada de PI.O = T2 absorver quatro entradas LS TTL. Os pinos da porta 1, que tê1n o
cloc:k externo e 1 lógico ern suas saídas, são levados a 1 lógico pelos pu/1-ups in-
do tirner 2, Pl.l =T2EX ternos e, nesse caso, pode1n ser utilizados con10 entrada. Co1n a
son1ente para poria I funcionando como en1rada, seus pinos, que são externa-
o 80932/52), mente levados para zero lógico, fornecerão corrente devido aos
Pl.2 a Pl.7 seus p11ll-11ps internos.
A porta 1 tarnbém recebe o byte de endereço menos signi ficativo
durante a progran1ação da EPROM e durante a verificação do
progran1a gravado da ROM e EPRONI. No 8032AH/52AH, os pi-
nos P1.0 e P1. 1 da po11a I tarnbén1 serven1 às funções de T2 e
T2EX.
Po11a 2 ou P2.0 a P2.7 2 1 a 28 A porta 2 é u1na porta de entrada e saída bidirecional de 8 bits
barrrunento ou corn p111/-11ps internos. Os buffers de saída podern fornecer ou
de endereços A8 a AIS absorver quatro entradas LS TTL. Os pinos da porta 2, que tên1 o
mais l lógico em suas saídas, são levados a l lógico pelos p11/l-11ps in-
significativos ternos e, nesse caso, podern ser utilizados co1no en1rada. Co1n a
quando se porta 2 funcionando como entrada, seus pinos, que são externa-
utiliza a n1ente levados para zero lógico, fornecerão con·ente devido aos
, .
mernona seus pull-ups internos.
ROM A porta 2 tan1bé1n e1nite o byte do endereço n1ais significativo du-
e/011 RAM rante a programação da EPROM, durante a busca da men1ória de
externa progra111a externa e durante o acesso à n1emória de dados externa,
que utiliza 16 biis de endereça1nen10 (MOVX @DPTR). Nessa
aplicação, a porta utiliza pull-ups i nternos quando en1ite I lógico.
Duran1e o acesso à 1ne1nória de dados exte111a, que u1iliza endere-
çarnento de 8 bits (MOVX @Ri), a porta 2 en1ite o con1eúdo do
registrador de função especial P2.
A porta 2 tan1bén1 recebe o byte do endereço 111ais significativo
durante a progran1ação da EPROM e durante a verificação da
ROMeEPROM.
22 MICROC0NTR0LAD0RES 8051 Cap. 2

Tabela 2.2 Descrição da Pinagem do 8051/31. (Continuação)

Nome Símbolo Numeração Descrição/Função dos Pinos


Porta 3 ou P3.0 aP3.7 10a 17 A porta 3 é uma porta de entrada e saída bidirecional de 8 bits
pinos de ou com pull-ups internos. Os buffer de saída podem fornecer ou
recebção e RXD, TXD, absorver quatro entradas LS TIL. Os pinos da porta 3 que têm
transmissão INTO\, l lógico em suas saídas, são levadas a 1 lógico pelos pull-ups
serial, INTl\, TO, internos e, nesse caso, podem ser utilizados como entrada.
interrupção Tl, WR\, Com a porta 3 funcionando corno entrada, seus pinos, que são
externa 1 eO, RD\ externamente levados para O lógico, fornecerão corrente devido
entrada de aos seus pull-ups internos.
clock A porta 3 também serve às funções de várias características da
externado família MCS-51, como está indicado ao lado.
timerOe 1,
sinal de
escrita e
leitura de
memória
RAM externa
Reset RST 9 Entrada de Reset. Um nível lógico alto nesse pino por dois ci-
elos de máquina: enquanto o oscilador está sendo executado,
reseta o dispositivo (inicializa alguns registradores internos
com valores predefmidos pelo fabricante).

Address Latch ALFJPROG\ 30 Pulso de saída que indica a um dispositivo externo que ele deve
Enahle/PRfXJ\ captar o sinal de endereço no barramento de endereço e os da-
(pulso dos que estão multiplexados no tempo.
habilitador Esse pino também serve como entrada do pulso de programa-
de captura ção durante a programação da EPROM.
de endereço) Em operação normal, o sinal de ALE é emitido a uma razão
constante de 1/6 da frequência do oscilador e pode ser uti-
lizado para fins de clock ou temporizador externo.
Observe que um pulso de ALE é emitido a cada acesso à me-
mória da dados externa.

Progra,n Store ALF/PROG\ 29 É o pulso de leitura para a memória de programa externa.


Enable (pulso Quando o dispositivo está executando códigos da rnemória de
habilitador de programa externa, PSEN\ é ativado duas vezes a cada ciclo de
armazenamento máquina, exceto quando existe acesso à memória de dados ex-
de programa) tema.
ExternalAcces.! EA\/VPP 31 EA\ deve ser ligado a VSS para habilitar o dispositivo a buscar
&lílhle códigos da memória de programa externa no endereço inicial
Pmgranvning de 0000b até FFFFh.
Supply Voltage EA\ deve ser ligado a VSS para a execuçãodo programa conti-
do na memória ROM/EPROM interna.
Note, entretanto, que, se o Security Bit (bit de segurança) na
EPROM é programado, o dispositivo não buscará códigos de
qualquer local de memória de programa externo.
Esse pino também recebe a fonte de alimentação de programa-
ção de 21 V durante a programação da EPROM
Entrada do XTALJ 19 Entrada para o amplificador oscilador inversor
amplificador
oscilador
.
rnversor
A FAt\.\ÍLIA DE MICROCONTROLADORES /\i\CS·Sl DA INTEL 23

Tabela 2.2 Descrição da Pinagem do 8051/31. (Continuação)

Nome Sín1bolo Nun1eração Descrição/Função dos Pinos


Saída do XTAL2 18 Entrada para o a,nplificador oscilador inversor
a1nplificador
oscilador
inversor

2.2.3 - Organização da men1ória nos microcontroladores da família MCS-51


da Intel: a função principal da memória de programa é ar1nazenar o firmware
dos equipamentos i11teligentes e da metnória de dados simplesmente para
armazenar as informações (bytes) que serão utilizadas para o gerenciame11to
de controle que se deseja executar.
A memória da fa1n[lia de microcontroladores MCS-51 separa logicamente
o endereçamento relativo à 1nemória de programa e à memória de dados,
como é descrito a seguir.

2.2.4-Separação lógica da 1neniória de programa e da memória de dados: todos


os dispositivos da famJlja de microcontroladores MCS-51 têm endereçamentos
separados da memória de programa e da memória de dados, co1no é mostra-
do na Figura 2.3.
A separação lógica permite que a memória de dados seja acessada por
endereçamento de 8 bits (menor tempo de acesso) e por endereçamento indi-
reto de 16 bits, gerados por meio do registrador DPTR (Data Pointer).
Também é possível acessar 64 Kbytes de me1nória de progra1na. Na ver-
são com ROM e EPROM, os primeiros 4, 8 ou 16 Kbytes são fornecidos inter-
namente. Na versão sem ROM ou EPROM, toda a .1ne1nória d.e programa é
externa. PSEN/ (Program Store Enable) é o sinal de leitura para a memória de
programa externa.
A memória de dados tem um endereçamento separado da memória de
programa. Pode-se endereçar até 64 Kbytes de memória RAM externa. A CPU
gera os sinrus RD / e WR/ durante o acesso à RAM externa.
As memórias de programa e de dados externas pode1n ser combinadas
pela aplicação dos sinais PSEN/ e RD/ à entrada de uma porta ANO e utili-
zar a saí.da como sinal de leitura para a memória de programa e dados.

Memória de programa: a Figura 2.4 mostra o 1napa da parte inferior da me-


mória de programa. Após um sinal de reset, o conteúdo do contador de
programa (PC) é irlicializado com o valor 0000h e faz com que a CPU
inicie a busca e a execução do programa a partir do ei:1.dereço 0000h.
24 MICROCONTROLADORES 8051 Cap. 2

Memória de programa: Memória de dados:

FFFFh
Externa

FFFFh

Externa
Interna
............................. ....... ....-----,
FFh '
j 128 bytes SFRs
l
superiores
1000h
•• •
.:
80h
OFFFh
7Fh 128 bytes
EA\ = O EA\= 1 inferiores
Externa Interna
PSEN\ .
.
OOh 0000h

AD\ WR\
0000h

Fi~ura 2.3 Orgartização da memória da família de microcontroladores MCS-51 da l11tel.

Existem cinco ou seis fontes de interrupções 11a família de microcon-


troladores MCS-51, dependendo do membro da família, e essas fot1tes são:
fonte de interrupção externa O, fonte de interrupção do ti1ner / contador O,
fonte de interrupção externa 1, fonte de interrupção do ti·nier/ contador 1 e
fonte de interrupção do canal de comunicação serial (recepção e transmis-
são), para os membros da família de microcontroladores que têm a termi-
nação /51 ou /31, e mais uma fonte de interrupção do timer/co11tador 2,
para os membros da família de microcontroladores que têm a terminação
/52 ou/32.
As fontes de interrupções tê1n a finalidade de i11terromper o fluxo de
processame11to pri11cipal que está sendo executado pela CPU e desviar tal
processamento para uma sub-rotina chamada rotin.a de atendimento à fonte de
interrupção. Essas sub-rotinas de atendimento às fontes de interrupção de-
vem ser armazenadas em posições de memória específicas, definidas pelo
fabricante. Depois de executada a sub-rotil1a de atendimento à fonte de inter-
rupção, a CPU volta a processar o programa principal a partir da posição de
memória de program.a em que ela foi interrompida.
A FAMÍLIA DE MICROCONTROLADORES /\i\CS-51 DA INTEL 25

ROM

.
07FFh
..
..
..
..
. 0033h

Timer 2
(8052/32)
. 0032h

0028h

Porta serial . 002Ah



0023h

Timer 1 . 0022h

0018h

Ext. lnt. 1 .. 001Ah


0013h

Timero
. 0012h
OOOBh ....~· •
Ext. lnt. O
-5'
OOOAh o:> • •
0003h

Reset . 0002h
0000h

Figura 2.4 Memória de programa do MCS-51.


As fontes de i11terrupção são geradas por sinais elétricos que advêm de
sinais elétricos criados por interfaces ligadas às fo11tes de interrupção exter-
n as O e 1 e do canal de comunicação serial ou de sinais elétricos internos ao
microcontrolador, criados pelos timers/ contadores O, 1 e 2.
Para cada fonte de interrupção, existe um espaço reservado de memó-
ria d e programa, no qual d eve ser escrita urna sub-rotina de atendimento à
fonte de interrupção: 0003h a OOOAl1 para a interrupção externa O, OOOBh a
0012h para a interrupção do tinier/ contador O, 0013h a 001Ah para a inter-
rupção externa 1, 001 Bh a 0022h para a interrupção do ti1ner/ contador 1, 0023h
a 002Ah para a interrupção do canal de con1unicação serial de transmissão e
recepção e de 002Bh a 0032h para a interrupção do timer/ contador 2 (somen-
te para o 8032/52).
26 MICROC0NTR0LAD0RES 8051 Cap. 2

O espaço disponível para escrever as rotinas de atendimento para cada


fonte de interrupção é de 8 bytes (p. ex.: para a interrupção O, o espaço vai do
endereço 0003h a OOOAh; para a interrupção l, o espaço vai do endereço OOOBh
a 001211 etc.).
No caso de uma sub-rotina ocupar mais de 8 bytes, ela pode conti11uar
em outra posição de 1nemória, utilizando uma instrução de salto incondicio-
nal dentro do espaço alocado para cada fonte de interrupção ou estar alocada
inteiramente em outra posição de memória, na qual ela será ativada também
pelo uso de uma instrução de salto incondicional, situada 110 endereço inicial
do local em que se escreve a sub-rotina de atendimento à fonte de interrup-
ção. A segunda 1naneira é a mais usual.
Os 4 Kbytes, 8 Kbytes ou 16 Kbytes da memória de programa, depen-
dendo do membro da fa1nília, podem estar na ROM interna ou 11a ROM ex-
terna. Essa seleção é feita ao se ligar o pino EA \ ou EAbarra (Externai Access) no
VCC ou no GND, respectivamente.
Nos dispositivos com 4 Kbytes de ROM, se EAbarra for ligado ao VCC, a
CPU buscará o programa do endereço de 000011 a OFFFh 11a ROM interna e
buscará o endereço de 1000h a FFFFh na ROM externa.
Nos dispositivos com 8 Kbytes de ROM, se EAbarra for ligado ao VCC, a
CPU buscará o programa do endereço de 0000h a lFFFh na ROM interna e
buscará o endereço de 2000h a FFFFh na ROM externa.
Nos dispositivos com 16 Kbytes de ROM, se EAbarra for ligado ao VCC, a
CPU buscará o programa do endereço de 0000h a 3FFFh na ROM interna e
buscará o e11dereço de 4000h a FFFFh na ROM externa.
Se EAbarra for ligado ao VSS (GND), a CPU fará a busca 11a .m emória
ROM externa. Para os dispositivos da família MCS-51, sem ROM inter11a,
esse pino deve ser se1npre ligado ao VSS, para que o programa seja busca-
do integralmente na memória ROM externa e, assim, funcione adequada-
mente.
O sinal de controle de leitura da ROM externa é o sinal PSEN\=PSEN,vc1__ rra,
que não é ativo para a busca das instruções na memória de progra1na
interna.
Na Figura 2.5 é mostrada a configuração do hardware para a utilização
de memória de programa externa.
A FAMILIA DE MICROCONTROLADORES /\i\CS-51 DA 11\ITEL 27

8051 ROM/EPROM

PSENbarra .. OE\=OEbarra
. .. P1 PO .
'
'
.. 07-00
' •

Endereços
Latch .• menos
significativos
ALE .

Endereços
.
• P3 P2 mais
significativos

EAbarra -GNO

Figura 2.5 Hardware para memória de programa externa.


Observe que dezesseis lil,has de entrada e saída são dedicadas à função
especial de barramento de endereços e dados para a busca do programa 11a
memória de progra1na externa. A porta Ofunciona como um barrame11to for-
mado pelos e11dereços 1nenos significativos multiplexados com os dados. Ele
emite primeiro a infor1nação definida pelo PCL (parte menos significativa do
contador de programa) como um e11dereço e depois fica flutuante, esperan-
do a chegada de um byte de código da 1nemória de prograina. Durante o
tempo e1n que o endereço menos significativo do contador de programa (PCL)
é válido em PO, um sinal de sincronisn1.o de ALE (Address Latch Enable) permi-
te a captura desses sinais e1n um dispositivo latch externo.
A porta 2 emite o byte mais significativo do co11tador de programa (PCH)
durante tod.o o tempo da operação de leitura.
Depois disso, o sinal de PSEN\ é gerado para habilitar a operação de
leitura da ROM/EPROM, e o byte de código é lido a partir da memória de
programa para o microprocessador do microcontrolador.
O endereçamento da 1nemória de programa é sempre de 16 bits de
largura.
Memória de dados: a Figura 2.6 mostra u.ma configuração de hardv\rare para
acessar até 2 Kbytes de RAM externa. A CPU, nesse caso, está executan-
do um programa da ROM interna. A porta Oserve como barramento do
byte de endereços menos significativos e do byte de dados multiplexados,
e as três lli111as da porta 2 estão se11do utilizadas para paginar a RAM
28 MICROC0NTR0LAD0RES 8051 Cap. 2

de 256 en1 256 bytes. A CPU gera os sinais de controle de leitura


RD\ = RDbarra e de escrita WR\ = WRbarra para acessar a RAM externa.

MCS-51 com
ROM interna RAM

. .
• P1 PO - D7-DO

vcc Latch
Endereços
1
EAbarra . menos
significativos

ALE - Endereços
EIS •
~
- 1- bits de paginação .. mais
significativos
. RD\P3t p~
1-

- WR\ . .
. - •
EIS W8 OE\
• '
• ..

.

Figura 2.6 Hardware para n1em.ó ria de dados externa.

Observação: se a 1nemória de programa é interna (EAbarra= 1), os bits da


porta 2 são definidos como portas de entrada e saída e NÃO emitem o
valor de PCH (bits de endereços mais significativos).

Podem existir até 64 Kbytes de memória de dados externa. A largura


dos endereços da me1nória de dados externa pode ser de 1 ou 2 ·b ytes.
A largura de endereços de 1 byte geralmente é utilizada com a combinação
1 1
de uma ou mais linhas de entrada e saída para pagiI1ar o endereçamento da
RAM de 256 em 256 bytes. A largura de endereços de 2 bytes também pode
ser utilizada e, nesse caso, os 8 bits mais significativos do barramento de
endereços são emitidos pela porta 2 (EAbarra = O).
A memória de dados interna está n1apeada na Figura 2.7. O espaço de
memória é divido em três blocos:
os 128 bytes inferiores;
os 128 bytes superiores;
os SFRs (Special Functiori Registers), registradores de funções especiais.
A memória de dados interna é sempre endereçada com 8 bits de largu-
ra. Isso implica endereçar somente 256 bytes de memória. E11tretanto, os
A FAMÍLIA DE MICROCONTROLADORES /\i\CS-51 DA INTEL 29

modos de endereçamento para a RAM interna pode1n acomodar até 384


bytes (256 bytes de m.e mória RAM e 128 bytes disponibilizados para os
registradores de funções especiais), utilizando um truque simples. Por m.eio
do .m odo de endereça1nento direto superior a 7Fh, é acessado um espaço
de memória; e um modo de endereçamento indireto superior a 7Fh acessa
um espaço de e11dereçamento de memória diferente.
A Figura 2.7 também mostra os 128 bytes superiores e o espaço dos
SFRs ocupando o mesmo bloco de endereços (de 80h a FFh), porém são enti-
dades separadas fisicam.ente.
Os 128 bytes inferiores da RAM estão presentes e1n todos os
microcontroladores da família MCS-51 da I11tel e estão dividos em três partes
principais, como está representado na Figura 2.8.
A primeira parte é constituída por quatro bancos de registradores de 8
bits, que ocupam os endereços de OOh a 1Fl1.
A segunda parte é constituída por 16 bytes, que ocupam os endereços
de 2011 a 2Fl1, em que essas posições de me1nória podem ser acessadas por
bytes ou bits.

..................................................................,.~ - - - - - - ~
FFh FFh

Acessível por
Acessível somente endereçamento
por endereçamento direto (SFRs: portas,
indireto (128 bytes bits de controles dos
superiores) timers, acumulador
etc.)

80h 80h

7Fh

Acessível por
endereçamento
direto e indireto
(128 bytes
inferiores)

OOh

Figura 2.7 Memória de dados interna.


30 MICROC0NTR0LAD0RES 8051 Cap. 2

7Fh Endereçável
por byte
30h

2Fh
Endereçável
por bit e/ou byte
20h

1Fh R7
Banco3
18h RO

17h R7
Banco2
. 10h RO
.
Valor inicial OFh R7
doSP (Stack Banco 1
Pointer- ..
08h RO
ponteiro de :
pilha) após 07h R7
um sinal de ..
. Banco O
reset. OOHh RO
.

Fi~ura 2.8 128 bytes inferiores da RAM interna.

A terceira parte é a que ocupa os endereços de 30h a 7Fh, e1n que são
acessadas simplesmente por byte.
Os 32 bytes inferiores, cujos endereços vão de OOh até l Fh, estão agru-
pados em quatro bartcos de oito registradores. As instruções de progra1na
referenciam esses registradores como RO, Rl, R2, R3, R4, R5, R6 e R7.
Esses bancos de registradores só podem ser acessados um de cada vez.
A seleção do banco é feita por 1neio de 2 bits selecionadores de bancos de
registradores cl1amados RS1 e RSO, localizados nos bits 3 e 4 do registrador
de função especial PSW (Program Status Word). Dependendo dos valores de
RS1 e RS2, será selecio11ado um único bai1co de registradores para serem
acessados, como foi representado a11teriormente (Figura 2.9).
O uso desses registradores permite uma maior eficiência dos progra-
mas, já que as instruções que utilizam tais registradores são mais velozes,
pois são acessadas por endereçamento direto e estão próximas à CPU, além
de ocuparem menos posições de memória de programa.
A FAMÍLIA DE MICROCONTROLADORES /\i\CS-51 DA INTEL 31

bits 7 6 5 4 3 2 l o
(PSW) = e AC FO RSl RSO OV p

Banco selecionado Registradores selecionados Endereços de memória


RSl RSO
selecionados
o o o RO a R7 OOh a 07h
o 1 1 RO a R7 08h a OFh
1 o 2 RO a R7 10h a 17h
1 1 3 RO a R7 18h a lFh

RSl RSO Endereço Registrador Banco


1 1 IFh R7 3
1 1 IEh R6 3
1 1 l Db R5 3
1 1 lCh R4 3
1 1 lBh R3 3
1 1 lAh R2 3
1 l 19h Rl 3
l 1 18h RO 3
1 o 17h R7
-------------------
2
1 o 16h R6 2
1 o 15h -------------------
R5 ----- 2
------- -------
1 o 14h R4
-------------------
2
1 o 13h R3 2
1 o 12h -------------------
R2 2
-------------------
l o llh Rl
------------------- 2
l o IOb RO 2
o 1 OFh R7 l
o 1 OEh R6 1
o 1 ODb R5 l
o 1 OCh R4 1
o 1 OBh R3 1
o 1 OAh R2 l
o 1 09h RI l
o 1 08h RO 1
o o 07h R7
.. -·---·--·- .. - . -------- -·-··
o
o o 06b .. -· ·-.. -.. -..R6-·. -·. -·· -.. -·· o
o o 05h R5.. -·· --·- .. -··
.. -·-- .. -·. -··- o
o o 04h R4 -·. -· ·- .. -...
.. -.·- ..-·. - ··-.. o
o o 03h .. -.·-·· - ·. - ..R3
-.·-·. --·- ..-·· o
o o 02h R2
.. -.·-··-·. -.·- ··-··-·.- .. - .. o
o o Ol h Rl
---------- -- ··- · ----- --- .. -·· o
o o OOh .. -· ·- .. -.·- ..RO
-··-·· -· ·- .. -·· o
Figura 2.9 Ba11co de registrador.
32 MICROCONTROLADORES 8051 Cap. 2

Os 16 bytes seguintes, acima dos bancos de registradores, cujos ende-


reços de 1ne1nória vão de 2011 a 2Fh, formam um bloco de memória que é
endereçado por byte e por bit. Os endereços desses bits vão de OOh a 7Fh e
são representados com.o é indicado na Figura 2.10.

Endereço de men1ória bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit! bitO
2Fb 7f-b 7Eh 7Dh 7Ch 7Bh 7Ah 79h 78h
2Eh 77h 76h 75h 74h 73h 72h 71h 70h
2Db 6Fh 6Eh 6Dh 6Ch 6Bh 6A.b 69h 68h
2Cb 67b 66b 65b 64b 63h 62h 61b 60h
2Bh 5Fh 5Eh SDh 5Ch SBh SAh 59h 58h
2Ah 57h 56h 55h 54h 53h 52h 51h 50h
29b 4Fh 4Eh 4Dh 4Ch 4Bb 4Ah 49h 48h
28h 47b 46h 45h 44h 43b 42b 41h 40b
27h 3Fh 3Eh 3Dh 3Ch 3Bh 3Ah 39h 38h
26h 37h 36h 35h 34h 33h 32h 31h 30h
25h 2Fh 2Eh 2Dh 2Ch 2Bh 2Ah 29b 28h
24h 27b 26h 25h 24h 23b 22h 21h 20h
23h lfh IEb LDh ICh IBh IAh 19h 18h
22h 17h 16h 15h 14h 13h 12h 11h !Oh
21h OFh OEh ODh OCh OBh OAh 09h 08h
20h 07h 06h 05h 04h 03b 02h Olb OOh

Fi~ura 2.10 Faixa de memória e11dereçável por byte e bit.

Observe que existem 128 e11dereços de bits nessa faixa de 1ne1nória, que
vão do endereço OOh até 7Fh, ou em decimais, de 010 a 12710, que ocupam as
posições de memória RAM inter11a de 20h a 2Fh .
Pode-se endereçar um bit de duas maneiras diferentes. Uma delas é por
meio do e11dereço do bit, que vai d.e OOh = 010 (bit O da posição de memória
2011) até o endereço 7Fl1 = 12810 (bit 7 da posição de memória 2Fh), como foi
represe11tado a11teriormente. A outra maneira de represen tá-lo é por meio do
endereço de me1nória a que ele pertence e de sua localização dentro dessa
posição de memória; por exe1nplo, o bit cujo e11dereço é 0011 também pode
ser representado co1no 2011.0, ou seja, esse bit está localizado no conteúdo da
posição de me1nória 20h e sua posição con·esponde ao bit menos significati-
vo ou ao bit O. Da mesma maneira, o b it cujo endereço é 6Cl1 também p ode
ser representado pelo endereço 2Dh.4.
Caso se co1u1eça uma das d uas maneiras de endereçamento, é possível
obter a outra. A primeira co11versão, da representação ZWh para a represen-
tação 2Xl1.Y (ZWh--? 2X11.Y), pode ser feita de acordo com o seguinte proce-
dimento:
Co1no são 16 as posições de 1nemória qt.1e vão do endereço 2011 até 2Fl1, e
como cada posição de memória tem 8 bits, pode-se representar o endereço de
um bit, cujo endereço vai de OOh até 7Fh, e1n função do endereço de memória
A FAMILIA DE MICROCONTROLADORES /\i\CS-51 DA 11\ITEL 33

e de sua posição dentro desse endereço, transformando o endereço do bit


(OOh -7Fl1) em decimal, dividn1do-o por 8, obtendo-se o quociente (q) e o resto
(r) em hexadecimal e por fim, aplicru:ldo-se a fórmula: [2011 + ql1] h. r = 2qh.r.

Exemplo: Obter a outra representação do endereço d.o bit 5Dh?

Solução:
Transformar o endereço do bit de hexadecimal para decimal: 5.161 + 13.16°
= 9310·
Dividir o valor do endereço em decimal (9310 ) por 8: 93 / 8, obtendo o
quociente q = 1110 e o resto r = 510.
Transformar o quociente (q) e o resto (r) e1n 11exadecimal: g = 1110 = Bl1 e
r = 510 = 511.
Aplicar a fórmula: 5D11 = [20h + Bh]h.5 = 2Bh.5, ou seja, o endereço do
bit 5Dh é igual a 2Bh.5.

Para transformar o endereço de u1n bit da represe11tação 2Xl1.Y para


ZWh (2Xh.Y ~ ZWh), basta seguir o seguinte procedime11to:
Obter o quociente e o resto. O quociente (g) é obtido subtraindo 2Xl1 de
20h e transformando-o em decimal, e o resto é obtido através do núme-
ro após o po11to (.) d.e tal representação. Multiplica11do o quociente em
decimal por 8 e somando com o resto em decim.al, obtém-se o endereço
e1n decimal. O valor do endereço em decimal deve ser transformado
para l1exadeci1nal.

Exemplo: Como obter a outra maneira de representar o endereço do bit 2Ah.3?

Obter o quociente (q) e o resto (r): q = 2Ah - 20h = Al1 e r = 3h.


Transfor1nar q e r de hexadecimal para decilnal:
q = A11 = 1010 e r = 3h = 310.
Multiplicar o quociente por 8 e somar o resultado com o resto em deci-
mal: 10*8 + 3 = 8310.
Tra11sfor1nar o endereço de decimal para l1exadeci1nal:
8310 = 5*161 + 3*16º = 5311.

Essas posições de memória podem ser utilizadas como posições de me-


mória de 8 bits, com propósito geral, ou podem ser empregadas principal-
mente como bits individuais (O - resetado, 1 - setada). Elas podem ser testadas
por instruções de testes de bits do tipo JB bit e JNB bit. Esses bits são muito
34 MICR0C0NTR0LAD0RES 8051 Cap. 2

utilizados para represe11tar co11dições digitais, ou seja, co1no fiags sii1alizadores


de condição (bits que sinalizam condições de controle), por exemplo, siste1na
de iluminação ligado ou d.e sligado, chave acionad.a ou desacionada, resulta-
do de uma operação maior que zero ou menor que zero etc.).
A terceira faixa de memória, que vai do endereço 30h até 7Fh para o
microcontrolador 8051 e de 30h até FFI1 para os 1nembros da família de
microcontroladores MCS-51 da Intel, que têm 256 bytes de memória interna,
só pode ser acessada de 8 em 8 bits, por e11d.ereçamento direto até 7Fh e por
endereçamento indireto de 80h a FFh. Seu uso é de propósito geral.
A faixa de 8011 até FFh, para o microcontrolador 8051, conte1npla os re-
gistradores de função especiais, chamados de SFRs (Special Functio11. Registers).
A Figura 2.11 mostra alguns registradores de funções especiais (SFRs). Esses
registradores só podem ser acessados por endereçame11to direto, e alguns
deles também são endereçáveis por bit.

FFh ..................................................
.
Endereços que
terminam com
EOh: ACC Oh ou 8h são .
também
endereçáveis
por bit. .
.
BOh: Porta 3 ................................................:

AOh: Porta 2

90h: Porta 1

80h: Porta O

Figura 2.11 Endereçan1ento de alguns SFRs.


As tabelas 2.3 e 2.4 mostram os registradores de função especiais (SFRs)
co1n seus respectivos endereçame.n tos e no1nes.
A FAMILIA DE MICROCONTROLADORES /\i\CS-51 DA INTEL 35

Tabela 2.3 Registradores de funções especiais (SRFs).

Registr adores Endereço Non1e dos registradores


A ou ACC EOh Acu1nulador
B* FOh Registrador B
DPL 82h Byte n1cnos significativo do ponteiro de dados
DPH 83h Byte rnais significativo do ponteiro de dados
IE* A8h Habilitador de interrupções
IP B8h Priorizador de interrupções
SCON* 98h Controlador da con1unicação serial
SBUF 99h Buffer de dados serial
PSVi'* D Oh Palavra de status de progra111a
PCON 87h Controle de potência
TCON* 88h Controle do tirnerfcontador
Tt,.100 89b Modo de operação de ti,n erlcontador
THO 8Ch Byte mais signili cativo do ti111er/contador O
TLO 8Ah Byte 111e11os significativo do titner/contador O
THI 8Dh Byte n,ais significativo do ti111er/contador 1
TL 1 8Bh Byte 111cnos significativo do tirner/contador 1
PO* 80h Porta O
PI* 90h Porta 1
P2* A Oh Porta 2
P3* BOh Porta 3

Tabela 2.4 Registradores de fw1ções especiais somente disponíveis para a família 8052.

Registradores E ndereço Nome dos registradores


T2CON* C8h Controle de ti111er/contador 2
TH2 CDh Byte n1ais significativo do titner/contador 2
TL2 CCh Byte n1cnos significativo do ti111er/contador 2
RCAP2H CBh Byte n1ais significativo do ti,nerlcontador de captura 2
RCAP2L Cah Byte ,nais significativo do ti,n erlcontador de captura 2

* Registradores endereçados por bit.

2.2.5 - Mapea1nento de memória para uso de memória externa: cada célula


de memória e cada registrador de um dispositivo exter110, mapeado como
memória, deve ter pelo menos um endereço.
Se houver mais de um dispositivo respondendo a um determinado
endereço, isso causará um conflito de sinais no barrame11to de dados e, con-
seqüentemente, a queima desses d ispositivos. O projetista de hardware,
responsável pelo projeto do sistema de decodificação dos endereços, deve
evitar que dispositivos diferentes tenl1am endereços iguais.
36 MICR0C0NTR0LAD0RES 8051 Cap. 2

Geral1nente, um siste1na com microprocessador ou microcontrolador


tem mais que um dispositivo de 1nemória de entrada e saída. Assim, para
cada dispositivo, deve haver endereçamentos diferentes entre eles, para que
não existam conflitos de sinais. O sistema de endereçame11to deve selecioná-
los quando os endereçamentos aparecerem no barramento de e11dereços do
microprocessador ou microcontrolador. O método tradicional para fazer a
decodificação dos endereços é por meio do uso de u1.n decodificador para
separar o espaço de endereçamento e1n partes iguais. Um decodificador
muito utilizado, na prática, para fazer a decodificação do espaçamento de
me1nória ou de dispositivos de entrada e saída (mapea1ne11to de me1nória
ou de dispositivos d e entrada e saída) é o decodificador de três entradas e
oito saídas, o 74138. A Tabela 2.5 mostra sua 1tabela-verdade 1•
Tabela 2.5 Tabela-verdade do 74138.

Entradas Saídas
G2A' G2B' Gl A2 Al AO YO Yl Y2 Y3 Y4 YS Y6 Y7
1 X X X X X 1 l l l 1 l l 1
X 1 X X X X 1 1 l l 1 l l J
X X o X X X 1 1 l 1 1 1 1 1
o o 1 o o o o 1 l l l l l 1
o o l o o l 1 o l l l l 1 1
o o 1 o 1 o 1 l o t 1 1 1 1
o o l o l l l l l o l l l l
o o l l o o I I l I o 1 1 I
o o l l o l 1 1 l 1 1 o 1 1
o o l 1 l o 1 I l I l l o l
o o l l 1 1 1 1 l l 1 l 1 o
O: O lógico; 1: 1 lógico; X: pode ser O ou 1 lógico;': representa a entrada ativa em O lógico.

A representação esquemática e a pinagem do 74138 são mostradas 11a


Figura 2.12.
1 A vcc 1fi
2 B YO 15
3 e Y1 14
4 G2A' 1~
Y2
5 - G2B' Y3 12
6 G1 Y4 11
7 Y7 1n
Y5
8 GND Y6 9

74138

Figura 2.12 Decodificador 74138.


A FAMÍLIA DE MICROCONTROLADORES MCS·Sl DA INTEL 37

Esse decodificador não l1abilita nenhu1na saída, caso uma das entradas
l1abilitadoras, G2A' ou G2B', seja igual a 1 lógico ou se Gl for igual a O lógico.
Quando G2A' = G2B' = O lógico e Gl = 1 lógico, somente uma saída em O
lógico é ativada, correspondente à combinação das entradas AO, Al e A2
(p. ex.: A2 = Al =AO= O faz com que YO = O e as demais saídas fiquem iguais
a 1 lógico; A2 = Al = AO = 1 fará com que Y7 = O e as de1nais saídas fiquem
iguais a 1 lógico etc.).
Assim, considere um exemplo de n1apeamento de 1nemória ou disposi-
tivo de entrada e saída, co1n os sinais do 8051 ligados ao 74138, co1no está
representado na Figura 2.13.

vcc
~
A13
A14 1 vcc 16 YO\
A
2 15
A15 B YO Y1\
3 14
4
e Y1
13
Y2\
ALE G2A' Y2 Y3\
5 . G2B' Y3 12
VCC Y4\
6 G1 Y4 11 .
-
10 Y5\
7 Y7 Y5 Y6\
8 GND Y6 9
y
74138

Fl~ura 2.13 Exemplo de mapea111ento de me111ória co111 o 74138.

Com esse hardware, o mapeame11to de memória ou de dispositivo de


entrada e saída, gerado por cada saída YX\ (X= O, 7), é mostrado na Tabela
2.6.

Por meio dessa tabela, pode-se afirmar que:

a) A saída YO\ é l1abilitada em O lógico sempre que no barramento de en-


dereços do microcontrolador foren1 definidos os e11dereços da faixa de
0000h a lFFFh. A saída Yl \ é habilitada em O lógico sempre que no
barramento de endereços do microcontrolador forem definidos os en-
dereços da faixa de 2000h a 3FFFh e assirn por diante.
b) Para esse hardware, cada saída do decodificador, quando l1abilitada,
defi.11e uma faixa de 8 Kbytes de endereços. Ou seja, pode-se dizer que
esse sistema de mapeamento divide os 64 Kbytes possíveis em oito par-
tes, e que cada parte tem uma largura de 8 Kbytes de endereços.
w

Tabela 2.6 Mapa de endereçamento de memória ou dispositivo de E/S mapeado com 1nemória. -~
( ")
;,o
o
(")
Endereço Saída do de- Quantidade o
AIS Al4 Al3 Al2 Ali AIO A9 AS A7 A6 AS A4 A3 A2 AI AO inicial e codificador de bytes ~
;,o
final habilitada por saída o
o o o o o o o o o o o o o o o o OOOOH Y0\ =0 ç;:
o
o o o X X X X X X X X X X X X X Y0\=0 8K o
o o o 1 l 1 l l 1 l l l 1 l 1 1 IFFFH Y0\ =0 ;,o
m
o o 1 o o o o o o o o o o o o o 2000H Yl\=0
V>
00
o o 1 X X X X X X X X X X X X X Yl\=0 8K o
....
'-"
o o 1 1 1 1 1 1 1 1 1 1 l 1 l l 3FFFH Yl\=0
o 1 o o o o o o o o o o o o o o 4000H Y2\=0
o 1 o X X X X X X X X X X X X X Y2\=0 8K Q
o 1 o 1 l l 1 1 1 1 1 1 1 1 1 1 5FFFH Y2\=0 .
"C
IV
o 1 1 o o o o o o o o o o o o o 6000H Y3\=0
o 1 1 X X X X X X X X X X X X X Y3\=0 8K
o 1 1 l 1 l 1 l 1 1 1 1 l l 1 l 7FFFH Y3\=0
1 o o o o o o o o o o o o o o o 8000H Y4\=0
1 o o X X X X X X X X X X X X X Y4\=0 8K
1 o o 1 1 1 1 1 1 1 1 1 1 1 1 1 9FFFH Y4\=0
1 o 1 o o o o o o o o o o o o o AOOOH Y5\ = 0
1 o 1 X X X X X X X X X X X X X Y5\=0 8K
1 o 1 1 1 J 1 1 1 1 1 1 1 1 J 1 BFFFH Y5\=0
1 l o o o o o o o o o o o o o o COOOH Y6\=0
1 J o X X X X X X X X X X X X X Y6\=0 8K
l 1 o 1 1 1 1 1 1 1 1 1 1 1 1 1 DFFFH Y6\=0
l l 1 o o o o o o o o o o o o o EOOOH Y7\=0
l l 1 X X X X X X X X X X X X X Y7\=0 8K
l l 1 1 1 l l l 1 l l l l l l l FFFFH Y7\ =0
Dígito+ sign. do endereço Dígito + sign. do endereço Dígito - sigo. do endereço Dígito - sigo . do endereço
A FAt\.\(LIA DE MICROCONTROLADORES /\i\CS-51 DA 11\ITEL 39

e) Se, por exemplo, for definido o ertdereço 912Dh no barramento de


endereços do m icrocontrolador, será habilitada a saída Y4\ do deco-
dificador. Se, por exemplo, for defi11ido o endereço E999h no
barramento de endereços do m icrocontrolador, será habilitada a saí-
da Y7\ d.o decodifica dor e assim por diante.

e B A Decodifica do,· 74138


End. A IS A14 A13 A12 A 11 AIO A9 A8 A7 A6 AS A4 A3 A2 AI AO y
9120h 1 o o 1 o o o 1 o o 1 o 1 1 o 1 Y4/
E999h l 1 1 o l o o 1 1 o o l l o o 1 Y7/

d) Observe que os endereços Al5, A14 e A13 são os bits que defi11em a
faixa de endereçamento de cada saída do decodificador.
e) Os bits AO a A12 NÃO mflue11ciam a ativação das saídas dos decodifi-
cadores.
'
E importante d.izer que qLtalquer d i.s positivo ligado a um sistema m i-
croprocessado ou microcontrolado deve ter u1n pi110 físico cl1a1nado chip en.able
ou similar. Esse pino faz com que o dispositivo dese1npe11he sua função so-
men te quando o mes1n o estiver l1abilitado.
Assim, conecta11do, por exemplo, a saída YO\ ao chip enable d.e u1na me-
mória de 8Kx8, os endereços dessa memória irão de 0000h a l FFFh . Ou se,
por exe1nplo, a saída Y6\ for conectada a uma memória de 2Kx8, os endere-
ços dessa memória irão de COOOh a C7FFh ( = COOOh + 2K = COOOl1 + 07FFh),
de C80011 a CFFFh ( = C800h + 2K = C800h + 07FFh), de D00011 a D7FFh ( =
DOOOh + 2K = DOOOh + 07FFh) ou, ainda, de D80011 a DFFFh ( = D800h + 2K =
D800h + 07FFh).
2.2.6 - Mapea1nento de inter/aces de E/S como meniória: pode-se mapear uma
interface de E/S como m.e mória utilizando-se a saída do decodificador
co11ectada a um circuito integrado que tem a função de ser um dispositivo de
entrada e saída. O endereçamento da E/Sé obtido da mesma maneira como
foi obtido para o caso dos e11dereça1nentos de 1ne111ória.
2.2.7 - Uso de interfaces de EIS externa: é possível adicionar d ispositivos d.e
entrada e saída (portas paralelas, relógios, controladores de display de cris-
tal líquido, timers/ contadores etc.), além daqueles que já existem no
microcontrolador. Eles podem ser adicionados como dispositivos mapeados
como memória.
40 MICROC0NTR0LAD0RES 8051 Cap. 2

Ch1
o-

+ C1
10 pF
Reset do 8051 (9)

--VCC

R1
10k0

Figura 2.14 Circuito de reset para a fan1ília de microcontroladores MCS-51 da Intel.


2.2.8 - O sinal de reiniciar da família de 1nicrocontroladores MCS-51 da Intel:
o reset da família de m icrocontroladores MCS-51 é ativado quando o pino
9 p ermanecer em nível alto por, 110 mínimo, dois ciclos de máquina.
Um possível l1a.rdware para gerar o sinal elétrico de reset é mostrado
na Figura 2.14.
Ao energizar o sistema microcomputadorizado inicialme11te o capacitor
está descarregado e a tensão sobre o resistor é igual a VCC. Após um tempo
t = lOuF*lOKW = 0,1 segundo, a tensão do capacitor fica aproximadamente
igual a VCC e a tensão no resistor fica igual a zero. Assim, logo após a
energização do sistema 1nicrocomputadorizado, um sinal de reset é gerado
pelo circuito em nível lógico 1 durante Ltm período t e depois fica em zero
lógico.
Após um sinal de reset, internamente à CPU, são ilucializados alguns
registradores de funções especiais, como descrito a seguir:

O contador de programa (PC) é inicializado com o valor 0000h. Corno a


função do registrador contador de programa (PC) é a de armazenar sem-
pre o endereço da próxima instrução a ser buscada e executada pelo
microprocessador do microcontrolador, qua11do ocorrer o sinal de reset,
a próxi1na i11strução a ser executada será aqL1ela ar1nazenada no conteú-
do do endereço da memória de programa 000011 (ROM/EPROM). As-
sim, o projetista de l1ardware de,,e mapear sempre a memória ROM/
A FAMILIA DE MICROCONTROLADORES /\i\CS-51 DA 11\ITEL 41

EPROM a partir do endereço 000011, e o projetista de software também


deve escrever se1npre um programa a partir do endereço 0000h;
O registrador de fu11ção especial ponteiro de pil1'1a (SP - Stack Pointer) é
inicializado com o valor de 07h. Todos os dados armaze11ados na me-
mória RAM por meio de instruções que utilizam a pilha serão armaze-
11ados a partir do endereço de memória 07h. As instruções que utilizam
a pill1a são: PUSH, POP e LCALL, ACALL, RET e RETI.
As portas PO, Pl, P2 e P3 serão inicializadas co1n FFh (inicialmente, fi-
cam programadas como entradas).
O registrador de controle do ca11al de comunicação serial SCON é
'zerado'.
Os 5 bits menos significativos dos registradores de conh·ole de interrup-
ção IE e IP são 'zerados'.

Xtal1 do 8051 (18)

C1

1 1
Xtal

C2
Xtal1 do 8 051 (19)

FiQura 2.15 Circuito do sinal de relógio (clock).


2.2.9 - O sinal de relógio (clock) do MCS-51: todos os membros da família de
microcontroladores MCS-51 têm um oscilador inter110 que pode ser utilizado
co1no um sinal de relógio (fonte de clock) para o microprocessador (CPU).
Assi1n, para utilizá-lo como oscilador interno, um cristal ou u1n ressonador
cerâmico deve ser co11ectado e11tre os pinos XTALl e XTAL2 do
microcontrolador, como é mostrado na Figura 2.15. Quai1do o sinal de reló-
gio for gerado com osciladores externos, o l1ardware será diferente, e cada
tipo de tec.n ologia terá u1n tipo de co11fígu ração, corno se segue:
a) HMOS oii CHMOS
Sinal de relógio externo ligado aos pinos XT ALl e XT AL2; o siI1al de
relógio invertido (uso de porta NOT).
42 MICR0C0NTR0LAD0RES 8051 Cap. 2

b) Soniente HMOS
Sir1al de relógio externo diretamente ligado aos pinos XT AL2 e XTALl
aterrados.
c) Somente CHMOS
Sinal de relógio externo diretamente ligado aos pinos XT ALl e XTAL2;
não deve ser ligado a nada.
O gerador de sinal de relógio interno define a seqüê11cia de estados que
forma1n o ciclo de máquÍJ.1a da fainília de microcontroladores MCS-51.
2.2.10- Ciclos de máquina: o ciclo de máquina consiste na seqüência de seis
estados, numerados de Sl a S6. O tempo de cada estado corresponde a dois
períodos de relógio (clock). Assim, um ciclo de 1náquÍJ.1a tem doze períodos
de relógio. Por exe1nplo, caso seja utilizado um cristal de 12 MHz, o ciclo de
máquina tem u1na freqüê11cia de 12MHz/ 12 = 1MHz e Tctock (período de clock)
= 1/lMHz = 1 1ns.
Cada ciclo de 1náquina está dividido em duas meias fases (Fase 1 e Fa-
se 2), cada u1na delas correspondendo a um período de relógio.
A seguir, há um exemplo de seqüência de busca e execução em estados
e fases para vários tipos de instruções.
Sinal de relógio:
SI S2 S3 S4 S5 S6 SI S2 S3 S4 S5 S6
PI P2 Pl P2 Pl P2 Pl P2 Pl P2 Pl P2 Pl P2 Pl P2 PI P2 Pl P2 Pl P2 Pl P2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Sinal de ALE:
1 1

1- Um ciclo de instrução de um byte. Exemplo: INC. A.


Lê Opcode Lê o próxi1110 Lê o próxin10
Opcode (desca11a) Opcode novan1ente
! Sl ! S2 ! S3 ! S4 ! S5 ! S6 ! S1 ! S2 ! S3 S4 S5 S6

2- Um ciclo de instrução de dois bytes. Exemplo: ADO A,#data.


Lê Opcode Lê o segundo Lê o próxin10
Byte Opcode
! S1 ! S2 ! S3 ! S4 ! S5 ! S6 ! S1 ! S2 ! S3 S4 S5 S6

3- Dois ciclos de instrução de um byte. Exemplo: INC DPTR


Lê Opcode Lê o próxin10 Lê o próximo Lê o próxi.n10
Opcode (descarta) Opcode (descarta) Opcode (descarta)
! S1 ! S2 ! S3 ! S4 ! S5 ! S6 ! S1 ! S2 ! S3 ! S4 ! S5 ! S6

Veja, a seguir, os sinais e os tempos e11volvidos na busca do programa


e1n memória de programa externa durante o uso da instrução MOVX.
A FAMÍLIA DE MICROCONTROLADORES /\I\CS-51 DA INTEL 43

SI S2 S3 S4 S5 S6 SI S2 S3 S4 S5 S6
PI P2 PI P2 Pl P2 PI P2 PI P2 PI P2 PI P2 Pl P2 PI P2 Pl P2 PI P2 Pl P2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Sinal de ALE:

PSEN\:
1 1
RD\:

P2:
1 PCH Out I PCH Out 1 PCH Out 1 PCH Out 1 PCH Out
PO:
Inst. PCL Out lnst. PCLOut lost. PCL Out Inst.
.til PCLOut
,n ,n in

Se ocorrer u1n acesso à memória de dados externa, não existirão dois


pulsos de PSEN\ = PSENbarra' pois os barra1nentos de endereço e de dados
estão sendo utilizados para o acesso à memória de dados, com o uso da ins-
trução MOVX. Dessa maneira, o ciclo para o acesso à memória de dados é
duas vezes maior que o ciclo da memória de programa.
Quando o microprocessador (CPU) está executando um programa da
memória de progratna interna, PSENbarra não é ativado e o endereçatnento da
memória de programa externa 11ão é emitido. Entretanto, o sinal ALE conti-
nua sendo ativado duas vezes por ciclo de máquina e, assi1n, ele pode ser
utilizado como um sinal de saída de relógio. Por exemplo, se o cristal utiliza-
do for de 12 MHz, cada sinal de relógio será de 12 MHz/12 = 1MHz. Como o
sinal de ALE é formado por três sinais de relógio, então ALE pode ser utiliza-
do como um sinal de relógio de 333,33 KHz.
2.2.11- Operação de execução de uni programa passo a passo: a estrutura do
sistema de interrupções dos microcontroladores da família MCS-51 permite
a execução de programas passo a passo, com pouquíssimo trabalho referente
a software.
Uma fo11te de interrupção só é ate11dida pelo microprocessador em duas
condições: a) quando não estiver sendo executada uma outra interrupção de
mesmo nível; b) quando não estiver sendo executada a instrução RETI. As-
sim, sempre que for atendida uma interrupção, a mes1na não poderá ser no-
va1nente processada, enquanto 11ão for executada uma instrução do progra-
ma principal.
Um modo de utilizar essa característica de operação passo a passo é
programar uma fonte d.e interrupção externa, como INTO\para ser ativada
44 MICR0C0NTR0LAD0RES 8051 Cap. 2

por nível. A rotina de atenditnento à fo11te de i11terrupção INTO\ =INTObarra


deve terminar com a seguinte codificação, por exemplo:
JNB P3.2,$ Aguarda que o bit P3.2 vá para 1 lógico
JB P3.2,$ Aguarda que o bit P3.2 vá para O lógico
RETI Retorna da rotit1a de atenditnento da fo11te de interrup-
ção INTO\
Agora, se o pin.o INTObarra' que deverá estar conectado ao pino P3.2, está
nor1nalmente em um nível lógico baixo, a CPU executará a sub-rotina de
ate11dime11to da fo11te de interrupção INTObarra e 'ficará lá1 até que INTObarra
apresente u1n sinal pulsado (de O lógico para 1 lógico e para O lógico nova-
mente). Então, ela executará a instrução RETI, voltará para o programa prin-
cipal, executará urna única instrução e, i1nediata1nente, ocorrerá uma nova
interrupção. Novamente, a CPU executará a rotina de atendin1ento da fonte
de interrupção INTObarra e aguardará um sit1al pulsado de P3.2. Uma i11stru-
ção de programa será executada por vez, sempre que P3.2 pulsar.
2.2.12 - Operação de baixa potência em microcontroladores HMOS: dura11te a
operação n.o rmal, a RAM interna consom.e sua potência de VCC. Mas se a
tensão em RST /VPD exceder a VCC, ela se tor11ará a fonte de potê11cia para a
RAM interna. Isso per1nite que uma fonte de potência secundária (backup)
possa ser utilizada para reter os dados da RAM em um evento de falha na
fonte de potência referente a VCC.
Para aproveitar essa característica, o sistema do usuário, sob detecção de
falha 11a fonte de potência referente a VCC, interromperia a CPU via INTObarra
ou INTl,_-wrra
, pai-a transferir dados relevantes para a RAM e l1abilitaria a fonte
de potência secundária (backtip) para o pino RST\ VPT, antes que a fo11te de
potência principal referente a VCC chegasse ao seu limite de operação. Quan-
do a fonte de potência retornasse, VPD 11ecessitaria ficar um tempo suficiente-
mente longo para gerar um sinal de reset, para que novamente o sistema viesse
a funcionar com sua fonte de potê11cia principal referente a VCC.

2.2.13 - Modos de redução de potência em microcontroladores CHMOS: nessa


versão, são apresentados dois modos de redução de potê11cia: Idle e de baixa
potência.
a) Modo Idle: no modo Idle (IDL = 1 lógico), o oscilador funciona somente
para as fontes d.e it1terrupções externas do canal de co.m unicação serial
e dos timers/ contadores e o oscilador para a CPU está desativado e 11ão
existe sinal de clock para a mesma.
A FAMÍLIA DE MICROCONTROLADORES /\I\CS-51 DA INTEL 45

Nessa condição, a CPU é preservada com relação ao conteúdo dos


registradores de funções especiais Stack Poi·nter (SP), Program Counter (PC),
Progra.ni Status Word (PSW), Acu1nulador A ou ACC e todos os outTos registra-
dores ma11têm seus dados durante o modo Idle.
Existe1n dois modos de finalizar o modo Idle:
Quando qualquer fonte de interrupção for ativada, desde que esteja ha-
bilitada, zeran.d o (PCON.O) por hardware. Dessa 1naneira, a interrup-
ção será atendida e, após executar a instrução RETI, o sistema entra no-
vamente no modo Idle. Os flags GFl e GFO podem ser utilizados para
indicar se as fontes de interrupções ocorreram durante o 1nodo normal
de operação ou durante o modo Idle.
Qua11do é gerado um sinal de reset pelo hardware.

b) Modo baixa potê11.cia.: no m.o do de baixa potência (Power Down), o oscilador


interno é desativado, todas as fu11ções são interrompidas e some11te a
RAM irlterna fica energizada e operante (os registradores de fw1ções
especiais não ficam energizados). A única ma11eira de e11cerrar o modo
de baixa potê11cia é por meio de um sinal de reset emitido pelo hardware.
,
O VCC pode ser reduzido para 1ninimizar o consumo de potência. E
preciso tomar o cuidado para assegurar que o VCC não seja reduzido antes
que o modo de baixa potência esteja ativado e que o VCC seja restaurado
para o 11ível normal de operação, antes que o 1nodo de baixa potência seja
encerrado.
O sinal de reset é o que finaliza o modo de baixa potê11cia e também
libera o oscilador. O sinal de reset não deveria ser ativado antes de o VCC ser
recuperado.
O modo Idle e o de baixa potência são ativad.o s por meio dos bits que
pertencem ao registrador de função especial PCON (87h), endereçável por bit.
Registrador PCON:
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit o
SMOD GFI GFO PD IDL

SMOD: bit de duplo baud ra.te (freqüência de recepção e trru1Smissão do


canal de co1nunicação serial). Quando for igual a 1 lógico, o baud rate será
duplicado se o ca11al de comu11icação serial estiver 110 modo 1, 2 ou 3.
46 MICR0C0NTR0LAD0RES 8051 Cap. 2

GFl: jlag para uso de finalidade geral.


GFO: jlag para uso de finalidade geral.
PD: bit de baixa potência (Power Down). Tornando esse bit igual a 1
lógico, o 1nodo de baixa potência é ativado.
IDL: bit do modo ldle. Tornando esse bit igual a 1 lógico, o 1nodo ldle
é ativado.

Exercícios resolvidos
1 - Considere que você é o projetista de um equipamento didático que
utilizará um dos microcontroladores da família MCS-51 da Intel. Por
meio de um estudo preliminar, você concluiu que necessitará de 2
Kbytes de memória de programa interna, 200 posições de memória
de dados, 5 fontes de i11terrupções, 2 ti1nersj contadores e 27 portas
de entrada e saída. Observando a Tabela 2.1, qual membro da família
de microcontroladores você utilizaria?

Resposta: uma das opções poderia ser o microcontrolador 80C52AH. Ele


atende a todos os requisitos de sua conclusão descrita anteriormente.

2 - Considere o endereço do bit 4Ch. Onde está localizado esse bit (ende-
reço de memória e posição do bit)? Qual é a outra maneira de repre-
sentar o endereço desse bit?
Solução: 4Ch = ?
Transformar o endereço do bit de hexadecimal para decimal: 4.161 +
12.16º = 7610·
Dividir o valor do endereço em decimal (7610 ) por 8: 76 / 8 e obter o
quociente (q) = 910 e o resto (r) = 410 •
Transformar o quociente (q) e o resto (r) em hexadecimal: q = 910 = 9h e
r = 4 10 = 4h.
Aplicar a fórmula: 4Ch = [2011 + 9h]h.4 = 29h.4, ou seja, o endereço do
bit 4Ch é igual a 29h.4.

3 - Considere que o conteúdo do registrador de função especial (PSW)


foi inicializado com o valor E3h. Qual banco de registradores foi sele-
cionado?
A FAMILIA DE MICROCONTROLADORES /\i\CS-51 DA INTEL 47

Solução:
bits 7 6 5 4 3 2 l o
(PSW) = e AC FO RS1 RSO ov - p
E3h = l 1 I o o o I 1

Como RS1 = Oe RSO = O, o banco de registradores selecionado foi o


banco O; os registra.d ores selecionados foram os registradores de RO a R7,
cujos endereços vão de 0011 a 07h.

Exercícios e questões propostos


1 - Qual é o membro original da família de microcontroladores MCS-51
da Intel e qu.ais são suas características prin.c ipais?
2 - Utilizando a Tabela 2.1, selecione qual membro da família MCS-51 me-
lhor corresponde a um projeto que necessita de 4 Kbytes de memória
ROM, 96 bytes de memória RAM e baixo consumo de potência?
3 - Descreva os p inos de 32 a 39 do microcontrolador 8051.
4 - Descreva a função do sinal PSENbarra da família de microcontroladores
MCS-51.
5 - Quanto de me1nória RAM e ROM o microcontrolador 8051 pode en-
dereçar? Desenhe a organização da memória da família de
microcontroladores MCS-51.
6 - Represente os endereços de memória ROM que apresentam funções
específicas após o sinal de reset e após os sinais de interrupção. Des-
creva também como ocorre o processo de interrupção e de reset.
7 - Qual é o espaço, em bytes de memória ROM, para se escrever rotinas
de atendimento às fontes de interrupção? Caso uma rotina de atendi-
mento às fontes de interrupção seja major que esse espaço disponí-
vel, como proceder para alocar a m esma?
8 - Qual é a representação elétrica do hardware para a memória de pro-
gram.a externa? Explique a função de cada sinal e dos componentes
utilizados.
9 - Qual é a representação elétrica do hardware para memória de da-
dos externa? Explique a função de cada sinal e dos componentes
utilizados.
48 MICROC0NTR0LAD0RES 8051 Cap. 2

10 - Qual é o diagrama de blocos da estrutura da memória de dados inter-


na? Explique cada um dos blocos integrantes.
11 - Dados os endereçame.n tos dos bits da memória RAM interna, calcule
a outra maneira de representar seu endereço.
a) 2Cl1
b) 2Fh.6
e) 71h
d) 24h.6

12 - Quais são os registradores de função especial encontrados nos


microco11troladores 8051 e 8052? Descreva-os.

13 - Qu.a l é a função de um decodificador em um sistema que utiliza


microcontrolador, memórias externas e dispositivos de entrada e saí-
da?

14 - Desenhe o diagrama de blocos (8051, latch, decodificador, sinais de


controle etc.) de um projeto que consiste em um microcontrolador
8051 de d.uas memórias ROM externas de 4Kx8 e uma memória RAM
de32Kx8.

15 - Projete um mapeamento de memória (mapa de endereçamento) para


dividir o espaço de endereçamento externo de dados de 16Kx8 em
16Kx8. Desenhe a.s interconexões do decodificador com o
rnicrocontrolador 8051.

16 - Explique o esque1na elétrico de um circuito que deve ser conectado


ao pino de reset do microcontrolador 8051 e descreva o que ocorre
quando um sinal de reset é gerado.

17 - Descreva e explique o diagrama de tempo de uma instrução de um


ciclo de máquina e de um byte.
capítulo
0CONJUNTO DE INSTRUÇÕES DA
FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL

3.1 Objetivos
•:• Definir o registrador de função especial Program Status Word (PSW)
•:• Definir os diferentes modos de e ndereçamento da fam ília de
microcontroladores MCS-51
•:• Definir o conju nto de instruções da família de microcontrolad ores
MCS-51

3.2 lntroducão

teórica
Inicialme11te, será apresentado o registrador de função especial PSW (Prograni
Status Word ou registrador de cond ição do programa). Esse registrador é de
fundatnental importância para a implementação d.e programas que tomam
decisões e, conseqüenteme11te, dão inteligência ao sistema microcontrolado.
3.2.1- O registrador de função especial Program Status W ord, PSW: é com-
posto por 4 bits de condição (jlags - bandeiras de si11alização) que refletem a
condição atual do processamento de um programa: C: carry bit, AC: auxiliar
carry bit, OV: overflo1.v bit e P: parity bit. Ele também é composto por um bit
para utilização geral (FO), que pode ser setada(= 1) ou resetado (= O) por softwa-
re. Além desses bits, ele também é formado pelos dois bits selecionadores de
banco de registradores, RS1 e RS2. É i1nportante destacar que os bits
sinalizadores da condição do programa (jlags) são influenciados sempre que
a unidade lógica e arit1nética (ULA) é utilizada por instruções aritméticas e
lógicas. Assim, sempre qLle for executada uma instrução aritmética ou lógi-
ca, o resultado da operação ficará armazenado em utn determjnado registra-
dor ou posição de memória e, simultaneamente, esses fiags serão alterados,
50 MICROC0NTR0LAD0RES 8051 Cap. 3

refletindo a condição do resultado da operação (se ocorreu um comando vai


0/1 do bit mais significativo, se ocorreu um vai 0/1 do bit 3, se houve uma
condição de erro e se a paridade do resultado obtido é par ou ímpar etc.).
A Tabela 3.1 mostra as instruções que afetam os flags do registrador de fun-
ção especial PSW:
Tabela 3.1 Instruções qtte afetam os flags do registrador de função especial PSW
(Progra,n Status V\1ord).

Instrução e ov AC
ADD X X X
ADDC X X X
SUBB X X X
MUL o X
DIV o X
DA X
RRC X
RLC X
SETBC 1
CLRC o
CPL C X
ANL C,bit X
ANL C,/bil X
ORL C,bil X
ORL C/ bit X
MOV C,bit X
MOV C,/bit X
CJNE X

A seguir, é mostrado o registrador de função especial PSW, que pode


ser endereçado por byte ou por bit.
bit 7 bit 6 bit 5 bit' 4 bit 3 bit 2 bit 1 bit O
(PS\V) = 1..._c_ _.__,i..._c_ _,___F_O_.__R_S_I__,__R_
.s_o_.___o_v_ _.__ ___.__r_ _ .

Onde:
Carn; bit flag (C) ou (PSW.7): após operações aritméticas de adição e de
subtração significa o 'vai um' ou o 'vai zero' do bit 7 do valor do resultado.
Após operações lógicas, esse bit é resetado [(C) = O].
Significado do valor de carn; bit flag após u1na operação de adição:
(C) = O: significa que o número pode ser representado co1n 8 bits (valor
< 25510(FFh)).
O CONJUNTO DE INSTRUÇÕES 51

(C) = 1: sig1úfica que o resultado 11ão pode ser representado co1n 8 bits
(valor > 25510). Isso quer dizer que o carry bit Jl.ag deverá ser utilizado
como um nono bit para determinar o resultado da operação de adição
(C*28 adicionado ao valor dos outros 8 bits do resultado).
Significado do carn; bit Jl.ag após u1na operação de subtração [(x) - (y)]:
(C) = O: significa que o 1° operando é~ 2° operando.
(C) = 1: significa que o 1° operando é< 2° operando.
O carn; bit Jl.ag também é utilizado na conversão de u1n nú1nero binário
ou hexadeci1nal em BCD (represe11tação deci1nal utilizando quatro bits), ou

(C) = O: não é necessário adicionar o valor 6 nos quatro bits mais signifi-
cativos do resultado.
(C) = 1: é necessário adicionar o valor 6 nos quatro bits mais significati-
vos do resultado.
Dica
a) Para a fa1nília de rnicrocontroladores MCS-51, a operação de subtração
11ão é feita diretamente, como o ser humano está acostumado a fazer em
decimal.
b) A operação de SLtbtração é simulada por meio da operação de adição do
co11teúdo do acumulador (A) e do complemento de dois (e2) do valor
que se deseja subtrair. Essa simulação só é válida se, e so1ne11te se, o
carry bit Jl.ag (C) e o auxiliar carry Jl.ag (AC) forem complementados. Ou
seja, pode-se representar a operação de subtração da seguiI1te maneira:

(A) ~ (A) - (C) - (<src - byte>) = (A)+ [(C) + (<src - byte>)Jc2 <=> (C) ~ not (C) e (AC) ~ not (AC)

c) A família de microcontroladores MCS-51 trabalha com 11.ún1.eros sinaliza-


dos, ou seja, com uma escala de valores que vai de - 128 a +127. Dos 8
bits de mformações, o mais significativo (bit 7) é o 'bit de sinal', e ores-
ta.nte dos bits (bit 6 - bit O) define o valor numérico por 1neio de 7 bits do
byte.
d) Todo número negativo está representado em complemento de 2. Para
determinar o valor numérico de um número negativo (bit 7 = 1}, sempre
é preciso determinar o valor de seu complemento de 2.
52 MICROC0NTR0LAD0RES 8051 Cap. 3

bit 7 bit 6 bil 5 biL 4 bit 3 bit 2 bit 1 bit O Valor

posi1ivo o 1 1 1 1 1 1 1 7Fh= l2710


posilivo o .. .• .. .. .. .• ..

posilivo o o o o o o o o OOh = Ot0


negativo 1 1 1 1 1 1 1 l FFh = -l 10
negativo 1 .. .. •

.. .• .• ..

negativo l o o o o o o o 80h = -12810

Escala de nú1neros sinalizados


- 12810 - 12710 ... - 210 - 110 Üto = 80io +110 +210 ••• +12610 +12710
80h 81h ... FEh FFh OOh 01h 02h ... 7Eh 7Fh

Exemplo: Considere que (A) = 20h, (RO) = 0811 e (C) = Ob, execute a
SUBB A,RO.
Solução:
A representação simbólica dessa instrução é:

1 (A)+- (A) - (C) - (RO) =(A)+ [ (RO) + (C) Jc:-2 <=> (C) = not. (C) e (AC) = not (AC) j

Assim:
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit l bit O
(RO) = 08h = 8,o o o o o 1 o o o +
(C) =Ob o
(RO) + (C) = o o o o 1 o o o =08h=8,o
((RO) + (C)]c, l l 1 1 o 1 l l =F7h =-8,o
1 +
l(RO) + (C)k2 11 '1 º1 ºI 1 o o o =F8h =-8rn
(A)= 20h = 3210 o o 1 o o o o o +
(A)+ [(RO) + (C)]c:-2 'O o o 1 1 o o o = 18h = 2410

Complementando o (C) = not (C) = not (1) =O=> (C) = O.


Complementando o (AC)= .n ot (AC)= n.o t (O)= 1 =>(AC)= 1.
Repare que o (C) = O em uma operação de subtração significa que o 1°
operando (20h) é> 2° operando (08h).
O CONJUNTO DE INSTRUÇÕES 53

Auxiliar carry bit flag (AC) ou (PSW.6): após operações aritméticas de


adição ou subtração significa o 'vai um' ou 'vai zero' do bit 3 do valor do
resultado. Após operações lógicas, esse bit é setada (AC)= 1.
Significado do valor do auxiliar carry flag após uma operação de adição
e subtração:
(AC) = O: não é sornado o valor 6 nos quatro bits menos significativos do
resultad.o, em operações de ajuste decimal;
(AC) = 1: é somado o valor 6 nos quatro bits menos significativos do
resultado, em operações de ajuste decimal.

General pitrpose flag (FO) o·u (PSW.5): utilizado para propósito geral.
O usuário pode setar ou reseta.r esse flag por software para sinalizar ou indi-
car alguma condição desejada represe11tando ativado ou desativado, respec-
tivamente.
Register bank select flags (RS1) ou (PSW.4) e (RSO) ou (PSW.3): seletores
dos bancos de registradores (RSl, RSO). Quando RSl e RSO forem iguais a 00,
será selecionado o ba11co O (RO a R7); quando forem iguais a 01, será selecio-
nado o banco 1; quando forem iguais a 10, será selecionado o banco 2 e quan-
do forem iguais a 11 será selecionado o bai1co 3. Somente um banco estará
disponível para o acesso pela CPU dura11te a execução de um programa. Caso
você queira acessai· um banco de registradores diferente do atual é necessá-
rio modificar por software RSl e RSO para outro valor.
Overflow flag (OV) ou (PSW.2): é calculado da seguinte maneira:

(OV) = ('vai 0/1' do bit 7 do resultado) OR-EX ('vai 0/1 ' do bit 6 do resultado)
(OV) = (C) OR-EX ('vai 0/1' do bit 6 do resultado)

Significado do valor de overflow fla.g após uma operação de adição e


subtração:
(OV) = O: o resultado pode ser representado como um número sinaliza-
do - bit 1nais significativo como bit de sinal (O= positivo e 1 = negativo)
e 7 bits que representam o valor. Essa maneira de represe11tação binária
define uma escala de -128 a +127, quando se con sidera 8 bits.

Observação: todo 11úmero negativo é representado em complemento de


dois (e2)·
54 MICROC0NTR0LAD0RES 8051 Cap. 3

(OV) = 1: mostra uma condição de erro, ou seja, o resultado 11ão pode


ser representado como um nú1nero si11alizado. Essa co11dição de erro é
gerada a partir de duas condições após urna operação de adição:
quando são somados dois números positivos, resultando em um
número negativo;
quando são somados dois nú1neros negativos, resultando em um
nú1nero posi tivo.
Um raciocí1uo análogo é co11siderado após a execução de uma operação
de subtração, ou seja:

a) quando é subtraído u1n número negativo de um 11úmero positivo e o


resultado é positivo;
b) quando é subtraído um número positivo de um nú1nero negativo e
o resultado é negativo.
Parity flag (P) ou (PSW.O): chamado de flag de paridade. Sempre reflete a
condição do registrador acumulador (ACC ou A) quanto à quantidade de
11úrn.eros 1 existente no 1nesmo.
(P) = O: se a quantidade de números 1 do conteúdo do ac11mulador for
par (O, 2, 4 ou 6), a paridade (P) será considerada paridade par;
(P) = 1: se a quantidade de números 1 do conteúdo do acumulador for
ímpar (1, 3, 5 ou 7), a paridade (P) será considerada paridade ímpar.
O fla.g de paridade geralmente é utilizado na comunicação serial
assíncrona (recepção e transmissão) de dados, com o objetivo de reduzir o
risco de erros. No Capítulo 8 serão fornecidos todos os detalhes com rela-
ção a esse assunto.

Exemplo: Determinação dos flags de sinalização após a execução de algu-


mas instruções aritméticas, considerando-se as seguintes condi-
- . .. .
çoes llliC1a1s:

(A) = 3Dh; (PSW) = 0011 = 00000000b; (30h) = lFh.


1 - ADD A,30h?

Solução:
A representação simbóJjca dessa ir1strução é:

1 (A)~ (A)+ (30b) 1


O CONJUNTO DE INSTRUÇÕES 55

Assim:
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit I bit O
(A)=3 Dh=6 1,o ºo io l 1 11 11 11 'o 1 +
(30h) = lFh = 31 ,o o o o 1 1 1 1 1
(A) +- (A) + (30h) = ºO 1 o 1 1 1 o o = 5Ch = 9210

Além de o co11teúd o do acumulador 1nudar do valor 3Dl1 para SCh, o


co11teúdo do registrador Progra1n Status Word (PSW) mudará para:

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit o


e
~ ov -
(PS\V) = 1 AC FO RSI p
R O1
o 1 o o o o 1
o 1= 44h

Em que:
(C) = vai 0 do bit 7 do resultado da operação de adição =O.Significa
1 1

que o resultado pode ser representado com 8 bits (resultado = 9210 <
25510).
(AC)= 1vai 11 do bit 3 do resultado da operação de adição= 1. Caso seja
feita uma operação de ajuste decimal, será somado o valor 6 aos 4 bits
m enos significativos, para executar a conversão.
(FO): continua com o valor inicial= O. O flag (FO) não é afetado por essa
instrução.
RS1, RSO = conti11ua com os valores iniciais = 0,0, que não são afetados
por essa instrução. Conti11ua selecionando o primeiro banco de registra-
dores.
(OV) = Çvai O' do bit 7) or-ex Çvai O' do bit 6) = Oor-ex O= O. Significa que
não houve condição de erro na representação numérica do resultado
de11tro da escala de - 128 a +127, pois fora1n somados dois nú1neros po-
sitivos resultando em um número positivo.
(P): quatro números 1 n o resultado da operação de adição = paridade
par= O.
3.2.2 - Modos de endereçamento: existe uma variedade de modos de ende-
reçam ento rápidos p ara acessar as diferentes posições de memória de um
sistema microcontrolado. Os 1nembros da fa1nília de microcontroladores MCS-
51 tê1n cinco modos de endereçain ento diferentes: por registrador, direto,
indireto por registrador, imediato e por registrador-base mais indireto
indexado por registrador. Veja na Tabela 3.2 a relação dos métodos de ende-
reçamento com o espaço de m em ória associado.
56 MICR0C0NTR0LAD0RES 8051 Cap. 3

Tabela 3.2 .Modo de endereçame11to relacionado com o espaçame11to de me1nória.

Modo de endereçamento Operandos (registradores e rncn1ória)


Endereçamento in1ediato Memória de prognuna
Por registrador RO-R7 e
ACC (A), 8, C (carry bit) e DPTR
Direto Os 128 bytes 111enos significativos da RAM interna e
re!!:iStradore~ de funcões esneciais
Indireto por registrador RAM interna (@RO, @R I e SP) e
n1emória de dados externa (@RO, @RI e @DPTR)
Registrador base mais indireto
~ rnemória de programa (@DPTR+A e @PC+A)
indexado por registrador

Observação: quando o registrador acumulador (A) não for um dos argu-


mentos de uma instrução e a mesma apresentar dois diferentes tipos de
endereçamento, obtém-se o chamado endereçamento combinado ou misto e
o tipo de endereçamento dess a instrução será definido pelo
e11dereçamento de ambos. Como exemplo disso, co11sidere a seguinte
instru.ç ão: MOV @R0,30h . Ela apresenta um endereçamento misto, defini-
do pelos dois endereçamentos, ou seja, i11direto ou indexado por regis-
trador e pelo endereçamento direto.

a) Endereçamento por registradores: nesse tipo de endereçame11to, a u1stru-


ção especifica diretamente um dos registradores do banco de registra-
dores selecionado. Essas ins trLt.ções transportain por meio de seu códi-
go de máquina (código-objeto) pelo menos 3 bits correspo11dentes ao
registrador selecionado (de RO a R7). O registrador B, o registrador data
pointer, DPTR; o carry bit, C e o acumulador, ACC, do processador
booleano ta1nbém pode1n ser endereçados como registradores. A seguir,
são for11ecidos alguns exemplos desse tipo de endereçamento.

Exemplo 1: MOV A,Rl

A representação simbólica dessa instrução é: (A)~ (R1).


O significado dessa instrução é: no conteúdo do registrador acu.niulador será
copiado (operação de escrita) o conteúdo do registrador R1.

Exemplo 2: MOV R2,A

A represe11tação simbólica dessa instrução é: (R2) (A) . ~

O significado dessa instrução é: 11.0 conteúdo do registrador R2 será copiado


(operação de escrita) o conteúdo do registrador acumulador.
O CONJUNTO DE INSTRUÇÕES 57

b) Endereçan1e11.to direto: nesse tipo de endereçamento, o operando é especificado por


um campo de endereços de memória RA.Mde8 bits dentro da instrução.Somei1te os
registradores de funções especiais e os 128 bytes menos significativos da RAM inter-
na podem ser endereçados de forma diferente. A seguir, são fornecidos alguns exem-
plos desse tipo de e.11dereçamento.

Exemplo 1: MOV A,30h

A representação simbólica dessa instrução é: (A) f- (30h).


O significado dessa instrução é: no conteúdo do registrador acurnulador será co-
piado (operaçiio de escrita) o conteúdo da posição de 111.emória, cujo endereço é 30h.

Exemplo 2: MOV 7 Ah,A

A representação simbólica dessa instrução é: (7Ah) f- (A).


O significado dessa instrução é: n.o conteúdo da posição de n1en1ória, cujo
endereço é 7Al1, será copiado (operação de escrita) o co11teúdo do registrador
acun1ulador.
c) Endereçamento indireto indexado por registrador: nesse tipo de endereçainento,
a instrução utiliza o conteúdo do registrador RO ou do registrador Rl, do
banco selecionado, como um ponteiro de localização dentro de um bloco
de memória de 256 bytes: 128 bytes menos significativos da memória RAM
interna; 128 bytes mais sigruficativos da 1nemória RAM interna (8032/
8052) ou 256 bytes menos significativos da memória RAM externa.

Os registrad.ores d.e funções especiais não são acessados por esse tipo
de endereçamento. O acesso aos 64 Kbytes de endereçamento de memória
RAM externa é feito por meio do uso do registrador de 16 bits, o data pointer
(DPTR). As instruções de PUSH <direct> e POP <direct> també1n utilizam
esse tipo de endereça1ne11to.
O registrador denomi11ado ponteiro de pilha, Stack Poi11ter (SP), pode
estar em qualquer lugar da RAM interna.
A seguir, são fornecidos alguns exemplos desse tipo de e11dereçamento.

Exemplo 1: MOV A,@RO

A representação simbólica dessa instrução é: (A) f- ((RO)).


O significado dessa instrução é: no conteúdo do registrador acun1ulador será
copiado (operação de escrita) o co11.teúdo da posição de men1ória, cujo endereço
é dado pelo conteúdo do registrador RO.
58 MICR0C0NTR0LAD0RES 8051 Cap. 3

Exemplo 2: MOV @Rl, A


A representação simbólica dessa instrução é: ((Rl)) ~ (A).
O signjficado dessa instrução é: no conteiído da posição de nieniória, cujo
endereço é dado pelo conteúdo do registrador R1, será copiado (operação de
escrita) o conteúdo do registrador acu1nulador.
d) Endereçan1ento imediato: nesse tipo de endereçamento, as consta11tes po-
dem fazer parte da instrução 11a memória de programa. A seguir, são
fornecidos alguns exemplos desse tipo de endereçamento.

Exemplo 1: MOV A,#OAh


A representação simbólica dessa instrução é: (A) ~ #3Ali.
O significado dessa instrução é: o conteúdo do registrador acuniulador será
inicializado (operação de escrita) com o valor constan.te 3Ah.
e) E·ndereçaniento i·ndireto por registrador-base mais o registrador indexado: nes-
se tipo de endereçamento, o byte pode ser acessado a partir da memória
de progra1na, por meio de u1n endereço indireto de uma posição de 1ne-
mória de programa endereçada pela adição de um registrador-base
(DPTR ou PC) e o registrador indexado (A). Esse modo facilita o acesso
a tabelas.
A seguir, são fornecidos alguns exemplos desse tipo de endereçame11to.

Exemplo 1: MOVC @A+DPTR


A representação simbólica dessa instrução é: (A)~ ((A)+ (DPTR) ).
O significado dessa instrução é: no conteúdo do registrador acumulador será
copiado (operação de escrita) o conteúdo da posição de 1nemória de programa
(ROM/EPROM/EEPROM), cujo endereço é dado pela son1a do conteúdo do
registrador acitmulador ACC com o conteiído do registrador data poin.ter, DPTR.
A seguir, são fornecidos alguns exemplos do tipo de endereçamento
combinado (misto).
MOV R0,20h: modo de endereçamento combinado por registrador e
direto;
MOC 30h,R4: modo de endereçamento combinado, direto e por regis-
trador;
MOV Rl,#40h: modo de endereçamento combinado, por registrador e
imediato;
O CONJUNTO DE INSTRUÇÕES 59

MOV 60h,#55h: modo de endereçamento co1nbinado, direto e imediato;


MOV @R1,#33h: modo de endereça1nento combi11ado, indireto ou
indexado por registrador e imediato;
MOV 50h,@R1: modo de endereçamento combinado, direto e i11direto
ou indexado por registrador;
MOV @R0,5011: modo de endereçamento combinado, indireto il1dexado
por registrador e direto;
MOV 40h,50h: modo de endereçamento combinado, direto e direto.
3.2.3 - O conju1ito de instruções da família de microcontroladores MCS-51:
todos os membros da família de rnicrocontroladores MCS-51 executam o
mesmo co11junto de instruções de 8 bits. As instruções que esse
microcontrolador, por meio de seu microprocessador, pode executar são:
operações de transferência de dados, aritméticas, lógicas, booleanas, de salto
inco11dicional, de salto condicional, de cha1nadas a sub-rotinas, de retomo a
sub-rotinas, entre outras.
A - Operações de trarzsferência de dados

a) Da RAM interna: a Tabela 3.3 mostra o conjunto de instruções que estão


disponíveis para n1over dados de11tro da memória RAM interna. Caso
seja utilizado um cristal de 12 MHz, todas essas instruções serão execu-
tadas em lµs ou 2µs.

Tabela 3.3 Operações de transferência de dados da RAM interna.

J.\iloclos de endereçaniento
Ten1po de
Mnemônico Operação Dir. Ind. Reg. Imed. exec. (ps)
MOV A.<src> (A)~ <src> X X X X 1
MOV <dest>, A <dest> ~ (A) X X X 1
MOV
<dest>,<src> <dest> ~ <src> X X X X 2
MOV (DPTR) ~ #data 16
DPTR,#data 16
X 2
PUSH <src> (SP) ~ (SP) + 1, ((SP)) ~ <src> X 2
POP <dest> <dest> ~ ((S P)), (S P) ~ (S P) - 1 X 2
XCH A,<byte> (A) H<byte> X X X l
XCHD A,@Ri (A)3.o H ((Ri))3.o X 1
60 MICROC0NTR0LAD0RES 8051 Cap. 3

b) Da RAM externa: a Tabela 3.4 mostra o corljunto de instruções que es-


tão disponíveis para mover dados para dentro da memória RAM exter-
na de dados. Somente o endereçamento indireto pode ser utilizado. A
única escolha a ser feita é entre utilizar um endereça1n ento de um byte,
@Ri (RO ou Rl do banco selecionado) ou um e11dereçame11to de 16 bits (2
bytes), @DPTR. A desvantagem de utilizar um endereçamento de 2 bytes
pode ser percebida quando é 11ecessário acessar apenas alguns Kbytes
da RAM externa e, dessa maneira, todos os bits da Porta 2 são utiliza-
dos como barrarnento de endereços. Quando se utiliza o endereçamento
de 8 bits, não é necessário 1sacrificar 1 todos os bits da Porta 2. Com um
cristal de 12 MHz, todas as instruções precisam de 2ms para serem
executadas.
Tabela 3.4 Operações de transferência de dados da RAM externa.

l\ilnemônico Operação Largura do cndereçan1ento Ten1po de cxec. (µs)


MOYXA,@Ri (A)~ ((Ri)) 8 bits 2
MOYX @Ri.A ((Ri)) ~ (A) 8 bits 2
MOYX A,@DPTR (A) ~ ((DPTR)) 16 bits 2
M.OYX @DPTR,A ((DPTR)) ~ (A) 16 bits ?
-
Os sinais de controle de leitura e escrita da memória RAM externa são
ativados somente durante a execução da instrução MOVX. Nor1nal1nente,
esses sinais estão inativos e os pi11os podem ser utilizados como lin11as extras
de E/S.
c) Tabelas de procura: a Tabela 3.5 mostra duas instruções disponíveis para a
procura de tabelas na memória de programa. Se o acesso à tabela é feito
por meio da memória de programa externa, então o sinal de controle de
leitura é PSEN\.
Tabela 3.5 Operações de transferência de dad os da ROM.

l\1lnemônico Operação ·rernpo de execução (µs)


MOYCA,@A + DPTR (1-\ ) f.- ((A) + (DPTR)) 2
MOVC A,@A + PC (A) ~ ((A) + (PC)) 2

A primeira instrução da Tabela 3.5 pode acomodar até 256 bytes, nun1e-
rados de Oa FFI1. O número do byte desejado deve ser carregado no conteú-
do do registrador acumulador (A), e o conteúdo do Data Pointer (DPTR) deve
ser inicializado com o e11dereço do início da tabela.
O CONJUNTO DE INSTRUÇÕES 61

A outra instrução utiliza o co11teúdo do Progra1n Counter (PC) co1no o


endereço da tabela-base, e a tabela é acessada por meio de uma sub-rotina.
Em primeiro lugar, deve-se inicializar o conteúdo do acumulador (A) com o
número da entrada desejada e a sub-rotina deve ser ativada. A tabela d.eve
corneçar logo após a instrução RET da sub-rotina e precisa ter, no máximo,
um tamanho de 255 bytes.
MOV A, NUMERODESEJADO
ACALL TABELA
TABELA: MOVC A,@A+PC
RET
B - Operações arít1néticas
A Tabela 3.6 relacio11a as instruções aritméticas disponíveis para a famí-
lia de microcontroladores MCS-51.
Tabela 3.6 Operações aritméticas da família de microco11troladores MCS-51.

Modos de enderecan1ento
Tempo de
11,,f nen1ônico Operação Dir. Ind. Reg. Imed. execução (µs)
ADO A,<byte> (A) f - (A) + <byte> X X X X 1
ADDC A,<byte> (A) f- (A) + <byte> + (C) X X X X 1
S UBB A,<byte> (A) f - (A) • <byte> • (C) X X X X 1
lNC A (A) f- (A)+ 1 Só (A) l
INC<byte> (byte) f - <byte> + l X X X 1
lNC DP TR (DPTR) f- ffiP TR) + 1 Só (DPTR) 2
DECA (A) f- (A) - 1 Só (A) 1
DEC<byte> (byte) f - <byte>· 1 X X X 1
MULAB (B) f - + sign (A *B) Só (A) e (B) 4
(A) f - · sign (A*B)
DIV AB (A) f- int (A/B) Só (A) e (B) 4
(A) f - n1od (A/8)
DAA Ajuste de cima 1 Só (A) 1

C - Operações lógicas
A Tabela 3.7 relaciona as instruções lógicas disponíveis para a família
de microcontroladores MCS-51.
62 MICROC0NTR0LAD0RES 8051 Cap. 3

Tabela 3.7 Operações lógicas da fa1níl ia de microcontroladores MCS-51.


Modos de endereçan1ento
Ternpo de
l\ilnen1ônico Operação Dir. lnd. Rcg. lmed.
cx~ução (µs)
ANL A,<byte> (A)+- (A) and <byte> X X X X 1
ANL <byte>,A <byte>+- <byte> and (A) X 1
ANL <byte>,#data <byte>+- <byte> anel #data X 2
ORL A,<byte> (A) +- (A) or <byte> X X X X 1
ORL <byte >,A <byte> +- <byte > or (A) X 1
ORL <byte>,#data <byte> +- <byte> or #da ta X 2
XRL A,<byte> (A)+- (A) o r-ex <byte> X X X X 1
XRL <byte>,A <byte> +- <byte> or-ex (A) X 1
XR L <byte>,#da ta <byte>+- <byte> or-ex #data X 2
CLR A (A)+- #OOh Só (A) 1
CPLA (A) +- not (A) Só (A) 1
RLA Ro taciona (A) u1n bit para a Só (A) 1
esquerda
RLCA Rotaciona (A) un1 bit para a Só (A) 1
esquerda por rne io do (C)
RR A Rotaciona (A) u1n bit para a Só (A) 1
direita
RRC A Rotaciona (A) un1 bit para a Só (A) 1
direita por n1eio do (C)
SWAP A (A)3.0 H (A)7.4 Só (A) l

D - Operações booleanas
A Tabela 3.8 relaciona as ins tru.ç ões booleanas (operações de somente
um bit) disponíveis para a família de microcontroladores MCS-51.
Tabela 3.8 Operações boolea11as da fa1nília de núcrocontroladores MCS-51.
l\1nernônico Operação Tempo de cx~ução (µs)
ANLC,bit (C) +- (C) and (bit) 2
ANLC,/bit (C) +- (C) anel (not (bit)) 2
ORLC,bit (C) +- (C) or (bit) 2
ORLC,/bit (C) +- (C) or (no t (bit)) 2
MOV C,bit (C) <- (bit) 1
MOV bit,C (bit)+- (C) 2
CLR C (C) +- #O 1
CLR bit (b it)+- #O l
SETBC (C) +-# l l
SETB bit (b it)+- # 1 1
CPLC (C) +- not (C) 1
CPL bit (bit) +- not (bit) 1
JC rei (PC)+- (PC)+ re i, se (C ) = l 2
JNC rei (PC) +- (PC)+ rei, se (C) = o 2
JB rei (PC)+- (PC)+ re i, se (bit) = 1 2
JNB re i (PC)+- (PC) + re i, se (bit)= O 2
JBC re i (PC)+- (PC)+ re i, se (bit) = 1 2
e (bit) +- #O
O CONJUNTO DE INSTRUÇÕES 63

E - Operações de sal to incondicional

O end.ereço de destino dessas instruções é especificado na linguagem


de programação Assembly, por um rótulo (label) ou por um endereço atual
da memória de programa. Entretarlto, o endereço de destino trabalha como
um valor relativo. Ele é um byte sinalizado (representado em complemento
de dois), que é adicionado ao conteúdo do registrador Prograrn Cour1.ter (PC).
A escala de saltos vai de-128 a +127 da memória de programa, relativamente
ao primeiro byte que segue à instrução.
A Tabela 3.9 mostra a lista de i11struções de salto in.condicional.
Tabela 3.9 Operações de salto incondicional da família de microcontroladores MCS-51.

Mnemônico Operação Teo1po de exec. (µs)


SJMP addr Salta para addr (- 128 a+ 127) 2
AJNJP addr Salta para addr (dentro do es paço de - 1024 a +1024) 2
LJMP addr Salta para addr (64K) 3
JNIP @A+DPTR Salta para A+DPTR 2
ACALL addr Cha111a a sub-rotina para o endereço addr (dentro do espaço
de - 1024 a +1024) 2
LCALLaddr Cha1na a sub-rotina para o endereço addr (64K) 3
RET Retorna da sub-rotina 2
RETI Retorna da rotina de atendimento a intern1pção 2
NOP Nenhun1a operação (No operation) 1

F - Operações de salto condicionais

Todas essas instruções usam o endereço de destino relativo e assim são


limitadas a um salto de - 128 a +127 a partir da mesma.
A Tabela 3.10 mostra a lista de instruções de salto condicional.
Tabela 3.10 Operações salto condicior1al da família de microcontroladores MCS-51.

Ivlodos de endereçan1ento
1"lnen1ônico Operação Dir. l nd. Reg. Imcd. Tempo de exec. (µs)
JZ rei (PC) f- (PC) + reL se Só
(A)
2
(A)= O
JNZ rei (PC) f- (PC) + reL se Só
(A) 2
(A) :t; O
DJNZ <byte>, re i <byte> f- <byte> - 1 e
(PC) f- (PC) + reL s e X X 2
(byte) ,t; O
CJNE A.<byte>, rei (PC) f- (PC) + rei,
X X 2
*
se (A) <byte>
CJNE A,#data, rei (PC) f- (PC) + re i,
se (A) * #dara
X X 2
64 MICR0C0NTR0LAD0RES 8051 Cap. 3

Na Tabela 3.11, são 1nostradas todas as i11struções d a família d e


microcontroladores MCS-51.
Tabela 3.11 Conjunto de instruções da família de microcontroladores CS-51.

Operações d e trans fe rên cia d e dados


Instru ção Byte(s) Ciclos C odificação R epresentação sim bólica
( PC) f - (PC) + 1
tvlO\l A,Rn 1 1 111 O I rrr
(A) f - (Rn)
(PC) f - (PC) + 2
MOV A,direcl 2 1 l l 10 010 .1 direct address
(1-\) f- ( direct)
( PC) f - (PC) + 1
tvlOV A,@Ri l l 11100111
(A) f - ((Ri))
(PC) f - (PC) + 2
MOV A,#data 2 1 O111 O100 i1n111cdiatc data
(A) f - #data
(PC) f - (PC) + l
MOV Rn,A 1 1 1111 1rrr
(Rn) f - (A)
(PC) f - (PC) + 2
MOV Rn,direct 2 2 1010 lrrr direct address
(Rn) f - ( direct)
( PC) f - (PC) + 2
l\10 V Rn,#data 2 1 O111 lrrr in1n1cdiate data
(Rn) f- #data
( PC) f - (PC) + 2
MOV d ircct,A 2 1 111I OI OI d ircct addrcss
(direct) f - (A)
( PC) f - (PC)+ 2
t-.10V dircct,Rn 2 2 l 000 Jrrr direct addrcss
(d ircct) f - (Rn)
(PC) f - (PC) + 3
MOV dircct,di rect 3 2 1000 OI O1 dir.adr.src dir.adr.dcst
(dircct) f- (dircct)
( PC) f - (PC) + 2
l\10 V dircct,@ Ri 2 2 1000 011 i di rcct addrcss
( direct) f - ((Ri))
( PC) f - (PC) + 3
MOV d irect,#data 3 2 O11 1 O1OI d ir. adr. irnrned. data
( direct) f - #data
(PC) f - (PC) + 1
MOV @ Rj,A 1 1 11 11 Ol li
((Ri)) f - (f\)
(PC) f - (PC) + 2
f\10V @ Ri,dircct 2 2 1O1O O11 i di rect addrcss
((Ri)) f- ( dircct)
(PC) f - (PC) + 2
MOV @ R i,#data 2 1 O111 O11i itn rn ediate data
((Ri)) f- # data
( PC) f - (PC) + 3
MOV D PT R,#data 16 3 2 1001 0000 inunc. data15.s i1n1nc. data,,0 (DPH) f - #data 1s.s
(DP L) f - #data,.0
( PC) f- (PC) + 1
rv1ovc A,@A+DPTR 1 -
') 1001 0011
(A) f- ((A) + (DPTR))
( PC) f- (PC) + 1
l\10 VC A,@A+PC 1 2 1000 00 11
(A) f- ((A) + (PC))
( PC) f - (PC) + 1
rvtovx 1\,@Ri 1 2 11 1O 00 1i
(A) f - ((Ri))
O CONJUNTO DE INSTRUÇÕES 65

Tabela 3.11 Conjunto de instruções da família de microcontroladores CS-51. (Co11ti1111ação)

Oper ações de tra nsferência d e d ad os

Instru ção B yte(s) Ciclos Codificação R ep resen tação simbólica


(PC) f - ( PC) + 1
~10VX A,@DPTR 1 2 111 O 0000
(A) f - ((DPTR))
(PC) f - (PC) + 1
MOVX @Ri,A 1 2 1111 OOOi
((Ri)) f - (A)
(PC) f - (PC) + l
MO\'X @ DPTR,A 1 2 1111 0000
((DPTR)) f - (A)
(PC) f - (PC) + 2
PUSH dircct 2 2 1l 00 0000 di rcct address (SP) f - (SP) + 1
((SP)) f - (direct)
(PC) f - (PC) + 2
POP direct 2 2 11 O1 0000 direct address (direct) f - ((SP))
(SP) f - (SP) - 1
(PC) f - (PC) + 1
XCH A,Rn 1 1 1100 1nT
(A) r (Rn)
(PC) f- (PC) + 2
XCH A,dircct 2 1 1100 OI OI di rcct addrcss
(A) f- (dircct)

(PC) f - (PC)+ l
XCH A,@Ri 1 1 1100 O11 i
(A) r ((Rn))
(PC) f - (PC) + 1
XCHDA,@Ri 1 J ll010lli
(A 3_0 ) f - ((Rn 3~ 1))

O per ações aritméticas

Instru ção Byte(s) C iclos Codificação Representação s io1 bólica


(PC) f - (PC) + 1
ADD A,Rn J 1 001 O 1rrr
(A) f - (A)+ (Rn)
(PC) f - (PC) + 2
ADO A,dircct 2 1 0010 0101 dircct addrcss
(A) f - (A) + (dircct)
(PC) f - (PC) + 1
ADDA,@ Ri 1 1 001 O O11 I
(A) f - (A) + ((Ri))
(PC) f - (PC) + 2
ADO A,#data 2 1 0010 0100 immcdiatedata
(A) f - (A) + #data
(PC) f - (PC) + 1
ADDCA,Rn 1 1 0011 l rrr
(A) f - (A)+ (C) + (Rn)
(PC) f - (PC) + 2
ADDC A,dircct 2 1 001 1 OI OI dircct addrcss
(A) f - (A) + (C) + (dircct)
(PC) f - (PC) + 1
ADDCA,@Ri 1 1 0011 O11 I
(A) f - (A) + (C) + ((Ri))
(PC) f - (PC) + 2
ADDC A,#data 2 l 0011 0100 immcdiate data
(A) f - (A) + (C) + #data
(PC) f - (PC) + 1
SUBB A,Rn 1 1 1001 1rrr
(A) f - (A) - (C) - (Rn)
66 MICR0C0NTR0LAD0RES 8051 Cap. 3

Tabela 3.11 Conjunto de instruções da família de microcontroladores CS-51. (Co11ti1111açâo)

Operações aritn1éticas
Instrução Bytc(s) Ciclo Codificação Representação simbólica
(PC) ~ (PC) + 2
SUBB A,direcl 2 1 l 00 J Ol OJ direct addrcss
(A)~ (A) - (C) - (direcl)
(PC) ~ (PC) + 1
SUBBA,@Ri 1 1 1001 OIOi
(A) ~ (A) - (C) - ((Ri))
(PC)~ (PC)+ 2
SUBB A,#data 2 1 100 l O100 in1n1ediatc data
(A) ~ (A) - (C) - #data
(PC) ~ (PC) + 1
INCA 1 1 0000 0100
(A)~ (A) + 1
(PC) ~ (PC) + l
INC Rn 1 1 0000 1rrr
(Rn) ~ (Rn) + 1
(PC) ~ (PC) + 2
INC dircct 2 1 0000 O1O1 dircct addrcss
(dircct) ~ (ditcct) + 1
(PC) ~ (PC) + 1
INC @Ri 1 l 0000 01 li
((Ri)) ~ ((Ri)) + 1
(PC) ~ (PC) + 1
INC DPTR 1 2 101 O 0011
(DPTR) ~ (DPTR) + l
(PC)~ (PC)+ 1
DECA 1 1 0001 0010
(A)~ (A) - 1
(PC) ~ (PC) + 1
DECRn 1 1 0001 1rrr
(Rn) ~ (Rn) - 1
(PC) ~ (PC) + 2
DEC direct 2 1 000 1 O1OI di rect address
(direct) ~ (ditecl) - 1
(PC) ~ (PC) + 1
DEC @Ri 1 1 0001 O11 i
((Ri))~ ((Ri)) - 1
(PC) ~ (PC) + 1
M ULAS 1 4 1OIOO100 (A)~ 8 bits - significativos
(B) ~ 8 bits + significativos
(PC) ~ (PC) + 1
DIVAB 1 4 1000 0100 (A) ~ quocienle
(B) ~ resto
(PC) ~ (PC) + 1
1°) lf {[(A3 --0) > 9] OR (,~C)= I
DAA 1 1 11 O1 OI 00 } thcn (A3 _ <J~ (A3 _0) + 6;
2°) lf {[(A,_4)>9] OR (C)=l
} then (A 7_4) ~ (A 7....) + 6;
O CONJUNTO DE INSTRUÇÕES 67

Tabela 3.11 Conjunto de instruções da familia de microcontroladores CS-51. (Co11ti11uação)


Operações lógicas
Inst r ução Bytc(s) Ciclos Codi fi cação Representação simbólica
(PC) E-(PC) + 1
ANLA,Rn 1 1 0101 lm
(A) f- (A) and (Rn)
(PC)E-(PC)+2
ANLA,direct 2 1 01010101 direciaddress
(A) E-(A) and (direx:t)
(PC) E-(PC) + 1
ANLA,@Ri 1 1 0101011]
(A) t-(A) and ((Ri))
(PC) E-(PC) +2
ANLA,#data 2 1 OI OI O100 i1nnlCdiatcdata
(A)E-(A)and#data
(PC) f-(PC)+ 2
ANLdircct,A 2 1 OI O1001 Odirect address
(dircct) E-(dilt'Cl)and (A)
ANLdill'Ct,#data 3 2 OI O10011dircct addrcss (PC)E-(PC)+3
à1uncd data (dircd)t-(dircd)arrl#dala
(PC) E-(PC)+ 1
ORLA,Rn 1 1 0100 lm
(A)E-(A)or(Rn)
(PC) E-(PC)+ 2
ORLA,diroct 2 1 01000101 dilt'CI address
(A) E-(A) or(dircct)
(PC)E-(PC)+ 1
ORLA,@Ri 1 1 01000111
(A) t-(A) or ((Ri))
(PC) t-(PC) +2
ORLA,#data 2 1 O1000100 inunaliatedata
(A) t-(A) or #data
(PC) E-(PC) +2
ORLdilt'Ct,,'\ 2 1 O100001 Odircct addrcss
(dircct) <- (dircct) or (A)
ORL direci,#data 3 2 O1000011 dircct addrcss (PC)E-(PC)+ 3
inm:tldaia (diroct) E-(diroct) or#data
(PC) E-(PC)-1 1
XRLA,Rn 1 1 Ol!Olm
(A) t-(A)or-ex(Rn)
(PC) E-(PC) +2
XRL1\,dircct 2 1 O11OO1O1dircct addrcss
(A) f-(A)or-cx (dircct)
(PC) t-(PC) + 1
XRLA,@Ri 1 1 OIIOO!li
(A) t-(A) or-cx ((Ri))
(PC) E-(PC)+2
XRLA,#data 2 1 Ol lOOIOOnnnxx!ialedata
(A) t-(A)or-cx #data
(PC) t-(PC) +2
XRLdiTCCt,A 2 1 Ol lOOOIOdircctaddrcss
(dml)f-(dired)or-cx (A)
XRLdiroct;ffdata 3 2 O1100011 direct address (PC) E-(PC)+3
irruncd dala (dircct) ~ (dircct) or-cx#data
(PC) E-(PC) + 1
CLRA J 1 11100100
(A)E-OOh
(PC) E-(PC) ~ 1
CPLA 1 1 11110100
(A)t-not(A)
(PC)t-(PC)+ 1
RLA 1 1 00100011
(An+ 1)E-(An)11'n=Oa6
(AJE-(f\)
(PC)E-(PC)+ 1
RLCA 1 1 00110011 (An+l)t-(An)1ín=Oa6
(AJt-(C)c(C)E-(f\)
68 MICROCONTROLADORES 8051 Cap. 3

Tabela 3.11 Conjunto de instr uções da fa mília de microcontroladores CS-51. (Continuação)

Operações lógicas
Instr ução Byte(s) Ciclos Codificação R epresentação sin1bólica
(PC) f - (PC) + 1
RRA 1 l 0000 0011 (An) f- (An+ l) p/ n = O a 6
(Ao) f - (A1)
(PC) f- (PC) + 1
RRCA 1 1 0001 00 11 (An) f- (An+ I) p/ n = O a 6
(A 7) f- (C) e (C) f- (A.0)
(PC) f- (PC) + 1
SWAP .A. 1 1 1100 O100
(Ao-3) ~ (A 1"")

J\lla ni pulação de variáveis booleanas


Instrução Byte(s) Ciclos Codificação Representação sin1bólica
(PC) f - (PC) + 1
CLRC 1 1 1100 00 11
(C) f - Ob
(PC) f - (PC) + 2
CLR bit 2 1 1100001 O bit address
(bit) f - Ob
(PC) f - (PC) + 1
SETB C 1 1 11O1 00 11
(C) f- # 1
(PC) f- (PC) + 2
SETB bit 2 1 11O1 001 1 bit address
(bit) f- #1
(PC) f - (PC) + 1
CPLC 1 1 l O11 00 11
(C) f - not (C)
(PC) f - (PC) + 2
CPL bit 2 1 l 011 00 1O
(bit) f- not (bit)
(PC) f - (PC) + 2
ANL C,bit 2 2 1000 0010 bit address
(C) f- (C) and (bit)
(PC) f - (PC) + 2
ANL C,/bit 2 2 1000 0000 bit address
(C) f- (C) and (not (bit))
(PC) f - (PC) + 2
ORL C,bit 2 2 011 1 0010 bit address
(C) f - (C) or (bit)
(PC) f- (PC) + 2
ORL C,/bit 2 2 l OI O 0000 bit address
(C) f- (C) or (not (bit))
(PC) f - (PC) + 2
MOV C, bit 2 1 1Ol O 00 JO bit address
(C) f - (bit)
(PC) f-- (PC) + 2
MOV bit, C 2 2 1001 001 O bit address
(bit) f- (C)
(PC) f- (PC) + 2
JC rei 2 2 O100 0000 rei address If (C) = l then
(PC) f- (PC) + rei
(PC) f - (PC) + 2
JNC rei 2 2 OI Ol 0000 rei address lf (C) = O thcn
(PC) f- (PC) + rei
O CONJUNTO DE INSTRUÇÕES 69

Tabela 3.11 Cortjw1to de instruções da fai1úlia de rnicrocontroladores CS-51. (Continuaçâo)


i\il anipulação de variáveis booleanas
Instrução Bytc(s) Ciclos Codificação {cprcscntação simbólica
(PC) (- (PC) + 3
JB bit, rei 3 2 001O 0000 bit address rei address I f (bit) = 1 then
(PC) (- (PC) + re i
(PC) (- (PC) + 3
JNB bit, rei 3 2 00 11 0000 bit address rei address If (bit) = O then
(PC) (- (PC) + rei
(PC) (- (PC) + 3
.I BC bit, rei 3 2 0001 0000 bit addrcss rei addrcss lf (bit) = 1 tbcn (bit) (- O
(PC) (- (PC) + rei}

Instruções ele salto


Instrução Byte(s) Ciclos Codificação Representação si111bólica
(PC) (- (PC) + 2
(SP) (- (SP) + 1
((SP)) (- (PC7-<,)
ACA LL addr 11 2 2 a 10 ª9ªs 1 0001 aia6aSa4 ª3ª2ª, ªº (SP (- (SP) + J
((SP)) (- (PC 1,_8)
(PC) (- add r11
(PC) (- (PC) + 3
(SP) (- (SP) + 1
((SP)) (- (PC7-u)
LCALL add r 16 3 3 0001 001 O addr 15_s add r7--0
(SP (- (SP) + 1
((SP)) (- (PCIS-S)
(PC) (- addr 16
(PC) (- (PC) + 1
(PC 15_6) ( - ((SP))
RET 1 2 001 O 00 1O (SP) (- (SP) - 1
(PC7_o) (- ((SP))
(SP (- (SP) - 1
(PC) (- (PC) + 1
(PCIS-S) (- ((SP))
RETI 1 2 001 1 00 1O (SP) (- (SP) - 1
(PC7_o) (- ((SP))
(SP (- (SP) - 1
(PC) (- (PC) + 2
AJ 1'1P addr 11 2 2 ª10 ª9ªs O 000 1 ª1 ... ªº (PC 10_0) ( - addr11
LJMP add r 11, 3 2 0000 001 O addr 15_0 addr7--0 (PC) (- addr,s..o
(PC) (- (PC) + 2
SJMP rei 2 2 1000 000 rei address
(PC) (- (PC) + rei
JMP @A+DPTR 1 2 O111 00 11 (PC) (- (A) + (DPTR)
(PC) (- (PC) + 2
JZ rei 2 2 O11 O 0000 rei add ress lf (A) = O then
(PC) (- (PC) + rei
70 MICROC0NTR0LAD0RES 8051 Cap. 3

Tabela 3.11 Conjunto de instruções da fam ília de ini.crocontroladores CS-5 l. (Co111i11uação)

Instruções de salto
Instrução Byte(s) Ciclos Codificação Representação simbólica
(PC) t- ( PC) + 2
JNZ rei 2 2 O11 1 0000 rei address lf (A) ' O then
(PC) t- (PC) + rei
(PC) t- (PC)+J
IF (A) 1 ( direct) then
CJNE A,direet, rei 3 2 1O1 1 OI OI direet addrcss (PC) f- (PC) + rei
rei addrcss 1F (A) < (dircct) then (C) f- 1
cise (C) f- O
(PC) t- (PC) + 3
1
IF (A) #data then
CJNE A,#data, rei 3 2 1O1 1 O100 itnmed. address (PC) f- (PC) + rei
rei address IF (A) < #data then (C) f- 1
else (C) f- O
(PC) t- (PC) + 3
IF (Rn) #data then
1

CJNE Rn,#data, rei 3 2 1OI l l rrr i111111cd. address (PC) t- (PC) + rei
rei address IF (Rn) < #data then (C) f - 1
cise (C) f- O
(PC) t- ( PC) + 3
IF ((Ri)) ' #data then
CJNE @Ri ,#data,rel 3 2 1OJ J OJ li imn1ed. address (PC) t- (PC) + rei
rei address lF ((Ri)) < #data then (C) f- 1
cise (C) f - O
(PC) t- (PC) + 2
DJNZ Rn,rel 2 2 1 1O1 1rrr rei address (Rn) f- (Rn) - 1
IF (Rn) O then
(PC) t- (PC) + rei
(PC) t-(PC) + 3
DJNZ direct,rel 3 2 11 OI OI O direct address ( direet) f- ( direct) - 1
rei address IF (dircet) O then
(PC) f- (PC) + rei
NOP 1 1 0000 0000 (PC) t- (PC) + 1

Exercícios resolvidos
1 - A partir das condições iniciais dadas a seguir, execute (processe)
teoricamente as instruções, mostrando os registradores e as posições
de memória que são afetados pelo processamento de tais instruções e
justifique o resultado obtido, considerando as escalas de Oa 255 e de
- 128 a +127:
(A) = A6h; (PSW) = 9Al1; (PC) = 1000h; (20h) = 2Eh; (21h) = 70h; (22h) = 6Bh;
(23h) = SAh; (24h) = 49h; (25h) = 38h; (2611) = 27h; (RO) = 37h; (Rl) = 3411;
(R2) = FBh; (R3) = 59h; (R4) = 4Eh; (RS) = 72h; (R6) = 3Ch; (R7) = 81h.
O CONJUNTO DE INSTRUÇÕES 71

a) ADDC A,2l h;
Solução: observando-se a Tabela 3.11, verif ica-se que essa instr ução apre-
senta um endereçamento direto. Assim, pode-se obter as seguintes in-
formações:
(PC) ~ (PC) + 2
ADDC A,direct 2 1 00110101 directaddress
(A) ~ (A)+ (C) + (direct)

Sua representação simbólica é dada por:

(PC) f- (PC) + 2 O conteúdo do registrador Program Counter (PC)


é adicion.a do de duas unid.ades (aponta para o
endereço de memória de programa da próxima
instrução a ser executada pela CPU).
(A) f- (A)+ (C) +(direct) Armazenará, no conteúdo do registrador acu-
mulador, o resultado da operação de adição
entre o co11teúdo do registrador acumulador A,
o conteúdo do carry bit flag e o conteúdo da po-
sição de memória cujo endereço é 20h.
Assim, as condições iniciais dos registradores são:
(A) = A6l1; (C) = 1, pois o conteúdo do registrador de função espe-
cial PSW é igual a 9Ah, como indicado a seguir:

bit 7 bit 6 bit 5 Bit 4 bit 3 bit 2 bit 1 bit O


e AC FO RSl RSO ov - p
(PSW)=9Ah= 1 o o 1 1 o o 1

E o conteúdo da posição de memória cujo endereço 21h é igual a 7Dh.


Portanto:

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit J bit O


(A)= A6h = 166 10 'J 'O 'l 'O 'O 'I l 1 o +
(2th) = 7Dh = 125,0 o l I l I 1 o l
(C) = 1, pois I
(A)(,- (A)+ (C) + (21h) = 'O o L o o 1 o o = 24h = 36,.

Além de o conteúdo do acumulador mudar do valor A6l1 para 36h


pela Tabela 3.5, o conteúdo do registrador Prograni Status Word (PSW),
por meio dos bits (C), (OV) e (AC) também muda para:
72 MICROCONTROLADORES 8051 Cap. 3

(C) = foi um do bit 7 = 1. O resultado não pode ser armazenado em


8 bits.
(AC) = foi um do bit 3 = 1.
(FO) = não é alterado por essa operação e permanece com o estado
anterior = O.
(RS1) = não é alterado por essa operação e permanece com o estado
anterior = 1.
(RSO) = não é alterado por essa operação e permanece com o estado
ai1terior = 1. A composição dos dois bits define o banco 3 de registra-
dores (RO - endereço de memória 17h ~ R7 - endereço de memória
lFh).
(OV) = (foi um do bit 7) OR-EX (foi um do bit 6) = 1 OR-EX 1 = O.
Está na faixa de - 128 a +127.
(P) = reflete a quantidade de números 1 contidos no conteúdo do
acumulador A, que é igual a dois (2) = paridade par = O.

Assim, o co11teúdo do registrador PSW fica sendo:


bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit l bit O

(PSW) = ==~==l:=A=1c==:I=FO=o==:I=R=f=1=:I=R=~=º=:I=º=ov==:I==~=====~=:! =D&h


:1

Justificativa do resultado encontrado, considerando-se a escala de O


a 255:

(A) = A6h = 166 10


(C) = != + 1,o +
(2l b)= 7Db= 125 10 (C)
1
24h = 292'° - J. [62 + 2. 16 1 + 4.16° > 25510

Justificativa do resultado encontrado, considerando-se a escala de -


128 a +127:

Como o conteúdo do registrador A é igual a A6h = 1010 0110b' esse


número é negativo, pois apresenta seu bit mais significativo igual a 1 e
está representado em complemento de dois. Sendo assim, consideran-
do-se o valor do conteúdo do registrador A na escala de - 128 a +127:
O CONJUNTO DE INSTRUÇÕES 73

(A)= A6b = 1010 0110


(A)c1 = 59b = O1O1 100 l +
1h = 1.
5Ah = 0101 1010 - - (5. 161 + 10.16°) = - 90io (menos noventa)na escala de- 128 a +127

Assim, o resultado da adição de tais registradores é:

(A) = A6b= - 9010


(C) = I= + 110 +
(2 1h) = 7Dh = + 12510
1
24h = 3610 - 2. 161 + 4.16º < 127 ( dentro da escala de - 128 a +l27 ~ (OV) = O)

2 - Defina o tipo de endereçamento de cada uma das instruções dadas a



segutr:
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.
3 - Crie um programa que faça a operação DR-Exclusivo entre o conteú-
do do acumulador (A) e a constante 33h. O resultado deve ser ar-
mazenado no co11teúdo do registrador RS do segundo banco de re-
gistradores.
Solução: XRL A,#33h (A) ~ (A) or-ex #33h
MOV PSW,#08h (PSW) ~ #08h = # 0000 1000 => (RS1) = O
e (RSO) = 1 => define
segu.n do banco de registradores (Bl)
MOV RS,A Armazena, no conteúdo do registrador
RS do segundo banco de registradores,
o conteúdo do acumulador A.
74 MICROC0NTR0LAD0RES 8051 Cap. 3

Exercícios e questões propostos


1 - Defina o registrador de função especial Program Statu.s Word (PSW),
bem como todos os seus bits e descreva a finalidade de cada um
deles.
2 -A partir das condições iniciais oferecidas a seguir, execute (processe)
teoricamente as instruções, mostrando os registradores e as posições
de memória afetados pelo processamento de tais instruções:
(A) = E7h; (PSW) = BCh; (20h) = 2Fh; (2111) = 7Eh; (22h) = 8Ch; (23h) =
5Bh; (24h) = 6Ah; (25h) = 39h; (26h) = 4Ch; (RO) = 26h; (Rl ) = 22h; (R2) =
Elh; (R3) = 7Dh; (R4) = 8Ch; (R5) = 7Bh; (R6) = 6Ah; (R7) = 59h.

a) ADDCA,21h
b) SUBBA,20h
c) ADDA,22h
d) ANLA,#23h
e) ORLA,26h
f) INCA
g) DECA
h) SWAPA
i) MULAB
j) DIV AB
k) RRA
1) RLCA
m) MOV @Rl,A
n) ADDC A,@Rl
o) SUBB A,@RO
p) XCHD A,@RO

3 - Defina os diferentes modos de endereçamento das instruções do item 2.


4 - Defina os tipos de endereçamento de cada uma das instruções mos-
tradas a seguir:
O CONJUNTO DE INSTRUÇÕES 75

a) ADDC A,20h
b) SUBB A,@RO
c) ADDA,#23h
d) ANLA,24h
e) ORLA,25h
f) INCA
g) DECA
h) SWAPA
i) MULAB
j) DIVAB
k) RRA
1) RLCA
m) MOV @Rl,A
n) ADDC A,@Rl
o) SUBB A,@RO
p) XCHDA,@RO
q) MOV 20H,R6
5 - Considerando as condições iniciais do Exercício l, calcule o conteúdo
do registrador Program Counter (PC) para as seguintes instruções:

Endereco Mnemônico Arl!'umento(s) (PC)= ?


0142h MOV 23h,@R l
0208h LlMP 30h
0319h DJNZ RO, OFAh

6 - Crie um programa que adicione o conteúdo do acumulador (A) à


constante ACh e que armazene o resultado no conteúdo da posição
de memória, cujo endereço é 4Bh.
7 - Crie um programa que execute a operação lógica AND dos conteú-
dos: do acumulador A, da posição de memória cujo endereço é dado
pelo conteúdo do registrador Rl e do registrador R5. Armazene o
resultado no conteúdo do registrador Rl do terceiro banco de regis-
tradores.
76 MICROCONTROLADORES 8051 Cap. 3

8 -Crie um programa que faça a operação lógica OR-EX dos conteú-


dos: da posição de memória cujo endereço é 78h e da posição de
memória cujo endereço é 57h. O resultado deve ser armazenado no
conteúdo do registrador R3 do segundo banco de registradores.
9 - Crie um programa que execute a rotação de um bit do conteúdo da
posição de memória cujo endereço é 26h. O resultado deve ser soma-
do com o ca.rry bit flag e com o conteúdo da posição de memória cujo
endereço é 44h. Com o resultado, faça uma operação lógica OR-EX
com a constante 7Dh. O resultado deve ser armazenado 110 conteúdo
da posição de memória cujo endereço é 48h.
capítulo
FLUXOGRAMA E PROGRAMACÃO, EM
AsSEMBLY, APLICADOS À FAMÍLIA
DE MICROCONTROLADORES
MCS-51 DA INTEL

4.1 Objetivos
•!• Estratégias de elaboração de programas em Assembly
•!• Fluxogramas de programas simples e programas com loop
•!• Exemplos de programas simples e com loop

4.2 lntroducão

teórica
Este capítulo é de fundamental importância para quem deseja adquirir co-
nhecimentos básicos e1n progra1nação (software). Aqui, é e11sinado passo a
passo o procedi1nento da elaboração de programas simples e co1n loop, utili-
zando a linguagem Assembly aplicada aos microcontroladores da família
M CS-51 da Intel.
Uma vez que o leitor aprenda e pratique as técnicas de programação
ensinadas neste capítulo, ele poderá aplicar tal metodologia de implementação
de programas a qualquer outra linguage1n de programação, seja ela de bai-
xo, 1nédio ou alto nivel.
Existem muitas linguagens de programação que podem ser utilizadas
na programação de sistemas inteligentes, utilizando microcontroladores, além
do Asse1nbly (nível baixo), tais co1no as linguage11s estruturadas de progra-
mação C (nível médio), BASIC e PL/M (nível alto). A escoll1a de uma delas
na elaboração de um projeto de software é 1nuito importante e envolve o
conhecimento técnico especializado.
A característica de uma lin.g uage.m de nível baixo, como o Assembly, é a
de apresentar o mesmo conjunto de instruções que aquele definido pelo fa-
bricante da família de microprocessadores ou microcontroladores, com a qual
78 MICROC0NTR0LAD0RES 8051 Cap. 4

se deseja desenvolver os projetos de programa. Isso permite um total contro-


le sobre os registradores inter11os do dispositivo e as posições de memória e,
conseqüentemente, são gerados progra1nas muito mais compactos em rela-
ção às outras linguagens. Assim, sempre que existirem li1nitações de memó-
ria (pouca memória) e limitações de velocidade de processamento (máxima
velocidade de processamento), recomenda-se a utilização da linguagem de
programação de nível baixo, ou seja, o Assembly. Portanto, pelas próprias
características dos microcontroladores, é muito comum a utilização do
Assembly na elaboração de projetos de equipamentos inteligentes. Em
co11trapartida, a única desvai1tage1n da linguagem Assembly e1n relação às
outras linguagens é sua característica de ser rica em detall1es, solicitando dos
programadores um co1u1ecimento basta11te grande sobre o dispositivo a ser
prograinado.
A característica de uma linguagem de nível médio, como o C, é a de
apresentar os aspectos de uma linguage1n de 1úvel baixo (manipulação bit a
bit ou byte a byte dos registradores internos e das posições de memória),
como tainbém as características de ttma linguagem de 11ível alto, que defini-
mos a seguir. Atualmente, essa é uma das li11guage11s de progra1nação mais
utilizadas em projetos de equipame11tos inteligentes.
A característica de uma linguagem de nível alto é a de ser muito 1nais
próxitna da linguagem do ser humano. Trata-se de uma linguagem descriti-
va, cujas it1struções são palavras escritas em inglês e que estão muito longe
das .i nstruçõ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. Pro-
gramar utilizando uma linguagem de nível alto é muito mais fácil que pro-
gramar com uma linguage.m de nível baixo ou médio. Mas qu.ando se utiliza
uma linguagem de programação de nível alto, são gerados programas maio-
res e com menor velocidade de processamento. Outra desvantage1n da lin-
guagem de nível alto, que muitas vezes é interpretada como vantage1n, é a
de não exigir do programador o conhecimento completo e detalhado do dis-
positivo que se deseja programar.
Um programa em código de máquina (código-objeto) ,
é composto por
bytes que representam as instruções do dispositivo. E a linguagem que o
microcontrolador sabe e pode executar. Assim, sempre que for desenvolvido
um programa em uma determinada linguagem de programação, é necessá-
rio fazer a con1pilação desse programa para transformá-lo em linguage1n de
máquina. O programa em linguagem de máq11i11a deve ser simulado por 1neio
de um simulador (AVS1M5l, Pinnacle etc.) ou gravado em uma me1nória
FLUXOGRAi\i\A E PROGRAN\AÇÃO EM ASSEMBLY 79

para verificar seu funcio11amento por 1neio da utilização do próprio hardware


do produto.
A seguir, injcia-se o estudo das técrucas de programação em Assembly
para a família de .1nicrocontroladores MCS-51 da Intel.
4.2.1- Estratégias de elaboração de programas: é muito i1nportai1te para um
progra1nador, a11tes de implementar um programa, seguir uma determinada
metodologia. A seguir, é descrita uma m etod.ologia de elaboração de progra-
mas que é independente da linguage1n de programação.
A - Pré-requisitos do técnico que desenvolverá o projeto

a) conhecer a estrutura interna (hardware) do dispositivo com que se de-


seja dese11volver o projeto;
b) conhecer o conjunto de instruções do dispositivo.

B - Viabilidade do projeto
a) obter e entender claramente as especificações do cliente (desejos do cli-
ente, características do produto e do sistema, modo de fu11cio.n amento
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.;
c) Elaborar a viabilidade do projeto com relação ao hardware e ao software
para verificar a possibilidade de sua i1nplementação junto ao clie11te.
Algun1as perguntas são utilizadas para garantir a viabilidade do projeto:
Quais são as necessidades de l1ardware? Qual será o custo final do pro-
duto (o clie11te pagará por esse valor)? Qual será a quantidade de equi-
pamentos a ser fabricada (a fábrica comporta essa quantidade)? Como
serão feitas as entregas do produto? Existem fornecedores de compo-
11entes no Brasil? Quais componentes devem ser importados? Existem
concorrentes? etc.;
d) Escolher a m elhor solução junto com o cliente, ou seja, aquela que utili-
zará o menor número de compone11tes e a que apresenta 1naior veloci-
dade de processamento. Isso afeta diretainente o custo final do hardware
e traz uma maior flexibilidade funcional do produto.
80 MICR0C0NTR0LAD0RES 8051 Cap. 4

C - ln1plen1entação do projeto

a) elaborar o fluxograma do programa em Assembly: os fluxogra.m as de-


vem ser implementados desde o nível de 1macrodetalhamento' até o ní-
vel de 1microdetalhamerlto1. Um fluxograma representando o nível de
1macrodetalhame11to1deve co11ter as idéias e os objetivos de11tro dos blo-
cos representativos. Um fluxograma representa11do o nível de
1microdetalhamento1 deve utilizar as representações simbólicas dos
1n·nemônicos das instruções dentro dos blocos representativos. Exemplo:
de11tro de u1u bloco do fluxograma, representar (A) f - (B): significa a
instrução MOV A,B;
b) a partir do fluxograma, gerar o programa-fonte na li11guagem de pro-
gramação escolhida (arquivo em código ASCII que contém as instru-
ções que compõem o programa);
c) compilar o programa-fo11te para gerar o arquivo binário que correspon-
de ao programa e1u códigos de máquina;
d) fazer a Z.inkage1n dos arquivos binários para agrupar, de maneira organi-
zada, 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 o
l1ardware do prodt1to;
f) realizar a gravação da EPROM, inserção no hardware do produto e teste
físico de sua funcionalidade;
g) efetuar a emulação do programa (é necessário um siste1na emulador)
para corrigir erros de lógica ou eventuais fall1as de algum compo11ente,
utiliza11do o próprio hardware do produto;
h) fazer testes rápidos de bancada para verificar o funcionamento do pro-
duto final;
i) realizar testes de longa duração (confiabilidade), em co11d.ições de 1es-
tresse1, para a homologação do produto.
4.2.2 - Fl11xogramas: essa ferramenta de programação é fundame11tal para a,
implementação de qualquer roti11a de um programa de microco1uputador. E
por meio dessa ferramenta que se pode observar como foi i1nplementada 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.
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 81

Neste livro, serão utilizados ape11as quatro símbolos básicos para are-
presentação de um fluxograma: a linha de conexão, a elipse, o retângulo e o
losango. A seguir, são definidos cada um dos blocos integrantes de um fluxo-
grama.
a) Línl-za de conexão: representa
,
o fluxo de informações a ser processado pelo
microprocessador. E ta1nbém utilizado para conectar os blocos básicos
de um fluxograma. As setas para cima (t), para baixo (J,), para o lado
direito (~) e para o lado esquerdo (~) são empregadas para esse fim.
b) Elipse: representa o início e o fim do programa. Quando utilizada no,
início do programa, deve conter o nome da rotina em seu interior. E
i1nportantíssimo que esse nome sempre esteja associado ao seu objetivo
ou à sua função. Isso facilita o entendimento e a consu lta à documenta-
ção do programa. Por exemplo, para uma rotina que lê as teclas de um
teclado, um possível 11ome seria 'Ler teclado', como mostra a Figttra 4.1.

Ler teclado

Figura 4.1 Represerttação, por meio de u111a elipse, do i1úcio de um progra1na chamado
'Ler teclado'.

Quando a elipse for utilizada no fim da rotina, deve-se escrever 'FIM e o


nome da rotina', con10 mostra a Figura 4.2.

Fim da rotina Ler teclado

Figura 4.2 Representação, por meio de uma elipse, do fim de tnn progran1a chan1ado
'Ler teclado'.

c) Retângulo: representa o processamento das i11formações, ou seja, as ope-


rações de mov imentação de dados e endereços, as operações aritméti-
cas, lógicas e de rotação. Um exe1nplo é 1nostrado 11a Figura 4.3.

(A) ~ (A) + (B)


(RI)~ (RI)+ I

Fi~ura 4.3 Representação do processame11to de informações por 1neio de um retfu1gulo.


82 MICROCONTROLADORES 8051 Cap. 4

d) Losan.go: representa uma tomada de decisão. Isso é feito por 1neio de um


teste comparativo da informação que está disponível no conteúdo de
um bit de u1n registrador ou de uma posição de 1ne1nória com um deter-
minado valor. Se a condição for satisfeita, será definido um. determina-
do caminho para que a irlformação seja processada; caso contrário, será
defi.nido outro caminho para que a informação seja processada. A Figu-
ra 4.4 exemplifica duas maneiras de representação de tornada de deci-
são utilizadas em um losango.

sim não sim


(C) = 1? (A)= O?

não

Figura 4.4 Representações de blocos de ton1ada de decisão por meio de um losango.

4.2.3 - Programas simples: o fluxograma de uma rotina de um programa sim-


ples (Figura 4.5) sempre deve conter, no mínimo, cinco blocos básicos:

Nome do programa

'•
Definição das condições iniciais

'•
Processamento

'
Definição da saída do resultado

'

Fim do programa

Figura 4.5 Representação típica de um fluxograma de uma rotina de um programa


sin1ples.
FLUXOGRAl\i\A E PROGRAJ\i\AÇÃO EM ASSEMBLY 83

1 - Um primeiro bloco deve co11ter o no1ne do programa associado ao seu


objetivo ou a sua função (elipse).
2 - Um segu11do bloco deve conter as condições iniciais dos bits, dos regis-
tradores e das posições de memória que serão utilizados pelo progra-
ma. Esses bits, registradores e posições de memória terão uma f11nção
bastante específica dentro do programa e pod.erão ser considerados
como variáveis de entrada do program.a. As condições iniciais devem
ser representadas dentro de um retâ11gulo.
3 - Um terceiro bloco faz o processamento da informação, que pode ser
realizado por meio de operações de movi1nentação de informações, de
operações arit1néticas e lógicas, de rotação etc., que devem ser repre-
se11tadas dentro de u1n retângulo.
4 - Um quarto bloco deve definir onde será armazenada a informação re-
sultante do processamento. Esse armazenamento poderá ser feito em
um registrador, em uma posição de rne1nória ou em urna unidade de
entrada e saída. Deve1n ser represe11tadas dentro de um retângulo.
5 - Um último bloco deve simbolizar o fitn do programa (elipse).
4.2.4 - Programas com loop: um possível fluxograma de um programa com
loop (Figura 4.6) deve sempre conter no mínimo oito blocos básicos:
1 - Um primeiro bloco deve conter o nome do programa, que sempre deve
estar associado ao seu objetivo ou a sua fu11ção (elipse).
2 - Um segundo bloco deve conter as condições iniciais dos bits, dos regis-
tradores ou das posições de memória e, agora, também das itúorma-
ções do buffer de memória de dados a serem analisados. Um buffer de
memória de dados é o local no qual são armazenadas as infor1nações
que serão processadas. A característica de um buffer de memória de
dados é que as informações estão armazenadas em posições de memó-
ria subseqüentes, ou seja, em e11dereços de memória subseqüentes.
Geralmente, pode-se definir matematicamente um buffer de memória
de três diferentes maneiras:
por meio de seu endereço inicial e fi11al;
por meio de seu endereço inicial e da quantidade de ele1nentos do
buffer de memória;
por meio da quantidade de eleme11tos do buffer de memória e de seu
endereço final.
84 MICROC0NTR0LAD0RES 8051 Cap. 4

As condições iniciais deve1n ser represe11tadas de11tro de um retângulo.

Nome do programa

Definição das condições iniciais

Processamento

Bloco de tomada de sim: a condição foi satisfeita


decisão (?). Teste de
uma variável

não: a condição não foi satisfeita

Se o teste for falso:


processamento de certas
informações (toma-se decisão)

sim: ainda existem


elementos a serem
processados

Controle do loop?

--..--- não: todos os elementos do


buffer foram recessados

Definição da saída do resultado

Fim do programa

Fi~ura 4.6 Representação típica de um fluxograrna de uma rotina d e um programa corn


loop.

3 - Um terceiro bloco terá a função de processar a informação. Esse proces-


samento é feito basicamente por meio de uma operação de movimenta-
ção entre registradores e posições de memória, e1n combinação com
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 85

operações aritméticas e lógicas. Ao fazer u1na operação aritmética ou


lógica utilizando a ULA, 110 caso dos microcontroladores da família
MCS-51, sabe-se que o registrador de função especial Prograni Status
Word (PSW) também é influenciado por n1eio de seus bits de sinaliza-
ção carry bit (C), auxili.ar carry bit (AC), overflow (OV) e parity (paridade)
(P). Assi1n, esse bloco define a condição matemática ou lógica do pro-
grama por 1neio do conteúdo do registrador de função especial PSW.
Esse bloco deve ser representado dentro de um retângulo.
4 - Um quarto bloco, o d.e tomad.a de decisão. Esse bloco é responsável
pelo teste da condição 1natemática ou lógica do programa definida 110
bloco anterior. Esse teste pode consistir na verificação dos bits de sina-
lização carry bit (C), au.xiliar carry bit (AC), overflow (OV) e parity (pari-
dade) (P) do registrador de fu11ção especial PSW, da condição matemá-
tica ou lógica do conteúdo do registrador acumulador (A), da co.n dição
lógica de bits de registradores de funções especiais endereçáveis por
bit ou de posições de memória etc. Caso a condição seja satisfeita (ver-
dadeira), será definido um caminho de processamento da i11formação a
ser executado pelo microprocessador; caso contrário, será definido um
outro caminho de processamento de informação. O teste deve serre-
presentado dentro de um losru1go.
5 - Um quinto bloco co11terá as instruções que devem ser executadas quando
a condição do item 4 não for satisfeita.
6 - Um sexto bloco fará o controle do loop, verificando se todas as infor-
mações do buffer foram processad.as (analisadas). Geralmente, isso é
feito de duas maneiras, dependendo de como se deseja controlar o buffer
de memória:
a) quando o buffer de memória é controlado pela sua posição inicial e
por sua quantidade de elementos, o co11trole é feito apontando para
a próxima posição do buffer de mem.ória e d imi11u.in.do a quantida-
de de eleme11tos a serem analisados, cada vez que for processada
uma informação do buffer. Quando a quru1tidade de elementos do
buffer de memória for diferente de zero, o caminho de processa-
mento será desviado para o início do processamento do programa
(para o item 3) e, dessa maneira, será realizado um novo processa-
mento com o próximo conteúdo da posição de memória do buffer
(outro elemento do buffer d.e memória). Caso a quantidad.e de ele-
mentos do buffer a serem analisados seja igual a zero, isso significa
dizer que todos os elementos do buffer já fora1n processados, que o
processa1ne11to será encerrado;
86 MICR0C0NTR0LAD0RES 8051 Cap. 4

b) Qua11do o buffer de 1nemória é controlado pela sua posição inicial e


pela sua posição final, o controle é feito apontando-se para a próxiina
posição do buffer de memória, cada vez que uma informação for pro-
cessada, e deve-se comparar tal end.e reço com. o endereço final do
buffer, adicionado d.e uma unidade. Enquanto o endereço da últi1na
infor1nação analisada pelo programa é diferente do e11dereço fi11al
adicionado de uma unidade, o caminho de processa1nento é desvia-
do para o início do processamento (para o item 3) e, dessa maneira,
será feito um novo processamento co1n o próxi1no conteúdo da posi-
ção de me1nória do buffer. Caso o endereço da última informação
analisada pelo prograina seja igual ao endereço final do buffer adi-
cio11ado de uma unidade, o processamento será encerrado.
7 - Um sétimo bloco deve defmir onde será armazenada a i11for1nação re-
sultante do processamento. Essa infor1nação poderá ser armazenada
em um registrador, em uma posição de memória ou em uma urtidade
de e11trada e saída.
8 - Um último bloco deve si1nbolizar o fim do programa.
4.2.5 - Exemplo de programa simples: fazer um fluxogra1na e um programa-
fonte em Assembly para o microcontrolador 8051, que sejam capazes de rea-
lizar a operação de adição entre 2 bytes que estão localizados nos co11teúdos
das posições de memória, cujos endereços são 4511 e 5Al1. O resultado da
operação de adição deve ser armazenado no conteúdo da posição de memó-
ria, cujo endereço é 6Dh.
SoliLção: em primeiro lugar, é necessário ente11der perfeitamente o que está
sendo solicitado. Um desenl10 em forma de rascu11ho (Figura 4.7) é un1a
ferramenta importante, 11esse caso.
RAM Interna
Endereço Conteúdo

45h XXh
+
5Ah YYh '

6Dh ''

Figura 4. 7 Deserlho e1n forma de rascu11ho para ajudar 110 e11tendimento do que está
sendo solicitado.
FLUXOGRAi\i\A E PROGRAN\AÇÃO EM ASSEMBLY 87

Depois disso, é necessário montar a estratégia de solução do proble1na,


o que exige verificar quais são as it1struções capazes de fazer a operação de
adição. Verifique na Tabela 3.11, do Capítulo 3, o conjunto de instruções da
fa1nília de microcontroladores MCS-51, para obter quatro instruções que rea-
liza1n a operação de ad i.ção:
1 - ADD A,Rn => (A) f-- (A) + (Ri.1): no conteúdo do acumulador será arma-
zenado o resultado da operação de adição entre o conteúdo do acumula-
dor e o conteúdo do registrador RO.
Estratégia de solução: repare que a instrução dada a11teriormente utiliza dois
registradores para fazer uma operação de adição: o conteúdo do regis-
trador acumulador A e o co11teúdo de um dos registradores de um dos
bancos selecionados (RO a R7). Dessa maneira, para itnplementar um
programa utilizando essa instrução, é necessário realizar duas opera-
ções de movi1nentação de informações, da memória para o acumulador
e da memória para u1n registrador, antes de executar essa instrução.
Assim, transferindo o conteúdo da posição de memória, cujo endereço é
45h, para o conteúdo do acumulador A (MOV A,45h), e do conteúdo da
posição de memória, cujo endereço é 5Ah, para o conteúdo do registra-
dor RO, por exemplo (MOV RO, 5Ah), pode-se executar a i11strução ADD
A,RO. Como o resultado da operação de adição fica armazenado no con-
teúdo do acumulador (A), ele deve ser armazenado no conteúdo da po-
sição de memória, cujo endereço é 6Dh (MOV 6Dh, A). O fluxograma e
o programa-fonte são apresentados na Figura 4.8.

Soma
Programa-fonte

(A) <- (45h) MOV A ,45h


(RO) ~ (5Ah) MOV R0,5Ah
(A) <- (A) + (RO) ADD A,RO
(6Dh) ~ (A) MOV 6Dh,A

Fim

Fi~ura 4.8 Programa d e adição usando a instrução ADD A,Rn.

2 - ADD A,direct => (A) f-- (A) + (direct): no conteúdo do act1mulador será
armazenado o resultado da operação de adição entre o conteúdo do acu-
mulador e o conteúd.o da posição de memória, cujo endereço é dírect.
88 MICROC0NTR0LAD0RES 8051 Cap. 4

Estratégia de solução: repare novamente que o conteúdo do acumulador A é


um dos registradores e11volvidos nessa instrução e o outro argu1nento é
o conteúdo de uma posição de memória definido por endereçamento
direto. Assim, para resolver esse problema utilizando essa instrução, é
t1ecessário fazer apenas uma operação de movime11tação de iJlforma-
ção, isto é, do conteúdo da posição de memória, cujo endereço é 45h,
para o conteúdo do acumulador A (MOV A,45h). Após isso, basta utili-
zar a i11strução dada anteriormente, definindo 5Ah como direct (argu-
mento da instrução), ou seja, ADD A,5Al1. Como o resultado fica ar1naze-
nado 110 conteúdo do acumulador A, ele deve ser armazenado no co11teú-
do da posição de memória, cujo endereço é 6Dl1. (MOV 6Dh, A). O fluxo-
gra1na e o programa-fonte são apresentados na Figura 4.9.

Soma
Programa-fonte

(A) <- (45h) MOV A,45h


(A) <- (A) + (5Ah) ADO A,5Ah

(6Dh) <- (A) MOV 6Dh,A

Fim

Figura 4.9 Programa de adiçã.o usand.o a it1strução ADD A,direct.

3 - ADD A,@Ri =>(A)~ (A) + ((Ri)): no conteúdo do acumulador, será ar-


mazenado o resultado da operação de adição entre o conteúdo do acu-
m.ulador e o conteúdo da posição de memória, cujo endereço é dado pelo
conteúdo do registrador RO.
Estratégia de solução: 11ovamente, o co11teúdo do registrador acumulad.or é
um dos argumentos da i11strução, e o outro é dado por um endereçamento
indireto ou indexado por registrador. Para criar o programa utilizando
essa i11strução, são necessárias duas operações de movimentação de in-
formação, isto é, uma do conteúdo da posição de memória, cujo endere-
ço é 45h, para o conteí1do do acum.ulador A (MOV A,45h), e a outra
consiste em inicializar o conteúdo do registrador RO, por exe1nplo, com
o valor do endereço da memória 5Ah (MOV RO, #5Ah). Após isso, basta
fazer a operação de adição utilizat1do a instrução ADD A,@RO. Como o
resultado é armaze11ado no conteúdo do acu1nulador A, ele deve ser
annaze11ado n.o co11teúdo da posição de memória cujo e11dereço é 6Dh
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 89

(MOV 6Dl1,A). O f111xograma e o programa-fonte são apresentados 11a


Figura 4.10.

Soma
Programa-fonte

(A) ~ (45h) MOV A,45h


(RO) ~ #5Ah MOV R0,#5Ah
(A) ~ (A) + ((RO)) -1-----+ ADDA,@RO
(6Dh) ~ (A) MOV 6Dh,A

Fim

Figura 4.10 Programa de adição usand.o a ir,strução ADD A,@Ri.


4 - ADD A, #data. => (A) f- (A) + #data: no conteúdo do acumulador será
armaze11ado o resultado da operação de adição entre o conteúdo do acu-
mulador e a constante data.
Estratégia de solução: não há solução, pois não é possível saber o conteúdo de
uma das posições de memória, ou seja, essa posição de memória simula
uma variável e, dessa maneira, utilizando essa instrução, não é possível
resolver esse problema.
Conclusões:
a) Embora existam quatro tipos de instruções de adição (ADD) diferentes,
l1á somente três soluções;
b) A melhor solução, entre as apresentadas anteriormente, é aquela que
utiliza a instrução de adição co1n endereçamento direto (ADD A,direct),
pois o programa fin.a l em Assembly só utiliza três instruções e as demais
soluções utilizam quatro n1struções. Isso resulta em um menor gasto de
memória de programa e em uma maior velocidade de processamento
que as demais, preservan.do, assim, a melhor relação custo/benefício;
e) Sempre é preciso escoll1er a mell1or solução (solução ótin1a). Isso signifi-
ca escoll1er aquela que utiliza menos posições de memória de programa
e que, geralmente, é a mais rápida. Essa é a função principal do enge-
rlheiro projetista de software. O resultado é um produto mais barato e
eficaz quanto à sua fu11cionalidade.
90 MICR0C0NTR0LAD0RES 8051 Cap. 4

4.2.6 - Exemplo de programa com loop: fazer um fluxograma e um programa-


fonte em Assembly, para um membro da fa1nília de microcontroladores MCS-
51, que calculem a quantidade de números me11ores que 3811 de um buffer de
memória que va i do endereço de me1nória 6011 até o 7Ah. A quantidade de
elementos menores que 3811 deve ser armazenada no conteúdo da posição de
memória cujo endereço é 7Bh.
Solução: existem muitas ma.n eiras de resolver esse problema. Uma delas será
apresentada a seguir.
Observe que se o problema for resolvido por meio de um programa
seqüencial serão utilizadas muitas instruções de progra1na e, conseqüente-
me.n te, serão empregadas muitas posições d.e memória de progra1na, pois
existem, no buffer de memória, 7Ah- 60h + 1 = lBh = 2710 eleme11tos a serem
analisados. Assim, é inviável a solução do proble1na por esse método para
que seja preservada a relação custo/benefício. A solução que se emprega,
nesse caso, é a que utiliza um programa com loop. Para solucionar o proble-
ma será utilizado o fluxograma com loop, sugerido na seção anterior.
Em primeiro lugar, é necessário entender perfeitamente o que está sen-
do solicitado. Um desenho em forma de rascunl10 (Figura 4.11) representa de
maneira bastante simplificada o que o programa está pedindo.

RAM Interna
Endereço Conteúdo

endereço inicial - - ~ 60h XXh 1Bh elementos


.. . a serem
.. analisados

7Ah YYh
7Bh qte. de nr.,s < 38h
', ' .
Fl$1ura 4.11 Dese1u10 em forma de rascunho para ajudar 110 e11tendimento do que está
se11do solicitado.

Seguindo o fluxograma com loop, n.e cessitamos preencl1er cada um de


seus blocos.
Nome do progranta: quai1tidade de números < 38h.
Condições iniciais: definições das variáveis do programa, que são:
controles do buffer de memória:
FLUXOGRAl\i\A E PROGRM\AÇÃO EM ASSEMBLY 91

os endereços do buffer de memória serão controlados por m.e io


do registrador RO. Ele é inicializado com o valor 6011, que é o
endereço inicial do buffer de memória;
a quantidade de ele1nentos do buffer de memória será controla-
da por 1neio do registrador Rl. Ele é inicializado co1n o valor
1Bh.
definição de um contador, cujo valor inicial é zero. Toda vez que for
analisado u1n elemento do buffer de memória e isso resultar em um
nú1nero me11or que 38h, esse contador deverá ser adicionado de uma
u11idade. Como contador, adota-se o conteúdo da posição de memó-
ria cujo endereço é 7Bl1 por co11ve11iência, visto que foi solicitado
que a quantidade de ele1nentos menores que 38h fosse armazenada
.-
nessa pos1çao.
Processa.111ento, teste e to1nada de decisão: essa etapa consiste em definir a
estratégia de solução do problema. Uma possível estratégia é analisar
cada conteúdo de posição do buffer de memória e fazer uma compara-
ção com o valor 38h. A operação de comparação é feita por meio de
u1na operação de subtração e pelo teste de flag carry bit. Como foi visto
110 Capítulo 3, após uma operação de subtração, o flag carry bit sinaliza
se um número é maior ou igual (:2:) ou menor (<) que outro. Aprovei-
tando essa i11for1nação, elabora-se a estratégia de solução para o pro-
blema. Assim, se após a operação de subtração do conteúdo da posi-
ção de 1nemória de um ele1nento do buffer com o valor 38h resultar
um valor O no conteúdo do flag carry bit, isso sigrufica que o conteúdo
da posição de memória é maior ou igual (:2:) a 38h e, dessa maneira,
não se deve adicionar 1 ao contador de números 1ne11ores que 38h (7Bh).
Caso resulte o valor 1 no conteúdo do flag carry bit, isso significa que o
conteúdo da posição de memória é menor(<) que 3811 e, dessa manei-
ra, é 11ecessário adicionar 1 ao co11tador de números me11ores que 38h
(7Bl1).
A ú11ica operação de subtração que existe para essa família de
microco11troladores e que é capaz de fazer a subtração de uma determinada
constante é a iI1strução SUBB A,#data ~ (A) ~ (A) - (C) - #3811, na qual o
registrador acumulador A é um de seus argumentos. Assitn, antes de
executar uma operação d.e subtração, é necessário trazer um. elemento
do conteúdo do buffer de memória para o conteúdo do acumulador A.
Em programas com loop, recome11da-se utilizar o endereça1nento indi-
reto ou i11dexado por registrador, ou seja, por meio da utilização da
92 MICR0C0NTR0LAD0RES 8051 Cap. 4

instrução MOV A,@Ri =>(A)~ ((Ri)), ai1tes do processamento da ope-


ração de subtração. Esse tipo de endereçame11to facilita a obte11ção do
próximo ele1ne11to do buffer. Isso é feito utilizando u1na instrução para
adicionar uma unidade ao conteúdo do registrador Ri (RO ou Rl).
Repare, também, em um detalhe bastante importante: a instrução que faz
a operação de subtração [SUBB A,#data =>(A)~ (A)- (C)- #38h] também
utiliza o conteúdo do flag carry bit como argumento. Assim, é necessá-
rio 'zerar' esse flag (C) antes que a i11strução de subtração seja executa-
da, para que o resultado não seja influenciado pelo flag.
Controle do loop: é preciso ajustar as variáveis de controle do buffer de
m.e mória para que seja possível analisar os próximos eleme11tos do
buffer de memória. Como foi visto, a estratégia de solução (trazer
o conteúdo do buffer de memória para o conteúdo do acumulador,
'zerar' o fiag carry bit, fazer a operação de subtração, testar o con-
teúdo do flag carry bit e adicjonar ou não 1 ao contador, dependen-
do se for menor que 38h ou não) deve ser feita para todos os con-
teúdos das posições de memória do buffer. Dessa 1naneira, para
fazer o ajuste das variáveis que controlam o buffer d.e m.e mória,
tem-se:
toda vez que for processado um elemento do buffer, deve-se adicio-
nar uma unidade ao conteúdo do registrador que controla os
endereçame11tos do buffer (RO), para que o próximo eleme11to do
buffer seja anal isado no loop segui11te;
deve-se verificar também se todos os elem entos do buff er fora1n
analisados. Isso é feito decrementa11do-se uma unidade ao conteú-
do do registrador que conté1n a quantidade de elementos do buffer
de memória (Rl) e verificar se ele é igual a zero. Se não for igual a
zero, deve-se desviar o fluxo de programa para a parte do proces-
samento para que se repita a análise, agora, com esse 11ovo elemen-
to do buffer. Caso seja igual a zero, o processa1nento deve ser fina-
lizado, pois isso si11aliza que todos os elementos do buffer foram
analisados.
Definição da saída do progra1na: já especificada armazenada no conteúdo
da posição de memória, cujo endereço é 7Bh. Esse bloco 11ão é necessá-
.
rio.
Fin1: fim do p rograma.
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 93

A seguir é apresentado o fluxogra1na que calcula a qua11tidade de 11ú-


meros me11ores que 3811 e o programa-fonte em Assembly.

Num< 38h

(RO f- #60h
(R1) f-.#1Bh
(7BH) f - #OOh

(C) f- #Ob
(A) f - ((RO))
(A) f - (A) - (C) - #38h

s (C) =O?
[(A) > #38h?]

(7Bh) f- (7Bh) + 1

(RO) f- (RO) + 1

Fim
94 MICROC0NTR0LAD0RES 8051 Cap. 4

Inicio do programa que calcula a quantidade de ele1nentos < #38h


l\t[OV R0,#60h ;Endereço inicial do buffcr de 1nemória
1\110V Rl ,#lBh ;Quantidade de elc1ncntos do buffer de n1cn1ória
l\tlOV 7Bh,#OO ;'Zera' o contador que arn1azcna a quantidade de nún1cros < #38h
ADR2: CLR C ;Limpa o conteúdo do carry bit
l\t[OV A,@ RO ;Annazcna no (A) u1n cle1nento do buffer
SUBB A,#38h ;Subtrai o (A) da constante #38h e define o flag (C)
J NC ADRI ;Sc(C)=O (A>=#38h)=> (PC)=ADRI [nãoson1aun1no (7Ah))
INC 78h ;Se (C) = 1 (A<#38h), soma u1n no (7Bh)
ADR 1: INC RO ;Aponta para a próxi1na posição de 1nemória a ser analisada
DJNZ RI ,ADR2 ;Se a quantidade de eleincntos a scren1 analisados for ;t O, então
;'salta' para ADR2
END ;Termina o progra1na se (RI) = O.

Exercícios resolvidos
1 - Faça um fluxograma e um programa-fonte, em Assembly, para um
membro da família de microcontroladores MCS-51, que executem a
operação de adição entre os conteúdos dos registradores RO e R3 e o
conteúdo da posição de memória cujo endereço é 55h. O resultado
deve ser armazenado no conteúdo do registrador R6 do segundo
banco de registradores.
Resposta: a solução é apresentada na Figura 4.13.

Soma
Programa-fonte

(A) t- (RO) MOV A,RO


(A) t- (A) + (R3) ADO A,R3
(A) t- (A) + (55h) ADO A,55h
(PSW) t- (#08h) MOV PSW,#08h
(R6) t- (A) MOV R6,A

Fim

FIQura 4.13 Solução do Exercício 1.

2 - Faça um fluxograma e um programa-fonte, em Assembly, para o


microcontrolador 8051, que calculem a quantidade de números
ímpares e apresentem o bit 4 igual a Ode um buffer de memória
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 95

que vai do endereço 65h até o endereço 73h. O resultado deve ser
ar1nazenado no conteúdo da posição de memória cujo endereço é
SAh.
Solução: Um número ímpar é aquele em que o bit menos significativo é
igual a 1.
A solução é apresentada a seguir.

Ímpares e bit 4 :::; O

(RO) +-#65h
(R1) ~ #OFh
(5AH) +- #OOh

(A)~ ((RO))

s
(ACC.O) :::; O?
[É par?)

N
s

(5Ah)+-(5Ah) + 1

(RO)+-(RO) + 1

s
(R1) ~ (R1)-1
*
(R1) O?

Fim
96 MICR0C0NTR0LAD0RES 8051 Cap. 4

Início do progra1na que calcnla a quantidade de elementos ín1pares e apresenta o bit 4 igual a O.
MOV R0,#65h ;Endereço inicial do buffer
MOV R 1,#0Fh ;Quantidade de elen1entos do buffer
MOV 5Ah,#00 ;'Zera' o conteúdo da posição de men1ória que armazena a
;quantidade de números ín1pares e apresenta o bit 4 = O
ADR2: MOV A@RO ;Armazena no (A) um elc1nento do buffer
JNB ACC.O,ADRl ;Se (ACC.O) = O(par)::::} (PC)= ADRl [não soma um ao (5Ab)]
JB A.CC.4,ADRI ;Se (ACC.4) = l :::;>(PC)= ADRI [não sou1a um ao (5Ab)]
TNC 5Ah ;Adiciona un1a unidade ao contador (5Ah)
ADRI: INC RO ;Aponta para a próxin1a posição de memória do buffer
DJNZ Rl ,ADR2 ;Se a quantidade de ele1neutos a seren1 analisados for"# O,
;então 'salta' para ADR2
END ;Tennina o progra1na, se (Rl) = O

Exercícios e questões propostos


1 - Faça um fluxograma e um programa-fonte, emAssembly, para o 8031,
que executem a operação de subtração entre 2 bytes localizados nos
conteúdos das posições de memória cujos endereços são 5Fh e 7Ch.
O resultado deve ser armazenado t10 conteúdo do registrador R5 do
último banco de registradores.
2 - Modificar o programa do item 1 para executar uma operação lógica
OR-EX entre tais conteúdos.
3 - Modificar o programa do item 1 para executar uma operação lógica
ANO entre tais conteúdos.
4 - Modificar o programa do item 1, considerando os co11teúdos das po-
sições de memória cujos endereços são 44h e 8Dl1.
5 - Faça um fl uxograma e um programa-fon te, em Assembly, para o
microcontrolador 8051, que executem a operação de adição com carry
bit entre 2 bytes. O primeiro byte está localizado no conteúdo do re-
gistrador R3 do terceiro banco de registradores, e o outro byte está
localizado no conteúdo da posição de memória cujo endereço é 3811.
O resultado deve ser armaze11ado no conteúdo do registrador R2 do
segundo banco de registradores.
6 - Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8051, que façam uma operação lógica OR-Exclusi-
vo entre o conteúdo da posição de memória cujo endereço é 25h e o
conteúdo do registrador R5 do penúltimo banco de registradores. O
resultado obtido deve ser multiplicado por 4, adicionado ao valor 37h
FLUXOGRAl\i\A E PROGRAJ\i\AÇÃO EM ASSEMBLY 97

e divid.ido por 8 e depois deve ser armazenado no conteúdo do registra-


dor Rl do antepenúltimo banco de registradores.
7 - Considerando o progra1na que calculava a quantidade de números
menores que 3811, modifique-o, da forma que o buffer de memória foi
modificado. Agora, ele vai do endereço 3Fh até a posição de memória
cujo endereço é 6Cl1.

8 - Considerando o programa que calculava a quantidade de números


menores que 38h, modifique-o de maneira que ele deva armazenar o
resultado no conteúdo do registrador B.
9 - Considerand.o o programa que calculava a qu.a ntidade de números
menores que 38h, modifique-o, de maneira que ele calcule a quanti-
dade de núm.e ros maiores que 6Ch.
10 - Considerando o programa que calculava a quantidade de números
menores que 38h, modifique-o de maneira que ele calcule a quanti-
dade de números ímpares.
11 - Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8051, que calculem a quarltidade de números pares
de um buffer que vai do endereço 56h até 6Dh. O resultado deve ser
armazenado no conteúdo da posição de memória cujo endereço é 5Ah.
12 - Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8051, que calculem a quantidade de números posi-
tivos de um buffer que vai do endereço 36h ao 74h. O resultado deve
ser armazenado no conteúdo da posição de memória cujo endereço é
lBh.
13 - Faça um fluxograma e um programa-fonte., em Assembly, para o
microcontrolador 8051, que calculem a quantidade de números 11ega-
tivos de um buffer que vai do endereço 59h até 71h. O resultado deve
ser armazenado no conteúdo da posição de memória cujo endereço é
4Fh.
14 -Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8031, que calcule a quantidade de números que apre-
sentam paridade ímpar de um buffer de memória que vai do endere-
ço 2Eh até 64h. O resultado deve ser armazenado no conteúdo da
posição de memória cujo endereço é 12h.
98 MICR0C0NTR0LAD0RES 8051 Cap. 4

15 - Faça um fluxograma e um programa-fonte, em Assembly, para o micro-


controlador 8051, que calculem a quantidade de números que apresen-
tam paridade par e sejam diferentes de 56h, de um buffer que vai do
endereço 49h até 71h. O resultado deve ser armazenado no conteúdo
da posição de memória cujo endereço é 79h.
16 - Faça um fluxograma e um programa-fonte, em Assembly, para o mi-
crocontrolador 8051, que calculem a quantidade de números diferen-
tes de zero que apresentem o bit 5 igual a um e que sejam negativos,
de um buffer de memória que vai do endereço 2Bh até 39h. O resulta-
do deve ser arm.a zenado no conteúdo da posição de memória cujo
endereço é 6Fh.
17 - Resolva o Exercício 16 utilizando a instrução CJNE para fazer o con-
trole do loop. Compare a solução obtida agora com a solução ante-
rior do Exercício 16 e diga qual delas é a 1nell1or quanto ao gasto de
m.e mória de programa e à velocidade de processame.nto.
18 - Fa.ça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8031, que transformem o buffer de memória do
Exercício 17 em números negativos, somente para aqueles elemen-
tos do buffer que apresentem o bit 5 igual a Oou sejam negativos.
19 -Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8051, que transformem o buffer de m.e mória d.o
Exercício 17 em números ímpares, somente para aqueles elementos
que apresentem paridade ímpar, apresentem o bit 1 igual a 1 e sejam
menores que 44h.
20 - Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8031, que transformem o buffer de memória do Exer-
cício 17num buffer de memória em que os elementos ímpares e posi-
tivos devam ser substituídos pelos seus valores multiplicados por 32.
21 - Faça um fluxograma e um programa-fonte, em Assembly, para o
microcontrolador 8051, que copiem o conteúdo do buffer de memó-
ria do Exercício 17 para um buffer de memória cujo endereço inicial
seja 4Ah.
FLUXOGRAl\i\A E PROGRAN\AÇÃO EM ASSEMBLY 99

22 - Faça um fluxograma e um programa-fonte, em Assembly, para o mi-


crocontrolador 8031 que façam a operação lógica OR-EX dos elemen-
tos do buffer de memória do Exercício 17. O resultado deve ser arma-
zenado no conteúdo do registrador RO do primeiro banco de registra-
dores.
23 - Faça a operação de subtração entre dois buffers de memória. O
primeiro buffer de memória começa no endereço 13h e termina no
endereço 2Ah. O endereço inicial do segundo buffer de memória é
34h. O resultado deve ser colocado em um buffer de memória cujo
endereço inicial seja 56h.
capítulo
Sue-ROTINAS E Es I RLm.JRACÃO
, DA
LINGUAGEM DE PROGRAMACÃO ,
AsSEMBLY

5.1 Objetivos
•:• Defi nição e princípio de funcionamento de sub-rotina
•:• Definição de pilha (LIFO) e fila (FIFO)
•:• As instruções que trabalham com a pilha (PUSH, POP, ACALL,
LCALL, RET e RETI)
•:• Estruturação da linguagem de programação Assembly
•:• Exemplos de programas estruturados com sub-rotinas, aplicados à
família de microcontroladores MCS-51 da Intel

5.2 lntroducão

teórica
Este capítulo completa o estudo de programação iniciado no Capítulo 4.
O software i1nplementado de maneira estruturada, por meio da utiliza-
ção de sub-roti11as, apresenta as seguintes características:
é extremamente compacto e flexível, obte11do-se alto desempenho e boa
relação custo/benefício;
é modular e, conseqüentemente, de fácil implementação, simulação, teste
e manu tençã;
as sub-rotinas podem ser colocadas em bibliotecas e aproveitadas para
a implementação de novos produtos que utilizam tecnologia similar,
reduzindo, assim, o tempo de dese11volvimento.
Dessa forma, este capítulo é muito importante para o leitor, pois e11sina-
rá as técnicas de progra1nação estruturada, utilizando-se a li11guagem de pro-
gramação Assembly, aplicadas à família de nucrocontroladores MCS-51 da
102 MICROC0NTR0LAD0RES 8051 Cap. 5

Ii1tel para a implementação de projetos profissionais de software de alto de-


sempenl10 e boa relação custo/benefício.
A seguir, são apresentadas algumas defi11ições extremamente importan-
tes para o desenvolvimento deste capitulo.
5.2.1 - Definição de sub-rotina: é um conjunto de instruções com caracterís-
ticas específicas. As sub-rotinas devem ser alocadas em uma área de me-
mória d.e programa separada da área de memória do programa principal.
Assim, sempre que se discutir sub-rotina, pode-se pensar em uma estrutu-
ra de programa que tem, pelo me11os, d u.as áreas de memória. A primeira
área de 1nemória de progra1na contém as sub-rotinas e a segunda contém o
cl1amado programa principal, que deve conter instruções específicas em
conjunto, principalmente, com as instruções de chamadas às sub-rotinas
que, 110 caso da família de microcontroladores MCS-51 da Intel são as iI1s-
truções ACALL eridereço inicial da sub-roti.na e LCALL endereço i11icial da sub-
rotí11a.
Uma sub-rotina se origina se1npre que ela for utilizada mais que uma
vez ao longo de um programa. Para exemplificar, considere que é necessário
resolver um.a expressão matemática várias vezes em um programa. Essa fun-
ção matemática é constituída por diversos códigos de máquiI1a (1nnetnônicos).
Repare que cada vez que era necessário utilizá-la, era preciso reescrevê-la, o
que aumentava co11sideravelme11te o tamanl10 do progra1na. Quanto 1nais
essa sub-rotii1a era utilizada, maior era o progran1a e, co11seqüentemente,
uma grande quantidade de memória de programa era necessária. Dessa ma-
neira, a relação custo /benefício do projeto de software acabava ficando bas-
tante alta e.m term.os de hardware, co1no 1nostramos a seguir.

Programa principal:
instrução 1

instrução N
rotina que calcula un1a expressão 1natcrnátiea (ta1nanho de 60 bytes, por cxe1nplo)
instrução N+ 1

instrução M
rotina que calcula un1a expressão matemática (tarnanho de 60 bytes, por exemplo)
instrução M

instrução O
rotina que calcula u111a expressão 111aten1átiea (tan1anbo de 60 bytes, por exemplo)
etc.
END
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 103

A seguir o mesmo programa utilizando agora a sub-rotina:

Sub-rotina:
.E ndl: sub-rotina que calcula unia expressão 1natc1nática (tamanho de 60 bytes, por cxc,nplo)

RET

Programa Principal:
Prog P: instrução 1

instrução N
Chan1ada à sub-rotina que calcula uma expressão 1natc1nática (ACALL cnd 1/LCALL cndl · 2 ou 3 bytes)
instrução 'N+ 1

instrução M
Chan1ada à sub-rotina que calcula tuna expressão 1natc1nática (ACALL cnd 1/LCALL end l . 2 ou 3 bytes)
instrução M

instrução O
Cha1nada à sub-rotina que calcula tuna expressão 1nate1nãtica (ACALL end 1/LCALL end 1 • 2 ou 3 bytes)
etc.
END

Observe que um programa implementado com sub-rotinas utiliza bem


menos posições de memória de programa (exemplo anterior, aproximada-
mente 60 + 10 = 70 bytes) do que um programa que não é implementado
com sub-roti11as (exemplo da página 102, aproxim.a damente 3 x 60 + 10 =
190 bytes).
A estrutura de projeto de um programa (software) utilizando várias sub-
rotinas é apresentada a seguir.

Área de ; Área de 111cn1ória de progran1a das 'sub-rotinas'


mc1nória de
progran1a 1 ; Sub-rotina 1:
endereço inicial da sub-rotina 1 : instrução l
instrução 2

instrução N
RET
; Sub-rotina 2:
endereço inicial da sub-rotina 2 : instrução l
instrução 2

instrução N
RET
104 MICR0C0NTR0LAD0RES 8051 Cap. 5

; Sub-rotina l'vl:
endereço inicial da sub-rotina M : instrução 1
instrução 2

instrução N
RE1'

Área de '
; Area de Lnen1ória de progran1a do 'progran1a principal'
me,nória de endereço inicial do programa principal : instrução 1
progran1a 2 instrução 2
..
;cha1nada à 'sub-rotina 1'
ACALL/LCALL endereço inicial da sub-rotina 1
;chan1ada à 'sub-rolioa 2'
AC1-\LL/LCALL endereço inicial da sub-rotina 2

;cha,nada à 'sub-rotina M'


ACALULCALL ender<.,ço inicial da sub-rotina M
,.
instrução K
END

Toda sub-roti11a é caracterizada por seu endereço inicial e pelo fato de


sua última instrução ser sempre a instrução RET (retorno de sub-rotina).
A il1strução RET (RETur11, em inglês= RETorno de sub-rotina) deve sem-
pre ser utilizada em conj unto com as instruções de cl1amada a sub-rotinas
ACALL addr11 e LCALL addr16 •
Analogamente, como uma interrupção funciona de maneira similar a
uma sub-rotina, a instrução RETI (RETur11 I11terru.ption, em inglês= RETorno
de uma sub-rotina d.e Interrupção), ela deve ser sempre utilizada para finali-
zar urna su.b -rotina de atendimento à fonte de interrupção das cinco fontes
de interrupções existentes nos rnicrocontroladores da família MCS-51 - duas
entradas de inten·upções exter11as (IEO e IEl), duas e11tradas de interrupções
dos tíniers/ contadores (TFO e TF1) e u1na entrada de interrupção do canal de
comunicação serial, referente à interrupção de recepção e transmissão de in-
formações (RI+TI).
Urna fonte de interrupção de hardware é sempre ativada por um sinal
elétrico.
Uma sub-rotil1a elaborada para atender a urna fonte de interrupção é
cl1a1nada de s·ub-rotina de ate11din1ento à fo11te de interrupção.
Todo programa principal també1n é caracterizado pelo seu endereço
i11icial e por aprese11tar, 11a sua última linl1a de programa, a diretriz END do
Assembly para indicar o fim do programa.
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 105

Vantagens da ittilização das sub-rotinas:


reduz a quantidade de memória de programa (ROM ou EPROM), di-
minuindo também o ct1sto do projeto de hardware;
apresenta a característica de ser modular. Cada módulo correspo11de a
uma sub-rotina que deve ser indepe11dente. Isso facilita a implementa-
ção, a simulação, o teste físico, a mai1ute11ção e a modificação do projeto
de software;
o projeto do programa final fica fácil de ser entendido;
os módulos podem fazer parte de wna biblioteca de sub-rotil1as e po-
dem ser utilizados na imple1nentação d.e novos projetos que empregam
a mesma tecnologia de microcontroladores.
5.2.2 - Princípio de funcionamento de uma sitb-rotina: co11sidere a estrutura
de um projeto de software, dada no final da página 103 e começo da 104.
Para executar esse programa é necessário inicializar o conteúdo do re-
gistrador Program Counter (PC) com o valor do endereço inicial do prograrna
principal. Isso significa dizer que a próxima instrução a ser executada será a
instritçâo 1 da área de memória de programa 2, até executar a instrução de
cl1a1nada à sub-rotirla 1, ACALL/LCALL endereço inicial da sub-rotina 1. Ao
executar essa instrução, o programa processará a sub-rotiria 1 a partir do ende-
reço inicial da sub-rotir1a 1, localizada 11a área de memória de programa 1. As-
si1n, serão executadas as instruções contidas na sub-rotina l, isto é, as instru-
ções 1, 2 até a N e finalmente será executada a instrução RET da sub-rotina 1.
Essa i11strução é responsável pelo retorno do processamento para o programa
principal. O retor110 ao programa principal é feito por meio da execução da
instrução contida no e11dereço de memória imediatamente após a instrução
ACALL ou LCALL, que foi executada. No exemplo, esse é o endereço da
instrução de chamada à sub-roti11a 2, que aponta para a instrução ACALL/
LCALL endereço inicial da su.b-rotina 2. Assim, a próxima instrução a ser exe-
cutada, será a instrução ACALL/LCALL endereço inicial da sub-rotina 2. Da
mesm.a maneira, o programa executará a sub-rotina 2, a partir do erzdereço
inicial da sitb-rotina 2, localizada na área de me1nória de programa 1. Em se-
guida, serão exect1tadas as instrttções 1, 2 até a N e finalmente será executada
a instrução RET da sub-rotil1a 2, que é responsável pelo retorno ao progra1na
principal por 1neio da execução da instrução contida no endereço de memó-
ria i1nediata1ne11te após a instrução ACALL ou LCALL, que foi executada.
Tal endereço é o da instrução de chamada à sub-roti11a 3, que aponta para a
instrução ACALL/LCALL e11.dereço i'nicial da sub-rotina 3 e assim por diante.
106 MICR0C0NTR0LAD0RES 8051 Cap. 5

Mas como uma sub-rotina é executada fisica111ente pelo micropro-


cessador?
Em prilneiro lugar, é necessário defilur o que é Pilha (LJFO - Last-ln,
First-Out). O conceito de pilha vem da defilução de empilhamento físico de
objetos, ou seja, ao empilhar objetos o primeiro objeto da pilha será o último
I

a sair, para que a mesma não seja destruída. Por exe111plo, u1na pilha de latas
de leite em pó em uma prateleira de supermercado. Deve-se, em primeiro
lugar, retirar a últilna lata que foi colocada na pilha, para que a pilha não seja
destruída.
A pill1a deve ser endereçada em uma área de memória RAM dispo11ível
no hardware do sistema 1nicroprocessado ou microco11trolado. Essa área pode
ser da memória RAM mterna ou da RAM externa.
Nessa área de memória RAM, serão arm.a ze.n adas informações (bytes
ou endereços), utilizando instruções que empregam endereça.m ento indireto
indexado ao conteúdo do registrador d e11ommado Stack Pointer (Ponteiro de
Pilha- SP).
Após o sinal de reset, o co11teúdo do registrador Sta.ck Poin.ter (SP) é
inicializado com o valor 0711 (definido pelo fabricante).
A pilha sempre aumenta de tamanl10 no sentido ascendente dos
endereçamentos de 1nemória RAM e dilnmui de tamanho no sentido descen-
dente dos endereços de memória.

RAM
Endereço Conteúdo
07h ((SP)) ~ (SP) =07h
08h

Cresce ! i Decresce

7Fh

Fi~ura 5.4 Represe11tação esquen1ática da pilha (LIFO) após um sir1al de reset.

As mstruções pertence11tes à família de microcontroladores MCS-51 que


utilizam a pilha são:
PUSH direct, POP direct, ACALL address, LCALL address, RE'f e RETI.
Define-se Fila (FIFO - First-In, First-Out) como um buffer de memória
con1 o princípio de escrita e leitura de bytes com base na idéia de que o prilnei-
ro byte que entra será o primeiro a sair. O conceito de fila pode ser associado a
uma fila física de pessoas, ou seja, ao se formar uma fila, a p rimeira pessoa que
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 107

entra 11essa fila será a primeira a sair, para que a 1nes1na não seja destruída. Por
exemplo, mna fila de apose11tados do INSS em dia de pagamento.
Esse tipo de armazenamento geralmente é utilizado em com.u nicação
ser.ia}, em que os bytes estão arrnazenados em um determinado buffer de
memória com o conceito de fila, ou seja, os primeiros bytes armaze11.ados
serão os primeiros a serem lidos e transmitidos.
A seguir, serão apresentadas as instruções PUSH dírect e POP dírect.
PUSH direct: escreve/ armaze11.a o co11.teúdo da posição de memória cujo en-
dereço é direct na pilha. Isso é feito pelo microprocessador, da se-
guinte maneira: o conteúdo do Stack Pointer é adicionado de uma
unidade [(SP) ~ (SP)+l] e depois o co11teúdo da posição de memó-
ria, cujo endereço é direct, é armazenado no conteúdo da posição de
memória RAM da pilha, cujo endereço é dado pelo conteúdo do
registrador Stack Pointer [((SP)) ~ (direct)].
POP direct: lê/ restaura um byte da pilha. Isso é feito pelo microprocessador
da seguinte maneira: o conteúdo da posição de memória, cujo ende-
reço é direct, será armazenado co1n o conteúdo da posição de memó-
ria, cujo e11.dereço é dado pelo conteúdo do Stack Pointer [(direct) ~
((SP))] e depois, o conteúdo do Stack Pointer será decrementado de
uma unidade [(SP) ~ (SP) -1].
A Tabela 5.1 descreve as instruções PUSH direct e POP direct.
Tabela 5.1 Descrição das instruções PUSH direct e POP d'irect.

Instrução Bytes Ciclos Codificação Operação


(PC) ~ (PC) + 2
PUSH direct 2 2 1100 0000 direct address (SP) r (SP) + I
((SP)) f - (direct)
(PC) r (PC) + 2
POP direct 2 2 l l OI 0000 direct address (di.rect) ~ ((SP))
(SP) r (SP) · 1

Como exemplo da função de armazena1nento de bytes na pilha, consi-


dere que o co11.teúdo do Stack Pointer (SP) foi inicializado co1n o valor SOh e
que se deseja armazenar o conteúdo do registrador RO 11.a pilha, que vale 23h.
Inicialme11te, como a pill1a foi definida a partir do endereço 5011 da memória
RAM interna do microcontrolador, pois (SP) = 50h, ela co1neça a partir do
endereço 5011 da memória RAM como é mostrado a seguir.
108 MICR0C0NTR0LAD0RES 8051 Cap. 5

Stack Pointer (SP) Endereço da n1em6ria Rl\~I interna Conteúdo da memória RAl\1. interna
50b ~ 50b XXb (dado qualquer)
51b YYh (dado qualquer)
52h ZZh (dado qualquer)

A instrução para armazenar o conteúdo do registrador Rl na pilJ1a é


PUSH Olh (endereça1nento direto, considerando que Rl perte11ce ao primei-
ro banco de registradores). Assim, após essa instrução ser processada, ob-
té1n-se:
(SP) f- (SP) + 1 f- 50h + 1 = 51 h;
((SP)) f- (direct) <=> ((SP)) = (51h) f- (0111) = (Rl) = 23h.
A seguir, são mostradas as condições finais do conteúdo do Stack Pointer
(SP) e do conteúdo da pilha.

Stack Pointer (SP) Endereço d a n1emória R,\ J\,I interna Conteúdo da n1emória RA~I interna
50h XXh (dado qualquer)
51h ~ 51h 23h
52h ZZh (dado qualquer)

Para ler (recuperar) o contetido do registrador Rl da pilha, a instrução a


ser utilizada é POP Olh. Assi1n, executando-se essa instrução, tem-se:
(direct) f- ((SP)) ~ (0111) = (RO) f- ((SP)) = (51h) = 2311;
(SP) f- (SP) - 1 f- 51h - 1 = 50h.

Stack Pointer (SP) Endereço da n1emória RAM interna Conteúdo da n1en1ória RAl"I interna
50h ~ 50h XXh (dado qualquer)
5.l h 23b
52h ZZh (dado qualquer)

Considerações gerais sobre esse exemplo:


Quando se armazenam bytes na pilha e depois os mesmos são lidos, o
conteúdo d o Stack Poi11ter volta à sua condição inicial.
Os bytes que foram ar1nazenados na pilha continuam em suas posições
de memória até que a pilha seja novam.e 11te utilizada.
A pilha aumenta de tamanho no sentido ascendente do endereçamento
da m.e mória RAM.
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 109

A pill1a dimi11ui de tamartho no se11tido descende11te do endereça1nento


da memória RAM.
O conteúdo da posição de memória ilúcial da pilha 11unca é utilizado.
A seguir, serã.o apresentadas as instruções de chamadas a sub-rotinas
ACALL addr11 e LCALL addr16 e de retorno às sub-rotinas RET e RETI:
ACALL addr11 :
Função: Absolute Call (cl1amada à sub-roti11a absoluta= memória de
programa).
Descrição: ACALL cl1ama incondicionalmente uma sub-rotina loca-
lizada no end.ereço indicad.o por addr11 • Inicialmente, a i11strução
ACALL addr11 incremerlta o conteúdo do registrador Progra111 Counter
(PC) em duas unidades, pois a instrução ACALL é formada por 2
bytes. Isso é feito para calcular o e11dereço da instrução seguinte,
que deverá ser executada logo após a sub-rotina ser processada por
inteiro. Dessa maneira, o conteúdo do registrador JJrogra111 Counter
(PC) contém o endereço de retorno da sub-rotil1a. Depois disso, a
instrução ACALL addr11 armazena o conteúdo do registrador PC (16
bits) dentro da pilha por endereçamento indireto ou indexado, utili-
zan.d o o conteúdo do registrador Stack Pointer (SP). Isso é feito ar-
mazenando-se, em prin1eiro lugar, o byte menos sig11ificativo do con-
teúdo do registrador Program Cou·nter (PC), cl1a1nado PCL, em que L
significa Lmv (1ne11os significativo), 11a pill1a, na posição de metnó-
ria cujo endereço é dado pelo conteúdo do Stack Poi11ter. Depois, o
conteúdo do registrador Stack Poínter é adicionado de uma uruda-
de. E finalmente, o byte mais sigruficativo do conteúdo do registra-
dor Progra1n Counter (PC), cha1nado PCH, em que H significa hig/1
(mais significativo), é armazenado na pilha, 11a posição de memória
cujo endereço é dado pelo conteúdo do Stack Pointer.
O endereço de destino é obtido ao se concatenar Quntar/ compor) os
5 bits mais sigruficativos do conteúdo do Progra1n Counter (PC), que
estão junto com os bits de 7 - 5 do opcode (código da instrução) e o
segundo byte da instrução. A sub-rotina deverá estar localizada a
uma distância máxima de 2 Kbytes dentro da memória de progra-
ma. Nenhum Jl.ag do co11teúdo do registrador PSW é afetado por
essa instrução.
11 O MICROCONTROLADORES 8051 Cap. 5

A Tabela 5.2 descreve as instrttções ACA'LL addr11 e 'LCALL addr16 •


Tabela 5.2 Descrição das instruções ACALL addr11 e LCALL addr16•

I nstr ução Bytes Ciclos Codifica ção <) peração


(PC) ~ (PC) + 2
(SP) ~ (SP) + 1
((SP)) ~ (PC,.o)
ACALL addf, 2 2 a!O a9 a8 1 0001 a7 ............a0 (SP) ~ (SP) + 1
((SP)) ~ (PC,~,)
(PC,o-0 ) ~ addr 11
(PC) ~ (PC) + 3
(SP) ~ (SP) + 1
((SP)) ~ (PC,-o)
LCALL add/6 3 2 000 1 0010 a l5 .... a8 a7 ..........ao
(SP) ~ (SP) + 1
((SP)) ~ (PC,~.• )
(PC,s.o) ~ addr,6

Exemplo: Inicialmente, considere q ue o conteúdo do registrador Stack Poi'nter


(SP) vale 07h e que a instrução ACALL subrtn está armaze11ad a no conteúdo
da posição de memória ROM, cujo endereço é 0123h, e o nome subrt11.
corresponde ao endereço de memória ROM 0345h, como é i11dicado a seguir.
Endereço de 1nernória 1\lf.11e111ônico
0123h ACALL subrtn (0345h)

Stack Pointer (SP) Endereço d a me mó ria RAJ\1. interna Co nteúdo da n1en1ória RAM inte rna
07h ~ 07h XXh (dado qualquer)
08h YYh (dado qua lquer)
09h ZZb (dado qualquer)

Depois de executar a instrução ACALL subrtn, o conteúdo do regis-


trador Stack Pointer (SP) será igual a 0911, e os conteúdos das posições de
memória 08h e 09h co11terão os val ores 25h e Olh, resp ectivamente; o con-
teúdo do registrador Program Counter (PC) será igual a 0345H, como é
mostrado a seguir.

Endereço de 1nen1ória i\111e111ô11ico


0123h AC,~LL subrtn =}
ACALL 0345h = } (PC)~ (PC)+2 = 0123h+2 = O125h (endereço de rcton10)
(SP) ~ (S P)+ 1 = 07h+I = 08b
((SP)) ~(PC,.o) <=> (08b) =25b
(SP) ~(SP)+ 1 = 08h+ I = 09h
((SP)) ~ (PC 15-.'!) <=> (09h) = Olh
(PCio. 0) ~ addr 11 <=>(PC,o.o) = 0345h
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 11 1

Stack Pointer (SP) Endereço da n1emória RAi\'I interna Conteúdo d a n1emória RA!\11 interna
07b XXh (dado qualquer)
08b 25b
09h~ 09h Olh

LCALL addr16 :
Função: Long Call (chamada à sub-rotina longo).
Descrição: LCALL chama incondicionalmente uma sub-rotina loca-
lizada no endereço indicado por addr16• Inicialmente, a irlstrução
LCALL addr16 incre1nenta o conteúdo do registrador Program Counter
(PC) em três unidades, pois a instrução LCALL é constituída de 3
bytes. Isso é feito para calcular o endereço da instrução seguinte,
que deve ser executada logo após a sub-rotina ser processada. Des-
sa maneira, o conteú.do do registrador Program Counter (PC) contém
o endereço de retorno da sub-rotina. Depois d isso, a instrução ACALL
addr16 armaze11a o conteúdo do registrador PC (16 bits) de11tro da
pilha por endereçame11to indireto ou indexado, utilizai1do o con-
teúdo do registrador Stack Pointer (SP). Isso é feito ar1nazenando-se,
em primeiro lugar, o byte menos significativo do co11teúdo do regis-
trador Prograni Counter (PCL) na pilha, 11a posição de m emória, cujo
e11dereço é dado pelo conteúdo do Stack Pointer. Depois, ao conteú-
do do registrador Stack Pointer é adicionada u1na uni.dade. E final-
mente, o byte mais significativo do conteúdo do registrador Prograni
Coitnter (PCH) é ar1nazenado na pilha, na posição de memória cujo
endereço é dado pelo conte(1do do Stack Pointer (SP). Depois disso,
o conteúdo do registrador de fw1ção especial Prograni Cou11.ter, (PC),
é inicializado com o en.d ereço inicial da sub-rotina. Isso faz com que
a próxima instrução a ser executada seja aquela que pertence à sub-
rotit1a, m udan.d o o fluxo de p rocessamet1to do programa pr.i11cipal
para a sub-rotina.
A sub-rotina deve estar localizada a uma distância máxi1na de 64
Kbytes dentro d.a memória de programa. Nenhum flag do conteú.-
do do registrador Prograni Status Word (PSW) é afetado por essa
instrução.

Exemplo: I11icialmente, considere que o conteúdo do registrador Stack


Pointer (SP) seja igual a 07h. A instrução LCALL subrt11 está armazenada no
conteúdo da posição de memória, cujo endereço é 012311, e o nome subrtn é o
endereço de memória 1234h.
112 MICR0C0NTR0LAD0RES 8051 Cap. 5

Endereço de 111en'lória M11 e1nônico


0123h LCALL subrtn (1234h)

Stack Pointer (SP) Endereço da memória RAM interna Conteúdo da memória RAM interna
07h-? 07h XXh (dado qua lquer)
08h YYh (dado qualquer)
09b ZZb ( dado qualquer)

Depois de executar a instrução LCALL subrt'n o conteúdo do registra-


dor Stack Poiriter (SP) será igL1al a 09h, e os conteúd.os das posições de
memória 0811 e 09h conterão os valores 26H e OlH, respectiva1nente; o
conteúdo do registrador Progra,n Counter (PC) será igual a 123411, como é
mostrado a segL1ir.

Ender eço de 111e1116ria lvf11e111ónico


0123h LCALL subrtn =>
0123h LCALL 1234b => (PC)f-{PC)+3 = 0123h+3 = O126h (endereço de retomo)
(SP) f-(SP)+ 1 = 07h+ 1 = 08b
((SP)) f- (PC7_0) < > {08h) = 26h
(SP) f- (SP) + 1 = 08h+ 1 = 09h
((SP)) f-(PC 15_8) < > (09b) = Olh
(PC 15. ) f- addr 16 <-> (PC 15•0) = 1234h

Stack Pointer (SP) E nde1·eço d a n1en1ória RAM interna Conteúdo da n1emória RAl\ll interna
07b XXh {dado qualquer)
08h 26h
09h-? 09h Olh

RET:
Fi,nção: retorno de sub-rotina.
Descrição: essa instrução é utilizada prit1.cipaln1ertte em conjunto com
as instruções de chamada às sub-rotinas ACALL addr11 e LCALL
addr16 •
A instrução RET é responsável por ler (recuperar) o endereço de
retomo da sub-rotina para o programa pri11cipal, que foi armazena-
do pelas instruções de cl1amadas a SL1b-roti11as ACALL addr11 e
LCALL addr16, da pilha. Assim, a instrução RET lê 2 bytes sucessivos
da pill1a, utilizando o endereçamento indireto ou indexado por meio
do conte(1do do registrador Stack Pointer (SP) e armazenando-os no
conteúdo do registrador Progra1n Counter (PC) 11a stta parte mais sig-
nificativa (PCH) e na sua parte menos significativa (PCL).
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 113

Essa instrução é executada pelo microprocessador por meio da ope-


ração da leitura do conteúdo da posição de 1ne1nória, cujo endereço
é dado pelo conteúdo do Stack Po,inter (SP), e o armazena na parte
mais significativa do conteúdo do registrador Prograni Counter (PCH).
Depois, o conteúdo do registrador Stack Pointer (SP) é diminuído
em uma unidade. Novame11te, o microprocessador faz uma opera-
ção de leitura do co11teúdo da posição de memória, cujo endereço é
dado pelo conteúdo do registrador Stack Pointer (SP), e o armazena
na parte me11os significativa do conteúdo do registrador Progra1n
Coitnter (PCL). Depois, mais uma vez, o conteúdo do registrador
Stack Pointer (SP) é dimiI1uído em uma urlidade. Assim, a próxi1na
instrução a ser executada será aquela co11tida 110 conteúdo da posi-
ção de memória, cujo endereço é aquele imediatamente posterior à
instrução ACALL ou LCALL que chamou tal sub-rotina.
Nenhum fiag do conteúdo do registrador PSW é afetado por essa
instrução.
A Tabela 5.3 descreve as instruções RETe RETI.
Tabela 5.3 Descrição das instruções RET e RETI.

Instrução Bytes Ciclos Codificação Operação

(PC,~,) <- ((SP))


(SP) +- (SP) • 1
RET 1 2 0010 0010 (PC,,,) +- ((SP))
(SP) +- (SP) · 1
(PC,~) <- ((SP))
(SP) +- (SP) · 1
llETI 1 2 0011 00 10
(PC,.,) +- ((SP))
(SP) +- (SP) · l

Exemplo: Inicialmente, considere que o conteúdo do registrador Sta.ck


Pointer (SP) seja igual a OBh e que os co11teúdos das posições de memória,
cujos endereços da RAM interrla são OAh e OBh, tenl1a os valores 23h e 0111,
respectivame11te, co1no é mostrado a seguir.

Stack Pointer (SP) Endereço da n1emória RAi\11 interna Conteúdo d a n1emória RAJ\11 interna
09h XXb (dado qualquer)
OAh 23b
OBb~ OBh O!h
114 MICROC0NTR0LAD0RES 8051 Cap. 5

Depois de executar a i11strução RET, o co11teúdo do registrador Stack


Pointer (SP) será igual a 09h, e o conteúdo do registrador Progra1n Counter
(PC) será igual a 0123h, como é mostrado a seguir.

RET ;::;} (PC, 5•8) f- ((SP)) <=> (PCH) f- (OBh) =Olh


(SP) +- (SP) - 1 = OBh - 1 =OAh
(PC 7_0) f- ((SP)) <= > ( PCL) +- (OAh) = 23h
(SP) f- (SP) - 1 = OAh - 1 = 09h

Stack Pointer (SP) Endereço da memória RA!VJ interna Conteúdo da memória R...\1\11 interna
09h -t 09h XXh (dado qualquer)
OAh 23h
OBh Olb

Assim, a próxi1na instrução a ser executada. será aquela localizada no


co11teúdo da posição de memória, cujo endereço é dado pelo conteúdo do
registrador Prograni Counter (PC), que vale 0123h.
RETI:
Função: retorno de sub-rotina de iI1terrupção.
Descrição: essa instrução é utilizada pri11cipahne11te em conjunto com
a instrução de cl1amada à sub-rotina de interrupção LCALL vector
address (0003h-IE0,000Bh-TFO, 0013h-IE1, 001Bh-TF1, 0023h-Rl+TI e
002Bh-TF2+EXF2-8032/52), que ocorre quando uma interrupção é
gerada por um sinal elétrico externo (IEO ou IEl) ou pelos tiniers /
co11tadores (TFO ou TFl ) ou pela interrupção do cai1al de cornunica-
ção serial (RI ou TI), por meio da recepção ou transmissão de infor-
mação ou, ai11da, pelo tiJner/ contador 2 para o 8051 / 32. Quando
ocorre um desses sit1ais de hardware, o microprocessador finaliza a
instrução que está sendo executada, geralmente localizada no pro-
grama principal, e gera uma instrução de LCALL vector address cor-
respondente à interrupção ocorrida (externa, pelos tiJners / contado-
res ou por comu11icação serial). Assim, a instrução de LCALL vector
address armazena na pilha o endereço de retorno para o progran1a
principal. Com isso, a instrução RETI fica responsável por recupe-
rar o endereço de retor110 para o programa principal que foi arma-
ze11ado na pilha pela instrução de chamada a sttb-rotinas LCALL
vector address. A instrução RETI lê 2 bytes sucessivos da pilha, utili-
zando o endereçamento indiI·eto ou indexado por 1neio do conteú-
do do registrador Stack Poínter (SP) e os ar1nazena no conteúdo do
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 115

registrador Program Counter (PC) na sua parte m.a is significativa


(PCH) e na sua parte menos significativa (PCL), respectiva1nente.
Essa instrução é executada pelo microprocessador por meio da ope-
ração de leitura do conteúdo da posição de 1ne1nória, cujo endereço
é dado pelo conteúdo do Stack Pointer (SP), e o armazena na parte
mais significativa do conteúdo do registrador Progran1. Counter (PCH).
Depois, o conteúdo do registrador Stack Pointer (SP) é di1ninuído
em uma unidade. Novamente, o microprocessador faz urna opera-
ção de leitura do conteúdo da posição de memória, cujo endereço é
dado pelo conteúdo do registrador Stack Pointer (SP) e o armaze11a
na parte menos significativa do co11teúdo do registrador Progra1n
Coitnter (PCL). Depois, mais urna vez, o conteúdo do registrador
Stack Pointer (SP) é diminuído em urna unidade. Assim, a próxima
instrução a ser executada será aquela contida no conteúdo da posi-
ção de memória, cujo endereço é o i1nediatame11te posterior à últi-
ma instrução que foi executada pelo microprocessador, antes que a
interrupção ocorresse. Nenhum flag do conteúdo do registrador
Progran1. Status Word (PSW) é afetado por essa instn1ção.
A Tabela 5.3 descreve as instruções RETI.

Exemplo: I11icialrnente, considere que o conteúdo do registrador Stack


Pointer (SP) seja igual a 30h e que o conteúdo das posições de memória, cujos
endereços da RAM interna são 2Fh e 30h, possua os valores 3411 e 12h, res-
pectivamente, como é mostrado a seguir.

Stack Pointer (SP) Endereço da memória 1~1\M interna Conteúdo da memória RAJ\-1 interna
2Eh XXh (dado qualquer)
2Fh 34h
30b ~ 30b 12b

Depois de executar a instrução RETI, o conteúdo do registrador Stack


Pointer será igual a 2Eh e o conteúdo do registrador Program Cou11.ter (PC)
será igual a 1234h, como é mostrado a seguir.

RET =? (PC 15• 8) f- ((SP)) <=> (PCH) f - (30h) = 12h


(SP) f - (SP) • 1 = 3011 • 1 =2Fh
(PC 7•0) f - ((SP)) < > (PCL) f - (2Fb) =34h
(SP) f - (SP) · l = 2Fh - 1 = 2Eh.
116 MICROC0NTR0LAD0RES 8051 Cap. 5

Stack Pointer (SP) Endereço da n1emória RA!\11 interna Conteúdo da 1nen1ória RA!\1 interna
2Eb ~ 2Eb XXh (dado qualquer)
2Fb 34b
30h 12h

Assim, a próxima instrução a ser executada será aquela localizada 110


co1Tteúdo da posição de 1ne1nória, cujo endereço é dado pelo co11teúdo do
registrador Program Cour1.ter (PC), que vale 1234h.

5.3 Estruturação da lin{!uaeem de proeramação Assembly


Com base no conceito de sub-rotinas e aproveitando suas características de
modularidade, a estruturação da linguage1n Assembly consiste na elabora-
ção de um programa formado por três partes principais quanto ao seu arma-
zenamento na memória d.e programa ROM ou EPROM. Essas partes são:
1 - Pri1neira parte do programa (área de progran1a 1): essa área é reservada
para a alocação de todas as sub-rotinas que farão parte do projeto do
programa final. Exemplo: rotinas de teclado, de display, de comu11ica-
ção, de controle de um determinado processo etc.
2 - Segunda parte do progra1na (área de progra1na 2): início do programa prin-
cipal. Essa área é utilizada para alocar as instruções de inicialização de
todas as variáveis que serão utilizadas pelo programa e é também 011de
são feitas todas as programações das irlterfaces de entrada e saída utili-
zadas pelo hardware. Essa programação é feita por meio d.a inicialização
do conteúdo dos registradores de controle e de modo de operação das
interfaces de e11trada e saída (ti1ners/ co11tadores, canal de comunicação
serial etc.).
3 - Terceira parte do programa (área de progrania 3): pertence també1n ao pro-
grama principal e co11tém o loopi11g do mesmo. Nessa área, está conti-
do o processamento propriamente dito, ou seja, é aqui que são defini-
das as instruções de chamadas às sub-rotinas, de forma organizada,
para executar um determinado controle ou tarefa específica. A última
instrução dessa parte do programa consiste em um jumper incondicio-
nal para a posição de memória do início do loop do programa princi-
pal. Com isso, consegue-se um controle contínuo de máquina ou de
processo, ou seja, u1n controle durante 24 horas por dia.
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 117

O fluxograma a seguir representa a estruturação da li11guagem Assembly.

Estruturação
da linguagem
Assembly

'•

Descrição e definição das sub-rotinas

'•

Início do programa: inicialização das variáveis de programação do hardware

' .-' ••

Loop do programa principal:


- processamento/instruções de chamadas a sub-rotinas;
- instrução de 'jumper' incondicional para o início do loop do
programa principal (gerenciamento e controle 24 horas por dia).

'• .
~

Estruturação da linguagcn1 Asscmbly:


;Sub-rotinas - prin1eira parte:
addr 1: Sub-rotina 1
RE·r

addrN: Sub-rotina N
R_ET

; Inicialização das variáveis do progran1a e do hardv,arc - segunda parte, que pertence ao


; prograrna principal:
cndereçodolniciodoprogramaprincipal: instruções l

instrução N
; Loop do progratna principal - terceira parte, que pertence ao progra1na principal:
loop: instrução 1

instrução N
call adrl ; chan1a a sub-rotina 1

call adrN ; cba1na a sub-rotina N

sjtnp loop ; 'Fitn do looping do programa


END ; principal'
118 MICROC0NTR0LAD0RES 8051 Cap. 5

O programa mostrado anteriormente está estruturado e1n um forma-


to chamado dozvn-top (em primeiro lugar, estão definidas as sub-rotinas e
depois, o programa principal e seu loop). Da mesma maneira, também é
possível estruturar um programa em Assembly em uma estrutura top-down
(em primeiro lugar, é definido o programa principal e seu loop, e depois, as
sub-rotinas).
Pelos grandes berlefícios e va11tagens que a estruturação de u1na lingua-
gem de programação produz, atualinente, todas as lit1guage11s de programa-
ção disponíveis no m.e rcado exigem tal formatação. Como exemplo, pode-
mos citar as linguagens de programação C, Visual C, Visual Basic, Pascal,
PL/M,JAVA, Visual JAVA, LISP etc.
Va11tagens da utilização da li11guagem de progra1nação estruturada:
metodologia sistemática de implementação de projeto de programa;
para um projeto completo, constituído de 1nuitas funções ou tarefas, a
solução é facil1nente implementada por meio da divisão do projeto com-
pleto em pequenos módulos (simples su·b-roti11as) que são respo11sáveis
por tarefas específicas e bem-definidas;
o te1npo de i1nplementação é extremame11te reduzido, pois é necessário
apenas definjr as diferentes tarefas (sub-rotj11as) que o projeto deve exe-
cutar, e essas tarefas devem ser c.h amadas no loop do programa princi-
pal, de maneira orga1úzada e seqüencial;
grande confiabilidade na im.p lementação das sub-rotinas;
tempo de desenvolvimento reduzido;
tempo de simulação reduzido;
tempo de emulação reduzido;
tempo de 1nru.1ute11ção reduzido;
projeto modular;
flexjbilidade na implementação de novas características ao produto fi-
11al, por meio da inserção e retirada dos módulos que compõem o proje-
to do progrruna;
inserção dos módulos já implementados e1n bibliotecas de sub-rotinas.
Na implementação de novos projetos, as rnesmas bibliotecas podem ser
utilizadas imediatamente;
fácil manutenção, pois, quando ocorre um proble1na, este pode ser ana-
lisado diretrunente em sua respectiva sub-rotina.
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 119

Exercícios resolvidos
1 - Faça um programa estruturado (programa-fonte e fluxograma) em
Assembly, utilizando o microcontrolador 8051 da Intel que calcula
a quantidade de números iguais a FFh de uma faixa de memória
que vai do conteúdo da posição de memória, cujo endereço é 60h,
ao conteúdo da posição de memória, cujo endereço é 6411. O resulta-
do deve ser arrn.a zenado no conteúdo da posição de memória cujo
endereço é 65h.
Solução:
DEFSEG EXEMPLO, ABSOLUTE
SEG EXEMPLO
ORG 0100h
; Sub-rotina que calcula a quantidade de nun1 = OFFh
SUB 1: MOV R0,#60h ; Endereço inicial do buffer
MOV Rl ,#05b ; Quantidades de elementos do buffer
MOV 65h,#OO ; 'Zera' o contador de num = OFFh
ADR2: CLR C ; 'Zera' o (C): não influenciar a oper. de sub.
MOV A,@RO ; Carrega (A) com o cont. do buffer de n1en1ória
SUBB A,#OFFh ; Subtrai o (A) da const. OFFh
JNZ ADRJ ; Se (A)'O (A' #OFFh) =>(PC)= ADRI (não son1a I no (65h)]
INC 65h ; Se (A) = O (A = #OFFh), soma um no (65h)
ADR 1: INC RO ; Aponta p/ a próx. posição de m.en1ória a ser analisada
DJ NZ R l ,AD1?2 ; Existe1n mais dados a sere1n analisados? Se cxistiren1, salta
para ADR2
RET ; Se não existirem, finaliza a sub-rotina, se (Rl) = Oe retoma.

; Inicio do progra1na principal


PROGP:MOV PS\V,#OOh ; Faz (PSW) ~ #OOh.
tvIOV SP,#70h ; Define (SP) = 70h (inicio da pilha)
ACALLSVBl ; Chan1a a sub-rotina SUB/.
EA'D ; Fin1 do progra1na principal
120 MICROC0NTR0LAD0RES 8051 Cap. 5

SUB 1: Quantidade de números = FFh


Programa
principal
(RO) <- #60h
{R1) +- #05h
(65) +- #OOh
(PSW) ~ #OOh
(SP) <- #?Oh
(C) +- #Ob Chama sub-rotina SUB1
(A) +- ((RO))
(A) +- (A) - (e) - #OFFh

Fim
s
(A)* O?
[(A)* OFFh?J

(65h) +- {65)h+ 1

{RO) <- (RO)+ 1

s
(R1) +- (R1) - 1
(R1) * O?

RET

2 - Faça um programa estruturado (fluxograma e programa-fonte) em


Assembly, utilizando o microcontrolador 8051, que soma os bytes dos
conteúdos das posições de memória do buffer de memória, que vai
do endereço 4011 ao endereço 50h. Considere que o resultado dessa
soma pode ser maior que 255. Dessa maneira, a parte menos signifi-
cativa do resultado deve ser armazenada no conteúdo da posição de
memória cujo endereço é 51h, e a parte m.ais significativa do resulta-
do deve ser armazenad.a no conteúdo da posição de memória cujo
endereço é 5211.
SUB-ROTI NAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 121

Soma de 2 bytes (res. 16 bits}

(RO} +- #40h (início do buffer)


(R1} +- #11 h (quantidade de bytes do buffer}
(A}+- #OOh [resultado da soma(· sign)]
(52h) ~ (A} [resultado da soma (+sign}]
.
• '

(A)+- (A}+ ((RO}}

'
s
(C) = O?
(O resultado é menor que 255?)

N
'

(52h} +- (52h} +1
(se o resultado é maior que 255 então soma um (1) no (52h) - resultado + sign}

' .
'

(RO) +- (RO) +1
(aponta para a próxima posição de memória)

'
s
(R1) +- (R1} - 1 (quantidade de bytes do buffer - 1)
(R1) * O? (Se R1 *O=> salta para analisar próximo byte do buffer)

N

(51 h) +- (A) (resultado - sign)

'

RET l
122 MICROC0NTR0LAD0RES 8051 Cap. 5

Programa
principal

(PSW) f- #OOh
(SP) f- #60h
Chama sub-rotina SOMA

Fim

; Progra1na-fonte:
DEFSEG EXEMPLO, ABSOLUTE
SEG EXEl'vfPLO
ORG O1OOh ; O progra1ua será arn1azenado a partir do conteúdo da posição de 111cmória
; ROM/EPROM de programa.
SOMA: MOV R0,#40h ; (RO) é o ponteiro do butfer. O valor inicial é igual a 40h (início da posição
; de 1nemória do buffer).
MOV RI ,#11 b ; (RI) é u1n contador descendente, que conté111 a quantidade de bytes do
; buffer a seren1 son1ados (= 50b - 40h + 1).
MOV A,#OOh ; 'Zera' o (A) que conterá a parte menos significativa do resultado de 16
; bits.
MOV 52b,A ; 'Zera' o conteúdo da posição de 1ne1nória, cujo endereço é 52b, que
; será responsável pelo armazenamento da parte 111ais significativa do
; resultado de 16 bits.
ADR2: A DD A,@RO ; Son1a o resultado - sign. (A) ao conteúdo da posição de me1nória cujo
; endereço é dado pelo conteúdo do registrador RO.
JNC ADR 1 ; Se o resultado da so1na for menor do que 255, salta (não son1a 1 ao
; conteúdo da posição de n1e1nória cujo endereço é 52h (resultado + sign).
INC 52h ; Se o resultado da soma for maior que 255, soma I ao conteúdo da
; posição de n1en1ória, cujo endereço é 52b (resultado+ sign).
ADR1: INC RO ; Aponta para o próxin10 byte da memória a ser son1ado
DJNZ Rl ,ADR2 ; Din1inui e111 tuna unidade o conteúdo do registrador R 1 e salta, se
; ele for diferente de zero, isto é, houver 01ais dados a serem son1ados a
; partir da memória.
MOV 51 h,A ; Anuazena a parte - sign no conteúdo da posição de 1uemória cujo
; endereço é 5 1h.
RET ; Retomo da sub-rotina por 1neio da leitura da pilha do endereço de retorno.

PROGP: MOV PSW,#OOb ; Faz (PSW) f - #OOb.


MOV SP,#60h ; Define (SP) = 60h (início da pilha)
LCALLSOMA ; Chama a sub-rotina S0f\1A
END ; Fim do programa principal
SUB-ROTINAS E ESTRUTURAÇÃO DA LINGUAGEM DE PROGRAMAÇÃO ASSEMBLY 123

Exercícios e questões propostos


1 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly, utilizando o microcontrolador 8031, que transforme o buffer
de memória em números pares sempre que um byte desse buffer for
menor ou igual a 7Ah. Os endereços inicial e final do buffer são 3Ah
e 68h, respectivamente.
2 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly, utilizando o microcontrolador 8051, que calcule a quanti-
dade de números que apresentam o bit 5 igual a 1, do buffer de me-
mória que vai da posição de memória 15h à posição 31h. O resultado
deve ser colocado no conteúdo do registrador R2 do penúltiino ban-
co de registradores. Esse mesmo programa deve determinar o menor
número do buffer de memória que vai da posição de memória 34h à
posição 52h. O resultado deve ser colocado no conteúdo da posição
de memória cujo endereço é 69h.
3 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly, utilizando o microcontrolador 8051, que:
a) determine o maior 11úmero do buffer de memória que vai da posi-
ção de memória 34h à posição 6111. O resultado deve ser acrescen-
tado ao conteúdo do registrador R7 do segundo banco de regis-
tradores;
b) determine a quantidade de números maiores que 77h do buffer
de memória que vai da posição de memória 4Ah a 71h. O resulta-
do deve ser acrescentado ao conteúdo do registrador B;
c) Transforme o buffer de memória em números que apresentam o
bit 2 igual a 1, sempre que um byte desse buffer for igual a ABl1.
Os e11dereços inicial e final do buffer são 4Al1 e 77h, respectiva-
mente.
4 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly, utiliza11do o microcontrolador 8031, que calcule a quanti-
dade de números maiores que 22h do buffer de memória que vai da
posição de memória 33h à posição 41h. O resultado deve ser coloca-
do no conteúdo do registrador Rl do segundo banco de registrado-
res. O programa também deve calcular a quantidade de números que
apresentam o bit 6 igu.al a Oe o bit 2 igual a l, do b uffer de memória
124 MICR0C0NTR0LAD0RES 8051 Cap. 5

que vai da posição de memória 45h à posição 51h. O resultado deve


ser colocado no conteúdo da posição de memória cujo endereço é
3Ch. O program.a também deve calcular a quantidade d e números
maiores que 6511 e que o bit 4 seja igual a 1 do buffer de memória que
vai da posição de memória 5Fh a 7Eh. O resultado deve ser colocado
no conteúdo da posição de memória cujo endereço é 7Dl1.
5 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly, utilizando o microcontrolador 8051, que realize a opera-
ção lógica DR-Exclusivo entre dois buffers de memória. O primeiro
buffer vai do endereço 21h a 35h. O segundo buffer começa a partir
da posição de memória 36h. O resultado da operação lógica entre
esses dois buffers de memória deve ser colocado em um outro buffer,
cujo endereço inicial é 65h. Transforme o buffer resultante em núme-
ros que apresentam o bit 6 igual a O.
capítulo
As
PORTAS (PORTES) DE
ENTRADA E SAÍDA E SlJAS
APLICACOES
,
-
NO CONTROLE DIGITAL
DE MÁQUINA E DE PROCESSO

6.1 Objetivos
•:• Conhecer a arquitetura interna das portas da família de
microcontroladores MCS-51
•:• Programar as portas atuando como entrada e como saída
•:• Ler informações das portas de entrada
•:• Escrever informações nas portas de saída
•:• Como detectar acionamentos por meio de um bit programado como
entrada de dados
•:• Como detectar acionamentos por meio de vários bits programados
como entradas de dados
•:• Como gerar tempo por meio das rotinas de temporização (atraso)
por software
•:• Eliminando o ruído (bounce) gerado por chaves mecânicas
•:• Processar as informações das portas de entrada (identificação de
acionamento de bits, de padrão de informação de entrada, do nú-
mero de acionamento/desacionamento de chaves)
•:• Exemplos de projeto utilizando as portas de entrada e saída

6.2 lntroducão
, teórica
6.2.1-A estrittura e a operação das portas: todas as quatro portas, na família
de microco11troladores MCS-51, são bidirecionais. Cada uma delas consiste
de um latclt (registradores de funções especiais - PO a P3), um driver e um
buffer de entrada.
126 MICROC0NTR0LAD0RES 8051 Cap. 6

Os drivers de saída das portas Oe 2 e o buffer de entrada da porta Osão


utilizados 110 acesso à memória externa. A função da porta Oé definir o byte
menos significativo do endereço de 1nemória externa multiplexado no tem-
po com o byte que será escrito ou lido por meio d.a memória exter11a, e a
função da porta 2 é definir o byte mais significativo do endereço de memória
externa ao longo do ciclo de i11strução.
Alguns dos drivers de saída dos buffers de entrada da porta 1 (Pl) e
todos os bits da porta 3 (P3) são multifuncionais, ou seja, além de poderem
trabalhar normalmente como portas de entrada e saída, eles também podem
assumir funções alternativas, como as descritas na Tabela 6.1.
Tabela 6.1 Descrição das funções alternativas que alguns bits podem assumir da porta
P1 do 8052/32 e da porta P3.

Pinos das portas Funções alternativas


PI.O * T2 (entrada externa do 1i,nerlcontador 2)
PI. 1 * Capturaltrigger de recan-ega1nento do ti111erlcontador 2
P3.0 RXD (poita de entrada serial)
P3.1 TXD (porta de s,úda se1ial)
P3.2 INTO/ (intenupção externa 0)
P3.3 JNT I/ (interrupção externa 1)
P3.4 TO (entrada externa do lilner/contador O)
P3.5 T 1 (entrada externa do rbner/contador 1)
P3.6 \VR/ (sinal de escrita de memória de dados externa)
P3.7 l{D/ (sinal de leitura de rnc1nória de dados externa)
* P 1.0 e P 1. 1 somente no 8052/32.
As fu11ções alternativas só pode.m ser ativadas se o Latch correspondente
da respectiva porta for definido co1n 1 lógico. Caso o latch da porta seja defi-
nido com Ológico, sua função alternativa estará desativada e sua função prin-
cipal será a de reproduzir a condição do conteúdo do registrador de função
especial P3 para o 8051/31 e P1.0 e Pl.1 para o 8052/32.
No modo ti1ner ou co11tador, ocorrerá o recarregamento automático do
ti1ner/ contador 2 dos registradores RLDH e RLDL, somente se a opção de
recarregamento estiver selecionada (CP /RL2barra = O).
As figuras de 6.1 a 6.4 ilustram o diagra1na funcio11al do latch de um bit
típico e u1n buffer de entrada e saída em cada uma das quatro portas existen-
tes na fa1nília de 1nicrocontroladores MCS-51. O latch de um bit (um bit do
registrador de função especial de uma porta) é representado como um flip-
flop do tipo D, em que sua entrad.a de clock está ligada a um.sinal d.e escrita do
latch originário da CPU. A saída Q do flip-flop é colocada no barramento in-
terno em resposta a um sinal d e leitura do latch origirtário da CPU. O nível do
pino da porta é colocado no barramento interno em resposta a um si11al de
AS PORTAS (PORTES) DE ENTRADA E SAiDA E SUAS APLICAÇÕES 127

leitura do pino originário da CPU. Algumas instruções lêem uma porta, ou-
tras ativam o sinal de leitura do latch e outras ativam o sinal de leitura do

pino.
+VCC
AD DR/DATA Control

Read latch

PO.x Pin
Internai Bus '? MUX

Write to latch ' --9-1 o o 1 - '


a 1----_;_.--<>----------'

Read Pin

Figura 6.1 Arquitetura interna dos bits da porta PO da família de microcontroladores


MCS-51 da Intel.

+VCC

Read latch
Internai Pull-up
P1 .X Pin
Internai Bus

Write to latch ' - - - - , >----1 O D 1----4


D t--------' i--~

Read Pin

FiS}ura 6.2 Arquitetura interna dos bits da porta Pl da família de microcontroladores


MCS-51.
128 MICROCONTROLADORES 8051 Cap. 6

+VCC

Read latch ADDR Control


Internai Pull-up

P2.X Pin
MUX
Internai Bus

Write to latch L--- e----1 D o 1------1


a L__---<r__.<>--1

Read Pin

Figura 6.3 Arquitett1ra iI1terna dos bits da porta P2 da família de microco11troladores


MCS-51.
+VCC

Read latch

Alternate Output Fun


Internai Pull-up
P3.X Pin
Internai Bus

Write to latch '--~1--1 o o t-+ - -- l_J


o
Alternate Input Func

Read Pin

Figura 6.4 Arquitett1ra iI1ter11a dos bits da porta P3 da familia de microco11troladores


MCS-51 (circuito pseudobidirecional) .

As portas 1, 2 e 3 têm pull-ups internos. A por ta O tem saída de dreno


aberto. Cada linha de entrada e saída pode ser utilizada iri.dependentemente
co1no entrada ou como saída.
As portas Oe 2 não podem ser utilizadas como e11trada e saída de fi11a-
lidade geral, quando estão sendo empregadas como barramento de e11dere-
ço e de dados. Para sere1n utilizadas como entrada, os latch.es das portas
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 129

deverão apresentar en1 sua saída o nível 1 lógico, que desaciona o FET do
driver de saída. Então, para as portas 1, 2 e 3, o pino é colocado em 1 lógico
por um pull-up interno. E também pode ser colocad.o em O lógico por uma
fonte externa.
A porta Odifere por não ter pu.ll-ups internos. O FET ligado ao pu.ll-up do
driver de saída de PO é utilizado somente quando a porta está emitindo 1
lógico durante o acesso à memória externa. Caso contrário, os FETs que estão
ligados aos pull-ups estarão desligados. Conseqüentemente, as linhas de PO
que estão sendo utilizadas corno linhas de saída são dre110 aberto. Escrever 1
lógico 110 Latch deixa os FETs de saída desligados, assim o pino flutua. Nessa
condição, ele pode ser utilizado como uma entrada de alta impedância.
Quando un1 bit de uma porta é considerado como a fonte de informa-
ção nas instruções que manipula1n as portas, a infor1nação é definjda pelo
nível lógico do próprio pino, em vez da saída do latch. Esse nível lógico é
sempre afetado pelo microcontrolador e pela entrada externa. O valor lido é
essencialmente a função OR do transistor e do dispositivo externo. Se o dis-
positivo exter110 apresenta alta impedância (e11trada de gate de um trai1sistor
MOSFET ou saída em alta impedância), ao ler um pino de entrada, será refle-
tido o nível lógico prévio da saída. Para utilizar um pino como entrada, o
corresponde11te latch de saída deverá estar em 1 lógico. Assim, a saída barrada
do latc/1 ficará em O lógico, e o transistor se comportará como uma c11ave
aberta. Com isso, o dispositivo externo pode fornecer ao pino de entrada do
buffer de entrada um sinal lógico alto ou baixo. Dessa 1naneira, a mesma
porta pode ser utilizada como entrada e saída por meio da escrita de 1 lógico
em todos os pinos utilizados como entrada nas operações de saída, ignoran-
do todos os pinos utilizados como saída nas operações de entrada.
Nas instruções de um operando (INC, DEC, DJNZ e CPL), a saída do
latch, em vez do pino de entrada, é utilizada como a fonte de dados. Similar-
mente, as instruções de dois operandos utilizando a porta como origem e
desti110 (ANL, ORL e XRL) em.p regam as saídas dos latcl1es. Isso assegura que
os bits dos latches correspondentes aos pinos utilizados co1no entrada não
serão 'resetados' no processo de execução dessas instruções.
As instruções boolea11as JBC testam a saída dos Latches, em vez dos pi-
nos de entrada.
Se o latch da porta P3 contém 1 lógico, então o nível de saída é controla-
do pelo sinal cl1amado função de saída alternativa. O nível do pino P3.X está
sempre disponível para a função de e11trada alternativa.
Devido ao fato de as portas 1, 2 e 3 terem pull-ups fixos, elas são chama-
das portas quase bidirecionais. Quando configuradas como entrada, elas vão
130 MICROC0NTR0LAD0RES 8051 Cap. 6

para 1 lógico e fornecerão corre11te (IIL), se exter11amente colocadas em O


lógico. A porta O, de outra maneira, é co11siderada verdadeiramente
bidirecional, pois, quando configurada como entrada, ela flutua.
Após um sinal de reset, todas as saídas dos latch.es das portas da familia
de microcontroladores MCS-51 são definidas como l lógico. Dessa maneira,
todas as portas fica1n programadas como entrada. Se um Ológico for subse-
qüenteme11te escrito em um latch de uma porta, ele fica programado como
saída. Essa mesma porta pode ser novamente reconfigurada como e11trada,
se uma nova operação de escrita de alto nível lógico for executada.
a) Característica de ler-modificar-escrever
As instruções que lêe1n, modificam e escrevem no latch são chamadas
de instruções de 'ler-modificar-escrever':
• ANL (p. ex.: ANL Pl,A);
• ORL (p. ex.: ORL P2,A);
• XRL (p. ex.: XRL P3,A);
• JBC (p. ex.: .JBC P 1. 1, LA BEL);
• CPL (p. ex.: CPL P3.0);
• INC (p. ex.: INC P2);
• DEC (p. ex.: DEC P2);
• DJNZ (p. ex.: DJNZ P3, LABEL);
• MOV PX.Y, C (p. ex.: ivtOV P0.1,C);
• CLR PX.Y (p. ex.: CLR Pl.2);
• SETB PX.Y (p. ex.: SETB P2.0).

As instruções mostradas anteriormente são direcionadas aos latches, em


vez de às portas, para evitar a 1ná interpretação do nível de te11.são do pino.
Por exemplo, um bit de uma porta pode ser usado para fornecer tensão à
base de um trai1sistor. Quando um 1 lógico é escrito no bit, o transistor é
ligado. Se o 1nicroprocessador ler o mesmo bit da porta por meio de seu piI10
físico, em vez da saída do latch, ele lerá a tensão na base do transistor e, dessa
maneira, interpretai·á como Ológico. Lendo o latch, em vez do pino, é retornado
o valor correto de 1 lógico.
b) Progra,nação dos conteúdos das portas dos microcontroladores MCS-51
Um bit de uma porta é prograrnado como entrada por meio de uma opera-
ção de escrita de l lógico nos latches da porta. Co1no foi visto na Figura 6.1, a
saída do latch Q fica em 1 lógico e a outra saída Q complementada fica e1n O
lógico. Quando isso ocorre, o transistor opera como uma cl1ave aberta, e a
informação do pino pode ser capturada pelo 1nicroprocessador por meio do
barramento de dados. Nesse caso, o co11.teúdo das portas poderá ler i11forma-
ções de determinadas i11.terfaces de entrada. As interfaces de entrada, nor-
malmente utilizadas nos sistemas microprocessados ou microco11trolados,
AS PORTAS (PORTES) DE ENTRADA E SAiDA E SUAS APLICAÇÕES 131

utilizam sensores com o objetivo de co11trolar determi11adas variáveis de um


processo que se deseja gerenciar. Exemplos de sensores utilizados em
interfaces de entrada são os de temperatura, de pressão, de umid.a de, ópticos,
magnéticos, indutivos etc. Outros exemplos de interfaces de entrada geral-
mente utilizadas como entrada de i11for1nação do mundo externo para o sis-
te1na microprocessado ou microcontrolado são as interfaces com teclado,
interfaces com chaves pusl1-button, i11terfaces com dip switcl1es, interfaces com
1nouse, interfaces com scanners etc.
b.I) Exemplos de programação das portas:
A seguir, são mostrados alguns exemplos de programação das portas
para trabalharem co1no entrada de informação, definidas por interfaces ex-
ternas ao sistema microcontrolado (mundo externo):
I - Programação de todos os bits das portas PO para trabalharem como bits
de entrada de informação do mundo externo para o rnicrocontrolador.
MOV PO,#OFFh
Representação sinibólica: (PO) f- #FFh.
Significado da instrução: o co11teúdo da porta PO será inicializado com
o valor consta11te FFh.
Explicação: essa instrução escreverá I lógico nos 8 latches da porta PO
e, dessa ma11eira, todos os bits da porta PO serão progra1nados para
fw1cionar como entrada de informação do mundo externo para o
sistema microco11trolado.

2 - Programação do bit mais significativo da porta PO para trabalhar como


entrada de informações do inundo externo para o microcontrolador; e o
restante, co1no bits programados como saída de informações do sisten1a
microcontrolado para o mw1do externo.
MOVPI,#80h
Representação simbólica: (Pl) f- #80h = #1000 0000b
Significado da instrução: o conteúdo da porta Pl será inicializado com
o valor constante 8011.
Explicação: essa instrução escreverá I lógico no bit mais significativo do
latch da porta Pl e Ológico nos demais bits do latch da porta Pl; dessa
maneira, o bit 1nais significativo da porta PI estará programado co1no
entrada e os demais bits serão prograinados como saída.
132 MICROC0NTR0LAD0RES 8051 Cap. 6

3 - Programação dos bits pares da porta PO para trabalharem como bits de


entrada de informação do mundo externo para o microcontrolador e
dos bits ímpares da porta PO para traball1arem como bits de saída de
informação do microcontrolador para o inundo externo.
MOVP2,#55h
Representação simbólica: (P2) ~ #55h = #0101 0101b
Sigrzificado da instrução: o conteúdo da porta P2 será inicializado com
o valor constante 55h;
Explicação: essa instrução escreverá 1 lógico nos bits O, 2, 4 e 6 do
latcli da porta P2 e O lógico nos bits 1, 3, 5 e 7 do latch da porta P2;
dessa maneira, os bits pares da porta P2 serão programados como
entrada e os bits ímpares serão programados como saída.
c) Operações de leitura nas portas da fa1n11ia de ·microcontroladores MCS-51
Antes de fazer a leitura do co11teúdo das portas, é necessário programar
as mesmas para operarem como bits de entrada de informação do mundo
externo para o sistema microcontrolado, como foi visto no iten1 anterior. De-
pois disso, pode-se fazer as operações de leitura de informações.

Observação: após um sinal de reset, todas as saídas dos latches das portas
são definidas por hardware com nível lógico alto e conseqüentemente
todas as portas ficam programadas como entradas.
AsinstruçõesMOVA, PX(X= O, l,2e3),MOVRn, PX,MOV@Ri,PX
são exemplos de instruções que lêem o conteúdo das portas.

c.l) Exeniplo de operação de leitilra de 7 portas:

MOV A,#OFFh: (A) f- #Offb ~ Byte de progra,nação para fazer todos os bits da porta PO trabalharem
con10 bits de entrada de informação do n1undo externo para o sistcn1a
n1icrocontrolado.
CVIOV PO,A : (PO) f- (A) ~ Prograrna todos os bits da porta PO con10 entrada de inforn1ação do
mundo externo.
CVIOV A,PO : (A) f- (PO) ~ Lê o conteúdo da porta PO con1 a infonnação definida pelo n1undo
cxtcn10. Essa infonnação pode ter sido definida por tuna interface cons-
tituída de uni dip s1·vilch que foi ligado à porta PO, por exen1plo.
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 133

d) Operação de escrita nas portas da fa1nília de mícrocontroladores MCS-51


Antes de fazer a escrita 110s co11teúdos das portas, é necessário progra-
mar as mesmas como bits de sa.ída de informação do sistema microco11trolado
para o mundo externo, como foi visto no item B).
As instruções MOV PX, A, MOV PX, Rri, MOV PX,@Ri, ANL, ORL, XR.A
são exem.plos de instruções que escreve1n informações nas portas.

d.1) Exemplo de operação de escrita em portas:

tvJOV A,#OOh: (A) f - #OOh = Byte de prograo1ação para fazer todos os bits da porta PO trabalhare1n
corno bits de saida de inforn1ação do sisterna rnicrocontrolado para o
inundo externo.
MOV PO,A : (PO) f- (A) = Progran,a todos os bits da porta PO con10 saída de infonnação para o
inundo externo.
NIO\I PO,RS : (PO) f- (RS) = Escreve a informação existente no conteúdo do registrador RS no con-
teúdo da porta PO, que scrâ disponibilizada para o mundo cxtc1110.
Caso a porta PO esteja ligada co111 lógica positiva a urn conjunto de 8
lcds, os que cslivere1n ligados aos bits en1 zero lógico ficarão
desativados e os leds ligados aos bits en1 J lógico ficarão ativados.

e) Monitorando acionamentos gerados por interfaces de entrada i111plen1entadas


por chaves e sensores por meio das portas
Uma das maneiras mais si1nples de detectar aciona1nentos por meio das
portas de entrada é utilizar as instruções 11JB PX. Y, $" ( Se PX. Y = 1 então (PC)
~ $) e "JN B PX. Y,$ ( Se PX. Y = O então (PC) ~ $ ). O símbolo de cifrão ($),
11

u.tilizado como a.rgumento nas ins truções JB e JNB, s im.b oliza o próprio en-
dereço da instrução.
Assim, a instrução JB PX.Y,$ simplifica a escrita d o programa-fonte e
pode ser representada como:

addr 1: JB PX. Y, addr 1 <=> Se PX. Y = 1 então (PC) f - addr 1

addrl: JNB PX.Y, addrl <=> Se PX.Y = O então (PC) f- addrl

e.1) Exen1plos de 1norzitoração de aciona1nentos de interfaces de entrada utilizando


as portas:
1 - Monitoração de apenas um bit específico d e uma p orta:
134 MICROC0NTR0LAD0RES 8051 Cap. 6

1. 1 -
JB PJ.O,$=> (PC) f- (PC) + 3 => isso significa calcular o endereço da instrução seguinte, pois são
so1nadas três unidades ao conteúdo do registrador Progran1. Counter
(PC), un1a vez que a instrução JB P 1.0,S é constituída de três bytes;
=> Se (P 1.0) = 1 então (PC) t- $ => significa saltar para o endereço da própria instrução, ou seja, en-
quanto o (P 1.0) = 1 lógico, o progra1na prossegue no próprio endere-
ço da instn1ção JB P 1.0,$, isto é, fica en1 loop até que o conteúdo
desse bit n1udc para O lógico. Isso corresponde a u1n acionamento
en1 lógica negativa 1 ~ O. Quando o conteúdo do bit O da porta P 1
mudar para Ológico, o progran1a prosseguirá no endereço in1ediata-
111ente seguinte a essa instn1ção, que corresponde ao endereço da
próxin1a instrução.

1.2 -
JA'B P2.4,$ => (PC) t- (PC) + 3 => isso significa calcular o endereço da próxi1na instrução, pois são
sotnadas três unidades ao conteúdo do registrador Prograrn Counter
(PC), un1a vez que a instrução JB P2.4,$ é constituída de 3 bytes;
=> Se (P2.4) = Oentão (PC) t- $ => significa saltar para o endereço da própria instrução, ou seja, en-
quanto o (P2.4) = O lógico, o progran1a prossegue no próprio en-
dereço da instrução .18 P2.4,$, isto é, fica e111 loop até que o con-
teúdo desse bit n1ude para 1 lógico. Isso corresponde a utn
acionatncnto ctn lógica positiva O~ 1. Quando o conteúdo do bit
4 da porta P2 1nudar para I lógico, o progran1a prosseguirá no en-
dereço imediala1nente seguinte a essa instn1ção que corresponde
ao endereço da próxi1na instrução.

2 - Monitoração de vários acionamentos de interfaces de e11trada utilizando


as portas:
A instrução CJNE A, direct, rel [(PC) ~ (PC)+ 3; se (A)# (direct) então (PC)
~ (PC) + rel); se (A) < (direct) então (C) ~ 1 caso co11trário (C) ~ O ] pode ser
utilizad.a para detectar o acionamento de mais de um bit de uma porta. Para isso,
devemos defuúr Ltm padrão (byte) n o co11teúdo do registrador acumulador (A)
e comparar com o co11teúdo da porta (direct). Caso o conteúdo do registrador
acumulador (A) seja diferente(#) do conteúdo da porta, o programa deve 'saltar'
para o endereço da própria instrução ($)/ ou seja/ enquanto o conteúdo do regis-
trador acumulador (A) e o conteúdo da porta forem difere11tes/ o programa fica-
rá em loop, executan.d o essa m esma instrução. Quando o conteúdo da porta for
ajustado por interferência externa (por exemplo, o operador)/ com um valor igual
(=) ao conteúdo do registrador acumulador (A)/ o programa prosseguirá no en-
dereço imediatamente subseqüente a essa instrução.
Como exemplo/ considere que à porta P1 esteja ligada uma interface
constituída de um dip switch de oito c1"1aves, que o acionainento é feito por
lógica negativa (1 """7 O) e que/ inicialmente/ todos os bits da porta Pl estão em
1 lógico, pois as cl1aves se encontram desativadas. Assim, o programa mos-
trado a seguir aguarda que o conteúdo dos bits Oe 7 da porta Pl seja acionado.
AS PORTAS (PORTES) DE ENTRADA E SAiDA E SUAS APLICAÇÕES 135

MOV A,#OllllllOb =>


=> (A)~#7Eh = Olll l ll 0b=>
=> define padrão (byte)= #7Eh (aguarda que os bits 7 e O sejarn acionados e os
detnais bits não).

CJN E A,Pl ,$ => cornpara (A) co,n o (P 1). Se (A)* (P 1) => (PC) ~$, ou seja, 'salta' para o 1ncsn10
endereço da instrução. Essa instrução aguarda que o conteúdo da porta P 1 seja
igual ao conteúdo do acu,nulador (A), ou seja, fica ctn loop. Quando (A)= (P 1), o
progra,na sai desse loop e executa a instrução i1nediata1nente seguint.e a essa.

3 - Monitoração de um acionamento qualquer de um bit de uma porta:


A seguir, l1á ttm exemplo de rotina que 1nonitora um acio11ainento qual-
quer de u1n dos bits de 11ma porta, considerando o acionamento co1n lógica
n egativa:

\VAIT: MOV A,#Offh ; (A) f- #OfFh [ lnicialn1ente, chaves desativadas => (P 1) = OFfb ]
CLR c ; (C) ~ #Ob (para não influenciar a operação de subtração)
SUBB A PI ; (A)~ (A) - (C) - (PI ) [ subtrai (A) de (PI ) con1 (C) = O]
JZ '
\VAIT ; Se (A) = O=> (PC) f- WAIT [se ncnlnuna chave foi acionada, significa que
; (A) = (PI), ou seja, não ocorreu nenhu111 aciona111ento, e o progra111a é desviado
; para o endereço Vl'AIT até que ocorra un1 aeiona1nento. Dessa n1aneira, quando
; (A) * (P 1), o progra1na sai do loop).

Outra solução possível:

\Vi\lT: l\10V A,P 1 ; (A) ~ (P 1). Considere inicialtnente que todas as portas do (P 1) =
; FFh (nenhuma chave está acionada en1 zero lógico - lógica negativa)
INC A ; (A) ~(A) + 1 (se nenhun1a chave foi acionada (A) f- FFh 1- 1 = OOh e, no
; entanto, se algun1a chave foi acionada, (P 1) será di te rente de FFh.
; Então (A) ~ (A) + 1
; jatnais será igual a zero
JZ WAIT ; Se (A) = O=> (PC)<- \~AfT (aguarda o acionan1ento de qualquer 'bit' da
; porta se (A) = O, pois ncnhurna chave foi acionada.

6.2.2 - Como gerar rotinas de tempo utilizando software: em projetos de con-


trole si1nples utilizando microcontroladores ou em projetos com micro-
co11troladores que 11ão têm tirners/ contadores, muitas vezes, é necessário gerar
rotinas de tempo utilizando software. Essas rotinas, geralmente, são utiliza-
das para definir o tempo de acionrune11to e desativação de determinadas portas
de saída (te1npo de acio11amento e desativação d.e leds, bips, displays de sete
segmentos, acionamento de gates de tiristores etc.)
1 - Utiliza11.do um único registrador ou uma. ú11.ica posição de me1nória
Para implementar rotinas de tempo por meio de software é necessário
escolher um determinado registrador ou uma determinada posição de me-
mória. Depois, é preciso inicializar seu conteúdo com um determinado valor
136 MICR0C0NTR0LAD0RES 8051 Cap. 6

consta11te e, fi11alme11te, ficar climinuil1do o conteúdo desse registrador ou


dessa posição de 1ne1nória até que o seu valor se torne igual a zero. Um exem-
plo desse tipo de rotina é dado na Figura 6.5.

Tempo

(RO) ~ # constante - - - + - - - - -- . MOV RO, #constante

(RO) ~ (RO) - 1
(RO) * O?
s
N

Fim

Figura 6.5 Fluxograma e programa-fon.te de uma rotina que gera ten1po por soft'\<vare.

O te1npo gasto para exectttar esse programa, utiliza11do-se a Tabela 3.11


do Capítulo 3, é calculado da seguiI1te 1naneira:
Número de vezes que a instrução Quantidade de ciclos de máquina
Instrução
é executada por instrução
MOV RO,# constante 1 2
DJNZRO,$ constante 3

Assim, a quantidad.e de ciclos de 1náquina necessários para executar


essa rotina é:
Quantidade total de ciclos de máquina = 1*2 + constante*3 = 2 + 3*cons-
tante.
Sabendo-se que a freqüê11cia de um ciclo de máquina na família de
microcontroladores MCS-51 corresponde a 1/12 da freqüê11cia do cristal, temos:

f.c1c1o de n1aq . = (1/12) * f crista


• u1na . 1•

O período de um ciclo de m áquina é:

Tc,c. 'o<'e 1n •..qu1.na = 1/f.c1c'o d e 1n áqu .ina = 12/ f crista


. ,.
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 137

Assim, o tempo total gerado por essa roti11a é:

Tempo da rotina = (Quantidade total de ciclos de máquina)* T cicludemaquina = (2+3*constante)*


12/ f<ristal ~

Tc1npo da rotina= 12*(2 +3*KTE)/f<risrni (s)

Con sidere que um 1nicrocontrolador esteja utilizando u1n cristal de f cristai


= 12 MHz e que o valor da constru1te seja 255, e11tão o tempo total da rotina é:

Te1npo da rotina= 12*(2+ 3*255)/( 12M) = 0,767 µs

Tempo

(AO) +- constante 1 MOV RO, # constante 1

(A 1) +- constante 2 -+---.. addr 1: MOV A2, # constante 2

(A1) +- (A1)-1
DJNZ R1 ,$
(R1) * O?
s
N

s (AO) +- (AO) - 1
DJNZ RO, addr 1
(AO)* O?

Fim

Figura 6.6 Fluxograma e programa-fonte de uma rotina que gera tempo por software
utilizando dois contadores.

2 - Utilízarzdo dois registradores ou duas posições de ·niemória


O tempo gasto para executar esse programa, utilizando a Tabela 3.11 do
Capítulo 3, é calculado da segui11te maneira:
138 MICR0C0NTR0LAD0RES 8051 Cap. 6

Número de vezes que a Quantidade de ciclos de


Instrução
instrução é executada máquina por instrução
MOV RO,#constantel l 2
addrl:MOV Rl,#constante2 constantel 2
DJNZRl,$ constante! *constante2 3
DJNZ RO, addrl constante! 3

Assim, a quantidade de ciclos de máquina necessária para executar essa


rotina é:

Quantidade total de ciclos de 1náquina = 1*2 + constante( *2 + constantel *constante2*3 + constante ( *3 =


= 2 + S*constantcl + 3*constantcl.constantc2

O tempo total gasto para executar essa rotina é:


Sabendo-se que a freqüê11cia de um ciclo de máquina na família de
microco11troladores MCS-51 correspo11de a 1/12 da freqüê11cia do cristal, te-
mos:

·f ci·c1 o ue
• n,.., qu111a
. = (1/12) * fcn.st<1 1·

O período de um ciclo de máquil1a é:

Tc1c. io d e m<1qu111a
, . = 1/fc1c
. i ó d emáquina
. = 12/ f crista
. i·

Assim, o tempo total gerado por essa rotina é:

Ten1po da rotina = (Quantidade total de ciclos de 1náquina)* T c1ç. 1o de m.iquma


, . =

= (2 + 5*constantc1 + 3*constantcl .constantc2)* 12/ ( 6 .,. 1 =>

Te1npo da rotina= (2 + 5*constantel -1 3*constantel.constantc2)* 12/ f.cns:t:i


. 1 (s)

Considere que um microcontrolador esteja utilizai1do u1n cristal de


fcns. 1a 1 = 12 MHz e que os valores das co11stantes seJ·am iguais a 255, então o
tempo total da rotina é:

Tempo da rotina = 12*(2 + 5*255 + 3 *255*255)/( 12M) :: 196 1nseg:: O, 196 seg.

6.2.3 - Eliminando o ritído (bounce) gerado por chaves mecânicas: quando se


aciona uma cllave mecânica, a 1nesma gera um ruído tra11sitório, co1no é 1nos-
trado 11a Figura 6.7.
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 139

Aberta (1 lógico)
Vcc Saída
V\J\j\__ Fe_c_h_a_da_(O_l_óg_ico)

Rpullup

~ o ---------e Saída T > Toounoo

Figura 6. 7 Hardware de uma interface de entrada utilizando utna chave n1ecâníca e seu
sinal elétrico de saída enfatizando o ruído gerado pelo chaveamento.

O ruído (bounce) gerado pelo seu cl1aveamento interfere diretame11te no


monitoramento por software do acionamento e do desacionamento dessa cha-
ve, quando se utiliza as portas. Assim, esse ruído deve ser levado em consi-
deração, quando da elaboração da rotina de monitoração do acionamento
dessa. chave 1necânica.
Dessa maneira, a estratégia de implementação de uma rotina que monitora
o acionamento e o desacionamento de u1na chave 1necânica é a seguit1te:
a) verificar continuamente a ocorrência de um acionamento ou de um
desaciona1nento;
b) uma vez verificado que oco1Teu um acionamento ou um desacio11amento,
deve-se esperar um tempo T (T > Tbounce ), utilizando-se uma rotina de
tempo por software;
c) passado o tempo T, deve-se verificar novamente se o acionamento ou o
desaciona1nento realme11te ocorreu (muitas vezes, o acionrunento é fal-
so), ou seja, é preciso confirmar o acionamento ou o desacionamento.
Em caso positivo, a rotina deve deixar o programa prosseguir para ini-
ciar novas atividades. Em caso negativo, isso significa que a cl1ave não
foi realmente acionada (essa situação é facilmente simulada por u1n ope-
rador, por meio do posicionamento de uma chave em seu limite de
acionamento) e, assim, a rotina deve voltar para o primeiro passo.
Outra forma de eli1ninar o ruído de uma chave mecâruca é por meio da
utilização de l1ardware adicional, por exemplo, utiliza11do um mo11oestável
ou portas NANO corúiguradas co1no flip-flop do tipo RS, ligados ao piI10 de
saída da interface, como na Figura 6.7 apresentada anteriormente.
Um exem.plo de rotina para monitorar o acionamento de u1na c11a.v e
mecânica qualquer, levando-se em consideração o ruído (bou.nce), é apresen-
tado, a seguir, na Figura 6.8, que trunbém mostra o programa-fonte da mes-
ma rotina, poré1n, já iI1cluiI1do a rotina de tempo. A constante 1 e a constante
2 podem assumir valores de OOH a FFH.
140 MICROC0NTR0LAD0RES 8051 Cap. 6

Detecção de acionamento de uma chave


mecânica com eliminação de bounce

(A)~ #OFFh addr1 : MOV A, #OFFh


(C) ~ #Ob CLR C
(A) <- (A) - (C) - (P1) SUBB A,P1

s
(A)= O?
JZ addr1
(Chaves abertas?)

Chama a sub-rotina de tempo ACALL tempo

(A)~ #OFFh MOV A, #OFFh


(C) ~ #Ob CLR C
(A) <- (A) - (C) - (P1) SUBB A,P1

N
s
(A)= O?
JZ addr1
(Chaves abertas?)

Fim

Fi~ura 6.8(a) Fluxograma de uma rotina que monitora o acio11amento de uma chave
mecâ11ica qualquer com eliminação de ruído (bounce) .
AS PORTAS ( PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 141

WAIT: l'vlOV A,#OFFh ; Aguarda o acionan1ento de un1a porta


CLR e
SUBB A,Pl
JZ \VAIT
tv!OV RO,#constante 1 ; Rotina de atraso de tcrnpo
ATRAS: tvlOV R l ,#constante2
DJNZ RI ,$
D.JNZ RO, ATRAS
tvlOV A,#OFFh ; Contínua o fechamento
CLR e
SUBB A,PJ
JZ \VAIT ; Foi algun1 ruído do acionarnento, reinicia o processo
; de detecção de acionamento
END ; Confirrnado o acionarnento

Figura 6.8(b) Programa-fonte de uni.a rotil1a que monitora o acio11amento de ttma cha-
ve mecânica qualquer com elin1inação de ruído (bounce).

6.2.4 - Como co11tar o número de acionamentos e desacionamentos de uma cha-


ve qualquer: o programa a seguir co11ta o número de acionamentos e desacio-
namentos do bit de uma porta qttalquer.
Na Figura 6. 9, são apresentados o fluxograma e o programa-fonte da sub-
rotina que 1nonitora o desacionamento de uma chave mecânica qualquer.
Na Figura 6.10, é apresentado o programa estruturado (fluxograma e
programa-fonte) utilizando-se u1n membro da família de microcontroladores
da Intel, que conta o 11úmero de acionamentos e desacio11amentos de uma
cl1ave mecânica qualquer, com a eliminação do ruído de chaveamento (boitnce).
Repare que foram utilizadas duas sub-rotinas:
a) sub-rotina que monitora o acioname11to;
b) sub-rotina que mo11itora o desacio11a1nento.
Cada vez que uma chave é acionada e desacionada, é adicionada uma
u.nidade ao co.n teúdo do registrador R2 (i1ucialmente, ele vale zero). Repare
també1n que é preciso transformar a rotil1a de monitoramento de acio11amento
de uma chave qualquer com elimi11ação de ruído de chaveamento (Figura
6.8) em sub-roti11a. Isso é feito si1nplesmente trocando-se Filn por RET.
142 MICROC0NTR0LAD0RES 8051 Cap. 6

Detecção de desacionamento de uma chave


mecânica com eliminação de bounce

(A) ~#OFFh addr1 : MOV A, #OFFh


(C) ~#Ob CLR C
(A)~ (A) - (C) - (P1) SUBB A,P1

s
(A)* O?
JZ addr1
(Chave acionada?)

Chama a sub-rotina de tempo ACALL tempo

(A) ~#OFFh MOV A, #OFFh


(C) ~ #Ob CLR c
(A) ~ (A) - (C) - (P1) SUBB A,P1

s
(A)* O?
JZ addr1
(Chaves acionada?)

RET

Fi~ura 6.9 Fluxograma e programa-fonte de uma rotina que monitora o desacionamento


de uma chave mecânica qualquer co1n elitninação de ruído (bounce).
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 143

Número de acionamentos e
desacionamentos de uma chave mecânica
qualquer com eliminação de bounce

(R2) ~ #OOh addr1 : MOV R2, #OOh

.•
.. ACALL ACIONA
Chama sub-rotina ACIONA
Chama sub-rotina DESACIONA ..
ACALL DESACIONA

(R2) ~ (R2) + 1 -
• INC R2

, '
- · ·· - ·..· - ·-·- ·..·· --·· -..·- -..,..- .....- .....- ···- ···-.. SJMP addr1
-
Fif}ura 6.10 Fluxograma e programa-fonte que cor1ta o número de acio11amentos e desacio-
11amen tos de uma chave mecânica qualquer com elimi11ação de ruído (bounce).

A seguir, é apresentado ape11as o programa-fonte que conta o número


de acionamentos e desacionamentos se1n utilizar sub-rotinas.

MOV R2,#00h
WAITl: MOV A,#OFFh ; Aguarda o aciona1nento de un1a porta
CLR e
SUBB A,Pl
JZ \VAITI
MOV RO,#constantel ; Rotina de atraso de tempo
ATRAS: ~ifOV R 1,#constantc2
DJNZ RI ,$
DJNZ RO, ATRAS
MOV A #OFFh ; Confinna o acionarnento
CLR e'
SUBB A,PI
JZ WAITJ
WAIT2: MOV l\ #OFFh ; Aguarda o dcsacionan1cnto do bit da porta
'
CLR e
SUBB A,P I
JNZ WAJT2
MOV RO,#constante 1 ; Rotina de atraso de ternpo
ATRAS: MOV R 1,#constante2
DJNZ RI ,$
DJNZ RO, ATRAS
MOV A,#OFFh ; Confinna o dcsaciona111cnto
CLR e
SUBB .A,PI
JNZ WAIT2
INC R2 ; Conta quantos acionarncntos e
desacionamcntos ocorreram
SJMP \Vi\lTI
144 MICROC0NTR0LAD0RES 8051 Cap. 6

Exercício resolvido
1 - Apresente apenas o programa-fonte que identifica o número da
cl1ave acionada.
Solução:
\VAITI: MOV A,#OFFh ; Aguarda o aciona111ento de unia porta
CLR e
SUBB A,Pl
JZ \\/AlT I
MOV RO,#constante 1 ; Rotina de tempo
ATRAS: MOV R 1,# constantc2
DJNZ :R 1,$
DJNZ RO, ATRAS
MOV A,#OFFh ; Confinna acionamento
CLR e
SUBB A,Pl
JZ WATT!
M.OV R2,#00h ; Identificação do número do bit acionado (vai. inic.=O)
MOV A ,PI
ROTA: RRC A ; Rotaciona para a direita comjlt,g car,y-bit
JNC OK ; Se (C) = O (o ' bit' foi acionado) => fin1, caso contrário
INC R2 ; incrementa o número do bit (O a 7)
SJMP ROTA ; esse bit ainda não foi acionado
OK: END

Exercícios e questões propostos


1 - Considerando o exercício resolvido 1:
a) obtenha o fluxograma a partir do programa-fonte;
b) faça o fluxograma e o programa-fonte de maneira estruturada (uti-
lizando sub-rotinas).
2 - Faça os seguintes fluxogramas e programas-fonte estruturados, em
Assembly, utilizando um dos membros da família de microcon-
troladores MCS-51, considerand.o que, à porta O, está ligada uma
interface de entrada com um. dip switch de oito chaves (1: chave aber-
ta e O: chave fechada), e que, à porta 1, está ligado um conjunto de
oito leds (lógica positiva: O lógico desativa led e 1 lógico aciona led).
AS PORTAS (PORTES) DE ENTRADA E SAÍDA E SUAS APLICAÇÕES 145

2.1 - Faça um programa estruturado que mostre um contador bil1á-


rio decrescente nos leds, sempre que a chave 2 for acionada (con-
siderar o bounce). A mformação sobre a contagem deve ser mos-
trada durante um período de 0,6 segundo no conjunto de leds.
2.2 - Faça um progrruna estruturado que mostre um contador deci-
mal cresce11te nos leds, sempre que as chaves 2 e 4 forem acio-
nadas (considerar o bounce) e desacionadas. A mformação da
contagem deve ser mostrada dura11te um período de 0,8 segun-
do n.o conjunto de leds em modo piscante.
2.3 - Faça um programa estruturado que mostre um contador de nú-
meros pares crescentes nos leds, se1npre que a chave 3 ou 4 for
acionada (considerar o bounce) e desacionada. A informação so-
bre a contagem deve ser mostrada durante um período de 0,1
segundo no conjunto de leds.
2.4 - Faça um programa estruturado que, sempre que a mformação
no dip switch for igual a AAh, calcule a quantidade de números
menores e iguais a 36h do buffer de memória, cujo endereço
inicial é 40h e o final é 60h. O resultado deve 'piscar' 10 vezes
com uma freqüência de 0,5 segundo no conjunto de leds.
2.5 - Calcule a quantidade de números ímpares de um buffer de me-
mória cujo endereço micial é 30h e o endereço final é 55h, sem-
pre que as ch aves ligadas à porta O tiverem o padrão 6Dl1. A
quantidade de números positivos deve ficar piscand.o (a cada
0,9 segundo) nos leds ligados à porta 1.
2.6 - Faça um programa que mostre as seguintes mformações no con-
junto de leds, por 0,3 segundo, sempre que as chaves 5 e 7 fo-
rem acionadas e que a chave 7 estiver desacionada.
led 7 led 6 led 5 led 4 led 3 led 2 led 1 led O
.
o o o o o o o 1 . •
o o o o o o 1 o
o o o o o 1 o o
o o o o l o o o
o o o 1 o o o o
o o l o o o o o
o l o o o o o o
1 o o o o o o o
146 MICROC0NTR0LAD0RES 8051 Cap. 6

2.7 - Faça um programa que mostre as seguintes informações no con-


junto de leds, por 0,25 segundo, sempre que a chave 3 estiver
acionada e a chave 7 estiver desacionada.
led 7 led 6 led 5 led 4 led 3 led 2 led l led O
o o o l l o o o .
'
o o l o o l o o
o l o o o o l o
o o o o o o .
l l -
capítulo

Os T1MERS/CoNTADORES

7.1 Objetivos
•!• Apresentar as interrupções da família de microcontroladores
MCS-51
•!• O nível de prioridade das interrupções
•!• Os timerslcontadores da família de microcontroladores MSC-51
•!• Os modos de programação dos timerslcontadores
•!• Projetos utilizando os timerslcontadores

7.2 lntroducão

teórica
O estudo detalhado do sistema de interrupções da fa mília d.e microcontro-
ladores MCS-51 se faz necessário antes do estudo dos tí111ers/ contadores.
7.2.1 - Interrupções: a fainília de microcontroladores MCS-51 possui cinco
fo11tes de in.terntpção (seis, no caso dos microcontroladores 8x32/8x52 ).
Define-se interrupção como uma solicitação ou requisição feita ao mi-
croprocessador para o processam.e11to de uma sub-rotina específica adicio-
nal, além das sub-rotinas requisitadas pelo programa principal. Essas sub-
rotinas deve1n estar alocadas em posições de m emória de prograina em en-
dereços específicos, definidos pelo fabricai1te.
As interrupções, na família de microcontroladores MCS-51, são geradas
por sinais elétricos vindos de dispositivos internos (ti111ers/ contadores ou canal
de comunicação serial) ou de dispositivos externos (interfaces eletrônicas que
monitora1n u1na determinada variável de controle, como temperatura, pres-
são, velocidade etc., e que estã.o liga.das às e11tradas de interrupções externas
Oe 1 d.o microcontrolador). Assitn, sempre que um dispositivo necessitar de
148 MICROCONTROLADORES 8051 Cap. 7

um atendimento por parte do microprocessador, ele vai gerar um sinal elétri-


co digital de i11terrupção (O lógico), por m.eio de hardware, para o micropro-
cessador. Após o microprocessador reconhecer a solicitação de interrupção,
ele finalizará a execução da instrução que estava sendo executada; e, se tal
inten·upção estiver habilitada, o mesmo atenderá a essa solicitação de inter-
rupção. Isso é feito por meio da execução automática, por hardware, de uma
instrução de chamada à sub-rotina 11LCALL eridereço predefinido pelo fabrican-
te", pelo microprocessador. A sub-rotina de atendimento a essa interrupção,
obviame11te, deverá ter sido armazenada no respectivo endereço de memó-
ria de progra1na pelo programador. Cada fonte de interrupção te1n um ende-
reço de memória predefinido pelo fabrica11te e, assim, o microprocessador
executará uma sub-roti11a de atendimento à interrupção a partir de tal ende-
reço. Toda sub-rotina de atendimento a uma fonte de interrupção deve apre-
sentar, como característica fundamental, termi11ar co1n a instrução RETI
(Retur11. Interruption). Assim, ao executar a instrução RETI, o microprocessa-
dor retornará o processamento para uma instrução imediatame11te após aquela
instrução quando foi detectada a solicitação da interrupção.
Repare que o ate11dimento a uma fonte de interrupção funciona de ma-
neira similar a uma chamada à sub-rotina. A única diferença é que, para cha-
mar uma sub-rotina por software, a instrução 11LCALL endereço ·inicial da.
subrotina" deve fazer parte do programa-fonte, e, para o microprocessador
atender à solicitação de uma fo11te de interrupção, é executada, por hardware,
uma instrução "LCALL e11dereço predefinido pelo fabricante", que não faz parte
do programa-fonte.
A instrução 11 LCALL e11dereço predefinido pelo fabricante" te1n uma carac-
terística especial. Ela não calcula o endereço da próxima i11strução a ser exe-
cutada, como a instrução "LCALL endereço inicial da subrotina". Essa instrução
si1nplesmente armazena o endereço da próxima instrução a ser executada 11a
pilha quando foi gerada pela instrução em que foi reconhecida e atendida a
interrupção. A Tabela 7.1 exemplifica o que foi exposto anteriormente.
Tabela 7.1 Descrição da instrução LCALL vetor de interrupção.

Instrução Bytes Ciclos Codificação Representação Instrução Representação


sin1bólica sin1bólica
LCALL 3 2 0001 0010 (PC) ~ (PC) + 3 LCALL (PC) ~ (PC) + 3
addr, 6 addr,.s.s addr,.0 (SP) ~ (SP) + l endereço (SP) ~ (SP) + l
(sub- ((SP)) ~ (PC,.,.) predefinido ((SP)) ~ (PC,.0 )
rotina) (SP +- (SP) + 1 pelo (SP +- (SP) + 1
((SP)) ~ (PC,.s.s) fabricante ((SP)) ~ (PC,.s.,)
(PC) ~ addr,6 (inte1Tupçâo) (PC) ~ addr 16
OS TIMERS/CONTADORES 149

Repare ta1nbém que, para ente11der o processo de atendimento a uma


fonte de interrupção, é necessário apenas compreender o princípio de funcio-
11amento de uma cha1na.da à sub-rotina, ou seja, mais especificame11te, enten-
der como as instruções LCALL e RET funcionam.
Existem duas entradas de interrupção exter11as (INTO\ e INTl \), que
são ativadas por nível ou por borda de descida, dependendo dos valores dos
bits ITO e ITl do registrador TCON. Os fiags que gerain essas interrupções
são os bits IEO e IEl de TCON.
Quru1do uma interrupção externa é gerada, o fiag que a gerou é zerado
por hardware se a sub-roti11a de atendimento a essa interrupção é vetorizada
(endereçada), 'se e somente se' a interrupção foi programada para ser se11sí-
vel à borda de descida. Caso a interrupção tenl1a sido programada para ser
sensível ao nível, então a fonte de requisição externa controlará o fiag
requisitante d.a interrupção e deverá ser zerado da sub-rotina de atendimen-
to à fonte de interrupção.
Existem mais duas fontes de interrupção geradas pelo excesso de conta-
gem crescente (overflow) dos registradores de co11tage1n dos ti1ners/ contado-
res 1 e 2. TFO e TFl são setados pelo estouro dos registradores de contagem
(111 ...111 ~ 000 ... 000), exceto quando o ti1ner/ contador Ooperar 110 modo 3.
Quando ocorre uma interrupção de ti1ner/ contador, o fia.g que a gerou é
zerado por l1ardware se a sub-rotina de atendimento a essa fo11te de inter-
rupção for vetorizada (endereçada).
Existe mais u1na fonte de interrupção, aquela referente ao canal de
com11nicação da porta serial, que é gerada pela lógica OR entre RI e TI.
Ne11hum desses fiags é zerado por l1ardware quando a rotina de atendimen-
to a essa fonte de interrupção é vetorizada (endereçada). De fato, a rotina
de serviço dessa fonte de interrupção normalmente terá de determinar se
foi RI ou TI que gerou a i11terrupção, e o bit deverá ser zerado por 1neio de
software.
Todos os bits que geram interrupções pode1n ser setados ou resetados por
software, com o mesmo resultado com que ele é setado e resetado por hardware.
Isso significa que as i11terrupções podem ser geradas por software ou que as
interrupções pendentes também podem ser canceladas por software.
Cada uma dessas fontes de interrupção pode ser indi,,idualmente l1abi-
litada ou desabilitada por meio de alguns bits do registrador de função espe-
cial IE (O: desabilita a fonte de interrupção; 1: habilita a fonte de interrupção).
Ele também conté1n um bit desabilitador global, chamado de EA, que é ca-
paz de desabilitar todas as interrupções de uma só vez.
150 MICROC0NTR0LAD0RES 8051 Cap. 7

1 - Estrutura do 11ível de prioridade das interrupções: cada fonte de i11terrupção


pode ser individualmente programada para ter um dos dois níveis de
prioridade. Isso é feito por meio do registrador de função especial IP -
Interrupt Priority (O: pri.oridade menor; 1: prioridade maior).
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit l bit o
(IP) = j PT2 j PS ! PT! PXI PTO PXO
Bit de prioridade = 1. ~ a1ribui alta prioridade;
Bit de prioridade= O ~ atribui baixa prioridade;

Símbolo Posição Função


- IP.7 Reservada
- IP.6 Reservada
PT2 IP.5 Bit de prioridade da fonte de intern1pção do ri,nerlcontador 2
PS IP.4 Bit de prioridade da fonte de interruocão do canal de co1nunicação serial
PTI IP.3 Bit de prioiidade da fonte de interrupção do ri,nerlcontador 1
PXI IP.2 Bit de p1ioridade da fonte de inten11pção externa 1
PTO IP. l Bit de prioridade da fonte de intern1pção do ri111erlcon1ador O
PXO IP.O Bit de prio1idade da fonte de intern1pção externa O

uma fo11te de interrupção de baixa prioridade pode ser interrompida


por uma fonte de inten·upção de alta prioridade;
uma fonte de interrupção de alta prioridade não pode ser interrompida
por uma fonte de inten·upção de baixa prioridade;
se duas fontes de interrupção com prioridades diferentes se manifes-
tarem a.o 1nesmo tempo, a qu.e t iver maior nível de prioridade será
atend ida;
se duas fontes de interrupção com a mesma prioridade se manifesta-
rem ao mesmo tempo, uma seqüência de varredura (polli11g) de ate11di-
mento determinará qual fonte de i11terrupção será atendida, conforme
a Tabela 7.2.
Tabela 7.2 Fo11te de interrupção e 1úvel de prioridade.

l.ten1 Fonte ele interrupção Nível dentro da 1nesn1a prioridade


1 IEO (++++++) Nlaior
2 TFO (+++++)
3 [El (++++)
4 TF L (+++)
5 RI + TI (++)
6 TF2 + EXF2 (+) Menor

2 - O registrador de habilitador de í11terrupção IE (endereçável por bit): se o bit for


colocado por software e1n O lógico, a fo11te de interrupção correspon-
dente será desabilitada, caso contrário, será habilitada.
OS Tl1\AERS/CONTADORES 151

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit l bit o


(IE) = EA ET2 ES ETI EXI ETO EXO

Símbolo Posição Função


EA IE.7 Desabilitador geral de interrupções (0: nenhurna intern1pção é reconhecida;
1: cada fon1e de in1en·upção é individualrnente habilitada ou desabilitada por
setar ou zerar seu bit habilitador)
- lE.6 Reservada
ET2 IE.5 Habilita/desabilita a fonte de intern,pção de overjloH, ou captura a partir do
tiiner 2
ES IE.4 Habilita/desabilita a fonte de interrupção do canal de comunicação serial
ET I IE.3 Habilita/desabilita a fonte de intern1pção de overjlo}v do tin,er 1
EXI íE.2 Habilita/desabilita a fonte de intenuocão externa 1
ETO IE. l Habilita/desabilita a fonte de intenuocão de over{lo}v do ti111er O
EXO !E.O Habilita/desabilita a fonte de intern1pção externa O

Observação: não é recomendada a utilização de bits reservados (IE.6),


pois 11ovos produtos poderão utilizar tais bits.

3 - Co1110 as interrupções são manipu.ladas: os fl.ags relativos a cada fonte de


interrupção são mostrados em S5P2 de todo o ciclo de máqu ina. As
amostragens são interpretadas (polled) durante o ciclo de máquina
seguinte ao qual o siste1na de interrupção gera um LCALL por
hardware, para executar a rotit1a de atendimento apropriada à fonte
de interrupção.
Qualquer u1na das condições a seguir bloqueará a geração do LCALL,
gerad.a por hardware:
uma i11terrupção de nível igual ou superior já está sendo processada;
o ciclo de interpretação atual (polling) não está no final da execução da
instrução que está sendo processada. Isso garante que a instrução que
está em progresso seja concluída antes de vetorizar qualquer rotina de
atendimento à fonte de interrupção;
a instrução que está sendo processada é RETI ou a instrução que escreve
110 registrador IE ou IP.

O LCALL é gerado por hardware e coloca o conteúdo do registrador


Progra111 Cou11ter (PC) na pilha (mas não grava o conteúdo do registrador de
função especial PSW, isso deve ser feito por software, pela rotina de atendi-
mento da fonte de inten-upção), e recarrega o conteúdo do registrador Progran1
Coun.ter (PC) com um endereço que depende da fonte de interrupção que
está serldo vetoriza.d a de acordo corn a Tabela 7.3.
152 MICR0C0NTR0LAD0RES 8051 Cap. 7

Tabela 7.3 Fonte de interrupção e endereço vetor.

Fonte ele Endereço


No1ne ela fonte de interrupção
interrupção elo vetor
RESET Reset 0000h
TEO Fonte de interrupção externa O 0003h
TFO Fonte de intemiocão do ti111er!con1ador O OOOBh
JEl Fonte de interrupção externa l 0013h
TFI Fonte de interruoção do 1in1er/contador l OOIBh
RI + TI Fonte de interrupção do canal de comunicação serial 0023h
TF2+ EXF2 Fonte de interruoção do tiiner/contador 2 + externa 2 0028h

Quando a fonte de iI1terrupção é vetorizada e atendida, o programa


executa a sub-rotina armaze11ada no endereço da 1ne1nória de programa, in-
dicado na Tabela 7.3, até que a instrução RETI seja processada.
A instrução RETI informa ao microprocessador que a sub-rotina de aten-
dimento à fonte de interrupção não está mais sendo executada, depois ela lê
os dois bytes que estão 110 topo d a pilha e recarrega o co11teúdo do registra-
dor Prograni Coitnter (PC) co1n o endereço d e retorno ao programa principal.
Dessa mai1eira, a execução do programa conti11ua a partiI· da i11strução na
qual a i11terrupção foi atendida.
Para utilizar qualquer interrupção do MCS-51, as seguintes etapas de-
vem ser seguidas:
setar para 1 lógico o conteúdo do bit EA do registrador Interrupt Enable
IE;
setar para 1 lógico o conteúdo dos bits l1abilitadores de fontes de inter-
rupção, i11dividualmente;
iniciar as rotiI1as de atendimento às fontes de interrupção no endereço
correspondente ao vetor da interrupção, conforme tabela anterior;
para as i11terrupções externas, setar os pi11os INTO/ e INTl/ (P3.2 e P3.3)
para 1 lógico e, caso a fonte de inten·upção seja ativada por nível ou
transição, os bits ITO e ITl 110 registrador TCON podem precisar ser
setados para 1 lógico (ITX = O => ativado por nível; ITX = 1 => ativado
por transição).
7.2.2 - Ti1ners/Contadores: o 8051 tem dois registradores dos timers/ conta-
dores de 16 bits (timer/contador Oe 1). O 8052 tem mais um (timer/contador
2). Todos os três podem ser configurados para operar como tinier ou como
contador de eventos.
OS Tl1\i1ERS/C0NTAD0RES 153

Na fu11ção tin1er, o registrador de contagem é adicionado a todo ciclo de


máquina. Assitn, pode-se dizer que ele é um contador de ciclos de máquina.
Como o ciclo de máquina possui doze períodos de clock do oscilador, a razão
de contagem é 1/12 da freqüê11cia do cristal.
Na função contador, o registrador é adicionado em resposta a uma tran-
sição de 1 para O em seu pino de entrada exter11a correspondente, TO ou Tl
no 8051 e T2 110 8052. Como ela leva dois ciclos de máquina (24 períodos de
clock do oscilador), a razão de contagem máxima é 1/24 da freqüência do
oscilador.
Não existe restrição algu1na no período ativo do sinal de entrada exter-
na, mas para assegurar que um determinado 11ível seja amostrado ao menos
uma vez antes de se modificar, ele deveria ser mantido, pelo menos, por um
ciclo de máquina completo.
Na seleção de timer ou contador, os tiniers O e 1 têm quatro 1nodos de
operação, enquanto o timer 2 tem apenas três modos de operação: captura,
recarregamento automático e gerador de baud rate (razão de recepção/ trans-
1nissão de dados na comunicação serial).
a) Tim.er O e Timer 1: ambos sã.o apresentados no 8051 e 8052. A função de
ti111er ou contador é selecionada pelo bit de co11trole Cf[b do registra-
dor de função especial TMOD. "''"

Esses dois tiTners/ contadores tê1n quatro modos de operação selecio-


11ados pelos bits (Ml,MO) do registrador de função especial TMOD. Os mo-
dos O, 1 e 2 são iguais para a1nbos os ti1ners/ contadores. O modo 3 é dife-
rente.
a.1) Registrador de controle de modo do timer/contador:

.---···-·-··--·---------··----·-------·-~-----------·--······----------·--·-···
' Ti,ner 1 Ti111er O •
T~10D = GATE I C/n I MI I MO GATE I cm I MI I NIO

Sírnbolo Posição Função


GATE IE.7 Controle de acionamento:
=
O: O 1iTner X é habilitado se111pre TRX l (contage1n controlada por software);
1: O li,nerlcontador é habilitado so1nen1e enquanto o pino INTX =
=
l e TRX (em TCON) 1 (contagem controlada por software e hardware);
w.Hll IE.6 Seletor de lin1er ou contador:
O: define operação iirner (entrada de clock do sistenia interno= f """/ 12)
1: define operação contador (entrada de clock por meio do pino externo TX).
MI IE.5 Bits progran1adores de modo de operação.
MO IE.4 Bits prograniadores de niodo de operação.
154 MICROC0NTR0LAD0RES 8051 Cap. 7

l.\tll l\'10 J.\ll odo de operação


o o 76 , 4 ;1110 4J2 1 D

O: timer co111 l3 bits de contagern (THX8 = xxxx xxxx TLX 5 = ***x xxxx)
contagen1 inicial: ( 0000 0000 ***O 0000)
.. ..
contagen1 final: ( 11111111 *** 11111 )
o 1 1: ti111erlcontador de 16 bits (THX8 TLX 8) 16
1 o 2: ti111erlcontador de 8 bitS recarregan1ento automático.
A cada interrupção, o registrador de contage,n (TLX) é recarregado auto1natican1ente
co1n o valor inicializado no registrador de recan·ega,nento (THX)

Registrador de Contagem Registrador de Recarregamento


(TLX 8 = xxxx xxxx) ~ (THX, = valor a ser reca1Tegado no registrador de contagem)
1 1 3:
ti111er O:
- TLO é un1 ti1T1.er/contador de 8 bits, controlado pelos bits de controle do ti111er O.
- THO é simplesmente un1 Li1ner de 8 bits, controlado pelos bits de controle tirner 1.
ti111er 1: parado.

O b servação: X= Oou 1.

7.3 Modos de operação


Os ti111ers/ contadores podem traball1ar em quatro modos de operação dife-
rentes (modo Oa 1nodo 3):
a) Modo O: é um timer / contador de 13 bits, sendo 8 bits do registrador THX
e apenas 5 bits do registrador TLX (Figura 7.1).
Quando o registrador d e contagem excede sua contagem (em inglês, se
diz overflow), ou seja, a contagem vai de 1111 1111 xxxl 1111 ® 0000 0000 xxxO
0000, o fla.g de interrupção TFX é seta.do. Se a interrupção do ti1ner/ contador
estiver habilitada, a interrupção será reconhecida e gerada uma instru.ção
LCALL endereço vetor (endereço vetor: OOOBh para o ti1rzer / contador Oe 001Bh
para o tin1er / contador 1).
A contagem é habilitada para o ti1ner/ contador somente quat1do TRl = 1
e o Gate = Oou INTXbarra = 1.
Quando Gate = 1, o timer/ contador pode ser controlado pela entrad.a
exter11a INTXbarra. u ·1na das aplicações desse tipo de uso dos tin2ers/ conta-
dores serve para a obtenção das medidas de largura de pulso elétrico, gera-
das por interfaces de leitores de código de barras, código 1nagnético etc.
A operação em m.o do Oé a mes1na para am.b os os ti1ners/ contadores.
Existem dois bits dife rentes de Gates, um para o ti1ner / contador 1
(TMOD.7) e um para o ti1ner/ contador O (TMOD.3).
TRl é um bit de controle de liga e desliga que está co11tido no registra-
dor de função especial TCON, como é mostrado a seguir.
OS Tl1\i1ERS/C0NTAD0RES 155

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit o


(TCON) = TF I TR I TFO TRO fE I IT 1. rEO ITO

Símbolo Posição Non1c e significado


TF I TCON.7 Flag de over/10111 do 1i,11erlcontador J: setado por hardware no overJlo,v do
ti111er/con1ador 1. Zerado por hard,vare quando o processador vetoriza
(endereça) a rotina de atendin1ento à fonte de interrupção do tiinerlcontador
1 (001 Bh).
TRI TCON .6 Bit de controle para ligar/desligar o tiiner/contador l.
setado/excluído por soft,vare para ativar ou desativar o ti111er/contador 1.
TFO TCON.5 Flag de ove1jlo111do ti111erlcontador O: setado por hardware no overjlo1v do
ti111.er/contador O. Zerado por hard,vare quando o processador vetoriza
(endereça) para a rotina de atendimenlo à fonle de interrupção do tüner/contador
1 (OOOBh).
TRO TCON.4 Bit de controle para ligar/desligar o tiiner/contador O.
Setadolzerado por sofl\vare para ativar ou desativar o ti,nerlcontador O.
IEI TCON.3 F/ag de detecção de borda de interrupção 1. Setadolzerado por hardware
quando unn1 margen1 da interrupção externa é detectada. Excluído quando
a interrupção é processada.
ITI TCON.2 Bit de controle do tipo da interrupção 1. Selado/zerado por soft,vare
para especificar o tipo de detecção da interrupção externa L se é por
borda de descida ou nível baixo.
IEO TCON.I Flag de detecção de borda da interrupção O. Setado/zerado por hardivare
quando u,na n1argem da int.errupção externa é detectada.
Zerado quando a interrupção é processada.
ITO TCON.O Bit de controle do tipo da interrupção 1. Selado/zerado por sofc,vare
para especificar o tipo de detecção da interrupção externa O, se é por
borda de descida ou nível baixo.

Oscilador .,. 12 Flag de


Controle interrupção
Cffbarra = O THX8 THX

Cffbarra = 1
TX pino Registradores de
contagem Interrupção

TRX

Porta
GATE ANO

Porta OR
INTXbarra

Figura 7.1 T'irner/contador no Modo Ode operação (13 bits de contagem).


156 MICROC0NTR0LAD0RES 8051 Cap. 7

b) Modo 1: é u1n timer/ co11tador de 16 bits. Apresenta o mesmo hardware


da Figura 7.1, porém o seu registrador de contage1n é de 16 bits (8 bits
do registrador THX e 8 bits do registrador TLX). Utilizado para gerar
tempos maiores.
c) Modo 2: é um contador de 8 bits com recarregamento automático (Figu-
ra 7.2).

O overflow do registrador de co11tagem TLX for TFX igual a 1 e trunbém


recarrega o registrador de co11tagem TLX com o conteúdo do registrador de
recarregamento automático THX. O registrador de recarregamento at1tomático
deve ser definido inicialmente por software com um determinado valor, para
gerar a contagem ou o tempo desejado. Quando ocorre o recarregamento, THX
não se modifica. O Modo 2 de operação é o mesmo para o tinier/ contador Oe 1.

Oscilador -;- 12 Registrador de Flag de


Controle contagem interrupção

C/Tbarra = O TFX

C/Tbarra =1
TX pino Interrupção

,<..._~ ~~ Recarregamento
TRX

Porta
GATE ANO

Porta OR
INTXbarra

Figura 7.2 Tirner/ contador no Modo 2 de operação (8 bits de contagem).

d) Modo 3: são dois timers/ contadores de 8 bits, sendo dois registradores


de contagem, nos quais o registrador de contagem TLO é corttrolado pe-
los bits de controle do timer/ contador O e o registrador de contagem
THO é controlado pelo bit de controle do tinier/contador 1 (TRl) e com
freqüência de contagem de fcrista 1/12 (Figura 7.3).
O timer / contador O, no Modo 3, define TLO e THO como dois registra-
dores de contagem separados.
O ti',ner/ contador 1, 110 Modo 3, silnplesmente é desabilitado para a con-
tagem. O efeito é o .m esmo que fazer TRl = O.
OS Tl1\i1ERS/C0NTAD0RES 1 57

O Modo 3 é fornecido para aplicações que exige1n um tin1er/ contador


extra de 8 bits. Com o timer/ contador O no Modo 3, pode parecer que o 8051
tem três timers/ contadores e que o 8052 tem quatro.

Registrador de
Oscilador + 12 Flag de
contagem
Controle interrupção
Cffbarra = O TLO

Cffbarra = 1
TO pino Interrupção

TRO

Porta
GATE ANO

Porta OR
INTObarra

Flag de
Controle interrupção

Oscilador
.. -;- 12 / "' TH08 .
. TF, .
.
'
Interrupção
TR1

Figura 7.3 Tirner/ contador no Modo 3 de operação (8 bits de contagem) .

7.4 Inicialização (setup) dos tímers/ contadores


As tabelas a seguir for11ecem alguns valores para TMOD, sendo que estes
podem ser utilizados para inicializar o timer/ contador Oem diferentes modos.
Considera-se que somente um tirner/ contador está se11do tttilizado por vez. Se
a idéia for executar os tiniers/contadores O e 1 si1nultaneamente e1n qualquer
1nodo, o valor em TMOD para o ti111er/ contador Odeve ser calculado por 1neio
da operação lógica OR, com o valor mostrado para o timer/contador 1.
Por exemplo, se for desejado executar o timer/ contador Ono Modo 1
Gate (controle externo) e o tin1er/ contador 1 no Modo 2 co1no contador, então
o valor que deverá ser carregado em TMOD é 69h (09h da primeira tabela OR
60h da última tabela).
Fazendo-se TRX = 1 em TCON os tiniers começam a contar.
158 MICROC0NTR0LAD0RES 8051 Cap. 7

a) Tirner/ contador O operando como um tinier:


TMOD
Controle interno Controle exten10
i\llodo Função do titner!contador O
(observação 1) (observacão 2)
o 'Ji,ner/contador de 13 bits OOh 08h
l Tt,ner/contador de 16 bits Olh 09h
2 8 büs - recarre!!ainento auto111ático 02h OAh
3 2 ti111erslcontadores de 8 bits 03h OBh

b) Timer/ contador O operando como u1n contador:


TMOD
Função do /ilner/contador O Controle interno Controle externo
Modo
(observação 1) (observacão 2)
o 'Ji,ner!contador de 13 bits 04h OCh
1 Tt,nerlcont.ador de 16 bits 05h OOh
2 8 bits - recarre!!a1nento auto111ático 06h OEh
3 2 ri,n.ers!contadores de 8 bits 07h OFh

c) Timer/ co11tador 1 operando co1no um tinier:


TMOD
Função do tinzer/contador O Controle interno Controle externo
i\llodo
(observação 1) (observação 2)
o 7i,ner/contador de 13 bits OOh 80h
1 Tt111erlcont.ador de 16 bits 10h 90h
2 8 bits - recarre!.>a111ento auto111ático 20h AOh
3 2 ti,n.ers/contadores de 8 bits 30h BOh

d) Timer / contador 1 operando como um contador:

TMOD
Função do tinzer/contador O Controle interno Controle externo
i\llodo
(observação 1) (observac.ão 2)
o 1i,nerlcontador de 13 bits 40h COh
1 Tt1ne1Jcontador de 16 bits SOh DOh
2 8 bits - recarre2'a1nento auto1nático 60h EOh
3 2 ti111.ers/contadores de 8 bits 70h FOh

Observação 1: o ti1ner / contador é ligado/ desligado por setar/ zerar o


bit TRX por software.
Observação 2: o timer/ contador é ligado/ desligado pela transição de 1
para Oem INTXbarra (P3.2) quando TRX = 1 (controle p or hardware).

e) Hardware do ti1ner: esta área mostra os conteúdos dos registradores de


cada timer.
OS Tl1\i1ERS/C0NTAD0RES 159

Objeto na tela Sín1bolo Tipo de informação Tan1anho


Tüner /contador TH/TL Hexadecimal 2 bvtes
Flaf!.S:
Ove1f[ow TF Binário 1 bit
Controle para executar TR Biná1io l bit
Controle de entrada externa G Binário l bit
Seletor T Binátio 1 bit
Controle de ,nodo MI MO Binário 2 bits

f) H ardware de interrupções: esta área mostra o conjunto de hardware


de interrupções do foco da cr·u:

Objeto na tela Sín1bolo Tipo de inforn1ação 1'an1anho


Re<>. habilitadores:
Todos A Binário 1 bit
Co,nunicação se,ial s Binário 1 bit
Tin1ers TO/TI/T2 Binário 1 bit
Inten11pções externas XO/Xl Binário 1 bit
Reg. ptioridades
Co,nunicação serial s Binário l bit
1/111ers TO/T I/T2 Binário 1 bit
Interrupções cxte111as XO/Xl Binário 1 bit
Flugs int. externas:
TriPfler (acionador) IT Binário 1 bit
Borda fE Binário 1 bit

Exercícios resolvidos
1 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly que utilize um dos me1nbros da família de microcontroladores
MCS-51 e que seja capaz de executar as seguintes atividades:

1.1 - Programe o tímer/ contador O no Modo O e no Modo 1. Ambos


os timers/ contadores devem ser ini cializados com o
valor FFOOh.

1.2 - Implemente uma sub-rotina capaz de aumentar em uma unidade o


conteúdo da porta Oe atualize o conteúd.o da porta 3 com o comple-
mento um do conteúdo da porta O. Essa sub-rotina deve ser armaze-
nada no conteúdo do endereço de memória de programa 0080h.

1.3 - Implemente uma rotina de ate11dimento à fonte de interrupção d.o


timer/ co11tador O, que rotacione o conteúdo da porta 1 um bit para a
esquerda. Assim, toda vez que ocorrer uma interrupção gerada pela
fonte de interrupção do timer/ contador O, o conteúdo da porta O
será rotacionado em um bit para a esquerda.
160 MICROCONTROLADORES 8051 Cap. 7

1.4 - Implemente uma rotina de atendimento à fonte de interrupção


do timer/ contador 1, que rotacione o conteúdo da porta 2 um
bit para a esquerda. Assim, toda vez que ocorrer uma interrup-
ção gerada pela fonte de interrupção do timer / contador 1, o con-
teúdo da porta 2 será rotacionado um bit para a esquerda.
1.5 - A rotina de atendimento à fonte de interrupção do tímer/ conta-
dor Odeve ser escrita no conteúdo do endereço de memória de
programa 0040h.
1.6 - A rotina de atendimento à fonte de interrupção do timer/ contador
1 deve ser escrita no endereço de memória de programa 0060h.
1.7 - O programa principal deve ser escrito no conteúdo do endereço
de memória de programa 0100h.

Rotina de atendimento à fonte de


interrupção do timer/contador O
(0040h)
TOINT: PUSH ACC
Salva (ACC) e (PSW) na pilha PUSH PSW
(THO) f- OFFh MOV THO,#OFFh
(A) f- {P1) MOV A,P1
Rotaciona o (A) um bit para a esquerda RL A
(P1) f - (A) MOV P1,A
Recupera (PSW) e (ACC) da pilha POP PSW
POP ACC

RETI RETI

RETI RETI
OS Tl1\i1ERS/C0NTAD0RES 161

Sub-rotina

'
(0080h)
(A)~ (PO) . SUBROT: MOV A,PO
(A) f - (A)+ 1 • INC A
.. MOV PO,A
(PO) f- (A)
(A) f - not (A) CPL A

(P3) f - (A) MOV P3,A

'

RET RET

Programa principal )

• {0100h)
.
(SP) ~ #30h PROGP: MOV SP,#30h
.
(TMOD) f- #10h MOV TMOD,#10h
(THO) ~ #OFFh MOV THO,#OFFh

(TLO) f- #OOh MOV TLO,#OOh


. MOV TH1 ,#0FFh
(TH1) ~ #OFFh
MOV TL 1,#00h
(TL1) f - #OOh
MOV IE,#8Ah
(IE) f- #8Ah
MOV TCON,#50h
(TCON) ~ #50h
MOV P0,#7Fh
(PO) ~ #7Fh .
• MOV P1 ,#0FEh
(P1) ~ #OFEh
MOV P2,P1
(P2) f- (P1)

.

Chama sub-rotina SUBROT


LOOP: ACALL SUBROT
SJMP LOOP

'
a - END

Fi~ura 7.4 Fluxogran1a e programa-fonte estruturado do exercício resolvido 1.


162 MICROCONTROLADORES 8051 Cap. 7

Exercícios e questões propostos


1 - Faça um programa estruturado (fluxograma e programa-fonte), em
Assembly, que utilize um dos membros da família de microcontroladores
MCS-51 e que seja capaz de executar as seguintes atividades:
1.1 - Programar o timer/contador Ono Modo 1.

1.2 - Programar o timer/ contador 1 no Modo 2.


1.3 - O timer/ contador O deve gerar interrupções a cada 2 mseg.
1.4 - O tinier/contador 1 deve gerar interrupções a cada 100 mseg.
1.5 - Implementar um.a sub-rotina que seja ca.p az de calcular a quan-
tidade de números diferentes de 7Fh e que apresentam o bit 3
igual a 1 do buffer de memória que vai da posição de memória
53h a 7Ch. O resultado deve ser colocado no conteúdo da porta
3 por 0,5 segundo. Essa sub-rotina deve ser armazenada no en-
dereço de memória de programa 0090h.
1.6 - Implern.e ntar uma sub-rotina de atendirn.e nto à fonte de interrup-
ção do timer/ contador O, que faz a porta Oser um contador as-
cendente binário.
1.7 - Implementar uma sub-rotina de atendimento à fonte de interrup-
ção do timer/ contador 1, que faz a porta 2 ser um contador des-
cendente hexadecimal.
1.8 - A sub-rotina de atendimento à fonte de interrupção do timer/
contador Odeve ser escrita no endereço de memória de progra-
ma 0050h.
1.9 - A sub-rotina de ate11dimento à fonte de interrupção do timer/
contador 1 deve ser escrita no endereço de memória de progra-
ma 0070h.

1.10 - O programa principal deve ser escrito no endereço de memória


de programa 0200h.
2 - Faça um programa estruturado (fluxograma e programa-fonte), em
Assembly, que utilize um dos rn.e mbros da família de microco11tro-
ladores MCS-51 e que seja capaz de executar as seguintes atividades:
OS Tl1\i\ERS/C0NTAD0RES 163

2.1 - Programar os ti111ers/ contadores Ono Modo 3.


2.2 - Um dos tiniers / contadores deve ser inicializado com o valor 33h.
2.3 - O outro ti1ner / contador deve ser inicializado com o valor 55h.

2.4 - Implementar uma sub-rotina que seja capaz de calcular a quan-


tidade de números diferentes de 99h e que apresentam o bit 7
igual a Odo buffer de memória que vai d.a posição de memória
36h a 6111. O resultado deve ser colocado no conteúdo da porta
2 por 1 mseg de forma piscante. Essa sub-rotina deve ser arma-
zenada no endereço de memória de programa 009Fh.
2.5 - Implementar uma sub-rotina de atendimento à fonte de interrup-
ção do timer/ contador O, que faça a porta 3 ser um contador
ascendente decimal.
2.6 - Implementar uma sub-rotina de atendimento à fonte de interrup-
ção do timer/ contador 1, que faça a porta O ser um contador
decimal de números ímpares.
2.7 - A sub-rotina de atendimento à fonte de interrupção do tfnier/
contador Odeve ser escrita no endereço de memória de progra-
ma 0050h.
2.8 - A sub-rotina de atendimento à fonte de interrupção do tinier/
contador 1 deve ser escrita no endereço de memória de progra-
ma 0070h .
2.9 - O programa principal deve ser escrito no endereço de memória
de programa 0200h.
3 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembl y que utilize um dos membros da família de micro-
controladores MCS-51 e que seja capaz de executar as seguintes ativi-
dades:
3.1 - Programar o tímer/ contador Ono Modo 1.
3.2 - Programar o ti'mer/ contador 1 no Modo 1.
3.3 - O tinier/ contador Odeve gerar interrupções a cada 50 mseg.
3.4 - O tinier/ contador 1 deve gerar interrupções a cada 20 mseg.
164 MICR0C0NTR0LAD0RES 8051 Cap. 7

3.5 - Implementar uma sub-rotina que seja capaz de calcular a quan-


tidade de números menores e iguais a 66h e que apresentam
paridade ímpar do buffer de memória que vai da posição de
memória 37h a 6Ah. O resultado deve ser colocado no conteúdo
da porta 3, a cada 2 segundos, de forma piscante. Essa sub-roti-
na deve ser armazenada no endereço de memória de programa
0300h.
3.6 - Implementar uma sub-rotina de atendimento à fonte de Í11terrup-
ção do timer / contador O, que torne o co.n teúdo do bit 3 da porta
Oigual a 1.
3. 7 - Implementar uma sub-rotina de atendimento à fonte de interrup-
ção do timer/ co11tador l, que torne o co11teúdo do bit 3 da porta
Oigual a O.
3.8 - A sub-rotina de atendimento à fonte de interrupção do tinier/
contador Odeve ser escrita no endereço de memória de progra-
ma 0066h.
3.9 - A sub-rotina de atendimento à fonte de interrupção do timer/
contador 1 deve ser escrita 110 endereço de memória de progra-
ma 0088h.
3.10 - O programa principal deve ser escrito no endereço de memória
de programa 0500h.
4 - Faça um programa estruturado (fluxograma e programa-fonte), e1n
Assembly, que utilize um dos membros da família de microcontro-
ladores MCS-51 e que seja capaz de executar as seguintes atividades:
4.1 - Programar o timer/ contador Ono Modo 1.
4.2 - Programar o timer/ contador 1 no Modo O.
4.3 - O tinier/ contador Odeve gerar interrupções a cada 65 mseg.
4.4 - O timer/ contador 1 deve gerar interrupções a cada 5 mseg.
4.5 - Implementar uma sub-rotina que seja capaz de calcular a quan-
tidade de números maiores que 57h e que são pares do buffer
de memória que vai da posição de memória 47h até a 65h.
O resultado deve ser colocado no conteúdo da porta O. Consi-
dere que na porta O está ligada u1na interface com um display
OS Tli\i1ERS/C0NTAD0RES 165

de sete segmentos. Essa sub-rotina deve ser armazenada no


endereço de memória de programa 0096h.
4.6 - Implementar uma sub-rotina de atendimento à fonte de interrup-
ção do timer/ contador O, que leia o estado das chaves que estão
ligadas à porta 3, por meio de u1na interface em lógica n.e gativa
(chave aberta= 1 lógico, chave fechada= Ológico).
4.7 - Implementar uma sub-rotina de atendimento à fonte de h1terrup-
ção do ti1ner/ contador 1, que mostre o estado das chaves por
meio d.e um conjunto de 8 leds, durante 2 segundos, de forma
piscante, que estejam ligados à porta 2 por meio de uma interface
de saída em lógica positiva.
4.8 - A sub-rotina de atendimento à fonte de interrupção do timer/
co11tador Odeve ser escrita no endereço de memória de progra-
ma 0106h.
4.9 - A sub-rotina de atendimento à fonte de interrupção do timer/
co11tador 1 deve ser escrita no endereço de memória de progra-
ma 0168h.
4.10 - O programa principal deve ser escrito no endereço de memória
de programa 0400h.
capítulo

A INTERFACE DE COMlJNICACÃO
,
SERIAL

8.1 Objetivos
•:• Apresentação da interface de comu nicação serial
•:• Os diferentes modos de operação da interface de comunicação serial
•:• Comunicação de multi processadores
•!• Definindo o baud rate da interface de comunicação serial
•!• Projeto utilizando a interface de com unicação serial

8.2 lntroducão

teórica
A comunicação entre microco1nputadores é de total relevância para o contro-
le inteligente de máquina e de processo. Imagine um determinado sistema
de co11trole de ponto, que tem a finalidade de armazenar dados sobre a en-
trada e saída dos funcionários de uma empresa. Nesse sistema, o termil1al de
ponto ten1 como objetivo coletar e ar1nazenar as irtformações referentes a
cada funcionário em sua memória de dados. O siste.ma de po11to só se com-
pleta se esses dados forem recolhidos por outro microcomputador para, de-
pois, serem processados gerando a folha de pagan1e11to. Geralmente, a capta-
ção desses dados nesse sistema é feita por meio de comunicação serial de
dados. Essa é apenas urna aplicação entre milhares de outras que se pode
exe1nplificar.
Assim, o estudo da interface de comunicação serial é de fundamental
importância para o desenvolvimen to de sistemas co11trolad.os por
microcontroladores.
Co1n o estudo da interface de comunicação serial, ter1nil1a1n todos os
conceitos básicos e fundamentais sobre a família de rnicroco11troladores MCS-
51 da Intel.
168 MICROC0NTR0LAD0RES 8051 Cap. 8

8.2.1 - A interface de comunicação serial: a interface de comunicação serial é


fttll ditplex, ou seja, ela pode, ao 1nesmo tempo, receber e transmitir dados
ser1a1s.
Além disso, ela pode receber dados vindos da comunicação serial atra-
vés de um buffer, ou seja, pode iniciar a recepção de um segundo dado (byte)
a11tes que um dado anterior seja lido a partir do registrador de recebimento.
Entretanto, se o pri1neiro dado ai11da não foi lido durante o recebimento do
segundo, o primeiro dado será perdido.
Os registradores de recepção e tra11smissão da interface de co.m uni-
cação serial são, ambos, acessados pelo registrador de função especial SBUF
e são fisicamente separados. Quando o dado é 1novido para o registrador
de fu11ção especial SBUF, ele vai para o buffer de trans1rz.issão, onde se dá o
início da transmissão. Quando o dado é movido do SBUF, ele vem do buffer
de recebi111.ento, ou seja, é lido u1n dado da interface de co1nunicação serial.
A recepção é inicializada no Modo Opela condição dos bits RI=O e REN=l .
A recepção é inicializada en1 outros modos pela chegada do start bit, se
o bit (REN) do registrador de função especial SCON for igual a 1.
Em todos os modos, a transmissão é inicializada por qualquer instrução
que utiliza o SBUF como um registrador de desti110.
Após o final da recepção do último bit do dado (bit mais significativo),
o bit RI do registrador de função especial SCON é setado, si11alizando que a
recepção foi finalizada. Caso a interface de co1nunicação serial esteja habili-
tada, sua sub-roti11a de atendimento à i11terrupção por hardware será
vetorizada (endereçada) por 1neio da execução de uma instrução LCALL
0023h. No endereço 0023h d.e 1ne1nória de programa, deve-se armazenar a
rotina de atendimento à fonte de interrupção da i11terface de comunicação
serial, que trata da recepção. É necessário resetar o Jlag RI a fim de liberar o
canal de comunicação serial para u1na nova recepção de dados e também
salvar o conteúd.o do registrador SBUF em uma posição de 1nemória para
posterior tratamento da informação recebida.
Após o fh1al de trans1nissão do últhno bit do dado (bit mais significati-
vo), o bit TI do registrador de função especial SCON é setado, sinalizando que
a trans1nissão foi finalizada. Caso o canal de com.unicação serial esteja habi-
litado, a rotiI1a de atendi1nento à interrupção por hardware será vetorizada
(endereçada), por meio da execução de u1na instrução LCALL 002311. No en-
dereço 0023h de me1nória de programa, deve-se ar1nazenar a sub-rotina de
atendimento à fonte ,
de it1terrupção do canal de com.unicação serial, que trata
da transmissão. E n.e cessário resetar o Jlag TI a fim de liberar o canal de comu-
nicação serial para u1na nova translnissão de dados.
A INTERFACE DE COMUNICAÇÃO SERIAL 169

Caso a recepção e a trru1smissão estejam habilitadas, a sub-rotina de


ate11dimento à fonte de interrupção da interface de comunicação serial deve
distinguir qual foi a fonte de interrupção da CPU, ou seja, deve identificar se
foi a recepção ou a transmissão que gerou a interrupção. Isso é feito por m.eio
do teste dos flags RI e TI, para verificar se estes são iguais a 1.
O registrador de função especial SCON é utilizado para determinar o
modo de operação do ca11al de co1nunicação serial. Nele, é recebido o nono
(9º) bit de dados (RB8), que co11tém outros fiags de condição, co1úor1ne é
mostrado a seguir:

(SCON) = 1 SMO SMJ SM2 REN T'8 8 RB8 TI RI

Sl.\'10 Sl.\'11 l.Vlodo Descrição Baud Rate


o o o J{egistrador de deslocamento f•., ./ 12
o 1 1 UART de 8 bits variável
1 o 2 UART de 9 bits f,,., ./64 ou t~., ./3 2
1 1 3 UA.R T de 9 bits variável
Sín1bolo Non1e e significad o
SM2 Habilita a característica de co1nunicação de multiprocessadores nos n1odos 2 e 3. Nesses
1nodos, se SM2 = 1, RI não será ativado, caso o nono bit de dados recebido seja igual a O.
=
No Modo l , se SM2 1, RI não será ativado, caso un1 stop bir válido não seja recebido. No
Modo O, SM2 deverá ser O.

REN Bit habitador da recepção serial. Setadolzerado por sofrv,are para habilitar ou desabilitar
a recepção serial.
TB8 É o nono bit de dados que será trans,nitido nos ,nodos 2 e 3. Setado ou zerado
por software.
RB8 Nos n,odos? e 3, é o nono bit de dados que foi recebido. No Modo l , se SM2 = O, RB8
é o stop bit que foi recebido. No Modo O, RB8 não é utilizado.
TI É ojlag de inte1Tupção de transrnissão. Setada por hardware no final do tempo do 8° bit
no Modo O ou no início do stop bit en1 outros 1nodos, en1 qualquer transn1issão serial.
Deverá ser zerado por software.
RI É ojlag de inte1Tupção de recepção. Setada por hardware no final do tempo do 8° bit no
Modo O ou na n1etade do ternpo do stop bit en1 outros 111odos, e1n qualquer recepção serial.
Deverá ser zerado por software.

a) Modos de operação: a porta serial pode operar em quatro 1nodos (do Modo
Oao Modo 3), como se segue.
a.1) Modo O: dados serializados entrrun e sae1n por meio do pino RXD.
O pino TXD é responsável pela transmissão do cloclc de transmissão (baud
rate).
170 MICROC0NTR0LAD0RES 8051 Cap. 8

Oito bits são trans1nitidos ou recebidos da segtrinte maneira: 8 bits de da-


dos, sendo que o primeiro bit transinitido ou recebido é o menos sigrtificativo.

8051 Internai Bus

Wri te to ,,7
SBUF

'
'
/ .
/V
.. :>'

1 DSQ . SBUF
- CL
• • l . ''
Zero Detector
'' ' • ' Shift
- RXD
P3.0 A LT
Output
Function
1 1
.-
.
' '
Start SHIFT ..
S6 TX Control '\
. TX Clock T1 SENO
\
.
-) )
/
Serial Port
lnterrupt
~
< '\
Shift
TX.D
. RX Clock R1 Receive Clock
P3.1 ALT
REN
RX Control

) .. Start 111111 11 O Shift . Output


Function

RI barra
1
' .. .. .. .. .. .. .. • Shift
" ' •
Input Shift Register RX.D
~
P3.0 ALT
. :>'
Input
Function
Load
SBUF V
.. :>'

SBUF

.. :>'

Read
SBUF V.. :>'

8051 Internai Bus

Figura 8 .1 A i11terface de comunicação serial no Modo O.


A INTERFACE DE COMUNICAÇÃO SERIAL 171

O baud rate (velocidade de comunicação serial de dados) é fixo em 1/12


da freqüência do oscilador.
A Figura 8.1 mostra o diagrama funcional simplificado da interface de
cornunicação serial no Modo O.
Recepção: a recepção será irliciada se a condição dos bits do registrador de
função especial SCON tiver REN = 1 e RI = O e se o pino de fLmção
alternativa P3.1 estiver habilitado. Em S6P2 do próximo ciclo de máqui-
na, a unidade de controle de RX escreve os bits 111111110 no registrador
de deslocamento e, no ciclo seguinte, ativa a função RECEIVE.
A função RECEIVE habilita a saída do registrador de deslocamento
para o pino de saída de função alter11ativa P3.0. Sliift Clock faz transi-
ções e1n S3Pl e S6Pl de todo o ciclo de máquina. Em S6P2, de todo o
ciclo de máquina, no qual RECEIVE está ativa, o conteúdo do registra-
dor de deslocamento de recepção é deslocado um bit para a esquerda.
O valor fornecido pela direita é o que foi mostrado em P3.0 no S5P2 do
mesmo ciclo de máquina.
Como os bits de dados se deslocam para a direita, números 1 preen-
chem os bits da esquerda a cada deslocamento. Quando o Ológico, que
foi inicialme11te carregado na posição mais à direita, chega à posição
mais à esquerda no registrador de deslocamento, ele sinaliza ao bloco
de controle de RX para fazer um últiino deslocamento e então carregar
SBUF. Em S1P1 do décimo ciclo de máquina após a escrita em SCON é
zerado RI, RECEIVE é zerado e RI é setado.
Quando a recepção de um dad.o é finalizada, é setado o bit RI do registra-
dor d.e função especial SCON, sii:1.alizando o final da recepção de um
dado serial obtido dentro do buffer de recepção do canal de comunica-
ção serial, ou seja, fica armazenado no conteúdo do registrador SBUF.
Transmissão: a transmissão é iniciada por qualquer iI1strução que utiliza SBUF
como u1n registrador de destino.
Na tra11.smissão, carregar um 1 lógico dentro do 11.ono bit do registrador
de deslocamento de transmissão habilitará a saída do registrador de des-
locamento para o pino da função alter11ativa P3.0 e ta1nbém habilitará o
clock do deslocamento para o pino de função alternativa P3.1.
O sinal Write to 58 UF em S6P2 também carrega 1 lógico na nona posição
do registrad.or de deslocamento de transmissão e informa o bloco de
controle de TX para que inicie a tra11smissão. A temporização interna é
tal que um ciclo de máquina completo é fit1alizado e11tre o sit1al Write to
SBUF e o sinal SENO.
172 MICROC0NTR0LAD0RES 8051 Cap. 8

SENO J1abilita a saída do regish·ador de deslocamento para o pino de


saída de função alternativa P3.0 e também habilita SHIFT Clock para o
pino de saída de função alternativa P3.1. SHIFT Clock é baixo durante as
fases S3, S4 e S5 do ciclo de máquina e alto dttrante as fases 56, Sl e 52.
Para S6P2 de todo o ciclo de clock em que SENO está ativo, o conteúdo
do registrador de desloca1nento de transmissão é deslocado u1n bit para
a direita.
Como os bits de dados se deslocam para a direita, os zeros preenchem
os bits da esquerda a cada deslocamento. Quando o bit mais significati-
vo do dado está na posição para ser transmitido, então o 1 lógico que foi
i11icialmente carregado no nono bit é o único bit à esquerda do bit mais
significativo, e todas as posições estão 'zeradas'. Essa co11dição sinaliza
ao bloco d.e co11trole de TX para para fazer u1n último deslocamento e
então desativar o sinal de SENO e setar TI. Ambas as ações ocorrem e1n
S1Pl do décimo ciclo de máquina após o Write to SB UF.
a.2) Modo 1: dez bits são transmitidos por meio do pino TXD e recebidos
por meio do pino RXD. São eles:
um start bit (O lógico);
oito bits de dados (primeiro, o bit menos significativo);
um stop bit.
O baud rate é variável. O ti1ner 1 ou 2 pode ser utilizado para fornecer o
clock do canal de co1nunicação serial para gerar um baud rate variável.
A Figura 8.2 1nostra o diagrama funcional simplificado da interface de
comunicação serial no Modo 1.
Recepção: na recepção, o stop bit é recebido por meio do conteúdo do bit RB8
do registrador de função especial SCON.
A recepção é iniciada ao detectar uma borda de descida (1 ~ O) em RXD,
e o bit RI do registrador de função especial é setada quando a recepção é
finalizada, somente se RI = O.
Transmissão: a transmissão é iniciada por qualquer i11strução que utiliza SBUF
co1no u1n registrador de desti110, e a cada excesso do contador do tfnier
será transmitido um bit de dados. Após o final da transmissão do últi-
mo bit de dados (bit 1nais significativo) o bit TI do registrador de ftmção
especial SCON é setada.
A INTERFACE DE COMUNICAÇÃO SERIAL 173

8051 Internai Bus

Write to TB8 • ,..


SBUF
'

'

/ ..
• ,..
D S Q

•• ...
1 SBUF ' TXD
Timer 1
overflow
- CL
• ' ., 'r ' ••
~

ri
Zero Detector
+ 2 .

1
' . •
Start
'•
SH IFT DATA
SMOD =0 SMOD = 1
TX Control
+16 . Tx Clock T1 SENO
••
/
Serial Port ..
lnterrupt <
' ..
+16 RX Clock RI Load SBUF
Sample •
'• RX Control Shift
1 to O . Start 1FFh .
. •• Shift
transition '•

..
. Bit Detector

'
,.

RXD
. Input Shift Registar (9 bits)
-
..: ·
• ..
Load
SBUF

SBUF

Read
SBUF
- ~
D
8051 Internai Bus

Figura 8.2 A interface de comunicação serial 110 Modo 1.

a.3) Modo 2: 011ze bits de dados são transmitidos por m.e io do pi110 TXD e
recebidos por m.e io do pino RXD. São eles.
1 start bit (O);
8 bits de dados (primeiro, o bit 1nenos significativo);
1 norlo bit de dados programável;
+ 1 stop bit.
174 MICROC0NTR0LAD0RES 8051 Cap. 8

O baud rate é progra1nável para ou 1/32 ou 1/ 64 da freqüência do


oscilador.
Recepção: na recepção, o nono bit de dados é recebido por meio do conteúdo
do bit RB8 do registrador de fu11ção especial SCON, e11quanto o stop bit é
ignorado.
A recepção é iniciada ao detectar u1na borda de descida (1 ~ O) no pi110
RXD; quando a recepção é finalizada, o bit RI do registrador de função
especial SCON é setada, somente se (RI) = O.
Transm issão: na transmissão, ao nono bit de dados (bit TB8 em SCON) pode
ser atribuído um valor de O ou 1. Ou, por exemplo, o bit de paridade (P
do PSW) poderia ser movido para TB8.
A transmissão é iniciada por qualquer instrução que utilize SBUF como
um registrador de destino e finalizada quando TI= 1.

a.4) Modo 3: onze bits de dados são transmitidos por meio do pi110 TXD e
recebidos por 1neio do pino RXD:
1 start bit (O);
8 bits de d.ad.os (primeiro, o bit menos significativo);
1 nono bit de d.ados programável;
+ 1 stop bit.

De fato, o Modo 3 é igual ao Modo 2 em todos os aspectos, exceto quan-


to à baud rate, que é variável.
8.2.2 - Comitnicação de multiprocessadores: os m.o dos 2 e 3 têm uma caracte-
rística especial para as co1nunicações de multiprocessadores.
Nesses modos, 9 bits de dados são recebidos. O nono bit é armazenado
no conteúdo do bit RB8 do registrador de fu11ção especial SCON e depois é
enviado u1n stop bit. O canal de comunicação serial pode ser progra1nado de
maneira que quando o stop bit é recebido, a interrupção da porta serial seja
ativada som.e nte se o bit (RB8) = 1. Essa característica é habilitada ao setar o
bit SM2 em SCON. Um modo de utilizar essa característica em sistemas a
multiprocessadores é o segt1inte:
quando um processador 1mestre 1 quer transmitir um bloco de dados para
um dos escravos ele primeiro envia um byte de endereço que ide11tifi-
1 1
,

ca um dos 1escravos 1• Um byte d.e e11dereço difere de um byte de dados,


sempre que o nono bit for 1 em. um byte de endereço e Oem um byte de
dados;
A INTERFACE DE COMUNICAÇÃO SERIAL 175

quando um (SM2) = 1, 11enl1u1n 'escravo' será interrompido por um byte


de dados. Um byte de endereço interromperá todos os 'escravos', porém
cada escravo examinará o byte recebido e verificará se é ele que está
sendo endereçado. O 'escravo' endereçado excluirá o conteúdo de seu
bit SM2 e vai se preparar para receber os bytes de dados que serão trans-
mitidos pelo mestre;
os 'escravos1 que 11ão fora1n e11dereçados deixam seus bits SM2 setados e
ignorarão os bytes de dados que serão enviados pelo mestre;
SM2 não tem efeito no Modo Oe no Modo 1 ele pode ser utilizado para
verificar a validade do stop bit. Na recepção en1 Modo 1, se (SM2) = 1, a
interrupção de recepção não será ativada, a menos qt1e u1n stop bit váli-
do seja recebido.
8.2.3 - A freqüência de transmissão/recepção de dados (baud ·rate):
a) Modo O: o baitd rate é fixo e vale fosc·/12.
b) Modo 2: depende do conteúdo do bit SMOD, que pertence ao registra-
dor de função especial PCON.
Se (SMOD) = O (o valor é atribuído a esse bit se1npre que ocorrer um
sinal de reset), a baud rate será igual a 1/64 da freqüê11cia do oscilador.
Se (SMOD) = 1, o ba.ud rate será igual a 1/32 da freqüê11cia do oscilador.
c) Modos 1 e 3: são deter1ninados pelo overflmv do timer 1.

c.1) Utilizando o tirner 1 para gerar baud rates: o baud rate é calculado por:

Baud rate= 2 sMOD(Oou Ll / 32 * (Rate do overflo\v do li1ner I) (bits/seg.)

A interrupção do tin1er 1 deveria ser desabilitada para essa aplicação.


Pode ser configurado como timer e como contador e em qualquer modo
de operação.
Na maioria d.as aplicações, ele é configurado para operar como ti.n1.er
em modo de recarregame11to auto1nático (nibble superior de TMOD = 0010b).
Nesse caso, o baud rate é fornecido pela fórmula:

Baud rate = 2sMoo(oou 1> / 32"' (Freqüência do oscilador/{ 12"'[256 - (THl ))} (bits/scg.)

A tabela a segt1ir relaciona vários baud rates utilizados e a ma11eira como


elas podem ser obtidas utilizando o timer 1:
176 MICROC0NTR0LAD0RES 8051 Cap. 8

Timerl
Baud rate (bits/seg.) Freq. osc. (MHz) SMOD C/fbarra Modo Valor recar.
Modo OMáx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 l o 2 FFh
19,2K 11,059 l o 2 FDh
9,6K 11,059 o o 2 FDh
4,8K 11,059 o o 2 FAh
2.4K 11.059 o o 2 F4h
1.2K 11.059 o o 2 E8h
137,5 11,059 o o 2 lDh
110 6 o o 2 72h
110 12 o o 1 FEEBh

Exercícios resolvidos
1 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly que utilize um dos membros da família de
microcontroladores MCS-51, que seja capaz de executar as seguintes
atividades:
1.1 - Programar o ca.n al de co1nunicação serial no Modo O.
1.2 - Transmitir continuamente, por meio do canal de comunicação se-
rial, os valores de 55h.e AAh.
1.3 - O programa principal deve ser escrito no endereço de memória
de programa 0100h.
Solução:

Rotina de atendimento à interrupção do


canal de comunicação serial (0023h)

(0023h)
Serial: RETI
A INTERFACE DE COMUNICAÇÃO SERIAL 177

Programa principal:

(00100h)
(SCON) f--- #1 Oh PROGP: MOV SCON,#10h
(1E) f--- #90h MOV IE,#90h
A f--- #55h MOV A,#55h

(SBUF) f--- (A)


LOOP: MOV SBUF, A

s
(TI)= O?
JNB TI,$

(TI} f- #Ob CLR TI


(A} f--- not (A) CPL A
SJMP LOOP
END

Fi$_!ura 8.3 Fluxograma e programa-fo11te estruturado do exercício resolvido 1.

A seguir, é mostrado o programa-fonte estruturado, preparado


para uma simulação, por meio do AVS1M51 da AVOCET, ou similar,
com co1nentários da explicação e função de cada instrução dentro do
programa.

DEFSEG EXEM, ABSOLUTE ; Define segn1ento de progra1na EXEM


SEG EXEM

ORG OOOOh ; Após o reset da CPU, o programa prossegue no endereço 0000h


AJMP 0100h ; (durante o acionan1e11to da chave de reset ou após a cncrgização do
; siste111a por u1eio do circuito de reset formado por um rcsistor cn1
; pai:alelo con1 un1 diodo e e1u série co1n un1 capacitor que está ligado ao
; pino de reset da CPU). Co1110 foi pedido que o progra1na principal
; fosse escrito no endereço de 1nemória de progran1a 0100h, um salto
; incondicional foi utilizado para tal posição de mc111ória.

ORG 0023b ; Após uma interrupção do canal serial, o progra1na prossegue no


RETI ; endereço '0023h' e retorna da rotina de atendin1ento à fonte de
; interrupção do canal de comunicação serial.
178 MICROCONTROLADORES 8051 Cap. 8

ORG 01 OOh ; lnício do programa principal


MAIN: MOV SCON,# 1Oh ;(SCON) f-#00010000b. Programa o canal serial co1no registrador de
; deslocamento e baud rate de Fosc/ 12 (1nodo O).
MOV IE,#90h ; (!E) = 1001 0000b. Faz (EA) = 1 (cada interrupção é habilitada pelo seu
; bit habilitador); (ES) = 1 (habilita a intern1pção de comunicação serial)
MOV A,#55h ; (A) f- #55h (dado a ser transmitido)
LOOP: MOV SBUF,A ; (SBUF) f- (A). Carrega o dado a ser trans1nitido no (SBUF) e é
; iniciada a transtnissão serial.
JNB TI,$ ; Se (TJ) = O(o dado ainda não foi transn1itido serialmente, bit a bit)~
; (PC) f- $ (salta para o próprio endereço da instrução JNB). Aguarda
; ser transn1itido. Quando o dado é trans,nitido, faz com que (TI) = 1 e é
; gerada uma intcm1pção do canal serial (salta para o endereço 0023h -
; rotina de serviço de comunicação serial).
CLR TI ; (TI) f- O (libera canal de con1unicação seria.! para a transmissão de
; un1 novo dado)
CPL .A.. ; (A) f- con1plemento de u,n do (A)
SJMP LOOP ; Loop do progran1a principal.
END

2 - Faça um programa estruturado (fluxograma e programa-fonte) em


Assembly que utilize um dos membros da família de micro-
controladores MCS-51, que seja capaz de executar as seguintes ativi-
dades:

2.1 - Program.a r o canal de comunicação serial no Modo 1 com um baud


rate de 2,4KHz, considerando que o oscilador a cristal aprese11ta
uma freqüência de fosc= 11,059MHz.

2.2 - Obter informações recebidas do canal de comunicação serial e


armazená.- las no conteúdo das portas O, 11 2 e 3. Considere que
as portas O, 1, 2 e 3 estejam ligadas a quatro interfaces que acio-
nam um co11junto de oito leds cada.
2.3 - O programa principal deve ser escrito no endereço de memória
de programa 0700h.
A INTERFACE DE COMUNICAÇÃO SERIAL 179

Solução:

Rotina de atendimento à fonte de


interrupção do canal de comunicação
serial (0023h}

(0023h)
(RI) r #Ob Serial: CLR RI
(A) r (SBUF) MOV A,SBUF

RETI RETI

Programa principal:

(0700h)
.
.

(SCON) r #50h MAIN: MOV SCON,#50h


-
(TMOD) r #20h ~
MOV TMOD,#20h
.
.

(TH1) r #OF4h MOV TH1 ,#OF4h



(TL 1) r (TH 1) MOV TL 1,TH1
-
• MOV IE,#90h
(IE) r #90h
-
(TCON) r #40h ~
MOV TCON,#40h
lA) r #77h • MOV A,#77h
-
• ' •
- MAIN: MOV PO,A
(PO) r (A) •

{P1) r (A) •
MOV P1,A
- MOV P2,A
(P2) r (A) •
MOV P3,A
(P3) r (A) .
-

~ ' . SJMP LOOP
END

Figura 8.4 Fluxograma e programa-fonte estruturado do Exercício 2.


180 MICR0C0NTR0LAD0RES 8051 Cap. 8

A seguir, é mostrado o programa-fonte estruturado, preparado para


uma simulação por meio do AVSIM51 da A VOCET, ou similar, com co-
1ne11tários da explicação e função de cada instrução dentro do programa.

DEFSBG EXEM, ABSOLUTE ; Define segmento de programa EXEM


SEG EXEM
ORG 0000h ; Após o reset da CPU, o progra1na prossegue no endereço 0000b
AJMP 0100h ; (durante o aciona1nc11to da chave de reset ou após a energização do
; sistema, por n1eio do circuito de reset, formado por um resistor
; en1 paralelo co1n um diodo e em série co1n um capacitor que está
; ligado ao pino de reset da CPU). Co1110 foi pedido que o progra1na
; principal fosse escrito no endereço de 1ne1nória de progra1ua 0700h,
; um salto incondi.cional foi utilizado para tal posição de me.1nória.

ORG 0023h ; Após uma intercupção do canal serial, o programa prossegue no


; endereço '0023H', retorna da interrupção de co1nunicaçào serial.
CLR Rl ; (RD f- O. Exclui o jlag de interrupção de comunicação serial
MOV A,SBUF ; (A) ~ (SBUF). Obtém o dado.
RETJ ; Retorna da rotina de serviço da interrupção se.ria!

ORG OI 001-1 ; Progran1a principal


MAIN:MOV SCON,#50h ;(SCON) f- # 010 0000b. Programa o canal serial co1no UART de
; 8 bits, baud rate variável e habilita a recepção serjal
MOV TMOD,#20h; (TMOD) ~ #00 10 0000b. Programa o thner I no Modo 2
; (8 bits co1n recarregamento auto1nático ).
MOV TH1,#0F4h ; (THl) f- F4b. Valor para gerar baud rate de 2,4KHz (recarregador
; automático)
MOV TLl,THI ; (TL 1) ~ (THI ). Valor inicial para un1 baud rate de 2,4KHz
MOV IB,#90h ; (IB) ~ #1001 0000b. Faz (EA) = 1 (cada interrupção é habilitada
; pelo seu bit habilitador); (ES) = 1 (Habilita a interrupção de
; co1nunicação serial e não habilita a interrupção do ti1ner l
MOV TCON,#40h ; Liga/faz executar o ti1ner 1
MOV A,#77b ; (A)~ #77h
LOOP: MOV PO,A ; (PO) ~ (A)
MOV Pl,A ;(Pl) f-(A)
MOV P2,A ; (P2) ~ (A)
MOV P3,A ; (P3) ~ (A)
SJMP LOOP ; Loop do programa principal
END

Exercícios e questões propostos


1 - Faça um programa estruturado (fluxograma e programa-fonte) em
Assembly que utilize um dos m embros da família de
microcontroladores MCS-51 e que seja capaz d e executar as seguintes
atividades:

1.1- Programar o canal de co1nunicação serial no Modo 1 com wna


baud rate de 9,6KHz, considerando que o oscilador a cristal apre-
sente uma freqüência de f0 sc=11,059MHz.
A INTERFACE DE COMUNICAÇÃO SERIAL 181

1.2 - Transmitir o conteúdo do buffer de memória cujo endereço ini-


cial é 30h e o final é 40h, com a utilização do canal de comunica-
ção serial, cada vez que ocorrer o acio11amento e o desacio11a-
mento da chave 5. Considere que, à porta O, está ligada u1na
interface de entrada com um dip sivitch de oito chaves numera-
das de Oa 7 (desconsidere o bounce das chaves do dip switch);

1.3 - O programa principal deve ser escrito no endereço de memória


de programa 0200h.
2 - Faça um programa estruturado (fluxograma e programa-fonte) que
utilize um dos membros d.a família de microcontroladores MCS-51 e
que seja capaz de executar as seguintes atividades:
2.1 - Programar o canal de comunicação serial no Modo 1 com um
baud rate de 9,6KHz, considerando que o oscilador a cristal apre-
senta uma freqüência de f0 sc= 11,059MHz.
2.2 - Receber informações por meio do canal de comU11icação serial
e armazená-las no conteúdo do buffer de memória, cujo ende-
reço ilucial é 45h e o final é 61h, cada vez que for definido um
byte igual a 3Ah pelo dip sivitch. de oito chaves. Considere que, à
porta O, está Iigad.a uma interface de entrada com um dip switch
de oito chaves (desconsidere o bounce das chaves do dip switch);
2.3 - O programa principal deve ser escrito no endereço de memó-
ria de programa 0050h.
3 - Faça um programa (fluxograma e programa-fonte) estruturado em
Assembly, que utilize um dos membros da família de microcontroladores
MCS-51 e que seja capaz de executar as seguintes atividades:
3.1 - Programar o canal de comu11icação serial no Modo 3 com um
baud rate de 4,8KHz, considerando que o oscilador a cristal apre-
sente uma freqüência de fosc= 11,059MHz.
3.2 - Receber informações por meio do canal de comunicação serial e
armazená-las no co11teúd.o do buffer de memória, cujo endereço
inicial é SFh e o final é 72h, cada vez que as chaves 3 e 6 forem
acio11adas e desacionadas pelo dip switch de oito chaves. Considere
que, à porta O, está ligada uma interface de entrada com um dip
switch de oito chaves (desconsidere o bounce das chaves do dip sivitd1).
182 MICR0C0NTR0LAD0RES 8051 Cap. 8

3.3 - Transmitir pelo canal de comunicação serial o buffer de memó-


ria, cujo endereço inicial é 4Ch e o final é 65h, cada vez que as
chaves 1 e 4 forem acionadas e transmitir o buffer de 1nemória,
cujo endereço inicial é 66h e o final é 75h, cada vez que as cha-
ves 1 e 4 forem desacionadas.
3.4 - O programa principal deve ser escrito no endereço de memória
de programa 0350h.
4 - Considere um microcontrolador 8051 com sua porta PO ligada a um
díp sivitch de oito chaves (considere, inicialmente, todas abertas (ní-
vel lógico 1) - PO.O~CHO, ... , P0.7~CH7) e sua porta 2 ligada a um
conjunto de oito leds. Foi implem.e ntado um programa-fonte estrutu-
rado com as seguintes características:
4.1 - Calcular a quantidade de números pares que apresentam o bit 4
igual a 1 e que apresentam paridade ímpar do buffer de memó-
ria, cujo endereço inicial é 3Bh e o fil1al é 66h, sempre que as cha-
ves O, 2 e 7 são acionadas (considerar o bounce e u tilizar um dos
timers para gerar a rotina de tempo). O resultado do cálculo, mos-
trado anteriormente, deve ser colocado no conjunto de leds, de
forma pulsru1te (deve ficar piscando) a cada 0,6 segundo;
4.2 - O resultado também deve ser trans.m itido pelo canal de comu-
nicação serial com um baud rate de l,2Kbits/ seg.
5 - Obtenha o fluxograma a partir do programa-fonte fornecido a seguir
e descreva em detalhes o funcionamento desse programa.

; Programa de identificação de chaves com elinunação de bounce


; Descrição: essa rotina descreve como fazer un1a máquina de estados com a
; utilização dos tilners
; Estado O: aguarda o acionan1ento das chaves O, 2, e 7 -
; O1111 O1O = 7Ah(Registrador R(O) = OOh)
; Estado 1: confinnação do acionan1ento após o te111po de elim.inação do bounce
; (ruído da chave mec.)
; Registrador (RO) = OI H
; Estado 2: aguarda a desativação dessa con1binação de chaves (Registrador
; R(O) = 02h)
; Estado 3: confirinação da desativação da combinação dessas chaves (Registrador R(O) = 03h)
; Quando estiver no estado 3 (aguardando a desabilitação do conjunto de chaves):
; 1 - Calcular a quantidade de números pares que apresenta,n o bit 4 igual a 1 e
; que apresentam paridade Ílnpar do buffer de meLnória cujo endereço inicial é 38h e o final é 66h.
; 2 - O resultado deve ser colocado no display de sete scgn1cntos (parte n1cnos significativa) en1 n1odo
; pulsante (deve ficar piscando a cada 0,6 segundo).
A INTERFACE DE COMUNICAÇÃO SERIAL 183

; 3 - O resultado deve ser trans,nitido pelo canal de co,nunicaçào serial


; com u1n baud rate de l ,2Kbits/seg.
org 0000b ; Após o reset, o progran1a prossegue
; no endereço 0040h
aj1np ProgP
org OOObh
rcti

org OOlbh
reti
org 0023h
jnb
. .
n ,sa1 ; Acabou de RX um caractere
clr n
. ; Libera o canal de comunicação serial para
; utna nova RX
mov r7,sbuf ; Armazena o caractere recebido no ACC
. r7 ,#35h,sai
CJllC ; O caractere é igual a 55h
setb 20h.5 ; Habilita tempo de 2 segundos
.
sai: jnb ti,sai 1
clr ti
sai 1: reti
org 0060h ; Tabela de código de sete seg,nentos
; de O a F
db 3fu ;o
db 06h .J
db 5bh '
·2
db 4fl1 '
·3
66h '
·4
db
db 6dh ·' 5
db 7dh '
;6
db 07h ·7
db 7fu '
·8
db 6fu ;' 9
db 77h ·A
db 7ch '
;B
db 39h ·C
5ch '
·D
db
db 79h ·' E
'
db 7 1h ·F
'
org 0100h
VarCH:
clr 20b.0 ; A cada loop, reseta o flag de
; varredura de teclado
mov a,thO ; Lê o valor do titner mais significativo
; (aprox. 5n1s)
clr c ; Prepara car1J• bit para não
; influenciar a operação de subtração

subb a,#28h ; Verifica se chegou a hora de fazer a


; varredura das tecJas
184 MICR0C0NTR0LAD0RES 8051 Cap. 8

.
JC adrl ; Ainda não chegou a hora de fazer a
; varredura das teclas
setb 20h.O ; Chegou a hora de fazer a varredura
; das teclas
mov thO,#OOh ; Inicializa o regulador de contagem do
; tin1er O
adr 1: rct
; luíc.io do Estado O(aguarda o acionan1ento das chaves O, 2 e 4)
DeAcCH:
jnb 20h.O,adr2 ; Salta, se não for o 1nomento de fazer a
; varredura do teclado
. r0,#00h,adr2 ; Salta, se não for Estado O(aguarda o
CJOe
; aciona1ncnto das chaves)
lllOV a,pO
CJne a,#7Ah,adr2 ; Salta, se as chaves não estiveren1
; acionadas
mov r0,#01 h ; Define Estado 1: confinnação do
; acionan1ento com elinúnação do bounce
adr2: ret
; Inicio do Estado l (confir1uação do aciona1nento das teclas O, 2 e 4)
CoAcCH:
jnb 20h.0,adr3 ; Salta, se não for o 1nomento de fazer a
; varredura do te-elado
CJne r0,#01 h,adr3 ; Salta, se não for Estado l (aguarda o
; aciona1nento das chaves)
mov rO,#OOh ; Alannc falso de acionamento (ruído),
; define Estado O
mov ªJ'º
.
CJne a,#7 Ah,adr3 ; Salta, se as chaves uão es1iveren1
; acionadas
IUOV r0,#02h ; Define Esta do 2: aguarda desativação das
; teclas O, 2 e 4
clr 2011.0 ; Não é o mo,nento de fazer a varredura do teclado
setb 20h. l ; Confirinados os acionatnentos das chaves O, 2 e 7
adr3: ret
; Início do Estado 2 (aguarda a de-sativação das teclas O, 2 e 4)
DeDeCH:
jnb 20h.0,adr4 ;Salta, se não for o momento de fazer a
;varredura do teclado
CJne r0,#02h,adr4 ; Salta, se não for Estado 2 (aguarda o
; acionamento das chaves)
1nov a,pO ; Lê o conteúdo do PO (cl1aves)
clr e ; Zera o carry bit para não influenciar na
; subtração
subb a,#7 Ah ; Compara a condição das chaves co1n a
; condição de acionamento
JZ adr4 ; Se for igual, as chaves continuam
; acionadas, continua no Estado 2
mov r0,#03h ; Define Estado 3: confinnação do
; desacionamento com eliminação do bounce
clr 20h.0 ; Não é o rnomento de fazer a varredura do
; teclado
A INTERFACE DE COMUNICAÇÃO SERIAL 185

adr4: rct
; Inicio do Estado 3 (confirmação da desativação das teclas O, 2 e 4)
CoDeCH:
jub 20h.O,adr5 ; Salta, se não for o 111on1ento de fazer a varredura do
; teclado
.
CJ11C r0,#03h,adr5 ; Salta, se não for Estado 2 (aguarda o aciona1ncnto
; das chaves)
n1ov r0,#02h ; Alarme falso de acionamento (ruído), define
; Estado O
mov a,pO ; Lê o conteúdo do PO (chaves)
clr e ; Zera o carry bit para não influenciar na subtração
subb a,#7Ah ; Coo1para a condição das chaves co1n a condição
; de acionarnento
. adr5
JZ ; Se for igual, as chaves continuan1 acionadas,
; continua no Bstado 2
1nov rO,#OOh ; Define Estado 3: confirmação do desacionamcnto com
; clüninação do bounce
1110V r2,#00b ; Zera contador de cálculo de número do butTer
clr 20h.O ; Não é o momento de fazer a varredura do teclado
clr 20h.1 ; Teclas não são 111ais acionadas
1nov pl ,#OOh ; Apaga o display de sete segmentos
adr5: ret
cale: jb 20h.5,adr6 ; Acabou de receber um caractere 55b do canal
; de comunicação serial
jnb 20J1. I ,adr6 ; Chave.s não são acionadas
mov r l,#3bh ; Início do butle r de memória
1nov r2,#00h ; Quantidade de núrneros pares que apresentam o
; b.it 4 igual a I e que apresentam paridade .ín1par
adr8: mov a,@rl ; Traz dado do buffer da memória para o acun1ulado
jb acc.0,adr? ; Se o nún1ero for ímpar, analisa próxiino dado do buffer
; de memória
jnb acc.4,adr? ; Se o bit 4 for zero, analisa próximo dado do
; buffer de me1nória
jnb pS\v.0,adr7 ; Se a paridade for par, analisa próxin10 dado do buffer
; de n1en1ória
.
lllC r2 ; Se for par, ti.ver o bit 4 igual a l e a
; paridade for Ílnpar, so1na l ao conteúdo do registrador
; r2.
adr7: 1nc r1 ; Aponta para o próximo dado do buffer de 1nen1ória
cjne r l ,#67h,adr8 ; Testa se o buffer foi analisado totalmente
setb 20h.2 ; Sinaliza que já foi calculada a quantidade de nút11eros
adr6: ret
; Rotina de transformação de código hexadecimal para o código de sete seg1nentos:
Hex7S:
jb 20h.5,adr6 ; Acabou de receber un1 caractere 55h do canal de
; co1nunicação serial
jnb 20b.2,adr9
1nov dptr,#0060b ; Endereço inicial da tabela dos códigos de sete
; segmentos
n1ov a,r2 ; Obtén1 resultado
anl a,#Ofh ; Mascara a parte 1nais significativa
186 MICROC0NTR0LAD0RES 8051 Cap. 8

,nove a,@a+dptr ; Obtém dado convertido en1 código de sete


; segmentos
mov r2,a ; Armazena dados en1 código de 7 segundos ern r2.
setb 20h.3 ; Sú1aliza que a quantidade de nú1nero está em código de sete
; segmentos
clr 20h.2 ; Reseta ojl.ag de cálculo do resultado crn bcxadecirnal
adr9: ret
; Rotina de te1npo para o acionarnento do display de sete seg,nentos (0,5 segundo)
TeA05s:
jnb 20h.O,adr l O
jb 20h.6,adr1O ; Não foi recebido uu1 caractere 55b
; pelo canal de co1nunicação serial
jb 20h.4,adrl O ; Display cotn os lcds dcsacionados
; (apagados)
. r0,#02h,adr 1O ; Salta, se não for o Estado 2 (conjunto de chaves
CJne
; acionadas)
lllC r6
,nov a,r6 ; Calcula o ternpo de 50ruseg
clr c
subb a,#32h
JC adrlO ; Ainda não passou 0,5 segundo
mov r6,#00h ; Reinicializa contador (R6)
acall cale ; Calcula quantidade de números do buffer
acall Hex7S ; Transforma (R2) de Hexadeci1nal para sete segmentos
mov pl,r2 ; Aciona o display corn o valor de (R2) em código
; de sete segmentos
setb 20b.4 ; Display ,nostrando o (R2)
adrl O: rct
; Rotina de t.e1npo para o acionan1ento do display de sete segmentos (0,5 segundo)
TeD05s:
jnb 20h.O,adrl 1
jb 20b.6,adr 11 ; Não foi recebido wn caractere 55h pelo canal de
; comunicação serial
jnb 20h.4,adr1 1 ; Display con1 os lcds dcsacionados (apagados)
.
CJUC r0,#02h,adr11 ; Salta, se não for o Estado 2 (conjunto de chaves
; acionadas)
UlC r6
mov a,r6 ; Calcula o te,npo de 50 1nseg.
ele e
subb a,#32h
. adrl 1 ; Ainda não passou 0,5 segundo
JC
IUOV r6,#00h ; Reinicializa contador (R2)
1nov pl ,#OOh ; Desativa display com o valor de (R2) cn1
; código de sete scg,ncntos
clr 20h.4 ; Display ,nostrando o (R2)
adr 11 : ret
; Rotina de transnlissão (R2) pelo canal de co,nunicação serial
Transn1:
jb 20h.5,adrl 2 ; Não foi recebido un1 caractere 55h pelo
; canal co,nunicação serial
CJne r0,#02,adrl 2 ; Trans.mite (R2) pelo canal. de
; comunicação serial, se for o Estado 2
A INTERFACE DE COMUNICAÇÃO SERIAL 187

1nov sbuf,r2 ; Tra11s111ite (R2) a l ,2Kbits/seg.


adrl 2: ret
; Rotjua de te1npo para o aciona111cnto do display de sete seg111entos (2 segundos)
TeAc2s:
jnb 20h.O,adr 13
jnb 20h.5,adr 13 ; Não foi recebido um caractere 55h pelo canal de
; comunicação serial
mov pl ,#5Ch ; Sün, mostra 5Ch ("o") no display por 2 segundos
setb 20h.6 ; Dispara a contage1n de te1npo para contabilizar 2
; segundos
LllOV r6,#00b ; 'Zera' contador (R6)
clr 20b.5
adrl 3: ret
TeDe2s:
jnb 20h.0,adr l 4
jnb 20h.6,adrl4 ; Não é para desativar o (P 1) depois de 2
; segundos
1nc r6
mov a,r6 ; Calcula o tempo de 2 segundos
clr e
subb a,#OC8h
JC adrl4 ; Ainda não passou 0,5 segundo
1nov pl ,#OO'h ; Desativa o display com o valor de (R2) c1n código de sete
; segmentos
mov r6,#00b
mov rO,#OOh
clr 20h.6
adr 14: ret
; lni.cio do programa principal
ProgP:
lllOV psw,#OOh ; Define banco O de registradores (OOh - 07h)
mov sp,#68h ; Define início da pill1a
mov r4,#00h ; Te1npo de 0,6 segundo
n1ov rO,#OOh ; Define Estado O: aguarda o acionan1ento das
; chaves
; Programação dos tüners O e I no Modo 1
1nov tmod,#2 Ih ; Tirner O no Modo 1 (J 6 bits de contagen1) e
; Tinier I no Modo 2
lllOV tbO.,#OOh ; Tin1er O e 1 ambos inicializados com 0000b
mov tlO,#OOh
1110V thl ,#OE8h ; Ti111 er l para fornecer u1n baud rate de 1,2Kbits/s
lllOV til ,#OE8h
1nov tcon,#50h ; Ligados os lin1ers O e 1
; Programação do canal de co71nunicação serial
mov scon,#50h ;
mov ic,#9Ah ; (lE) = 10011010 (habilitados os tilners O, 1
; e o canal de con1u11icaçâo serial)
188 MICR0C0NTR0LAD0RES 8051 Cap. 8

rnov p 1,#00h ; Display de sete segmentos inicialmente apagado


mov 2011,#00b ; 'Zera' todos os flags do prograrna
LooPP:
lcall VarCH ; Cbarna sub-rotina de varredura de teclas
lcall DeAcCH ; Detecta acionamento das chaves O, 2 e 7
lcall CoAcCH ; Confirrnação do acionamento das chaves O, 2 e 7
lcall DeDeCH ; Detecta o acionatnento das chaves O, 2 e 7
lcall CoDcCH ; Confirrnação do acionamento das chaves O, 2 e 7
lcall cale ; Calcula a quantidade de números do buffer
lcall Hex7S
lcall TeA05s ; Chama a rotina de tenlpo de 0,5 segundo e aciona
; (P 1)
lcall TeDOSs ; Charna a rotina de ternpo de 0,5 segundo e
; desativa (P 1)
lca!l Transtn ; Transnlite (R2) pelo canal de eo1nunicação serial a
; 1,2 Kbi ts/s
lcall TeAe2s ; Temporiza 2 segundos para o caractere "o"
lcall TeDe2s ; Final da ternporização de 2 segundos
Apêndice EXPERIÊNCIA 01 :
IMPLEMENTAÇÃO E EXECUÇÃO DE
PROGRAMAS EM AsSEMBLY POR MEIO
DO SIMULADOR AVS1M51 ou
DO KIT DE DESENVOLVIMENTO AES-51

A.1 Objetivos
•:• Apresentação das etapas básicas necessárias para a imple-
mentação e execução de um programa em Assembly por meio do
simulador 8051 Simulator/Debugger (AVS1M51.exe) da AVOCET,
versão 1.6, e do kit de desenvolvimento AES-51
•:• Quais são as etapas para o projeto de um programa em Assembly
em um ambiente profissional de trabalho?
•:• Simulação de programas em Assembly utilizando o simu lador
'AVS1M51', da AVOCET, e o Kit de desenvolvimento AES-51

A.2 lntroducão

teórica
As seguintes etapas são necessárias para a implementação e simulação de
um programa em Assembly:
A.2.1- Edição do programa-fonte emAssembly: o editor de textos a ser utiliza-
do é o EDIT do DOS, que é bastante simples e funciona da mesma maneira
que o editor MS-WORD, poré1n co1n muito menos recursos.

Observação: se quiser editar um programa em Assembly, utilizando um


microcomputador (PC), proceda da seguinte maneira:

a) cljque em Iniciar, ~ Programas e Prompt do MS-DOS;


b) escolha o subdiretório ou a pasta em que você armazenará o seu progra-
ma em Assembly, por meio do coma11do CD .. e CD no,ne do subdiretório
(p. ex.: c: \ windows>cd .., c: \ >cd eletrica, c: \ eletrica>). Caso o leitor
190 MICROCONTROLADORES 8051 Apêndice A

queira criar algum diretório dentro do DOS, utilize o coma11do: MD nonie


do novo diretório;
c) digite EDIT.
~

E possível estruturar a edição de um program.a -fonte, em Assembly, em


quatro partes importa11tes:
1 - Colurzas de 1 a 6: reservadas, exclusivamente, para defiI1ir os endereços
da m.e mória de program.a das instruções em Assembly. Esses endereços
são represe11tados por palavras seguidas de dois pontos, que represen-
tam números de posições de 1ne1nória de programa em hexadecimal.
Exemplos: ADRl:, LOOP: etc. Não é obrigatório defilu-los em todas as
lmhas de programa. Geralmente, são definidos no programa, quando:
é necessário destacar determinados endereços iniciais de trechos de
programa de im.p ortância relevada. Por exemplo: PROGPRIN: (en-
dereço inicial de um Programa principal);
são endereços iniciais de sub-rotinas. Por exemplo: ACIONA (ende-
reço inicial da sub-rotina de no1ne ACIONA);
são endereços que definem os locais de desvios condicionais ou i11-
condicionais, utilizados nas instruções de saltos i11condicionais e con-
dicionais. Por exemplo: LOOP (endereço de desvio incondicional,
utilizado em uma mstrução, por exemplo, LJMP LOOP).
2 - Colunas de 7 a 10: reservadas para os mn.e mônicos das instruções em
Assembly. Não há obrigatoriedade de utilizar todas essas colur1as. Por
exemplo: (MOV, ADD etc.).
3 - Colunas de 11 a 18: reservadas para os argu1nentos dos mnemônicos das
instruções em Assembly (MOV A,R2, ADD 30H,@Rl etc.). Não é obriga-
tório utilizar essas colunas.
4 - Coluna 19 em diante: geralmente, utilizada para fazer comentários
explicativos em frente às instruções do programa. Esses com.e ntários têm
a finalidade de fazer a documentação do programa. Todo comentário se
inicia com o símbolo ';'. Não é obrigatório tttilizar essas colunas. Oco-
me11tário também pode ser feito a partir de qualquer coluna.
Veja a seguir um exemplo de u1n programa-fonte em Asse1nbly, editado
utiliza11do a estruturação mostrada anteriormente.
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 191

Endereço de J.\llnen1ônico Argumentos


memória da Comentários (tudo que estiver após o símbolo ";").
da instrução da instrução
ROM
ADRI: MOV A,RO ; Representação sitnbólica da instrução: (A)~(RO)
; O conteúdo do registrador acu1nulador será annazenado
; co1n o conteúdo do re!!istrador RO.
ADO Rl ,A ; Representação simbólica da instrução: (A)~(A) + (RO)
; No conteúdo do registrador acu1nulador, será
; annazcnado o resultado da operação de adição entre
; o conteúdo do registrador acun1ulador A e o conteúdo
; do re!!istrador R 1
LOOP: MO\ T @R0,30h ; Representação si1nbólica da instrução: ((R0))~(30h)
; inove para o conteúdo da posição de 1nen1ória, cuj o
; endereço é dado pelo conteúdo do registrador RO, o
; conteúdo da posição de 1nemória cujo endereço é 30h.
END ; Diretriz do con1pilador Assen1bly
; fi1n do nroora1na.

Antes de editar o programa, crie a pasta e:\ eletríca utilizando o coman-


do MD eletrica. Crie uma outra pasta, dentro da pasta eletrica, cham ada avc51.
Acesse a pasta c: \ eletrica\avc51. Utilize os com.a nd.os de CD eletrica e
CD avc51. Para voltar à pasta anterior, utilize o comando CD ...
Assim, utiliza11do o editor de textos EDIT do DOS, edite o progra1na.
Salve o programa editado no microcomputador, com o nome de exemplol.asm,
11a pasta e:\ eletrica \ avc51.
A.2.2 - Conipilação do programa e1n Assembly: define-se compilad.or como
um programa aplicativo que transforma um arquivo constituído por códigos
ASCII (caracteres que pode1n ser unpressos), gerados 11ormalmente por um
editor de textos, em wn arquivo binário que co11tém os bytes corresponden-
t es às instr u ções (códigos de .1ná quina ) do microprocessador do
microcontrolador, que foram digitadas por meio do editor de textos.
Para compilar um arquivo de texto, crie u1na pasta de 11ome eletrica, e
dentro dela, crie outra pasta chamada avc51 (comando MD no1ne da pasta,
para criar a pasta, CD nome da pasta para acessar a pasta e CD .. para sair dessa
pasta e voltar para a anterior). Copie todos os arquivos do disco da A VOCET
correspondentes aos programas de compilação da frunília MCS-51 da Intel.
Acesse na pasta e:\ eletrica \ avc51 \ e digite:

c:\elctrica\avc5 I >ava5 1 exe1nplo l .asn1 ALLPUBLIC (essa últin1a palavra deve estar en1 letras n1aiúsculas)

Utilizando um compilador da fa1nília de 1nicroco11troladores MCS-51,


no caso, o simulador AVASl.exe da AVOCET, após a execução da compilação
de um arquivo de texto, serão gerados dois arquivos, que são:
192 MICROCONTROLADORES 8051 Apêndice A

um arquivo de mes1no 1101ne, porém com extensão .obj, que correspon-


de ao arquivo compilado contendo os códigos-objeto, ou os códigos de
máqui11a, que correspondem às instruções contidas no arquivo de texto
digitado. Por exemplo, ao compilar um arquivo Exe1nplo1.asm, será ge-
rado o arquivo Exeniplol.obj;
um outro arquivo de mes1no nome, porém com a extensão .pr11, que cor-
respo11de a um arquivo de texto que 1nostra o resultado da compilação,
contendo, para cada linha de programa, o código de 1náquina relativo a
cada instrução. Caso exista um erro de compilação, esse arquivo mostra
qual é a lirtl1a do programa em que ocorreu o erro e também o tipo de
erro. Assim, sempre que houver um erro de compilação, o leitor deve
abrir esse arquivo de extensão .prn, por meio do editor de textos, procu-
rar onde ocorreu o erro, reabrir o arquivo original de exte11são .asni, cor-
rigir o erro e novame11te executar o processo de compilação. Esse pro-
cesso é interativo, e só é finalizado quando 11ão existirem mais erros de
compilação.

Observação: a fase de compilação não mostra erros lógicos de progra-


mação.

A.2.3 - Linkagem do progrania-objeto '.obj': essa etapa tem a finalidade de


reunir, em um único arquivo, vários programas feitos em arquivos diferentes
(método recomendado para executar projetos de software). Caso só exista
um arquivo compilado, essa fase também é obrigatória.
Para linkar um único programa compilado .obj, d igite:

c:\clctrica\avc51 >avl51 cxe1nplo 1 = cxc1nplo l.obj - SY MBOLS (enl le tras 1naiúsculas)

Para linkar vários programas compilados .obj, digitar:

c:\clctrica\avc51 >avl51 cxc1nplo = cxc1nplo 1.obj, cxc1nplo2.obj, ... , cxc1nplon.obj - S YMBOLS

Após a linkage1n, serão gerados vários arquivos, dos quais destacare-


mos algU11s de fundamental relevância:
arquivo de mesmo 1101ne, sem extensão: arquivo gerado co.1no resultado
da fase de linkagem dos programas que compõe1n o projeto. Esse arqui-
vo será utilizado na si1nulação;
arquivo de mesmo 1101ne, com a extensão .1-zex: arquivo para gravar a
memória EPROM do microcontrolador, por meio de utn programador
de 1nemórias EPROM.
IMPLEi\.\ENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 193

A.2.4 - Simulação do programa: o objetivo é a visualização da condição dos


registradores e posições de me1nória por meio da execução e do funciona-
mento passo a passo das instruções do programa projetado.
Durante a simulação, são corrigidos os erros de lógica do projeto do
programa (de software), se existirem.
O programa de simulação que se:rá utilizado é o A VSJM51.exe.
a) Vantagens da si111.ulação:

teste da funcionalidade do programa sem a necessidade do hardware


do produto final;
depuração (correção dos erros) do programa ru1tes de sua implementa-
ção no produto fi11al;
redução de erros de progrruna quando ocorrer a implementação do pro-
grama no produto final.

Para siinular o progrruna editado, compilado e linkado, crie a pasta cha-


mada avsim51, na pastaeletrica (CD eletríca), utilizru1do o comando MO avsi1n51.
Para simular um prograina digite:

c:\ eletrica\ avsi1115 l > avsin,51 - C 1 (C I en, letras n,aiúsculas)


Digite A , que corresponde à utilização do rnodelo 8051 , da família de 1nicrocontroladores da Inte l, consti-
tuída de tuna área de R.OM/ EPROM, RAM, E/Ss e registradores internos, con10 é n1ostrado na Figura A 1.

~ MS-DOS P1omp1 - AVSIM51 8QEJ

Figura A.1 Sírnttlador do 8051 da AVOCET (AVS1M51).


194 MICROCONTROLADORES 8051 Apêndice A

Para carregar o programa editado, co1npilado e linkado para o simula-


dor, proceda da seguinte maneira:
digite na linl1a de comai1do: L (Load), A (Avocet) e e:\ eletrica \ avc51 \
notne do progrania linkado (por exemplo, exemplol se1n extensão);
digite ESCAPE (ESC) para cl1avear o cursor da área de co1nandos do
simulador AVSTM51 para a área interna do microco.n trolador 8051, e vice-
versa, quai1do o leitor pode 1nodificai· as condições dos registradores de
funções especiais e co.n teúdos d.a s posições de memória RAM;
para que o programa apareça na área de memória ROM/EPROM do
mi.crocontrolador, acesse a área interna, utilizando a tecla ESC, e digite
no campo do registrador de função especial PC (Progra1n Counter) res-
ponsável por definir o endereço da próxima instrução a ser executada o
mesmo valor que foi utilizado na i11strução ORG do programa-fonte.
Assim, o programa, alé1n de ser visualizado na tela do simulad.or, tam-
bé1n estará pronto para ser simulado.

Observação:
1 - ORG é uma diretriz do compilador Assembly, utilizada para definir
o endereço i11icial de memória de programa, em que um. programa
ou um trecho de prograina será ar1nazenado.
2 - Utilize os comandos do DOS para mudar de subdiretório:
a) CD no1ne do subdiretório: vai para o subdiretório e:\ nome do
subdiretóri.o.
Ex1: c:>CD eletrica: vai para o subdiretório (pasta) eletrica, ou seja,
e:\ eletrica>
Ex2: e:\ eletrica>CD avc51: vai para o subdiretório eletrica, avc51,
ou seja, e:\ eletrica \ avcSl
b) CD .. : volta ao subdiretório anterior.
Ex.: e:\ eletrica \ avc51>CD.. : volta para o subdiretório anterior, cha-
mado eletrica, ou seja, e:\ eletrica.

A.l Procedimento experimental


O microcomputador em que o leitor executará as experiências pode ser divi-
dido em subdiretórios da seguinte mmeira:
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 195

C: \ eletrica>: crie os seguintes subdiretórios/ pastas: AVCSl, AVEDIT,


AVSIMSl e A VSIM85.
No subd.iretório c:\eletrica\avc51> insira os seguintes progra1nas:
AVA51.exe (o programa compilador Assembly) e o AVL51.exe (programa
Linkador Assembly) a partir do ctisquete fo11te AVSIM51.
No subdiretório e:\ eletrica \ avsin1.Sl> insira o programa A VS1M5l.exe
(simulador da família de microcontroladores 80X51) a partir do disquete fon-
te do A VSIMSl.
Procedime11to para editar, compilar, linkar e simular t1m programa em
Assembly, com base 11a família do 8051/32:
a) o A VS1M51.exe não é executado 110 a1nbiente Windows. Assim, é neces-
sário acessar o a111biente DOS. Para fazer isso, dê um clique em Iniciar
~ Programas e Prompt do MS-DOS;

b) acesse o subdiretório e:\ eletrica \ avc51>;


c) ectite o programa a seguir a partir da sétima coluna, utilizando o editor
de textos EDIT:

; Exernplo 1 - Microcontroladores - Sin1ulação


DEFSEG cxernplo 1, absolutc ; Define o segrncnto de cxcrnplo I con10 Absolutc (área de
; n1en1ória de progran1a.
SEG exernplo 1 ; Define o início do endereço de ,nc,nória de progra,na do
; scgn1ento cxcrnplo 1
ORG 0100b ; O progran1a será carregado a partir da posição de .men1óri.a de
; programa OI OOh
CLR A ; (A) f- #OOh [O conteúdo do acun1ulador (A) será
; anuazcnado com a constante #OOb]. () = conteúdo e #=constante.
l'vlOV R.2,A ; (R2) f- (A) [o conteúdo do registrador R2 será arrnazcnado
; corn o conteúdo do registrador acun1ulador A ].
ivlOV B,R2 ; (B) f- (R2) [o conteúdo do registrador B será armazenado
; corn o conteúdo do registrador R2.
END ; Diretriz do Assernbly para indicar fim do programa (obrigatório).

d) grave esse arquivo com o nome exemplol.as,n (a extensão .as1n significa


um programa escrito em Assembly) no subdiretório c:\eletrica\avc51>.
Utilize o comando Arquivo, Salvar como, do editor de textos EDIT;
e) co1npile o programa da seguinte maneira:
No subdiretório c:\eletrica \avc51>, ctigiteavc51 exemplol.asmALLPLlBLIC
(ALLPUBLIC deve estar em letras maiúsculas).
196 MICROCONTROLADORES 8051 Apêndice A

A compilação gera dois arquivos. Veja e anote os 1101nes desses arquivos


(co1nando dir) e observe o seu conteúdo (comando f:tJpe). O conteúdo des-
ses dois arquivos deve constar no relatório, e eles devem ser explicados.

f) lb.lke o programa como a seguir:


No subdiretório e:\ eletrica \ avc51> digite avl51 exemplol = exemplol.obj -
SYMBOLS (SYMBOLS deve ser escrito em letras maiúsculas).
Dessa linkagem, serão gerados mais três arquivos Veja e anote os nomes
desses arquivos (utilize o co1nando dir) e veja o seu conteúdo (comando
type 'nome do arquivo'). O conteúdo desses três arquivos deve constar
no relatório, descrevendo seu co11teúdo e inter-relacionando com os ou-
tros dois arquivos gerados na fase de compilação.
A simulação do program a já está pronta para ser executada.
g) faça uma simulação do programa:
g.1) acesse o subdiretório c:\eletrica\avsim51> (utilize os comandos CD ..
e CD\ avsi1n51) e digite
avsi'n151 -Cl
Dessa maneira, o simulador de programas AVS1M51, da fa1nília de
microcontroladores MCS-51 é acessado. Digite A para selecionar o tipo de
microcontrolador que será utilizado. Nesse caso, traball1are1nos co1n o simu-
lador do 1nicrocontrolador 8051.
g.2) carregue o progra1na para o simulador como a seguir:
Na área de co1nandos do simulador, digite L (LOAD), A (AVOCEI) e
escreva o nome do programa linkado sem extensão e o caminho (path) no
qual ele se encontra e:\ eletrica \ avc51 \ exemplo 1.
Utilizando a tecla ESC, novamente, mude o conteúdo do registrador
Program Counter (PC) para 010011• Assim, você visualizará o progra1na na área
de memória de programa do simulador (ROM/EPROM).
g.3) faça a simulação
A tecla F10 realiza a si1nulação passo a passo, ou seja, executa instru-
ção por instrução.
A próxi1na instrução a ser executada 11a me1nória de progran1a será sem-
pre a que estiver indicada pelo endereço armazenado no conteúdo do regis-
trador PC e visualizada em azul na instrução da memória do programa do
microcol'\trolador.
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 197

A tecla F9 volta para a condição anterior, após a execução de uma ins-


trução, efetuada por meio da tecla F10.
A tecla Fl executa o programa por inteiro.
No relatório, deve ser descrito o fU11cionamento de cada i11Strução que
foi executada passo a passo. Para fazer isso, anote os valores dos co11teúdos
iniciais e finais dos seguintes registradores ( (A), (B), (R2) e (PC) ), cada vez
que uma instrução for executada.
No relatório, devem ser descritas todas as etapas necessárias para exe-
cutar a simulação de um determinad.o program.a e responder os exercícios
propostos, i11dicados a seguir.

Exercícios e questões propostos


1 - Quais são as etapas necessárias para a execução de um programa em
Assembly? Explique cada uma delas.
2 - Como deve ser o formato de edição de um programa em Assembly?
Dê um exemplo.
3 - O que é compilar um programa? Dê um exemplo de um coma.n do
para compilar um programa em Assembly.
4 - O que é linkar um programa? Dê um exemplo de um comando para
linkar um programa em Assembly.
5 - Qual a finalidade principal da simulação de um programa? Quais são
as vantagens da simulação? Qual é o comando empregado para car-
regar um programa em Assembly utilizando o simulador AVS1M51?
6 - Qual é a função das teclas F1, F9 e FlO, do simulador A VSIM51?

Kit Didático AES-51


1- Executando um programa em código de máquina no AES-51:
1 - Ligue a placa do AES-51.
2 - Pressione a segu11da tecla (2"d) para e11trar no programa mo1útor.
3 - Pressione novamente a tecla PROG (a mes1na da segunda tecla 2"d) para
selecionar o modo de progran1a. No visor, aparecerá a seguinte infor-
mação:
198 MICROCONTROLADORES 8051 Apêndice A

PROG 7000 28672 1


FF 255 Jl ll l l l l
(7000 = endereço inicial da 1nen1ória RAM etn hexadecitual e deein1a l)
(conteúdo da posição de me,nória cujo endereço é 7000h etn
hexaclecin1al, deci111al e binário)

4 - Caso o endereço não seja 7000h, pressione a tecla GOTO, digite 7000 e
pressio11e a tecla ENTER. O endereço 700011 é o endereço i11icial da RAM
exter11a, em que se armazenam os programas a serem executados no kit
de dese11volvimento AES-51.
5 - Pressione a segunda tecla para acessar o modo de entrada de dados (o
caractere* desaparece do display de cristal líquido). Você pode utilizar
as setas(~,~) para mover o cursor para o campo de dados binário,
decimal e l1exadecirnal.
6 - Insira os dados mostrados na tabela a seguir. Você precisa concluir cada
inserção de dados com a tecla ENTER. O e11dereço avança auto1natica-
me11te após cada inserção de dados. Quando você quiser verificar outra
posição de memória, simplesmente pressione a segunda tecla (211<l) e,
utilizando as teclas de seta para ci1na (i) e para baixo (t ), as outras po-
sições de memória e seus respectivos conteúdos. Quando quiser alterar
uma deter1ninada posição, basta acionar a segunda tecla (2nd) novamen-
te, para voltar para o modo de entrada de dados. Para finalizar a entra-
da de dados, pressione a segm1da tecla (2nd) para voltar para o modo de
prograina.

Endereço Código de máquina Endereço Mnemônicos


7000
7003
75 90 OF
11 oc
.. LTX : MOV P1,#0FH
ACALL DELAY
7005 75 90 FF MOV P1 ,#OFFH
7008 11 oc ACALL DELAY
700" 80 F4 SJMP LTX
700C 78 00 DELAY: MOV R0,#0
700E 79 00 MOV R1 ,#0
7010 7AOB MOV R2,#11
7012 C2A8 CLR EXO
7014 D8 FE DJNZ AO,$
7016 D9 FC DJNZ R1,$- 2
7018 DAFA DJNZ R2,$ - 4
701A D2A8 SETB EXO
701C 22 RET

Esse programa faz piscar quatro leds li.gados aos quatro bits mais signi-
ficati vos da porta Pl do kit de dese11volvi1ne.nto.
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 199

7 - Para fazer a verificação do que foi digitado, utilize as teclas de seta para
cima (t) e para baixo (J,).
8 - Pressione a tecla RUN. Digite 7000, se o endereço from não for 7000.
Digite 701C, se o endereço to não for 701C (endereço inicial e final do
progran1a digitado). Pressione a tecla RUN (ou qualquer outra te-
cla, exceto BREAK, IRAM e STEP) para executar o programa. Verifique
se os leds estão piscando. Se não estiverem, repita as etapas 2, 3 e 6 para
verificar os códigos de máquina em cada endereço e faça as correções
11ecessárias.
9 - Pressione a tecla STEP para executar o programa passo a passo. Pressio-
ne a tecla ENTER duas vezes para inserir os e11dereços from e to e, em
seguida, pressione STEP, até que o endereço inicial 7000 apareça.
10- Pressione a tecla RUN para voltar para o 1nodo de execução. Você pode
repetir as etapas 8 e 9 quantas vezes desejar.
11 - Pressione a tecla BREAK para sair do monitor e voltar para o ·sASIC-52.
12 - Pressione a tecla RESET para illiciar o l1ardware.
li - Utilizando o PC para executar o programa por meio de uma transferên-
cia por download:

1 - Edite, compile e linke o programa anterior e denomme-o como lights.as1n.


2 - Conecte o cabo no canal de comunicação serial do PC e no kit de desen-
volvime11to AES-51.
3 - Acesse o subdiretório (pasta AES-51), execute o programa TE.exe, digitando.
4 - Configure o emulador de terminal TE:
4.1 - acesse o DOS (por meio dos co1na11dos: Iniciar > Programas >
Prompt do DOS). Acesse o subdiretório (pasta) AES-51 utilizando
os comandos CD.. e CD AES-51. Execute o programa TE.exe,
digita11do TE. Pressione Alt-c para exibir a configuração do pro-
grama TE. Em seguida, for11eça as seguintes definições:

COl'vl l, 9600, N, 8., l , N, N, Y, Y, >

Finalizada a configuração, é gerado um arquivo chamado


TEPARAM.CFG, que contém as informações de configuração.
4.2 - pressione ESC para sair da configuração;
4.3 - pressione Alt-x para. sair do TE.
5 - Execute o AES-51 utilizando o PC como um computador central.
200 MICROCONTROLADORES 8051 Apên dice A

6 - No DOS, execute TE. Energize o AES-51 e pressio11e a barra de espaços


do PC. O AES-51 responderá com a seguil1te mensagem 11a tela do com-
putador:
* MCS-51 (trn) Basic V 1.1 b*
Rcady
>

7 - Faça o download do programa lights e execute um arquivo hexadecimal:


7.1 - digite RX, CR (tecla ENTER) e Alt-S. Digite o no1ne do arquivo
light.hex. Isso carregará o programa no conteúd.o do endereço 7000h
da memória RAM do AES-51;
7.2 - digite call 7000h. O programa será executado por 1neio do kit de
desenvolvi1nento AES-51.

Ili - Arquitetura da memória do AES-51:

32K bytes de memória ROM (0000h a 03FFFh);


32Kbytes de memória RAM (4000h a 7FFFh). Utilize a memória RAM, a
partir da posição de n1emória 510011;
IV - Endereçamento dos dispositivos de entrada e saída (E/S mapeados em
memória):

display de cristal líquido: FFF3h;


teclado: FFF411;
segunda porta serial: FFF5h;
pri111eira porta serial padrão: FFF6h;
conversor analógico/ digital: FFF7h.

V - Modo monitor:

acione a segunda tecla para acessar o modo 1nonitor;


a função IRAM verifica as 256 posições de memória internas (OOh a FFh)
do processador 8032. Utilize as teclas de seta para cilna e para baixo
para verificar as posições de memória. Os SFRs são verificados, obser-
vando-se as seguintes posições de memória:

(DOh) ~ (A)
(Dlh) ~ (B)
(D2h) ~ (DPL)
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 201

(D3h) """"7 (DPH)


(D4h) """"7 (SP)
(D5h) """"7 (Pl)
(D6h) """"7 (P3)
(D7h) """"7 (PSW)
(D8h) """"7 (IE)
(D9h) """"7 (IP)
(DAh) """"7 (SCON)
(DBh) """"7 (SBUF)
(DCl1) """"7 (PCON)
(DDh) """"7 (TCON)
(DEh) """"7 (TMOD)
(DFh) """"7 (TLO)
(EOh) """"7 (THO)
(El 11) """"7 (TL1)
(E2h) """"7 (THl)
(E3h) """"7 (T2COM)
(E4h) """"7 (T2MOD)
(E5h) """"7 (TL2)
(E6l1) """"7 (TH2)
(E7h) """"7 (RCAP2L)
(E8h) """"7 (RCAP2H)
(E911) """"7 (PO)
(EAl1) """"7 (P2)
a função RUN executa um conjunto de códigos de programa pré-carrega-
dos. Ela pode ser selecionada a partir do monitor, STEP e PROG, acionan-
do-se a tecla RUN. Para sair, pressio11e a tecla BREAK;
a função STEP executa passo a passo um conjunto de códigos de pro-
grama pré-carregados por acionar STEP. Selecione STEP do Mo11itor,
RUN e PROG pressionando a tecla STEP. Para sair pressio.n e a tecla
BREAK;
a função PROG (programa) serve para editar e ler a memória de progra-
ma. Utilize a segunda tecla para alternar entre a escrita e a leitura. PROG
pode ser selecionada a partir do monitor ao acionar PROG. Você pode
202 MICROCONTROLADORES 8051 Apêndice A

selecionar RUN, STEP e IRAM durante a leitura. Para sair, pressisone a


tecla BREAK.

VI - Descrição do hardware:
São oito blocos funcionais:

1 - Microprocessador e memória
2 - Lógica de controle do sistema
3 - Controle de entrada de teclado
4 - Display de cristal líquido
5 - Fonte de energia
6 - Entrada digital
7 - E/S a11alógica
8 - E/S de dados seriais

VII - Descrição dos blocos funciona is:

1 - 80C32 (Ul)-1nicrocontrolador: 16 bits de endereços capaz de endereçar


64 Kbytes de memória. O barramento dos dados e dos 8 bits de endere-
ço são multiplexados no te1npo AD0-7. Sua freqüência de operação é de
11.0592 Ml12.
2 - 75HC373 (U2) - Latch trí-state.
3 - 27C256 - EPROM CMOS de 32Kx2.
4 - 62256 (U4) - RAM Estática CMOS de 32Kx8.

Executando um pro(!rama com o kit didático AES-51,


utilizando o compilador (AVA51.exe) e o linkador
(AVL51.exe) da AVOCET

O programa a seguir te1n a finalidade de calcular a quantidade de 11ú-


meros iguais a OFFl1 do buffer de memória que vai do endereço de memória
6011 até 6411. O resultado é colocado na posição de memória 65h. Esse progra-
ma utiliza o conceito de sub-rotina.
IMPLEMENTAÇÃO E EXECUÇÃO DE PROGRAMAS EM ASSEMBLY 203

defseg cxen1plo8,absolutc
seg exen1plo8

org 70ftl1
subi: n1ov r0,#60h
mov ri ,#05b
tnov 65h,#00h
adr2: clr e
mov a,@rO
subb a,#Oftb
.
JílZ adrl
1nc 65h
adr l:
.lllC rO
djnz r l ,adr2
ret

org 7000h
acall sub 1
010V a,65b
rct
cnd

1 - Edite, compile e llilke o programa mostrado anteriormente.


1.1 - encerre o Windows e acesse o DOS: Iniciar, Prompt do DOS;
1.2 - com os comandos CD .. , CD AES-51, execute o programa termi-
nal Eniulator (Emt1lador), di gitando TE (Enter), a partir do kit di-
dático AES-51;
1.3 - desligue e ligue o kit didático AES-51, pressione duas vezes a bar-
ra de espaços do PC. A segui nte mensagem aparecerá em seu
monitor de vídeo:

TERMINAL EtvlULATOR (e) 1993 AES SYSTEMS, INC.


*MCS-51 (tn1)BASIC V 1. lb*
READY

Digite RX e pressione a tecla ENTER:

>RX

1.4 - pressione ALT-S: na tela do PC, será aberta uma janela solicitando
o nome do arquivo .hexa, que foi compilado e linkado. Digite
e: \ eletrica \ avc51 \ exemplo.hex.
Na tela do PC, será mostrado o conteúdo do arquivo
exeniplo.hex, que foi carregado no kit didático, como é mostrado a
.
seguir:
204 MICROCONTROLADORES 8051 Apêndice A

#>:1370FF0078607905756500C3E694FF7002056508D9F5223E
#>:0570000011 FFE565220F
#>:00000001 FF
.RJ3ADY

1.5 - com o comando CI (Change Internai RAM - que modifica o con-


teúdo da RAM interna), digite CI 60H e pressione Enter:

>CI 60H

Na tela do PC, é mostrado o conteúdo atual da posição de


memória 60h. Mude para OFFH e pressio11e Enter.
Após isso, será mostrado o conteúdo da próxima posição de
memória. Modifique essas posições de memória com os valores
dados a seguir até a posição de memória 64h.
Para fil1alizar o processo de alteração do conteúdo da posição
de memória, pressione Ctrl-C.

60H : OOH OFFH


6JH: OOH OF4H
62H: OOH OFFH
63H: OOH OABH
64H: OOH OFFH
READY

1.6 - para executar o progra1na 110 AES-51, usai1do o terminal de emu-


lação, digite CALL 7000H e pressione Enter;

>CALL 7000H

1.7 - para verificar o resultado gerado pelo programa correspo11dente à


quantidade de números iguais a OFFh, que foi armazenado na po-
sição de memória 65H, digite DI 60H,65H e pressio11e ENTER.

>DI 60H,65H
60H: FF!-1 F4H FFl-1 AB!-1 0011 QJ.H. OOH OOH OOH OOH OOH OOH OOH OOH OOH OOH
READY
>
F1 = Hclp : COM2 9600,N,8, 1 : Echo: N : Add LF: N : Strip LF: Y : Pro1npt Linc: Y
Apêndice
ExPERIÊNCIA 02:
MODOS DE ENDERECAMENTO
, DA
FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL

8.1 Objetivo
•:• Simulação dos diferentes tipos de endereçamento da família de
microcontroladores MCS-51

8.2 lntroducào

teórica
Veja o Capítulo 3.

8.3 Procedimento experimental


Edite, compile, linke e silnule o programa a seguir. Execute as instruções
passo a passo mostrando as condições iniciais e fil1ais dos registradores e as
posições de memória que são afetadas pelas instru.ções.
Para auxiliá-lo na execução passo a passo das instru ções, utilize as tabe-
las do Capítulo 3 para verificar quais registradores e posições de memória
são afetados.

Observação: no relatório, deverão constar todos os registradores e as


posições de memória que são alterados durante a execução do progra-
ma. Não se esqueça de anotar o valor do conteúdo do registrador Program
Counter (PC).

No relatório, deverão constar as respostas às perguntas efet11adas no


decorrer deste Apêndice.
Inicialize os registradores e as posições de memória, digitando as con-
dições iniciais, mostradas a seguir.
206 MICROCONTROLADORES 8051 Apê ndice B

Registradores i11ternos à CPU:


(A)= 8Ch (B)=OACh (PS\V)=32h (PC)=Ol OOh (SP)=20h (PO)=OAAh (Pl)=55h (P2)=28h (P3)=0AE h.

Posições de 1nemória:

(OOh) = 21 h (O Ih) = 25h (02h) = OE2h (03h) = 60h (04h) = 1Ch (05h) = OF2h (06h) = 9Ah (07h) = 18h
(08h) = 30h (09h) = 32h (OAb) = OFh (OBh) = 2Ah (OCb) = 4Eh (ODh) = OF2h (OEh) = OF lb (OFh) = 09b
( !Oh)= 43h ( 11 h) = 44h ( 12h) = OE2h ( 13h) = 6Dh ( 14h) = 1Ch ( 15h) = OF2h (16h) = 9Ah ( 17h) = 18h
( 18h) = 56h ( 19h) = 57h ( !Ah) = OFh (I Bh) = 2Ah (ICh) = 4Eh ( !Oh) = OF2h (!Eh) = OFlh ( IFh) = 09h
(20h) = 2Eh (21 h) = 28h (22h) = 2Ah (23h) = 2Dh (24h) = 23h (25h) = 22h (26h) = 2Ah (27h) = 91 h
(28h) = OAh (29h) = OBh (2Ah) = OCFh (28h) = ODAh (2Ch) = OEEh (2Dh) = OFFh (2Eh) = 6Fh (2Fh) = 49h
(30h) = 77h (31h) = OAb (32h) = OBh (33h) = OFh (34h) = 2Ah (35b) = 4Eh (36h) = OF2h (37h) = OFlh
(38h) = 09h (39h) = 2Eh (3Ah) = OABh (38h) = 5Eh (3Ch) = 40h (3Dh) = 6Ch (3Eh) = 72h (3Fh) = 8Ah
(40h) = !Ah (4 th) = 8.Dh (42h) = OEb (43h) = 6Dh (44h) = lCh (45h) = 02h (46h) = 9Ab (47h) = 18h
(48h) = OAh (49h) = OBh (4Ah) = OFh (48h) = 2Ah (4Ch) = 4Eh (4Dh) = OF2h (4Eh) = OFlh (4Fh) = 09h
(50h) = 1Ah (5 1h) = 99h (52h) = OE2h (53h) = 6Dh (54h) = 1Ch (55h) = OF2h (56h) = 9Ah (57h) = 18h
(58h) = OAb (59h) = OBh (5Ah) = OFh (5Bb) = 2Ah (5Ch) = 4Eh (50h) = OF2b (SEh) = OFl h (5Fb) = 09h
(60h) = 2Eb (61 h) = OABh (62h) = 5Eh (63h) = 4Dh (64h) = 6Ch (65h) = 72h (66h) = 8Ah (67h) = 91 h
(68b) = OAh (69b) = OBb (6Ah) = OCFb (6Bh) = ODAb (6Cb) = OEEh (6Db) = OFFb (6Eh) = 6Fb (6Fh) = 49h
(70b) = 77b (71 h) = OAh (72h) = OBh (73b) = OFh (74h) = 2Ab (75b) = 4Eh (76h) = OF2h (77b) = 11 h
(78h) = 19h (79h) = 2Eh (71\h) = OBh (7Bh) = 5Eh (7Ch) = 4Dh (7Dh) = 6Ch (7Eh) = 72h (7Fh) = 8Ah
DEFSEG EXEtvf PL02, ABSOLUTE
SEG EXEMPL0 2
ORG 0100h ; Define o endereço de mcn16ria de progran1a, cn1 que o progra,na
; será annazenado (ROM/EPROM), ou seja, a instrução MOV PS\V, #OOh
; será annazenada no endereço de 1nen1ória OI OOh (ORG é un1a diretriz do
; Assctnbly).
MOV PS\.V,#OOh ; (PSW) f - #OOh = 0000 0000,,. O conteúdo do registrador PS\V é
; am,azenado con1 a constante(#) OOh. Define: CY = O, AC = O, FO= O, RS 1 = O,
; RSO = O, OV = Oe P = O;
; Perguntas: qual banco foi selecionado? Quais registradores forarn
; selecionados?
rv,ov R7,A ; Represente silnbolican1cntc essa instrução. Descreva cn1 palavras essa
; instrução. Quais são os registradores afetados por essa instrução? Qual é
; o 1nodo de endereça,nento dessa instrução?
MOV R6 ,3Fh ; lde1n ao anterior.
rvrov R5,#6Dh ; Idem ao anterior.
tvlOV 55h,R3 ; Ide,n ao anterior.
MOV 6lh,75h ; lden1 ao anterior.
MOV @R0,#3Ah ; lde1n ao anterior.
rv,ov @Rl ,71h ; ldc1n ao anterior.
tvlOV OEOh,B ; Co,no ficou representada essa inst111ção no si,nulador
; AVSHv151?
; lde1n ao anterior.
; lde1n ao anterior.
ADO A,R4 ; Represente si1nbolican1ent:c essa instrução. Descreva cn1 palavras essa
; instrução. Quais são os registradores afetados por essa instrução?
; Justifique o resultado. Qual é o tnodo de endereçan1ento dessa instrução?
ADDC A,38b ; Idc,n ao anterior.
SUBB A,@RI ; Idem ao anterior.
XRL A,#55h ; ldc,n ao anterior.
MODOS DE ENDEREÇAMENTO DA FAMÍLIA DE MICROCONTROLADORES MCS-51 DA INTEL 207

ANL 32h,A ; lde,n ao anterior.


ORL 44h,A ; Iden1 ao anterior.
fvlOV 07h,C ; (07h) = (20h.7) f- (C). O conteúdo do bit cujo endereço é 07h, que é o
; conteúdo do bit 7 da posição de n1cmória 20h, será armazenado com o
; conteúdo do car1y bit. Pergunta: por que (07b) = (20h.7)? Justifique.
; Qual o n1odo de endereça1nento dessa instrução?
MOV C, OOh ; (C) f- (OOb).
; Descreva detalhadamente c,n palavras essa instrução. Em que bit e
; posição de 1ncn1ória está localizado o bit de endereço OOh? Represente o
; bit OOh na notação de endereço de 1nen1ória e posição do bit 2qh.r.
; Qual é o n1odo de cndereça1ncnto dessa instrução?
fvlOV 6Db, C ; Pergunta: qual é a sin1bologia dessa função? Qual é a descrição sucinta,
; en1 palavras, dessa instrução? Que endereço de n1e1nória e que bit dessa
; posição de n1e1nória estão sendo acessados? Represente isso no fonnato
; 2qh.r.
; Qual é o n1odo de endcreça1ncnto dessa instrução?
END
Apêndice ExPERIÊNCIA 03:
FLUXOGRAMA E PROGRAMACÃO
'
EM AssEMBLY APLICADOS À FAMÍLIA DE
MICROCONTROLADORES
MCS-51 DA INTEL

C.1 Objetivos
•!• Entendimento dos fluxogramas
•!• Simulação de exemplos de programas simples e com loop em
Assembly, utilizando a fam ília de microcontroladores MCS-51

C.2 lntroducão

teórica
Veja o Capítulo 4.

C.3 Procedimento experimental


edite (EDIT do DOS), compile (AVA51.exe) e linke (AVL51.exe) o progra-

ma a seguir;
carregue no si1nulador o programa con1pilado e linkado (L, A, 1101ne do
programa linkado se1n extensão);
ai1tes de simular o progra1na, inicialize os registradores e as posições de
memória co1n as co11dições iiuciais fornecidas a seguir;
execute as instruções passo a passo.

Observação: no relatório deverão constar todos os registradores e as po-


sições de memória alterados durante a execução do programa. Não se
esqueça de anotar o valor do conteúdo do registrador PC. Responda às
perguntas, quando for solicitado.

Considere as seguintes condições iniciais:


21 O MICROCONTROLADORES 8051 Apêndice C

Registradores i11ternos à CPU:

(A)= 8Ch (B) = OACh (PS W) = 32h (PC) = O1OOh (SP) = 20h (PO) = OAAh (P 1) = 55h (P2) = 28h (P3)
= OAEh.

Posições de memória:
(OOh) = 21 h (Ol h) = 25h (02h) = OE2h (03h) = 6Dh (04h) = l Ch (05h) = OF2h (06h) = 9Ah (07h) = 18h
(08h) = 30h (09h) = 32h (OAh) = OFh (OBh) = 2Ah (OCh) = 4Eh (ODb) = OF2h (OEh) = OFI b (OFh) = 09h
( !Oh) = 43h ( 11 h) = 44h (12h) = OE2h (l 3h) = 6Dh (14h) = 1Ch (15h) = OF2h (16h) = 9Ah ( 17h) = 18h
(18h) = 56h ( 19b) =57b (IAb) = OFb (JBb) = 2Ah(1Ch)=4Eh (lDh) = OF2b (IEb)= Oflh (lFh) =09b
(20h) = 2Eh (21 h) = 28h (22h) = SEh (23h) = 2Dh (24h) = 2Ch (25h) = 22h (26h) = 2Ah (27h) = 29h
(28h) = OAAh (29h) = 0801 (2Ah) = OCFh (2Bh) = ODAh (2Ch) = OEEh (2Dh) = OFFh (2Eh) = 6Fh (2Fh) = 49h
(30h) = 77h (3 lh) = OAh (32h) = OBb (33h) = OFb (34h) = 2Ah (35b) = 4Eh (36h) = OF2h (37h) = 11 h
(38h) = 09h (39h) = 2Eh (3Ah) = OABh (38h) = 5Eh (3Ch) = 40h (3Dh) = 6Ch (3Eh) = 72h (3fh) = 8Ah
(40b) = !Ah (41h) = 8Dh (42h) = OE2h (43h) = 6Db (44h) = lCb (45h) = OF2h (46h) = 9Ab (47h) = 18h
(48h) = OAh (49h) = OBh (4Ah) =OFh (48h) =2Ah (4Ch) = 4Eh (40h) = OF2h (4Eh) = OF Ih (4Fh) = 09h
(50h) = 1Ah (51 h) = 99h (52b) = OE2b (53h) = 60h (54h) = 1Ch (55h) = OF2b (56h) = 9Ab (57b) = 18h
(58h) = OAh (59h) = OBh (5Ah) = OFh (58h) = 2Ah (SCh) = 4Eh (SDh) = OF2h (SEh) = OF Ih (5Fh) = 09h
(60h) = 2Eh (6 1h) = OABh (62h) = 5Eh (63h) = 40h (64h) = 6Ch (65h) = 72h (66h) = 8Ah (67h) = 91 h
(68h) = OAAh (69h) = OBCh (6Ab) = OCFh (68h) = ODAh (6Ch) = OEEh (6Dh) = OFFh (6Eh) = 6Fh (6Fb) = 49h
(70h) = 77h (71 h) = OAh (72h) = OBh (73h) = OFh (74h) = 2Al1 (75h) = 4Eh (76b) = OF2h (77h) = OFI h
(78h) = 09b (79h) = 2Eh (7Ah)= OABh (7Bh) = 5Eh (7Ch) = 4Dh (7Dh) = 6Ch (7Eb) = 72h (7Fb) = 8Ah

1 - Faça um programa (fluxograma e programa-fonte) que efetu a a opera-


ção de adição entre 2 bytes localizados nos conteúdos das posições de
memória; cujos endereços são 45h e SAl1. O resultado d.e ve ser armaze-
nado no conteúdo da posição de memória cujo endereço é 6Dh.
Solução:

Soma

INÍCIO DO PROGRAMA-FONTE:
(A)~ (45)h MOV A,45h ; (A) ~ (45h)
(A) ~ (A) + (5Ah) ADO A,5Ah ; (A) ~ (A) + (5Ah)
(60 h) ~ (A) MOV 6Dh,A ; (6Dh) ~ (A)
FIM DO PROGRAMA-FONTE

Fim

Fi~ura C.2 Fluxograma de um programa que efetua a edição entre 2 bytes.

2- O segtmdo progra1na calcula a quantidade de números menores que 38h


de u1na faixa de 1nemória que vai da posição de 1nemória cujo endereço
inicial é 6011 e o final é 7 Al1. O resultado é colocado no conteúdo da
posição de memória cujo endereço é 7Bh.
FLUXOGRAMA E PROGRA,'v\AÇÃO EM ASSEMBLY 21 1

Solução:
Num< 38h

Define buffer de memória (RO) ~ #60h


e zera contador (78h). (R1) f-# 1Bh
(78h) f - #OOh

(C) f- #Ob
(A) f- ((RO))
(A) f- (A) - (C) - #38h

s
(C) = O?
[(A) > #38h ?]

(7Bh) f- (7Bh) + 1

(RO) f- (RO) + 1

Fim

Fl~ura C.3 Fluxograma de um ~.,rogra1na que calcula a quar1.tidade de 11úmeros me110-


res que 38h.
Programa-fonte:
;Início do progn1n1a que calcula a quantidade de elen1entos < 38h
MOV R0,#60h ; Posição inicial do buffer
rvrov Rl,# lBh ; Quantidade de ele1nentos do butTer
MOV 7Bh,#OO ; 'Zera' a posição de n1en1ória que conté1n a quantidade de uún1eros < #38h
ADR2: CLR e ; 'Zera' o car,y bil para não influenciar na operação de subtração
MOV A,@RO ; Coloca no acun1ulador o conteúdo da posição de n1en1ória do buffer
SUBB A,#38h ; Subtrai o (A) con1 a constante #38h para definir o jlag (C)
JNC ADRI ; Se (C) = O (A2:#38h) -> (PC) = ADR 1 (não adiciona u1n ao (7 Ah))
INC 78h ; Se (C) = l (A<#38h), adiciona un1 ao (7Bh)
ADRI: INC RO ; Aponta para a próxi1na posição de 1ne111ória a ser analisada
DJNZ Rl,ADR.2 ; Se a quantidade de elen1entos a seren1 analisados for I O,
; entâ.o salta para ADR2
END ; Tern1ina o programa, se (R 1) = O.
2 12 MICROCONTROLADORES 8051 Apêndice C

A simulação deve consistir e1n:


teste de três números: um menor que 38h, um igual a 38h e um maior
que 38h;
teste do processamento (fazer, teorica1nente, a operação de subtração e
obter o resultado dos fiags de sinalização no PSW para cada uma das
cor1dições de teste (menor, igual e maior que 3811). Comparar com os
resultados obtidos na simulação;
teste das variáveis de controle do buffer de men1ória por 1neio dos regis-
tradores RO e Rl. Verificando todas as vezes que o progra1na desvia, até
11ão desviar mais para o início do programa e até que ocorra a finalização
do mesmo.
C.4 Para o relatório

1 - Descreva com suas palavras o fluxograma da solução de cada um dos


programas.
2 - Descreva com suas palavras o programa-fonte.
3 - Apresente o resultado da simulação passo a passo, mostrando os re-
gistradores de funções especiais e conteúdos de posições alterados
durante a execução do progra1na. Não esquecer o conteúdo do PC e
do PSW e compará-los com os resultados obtidos na simulação.
4 - Descreva sucintamente como o progra1na resolveu o problema por meio
do fluxograma.
5 - Respo11da às questões teóricas do Capítulo 4 do livro.
Apêndice ExPERIÊNCIA 04:
Sue-ROTINA E ESTRUTURACÃO DA I

LINGUAGEM AsSEMBLY APLICADOS


À FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL

D.1 Objetivo
•!• Simulação de programas estruturados em Assembly, utilizando sub-
rotinas para a família de microcontroladores MCS-51 da Intel

D.2 lntroducão

teórica
Veja o Capítulo 5.

D.3 Procedimento experimental


edite (EDIT do DOS), compile (A VA51.exe) e linke (A VL51.exe) o progra-
ma que se segue;
carregue o progra1na compilado e linkado no simulador AVSIM51.exe
(L, A, no1ne do programa linkado se1n extensão);
antes de simular o progra1na, inicialize os registradores e as posições de
memória co1n as condições iniciais fornecidas a seguir;
execute as instruções passo a passo. Erúatize a descrição detalhada do
funcionamento das instruções ACALL, LCALL e REI.

Observação: no relatório, deverão constar todos os registradores e as


posições de memória que são alterados durante a execução do progra-
ma. Não se esqueça de anotar o valor do conteúdo do registrador PC
(PC). Respo11der às perguntas, quando for solicitado.
Considere as seguintes condições iniciais:
214 MICROCONTROLADORES 8051 Apêndice D

Registradores i11ternos à CPU:

(A)= 8CH. (B) = OACH (PS\V) = 32H. (PC) = 01 OOH (SP) = 20H (PO) = OAAH (P l) = 55H (P2) = 28H
(P3) = OAEH.

Posições de men16ria:
(OOH) = 2 lH (OLH) = 25H (02H) = OE2H (03H) = 6DH (04H) = LCH (05H) = OF2H (06H) = 9AH (07H) = L8H
(08H) = 30H (09H) = 32H (OAH) = OFH (OBH) = 2AH (OCH) = 4EH. (ODH) = OF2H (OE.H) = OF IH (OFH) = 09H
( IOH) = 43H ( 1IH) = 44H (12H) = OE2H ( 13H) = 6DH ( 14H) = ICH (15H) = OF2H (16H) = 9AH (17H) = 18H
(18H) = 56H (19H) = 57H (IAH) = OFH (J BH) = 2AH (JCH) = 4EH (lDH) = OF2H {!EH) = OFIH (IFH) = 09H
(20H) = 2EFf (21 H) = OABH (22H) = 5EH (23H) = 40H (24H) = 6CH (25H) = 72H (26H) = 8AH (27H) = 91H
(28H) = OAH (29H) = OCI-l (2AH) = OCFI-I (28H) = ODAH (2CH) = OEEH (2DH) = OFFH (2EH) = 6FH (2FH) = 49H
(30H) = 77H (31 H) = OAH (32H) = OBH (33H) = OFH (34H) = 2AH (35H) = 4EH (36H) = OF2H (37H) = OFI H
(38H)= 09H (39H) = 2EH (3AH) = OABH (3BH) = 5EH (3CH) = 4DH (3DH) = 6CH (3EH) = 72H {3FH)= 8AH
(40H) = IAH (41H) = 80H (42H) = OE2l-l (43H) = 60H {44H) = ICH (45H) = OF2H {46H) = 9AH {47H) = 181-1
(48H) = OAH (49H) = OBH (4AH) = OFH (4BH) = 2AH (4CH) = 4EH (4DH) = OF2H (4EH) = OFIH (4Flf) = 091-I
(50H) = 1Afl (51 H) = 99H (52H) = OE2H (53H) = 6DH (54H) = 1CH (55H) = OF2H (56H) = 9AH (57H) = 18H
(58H) = OAH (59H) = OBH (5AH) = OFH (5BH) = 2AH (5CH) = 4EH (5DH) = OF2H (5EH) = OFI H (5FH) = 09H
(60H) = 2EH (61 H) = OABH (62H) = 5EH (63 H) = 4DH (64H) = 6CH (65H) = 72H (66H) = 8AH (67H) = 91H
(68H) = OAH (69H) = OBH (6AH) = OCFH (6BH) = ODAH (6CH) = OEEI-l (6DH) = OFFH (6EH) = 6FH (6FH) = 491-1
(70H) = 77H (71 H) = OAH (72H) = OBH (73H) = OFH (74H) = 2AH (75H) = 4EH (76H) = OF2H (77H) = OF IH
(78H) = 09H (79H) = 2EH (7AH) = OABH (7BH) = 5EH (7CH) = 4DH (70H)= 6CH (7EH) = 72H (7FH) = &AH

1 - A seguir, são apresentados de forma estruturada o programa-fonte e o


fluxograma, que calculam a quantidade de números iguais a OFFh de
uma faixa de 1nemória que vai da posição de memória 60h a 64h.
O resultado é colocado no conteúdo da posição de me1nória cujo ende-
reço é 65h. Esse programa utiliz a sub-rotinas e estruturou a lit1guagem
Assembly para a linguagem de programação estruturada.

DEFSEG EXENIPLO, ABSOLUTE


SEG EXEtvlPLO
ORG 0100h
; Sub-rotina que calcula a quantidade de nútneros = OFFh
SUB 1: lvlOV R0, #60b ; Posição inicial do buffer
lvlOV Rl ,#05h ; Quantidades de elementos do bufl'cr
lVIOV 65h,#OO ; 'Zera' o contador de nún1cros = OFFh
ADR2: CLR C ; 'Zera' o (C): não influenciar a operação de subtração
lvIOV A,@ RO ; Carrega (A) co,n o conteúdo do buffcr de n1c1nória
SUBB A,#OFFh ; Subtrai o (A) da constante OFFh
JNZ ADR 1 ; Se (A) ;t O(A ;t #OFFh) > (PC) = 1l.DRI [não adiciona un1 ao (65h)]
JNC 65h ; Se (A)= O (A= #OFFh) adiciona u,n ao (65b)
ADR 1: INC RO ; Aponta para a próxin1a posição de n1cn1ória a ser analisada
DJNZ RI ,ADR2 ; Existem n1ais dados a scrcn1 analisados? Se houver, salta para ADR2
RET ; Se não houver, fi naliza a sub-rotina se (R 1) = O e retorna.

; Início do progran1a principal


PROGP: fv!OV PSW,#OOh ; Faz (PS\V) ~ #OOh.
lVlOV SP,#70h ; Define (SP) = 70H (início da Pi lha)
ACALL SUBI ; Cba,na a sub-rotina SUB 1.
END ; Fi111 do progra111a principal

Figura D.l(a ) Programa-fonte e fluxogram a de uma rotina que calcula a qua11tidade de


números iguais a OFFh.
SUB-ROTINA E ESTRUTURAÇÃO DA LINGUAGEM ASSEMBLY 215

SUB1 : Quantidade de nums = FFh


Programa
principal

(RO) <- #60h


(R1) <- #05h
(65h) <- #OOh
(PSW) <-#OOh
(SP) <- #70h
(C) <- #Oh Chama a sub-rotina SUB1
(A) <- #O?
*
[(A) #OFFh?]

Fim
s
*
(A) #O?
[(A)* #OFFh?)

(65h) <- (65h) + 1

{RO) <- (RO) + 1

s
(R1) <- (R1)-1
(R1).t:O?

RET

Figura D.1 (b) Fluxograma de uma rotina que calcula a quantidade de números iguais a
OFFh.

2 - A seguir, são apresentados de forma estruturada o fluxograma e o pro-


grama-fonte, que fazem a adição dos bytes do conteúdo das posições de
memória cujos e11dereços inicial e final são 4011 a 50h. Considere que o
resultado dessa adição pode ser 1naior que 25510. Dessa ma11eira/ a parte
me11os significativa do resultado deve ser annazenada no conteúdo da
posição de memória cujo endereço é 51h/ e a parte mais sigi1ificativa do
resultado deve ser armazenada no conteúdo da posição de memória cujo
endereço é 52h.
2 16 MICROCONTROLADORES 8051 Apêndice D

Soma: adição de 2 bytes (res.=16 bits)

RO <- #40h (início do buffer)


R1 <- #11h (qte de bytes do buffer)
(A) <- #OOh [resultado da soma (- sign)J
(52h) f- (A) [resultado da soma (+sign)J

(A) f- (A) + ((RO))

PROGP: Programa
principal

s (C) = O?
O resultado é menor que 255?
(PSW) f- #OOh
(SP) f- #60h
N
Chama sub-rotina SOMA

(52h) f- (52h) + 1
[se o resultado é maior que 255, então adiciona um (1)
no (52h) - resultado + sign]
Fim

(RO) f- (RO) + 1
[aponta para a próxima posição de memória]

s
(R1) f- (R1) (qtde de bytes do buffer - 1)
R1) * O? (Se R1 * O=> salta p/ analisar
próximo byte do buffer)

(51 h) f- (A) (resultado - sign)

RET

Figura D.2(a) Fluxograma de u1na roti11a que faz a adição dos bytes das posições de
1nemórias cujos endereços inicial e fir1al são 4011 e 50h.
FLUXOGRAMA E PROGRAi'v\AÇÃO EM ASSEMBLY 217

DEFSEG EXEMPLO, .1\BSOLUTE


SEG EXEt-.1PLO
ORG O1OOh ; O progra1na serã arniazenado a partir do conteúdo da posição de rnemória
; de prograrna (EPROM) .
SOMA: MOV R0,#40h ; (RO) é o ponLeiro do buffer. Valor inicial igual a 40b (início da posição
; de 1ne1nória do buffer).
MOV R 1,# 11 h ; (R 1) é uni contador descendente que contérn a quantidade de bytes do
; buffer a serern adicionados (50h - 40h + 1) .
MOV A,#OOh ; 'Zera' o conteúdo do acurnulador que conterá a parte n1enos significativa
; do resultado de 16 bits.
MOV 52h,A ; 'Zera' o conteúdo da posição de 1nc1nória cujo endereço é 52h, que
; será responsável por armazenar a parle n1ais signi fícaliva do resultado de
; 16bits.
ADR2: ADDA,@RO ; Adiciona o resultado - sign ao conteúdo do byte da n1emória
JNCADRJ ; Se o resultado da sotna for tnenor que 255, salta (não adiciona 1
; ao conteúdo da posição de n1cn1ória cujo endereço é 52h (resultado +
; sign).
INC 52h ; Se o resultado da sorna for n1aior que 255, adiciona 1 ao conteúdo da
; posição de 111en1ória cujo endereço é 52h (resultado + sign).
ADRI: INCRO ; Aponta para o próxin10 byte da rnen1ória a ser adicionado.
DJNZ R l ,ADR2 ; Diruinui unia unidade do conteúdo do registrador R.l e salta, se ele
; to r diferente de 7...cro, isto é, há n1ais dados a seren1 adicionados do bufTer
; e n1en1ória.
MOV 5lh,A ; Annazena a parte - sign no conteúdo da posição de 1ne1nória cujo
; endereço é 51 h.
RET ; Retomo da sub-rotina. Simular/explicar dctalhada,nente o funcionamento
; dessa instrução, n1ostrando os conteúdos dos registradores PC,
; SP e da pilha .
.
'
PROGP: MOV PS\V,#OOh ; Faz (PS\V) f-- #OOb. Define RS l = Oe RSO = Ono (PSW), ou seja, define
; banco O (RO até R7 - OOh até 07h).
MOV SP,#60h ; Define (SP) = 60h (início da pilha)
LC1\LLSOMA ; Sin1ular/expliear detalhadan1en1e o funeionan1ento dessa instrução
; n1ostrando os conteúdos dos registradores PC, SP e da pilha.
END ; Fin1 do progran1a principal.

FIQura D.2(b) Programa-fonte de uma rotina que faz a adição dos bytes das posições de
memórias cujos endereços inicial e final são 40h e 5011.
A simulação deve consistir em:
inicializar os conteúdos das posições de 1ne1nória com valores definidos
pelo grupo. Reportar tais valores em relatório;
testar o processamento (fazer, teoricamente, as operações de subtração
e adição obter o resultado dos fiags de sinalização em PSW, para cada
uma das condições de teste. Com.p arar com os resultados obtidos na
s imulação;
executar passo a passo, teoricamente, as instruções ACALL, LCALL e
RET. Comparar com os res ultados obtidos 11a simulação;
218 MICROCONTROLADORES 8051 Apêndice D

testar as variáveis de co11trole d.o buffer de memória por meio dos regis-
tradores RO e Rl. Verifique todas as vezes que o programa desviar, até
11ão desviar 1nais para o início do programa e até que ocorra a fi11alização
do mesmo.
D.4 Para o relatório

1 - Explique a execução das instruções passo a passo realizadas pela simu-


lação, considerando os dados que o grupo adotou para ambos os exercí-
cios (quantidade= #OFFh e soma).
2 - Compare o funcionamento teórico das instruções ACALL, LCALL e RET
com o fu11cionamento simulado, ou seja, 1nostre o resultado do conteú-
do dos registradores PC, SP e da pill1a.
3 - Que modificação será necessária 110 programa de adição se quisennos fazer:
a) a operação de subtração entre os dados da memória;
b) a operação de "OR" e11tre os dados da memória;
c) a operação de 11 AND 11 entre os dados da memóriai
d) a operação de 11 0 R-EX11 entre os dados da memória.
4 - Utilizando sub-rotinas, faça um progra1na estruturado (fluxograma e
programa-fo11te) que calcule a quantidade de nú1neros que apresentam
paridade ímpar e que são maiores que 55h do buffer de memória cujo
en.d ereço inicial é 3811 e o final é 55h. Essa quantidade deve ser armaze-
nada no conteúdo do registrador RS do segundo banco de registrado-
res. Esse programa també1n deve adicionar dois buffers de 1nemória: o
primeiro buffer de memória inicia no endereço 5611 e tem 10 elementos;
o segundo buffer de memória inicia no endereço 6Ah. O resultado da
adição desses dois buffers de memória deve ser arm.aze11ado a partir do
endereço de memória 7Bh.
5 - Utilizando sub-rotinas, faça um programa estruturado (fluxograma e
programa-fonte) que calcule o valor 1náxilno do buffer de memória, cujo
endereço inicial é 3Dh e o final é 52h. O resultado deve ser armazenado
no conteúdo de posição de memória 21h.
6 - Utilizando sub-rotinas, faça um programa estruturado (fluxogra1na e pro-
grama-fonte) que calcule o valor mínimo do buffer de men1ória, cujo en-
dereço inicial é 4Al1 e o final é 57h. O resultado deve ser ar1nazenado no
conteúdo de posição de memória, cujo endereço é 41h.
7 - Entregue os exercícios propostos do Capítulo 5.
Apêndice ExPERIÊNCIA 05:
As PORTAS DE ENTRADA E SAÍDA DA
FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL E SUAS
-
APLICACOES NO CONTROLE DIGITAL
'
DE MÁQUINA E DE PROCESSO

E.1 Objetivo
•!• Simulação de programas em Assembly da família de microcontro-
ladores MCS-51 da Intel utilizando os portes de entrada e saída
para o controle digital de processos

E.2 lntroducão

teórica
Veja o Capítulo 6.

E.3 Procedimento experimental


O campo das portas de entrada e saída do simulador AVS1M51 está situado
no canto inferior direito da tela do simulador AVSIM51, como está indicado
na Figura E.1. Para cada porta da família de 1nicrocontroladores MCS-51,
existem duas informações. A pri1neira inform.a ção diz respeito ao conteúdo
dos latc/1.es, e a segunda informação reporta o nível lógico de cada pino físico.

Figura E.1 O local dos registradores de fu11ções especiais de co11trole das portas de
e11trada e saída.
220 MICROCONTROLADORES 8051 Apêndice E

Características das informações referentes às portas PO, Pl, P2 e P3 110


si1nulador AVSIM51.
+ Dos co11teúdos dos latches de cada porta:
só existe a representação binária;
seus valores podem ser alterados somente quando são feitas opera-
ções de escrita na porta;
seus valores podem ser lidos some11te quando são feitas operações
de leitura.
+ Dos 11íveis lógicos de cada pino das portas:
existem as represe11tações hexadecimal, ASCII e binária. Esses valo-
res podem ser alterados mru1uahnente e por meio das operações de
escrita nas portas.
1 - Utilizando os co1nandos Patch (P) e Patch Code (P), que fazem parte da
área de comandos do simulador A VSIM51, armazene no simulador as
instruções fornecidas a seguir.

; 1º conjunto de instruções - dê sua representação si1nbólica e descreva sucintan,ente o que ele faz.
fvlOV A,#OOh ;
fvlOV PO,A
ANL PO,#OFOh ;
; Tente inserir utn dado qualquer em PO, por digi tação, usando o simulador. O que aconteceu?
; Justifique. Agora, execute a instrução a seguir e observe o que acontece.
rvrov A, PO

; 2° conjunto de instruções - dê sua representação siinbóliea e descreva sucinta111ente o que ele faz.
MOV A #OFFh
MOV
'
PO,A .
fvlOV P l,PO
'.
ANL P2,#0Fb .'
tvlOV A ,PO
'•
'
; 3° conjunto de instruções - dê sua representação si1nbólica e descreva sucinta1nente o que ele faz.
fvlOV A,OFOh
MOV A,P3
ORL P3,#A6h ,.
; 4° conjunto de instruções - dê sua representação si111bólica e descreva sucinta111ente o que ele faz.
JB P 1.0,$
JNB P 1.0,$ ,.
; 4° conjunto de instruções - dê sua representação simbólica e descreva sucintamente o que ele faz .
MOV A,#OIIIIIIOb
CJNE A,P l ,$ .
'

2 - Simule (execute passo a passo) cada conjunto de instruções (do 1° ao


4º), 1nostrando sua representação simbólica, e descreva sucintan1ente
qual sua função de11tro do contexto do progrruna.
AS PORTAS DE ENTRADA E SAÍDA DA FAMÍLIA DE MICROCONTROLADORES 221

3 - Faça o fluxograma e o progra1na-fonte de uma roti11a de te1npo que uti-


lize três contadores. Considere que co11stante 1 = 6011, constante 2 = AAh
e constante 3 = C7h.
Dica: Veja co1no foi feita a rotina de tempo qt1e utiliza dois corttadores,
fornecida 110 Capítulo 6.
4 - Simule a rotina de identificação do acionamento de uma chave mecâni-
ca, com a eliminação do ruído (boun.ce), fornecida a seguir. Adote cons-
tante 1 = OFFh, co11stante 2 = OFFh.
4.1 - Faça a simulação de um acionamento sem a sua confirmação
(acionainento falso) e veja como a rotina funciona.

Detecção de acionamento de uma chave


mecânica com eliminação de bounce

(A) <- #OFFh addr1: MOV A,#OFFh


(C) <- #Ob CLR C
(A) <- (A) - (C) - (P1) SUBB A,P1

s (A)= O?
(Chaves abertas ?) JZ addr1

Chama a sub-rotina de tempo ACALL tempo

(A) <- #OFFh MOV A,#OFFh


(C) <- #Ob CLR c
(A) <- (A) - (C) - (P1) SUBB A,P1
N
s
(A)= O?)
(Chaves abertas?) JZ addr1
END

Fim

Fi~ura E.2(a) Fluxograma de uma rotina que mo11itora o acioname11to de uma chave
mecâ11ica qualquer co1n eliminação de ruído (bounce) .
222 M ICROCONTROLADORES 8051 Apêndice E

\VAIT: MOY A,#OFFh ; Aguarda o ac iona,nento de 111na porta


CLR e
SUBB A,P J
JZ ~VAIT
MOY RO,#conslante l ; Rotina de atraso de te,npo
ATRAS: MOY R l ,#constante2
DJNZ Rl,$
DJNZ RO, ATRAS
MOY A,#OFFh ; Confinna o fechan1ento
CLR e
SUBB A,P l
JZ WAJT ; Foi algu,n ruído do acionan1cnto, reinicia o processo de
; detecção de acionan1cnto
END ; Confirmado o aciona1nento

Fi~ura E.2(b) Propaganda-fonte de uma rotina qt1e morlitora o acioname11to de u1na


chave mecâruca qualquer com elimi11ação d e ruído (bounce).

5 - Simule a rotina que conta o nú.mero de acionamentos e desaciona1nentos


de uma chave 1necânica qualquer.

Número de acionamentos e
desacionamentos de uma chave mecânica )
qualquer com eliminação de bounce

.. addr1 : MOV R2,#00h


(R2) +- #OOh
.
• '
. ACALL ACIONA
Chama sub-rotina ACIONA •

Chama sub-rotina DESACIONA ACALL DESACIONA

(R2) +- (R2) + 1 INC R2


_,_..
....._. .,_,,_,,,,_ ,. ,_..,- .,-..,-,.,- . ~-~·-···-··-···-···-·.,. SJMP addr1
'
-
Fi~ura E.3(a) Fluxograma que co11ta o número d e acionamentos e desacionamentos de
uma chave mecânica qualqtter com eliminação de ruído (bounce) .
AS PORTAS DE ENTRADA E SAÍDA DA FAMÍLIA DE MICROCONTROLADORES 223

MOV R2,#00h
WAITJ: MOV A,#OFFh ; Aguarda o aciona1ncnto de u.ma porLa
CLR e
SUBB A,Pl
JZ ~VA/TI
MOV RO,#constantc 1 ; Rotina de atraso de tc1npo
ATRAS: MOV R l ,#constantc2
DJNZ Rl,S
DfNZ RO,ATJ~AS
MOV A,#OFFh ; Confirn1a o acionan1cnto
CLR e
SUBB A,Pl
JZ ~VA/TI
WAIT2: MOV A #OFFh ; Aguarda o dcsacionan1cnto do bit da porta
CLR e'
SUBB A,Pl
JNZ fVAIT2
MOV RO,#constantc 1 ; Rotina de atraso de Len1po
ATRAS: MOV R l ,#constante2
DJNZ RI ,S
DJNZ RO, ATRAS
MOV A #OFFh ; Confinna o desacionan1cnto
CLR e'
SUBB A,Pl
JNZ WAIT2
INC R2 ; Conta quantas vezes ocorre o aciona111ento e o desacionamento
SJMP WA/Tl

Fi~ura E.3( b) Propaganda-forlte que co11ta o 11funero de aciona111e11tos e desaciona1ne11tos


de uma chave mecânica qualquer com eliminação de ruído (bounce).
6 - Siinule a roti11a que identifica o nú1nero da chave ligada a um determi11a-
do bit da porta PO. Descreva sucinta1nente co1no o programa funciona.

WAJTJ: MOV A,#OFFh ; Aguarda o aciona1ncnto de unia porta


CLR e
SUBB A PI
JZ '
WAITI
MOV RO,#constanle I ; Rotina de ten1po
ATRAS: MOV .R.1,# constante2
DJNZ Rl ,S
DJNZ RO,ATRAS
MOV A,#OFfb ; Confírn1a o acionamento
CLR e
SUBB A,Pl
JZ ~VAITJ
MOV R2,#00h ; Identificação do n(uncro do bit acionado (vai. inic.= O)
MOV A,Pl
ROTA: RRC A ; Rotaciona para a direita com.flag carry bit
JNC OK ; Se (C) = O (o bit foi acionado) > fi1n, caso contrário
INC R2 ; aumenta o nú1ncro do bit (O a 7)
SJtvlP ROTA ; esse bit ainda não foi acionado
OK: END
224 MICROCONTROLADORES 8051 Apêndice E

E.4 Para o relatório

1 - As perguntas são solicitadas em cada item do procedim.e nto experimen-


tal e para cada simulação; descreva sucintamente o fu11cionarnento d.e
cada programa.
2 - Utilizando sub-rotinas, faça um programa estruturado (fluxograma e
progran1a-fonte) que faça o bit 4 da porta 3 piscar a cada 1 segundo.
Dica:

acione o conteúdo do bit 4 da porta 3;


execute uma rotina de tempo de 1 segundo (devem ser calculados os
valores da constante1, co11stante2, ••••••, constanteN).
desacio11e o conteúdo do bit 4 da porta 3;
execute uma rotina de tempo de 1 segundo;
volte incondicionalmente para o início do programa (looping infinito
nesse processo, gera11do um 'pisca-pisca').
3 - Entregue, anexos ao relatório, os exercícios propostos referentes ao Ca-
pítulo 6.
Apêndice
ExPERIÊNCIA 06:
Os T1MERs/CoNTADORES DA
,
FAMILIA DE MICROCONTROLADORES
MCS-51 DA INTEL

F.1 Objetivo
•!• Simulação de programas estruturados em Assembly, que utilizam
os timerslcontadores da família de microcontroladores MCS-51 para
o controle de processos.

F.2 lntroducão

teórica
Veja o Capítulo 7.

F.3 Procedimento experimental


O campo dos registradores de funções especiais de controle dos ti1r1ers/ con-
tadores do si1nulador A VS1M51 está situado no canto superior direito da tela
do silnulador AVS1M5l, como está i11dicado na Figura F.l. Para cada tin1er /
contador da família de microcontroladores MCS-51, existem as seguintes in-
formações:
os registradores de contagem TH/TL;
os fiags das fontes de i11terrupção TF;
os flags de acionamento/ desacionamento dos timers/ contadores;
os fiags G (Gate);
T (ti1ner/ contad.or) e
os fiags selecionadores de modo de funcionamento Ml e MO.
226 MICROCONTROLADORES 8051 Apêndice F

: MS DOS Prompt AVS1M51 !!Ir;]~

Figura F.1 O local dos registradores de funções especiais de controle dos ti,ners/ conta-
dores.
1 - Utilizando os comandos Patch (P) e Patch Code (P), que fazem parte da
área de comandos do si1nulador AVSTM51, armazene o programa da
Figura F.2 no si1nulador.

Rotina de atendimento à fonte de


interrupção do timer/contador O

(0040h)
TOINT: PUSH ACC
Salva (ACC) e (PSW) na pilha PUSH PSW
(THO) ~ #FFh MOV THO,#OFFh
(A) <- (P1) MOV A,P1
Rotaciona o (A) um bit para a esquerda RL A
(P1) <- (A) MOV P1 ,A
Recupera (PSW) e (ACC) da pilha POP PSW
POP ACC

RETI RETI

Figura F.2(a) Fluxograma estruturado que utiliza os tbners/ contadores nos modos Oe 1.
OS TIMERS/CONTADORES DA FAMILIA DE /\1\ICROCONTROLADORES MCS-51 DA INTEL 227

Rotina de atendimento à fonte de


interrupção do timerlcontador 1

(0060h)
TOINT: PUSH ACC
Salva (ACC) e (PSW) na pilha PUSH PSW
(TH1) f- #FFh MOV TH1,#0FFh
(A) f- (P2) MOV A,P2
Rotaciona o (A) um bit para a esquerda RL A
MOV P2,A
(P2) f- (A)
POP PSW
Recupera (PSW) e (ACC) da pilha
POP ACC

RETI RETI

sub-rotina

(0080)
(A) f- (PO) SUBROT: MOV A,PO
(A) f- (A) +1 INC A
(PO) f- (A) MOV PO,A
(A) f- not (A) CPL A
(P3) f- (A) MOV P3,A

RET RET

Figura F.2(a) Fluxograma estruturado que utiliza os tilners/ contadores nos modos Oe 1
(Continuação).
228 MICROCONTROLADORES 8051 Apêndice F

Programa principal:

' (0100h)
(SP) ~ #30h PROGP: MOV SP,#30h
(TMOD) ~ #10h - MOV TMOD,#10h
(THO) ~ #OFFh .- MOV THO,#OFFh
.- MOV TLO,#OOh
(TLO) ~ #OOh
(TH1) ~ #OFFh .- MOV TH1 ,#0FFh
.
(TL1) ~ #OOh • MOV TL1 ,#00h
(IE) ~ #8Ah -
. MOV IE,#8Ah
(TCON) ~ #50h .- MOV TCON,#50h
(PO) ~ #7Fh MOV P0,#7Fh
(P1) ~ #OFEh .- MOV P1 ,#0FEh
(P2) ~ (P1) MOV P2,P1

.
' •

Chama sub-rotina SUBROT


. LOOP:
• ACALL SUBROT
SJMP LOOP
~
'' END

Fi~ura F.2(a) Fluxogran1a estruturado que utiliza os tirners/ contadores 110s 1nodos Oe 1
(Continuação) .

A seguir, está represerltado o programa completo que deve ser armaze-


nado e1n A VS1M5l.

; Esse progran1a é uni cxcn1plo da utilização dos ti,r1ers/contadorcs no Modo O(TIC O) e 1 (T/C 1)
DEFSEG EXEl'vl, ABSOLUT.E ; Define o segn1ento EXEM na 1nemória de progran1a
SEG EXEM ; Segmento EXEM
ORG 0000h ; Após o reset da CPU , o registrador de função especial Progra111
AJMP OI OOh ; Cou11ter (PC) é inicializado con1 o valor 0000h. Dessa n1ancira, a
; CPU inicia a execução do progran,a a partir do endereço 0000h. Co1n a
; utilização dos tilners/contadores é necessário escrever suas rotinas de
; atendin1ento às fontes de interrupção a partir dos endereços OOOBh e
; 001 Bh; o progratna principal não poderá utilizar esse cndcrcçan1cnto.
; Assi1n, utiliza-se unia instn1ção de salto incondicional para o endereço
; inicial do programa principal OIOOh, en1 que ela é escrita.
; Endereço inicial da rotina de atendiu1ento à fonte de interrupção do tirner/contador O
ORG OOOBh ; ;~pós unia intcnupção gerada pelo ti1nerlcontador O, o progran1a é
A.IMP 0040h ; desviado para o endereço OOOBh. Co1110 a rotina de atendimento à
; interrupção do ti111er/contador Ogastará rnais de 8 bytes, é
; utilizada tuna instrução de salto incondicional para a posição de
; n1c1uória 0040h, cn1 que é escrita a rotina de atcndin1cnto à fonte
; de interrupção do ti,ner/contador O.
OS TIMERS/CONTADORES DA FAMILIA DE /\i\lCROCONTROLADORES 1\i\CS·Sl DA INTEL 229

; Endereço inicial da rotina de atendi1nento à fonte de interrupção do ti111er/contador 1


ORG OOlBb ; Após un1a interrupção gerada pelo 1i111er/contador 1, o progra1ua é
AJM_P 0060h ; desviado para o endereço OOOBb. Con10 a rotina de atendimento à
; interrupção do tin1er/contador I gastará 1nais de 8 bytes, é
; utilizada lllna instrução de salto incondicional para a posição de
; n1en1ória 0060h, en1 que é escrita a rotina de atendi1ncnto à fonte
; de interrupção do ti,ner/contador 1.
; Rotina de atendirncnto à fonte de interrupção do titner/contador O
ORO 0040h
TOINT: PUSI-I ACC ; Salva o estado do conteúdo do acumulador e do conteúdo do PSW
PUSH PSW ; na pilha para preservar a execução do progran1a principal após executar
; a rotina de atendimento à fonte de interrupção do tüner!contador O.
MOV THO #OFFh ; Reinicializa o conteúdo de THO co1n o valor prcvia1nentc definido
MOV A,Pl
' ;(A)~(PI)
RL A ; Rotaciona o (A) u1n bit para a esquerda
MOV Pl ,A ;(Pl)~(A)
POP PSW ; Restaura o (PS\\/) e (A) da pilha, para preservar a execução do progran1a
POP ACC ; principal.
RETI ; Reto111a a partir da rotina de atendin1ento à fonte de interrupção do
; ti111er/contador O (Observação: execute passo a passo essa
; instrução, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de n1en1ória afetados pela 1ncs1na.)
; Rotina de atendimento ã fonte de interrupção do tünerlcontador l
ORG 0060h
TllNT: P'USA ACC ; Salva o estado do conteúdo do acu1nulador e o conteúdo do PS\\/
PUSH PS\V ; na pilha para preservar a execução do progra1na principal após executar
; a rotina de atendimento à tente de interrupção do titnerlcontador l.
MOV THO,#OFFh ; Reinicializa o conteúdo de THO co1n o valor previarnente definido
MOV A,P2 ; (A)~ (P2)
RL A ; R.otaciona o (A) un1 bit para a esquerda
MOV P2,A ; (P2) ~ (A)
POP PSW ; Restaura o (PS\\/) e (A) da pilha para preservar a execução do progra1na
POP ACC ; principal.
RETI ; Rcton1a a partir da rotina de atcndirncnto à fonte de interntpção do
; ti111erlcontador 1 (Observação: execute passo a passo essa
; instn1ção, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de n1en1ór.ia afetados pela mesn1a.)
; Endereço inicial da sub-rotina SUBROT
ORG 0080h
SUBROT:MOV A,PO ; Lê (PO)
INC A ; Au1nenta lnna unidade o (PO)
MOV PO,A ; Atualiza (PO)
CPL A ; Co1nplernenta o (A)
MOV P3,A ; Atualiza (.P3)
RET ; Retonta a partir da sub-rotina (Observação: execute passo a passo
; essa instn1ção, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de n1en1ória afetados pela n1esn1a).
; Início do progra1na principal
ORG Ol OOh ; Progran1a principal
MAIN: MOV SP,#30h ; O (SP) foi rnudado de sua condição inicial 07h (após un1 reset)
; para 30h.
230 MICROCONTROLADORES 8051 Apêndice F

MOY TMOD,# 1Oh ; {TMOD) = 0001 0000b faz o tin,erlcontador I no Modo 1 (ti,ner de
; 16 bits de contagen1) e faz o ti111er/contador O no Modo O(tin,er de
; 13 bits de contage1n.
MOY THO,#OFFh ; Inicializa o ti,nerlcontador Opara iniciar a contagetn a partir de FFOOh.
MOY TLO,#OOh ; O ti,nerlcontador O fica: 11111111 xxxOOOOO (contador de 13 bits)
MOY TH 1,#0FFh ; Inicializa o titne,;icontador Opara iniciar a contagern a partir de FFOOh.
MOV TL 1,#00b ; O tirner/contador J fica: 111 111 J l 00000000 (contador de 16 bits)
MOV IB,#8Ah ;(lE)= 10001010b.Faz (EA)= 1(cadaintcrrupçãoé habilitadapelo seu
; bit habilitador), (ET 1) = 1 (habilita o rcconheeitnento da fonte de
; interrupção do lilnerlconlador 1) e (ETO) = 1 (habilita o
; reconhccirnento da fonte de interrupção do rüner!contador O)
MOV TCON,#50h ; (TCON) = 0101 0000b. Faz (TRI) = 1 (liga/executa o
; ti111erlcontador 1) e (TRO) = 1 (liga/executa o ti1ner/contador O).
MOV P0,#7Fh ; (PO) = O111 1111 b. Inicializa o (PO)
MOV PJ ,#OFEb ; (P l ) = l l 11 111 Ob. Inicializa o (P 1)
MOV P2,PI ; (P2) ~ (P I)
LOOP: ACALL SUBROT ; Chama a sub-rotina SUBROT (Observação: execute passo a passo
; essa instrução, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de n1e1nória afetados pela n1es1na).
SJ1v1P LOOP ; Loop do progra1na principal
END

2 - Simule (execute passo a passo) cada instrução d.o programa, mostrando


sua representação simbólica e as condições iniciais e finais dos conteú-
dos dos registradores e das posições d.e n1emória afetados. Descreva tam-
bém, sucintamente, qual é a função de cada bloco de programa no con-
texto total do programa.
3 - Verifique o fu11cionan1ento do ti111er/ contador O no Modo 2:
3.1 - utilizando o comando Patch e Patch Code do simulador AVSIM51,
altere o programa anterior da seguinte maneira:
na rotina de atendimento à interrupção do timer / contador O(TOINT:):
MOV THO,#OFFh "-7 três instruções NOP (no operation)
na rotina do programa principal (MAIN:):
MOV TMOD,#lüh "-7 MOV TMOD,#0211
MOV THO,#OFFh MOV TH0,#23h
MOV TLO,#OOh "-7 MOV TL0,#1111
MOV TE,#8Ah "-7 MOVIE,#82h
MOV TCON,#5011 MOV TCON,#lüh

Observação: dê a representação simbólica, descreva a função de cada


instrução alterada, simule o novo programa e entenda o funcio11amento
do timer/ co11tador Ono Modo 2.
OS TIMERS/CONTADORES DA FAMILIA DE MICROCONTROLADORES i\i\CS-51 DA INTEL 231

4 - Verifique o ft1ncio11a1nento dos timers/ contadores Oe 1 no Modo 3:


4.1 - utilizai1do o con1ando Patc/1 e Patcli Code do simulador A VSIM51,
altere o progra1na anterior da segui11te maneira:

• nas roti11as de atendimento às fontes de interrupção do tinier/ con-


tador O (TOINT:) e 1 (TlINT:)

TOINT: PUSH ACC ; Salva o estado do conteúdo do acu1nulador e do conteúdo do PSW na


PUSH PSW ; Pilha para preservar a execução do progran1a principal após executar a
; rotina de atendin,ento â fonte de interrupção do timer/contador O.
tvlOV A,TLO ; Reinicializa o valor de TI-10 con1 o valor prcvia,nentc
AD D A,# 12H ; definido. Evita atrasos de contagens.
MOV TLO,A ,.
MOV A,Pl ;(A)~(Pl)
RL A ; Rotaciona o (1-\) un, bit para a esquerda
MOV Pl ,A ;(Pl)~(A)
POP PSW ; Restaura o (PS\V) e (A) da pilha para preservar a execução do
POP ACC ; progran1a principal.
RETI ; Reton1a a partir da rotina de atendimento à fonte de interrupção do
; tin1cr/contador O (Observação: execute passo a passo essa
; instrução, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de n1en16ria afetados pela mesn,a.)
; Rotina de atendin1cnto à fonte de interrupção do ti1n cr/contador 1
T IINT: PUSH ACC ; Salva o estado do conteúdo do acu1nulador e do conteúdo do PS\V na
PUSH PS\V ; Pilha para preservar a execução do programa principal após executar a
; rotina de atendin,ento à fonte de interrupção do ti,ner/contador 1.
MOV A,THO ; Reinicializa o valor de THO co1n o valor previan1ente
ADD A,#12h ; definido. Evita atrasos de contagens.
MOV THO,A .
A,P2
'
MOV ; (A)~ (P2)
RR A ; Rotaciona o (A) un1 bit para a direita
MOV P2,A ; (P2) ~ (A)
POP PS\V ; Restaura o (PS\~T) e (A) da pilha para preservar a execução do
POP ACC ; progran,a principal.
R.ETI ; Retoma a partir da rotina de atendimento à fonte de interrupção do
; tirner/contador 1 (Observação: execute passo a passo essa
; instrução, anotando os valores iniciais e finais dos conteúdos dos
; registradores e das posições de 111c1nória afetados pela n1esn1a.)

na rotina do progra1na principal (MAIN:):


MOV TMOD,#33H
MOV THO,#llH
MOV TLO,#llH
MOV IE,#8AH
MOV TCON,#50H
232 MICROCONTROLADORES 8051 Apêndice F

Observação: dê a representação simbólica, descreva a função de cada


instrução alterada, simule o novo programa e entenda o funcio11amento
dos tiniers/ contadores O e l, no Modo 3.

F.4 Para o relatório


1 - Dê uma breve d escrição do funcionamento geral do uso dos ti11iers / con-
tadores em um programa estruturado, desde o momento em que ocorre
a interrupção, de quando a rotina de ate11dimento à fonte de interrup-
ção é atendida e se há o retorno ao programa principal. Descreva uma
condição de simulação, mostrando esse processo por meio dos conteú-
dos dos registradores e das posições de memórias que foram afetados.
2 - Descreva objetivamente o que esse progra1na faz.
3 - Modifique o programa anterior para que ele tenha as seguintes caracte-
rísticas:
3.1 - timer / contador O:
programado como contador;
no Modo O;
com sua contagem sendo controlada pela interrupção externa INTO\;
com o valor inicial de contagem igual a 6493h.
3.2 - ti1ner / contador 1:
programado como tinier;
no Modo 2;
para que a cada 100 1nilissegundos seja gerada rnna iI1terrupção TFl;
valor inicial da contagem 88 h.

4 - Elabore um programa estruturado (fluxograma e programa-fonte) que


faça o bit 4 da porta 3 piscar a cada 1 segundo, utilizando o ti1ner / conta-
dor O para gerar a roti11a de tempo de 1 segu11do.
5 - Faça um programa estruturado (fluxograma e progra1na-fonte) de um
relógio digital, utilizando timer/ contadores. Considere que às portas de
Oa 3 estão ligados quatro displays de sete seg1nentos (D7S0, D7D1, D7S2 e
D7S3 ). Coloque a indicação dos minutos nos displays D7S1 e D7SCY e a
indicação das horas nos displays D7S3 e D7S2.
6 - Resolva os exercícios propostos do Capítulo 7.
Apêndice
EXPERIÊNCIA 07:
A INTERFACE DE COMUNICACÃO
, SERIAL DA
FAMÍLIA DE MICROCONTROLADORES
MCS-51 DA INTEL

G.1 Objetivo
•!• Simulação de programas estruturados em Assembly, que utilizam a
interface de comunicação serial da família de microcontroladores
MCS-51

G.2 lntroducão teórica


'
Veja o Capítulo 8.

G.3 Procedimento experimental


O campo dos registradores de fu11ções especiais de controle da interface de
comunicação serial do simulador AVSIM51 está situado na altura média do
lado direito da tela do simulador AVSIM51, como está indicado na Figura G.1.

Figura G.1 O local dos regish·adores de funções especiais de controle da i11terface de co-
municação serial.
234 MICROCONTROLADORES 8051 Apêndice G

Nessa região, são apresentados os registradores de funções especiais do


buffer da interface de comunicação serial SBUF, do registrador de controle da
interface de comunicação serial SCON e do registrador de prio.rida.d e PCON.
1 - Utilizm1do os comandos Patch (P) e Patch Code (P), que fazem parte da
área de comandos do simulador AVSIM51, armazene o programa da
Figura G.2 no simulador.

DEFSEG EXEM, ABSOLUTE ; Define o seg1nento de progra1na EXEM


SEG EXE ivt

()RG 0000h ; A.pós o rese1da CPU, o progra1na prossegue no endereço 0000h


AJMP 0100h ; (durante o aciona1nento da chave de resel ou após a 'encrgizaçào' do
; sistcn1a, por n1cio do circuito de resel fonnado por un1 resistor
; en1 paralelo co1n tun diodo e en1 série con1 un1 capacitor que está
; ligado ao pino de Rcsct da CPU). Con10 foi pedido que o programa
; principal fosse escrito no endereço de 1nen1ória de progran1a O1OOh,
; un1 salto incondicional foi utilizado para tal posição de 1ncn1ória.
ORG 0023h ; Após urna interrupção do canal serial, o programa prossegue no
RETI ; endereço '0023h' e retorna a partir rotina de atenclin1ento à fonte
; de interrupção do canal de comunicação serial.

ORG Ol OOh ; Início do progra1na principal


ivlAIN: MOV SCON ,# 1Oh ;(SCON) +- # 00010000b. Progratna o canal serial con10 registrador de
; dcsloca1ncnto e baud rate de f.,_. .,./12 (,nodo O).
MOV IE,#90h ; (IE) = 1001 0000b. Faz (EA) = l (cada inte1Tupção é habilitada pelo seu
; bit habilitador); (ES) = 1 (habilita a interrupção de comunicação serial)
MOV A,#55h ; (A)+- #55h (dado a ser trans1nitido)
.LOOP: MOV SBUF,A ; (SBUF) +- (A). Carrega o dado a ser transn1itido no (SBUF), e é iniciada
; a trans1nissão serial
JNB TI ,$ ; Se (TI)* O(o dado ainda não foi transn1itido serialn1ente, bit a bit)=>
; (PC) +- $ (salta para o próprio endereço da instrução JNB). Aguarda ser
; trans1nitido. Quando o dado é transmitido, fàz (TI) = 1, e é gerada tuna
; interrupção do canal serial (salta para o endereço 0023h - rotina de
; serviço de co1nu1licação serial).
CLR TI ; (TI)+- O(libera canal de con111nicação serial para a transn1issão de un1
; novo dado)
CPL A ; (A) +- co1nplc1ncnto de u1n do (A)
SJtvlP LOOP ; loop do prograrna principal
EN D

Figura G.2(a) Programa-fonte estruturado de comunicação serial.


A INTERFACE DE COMUNICAÇÃO SERIAL DA FAMÍLIA DE MICROCONTROLADORES MCS-51 DA INTEL 235

Rotina de atendimento à interrupção do


canal de comunicação serial (0023h)

(0023h)
RETI Serial: RETI

Programa principal

• , (0100h)
.. PROGP MOV
(SCON) f - #1 Oh SCON,#10h
(IE) f- #90h •
MOV IE,#90h
(A) f - #55h
.. MOV A,#55h

' . .

• ,
(SBUF) f- (A) .

LOOP: MOV SBUF, A
.
•• . ' ,

-
s
'
(TI)= O?
JNB TI,$

N

(TI)<- #Ob CLR TI
(A) f - not (A)
GPL A

' , SJMP LOOP


'
END

Figura G.2(b) Fluxograma estruturados de comunicação serial.

Esse programa faz a transmissão serial dos bytes 55h e Aah, no Modo O,
co11tinuamente.
2 - Simule (execute passo a passo) cada instrução do programa, mostrando
sua representação simbólica e as condições iniciais e finais dos conteú-
dos dos registradores e das posições de memória afetados. Descreva tam-
bé1n, sucintamente, qual é a função de cada bloco de programa no con-
texto total do programa.
3 - Programa de transmissão serial no Modo 1: esse programa h·a11s1nite,
serialmente, 5511 e Aah, considera11do uma baud rate = 9,6KHz, que a
fosç =l l,059MHz, o timer 1, no Modo 2 de operação (valor de
236 MICROCONTROLADORES 8051 Apêndice G

recarrega1ne11to automático = FDh). Assim, mude o progra1na anterior,


11a parte do prograina principal, da seguinte maneira:

NIAIN: MOV SCON,#40h ; (SCON) ~ #00 1o oooob. Progran1a o canal serial con10 UART de
; 8 bits e baud rate variável.
MOV TMOD,#2011 ; (TMOD) ~ #00.1 O 0000b. Progran1a o ti111er .1 no Modo 2
; (8 bits con1 recarregarnento automático).
MOV THl,#OFDh ; (TH 1) ~ FDh. Valor para gerar utn baud rate de 9,6Kl-lz
; (Recarregador auto1nátieo.)
MOV TLl ,TH 1 ; (TLI) ~ (THI). Valor inicial para um baud raie de 9,6KHz
MOY IE,#90h ; (IE) ~ # JOOJOOOOb. Faz (EA) = 1 (cada interrupção é habilitada pelo
; seu bit habilitador); (ES) = 1 (Habilita a interrupção de eomunic-ação
; serial) e não habilita a interrupção do tirner 1.
MOV TCON,#40h ; Liga/executa o li,ner 1.
MOV A,#55h ; (A)~ #55h (byte a ser transtnitido).
LOOP: MOY SBUl\ A ; (SBU.F) ~ (A). Carrega o dado a ser transn1itido etn SBUF e inicia a
; transmissão serial.
JNB TI,$ ; Se (TI)* O(o dado ainda não foi transrnitido seriahnente, bit a bit) =>
; (PC) ~ $ (próprio endereço da instn1ção JNB), aguarda ser trans1nitido.
; Quando o dado é transrnitido, faz (TI) = 1, e é gerada urna intcrntpção da
; fonte de interrupção da interface do canal de eo1nunicação serial (salta
; para o endereço 0023h - rotina de atendin1ento à comunicação serial).
CLR TI ; (TI) ~ O (libera canal de con1unicação serial para a trans1nissão de
; utn novo dado).
CPL A ; (A) ~ eo1nplen1ento de um do (A).
SJtvlP LOOP ; loop do progran1a principal.
END

4 - Simule (execute passo a passo) cada instrução do programa, mostrando


sua representação simbólica e as co11dições iniciais e finais dos conteú-
dos dos registradores e das posições d.e memória afetados. Descreva tam-
bé1n, sucintamente, qual é a função de cada bloco de programa no con-
texto total do programa.
5 - Simule o programa-fonte estruturado que utiliza um dos membros da
família de microcontroladores MCS-51, que seja capaz de executar as
seguintes atividades:
a) programar o canal de co1nunicação serial no Modo 1 com baud rate
de 2,4KHz, considerando que o oscilador a cristal apresente uma
freqüência de f0 sc = 11,059MHz;
b) obter as i1tformações recebidas do canal de comunicação serial e
armazená-las no conteúdo das portas O, 1, 2 e 3. Considere que as
portas O, 1, 2 e 3 esteja1n ligadas a qt1atro iI1terfaces que acionam um
co11junto de oito leds cada uma;
c) o programa principal deve ser escrito no endereço de memória de
programa 0700h.
A INTERFACE DE COMUNICAÇÃO SERIAL DA FAMÍLIA DE MICROCONTROLADORES MCS-51 DA INTEL 237

Solução: ------:~~- ~ - ~~-:-------


Rotina de atendimento à fonte de
interrupção do canal de comunicação
serial (0023h)

{0023h}
(RI) f- #Ob Serial: CLR RI
(A) f- (SBUF) MOV A,SBUF

RETI
RETI

Programa principal:

(0700h)
(SCON) f- #50h . MAIN: MOV SCON,#50h
{TMOD) f- #20h MOV TMOD,#20h
{TH1} f- #F4h MOV TH1 ,#0F4h
(TL1) f- (TH1) MOV TL1,TH1
(IE) f- #90h . MOV IE,#90h
{TCON) f- #40h MOV TCON,#40h
(A) f-#nh . MOV A,#77h

' . .
••

(PO) f- (A) MAIN: MOV PO,A


(P1) f- (A) MOV P1,A
(P2) f- (A) MOV P2,A
(P3) f- (A) MOV P3,A

-
,
••
SJMP LOOP
END

Fi~ura G.3(a) Fluxograma da solução do Exercício 5.

DEFSEG EXEM,ABSOLUTE ; Define o scgu1ento de progran1a EXENI


SEG EXEtvI
ORG 0000h ; Após o reset da CPU, o progran1a prossegue no endereço 0000h
AJMP 0700h ; (durante o acionan1ento da chave de reset ou após a 'encrgizaçào' do
; siste111a, por n1eio do circuito de reset formado por uni resistor
; en1 paralelo con1 un1 diodo e en1 série con1 um capacitor que está
; ligado ao pino de reset da CPU) . Con10 foi pedido que o progra1na
; principal fosse escrito no endereço de me1nória de progran1a 0700h,
; u1n salto incondicional foi utilizado para tal posição de 1ne111ória.
ORG 0023h ; Após urna interrupção do canal serial, o programa prossegue no
; endereço '0023H', retorna a partir da interrupção de co1n unicação serial.
238 MICROCONTROLADORES 8051 Apêndice G

CLR RI ; (RI)~ O. Lin1pa oflag de intcrn1pção de con1unicação serial


MOV A,SBUF ; (A) ~ (SBUF). Obtém o dado.
RETI ; Retorna a partir da rotina de serviço da interrupção serial
ORG OIOOH ; Progran1a principal
l'vlAIN: l'v!OV SCON,#50h ;(SCON) ~ # O1O 0000b. Progran,a o canal serial con10 UA RT
; de 8 bits, baud rate variável e babilita a recepção serial.
MOV TMOD,#20h ; (TMOD) ~ #001 O0000b. Progran1a o tbner I no Modo 2
; (8 bits, co111 rccarrcga111cnto autornático ).
MOV THl ,#OF4h ; (TH 1) ~ F4h. Valor para gerar baud rate de 2,4KHz (recarregador
; auton1ático.
MOV TLl ,THI ; (TLI) ~ (TH 1). Valor inicial para un1 baud rate de 2,4.KHz
MOV IE,#90h ; (IE) ~ #1001 0000b. Faz (EA) = 1 (cada interrupção é habilitada pelo seu
; bit habilitador); (ES) = 1 (Habilita a interrupção de comunicação serial e
; não habilita a interrupção do titner 1.
MOV TCON,#40h ; Liga/executa o íin1er 1.
MOV A,#77h ; (A) r #77h
LOOP: MOV PO,A ; (PO) ~ (A)
MOV Pl,A ; (PI) ~ (A)
MOV P2A ; (P2) r (1~ )
MOV ' ; (P3) ~ (A)
P3,A
SJlvtP LOOP ; loop do prograrna principal.
END

Figura G.3(b) Progra1na-fonte da solução do Exercício 5.

6 - Simule (execute passo a passo) cada instrução do programa, mostrando


sua representação simbólica e as condições iniciais e finais dos conteú-
dos dos registradores e das posições de memória afetados. Descreva tam-
bé1n, suciI1tame11te, qual a fu11ção de cada bloco de programa 110 contex-
to total do programa.
7 - Progra1na de recepção serial no Modo 1: esse programa transmite,
serialme11te, 55h e Aal1, considerando uma baud rate = 2,4 KHz, que a
f osc =11,.059 MHz, o tímer 1 no Modo 2 de operação (valor de
recarrega1nento automático = F4h). Dessa forma, mude o programa an-
terior, na parte do programa principal, da seguinte maneira:

DEFSEG EXEM, ABSOLUTE ; Define o segrncnto de prograrna EXEM


SEG EXElvt
ORG 0000h ; 1-\pós o reset da CPU, o progran1a prossegue no endereço 0000h
AJMP 0100h ; (durante o aciona111ento da chave de reset ou após a 'energização' do
; rnes1no, por rneio do circuito de reset fonnado por un1 resistor
; en1 paralelo con1 um diodo e en1 série con1 urn capaeitor que está ligado
; ao pino de reset da CPU). Con10 foi pedido que o progra111a principal
; fosse escrito no endereço de mcn1ória de prograrna 0700h, foi utilizado
; um salto incondicional para tal posição de n1ernória.
ORO 0023h ; Após urna interrupção do canal serial, o prograrna prossegue no
; endereço 0023h e reton1a a partir da interrupção de cornunicação serial.
A INTERFACE DE COMUNICAÇÃO SERIAL DA FAMÍLIA DE MICROCONTROLADORES MCS-51 DA IÍ\ITEL 239

CLR RI ; (RD ~O. Exclui o./lag de intern1pção de con1unicação serial.


MOV A,SBUF ; (A) ~ (SBUF). Obté1u o dado.
RETI ; Retoma a partir da rotina de serviço da intern1pção serial.
ORO OIOOH ; Programa principal.
tvlAIN: MOV SCON,#50b ;(SCON) ~ f!. 010 0000b. Progra1na o canal serial corno UART
; de 8 bits, baud rate variável, e habilita a recepção serial.
MOV TMOD,#20h ; (TMOD) ~ #001 O 0000b. Progran1a o ti,ner I no Modo 2
; (8 bits, eo1n recarregarnento auto,nátieo).
MOV TH l,#Of4b ; (TH 1) ~ FDh. Valor para gerar baud rate de 2,4KJ[z (reearrega1nento
; auton1ático).
MOV TLI ,THl ; (TL 1) ~ (TH J). Valor inicial para un1 baud rate de 2,4KHz
MOV IE,#90h ; (IE) ~ # 1001 0000h. Faz (E,!\) = 1 (cada intem1pção é habilitada pelo seu
; bit habilitador); (ES) = 1 (Habilita a intern1pção de co,nunicação serial)
; e não habilita a interrupção do tirner l.
MOV TCON,#40h ; Liga/executa o ti,ner 1.
MOV A,#77h ; (A) +- #77h
LOOP: MOV POA ; (PO) ~ (A)
'
MOV PIA ; (P l)~ (A)
MOV P2A ; (P2) ~ (A)
MOV P3,A ; (P3) ~ (A)
SJMP LOOP ; toop do progran,a principal.
END

G.4 Para o relatório


1 - Mude o programa 11úmero 1 para atender às seguÍl1tes condições:
+ operar no Modo 2;
+ baud rate = f osc/32;
+ definir o nono bit dos dados a serem transmitidos, iguais ao valor
do bit de paridade.
2 - Mude o programa número 1 para transmitir co1n ba·ud rate = 2,4KHz,
co11siderru1do fosc = 11,059MHz.
3 - Mude o progra1na anterior para que a transmissão opere no Modo 3 e
que o nono bit seja igual a 1.
4 - Faça um programa estruturado (fluxograma e progra1na-fonte), que
trans1nita serialmente uma string de caracteres (bytes em posições de
memória subseqüe11tes), localizada no buffer de memória cujo endereço
injcial é 30h e o endereço final é 50h. A transmissão deve ser com UART
de 8 bits com freqüência de comunicação de l,2KHz. Qua11do finalizada
a comunicação serial de toda a stririg de caracteres, ar1nazene no con-
teúdo da posição de m emória 51h o dado CF11 e ar1nazene no co11teúdo
da porta 1 o dado AAI1.
240 MICROCONTROLADORES 8051 Apêndice G

5 - Faça um programa estruturado (fluxograma e programa-fonte), que re-


ceba 20 caracteres do canal de co1nunicação serial. Esses dados devem
ser annazenados na memória RAM interna a partir do conteúdo da po-
sição de memória 40h.
6 - Faça um programa que após transmitir um byte no Modo O e aguarde
receber o byte 7Fh. Quando acontecer isso, escreva no conteúdo da por-
ta 1 o byte 34h.
7 - Resolva os exercícios do Capítulo 8.
,
INDICE REMISSIVO

A de informação, unidade básica


de, 3
Ação de tomada de decisões, 5 Armazenamento de informações
Acesso, tempo de, 23 memória de, 9
Acionamento Armazenamento de programa,
de bips, 10 memória de, 5, 8
de Gates de tiristores, 135 Armazenamento temporário de
de um bip, 6 informações, 7
de um relé, 6 Arquitetura
de uma chave mecânica, 139 básica do microcontrolador 8051,
mo11itoração do, 140 18
Acionamentos de sistemas microprocessados/
de interfaces por entrada, 133 microcontrolados, 11
mo.n itorando, 133 Arquivo
Acumulador, 51, 134 binário, 191
conteúdo do, 87 em código ASCII, 80
Adição, operação de, 50 Assembly, 116
Alto-falai1tes, 10 Atendimento
Analógicos/ digitais, conversores, 4 à fonte de interrupção, rotina de,
Aqruivo-binário,
,
80 24
Area de ai·mazenamento de informa- rotinas de, 26
ções, 9 sub-rotina de, 44
Arithmetic Logic Unit, 7.Veja também Automação
ULA embarcada, 4
Armazenamento industrial, 4
dainformação,83 predial, 4
de dados, memória de, 5 residencial, 4
242 Microcontroladores 8051

B de transmissão, 168
informação do, 85
Baixa potência Busca
modo de, 18 das i11struções na me1nória de
operação de, 44 programa interna, 26
Baixo, linguagem de nível, 77 ciclo de, 13
Banco de registradores, 108 Byte, 1
Bancos de registradores, 30 de código, 27
Bandeiras de sinalização, 49. Veja
ta,nbém. flags
Barramento, 10
e
bidirecional, 10 Caixa eletrônjco de banco, 6
de dados, 10, 43, 130 Cami11ho de processamento da
de endereços, 10, 11, 27 informação, 85
de ten1porização de controle, 10 Canal de comunicação serial, 5, 10,
interno, 126 25, 41, 104, 147, 153, 169, 171
unidirecional, 10 Capacitor, 40
Bau d rate, 45, 153, 174 Característica de operação, 43
Binary digi t, 1 Carry bit flag, 50
Bip, acio11amento de, 6 Carry bit, 56
Bips, acionamento de, 10 Cartão magnético, 6
Bit a bit, manipulação, 78 Ce11tral Processing Unit, 3
Bit, 1 Cérebro,3
de paridade, 174 Chave aberta, 130
desabilitador global, 149 Chave mecânica, 139
Bits acio11amento de uma, 139
de entra.da de informação, 131 Cl1aveame11to, 139
de sinalização, 85 ruído de, 141
sinalizadores, 7 Chaves mecânicas, eliminando o
Bloco de temporização e controle, 6, ruído gerado por, 138
8, 11 Chip enable, 39
Blocos Chip select, 39
básicos de microcomputadores, 4, Ciclo
5 d.e busca, 13
diagramas de, 79 de execução, 13, 14
Booleanas, instruções, 129 de instrução, 13
Bounce, 139 de máquina, 42, 43, 151, 153
Buffer quantidade total de, 136
de entrada, 125 Circuito
de memória de dados, 83 de reset, 12
de memória, 90 integrado, 3, 39
de memória, controles do, 91 pseudobidirecional, 128
de recebimento, 168 esquema elétrico de um, 48
índice Remissivo 243

Circuitos Conhecime11to técnico especializado,


integrados, 10 77
lógicos, 3 Conjunto
variedade de, 3 de instruções do dispositivo, 79
Clock, 42 de instruções, 2, 59
de trai1smissão, 169 Contador
do deslocamento, 171 de eventos, 152
do oscilador, 153 de programa, 12
fonte de, 41 asce11dente binário, 162
Cobre, trilhas de, 10 ascendente decimal, 163
Código decimal de números ímpares, 163
byte de, 27 descendente haxadecimal, 162
da instrução, 109 Contadores de display de cristal
de barra, leitores de, 154 líquido, 39
de máquina, programa em, 78 Conteúdo
magnético, leitores de, 154 do acumulador, 87
Código-objeto, 78 do registrador, 87, 106, 109
Códigos Co.n trole
ASCII, 191 de leitura, sinal de, 26
de máquina, 102, 191 de ponto, sistema de, 167
Compilação, 78 digital de máquina e de processo,
do programa em Assembly, 191 125-146
Complemer1to d.e dois, 51 do fluxo de informações, 8
Computação, co11ceitos básicos da, 1 doloop,85,92
Computador, trartsmissão de dados gerenciamento de, 23
para outro, 6 Controles do buffer de memória, 91
Computadores de grartde porte, 4
Conversores
Comunicação
artalógicos/ digitais, 4
de multiprocessadores, 174
digitais/ artalógicos, 4
paralela, portas de, 4
CPU desenergizada, 7
Comunicação serial, 107, 114
Cristal, freqüê11cia do, 136
assíncrona, 54
Curto-circuito, 14
de dados, 167
Custo/benefício, 89
velocidade de, 171
interface de, 168
por buffer, 168 D
canal de, 10
portas de, 4 Dados internos, memória de, 28
Conceitos básicos da computação, 1 Dados
Condição dos registradores, 193 barramento de, 10, 43, 130
Condições de estresse, 80 comunicação serial de, 167
Confiabilidade, 80, 118 memória de, 4, 27-28
Conflito de sinais, 35 operações de movimentação de, 81
244 Microcontroladores 8051

transferência de, 6 acioname11to de um bip, 6


Data Pointer, 23 acionamento de um relé, 6
registrador, 56 escrita na memória de vídeo, 6
Decodificação, 6 tra11smissão de dados para
da senl1a, 6 outro microcomputador, 6
dos endereços, 36 Doctor Norton Utilities, 3
Decodificador, saída do, 39 Documentação do programa, 81
Definição de sub-rotina, 102 DPTR, registrador, 23
Descrição da pinagem do 8051/31,
21-23 E
Desenho em forma de rascunho, 86,
90 E/S externa, uso de, 39
Deslocamento E/S, mapeamento de, 39
clock do, 171 Edição do programa-fonte em
de recepção, 171 Assembly, 189
registrador de, 171 Editores de texto, 3, 191
Destino, registrador de, 171 Elaboração
Desvios condicionais ou incondicio- de programas simples, 77
nais, 190 de projetos de equipamentos
Diagrama inteligentes, 78
de tempo, 48 Elétrica, energia, 8
funcior1al do latcl1, 126 Empilhamento físico de objetos, 106
funcio11al simplificado, 172 Emt1lação do programa, 80
Diagramas Endereçamento
de blocos, 79 combinado, 56
de fluxos de dados, 79 da memória de programa, 27
Digitais/ ai1.alógicos, conversores, 4 da RAM, 28
Direção do fluxo de informações, 10 direto, 30, 57
Display de cristal líquido, 39 espaço de, 36
Displays, 10 imediato, 58
Dispositivo indexado por regish·ador, 91
de entrada e saída, 37 por registrador-base mais o
externo, 129 registrador indexado, 58
latcl1, 27 indireto, 23, 58
semicondutor, 3, 4 misto, 56
Dispositivos por registradores, 56
CHMOS, 18 faixa de, 37-39
de entrada e saída, 36 modos de, 55-56
de entrada, 5 Endereço
canal de comu11icação serial, 5 da i.I1strução, 133
teclado, 5 de destino, 63
de saída, 6 de memória, 11, 163