You are on page 1of 80

Microcontroladores

dilus de Carvalho Castro Penido


Ronaldo Silva Trindade

Ouro Preto - MG
2013

Presidncia da Repblica Federativa do Brasil


Ministrio da Educao
Secretaria de Educao Profissional e Tecnolgica
Instituto Federal de Educao, Cincia e Tecnologia de Minas Gerais
Este caderno foi elaborado em parceria entre o Instituto Federal de Educao,
Cincia e Tecnologia de Minas Gerais CampusOuro Preto e a Universidade
Federal de Santa Maria para a Rede e-Tec Brasil.
Equipe de Elaborao
Instituto Federal de Educao, Cincia e
Tecnologia de Minas Gerais IFMG-Ouro Preto
Reitor
Caio Mrio Bueno Silva/IFMG-Ouro Preto
Direo Geral
Arthur Versiani Machado/IFMG-Ouro Preto
Coordenao Institucional
Sebastio Nepomuceno/IFMG-Ouro Preto
Coordenao de Curso
Cristiano Lcio Cardoso Rodrigues/IFMG-Ouro Preto
Professor-autor
dilus de Carvalho Castro Penido/IFMG-Ouro Preto
Ronaldo Silva Trindade/IFMG-Ouro Preto

Equipe de Acompanhamento e Validao


Colgio Tcnico Industrial de Santa Maria CTISM
Coordenao Institucional
Paulo Roberto Colusso/CTISM
Coordenao Tcnica
Iza Neuza Teixeira Bohrer/CTISM
Coordenao de Design
Erika Goellner/CTISM
Reviso Pedaggica
Andressa Rosemrie de Menezes Costa/CTISM
Janana da Silva Marinho/CTISM
Jaqueline Mller/CTISM
Marcia Migliore Freo/CTISM
Reviso Textual
Ana Paula Cantarelli/CTISM
Fabiane Sarmento Oliveira Fruet/CTISM
Tatiana Rehbein/UNOCHAPEC
Reviso Tcnica
Andrei Piccini Legg/CTISM
Ilustrao
Gabriel La Rocca Cser/CTISM
Marcel Santos Jacques/CTISM
Rafael Cavalli Viapiana/CTISM
Ricardo Antunes Machado/CTISM
Diagramao
Cssio Fernandes Lemos/CTISM
Leandro Felipe Aguilar Freitas/CTISM

Ficha catalogrfica elaborada por Maristela Eckhardt CRB-10/737


Biblioteca Central da UFSM
P411m

INSTITUTO
FEDERAL
RIO GRANDE
DO SUL

Penido, dilus de Carvalho Castro


Microcontroladores / dilus de Carvalho Castro Penido.
Ronaldo Silva Trindade. Ouro Preto : Instituto Federal de
Educao, Cincia e Tecnologia de Minas Gerais ; Santa Maria :
Universidade Federal de Santa Maria, ColgioTcnico Industrial
de Santa Maria ; Rede e-Tec Brasil, 2013.
80 p. : il. ; 28 cm
ISBN 978-85-86473-12-8
1. Engenharia eltrica 2. Eletrnica 3. Computao 4.
Microeletrnica 5. Circuitos eletrnicos 6. Microcontroladores
I. Trindade, Ronaldo Silva II. Rede e-Tec Brasil III. Ttulo
CDU 621.3.049.77
681.5

Apresentao e-Tec Brasil


Prezado estudante,
Bem-vindo a Rede e-Tec Brasil!
Voc faz parte de uma rede nacional de ensino, que por sua vez constitui uma
das aes do Pronatec Programa Nacional de Acesso ao Ensino Tcnico e
Emprego. O Pronatec, institudo pela Lei n 12.513/2011, tem como objetivo
principal expandir, interiorizar e democratizar a oferta de cursos de Educao
Profissional e Tecnolgica (EPT) para a populao brasileira propiciando caminho
de o acesso mais rpido ao emprego.
neste mbito que as aes da Rede e-Tec Brasil promovem a parceria entre
a Secretaria de Educao Profissional e Tecnolgica (SETEC) e as instncias
promotoras de ensino tcnico como os Institutos Federais, as Secretarias de
Educao dos Estados, as Universidades, as Escolas e Colgios Tecnolgicos
e o Sistema S.
A educao a distncia no nosso pas, de dimenses continentais e grande
diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao
garantir acesso educao de qualidade, e promover o fortalecimento da
formao de jovens moradores de regies distantes, geograficamente ou
economicamente, dos grandes centros.
A Rede e-Tec Brasil leva diversos cursos tcnicos a todas as regies do pas,
incentivando os estudantes a concluir o ensino mdio e realizar uma formao
e atualizao contnuas. Os cursos so ofertados pelas instituies de educao
profissional e o atendimento ao estudante realizado tanto nas sedes das
instituies quanto em suas unidades remotas, os polos.
Os parceiros da Rede e-Tec Brasil acreditam em uma educao profissional
qualificada integradora do ensino mdio e educao tcnica, capaz
de promover o cidado com capacidades para produzir, mas tambm com
autonomia diante das diferentes dimenses da realidade: cultural, social,
familiar, esportiva, poltica e tica.
Ns acreditamos em voc!
Desejamos sucesso na sua formao profissional!
Ministrio da Educao
Janeiro de 2013
Nosso contato
etecbrasil@mec.gov.br

e-Tec Brasil

Indicao de cones
Os cones so elementos grficos utilizados para ampliar as formas de
linguagem e facilitar a organizao e a leitura hipertextual.
Ateno: indica pontos de maior relevncia no texto.

Saiba mais: oferece novas informaes que enriquecem o


assunto ou curiosidades e notcias recentes relacionadas ao
tema estudado.
Glossrio: indica a definio de um termo, palavra ou expresso
utilizada no texto.
Mdias integradas: sempre que se desejar que os estudantes
desenvolvam atividades empregando diferentes mdias: vdeos,
filmes, jornais, ambiente AVEA e outras.
Atividades de aprendizagem: apresenta atividades em diferentes
nveis de aprendizagem para que o estudante possa realiz-las e
conferir o seu domnio do tema estudado.

e-Tec Brasil

e-Tec Brasil

Tecnologia da Informtica

Sumrio
Palavra do professor-autor

Apresentao da disciplina

11

Projeto instrucional

13

Aula 1 Conhecendo os microcontroladores


1.1 Origem dos microcontroladores

15
15

1.2 Arquiteturas Harvard e Von Neuman

17

Aula 2 Os microcontroladores da famlia PIC


2.1 Folha de dados do PIC12F675

21
21

2.2 Aplicaes simples com PIC12F675

23

Aula 3 Hardware do microcontrolador


3.1 Descrio dos pinos

27
27

3.2 Memria

28

3.3 Registradores

28

3.4 Pinos de I/O

31

3.5 Temporizadores

32

Aula 4 Hardware do microcontrolador II


4.1 Comparadores

35
35

4.2 PWM

36

4.3 Conversor A/D

37

4.4 USART

37

Aula 5 Set de instrues


5.1 Estrutura das instrues
5.2 Grupos de instrues
Aula 6 Interrupes
6.1 Interrupes no microcontrolador

41
41
42
45
45

6.2 Interrupo de timer

46

6.3 Interrupo externa

46

6.4 Outras interrupes

47

e-Tec Brasil

Aula 7 Programao Assembly


7.1 Programa de computador
7.2 Programando em Assembly MPASM

49

7.3 Exemplos de programas

51

7.4 Pisca LED

51

Aula 8 Programao Assembly II


8.1 Programando em Assembly com interrupo

59
59

Aula 9 Programao C
9.1 Linguagem de alto nvel

65
65

9.2 Principais estruturas da linguagem C

65

9.3 Programas em C

68

Aula 10 Programao C II
10.1 Conversor A/D do microcontrolador PIC12F675
10.2 Programa exemplo A/D

e-Tec Brasil

49
49

75
75
75

Referncias

79

Currculo do professor-autor

80

Palavra do professor-autor
Prezado estudante,
com enorme satisfao que lhe apresentamos a disciplina de Microcontroladores do seu curso de Automao Industrial. Este trabalho fruto de nossa
longa experincia no trato com os microcontroladores, seja como professor,
seja como desenvolvedor de equipamentos que utilizam essa maravilha da
moderna microeletrnica. Os microcontroladores tm enorme aplicao em
nosso dia a dia e, muitas vezes, nem nos damos conta de que o equipamento
que estamos utilizando possui um microcontrolador. Citamos como exemplo os
aparelhos de DVD, televiso, forno de micro-ondas, geladeira, porto eletrnico, sistemas eletro/eletrnicos de automveis e at o nosso carto de crdito
com chip. Se naqueles equipamentos de uso dirio os microcontroladores
j se fazem presente, imagine como eles esto embutidos em praticamente
todas as aplicaes eletrnicas dentro de uma indstria.
Ao longo do curso voc ser capaz de constatar por si s uma enorme gama
de aplicaes. Para encerrar esta conversa, lembre-se: se voc chegou at este
ponto, poder ir muito mais longe, para alm deste curso. O mundo precisa
de uma pessoa como voc, que corre atrs de seus objetivos, que busca
aprender e aperfeioar-se cada vez mais. Conte com toda a nossa equipe
para apoi-lo e esteja certo de que voc ir superar as suas diculdades. Um
forte abrao dos professores.
Ronaldo Trindade e dilus Penido

e-Tec Brasil

Apresentao da disciplina
Nesta disciplina de Microcontroladores vamos percorrer juntos um universo
novo de aplicaes da microeletrnica. At aqui, voc j teve a oportunidade
de conhecer e estudar os diversos componentes eletrnicos, tais como: diodos,
transistores e circuitos integrados.
Voc tambm j sabe que os componentes eletrnicos so interligados para
formar circuitos, os quais desempenham funes especcas e, na eletrnica
digital, pde estudar como os circuitos executam funes lgicas (AND, OR,
XOR, NOT) em suas mais variadas combinaes.
Acontece que quando a complexidade de um circuito aumenta muito (em
termos das diversas funes a serem executadas), muitas vezes, torna-se
invivel a produo de tal circuito.
Nesse ponto mais fcil e mais barato utilizar um circuito que possa ser programado (o microcontrolador) e, utilizando-se corretamente os seus terminais
de entrada e de sada, executar internamente as funes desejadas atravs
de um software.
A proposta desta disciplina , ento, ensin-lo a programar um microcontrolador de forma que ele possa executar as funes a ele designadas.
Para atingir o nosso objetivo, estudaremos a estrutura interna de um microcontrolador, suas funes internas, seus perifricos associados, seus registradores,
temporizadores, pinos de entrada/sada e demais perifricos de interface com
o mundo exterior.

software
Termo ingls que designa o
conjunto de instrues capazes
de serem interpretadas e
executadas por um determinado
processador de dados. Software
tambm conhecido como
programa de computador.

Estudaremos tambm a forma de programar, gravar e testar o software dentro


de um microcontrolador e, nalmente, apresentaremos algumas aplicaes
prticas que voc poder implementar.

11

e-Tec Brasil

Palavra instrucional
Projeto
do professor-autor
Disciplina: Microcontroladores (carga horria: 75h).
Ementa: Introduo aos microcontroladores. Programao Assembler para
microcontroladores. Programao C para microcontroladores. Aplicaes de
microcontroladores.

AULA

OBJETIVOS DE
APRENDIZAGEM

MATERIAIS

CARGA
HORRIA
(horas)

Conhecer os fundamentos e as principais


arquiteturas dos microcontroladores.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

07

Descrever as caractersticas do
PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

07

Conhecer o hardware interno do


microcontrolador PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

07

4. Hardware do
microcontrolador II

Conhecer o hardware interno do


microcontrolador PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

08

5. Set de instrues

Apresentar o conjunto de instrues


Assembly do microcontrolador
PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

08

6. Interrupes

Compreender a funo das interrupes


em um microcontrolador.
Conhecer as interrupes disponveis no
microcontrolador PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

08

7. Programao
Assembly

Descrever a programao Assembly de


um microcontrolador.
Compreender a importncia da
programao Assembly no PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

08

1. Conhecendo os
microcontroladores

2. Os
microcontroladores
da famlia PIC

3. Hardware do
microcontrolador

13

e-Tec Brasil

AULA

e-Tec Brasil

OBJETIVOS DE
APRENDIZAGEM

MATERIAIS

CARGA
HORRIA
(horas)

8. Programao
Assembly II

Expandir os conceitos sobre


a programao Assembly do
microcontrolador PIC12F675, atravs de
exemplos.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

08

9. Programao C

Conhecer a linguagem C aplicada ao


microcontrolador.
Estudar as aplicaes da linguagem C
para o microcontrolador PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

07

10. Programao
C II

Conhecer o conversor analgico digital


(A/D) do microcontrolador PIC12F675.
Estudar a utilizao prtica do conversor
A/D do microcontrolador PIC12F675.

Ambiente virtual:
plataforma Moodle.
Apostila didtica.
Recursos de apoio: links,
exerccios.

07

14

Aula 1 Conhecendo os
microcontroladores
Objetivos
Conhecer os fundamentos e as principais arquiteturas dos microcontroladores.

1.1 Origem dos microcontroladores


Um microcontrolador , em ltima anlise, um computador em um nico
chip (Figuras 1.1 e 1.2). Esse chip contm um processador (Unidade Lgica e
Aritmtica ULA), memria, perifricos de entrada e de sada, temporizadores,
dispositivos de comunicao serial, dentre outros.
Os microcontroladores surgiram como uma evoluo natural dos circuitos
digitais devido ao aumento da complexidade dos mesmos. Chega um ponto
em que mais simples, mais barato e mais compacto, substituir a lgica das
portas digitais por um conjunto de processador e software.

Figura 1.1: Microcontrolador PIC12F675


Fonte: Microchip Technology Inc., 2012

Aula 1 - Conhecendo os microcontroladores

15

e-Tec Brasil

Figura 1.2: Microcontrolador INTEL 8051


Fonte: http://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/KL_Intel_P8051.jpg/220px-KL_Intel_P8051.jpg

O primeiro microcontrolador foi lanado pela empresa Intel em 1977 e recebeu


a sigla 8048. Com a sua posterior evoluo, deu origem famlia 8051.
Esse chip programado em linguagem Assembly e possui um poderoso conjunto de instrues.
Por ser um dos precursores, utilizado em muitas aplicaes de automao
em diversas reas do mundo.
O microcontrolador possui internamente os seguintes dispositivos:
a) Uma CPU (Central Processor Unit ou Unidade de Processamento Central),
cuja finalidade interpretar as instrues de programa.
b) Uma memria PROM (Programmable Read Only Memory ou Memria Programvel Somente de Leitura) na qual so gravadas as instrues do programa.
c) Uma memria RAM (Random Access Memory ou Memria de Acesso
Aleatrio) utilizada para memorizar as variveis utilizadas pelo programa.
d) Um conjunto de LINHAS de I/O para controlar dispositivos externos ou
receber impulsos de sensores, interruptores, etc.
e) Um conjunto de dispositivos auxiliares ao funcionamento, ou seja, gerador de clock, contadores, UASART para comunicao, etc.
A Figura 1.3 apresenta o diagrama de blocos de um microcontrolador, mostrando os principais elementos descritos at aqui.

e-Tec Brasil

16

Microcontroladores

Atualmente, os
principais fabricantes de
microcontroladores so:
Intel
http://www.intel.com
Zilog
http://www.zilog.com
National
http://www.national.com
Microchip
http://www.microchip.com
Motorola
http://www.motorola.com
Analog Devices
http://www.analog.com/
microconverter

Figura 1.3: Diagrama de blocos PIC12F675


Fonte: Microchip Technology Inc., 2012

1.2 Arquiteturas Harvard e Von Neuman


Quando um sistema de processamento de dados (processadores e microcontroladores) possui uma nica rea de memria na qual cam armazenados os
dados (variveis) e o programa a ser executado (software), dizemos que esse
sistema segue a arquitetura de Von Neuman (pronuncia-se fon noiman).
No caso em que os dados (variveis) cam armazenados em uma rea de
memria e o programa a ser executado (software) ca armazenado em outra
rea de memria, dizemos que esse sistema segue a arquitetura Harvard.
A mquina proposta por Von Neuman composta pelos seguintes componentes (Figura 1.4):

Aula 1 - Conhecendo os microcontroladores

17

e-Tec Brasil

a) Memria.
b) Unidade de controle.
c) Unidade Lgica e Aritmtica (ULA).
d) Registradores.
e) Perifricos de entrada e sada.

Figura 1.4: Arquitetura Von Neuman


Fonte: Autor

Conforme pode ser observado na Figura 1.4, no existe separao entre dados
e programa, uma vez que h uma nica rea de memria. Dessa forma, o
processador deve executar uma nica ao por vez: ou acessa os dados ou
executa uma instruo.
Na arquitetura Harvard (Figura 1.5) observamos dois barramentos distintos:
um para acessar a memria de dados e outro para acessar a memria de
programas. Dessa forma, o processador pode buscar e executar uma instruo
ao mesmo tempo em que acessa a memria de dados para ler ou para gravar
algum valor. Veja a Figura 1.5; nela possvel observar o barramento de
dados (Data Bus), em vermelho, partindo da memria RAM e seguindo at a

e-Tec Brasil

18

Microcontroladores

Unidade Lgica e Aritmtica (ALU, em ingls). Na mesma figura, observa-se


o barramento de programa (Programm Bus) em azul, que parte da memria
de programa e chega na ALU.
Devido separao entre dados e programa, um processador da arquitetura
Harvard executar um programa em menor tempo do que um processador
da arquitetura Von Neuman de mesmo clock.

Figura 1.5: Arquitetura Harvard


Fonte: Microchip Technology Inc., 2012

Resumo
Nesta aula, voc aprendeu que um microcontrolador um computador em
miniatura, dentro de um nico chip, capaz de executar funes especficas
atravs de um programa (software).
Aprendeu tambm as duas arquiteturas de construo de microcontroladores
e a diferena que existe entre ambas.

Aula 1 - Conhecendo os microcontroladores

19

e-Tec Brasil

Atividades de aprendizagem
1. Como atividade de aprendizagem desta aula, procure identicar nos equipamentos eletroeletrnicos de sua casa aqueles que utilizam microcontroladores. Aps, faa uma lista dos mesmos e envie-as para a plataforma.
2. Responda tambm s seguintes questes:
a) Quais as principais diferenas entre um microcontrolador e um microprocessador?
b) Quais as principais vantagens da arquitetura Harvard?
Dica
Consulte a bibliograa disponvel no polo e contedos disponibilizados na internet.

e-Tec Brasil

20

Microcontroladores

Aula 2 Os microcontroladores da

famlia PIC
Objetivos
Descrever as caractersticas do PIC12F675.

2.1 Folha de dados do PIC12F675


Um dos grandes fabricantes mundiais de microcontroladores a Microchip,
tambm responsvel por produzir os microcontroladores PIC (Peripherical
Interface Controller). Esses microcontroladores possuem tecnologia RISC
(Reduced Instruction Set Computer) e processadores com conjunto de instrues reduzidas (neste caso, so 35 instrues simples que executam em
1 ou 2 ciclos de mquina). Existem PICs de 14, 16 e 32 bits, de 8 a 40 pinos
no encapsulamento, o que permite uma ampla gama de opes de aplicao
(ZANCO, 2006).
Para que possamos entender o funcionamento dos microcontroladores da
famlia PIC, estudaremos um dos mais simples representantes dessa famlia:
o PIC12F675. Este microcontrolador encapsulado em um invlucro de 8
pinos e possui um pequeno nmero de funes externas mantendo toda a
arquitetura interna, o que facilita o aprendizado.
A Figura 2.1 apresenta as principais caractersticas do PIC12F675 e o texto, em
ingls por se tratar do data-sheet (folha de dados), emitido pela Microchip em 2012.
High performance RISC CPU trata-se de uma CPU de alto desempenho
na arquitetura RISC que possui apenas 35 instrues (Assembly), as quais so
executadas em um ciclo de clock. O clock mximo chega a 20 MHz e o ciclo
de instruo pode ser to pequeno quanto 200 ns. Possui ainda a capacidade
de interrupo com oito nveis de profundidade da pilha, bem como modos
de endereamento direto, indireto e relativo.
Special microcontroller features so caractersticas especiais do microcontrolador, tais como: opo de oscilador interno ou externo (RC, ressonador
ou cristal); modo sleep para economia de energia; ampla faixa de tenses de
operao (2 V a 5,5 V); watchdog timer com temporizador independente;

Aula 2 - Os microcontroladores da famlia PIC

21

e-Tec Brasil

interrupo por variao de sinal nos pinos; memria flash de alta persistncia,
podendo ser regravado at 100.000 vezes, e ciclo de escrita na memria EEPROM
de at um milho de vezes, com reteno na memria acima de 40 anos.
Low power features caractersticas de baixa potncia, tais como: consumo
de corrente em modo de espera de 1 nA quando alimentado com 2 V e
corrente de operao de 100 uA com clock de 1 MHz.

Figura 2.1: Principais caractersticas do PIC12F675


Fonte: Microchip Technology Inc., 2012

e-Tec Brasil

22

Microcontroladores

Peripheral features caractersticas de perifricos: 6 pinos disponveis para


entrada/sada; possibilidade de fornecimento de corrente para acionamento de
LEDs; mdulo comparador analgico com tenso de referncia programvel;
mdulo conversor analgico/digital de resoluo de 10 bits com quatro canais
de entrada multiplexveis e entrada para tenso de referncia do A/D; timer/
contador de 8 bits com prescaler programvel; e timer melhorado de 16 bits
e Programao Serial In-Circuit (ICSP) atravs de dois pinos.

2.2 Aplicaes simples com PIC12F675


Para ilustrar a aplicao prtica dos microcontroladores, veremos dois circuitos: um
contador de eventos e um controlador de acionamento de bombeamento de gua.

2.2.1 Contador de eventos


Um contador de eventos pode ser utilizado, por exemplo, para contar o nmero
de peas produzidas em uma linha de montagem num determinado perodo. O
circuito ilustrado na Figura 2.2 possui um sensor tico (fototransistor T1) que
acionado toda vez que uma pea passa por ele em uma correia transportadora.
Quando o feixe luminoso interrompido, o fototransistor (T1) vai da saturao
para o corte, e a tenso do coletor vai de nvel zero para nvel alto. O nvel
alto aciona o pino de interrupo externa (pino 5), cuja rotina de tratamento
incrementa um contador e o seu valor transmitido para a porta serial de
um microcomputador atravs dos pinos 6 e 7 do PIC.
O LED D2 chamado de heart beat (batimento cardaco), pois ca piscando
a cada 500 ms apenas para indicar o funcionamento do circuito. Esse LED
acionado atravs da interrupo de um temporizador interno (timer 0).

Figura 2.2: Contador de eventos


Fonte: Autor

Aula 2 - Os microcontroladores da famlia PIC

23

e-Tec Brasil

2.2.2 Acionador de um sistema de bombeamento



de gua
A Figura 2.3 apresenta o diagrama esquemtico de um sistema de bombeamento de gua.
Nesse modelo, h duas caixas dgua, uma inferior e outra superior, ambas
equipadas com sensores de nvel que fornecem um sinal analgico proporcional
ao nvel da gua na caixa.
No circuito, o PIC programado para acionar a bomba dgua sempre que o
nvel da caixa inferior estiver acima de 10% do total (para evitar que a bomba
dgua seja ligada sem gua) e o nvel da caixa superior estiver abaixo de 50%.
Uma vez acionada a bomba dgua, a mesma permanece ligada at que a
gua atinja 90% do nvel da caixa superior ou at que a caixa inferior esvazie.
Observe a necessidade de uma interface de potncia para ligar o PIC na bomba
dgua, uma vez que a corrente mxima de um pino do PIC da ordem de
20 mA e a corrente de acionamento da bomba dgua de alguns ampres,
alternada e em tenso elevada (127 V ou 220 V).
Os sensores de nvel normalmente so ajustados para fornecer uma tenso
de 1 V a 5 V, na faixa de vazio a cheio da caixa dgua. Valores abaixo de
1 V indicam falha no sensor de nvel, e essa uma forma de implementar
segurana a falha no sistema de sensoriamento.

Figura 2.3: Sistema de bombeamento


Fonte: Autor

e-Tec Brasil

24

Microcontroladores

Resumo
Nesta aula, voc conheceu um pouco sobre a famlia de microcontroladores PIC,
em especial a do PIC12F675, bem como duas aplicaes prticas envolvendo
esse microcontrolador.

Atividades de aprendizagem
1. Quem o fabricante do PIC12F675?
2. Quantas instrues Assembly o PIC possui?
3. Qual o consumo de corrente do PIC no clock de 1 MHz?
4. Qual a faixa de tenso de alimentao do PIC?
5. Qual a resoluo (em bits) do conversor A/D do PIC?
6. Quantos temporizadores o PIC12F675 possui?
7. Nos circuitos apresentados, qual a funo do LED heart beat?
8. Nos circuitos apresentados, qual deles utiliza o conversor A/D?
9. Nos circuitos apresentados, qual deles utiliza a interrupo externa?
10. Descreva, sucintamente, outra aplicao de uso do PIC12F675.

Aula 2 - Os microcontroladores da famlia PIC

25

e-Tec Brasil

Aula 3 Hardware do microcontrolador


Objetivos
Conhecer o hardware interno do microcontrolador PIC12F675.

3.1 Descrio dos pinos


A Figura 3.1 apresenta a pinagem do PIC12F675.

Figura 3.1: Pinagem do PIC12F675


Fonte: Microchip Technology Inc., 2012

O pino 1 a entrada de alimentao positiva de +5 V.

O pino 2 pode assumir as seguintes conguraes: entrada e sada


(congurvel) geral (GP5), clock do timer 1 (T1CK), entrada1 do circuito externo de oscilador de clock (OSC1) ou, ainda, entrada de sinal externo de
clock.

O pino 3 pode assumir as seguintes conguraes: entrada e sada


(congurvel) geral (GP4), quarta entrada analgica (AN3), entrada2 do
circuito externo de oscilador de clock (OSC2) ou, ainda, sada de sinal
externo de clock.

O pino 4 pode assumir as seguintes conguraes: entrada (congurvel)


geral (GP3), master clear (baixo ativo) ou tenso de programao (VPP).

O pino 5 pode assumir as seguintes conguraes: entrada e sada


(congurvel) geral (GP2), terceira entrada analgica (AN2), clock do timer 0,
interrupo externa (INT) ou, ainda, sada do comparador interno (COUT).

Aula 3 - Hardware do microcontrolador

27

e-Tec Brasil

O pino 6 pode assumir as seguintes conguraes: entrada e sada


(congurvel) geral (GP1), segunda entrada analgica (AN1), entrada inversora do comparador interno (CIN-), tenso de referncia do comparador interno (VREF) ou, ainda, clock da programao in-circuit (ICSPCLK).

O pino 7 pode assumir as seguintes conguraes: entrada e sada


(congurvel) geral (GP0), primeira entrada analgica (AN0), entrada no
inversora do comparador interno (CIN+) ou, ainda, dados da programao in-circuit (ICSPDAT).

O pino 8 o terra da alimentao.

3.2 Memria
O PIC12F675 possui dois tipos de memria: memria de programa com 1024
palavras (words) de 8 bits, e memria de dados, com 64 bytes de RAM esttica
e 128 bytes de EEPROM.
A memria de programa onde ca armazenado o programa gravado no PIC
e que ser executado to logo o mesmo seja ligado na alimentao.
Na memria de dados, armazena-se as variveis do programa, ou at 128
bytes de dados na memria EEPROM, que sero mantidos mesmo que o
circuito seja desligado da alimentao.

3.3 Registradores
Os registradores (SFR Special Function Regiters) so posies da memria que
recebem nomes especcos e tm funo bem denida: guardar a congurao
e o estado de funcionamento atual do PIC.
Normalmente, cada bit do registrador tem uma funo especca. Assim,
temos um registrador para denir se as portas so de entrada ou de sada,
ativar e desativar interrupes, apresentar o estado da CPU, etc.
Os principais registradores do PIC12F675 e seus respectivos endereos, em
hexadecimal, so:
a) TMR0 (01H) armazena a contagem do timer. Sempre que este contador chegar a zero e o INTCON estiver ativado, a interrupo de timer 0 ser ativada.

e-Tec Brasil

28

Microcontroladores

b) STATUS (03H) mostra o estado interno da CPU.


c) GPIO (05H) apresenta o estado dos pinos de entrada/sada.
d) INTCON (0BH) ativa/desativa o conjunto de todas as interrupes e
cada uma delas de forma independente.
e) CMCON (19H) apresenta o estado das entradas e da sada do comparador interno.
f) ADCON (1FH) apresenta o estado do conversor A/D.
g) TRISIO (85H) dene se os pinos de entrada/sada atuaro como entrada
ou como sada (individualmente).
h) ANSEL (9FH) seleciona o estado de cada um dos pinos de entrada/sada
quanto sua operao como pino analgico ou digital.
As Figuras 3.2 e 3.3 apresentam as tabelas do fabricante contendo todos os
registradores.

Aula 3 - Hardware do microcontrolador

29

e-Tec Brasil

Figura 3.2: Registradores do PIC12F675


Fonte: Microchip Technology Inc., 2012

e-Tec Brasil

30

Microcontroladores

Figura 3.3: Registradores do PIC12F675 (continuao)


Fonte: Microchip Technology Inc., 2012

3.4 Pinos de I/O


O PIC12F675 possui seis pinos de I/O (conforme Figura 3.1):
a) Pino 7 GP0 entrada ou sada, analgica ou digital, congurado nos
registradores TRISIO e ANSEL, respectivamente.

Aula 3 - Hardware do microcontrolador

31

e-Tec Brasil

b) Pino 6 GP1 entrada ou sada, analgica ou digital, congurado nos


registradores TRISIO e ANSEL, respectivamente.
c) Pino 5 GP2 entrada ou sada, analgica ou digital, congurado nos
registradores TRISIO e ANSEL, respectivamente.
d) Pino 4 GP3 apenas entrada, analgica ou digital, congurado nos
registradores TRISIO e ANSEL, respectivamente.
e) Pino 3 GP4 entrada ou sada, analgica ou digital, congurado nos
registradores TRISIO e ANSEL, respectivamente.
f) Pino 2 GP5 entrada ou sada, analgica ou digital, congurado nos
registradores TRISIO e ANSEL, respectivamente.
Os pinos 1 e 8 so utilizados para alimentao positiva e terra, respectivamente.

3.5 Temporizadores
Os temporizadores tm ampla aplicao, pois permitem a marcao precisa
de intervalos de tempo. O PIC12F675 possui dois temporizadores: um de 8
bits (timer 0) e um de 16 bits (timer 1).
O timer 0 conta de 0 a 255 (8 bits) e o timer 1 conta de 0 a 65535 (16 bits).
Sempre que o timer atingir sua contagem mxima e ns adicionarmos mais
uma unidade, ele retornar a zero; quando isso acontece, falamos que houve
um estouro ou transbordamento do timer. Neste momento, a interrupo
associada ao timer acionada, caso a mesma esteja habilitada.
Como cada incremento do timer gasta, exatamente, um ciclo de mquina,
possvel inicializar o timer com o valor adequado a fim de produzir a contagem
de tempo que se deseja.
Por exemplo, se desejarmos contar 100 s, podemos inicializar o timer 0
com 156 (256 - 100) para um ciclo de mquina de 1 s. Quando o timer 0
atingir 255 e tentar passar para 256, ele retornar a zero e ter se passado
exatamente 100 incrementos de 1 s, totalizando 100 s.

e-Tec Brasil

32

Microcontroladores

Resumo
Nesta aula, voc iniciou o aprendizado sobre o hardware interno do PIC12F675,
conheceu a pinagem do mesmo e aprendeu sobre a memria, os temporizadores e os registradores internos desse microcontrolador.

Atividades de aprendizagem
1. Quantos pinos de I/O o PIC12F675 tem disponvel?
2. Em qual pino do PIC12F675 devemos ligar um sinal que produza interrupo externa?
3. Quantos conversores A/D existem no PIC12F675?
4. Quais pinos do PIC12F675 podem ser utilizados como entrada de converso A/D?
5. Qual o registrador utilizado para denir se um pino de entrada ou de
sada no PIC12F675?
6. Qual o registrador utilizado para ativar/desativar as interrupes no
PIC12F675?
7. Quantos e quais os temporizadores do PIC12F675?
8. O que acontece quando a contagem de um timer atinge o seu limite?
9. Qual deve ser o valor inicial de um timer de 16 bits para contar o intervalo
de tempo de 1 ms com ciclo de mquina de 1 s?

Aula 3 - Hardware do microcontrolador

33

e-Tec Brasil

Aula 4 Hardware do

microcontrolador II
Objetivos
Conhecer o hardware interno do microcontrolador PIC12F675.

4.1 Comparadores
O mdulo comparador consiste em um circuito de comparador analgico
(Figura 4.1) que pode ter suas entradas e sua sada acessadas pelos pinos do
PIC. controlado pelo registrador CMCON que permite desligar ou ligar os
pinos do comparador aos pinos externos do PIC (5, 6 e 7).
A sada do comparador vai ao nvel alto sempre que o valor da entrada no
inversora for maior que o valor da entrada inversora.
Atravs do registrador VRCON podemos ajustar o nvel de tenso de referncia
a ser aplicada entrada inversora do comparador.

Figura 4.1: Comparador


Fonte: Microchip Technology Inc., 2012

Aula 4 - Hardware do microcontrolador II

35

e-Tec Brasil

4.2 PWM
O mdulo PWM (Pulse-Width Modulation Modulao por Largura de Pulso)
no existe no PIC12F675, entretanto, devido sua importncia e considerando
que so encontrados nos PICs de maior nmero de pinos, ns iremos estud-lo.
O mdulo PWM consiste em um oscilador de onda retangular onde se fixa a
frequncia e se alterna o ciclo ativo (duty cycle), conforme ilustrado na Figura 4.2.
Normalmente, os PICs possuem o PWM com ajuste da largura de pulso de 10 bits
(210 = 1.023), ou seja, podemos ajustar o nvel alto, desde zero (sada desligada)
at 1.023 que representa o mximo do sinal (sada ligada continuamente).
Atravs do PWM podemos gerar um sinal contnuo (por meio da filtragem
ou da integrao) a partir de um sinal digital pulsado.
O valor mdio de sada vale:

Onde: VS Tenso de sada


VP Tenso mxima de sada
TON Tempo de nvel alto (duty cycle valor varivel)
T Perodo do sinal (valor fixo)
O PWM muito utilizado para o controle de velocidade de motores de correntecontnua.

Figura 4.2: Modulao por largura de pulso PWM


Fonte: Microchip Technology Inc., 2012

e-Tec Brasil

36

Microcontroladores

4.3 Conversor A/D


O conversor analgico-digital (A/D) efetua a converso de um sinal analgico para a sua representao digital de 10 bits. O PIC12F675 possui quatro
entradas analgicas (GP0 a GP3) que so multiplexadas para um circuito de
amostragem e reteno conforme ilustrado na Figura 4.3. A sada do circuito
de amostragem e reteno ligado entrada do conversor A/D de 10 bits.
O conversor A/D gera um resultado binrio atravs de um processo de aproximao sucessiva e armazena o resultado em um registrador de 10 bits.
A tenso de referncia utilizada pelo conversor pode ser selecionada por
software, entre a tenso de alimentao ou a tenso aplicada ao pino Vref.

Figura 4.3: Conversor analgico digital


Fonte: Microchip Technology Inc., 2012

4.4 USART
O mdulo USART (Universal Synchronous Asynchronous Receiver Transmitter
Transmissor/Receptor Universal Sncrono e Assncrono), utilizado para a comunicao serial, tambm no est presente no PIC12F675 (neste caso, devemos
implementar a comunicao serial por software), porm, o assunto ser abordado
devido sua importncia e sua existncia em vrios microcontroladores.
Esse mdulo implementa todo o protocolo lgico de comunicao pela porta
serial RS-232 com o microcomputador. Para o protocolo fsico devemos utilizar
um conversor de nveis (como o MAX232), uma vez que o PIC fornecer nveis
de tenso de 0 V a 5 V e a RS-232 trabalha com nveis de +15 V a -15 V. A
Figura 4.4 ilustra alguns desses elementos.

Aula 4 - Hardware do microcontrolador II

37

e-Tec Brasil

Figura 4.4: Comunicao serial


Fonte: Microchip Technology Inc., 2012

Resumo
Com esta aula, voc concluiu o aprendizado sobre o hardware interno do
PIC12F675. Conheceu a utilizao do comparador interno, da modulao por
largura de pulso (PWM), do conversor A/D e da comunicao serial.

Atividades de aprendizagem
1. Quando que a sada do comparador vai ao nvel alto?
2. Qual o registrador responsvel pelo ajuste da tenso de refernciadocomparador?
3. Descreva, sucintamente, o funcionamento do PWM.
4. Cite uma aplicao do PWM.
5. Quantos conversores A/D o PIC12F675 possui?

e-Tec Brasil

38

Microcontroladores

6. Qual o processo de converso utilizado pelo PIC12F675?


7. Qual a funo do mdulo USART?
8. Qual a funo do chip MAX232?

Aula 4 - Hardware do microcontrolador II

39

e-Tec Brasil

Aula 5 Set de instrues


Objetivos
Apresentar o conjunto de instrues Assembly do microcontrolador
PIC12F675.

5.1 Estrutura das instrues


Todas as operaes lgicas e aritmticas do PIC12F675 realizadas pela ULA
(Unidade Lgica e Aritmtica) do processador esto relacionadas com o registrador de trabalho working register, chamado de W.
Essas operaes lgicas e aritmticas podem ser realizadas entre o contedo do
registrador W e o contedo de outro registrador ou uma constante, chamada
de literal pela Microchip.
Este microcontrolador possui vrios tipos de perifricos, cujo funcionamento
gerenciado atravs de registradores especcos chamados SFRs (Special
Function Registers Registradores com Funo Especial).
Como os SFRs esto presentes sicamente na memria de dados do microcontrolador, devem ser ajustados sempre antes da execuo repetitiva da rotina
principal, de acordo com as funes pretendidas para o circuito.
Os SFRs so organizados em dois blocos, chamados de Banco de Memria 0
e Banco de Memria 1, nos quais a seleo feita atravs do bit 5 do registrador STATUS. Sendo assim, antes de ler ou escrever em um SFR, devemos
nos assegurar que estamos no Banco de Memria correto atravs do ajuste
em 0 ou 1 do bit 5 do registrador STATUS.
Alguns modos e funes de operao do PIC12F675 no so selecionveis
diretamente pelo rmware, devendo ser congurados durante o processo
de programao. Essa congurao se d atravs de diretivas includas no
programa fonte, as quais so usadas apenas na programao, no fazendo
parte diretamente do rmware propriamente dito (no so instrues passveis
de serem executadas pelo processador do microcontrolador).

Aula 5 - Set de instrues

41

e-Tec Brasil

5.2 Grupos de instrues


Didaticamente, as instrues do microcontrolador PIC so organizadas em
trs grupos: instrues orientadas a registradores com tamanho de um byte,
instrues orientadas aos bits de registradores e instrues orientadas a operaes com constantes literais e controle de uxo do programa. Detalhando
as instrues temos, segundo Lavnia (2002):

5.2.1 Instrues orientadas a registradores com


tamanho de um byte

e-Tec Brasil

ADDW F (add le em work) adiciona os contedos dos registradores


W e F.

ANDWF (and le e work) executa a operao E (and) lgica entre os


contedos dos registradores W e F.

CLRF (clear le) carrega o valor 0 no registrador F.

CLRW (clear work) carrega o valor 0 no registrador W.

COMF (complement le) complementa (inverte bit a bit) o contedo do


registrador F.

DECF (dec le) decrementa (subtrai um) do contedo do registrador F.

DECFSZ (dec le, skip se zero) decrementa (subtrai um) do contedo do


registrador F e no executa (pula) a prxima instruo se o resultado do
incremento for igual 0.

INCF (inc le) incrementa (soma um) o contedo do registrador F.

INCFSZ (inc le, skip se zero) incrementa (soma um) ao contedo do


registrador F e no executa (pula) a prxima instruo se o resultado do
incremento for igual 0.

IORWF (W or le) executa a operao OU (or) lgica entre os contedos


dos registradores W e F.

MOVF (move le para W) move o valor do registrador F para o registrador W.

MOVWF (move W para F) copia o contedo do registrador W para o


registrador F.

42

Microcontroladores

NOP (no operation) nenhuma operao executada, apenas gasta um


ciclo de mquina.

RLF (rotate left le) rotaciona esquerda o contedo do registrador F.

RRF (rotate rigth le) rotaciona direita o contedo do registrador F.

SUBWF (sub f de W) subtrai o contedo do registradores F do registrador W e armazena o resultado em W.

SWAPF (troca le) troca os 4 bits mais signicativos com os 4 menos


signicativos de F.

XORWF (WXORF) executa a operao ou exclusivo (xor) lgica entre


os contedos dos registradores W e F e armazena em W.

5.2.2 Instrues orientadas aos bits de registradores


BCF (bit clear le) ajusta o bit b do registrador f para nvel baixo (0).

BSF (bit set le) ajusta o bit b do registrador f para nvel alto (1).

BTFSC (bit teste le, skip se clear) testa o bit b do registrador f e no


executa a prxima instruo se ele estiver em nvel baixo (0).

BTFSS (bit teste le, skip se set) testa o bit b do registrador f e no executa a prxima instruo se ele estiver em nvel baixo (1).

5.2.3 Instrues orientadas a operaes com



constantes literais e controle de uxo do

programa

ADDLW (add literal a W) o contedo do registrador W somado a uma


constante k de 8 bits e o resultado guardado no registrador W.

ANDLW (and literal e W) executa a operao E (and) lgica entre o


contedo do registrador W e uma constante k de 8 bits e armazena o
resultado em W.

CALL chamada uma sub-rotina.

CLRWDT (clear wdt) carrega o valor 0 no temporizador do watchdog timer.

Aula 5 - Set de instrues

43

e-Tec Brasil

GOTO salto incondicional para outro local no programa.

IORLW (or literal ou W) executa a operao OU (or) lgica entre o


contedo do registrador W e uma constante k de 8 bits e armazena o
resultado em W.

MOVLW (move literal para W) carrega uma constante k de 8 bits no


registrador W.

RETFIE retorno de uma rotina de interrupo.

RETLW retorno de uma sub-rotina com o carregamento de uma constante k de 8 bits (literal) no registrador W.

RETURN retorno de uma sub-rotina.

SLEEP coloca o processador no modo de baixo consumo.

SUBLW subtrai o literal de 8 bits do contedo do registrador W e armazena o resultado no registrador W.

XORLW executa a operao ou exclusivo (xor) lgica entre o contedo do registrador W e uma constante k de 8 bits (literal).

Resumo
Nesta aula, voc conheceu o conjunto de instrues Assembly do PIC12F675,
bem como a forma que elas so estruturadas e agrupadas para facilitar a
memorizao.

Atividades de aprendizagem
1. Onde so realizadas as operaes lgicas e aritmticas do PIC12F675?
2. Qual o principal registrador do PIC12F675?
3. Quem gerencia os perifricos do microcontrolador?
4. Quais so os grupos de instrues Assembly do PIC12F675?
5. Quantas so as instrues Assembly do PIC12F675?

e-Tec Brasil

44

Microcontroladores

Aula 6 Interrupes
Objetivos
Compreender a funo das interrupes em um microcontrolador.
Conhecer as interrupes disponveis no microcontrolador PIC12F675.

6.1 Interrupes no microcontrolador


O mtodo mais utilizado para a vericao do estado de um pino de entrada
a leitura frequente do nvel nele presente (tcnica de polling sondagem)
por ser o mtodo de fcil implementao.
No entanto, a despeito desta simplicidade, esse mtodo no se mostra adequado em situaes onde preciso uma resposta imediata do processador
assim que houver uma mudana no nvel de um pino.
Em tais casos, recomendado que seja utilizado uma interrupo, ou seja, a
chamada de uma funo auxiliar que s executada se houver ocorrido um
evento externo especco, como por exemplo, a mudana do estado de um
pino, conforme Pereira (2002).
Nesse caso, aps a chamada da funo auxiliar, o uxo original do programa
principal s ser retomado quando a interrupo for concluda.
Alm da citada interrupo por alterao de nvel em pino, o PIC12F675 possui
vrias outras fontes de interrupo, que podem ser conguradas e usadas a
partir de informaes obtidas em seu datasheet.
Para utilizar as interrupes, o registrador INTCON.GIE deve ser ativado (INTCON
endereo 0BH, GIE bit 7 do INTCON). O GIE funciona como uma espcie
de chave geral de todas as interrupes; se colocarmos zero no INTCON.GIE,
desabilitamos, simultaneamente, todas as interrupes.
Como o prprio nome indica, uma interrupo serve para interromper a execuo
normal do programa principal e, imediatamente, tratar do evento que a gerou.

Aula 6 - Interrupes

45

e-Tec Brasil

6.2 Interrupo de timer


A interrupo de timer ocorre sempre que o contador do timer estoura, isto ,
quando atinge o valor mximo e incrementado de uma unidade. Por exemplo,
o timer 0 (endereo 01H) um temporizador de 8 bits (conta de 0 a 255).
Quando o contador atingir 255, no prximo incremento ele estourar (tentar
passar para 256), retornando a zero e disparando a interrupo de timer 0.
Para que essa interrupo funcione, deve-se ter INTCON.GIE = 1 (liga chave
geral); INTCON.T0IE = 1 (liga timer 0). Sempre que ocorrer o estouro do
contador, o bit INTCON.T0IF estar em 1 e a rotina de tratamento dessa
interrupo ser acionada.
A interrupo de timer muito til quando desejamos medir intervalos de
tempo de forma precisa. Por exemplo, considerando um clock interno de 1
MHz, obteremos um ciclo de mquina de 1 s. Carregando o timer 0 com o
valor 250, aps 5 ciclos de mquina (5 s) teremos a ocorrncia da interrupo de timer, a qual poder ser utilizada para incrementar um contador que
contar de forma precisa, de 5 s em 5 s.

6.3 Interrupo externa


A interrupo externa muito utilizada, pois permite a deteco exata do
instante em que os eventos externos acontecem, tais como: quando algum
objeto passou em frente a um sensor de presena, quando um eixo que gira
completou uma volta, quando a tenso da rede passou por zero, etc.
Essa interrupo pode ser disparada pela borda de subida ou pela borda de
descida do sinal. Tal seleo feita no registrador OPTION_REG.INTDEG (81H.6).
A interrupo ativada fazendo-se INTCON.GIE = 1 (liga chave geral); INTCON.
INTE = 1 (liga INT EXT). Sempre que ocorrer uma transio de sinal no pino
correspondente, INTCON.INTF (0BH.1) estar em 1 e a rotina de tratamento
dessa interrupo ser acionada.
Antes de sair da rotina de interrupo, esse ag dever ser colocado em zero.

e-Tec Brasil

46

Microcontroladores

6.4 Outras interrupes


O microcontrolador PIC possui outras interrupes, como:
a) Interrupo de mudana de estado ocorre quando algum pino muda
de nvel de sinal.
b) Interrupo de escrita na EEPROM ocorre quando se conclui a escrita
na memria EEPROM.
c) Interrupo de m de converso A/D ocorre quando se conclui a converso de analgica para digital do conversor A/D.
d) Interrupo de WDT ocorre quando estoura o Watchdog timer e o sistema reinicializado.

Resumo
Nesta aula, voc estudou a funo das interrupes em microcontroladores e
conheceu tambm quais so as interrupes disponveis no PIC12F675.

Atividades de aprendizagem
1. Para que utilizamos as interrupes em um microcontrolador?
2. Qual registrador utilizado como chave geral de interrupo no PIC12F675?
3. O que acontece quando o ag INTCON.INTF estiver em 1 no PIC12F675?
4. Como se ativa a interrupo externa no PIC12F675?
5. Qual interrupo utilizada para se vericar o trmino de converso do
conversor A/D no PIC12F675?

Aula 6 - Interrupes

47

e-Tec Brasil

Aula 7 Programao Assembly


Objetivos
Descrever a programao Assembly de um microcontrolador.
Compreender a importncia da programao Assembly no PIC12F675.

7.1 Programa de computador


Um programa de computador um conjunto ordenado de instrues capazes
de executar uma ao til em um sistema computacional, o qual pode ser
representado de diversas formas (linguagens). Em ltima anlise, o processador
s entende uma linguagem: a da mquina, constituda de zeros e uns.
Com o objetivo de facilitar o entendimento, surgiu uma srie de linguagens de
programao que so, basicamente, formas mais elaboradas de se desenvolver
o raciocnio computacional de maneira mais inteligvel.
Todo programa de computador, em qualquer linguagem, dever ser traduzido
(atravs de um compilador ou de um interpretador) para linguagem de mquina.
Uma das linguagens de mais baixo nvel (mais prxima da mquina) o
Assembly. Essa linguagem constitui-se de instrues simples (mnemnicos),
que so a representao simblica da linguagem de mquina. No caso do
PIC, h 35 instrues.

7.2 Programando em Assembly MPASM


Programar se aprende programando. Para que voc possa entender melhor os
aspectos de programao do PIC, descreveremos alguns programas simples
em MPASM, o Assembly da Microchip. Para isso, precisamos de um programa
que os traduza para a linguagem de mquina.
A Microchip disponibiliza um programa gratuito que faz o papel de ambiente
grco de desenvolvimento e vem com ferramentas de assemblador e linker,
o MPLAB. O MPLAB pode ser obtido gratuitamente no site da Microchip

Aula 7 - Programao Assembly

49

e-Tec Brasil

(www.microchip.com) para a plataforma Windows. Instale-o em seu computador e experimente-o. As Figuras 7.1 e 7.2 apresentam o ambiente de
desenvolvimento (IDE) descrito anteriormente.

Um bom tutorial de MPLAB


pode ser encontrado em:
ftp://ftp.cefetes.br/
Cursos/Eletrotecnica/
Microprocessadores/PIC/
MiniCursoMplab5.pdf

Figura 7.1: MPLAB Tela de abertura


Fonte: Microchip Technology Inc., 2012

Figura 7.2: MPLAB Tela de desenvolvimento


Fonte: Microchip Technology Inc., 2012

e-Tec Brasil

50

Microcontroladores

Devido exiguidade de tempo, no trataremos do uso do MPLAB neste


curso, mas voc encontrar vrios tutoriais na internet ou nas referncias
bibliogrficas deste material.

7.3 Exemplos de programas


Para entender melhor os conceitos de programao, vamos analisar uma srie
de programas escritos para o PIC12F675, todos desenvolvidos considerando
as ligaes fsicas de chaves, resistores, potencimetros e LEDs, mostradas
na Figura 7.3.

Figura 7.3: Circuito base


Fonte: Autor

7.4 Pisca LED


O programa a seguir faz com que o LED verde (ligado no pino 2) pisque em
intervalos de 500 ms. A funo desse programa pode ser implementada com
o seguinte algoritmo:
a) Configurar os SFRs pertinentes.
b) Colocar o pino 2 em nvel alto.
c) Pausar a execuo do programa por um tempo.
d) Colocar o pino 2 em nvel baixo.

Aula 7 - Programao Assembly

51

e-Tec Brasil

e) Pausar a execuo do programa por um tempo.


f) Repetir as operaes de b a e indenidamente.
Analisando o datasheet do PIC12F675, possvel descobrir quais SFRs devem
ser congurados e com quais valores, de acordo com as especicaes do
sistema. Ao fazer isso, para este primeiro exemplo, constatamos que preciso
congurar os registradores a seguir para que o programa, que ser escrito,
funcione adequadamente com o circuito j apresentado:
a) ANSEL seleo da funo analgica ou digital para os pinos de entrada
e sada que podem operar nesses dois modos, conforme descrito a seguir. Ao escrevermos 1 no bit associado ao pino, estaremos indicando
que o seu funcionamento ser no modo analgico; j se escrevermos
0, estaremos congurando o pino para trabalhar no modo digital.

Pino 7 modo digital (GPIO 0) ou modo analgico (AN 0).

Pino 6 modo digital (GPIO 1) ou modo analgico (AN 1).

Pino 5 modo digital (GPIO 2) ou modo analgico (AN 2).

Pino 3 modo digital (GPIO 4) ou modo analgico (AN 3).

b) TRISIO denio da direo do sinal (entrada ou sada) em um pino.


Ao escrevermos 0 no bit associado ao pino, estaremos congurando o
pino como sada (output); j se escrevermos 1, estaremos congurando
o pino como entrada (input).
c) CMCON controle das funes do comparador de tenso interno do
microcontrolador.
d) GPIO seleo do nvel lgico de um pino quando ele for congurado
como sada digital, ou leitura do nvel presente em um pino quando ele
for congurado como entrada digital.
Para fazer a congurao correta desses SFRs, preciso estar atento para o fato
de que os registradores ANSEL e TRISIO esto presentes sicamente no Banco
de Memria 1, enquanto os registradores CMCON e GPIO esto presentes
sicamente no Banco de Memria 0. Sendo assim, antes de utiliz-los, deve-se
congurar adequadamente o bit 5 (RP0) do registrado STATUS.

e-Tec Brasil

52

Microcontroladores

Um possvel modo de escrever em Assembly um programa que se comporte


dessa maneira mostrado a seguir. Tudo o que est aps o ; comentrio
e no executado pelo PIC.
;INCLUSAO DE ARQUIVOS
#INCLUDE <p12f675.inc> ; definies referentes ao PIC12F675
;CONFIGURAO DO MODO DE FUNCIONAMENTO
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLR_
OFF & _CPD_OFF & _CP_OFF &
;DEFINIO DOS NOMES E ENDEREOS DAS VARIVEIS UTILIZADAS NO
PROGRAMA
CBLOCK 0x0C ; endereo inicial da memria de usurio
TEMP1 ; contador para o delay de 1 ms
TEMP500 ; contador para o delay de 500 ms
ENDC ; fim do bloco de memria de variveis
;DEFINIO DAS ENTRADAS DIGITAIS
#DEFINE Chave_1 GPIO, 2; Pino 5
#DEFINE Chave_2 GPIO, 3; Pino 4
;DEFINIO DAS SADAS DIGITAIS
#DEFINE LED_VD GPIO, 5 ; Pino 2
#DEFINE LED_AM GPIO, 4 ; Pino 3
#DEFINE LED_VM GPIO, 1 ; Pino 6
;DEFINIO DO SELETOR DO BANCO DE MEMRIA
#DEFINE Banco STATUS, RP0 ; bit RP0 do registrador STATUS (SFR)
;CONFIGURAO DOS SFRs
BSF Banco ; Seleo do Banco 1 da Memria
MOVLW B00000001 ; modo analgico/digital dos pinos de I/O
MOVWF ANSEL
MOVLW B00001101 ; direo dos pinos de I/O digitais
MOVWF TRISIO
BCF Banco ; seleo do Banco 0 da Memria
MOVLW B00000111 ; desativao do comparador de tenso
MOVWF CMCON
;INICIALIZAO DO PROGRAMA
BCF LED_VD ; apaga o LED verde
BCF LED_AM ; apaga o LED amarelo
BCF LED_VM ; apaga o LED vermelho

Aula 7 - Programao Assembly

53

e-Tec Brasil

;ROTINA PRINCIPAL, implementa um loop infinito


Principal:
BSF LED_VD ; acende o LED verde
CALL DELAY_500MS ; pausa de 500 ms
BCF LED_VD ; apaga o LED verde
CALL DELAY_500MS ; pausa de 500 ms
GOTO Principal ; salto para o incio da rotina principal
; Rotina de delay de 500 ms. Repete 200 x a rotina de 2,5 ms
DELAY_500MS:
MOVLW .200
MOVWF TEMP500
DL_50
CALL DELAY_2MS ; pausa de 10 ms
DECFSZ TEMP500,F ; decrementa TEMP500. Zerou?
GOTO DL_50 ; no, repete o ciclo.
RETURN ; sim, finaliza a rotina.
; Rotina de delay de 2,5 ms. Repete 250 x a rotina de 10 s
DELAY_2MS:
MOVLW .250
MOVWF TEMP1
DL_10 ; cada ciclo gasta 10 microsegundos
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
DECFSZ TEMP1,F ; decrementa TEMP1. Zerou?
GOTO DL_10 ; no, repete o ciclo
RETURN ; sim, finaliza a rotina
;FIM DO PROGRAMA
END

7.4.1 Detalhando o programa Pisca LED


7.4.1.1 Incluso
;INCLUSAO DE ARQUIVOS
#INCLUDE <p12f675.inc> ; definies referentes ao PIC12F675

Neste bloco, inclumos um arquivo externo, neste caso, o arquivo p12f 675.
inc que contm os nomes dos registradores do microcontrolador em uso.

e-Tec Brasil

54

Microcontroladores

Congurao
;CONFIGURAO DO MODO DE FUNCIONAMENTO
CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &
MCLR_OFF & _CPD_OFF & _CP_OFF &

Neste bloco, conguramos os fuses internos do microcontrolador que funcionam como chaves internas, as quais podem ser ligadas ou desligadas, como
por exemplo:

_INTRC_OSC_NOCLKOUT o PIC utilizar o oscilador interno de 4 MHz,


o que garante que cada ciclo de mquina tenha 1 s de durao.

_WDT_OFF desliga o Watchdog timer.

_PWRTE_OFF desliga o reset de power on.

_MCLRE_OFF desliga o masterclear.

7.4.1.2 Variveis
;DEFINIO DOS NOMES E ENDEREOS DAS VARIVEIS UTILIZADAS NO
PROGRAMA
CBLOCK 0x0C ; endereo inicial da memria de usurio
TEMP1 ; contador para o delay de 1 ms;
TEMP500 ; contador para o delay de 500 ms
ENDC ; fim do bloco de memria de variveis

Aqui, declaramos endereo inicial para a criao das variveis, bem como a
denio das mesmas.

7.4.1.3 Entradas e sadas


DEFINIO DAS ENTRADAS DIGITAIS
#DEFINE Chave_1 GPIO, 2; Pino 5
#DEFINE Chave_2 GPIO, 3; Pino 4
; DEFINIO DAS SADAS DIGITAIS
#DEFINE LED_VD GPIO, 5 ; Pino 2
#DEFINE LED_AM GPIO, 4 ; Pino 3
#DEFINE LED_VM GPIO, 1 ; Pino 6

Neste bloco, associamos nomes signicativos aos pinos do microcontrolador.

Aula 7 - Programao Assembly

55

e-Tec Brasil

7.4.1.4 Congurao dos registradores


;DEFINIO DO SELETOR DO BANCO DE MEMRIA
#DEFINE Banco STATUS, RP0 ; bit RP0 do registrador STATUS (SFR)
;CONFIGURAO DOS SFRs
BSF Banco ; seleo do Banco 1 da Memria
MOVLW B00000001; modo analgico/digital dos pinos de I/O
MOVWF ANSEL
MOVLW B00001101; direo dos pinos de I/O digitais
MOVWF TRISIO
BCF Banco ; seleo do Banco 0 da Memria
MOVLW B00000111; desativao do comparador de tenso
MOVWF CMCON

Neste bloco, conguramos alguns registradores internos que sero utilizados


no programa.
Perceba que, inicialmente, colocamos o valor numrico (literal) para o registrador W e, na sequncia, transferimos o valor de W para o registrador alvo.

7.4.1.5 Inicializao
;INICIALIZAO DO PROGRAMA
BCF LED_VD ; apaga o LED verde
BCF LED_AM ; apaga o LED amarelo
BCF LED_VM ; apaga o LED vermelho

Aqui, inicializamos os pinos de sada, apagando todos os LEDs pela imposio


de valor zero aos pinos correspondentes.

7.4.1.6 Loop principal


;ROTINA PRINCIPAL, implementa um loop infinito
PRINCIPAL:
BSF LED_VD ; acende o LED verde
CALL DELAY_500MS ; pausa de 500 ms
BCF LED_VD ; apaga o LED verde
CALL DELAY_500MS ; pausa de 500 ms
GOTO PRINCIPAL ; salto para o incio da rotina principal

Agora, implementamos um loop innito criando o label PRINCIPAL, executando


algumas instrues e, no nal, efetuando um salto incondicional (GOTO) para
o mesmo label.

e-Tec Brasil

56

Microcontroladores

Iniciamos ligando o LED verde pela imposio de nvel 1 no pino correspondente


(chamamos uma sub-rotina que provoca um delay de 500 ms) colocamos
nvel 0 no LED (chamamos novamente a sub-rotina de delay de 500 ms) e
recomeamos a mesma sequncia.

7.4.1.7 Rotinas de delay


Rotina de delay de 500 ms. Repete 200 a rotina de 2,5 ms
DELAY_500MS:
MOVLW .200
MOVWF TEMP500
DL_50
CALL DELAY_2MS ; pausa de 2,5 ms
DECFSZ TEMP500,F ; decrementa TEMP500. Zerou?
GOTO DL_50 ; no, repete o ciclo.
RETURN ; sim, finaliza a rotina.
; Rotina de delay de 2,5 ms. Repete 250 a rotina de 10 us
DELAY_2MS:
MOVLW .250
MOVWF TEMP1
DL_10 ; cada ciclo gasta 10 microssegundos
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
DECFSZ TEMP1,F ; decrementa TEMP1. Zerou?
GOTO DL_10 ; no, repete o ciclo.
RETURN ; sim, finaliza a rotina.

O delay de 500 ms obtido atravs da repetio (200 vezes) da rotina de


atraso de 2,5 ms. Inicia-se colocando o valor 200 na varivel TEMP500 (atravs
do registrador W) e efetua-se sucessivas chamadas rotina de atraso de 2,5
ms. Aps, deve-se ir decrementando a varivel TEMP500 at que ela chegue
a zero, momento em que haver o retorno (RETURN) da sub-rotina.
Analogamente, h a rotina de atraso de 2,5 ms, obtida pela repetio (250
vezes) de um bloco que consome 10 microsegundos. Esse tempo alcanado
atravs de sete instrues NOP (que no possuem funo alguma e consomem

Aula 7 - Programao Assembly

57

e-Tec Brasil

1 ciclo de mquina), uma instruo DECFSZ (que consome mais 1 ciclo de


mquina) e a instruo GOTO (que consome 2 ciclos de mquina).

7.4.1.8 Fim do programa


;FIM DO PROGRAMA
END

imprescindvel que o programa se encerre com a instruo END.

Resumo
Nesta aula, voc aprendeu sobre a programao Assembly do PIC12F675
atravs de um exemplo comentado.

Atividades de aprendizagem
1. Qual a linguagem que o microprocessador entende?
2. O que Assembly?
3. O que faz o comando NOP?
4. Como se implementa um loop innito em Assembly?
5. Como se efetua a chamada de uma sub-rotina em Assembly?
6. Como se efetua o retorno de uma sub-rotina em Assembly?

e-Tec Brasil

58

Microcontroladores

Aula 8 Programao Assembly II


Objetivos
Expandir os conceitos sobre a programao Assembly do microcontrolador PIC12F675 atravs de exemplos.

8.1 Programando em Assembly com interrupo


Assim que ocorrer um evento de interrupo e o bit GIE, bem como a habilitao
individual da interrupo estiverem ativados, haver o desvio do programa
para o vetor de interrupo 00004.
A fim de tratar adequadamente a interrupo, deve-se observar o seguinte:
a) Salvamento do contexto atual procedimento necessrio para se preservar o contedo dos registradores que estejam sendo utilizados no programa principal e que possam ser alterados pela sub-rotina de tratamento
da interrupo. Normamente, devem-se salvar os registradores W e STATUS.
b) Vericao do tipo de interrupo que ocorreu utiliza-se uma sequncia de teste BTFSC para vericar os ags das possveis interrupes,
desviando-se para o tratamento individual de cada uma.
c) Tratamento da interrupo apaga-se o ag da interrupo em questo e
procede-se a execuo das aes necessrias ao atendimento da interrupo.
d) Recuperao do contexto e retorno restaura-se o contedo dos registradores STATUS e W, e executa-se o RETFIE.

8.1.1 Pisca LED com interrupo


Retomamos o programa anterior, em que o LED verde pisca a cada 500 ms,
e acrescentamos um tratamento de interrupo externa para acender o LED
vermelho sempre que a chave 1 passar do nvel baixo para o nvel alto.
;INCLUSAO DE ARQUIVOS
#INCLUDE <p12f675.inc> ; definies referentes ao PIC12F675

Aula 8 Programao Assembly II

59

e-Tec Brasil

;CONFIGURAO DO MODO DE FUNCIONAMENTO


__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLR_
OFF & _CPD_OFF & _CP_OFF &
DEFINIO DOS NOMES E ENDEREOS DAS VARIVEIS UTILIZADAS NO
PROGRAMA
CBLOCK 0x0C ; endereo inicial da memria de usurio
TEMP1 ; contador para o delay de 1 ms;
TEMP500 ; contador para o delay de 500 ms
W_TEMP ; para salvar W
STATUS_TEMP ; para salvar STATUS
ENDC ; fim do bloco de memria de variveis
Endereo de incio do programa
ORG 0x0000
GOTO PRINCIPAL
;Vetor de interrupo
ORG 0x0004
MOVWF W_TEMP ; salva o contedo de W em W_TEMP
SWAPF STATUS, W ; salva o contedo de STATUS
MOVWF STATUS_TEMP ; em STATUS_TEMP
BTFSC INTCON,T0IF ; testa se ocorreu interrupo de timer 0
GOTO TRATA_TMR0 ; se ocorreu, trata a interrupo
BTFSC INTCON,T0IF ; testa se ocorreu interrupo de timer 0
GOTO TRATA_TMR0 ; se ocorreu, trata a interrupo
BTFSC PIR1,TMR1IF ; testa se ocorreu interrupo de timer 1
GOTO TRATA_TMR1 ; se ocorreu, trata a interrupo
BTFSC INTCON,INTF ; testa se ocorreu interrupo externa
GOTO TRATA_INT ; se ocorreu, trata a interrupo
FIM_INT:
SWAPF STATUS_TEMP, W ; recupera o valor do registrador STATUS
MOVWF STATUS ; restaura o contedo do registrador STATUS
SWAPF W_TEMP, W ; restaura o contedo do registrador W
RETFIE ; retorna da interrupo
TRATA_TMR0:
BCF INTCON,T0IF
; executa comandos para tratamento
; da interrupo de timer 0
GOTO FIM_INT

e-Tec Brasil

60

Microcontroladores

TRATA_TMR1:
BCF PIR1,T1IF
; executa comandos para tratamento
; da interrupo de timer 1
GOTO FIM_INT
TRATA_INT: ; tratamento da interrupo externa
BCF INTCON,INTIF
BSF LED_VM ; acende o LED vermelho
GOTO FIM_INT
;DEFINIO DAS ENTRADAS DIGITAIS
#DEFINE Chave_1 GPIO, 2; Pino 5
#DEFINE Chave_2 GPIO, 3; Pino 4
;DEFINIO DAS SADAS DIGITAIS
#DEFINE LED_VD GPIO, 5 ; Pino 2
#DEFINE LED_AM GPIO, 4 ; Pino 3
#DEFINE LED_VM GPIO, 1 ; Pino 6
;DEFINIO DO SELETOR DO BANCO DE MEMRIA
#DEFINE Banco STATUS, RP0 ; bit RP0 do registrador STATUS (SFR)
;CONFIGURAO DOS SFRs
BSF Banco ; seleo do Banco 1 da Memria
MOVLW B00000001 ; modo analgico/digital dos pinos de I/O
MOVWF ANSEL
MOVLW B00001101 ; direo dos pinos de I/O digitais
MOVWF TRISIO
BCF Banco ; seleo do Banco 0 da Memria
MOVLW B00000111 ; desativao do comparador de tenso
MOVWF CMCON
MOVLW B10010000 ; ativa interrupes GIE e interrupo externa INTE
MOVWF INTCON
;INICIALIZAO DO PROGRAMA
BCF LED_VD ; apaga o LED verde
BCF LED_AM ; apaga o LED amarelo
BCF LED_VM ; apaga o LED vermelho

Aula 8 Programao Assembly II

61

e-Tec Brasil

;ROTINA PRINCIPAL, implementa um loop infinito


PRINCIPAL:
BSF LED_VD ; acende o LED verde
CALL DELAY_500MS ; pausa de 500 ms
BCF LED_VD ; apaga o LED verde
CALL DELAY_500MS ; pausa de 500 ms
GOTO Principal ; salto para o incio da rotina principal
; Rotina de delay de 500ms. Repete 200 x a rotina de 2,5 ms
DELAY_500MS:
MOVLW .200
MOVWF TEMP500
DL_50
CALL DELAY_2MS ; pausa de 10 ms
DECFSZ TEMP500,F ; decrementa TEMP500. Zerou?
GOTO DL_50 ; no, repete o ciclo.
RETURN ; sim, finaliza a rotina.
; Rotina de delay de 2,5 ms. Repete 250 x a rotina de 10 s
DELAY_2MS:
MOVLW .250
MOVWF TEMP1
DL_10 ; cada ciclo gasta 10 microssegundos
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
NOP ; gasta um ciclo de tempo
DECFSZ TEMP1,F ; decrementa TEMP1. Zerou?
GOTO DL_10 ; no, repete o ciclo.
RETURN ; sim, finaliza a rotina.
;FIM DO PROGRAMA
END

8.1.2 Detalhando o programa pisca LED



com interrupo
Agora, iremos detalhar, passo a passo, os blocos do programa que foram
alterados/acrescentados no programa anterior:

e-Tec Brasil

62

Microcontroladores

8.1.2.1 Variveis
;DEFINIO DOS NOMES E ENDEREOS DAS VARIVEIS UTILIZADAS NO
PROGRAMA
CBLOCK 0x0C ; endereo inicial da memria de usurio
TEMP1 ; contador para o delay de 1ms;
TEMP500 ; contador para o delay de 500ms
W_TEMP ; para salvar W
STATUS_TEMP ; para salvar STATUS
ENDC ; fim do bloco de memria de variveis

Acrescentamos as variveis W_TEMP e STATUS_TEMP, necessrias ao salvamento


de contexto ao se tratar interrupes.

8.1.2.2 Incio do programa


;Endereo de incio do programa
ORG 0x0000
GOTO PRINCIPAL

8.1.2.3 Vetor de interrupo


;Vetor de interrupo
ORG 0x0004
MOVWF W_TEMP ; salva o contedo de W em W_TEMP
SWAPF STATUS, W ; salva o contedo de STATUS
MOVWF STATUS_TEMP ; em STATUS_TEMP
BTFSC INTCON,T0IF ; testa se ocorreu interrupo de timer 0
GOTO TRATA_TMR0 ; se ocorreu, trata a interrupo
BTFSC INTCON,T0IF ; testa se ocorreu interrupo de timer 0
GOTO TRATA_TMR0 ; se ocorreu, trata a interrupo
BTFSC PIR1,TMR1IF ; testa se ocorreu interrupo de timer 1
GOTO TRATA_TMR1 ; se ocorreu, trata a interrupo
BTFSC INTCON,INTF ; testa se ocorreu interrupo externa
GOTO TRATA_INT ; se ocorreu, trata a interrupo
FIM_INT:
SWAPF STATUS_TEMP, W ; restaura o contedo do
MOVWF STATUS ; registrador STATUS
SWAPF W_TEMP, W ; restaura o contedo do registrador W
RETFIE ; retorna da interrupo
TRATA_TMR0:
BCF INTCON,T0IF ; executa comandos para tratamento da interrupo de timer 0
GOTO FIM_INT

Aula 8 Programao Assembly II

63

e-Tec Brasil

TRATA_TMR1:
BCF PIR1,T1IF ; executa comandos para tratamento da interrupo de
timer 1
GOTO FIM_INT
TRATA_INT: ; tratamento da interrupo externa
BCF INTCON,INTIF
BSF LED_VM ; acende o LED vermelho
GOTO FIM_INT

Definimos o endereo do vetor de interrupo, salvamos o contexto (W e STATUS)


e vericamos os ags de interrupo para descobrir qual delas ocorreu (BTFSC).
Uma vez detectada a interrupo, desviamos para a rotina especca (GOTO).
Neste caso, tratamos a interrupo externa (INTCON, INTIF) desviando para
TRATA_INT:. Inicialmente, limpamos o ag correspondente, setamos o LED
vermelho e chamamos a rotina de retorno de interrupo (FIM_INT). Essa
rotina efetua a restaurao de contexto (valores de W e de STATUS) e retorna
da interrupo (RETFIE).
O restante do programa ca inalterado e o LED verde continua piscando a
cada 500 ms.

Resumo
Nesta aula, voc expandiu os seus conhecimentos sobre programao Assembly
atravs da utilizao da interrupo externa do PIC12F675.

Atividades de aprendizagem
1. Qual a importncia do uso das interrupes em um microcontrolador?
2. Qual registrador utilizado como chave de interrupo externa no
PIC12F675?
3. Por que necessrio salvar o contexto do programa antes de atender
uma interrupo?
4. O que se deve fazer ao trmino do atendimento de uma interrupo?

e-Tec Brasil

64

Microcontroladores

Aula 9 Programao C
Objetivos
Conhecer a linguagem C aplicada ao microcontrolador.
Estudar as aplicaes da linguagem C para o microcontrolador
PIC12F675.

9.1 Linguagem de alto nvel


C uma linguagem de programao de alto nvel largamente utilizada e
com uma extensa e diversificada literatura sobre a mesma.
Uma das principais caractersticas da linguagem C a sua operao atravs de funes que podem ser chamadas a partir de uma funo principal,
denominada main(). Ela deve existir em qualquer programa escrito nessa
linguagem (uso obrigatrio).
Em termos de funcionamento, os programas mostrados a seguir, so idnticos
aos respectivos programas escritos em Assembly mostrados anteriormente. As
observaes feitas serviro para realar as diferenas entre as variadas formas
de escrever os rmwares de controle.
O uso de linguagens de alto nvel na programao de microcontroladores se
deve grande complexidade dos programas escritos em Assembly; o volume
de cdigo muito maior em Assembly do que em linguagens de alto nvel, o
que torna muito difcil a depurao do mesmo quando escrito em Assembly.
De qualquer forma, muito importante o conhecimento do hardware interno
do PIC, bem como dos seus registradores e funes especiais, para que se
tire o mximo proveito dos mesmos com a programao em linguagem C.

9.2 Principais estruturas da linguagem C


A linguagem C, como a maioria das linguagens de programao, possui algumas
estruturas necessrias para se escrever programas. Estudaremos as principais.

Aula 9 - Programao C

65

e-Tec Brasil

9.2.1 Variveis, atribuies e comparaes


Em C, h os seguintes tipos bsicos de variveis:

Char guarda um caractere.

Int guarda um nmero inteiro.

Float guarda um nmero real com preciso simples.

Double guarda um nmero real com preciso dupla.

Void tipo vazio.

A declarao de variveis e atribuio de valores para as mesmas feita como em:


int evento;
char corrida;
float tempo;
evento = 5;
corrida = C;
tempo = 27.25;

Para efetuar comparaes, utilizam-se os seguintes operadores:


> maior que.

>= maior ou igual.

< menor que.

<= menor ou igual.

== igual.

!= diferente.

9.2.2 Estruturas de controle


Segundo Pereira (2003), a principal estrutura de controle o comando if,
o qual testa se uma condio verdadeira e, ento, executa um bloco de
comandos. Caso a condio do if no seja verdadeira, possvel executar um
outro bloco de comandos com o comando else, como no exemplo a seguir:

e-Tec Brasil

66

Microcontroladores

void main(void){
int a;
a = 5;
if (a > 0){
printf(a positivo);
} else if (a == 0){
printf(a nulo);
} else {
printf(a negativo);
}}

9.2.3 Estruturas de repetio


Em C, h as seguintes estruturas de repetio:

9.2.3.1 For
For (varivel = valor_inicial; condicao_envolvendo_variavel; incremento/decremento de var)
{
comandos...
}
Exemplo
for(int i=0; i <= 10; i++) {
printf(i=,i);
}

9.2.3.2 While (condio)


While (condio)
{
comandos...
/*Lembre-se que os comandos devem, de alguma forma, alterar condicao*/
}
Exemplo
int i=1;
while(i <= 10){
printf(i=,i);
i++;
}

Aula 9 - Programao C

67

e-Tec Brasil

9.2.3.3 Do while
do
{
comandos...
/*Lembre-se que os comandos devem, de alguma forma, alterar condio*/
} while (condio);

Exemplo
int i=1;
do{
printf(i=,i);
i++;
}while(i <= 10);

9.3 Programas em C
Conforme fizemos quando estudamos Assembly, desenvolveremos alguns
programas, agora em linguagem C, com o intuito de ilustrar e de melhor
entender as estruturas da linguagem.

9.3.1 Pisca LED


O programa a seguir faz com que o LED verde (ligado no pino 2) pisque em
intervalos de 500 ms.
A funo deste programa pode ser implementada com o seguinte algoritmo:
a) Congurar os parmetros de inicializao.
b) Colocar o pino 2 em nvel baixo.
c) Iniciar um loop innito.
d) Inverter o estado do pino 2.
e) Pausar a execuo do programa por um tempo.
#include <12f675.h>
#include <regs_12f6xx.h>
#use delay(clock=4000000)
#fuses INTRC_IO, WDT, NOPUT, MCLR, NOBROWNOUT

e-Tec Brasil

68

Microcontroladores

// definio das entradas e sadas


#bit Chave_1 = GPIO.2 // Pino 5
#bit Chave_2 = GPIO.3 // Pino 4
#bit LED_VD = GPIO.5 // Pino 2
#bit LED_AM = GPIO.4 // Pino 3
#bit LED_VM = GPIO.1 // Pino 6
// variveis para definio da direo dos pinos
#bit Tris_Chave_1 = TRISIO.2
#bit Tris_Chave_2 = TRISIO.3
#bit Tris_LED_VD = TRISIO.5
#bit Tris_LED_AM = TRISIO.4
#bit Tris_LED_VM = TRISIO.1
void main(){
setup_ADC_ports(NO_ANALOGS);
Tris_LED_VD = 0; // sada
Tris_LED_AM = 0; //sada
Tris_LED_VM = 0; // sada
Tris_Chave_1 = 1; // entrada
Tris_Chave_2 = 1; // entrada
LED_VD = 0; // apagado
LED_AM = 0; // apagado
LED_VM = 0; // apagado
while (true){
LED_VD = !LED_VD;
delay_ms(500);

9.3.2 Detalhando o programa pisca LED em C


9.3.2.1 Incluso e congurao
#include <12f675.h>
#include <regs_12f6xx.h>
#use delay(clock=4000000)
#fuses INTRC_IO, WDT, NOPUT, MCLR, NOBROWNOUT

Neste bloco, temos a incluso dos arquivos contendo as denies dos registradores do PIC12F675. Temos, tambm, a denio da frequncia de clock
(4 MHz) e a denio dos fuses internos do PIC.

9.3.2.2 Entradas e sadas


// definio das entradas e sadas
#bit Chave_1 = GPIO.2 // Pino 5

Aula 9 - Programao C

69

e-Tec Brasil

#bit Chave_2 = GPIO.3 // Pino 4


#bit LED_VD = GPIO.5 // Pino 2
#bit LED_AM = GPIO.4 // Pino 3
#bit LED_VM = GPIO.1 // Pino 6

Neste bloco, denimos os nomes dos pinos de entrada e de sada.

9.3.2.3 Direo das entradas e sadas


// variveis para definio da direo dos pinos
#bit Tris_Chave_1 = TRISIO.2
#bit Tris_Chave_2 = TRISIO.3
#bit Tris_LED_VD = TRISIO.5
#bit Tris_LED_AM = TRISIO.4
#bit Tris_LED_VM = TRISIO.1

Neste bloco, denimos os nomes das variveis que sero usados na denio
da direo dos pinos de entrada e de sada.

9.3.2.4 Loop principal


void main(){
setup_ADC_ports(NO_ANALOGS);
Tris_LED_VD = 0; // sada
Tris_LED_AM = 0; //sada
Tris_LED_VM = 0; // sada
Tris_Chave_1 = 1; // entrada
Tris_Chave_2 = 1; // entrada
LED_VD = 0; // apagado
LED_AM = 0; // apagado
LED_VM = 0; // apagado
while (true){
LED_VD = !LED_VD;
delay_ms(500);

Aqui, temos a funo main(), que onde o programa roda efetivamente.


Inicialmente, denimos todas as portas como entradas e sadas digitais. A
seguir, denimos a direo dos pinos (entradas e sadas). Inicializamos todos
os LEDs como apagados e entramos no loop innito, o qual inverte o valor
do LED e aguarda 500 ms.
Note que o cdigo cou bem mais simples e mais legvel em C do que em
Assembly.

e-Tec Brasil

70

Microcontroladores

9.3.3 Pisca LED com interrupo


Retomamos o programa anterior, em que o LED verde pisca a cada 500 ms,
e acrescentamos um tratamento de interrupo externa para acender o LED
vermelho sempre que a chave 1 passar do nvel baixo para o nvel alto.
#include <12f675.h>
#include <regs_12f6xx.h>
#use delay(clock=4000000)
#fuses INTRC_IO, WDT, NOPUT, MCLR, NOBROWNOUT
// definio das entradas e sadas
#bit Chave_1 = GPIO.2 // Pino 5
#bit Chave_2 = GPIO.3 // Pino 4
#bit LED_VD = GPIO.5 // Pino 2
#bit LED_AM = GPIO.4 // Pino 3
#bit LED_VM = GPIO.1 // Pino 6
// variveis para definio da direo dos pinos
#bit Tris_Chave_1 = TRISIO.2
#bit Tris_Chave_2 = TRISIO.3
#bit Tris_LED_VD = TRISIO.5
#bit Tris_LED_AM = TRISIO.4
#bit Tris_LED_VM = TRISIO.1
#int_ext
void trata_int_ext() // trata a interrupo externa
{
LED_VM = 1
void main(){
setup_ADC_ports(NO_ANALOGS);
enable_interrupts(global | int_ext);
Tris_LED_VD = 0; // sada
Tris_LED_AM = 0; //sada
Tris_LED_VM = 0; // sada
Tris_Chave_1 = 1; // entrada
Tris_Chave_2 = 1; // entrada
LED_VD = 0; // apagado
LED_AM = 0; // apagado
LED_VM = 0; // apagado
while (true){
LED_VD = !LED_VD;
delay_ms(500);

Aula 9 - Programao C

71

e-Tec Brasil

9.3.4 Detalhando o programa pisca LED com



interrupo
#int_ext
void trata_int_ext() // trata a interrupo externa
LED_VM = 1;

Acrescentamos a rotina que trata a interrupo externa, cuja funo ligar


o LED vermelho.
void main(){
setup_ADC_ports(NO_ANALOGS);
enable_interrupts(global | int_ext);
Tris_LED_VD = 0; // sada
Tris_LED_AM = 0; //sada
Tris_LED_VM = 0; // sada
Tris_Chave_1 = 1; // entrada
Tris_Chave_2 = 1; // entrada
LED_VD = 0; // apagado
LED_AM = 0; // apagado
LED_VM = 0; // apagado
while (true){
LED_VD = !LED_VD;
delay_ms(500);

Habilitamos a interrupo global e a interrupo externa (enable_


interrupts(global | int_ext).
Note como muito mais simples lidar com interrupes em C quando se
compara com o Assembly.

Resumo
Nesta aula, voc aprendeu sobre a linguagem C aplicada aos microcontroladores e conheceu tambm as aplicaes especficas da linguagem C para
o PIC12F675.

Atividades de aprendizagem
1. Como associamos nomes aos pinos do PIC em C?
2. Em C, como denimos se um pino do PIC entrada ou se sada?

e-Tec Brasil

72

Microcontroladores

3. Como implementamos um loop innito em C?


4. Em C, como se ativa a interrupo externa no PIC12F675?
5. Em C, como feito o tratamento da interrupo externa no PIC12F675?

Aula 9 - Programao C

73

e-Tec Brasil

Aula 10 Programao C II
Objetivos
Conhecer o conversor analgico digital (A/D) do microcontrolador
PIC12F675.
Estudar a utilizao prtica do conversor A/D do microcontrolador
PIC12F675.

10.1 Conversor A/D do microcontrolador



PIC12F675
O PIC12F675 possui um conversor A/D (analgico/digital) interno que, quando
utilizado no modo oito bits de resoluo, gera um resultado entre 0 e 255,
correspondente a uma tenso entre 0 e 5 V aplicada a um de seus pinos, os
quais podem operar no modo analgico.
possvel congur-lo tambm para operar em dez bits de resoluo; isso
aumenta a preciso da converso A/D, mas torna a converso mais lenta do
que em oito bits.
Para uma converso A/D de dez bits, o resultado estar ente 0 e 1023,
correspondendo tenso de 0 a 5 V, linearmente.
Para utilizar esse conversor, inicialmente necessrio lig-lo e congurar o
pino de entrada como entrada analgica. A partir da, basta efetuar a seleo
do canal de entrada (0 a 3), aguardar um tempo da ordem de 15 ms para que
a converso se efetive e, finalmente, efetuar a leitura do adc.

10.2 Programa exemplo A/D


O programa a seguir implementa um conversor A/D no pino 7 e, atravs de
um potencimetro, possibilita variar a tenso entre 0 e 5 V (veja o circuito
da Aula 7).

Aula 10 - Programao C II

75

adc
Designao de conversor
analgico digital, obtida das
iniciais da expresso em ingls
analog-to-digital converter.

e-Tec Brasil

Os LEDs sero acionados em funo do nvel de tenso na entrada. Abaixo de


2 V, o LED verde acendido. Entre 2 e 4 V, o LED amarelo acendido. Acima
de 4 V, o LED vermelho acendido.
Utilizando o conversor de 10 bits, a tenso de 0 a 5 V ser mapeada em nmeros
de 0 a 1.023. A converso ser efetuada em degraus de 5 V/1023=4,888 mV.
Efetuando interpolao linear, os valores, aps a converso para as tenses
de referncia sero: 2 V 409 e 4 V 818. necessrio realizar o arredondamento para valor inteiro.
#include <12f675.h>
#include <regs_12f6xx.h>
#device ADC=10
#use delay(clock=4000000)
#fuses INTRC_IO, WDT, NOPUT, MCLR, NOBROWNOUT
// definio das entradas e sadas
#bit Chave_1 = GPIO.2 // Pino 5
#bit Chave_2 = GPIO.3 // Pino 4
#bit LED_VD = GPIO.5 // Pino 2
#bit LED_AM = GPIO.4 // Pino 3
#bit LED_VM = GPIO.1 // Pino 6
// variveis para definio da direo dos pinos
#bit Tris_Chave_1 = TRISIO.2
#bit Tris_Chave_2 = TRISIO.3
#bit Tris_LED_VD = TRISIO.5
#bit Tris_LED_AM = TRISIO.4
#bit Tris_LED_VM = TRISIO.1
void main(){
setup_ADC_ports(AN0_ANALOG); // AN0 como entrada analgica,
as demais como digital
setup_ADC(ADC_CLOCK_INTERNAL); // utiliza o clock interno para
o conversor A/D
Tris_LED_VD = 0; // sada
Tris_LED_AM = 0; // sada
Tris_LED_VM = 0; // sada
Tris_Chave_1 = 1; // entrada
Tris_Chave_2 = 1; // entrada
LED_VD = 0; // apagado
LED_AM = 0; // apagado
LED_VM = 0; // apagado

e-Tec Brasil

76

Microcontroladores

int16 V; // declara varivel


while (true){
set_adc_channel(0); // AN0 -> pino 7
delay_us(15); // tempo para a converso A/D
V = read_adc(); // 0 a 1023
// comparao para determinar qual LED deve ser ligado
if (V < 409){ // < 2V
LED_VD = 1;
LED_AM = 0;
LED_VM = 0;
} else if (V < 818){ < 4V
LED_VD = 0;
LED_AM = 1;
LED_VM = 0;
} else {
LED_VD = 0;
LED_AM = 0;
LED_VM = 1;
}
}
}

Os pontos relevantes desse cdigo so:


#deviceADC = 10 dene que a converso ser de 10 bits.

setup_ADC_ports(AN 0_AN ALOG) dene o pino 7 como entrada


analgica.

setup_ADC(ADC_CLOCK_INTERNAL) utiliza o clock interno para


acionar o conversor A/D.

set_adc_channel (0) inicia a converso A/D no AN0.

delay_us (15) aguarda um tempo para garantir o trmino da converso.

V = read_adc() transfere o valor do conversor para a varivel V.

if (V < 409) compara valores para determinar o LED que ser ativado.

Aula 10 - Programao C II

77

e-Tec Brasil

Resumo
Nesta aula voc aprendeu a utilizar o conversor A/D do PIC12F675.

Atividades de aprendizagem
1. Qual a diferena prtica entre converso A/D de 8 bits e de 10 bits?
2. No PIC12F675, qual o comando utilizado para denir se um pino entrada analgica?
3. No PIC12F675, qual o comando utilizado para selecionar o canal de entrada para o conversor A/D?
4. Qual o comando utilizado para efetuar a leitura do valor armazenado
no conversor?

e-Tec Brasil

78

Microcontroladores

Referncias
LAVNIA, D. J. de S.; NICOLS, C. Conectando o PIC Recursos avanados. rica: So
Paulo, 2002.
MICROCHIP TECHNOLOGY INC. Disponvel em: <http://www.microchip.com>. Acesso
em: 20 out. 2011.
PEREIRA, F. Microcontroladores PIC Tcnicas avanadas. rica: So Paulo, 2002.
PEREIRA, F. Microcontroladores PIC Programao em C. rica: So Paulo, 2003.
ZANCO, Wagner da Silva. Microcontroladores PIC Tcnicas de software e hardware
para projetos de circuitos eletrnicos. rica: So Paulo, 2006.
WIKIPEDIA. Disponvel em: <http://pt.wikipedia.org/wiki/Intel_8051>. Acesso em: 20
out. 2011.

79

e-Tec Brasil

Currculo do professor-autor
dilus de Carvalho Castro Penido natural de Belo Horizonte-MG, iniciou a
sua formao tcnica com o curso de Eletrnica no Colgio Tcnico do Centro
Pedaggico (COLTEC) da Universidade Federal de Minas Gerais (UFMG), em
1989. Graduou-se em Engenharia Eltrica pela Pontifcia Universidade Catlica de Minas Gerais (PUC-MG), em 1996 e concluiu, em 2008, o Curso de
Especializao em Projeto de Circuitos Integrados pela Universidade Federal
de Minas Gerais (UFMG). Atualmente est concluindo o Curso de Mestrado
em Sustentabilidade Socioeconmica e Ambiental pela Universidade Federal
de Ouro Preto (UFOP).
Desde 1997 desenvolve suas atividades profissionais como docente em vrias
instituies de formao tcnica e superior, com atuao constante na capacitao e na qualificao de profissionais nas reas de Eletrotcnica, Eletrnica
e Automao. A partir de 2008, passou a atuar como professor do Curso
Tcnico em Automao Industrial do Campus Ouro Preto do Instituto Federal
de Minas Gerais (IFMG).

Ronaldo Silva Trindade engenheiro civil formado pela Universidade Federal


de Ouro Preto (UFOP), com mestrado em estruturas metlicas pela REDEMAT/
UFOP. professor do IFMG, Campus Ouro Preto (antiga Escola Tcnica Federal
de Ouro Preto) desde 1987. autodidata em eletrnica e em computao,
possuindo grande experincia em laboratrio de eletroeletrnica e no desenvolvimento de sistemas microcontrolados.

e-Tec Brasil

80

Microcontroladores

You might also like