SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Downloaden Sie, um offline zu lesen
UEL - DEEL - LONDRINA - PR




   Introdu¸˜o aos Microcontroladores da Fam´
          ca                               ılia
                       PIC




                                            Leonimer Fl´vio de Melo
                                                       a




02/2008




                           1
Sum´rio
   a

1 Introdu¸˜o aos Microcontroladores
           ca                                                                                                                                    4
  1.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . .
              ca                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
  1.2 Hist´ria . . . . . . . . . . . . . . . . . . . . .
            o                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
  1.3 Microcontroladores versus Microprocessadores          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
  1.4 Microcontroladores da fam´ PIC . . . . . .
                                  ılia                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
       1.4.1 Unidade de Mem´ria . . . . . . . . . .
                                o                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
       1.4.2 Unidade Central de Processamento . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
       1.4.3 Barramentos - Bus . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
       1.4.4 Unidade de entrada/sa´ (I/O) . . .
                                       ıda                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
       1.4.5 Comunica¸˜o s´rie . . . . . . . . . . .
                        ca e                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
       1.4.6 Unidade de temporiza¸˜o . . . . . . .
                                      ca                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
       1.4.7 Watchdog timer . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
       1.4.8 Conversor anal´gico-digital (A/D) . .
                             o                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
       1.4.9 O microcontrolador . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
  1.5 Programa . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10

2 O Microcontrolador PIC16F84                                                                                                                   13
  2.1 Componentes b´sicos do PIC . . . . . . . . .
                       a                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  2.2 CISC x RISC . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  2.3 Aplica¸˜es . . . . . . . . . . . . . . . . . . . .
             co                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  2.4 Rel´gio / ciclo de instru¸˜o . . . . . . . . . .
           o                    ca                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       2.4.1 Pipelining . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       2.4.2 Fluxograma das Instru¸˜es no Pipeline
                                       co                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  2.5 Significado dos pinos . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  2.6 Gerador de rel´gio – oscilador . . . . . . . . .
                      o                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
       2.6.1 Tipos de osciladores . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
       2.6.2 Oscilador XT . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
       2.6.3 Oscilador RC . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  2.7 Reset . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
       2.7.1 Brown-out Reset . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
  2.8 Unidade Central de Processamento . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
       2.8.1 Unidade L´gica Aritm´tica (ALU) . .
                         o             e                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  2.9 Registros . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
       2.9.1 Registro STATUS . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
       2.9.2 Registro OPTION . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
  2.10 Portas de I/O . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
       2.10.1 Porta A . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
       2.10.2 Porta B . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
  2.11 Organiza¸˜o da mem´ria . . . . . . . . . . . .
                ca           o                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
       2.11.1 Mem´ria de programa . . . . . . . . .
                   o                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
       2.11.2 Mem´ria de dados . . . . . . . . . . .
                   o                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
       2.11.3 Registros SFR . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
       2.11.4 Bancos de Mem´ria . . . . . . . . . .
                               o                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
       2.11.5 Macro . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
       2.11.6 Contador de Programa . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29



                                                 2
2.11.7 Pilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   29
        2.11.8 Programa¸˜o no Sistema . . . . . . . . . . . . . . . . . . . .
                          ca                                                                             .   .   .   .   .   .   .   .   .   29
        2.11.9 Modos de endere¸amento . . . . . . . . . . . . . . . . . . .
                                  c                                                                      .   .   .   .   .   .   .   .   .   29
   2.12 Interrup¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                co                                                                                       .   .   .   .   .   .   .   .   .   31
        2.12.1 Registro INTCON . . . . . . . . . . . . . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   31
        2.12.2 Fontes de interrup¸˜o . . . . . . . . . . . . . . . . . . . . .
                                    ca                                                                   .   .   .   .   .   .   .   .   .   32
        2.12.3 Guardando os conte´dos dos registros importantes . . . . .
                                      u                                                                  .   .   .   .   .   .   .   .   .   33
        2.12.4 Interrup¸˜o externa no pino RB0/INT do microcontrolador
                        ca                                                                               .   .   .   .   .   .   .   .   .   34
        2.12.5 Interrup¸˜o por transbordar (overflow ) o contador TMR0 .
                        ca                                                                               .   .   .   .   .   .   .   .   .   34
        2.12.6 Interrup¸˜o por varia¸ao nos pinos 4, 5, 6 e 7 da porta B .
                        ca              c˜                                                               .   .   .   .   .   .   .   .   .   36
        2.12.7 Interrup¸˜o por fim de escrita na EEPROM . . . . . . . . .
                        ca                                                                               .   .   .   .   .   .   .   .   .   36
        2.12.8 Inicializa¸˜o da interrup¸˜o . . . . . . . . . . . . . . . . . .
                         ca                ca                                                            .   .   .   .   .   .   .   .   .   36
   2.13 Temporizador TMR0 . . . . . . . . . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   38
   2.14 Mem´ria de dados EEPROM . . . . . . . . . . . . . . . . . . . . .
             o                                                                                           .   .   .   .   .   .   .   .   .   41
        2.14.1 Registro EECON1 . . . . . . . . . . . . . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   41
        2.14.2 Lendo a Mem´ria EEPROM . . . . . . . . . . . . . . . . .
                              o                                                                          .   .   .   .   .   .   .   .   .   42
        2.14.3 Escrevendo na Mem´ria EEPROM . . . . . . . . . . . . . .
                                      o                                                                  .   .   .   .   .   .   .   .   .   42

3 Conjunto de Instru¸˜es
                       co                                                                                                                    44
  3.1 Conjunto de Instru¸˜es da Fam´ PIC16Fxxx de
                          co           ılia                      Microcontroladores                              .   .   .   .   .   .   .   44
  3.2 Transferˆncia de dados . . . . . . . . . . . . . . .
               e                                                 . . . . . . . . . . . .                         .   .   .   .   .   .   .   44
  3.3 L´gicas e aritm´ticas . . . . . . . . . . . . . . . .
       o             e                                           . . . . . . . . . . . .                         .   .   .   .   .   .   .   44
  3.4 Opera¸˜es sobre bits . . . . . . . . . . . . . . . .
             co                                                  . . . . . . . . . . . .                         .   .   .   .   .   .   .   45
  3.5 Dire¸˜o de execu¸˜o de um programa . . . . . . .
           ca          ca                                        . . . . . . . . . . . .                         .   .   .   .   .   .   .   45
  3.6 Per´
         ıodo de execu¸˜o da instru¸˜o . . . . . . . . .
                       ca            ca                          . . . . . . . . . . . .                         .   .   .   .   .   .   .   45
  3.7 Conjunto de instru¸˜es . . . . . . . . . . . . . . .
                         co                                      . . . . . . . . . . . .                         .   .   .   .   .   .   .   46

4 Programa¸˜o em Linguagem Assembly
            ca                                                                                                                               48
  4.1 Linguagem Assembly . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
      4.1.1 Label . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
      4.1.2 Instru¸˜es . . . . . . . . . . . . . . . . .
                   co                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
      4.1.3 Operandos . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.1.4 Coment´rios . . . . . . . . . . . . . . .
                     a                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.1.5 Diretivas . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.1.6 Exemplo de um programa em assembly               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
  4.2 Macros . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52




                                                   3
Cap´
   ıtulo 1

Introdu¸˜o aos Microcontroladores
       ca

1.1     Introdu¸˜o
               ca
As circunstˆncias que se nos deparam hoje no campo dos microcontroladores tˆm os seus prim´rdios
           a                                                                 e              o
no desenvolvimento da tecnologia dos circuitos integrados. Este desenvolvimento tornou poss´  ıvel
armazenar centenas de milhares de transistores num unico chip. Isso constituiu um pr´-requisito
                                                      ´                                e
para a produ¸˜o de microprocessadores e, os primeiros computadores foram constru´
             ca                                                                       ıdos adicio-
nando perif´ricos externos tais como mem´ria, linhas de entrada e sa´
           e                               o                         ıda, temporizadores e outros.
Um crescente aumento do n´    ıvel de integra¸˜o, permitiu o aparecimento de circuitos integrados
                                             ca
contendo simultaneamente processador e perif´ricos. Foi assim que o primeiro chip contendo um
                                                e
microcomputador e que mais tarde haveria de ser designado por microcontrolador, apareceu.


1.2     Hist´ria
            o
´
E no ano de 1969 que uma equipa de engenheiros japoneses pertencentes ` companhia BUSICOM
                                                                          a
chega aos Estados Unidos com a encomenda de alguns circuitos integrados para calculadoras a
serem implementados segundo os seus projetos. A proposta foi entregue ` INTEL e Marcian Hoff
                                                                          a
foi o respons´vel pela sua concretiza¸˜o. Como ele tinha tido experiˆncia de trabalho com um
               a                      ca                               e
computador (PC) PDP8, lembrou-se de apresentar uma solu¸˜o substancialmente diferente em
                                                                ca
vez da constru¸˜o sugerida. Esta solu¸˜o pressupunha que a fun¸˜o do circuito integrado seria
                 ca                     ca                          ca
determinada por um programa nele armazenado. Isso significava que a configura¸˜o deveria ser
                                                                                  ca
mais simples, mas tamb´m era preciso muito mais mem´ria que no caso do projeto proposto pelos
                            e                           o
engenheiros japoneses. Depois de algum tempo, embora os engenheiros japoneses tenham tentado
encontrar uma solu¸˜o mais f´cil, a id´ia de Marcian venceu e o primeiro microprocessador nasceu.
                      ca         a    e
Ao transformar esta id´ia num produto concreto, Frederico Faggin foi de uma grande utilidade
                           e
para a INTEL. Ele transferiu-se para a INTEL e, em somente 9 meses, teve sucesso na cria¸˜o de
                                                                                           ca
um produto real a partir da sua primeira concep¸˜o. Em 1971, a INTEL adquiriu os direitos sobre
                                                 ca
a venda deste bloco integral. Primeiro eles compraram a licen¸a ` companhia BUSICOM que n˜o
                                                               c a                             a
tinha a m´ ınima percep¸˜o do tesouro que possu´ Neste mesmo ano, apareceu no mercado um
                           ca                     ıa.
microprocessador designado por 4004. Este foi o primeiro microprocessador de 4 bits e tinha a
velocidade de 6 000 opera¸˜es por segundo. N˜o muito tempo depois, a companhia Americana
                              co                 a
CTC pediu ` INTEL e ` Texas Instruments um microprocessador de 8 bits para usar em terminais.
             a             a
Mesmo apesar de a CTC acabar por desistir desta id´ia, tanto a Intel como a Texas Instruments
                                                      e
continuaram a trabalhar no microprocessador e, em Abril de 1972, os primeiros microprocessadores
de 8 bits apareceram no mercado com o nome de 8008. Este podia endere¸ar 16KB de mem´ria,
                                                                            c                o
possu´ 45 instru¸˜es e tinha a velocidade de 300 000 opera¸˜es por segundo. Esse microprocessador
      ıa           co                                     co
foi o pioneiro de todos os microprocessadores atuais. A Intel continuou com o desenvolvimento
do produto e, em Abril de 1974 pˆs c´ fora um processador de 8 bits com o nome de 8080 com a
                                   o a
capacidade de endere¸ar 64KB de mem´ria, com 75 instru¸˜es e com pre¸os a come¸arem em $360.
                        c               o                 co            c         c
    Uma outra companhia Americana, a Motorola, apercebeu-se rapidamente do que estava a
acontecer e, assim, pˆs no mercado um novo microprocessador de 8 bits, o 6800. O construtor
                         o
chefe foi Chuck Peddle e al´m do microprocessador propriamente dito, a Motorola foi a primeira
                               e



                                                4
companhia a fabricar outros perif´ricos como os 6820 e 6850. Nesta altura, muitas companhias
                                     e
j´ se tinham apercebido da enorme importˆncia dos microprocessadores e come¸aram a introduzir
 a                                           a                                     c
os seus pr´prios desenvolvimentos. Chuck Peddle deixa a Motorola para entrar para a MOS
             o
Technology e continua a trabalhar intensivamente no desenvolvimento dos microprocessadores.
    Em 1975, na exposi¸˜o WESCON nos Estados Unidos, ocorreu um acontecimento cr´
                          ca                                                                   ıtico na
hist´ria dos microprocessadores. A MOS Technology anunciou que ia pˆr no mercado micropro-
    o                                                                       o
cessadores 6501 e 6502 ao pre¸o de $25 cada e que podia satisfazer de imediato todas as en-
                                  c
comendas. Isto pareceu t˜o sensacional que muitos pensaram tratar-se de uma esp´cie de vigarice,
                            a                                                         e
considerando que os competidores vendiam o 8080 e o 6800 a $179 cada. Para responder a este
competidor, tanto a Intel como a Motorola baixaram os seus pre¸os por microprocessador para
                                                                      c
$69,95 logo no primeiro dia da exposi¸˜o. Rapidamente a Motorola pˆs uma a¸˜o em tribunal
                                         ca                                 o        ca
contra a MOS Technology e contra Chuck Peddle por viola¸˜o dos direitos de autor por copiarem
                                                              ca
ao copiarem o 6800. A MOS Technology deixou de fabricar o 6501, mas continuou com o 6502. O
6502 ´ um microprocessador de 8 bits com 56 instru¸˜es e uma capacidade de endere¸amento de
      e                                                  co                                c
64KB de mem´ria. Devido ao seu baixo custo, o 6502 torna-se muito popular e, assim, ´ instalado
                 o                                                                          e
em computadores como KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao,
Ultra e muitos outros. Cedo aparecem v´rios fabricantes do 6502 (Rockwell, Sznertek, GTE, NCR,
                                          a
Ricoh e Comodore adquiriram a MOS Technology) que, no auge da sua prosperidade, chegou a
vender microprocessadores ` raz˜o de 15 milh˜es por ano !
                               a   a             o
    Contudo, os outros n˜o baixaram os bra¸os. Frederico Faggin deixa a Intel e funda a Zilog Inc.
                           a                  c
Em 1976, a Zilog anuncia o Z80. Durante a concep¸˜o deste microprocessador, Faggin toma uma
                                                       ca
decis˜o cr´
      a     ıtica. Sabendo que tinha sido j´ desenvolvida uma enorme quantidade de programas
                                             a
para o 8080, Faggin conclui que muitos v˜o permanecer fieis a este microprocessador por causa
                                             a
das grandes despesas que adviriam das altera¸˜es a todos estes programas. Assim, ele decide que
                                                co
o novo microprocessador deve ser compat´     ıvel com o 8080, ou seja, deve ser capaz de executar
todos os programas que j´ tenham sido escritos para o 8080. Al´m destas caracter´
                             a                                      e                   ısticas, outras
caracter´ısticas adicionais foram introduzidas, de tal modo que o Z80 se tornou um microprocessador
muito potente no seu tempo. Ele podia endere¸ar directamente 64KB de mem´ria, tinha 176
                                                     c                                o
instru¸oes, um grande n´mero de registros, uma op¸˜o para refreshing de mem´ria RAM dinˆmica,
       c˜                 u                           ca                         o               a
uma unica alimenta¸˜o, maior velocidade de funcionamento, etc. O Z80 tornou-se um grande
       ´               ca
sucesso e toda a gente se transferiu do 8080 para o Z80. Pode dizer-se que o Z80 se constituiu
sem sombra de d´vida como o microprocessador de 8 bits com maior sucesso no seu tempo. Al´m
                    u                                                                               e
da Zilog, outros novos fabricantes como Mostek, NEC, SHARP e SGS apareceram. O Z80 foi o
cora¸ao de muitos computadores como o Spectrum, Partner, TRS703, Z-3 e Galaxy, que foram
     c˜
aqui usados.
    Em 1976, a Intel apareceu com uma vers˜o melhorada do microprocessador de 8 bits e designada
                                             a
por 8085. Contudo, o Z80 era t˜o superior a este que, bem depressa, a Intel perdeu a batalha. Ainda
                                 a
que mais alguns microprocessadores tenham aparecido no mercado (6809, 2650, SC/MP etc.), j´           a
tudo estava ent˜o decidido. J´ n˜o havia mais grandes melhorias a introduzir pelos fabricantes
                   a             a a
que fundamentassem a troca por um novo microprocessador, assim, o 6502 e o Z80, acompanhados
pelo 6800, mantiveram-se como os mais representativos microprocessadores de 8 bits desse tempo.


1.3     Microcontroladores versus Microprocessadores
Um microcontrolador difere de um microprocessador em v´rios aspectos. Primeiro e o mais impor-
                                                         a
tante, ´ a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes
       e
devem-lhe ser adicionados, tais como mem´ria e componentes para receber e enviar dados. Em
                                           o
resumo, isso significa que o microprocessador ´ o verdadeiro cora¸˜o do computador. Por outro
                                               e                  ca
lado, o microcontrolador foi projetado para ter tudo num s´. Nenhuns outros componentes exter-
                                                           o
nos s˜o necess´rios nas aplica¸˜es, uma vez que todos os perif´ricos necess´rios j´ est˜o contidos
     a          a              co                             e            a      a    a
nele. Assim, n´s poupamos tempo e espa¸o na constru¸˜o dos dispositivos.
                o                        c            ca


1.4     Microcontroladores da fam´ PIC
                                 ılia
A seguir s˜o apresentas algumas das caracter´
          a                                 ısticas mais importantes a respeito da arquitetura dos
microcontroladores PIC da Microchip.


                                                  5
1.4.1    Unidade de Mem´ria
                       o
A mem´ria ´ a parte do microcontrolador cuja fun¸˜o ´ guardar dados. A maneira mais f´cil de
        o    e                                      ca e                                   a
explicar ´ descrevˆ-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos
          e        e
as gavetas de modo a elas n˜o se confundirem umas com as outras, ent˜o o seu conte´do ser´
                               a                                          a              u   a
facilmente acess´ıvel. Basta saber a designa¸˜o da gaveta e o seu conte´do ser´ conhecido.
                                            ca                         u      a




                          Figura 1.1: Exemplo de unidade de mem´ria.
                                                               o

    Os componentes de mem´ria s˜o exatamente a mesma coisa. Para um determinado endere¸o,
                             o    a                                                             c
n´s obtemos o conte´do desse endere¸o. Dois novos conceitos foram apresentados: endere¸amento
  o                  u               c                                                     c
e mem´ria. A mem´ria ´ o conjunto de todos os locais de mem´ria (gavetas) e endere¸amento nada
       o            o e                                       o                      c
mais ´ que selecionar um deles. Isto significa que precisamos de selecionar o endere¸o desejado
      e                                                                                 c
(gaveta) e esperar que o conte´do desse endere¸o nos seja apresentado (abrir a gaveta). Al´m de ler
                              u                c                                          e
de um local da mem´ria (ler o conte´do da gaveta), tamb´m ´ poss´ escrever num endere¸o da
                     o               u                     e e      ıvel                     c
mem´ria (introduzir um conte´do na gaveta). Isto ´ feito utilizando uma linha adicional chamada
     o                         u                   e
linha de controle. N´s iremos designar esta linha por R/W (read/write) - ler/escrever. A linha de
                     o
controle ´ usada do seguinte modo: se r/w=1, ´ executada uma opera¸˜o de leitura, caso contr´rio
         e                                     e                      ca                       a
´ executada uma opera¸˜o de escrita no endere¸o de mem´ria.
e                       ca                       c         o
    A mem´ria ´ o primeiro elemento, mas precisamos de mais alguns para que o nosso microcon-
           o    e
trolador possa trabalhar.

1.4.2    Unidade Central de Processamento
Vamos agora adicionar mais 3 locais de mem´ria a um bloco espec´
                                                o                      ıfico para que possamos ter
as capacidades de multiplicar, dividir, subtrair e mover o seus conte´dos de um local de mem´ria
                                                                     u                       o
para outro. A parte que vamos acrescentar ´ chamada “central processing unit” (CPU) ou Unidade
                                            e
Central de Processamento. Os locais de mem´ria nela contidos chamam-se registros.
                                              o




                         Figura 1.2: Unidade Central de Processamento.



                                                6
Os registros s˜o, portanto, locais de mem´ria cujo papel ´ ajudar a executar v´rias opera¸˜es
                  a                           o                e                  a           co
matem´ticas ou quaisquer outras opera¸˜es com dados, quaisquer que sejam os locais em que estes
       a                                co
se encontrem.
    Vamos olhar para a situa¸˜o actual. N´s temos duas entidades independentes (mem´ria e CPU)
                              ca           o                                          o
que est˜o interligadas, deste modo, qualquer troca de dados ´ retardada bem como a funcionalidade
       a                                                    e
do sistema ´ diminu´
            e         ıda. Se, por exemplo, n´s desejarmos adicionar os conte´dos de dois locais
                                              o                               u
de mem´ria e tornar a guardar o resultado na mem´ria, n´s necessitamos de uma liga¸˜o entre
         o                                            o      o                          ca
a mem´ria e o CPU. Dito mais simplesmente, n´s precisamos de obter um ”caminho”atrav´s do
       o                                         o                                          e
qual os dados possam passar de um bloco para outro.

1.4.3    Barramentos - Bus
Este “caminho” designa-se por barramento (bus). Fisicamente ele corresponde a um grupo de 8,
16 ou mais fios.
   Existem dois tipos de bus: bus de dados e de endere¸o. O n´mero de linhas do primeiro
                                                        c        u
depende da quantidade de mem´ria que desejamos endere¸ar e o n´mero de linhas do outro de-
                              o                         c        u
pende da largura da palavra de dados, no nosso caso ´ igual a oito. O primeiro bus serve para
                                                    e
transmitir endere¸os do CPU para a mem´ria e o segundo para ligar todos os blocos dentro do
                 c                      o
microcontrolador.




                          Figura 1.3: Barramentos do microcontrolador.

    Neste momento, a funcionalidade j´ aumentou mas um novo problema apareceu: n´s temos uma
                                     a                                                 o
unidade capaz de trabalhar sozinha, mas que n˜o possui nenhum contato com o mundo exterior,
                                                 a
ou seja, conosco! De modo a remover esta deficiˆncia, vamos adicionar um bloco que cont´m v´rias
                                                e                                          e   a
localiza¸˜es de mem´ria e que, de um lado, est´ ligado ao bus de dados e do outro `s linhas de sa´
        co          o                         a                                   a              ıda
do microcontrolador que coincidem com pinos do circuito integrado e que, portanto, n´s podemos
                                                                                         o
ver com os nossos pr´prios olhos.
                     o

1.4.4    Unidade de entrada/sa´ (I/O)
                              ıda
Estas localiza¸˜es que acabamos de adicionar, chamam-se portas. Existem v´rios tipos de portas:
              co                                                          a
de entrada, de sa´ e de entrada/sa´
                   ıda                ıda. Quando trabalhamos com portas primeiro de tudo ´   e
necess´rio escolher a porta com que queremos trabalhar e, em seguida, enviar ou receber dados
      a
para ou dessa porta.
    Quando se est´ a trabalhar com ele, a porta funciona como um local de mem´ria. Qualquer
                  a                                                             o
coisa de que se est´ a ler ou em que se est´ a escrever e que ´ poss´ identificar facilmente nos
                    a                      a                  e     ıvel
pinos do microcontrolador.

1.4.5    Comunica¸˜o s´rie
                 ca e
Anteriormente, acrescentamos ` unidade j´ existente a possibilidade de comunicar com o mundo
                             a          a
exterior. Contudo, esta maneira de comunicar tem os seus inconvenientes. Um dos inconve-


                                                 7
Figura 1.4: Porta de entrada/sa´ de dados.
                                                         ıda


nientes b´sicos ´ o n´mero de linhas que ´ necess´rio usarmos para transferir dados. E se for
          a       e    u                     e        a
necess´rio transferi-los a uma distˆncia de v´rios quilˆmetros? O n´mero de linhas vezes o n´mero
       a                           a         a         o            u                        u
de quilˆmetros n˜o atesta a economia do projeto. Isto leva-nos a ter que reduzir o n´mero de linhas
       o          a                                                                 u
de modo a que a funcionalidade se mantenha. Suponha que estamos a trabalhar apenas com trˆs       e
linhas e que uma linha ´ usada para enviar dados, outra para os receber e a terceira ´ usada como
                         e                                                            e
linha de referˆncia tanto do lado de entrada como do lado da sa´
               e                                                ıda. Para que isto trabalhe n´s pre-
                                                                                             o
cisamos de definir as regras para a troca de dados. A este conjunto de regras chama-se protocolo.
Este protocolo deve ser definido com antecedˆncia de modo que n˜o haja mal entendidos entre as
                                               e                   a
partes que est˜o a comunicar entre si. Por exemplo, se um homem est´ a falar em francˆs e o outro
                a                                                     a                 e
em inglˆs, ´ altamente improv´vel que efetivamente e rapidamente, ambos se entendam. Vamos
         e e                    a
supor que temos o seguinte protocolo. A unidade l´gica ”1”´ colocada na linha de transmiss˜o at´
                                                    o        e                                a    e
que a transferˆncia se inicie. Assim que isto acontece, a linha passa para n´ l´gico ’0’ durante
                e                                                            ıvel o
um certo per´ ıodo de tempo (que vamos designar por T), assim, do lado da recep¸˜o ficamos a saber
                                                                                 ca
que existem dados para receber e, o mecanismo de recep¸˜o, vai ativar-se. Regressemos agora ao
                                                          ca
lado da emiss˜o e comecemos a pˆr zeros e uns l´gicos na linha de transmiss˜o correspondentes
                a                   o               o                           a
aos bits, primeiro o menos significativo e finalmente o mais significativo. Vamos esperar que cada
bit permane¸a na linha durante um per´
             c                            ıodo de tempo igual a T, e, finalmente, depois do oitavo
bit, vamos pˆr novamente na linha o n´ l´gico ”1”, o que assinala a transmiss˜o de um dado. O
             o                          ıvel o                                    a
protocolo que acabamos de descrever ´ designado na literatura profissional por NRZ (N˜o Retorno
                                       e                                                 a
a Zero).




                                 Figura 1.5: Comunica¸˜o serial.
                                                     ca


1.4.6    Unidade de temporiza¸˜o
                             ca
Agora que j´ temos a unidade de comunica¸˜o s´rie implementada, n´s podemos receber, enviar e
           a                             ca e                       o
processar dados.
    Contudo, para sermos capazes de utilizar isto na ind´stria precisamos ainda de mais alguns
                                                        u
blocos. Um deles ´ o bloco de temporiza¸˜o que nos interessa bastante porque pode dar-nos
                   e                      ca
informa¸˜es acerca da hora, dura¸˜o, protocolo, etc. A unidade b´sica do temporizador ´ um
       co                        ca                                a                     e
contador que ´ na realidade um registro cujo conte´do aumenta de uma unidade num intervalo
              e                                    u
de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando


                                                 8
Figura 1.6: Temporizador (timer ).


a sua diferen¸a, n´s ficamos a saber a quantidade de tempo decorrida. Esta ´ uma parte muito
             c    o                                                          e
importante do microcontrolador, cujo dom´ınio vai requerer muita da nossa aten¸˜o.
                                                                               ca

1.4.7    Watchdog timer
Uma outra coisa que nos vai interessar ´ a fluˆncia da execu¸˜o do programa pelo microcontro-
                                         e    e             ca
lador durante a sua utiliza¸˜o. Suponha que como resultado de qualquer interferˆncia (que ocorre
                           ca                                                  e
freq¨entemente num ambiente industrial), o nosso microcontrolador para de executar o programa
    u
ou, ainda pior, desata a trabalhar incoerentemente.




                                   Figura 1.7: Watchdog timer.

    Claro que, quando isto acontece com um computador, n´s simplesmente carregamos no bot˜o
                                                              o                                  a
de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador n´s n˜o podemos
                                                                                  o a
resolver o nosso problema deste modo, porque n˜o temos bot˜o. Para ultrapassar este obst´culo,
                                                   a            a                            a
precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (c˜o de guarda). Este
                                                                                a
bloco ´ de facto outro contador que est´ continuamente a contar e que o nosso programa p˜e a zero
      e                                 a                                                 o
sempre que ´ executado corretamente. No caso de o programa encravar, o zero n˜o vai ser escrito
             e                                                                    a
e o contador, por si s´, encarregar-se-´ de fazer o reset do microcontrolador quando alcan¸ar o seu
                      o                a                                                  c
valor m´ximo. Isto vai fazer com que o programa corra de novo e desta vez corretamente. Este ´
        a                                                                                          e
um elemento importante para que qualquer programa se execute confiavelmente, sem precisar da
interven¸˜o do ser humano.
         ca

1.4.8    Conversor anal´gico-digital (A/D)
                       o
Como os sinais dos perif´ricos s˜o substancialmente diferentes daqueles que o microcontrolador
                         e      a
pode entender (zero e um), eles devem ser convertidos num formato que possa ser compreendido
pelo microcontrolador. Esta tarefa ´ executada por interm´dio de um bloco destinado ` convers˜o
                                   e                     e                            a       a
anal´gica-digital ou com um conversor A/D. Este bloco vai ser respons´vel pela convers˜o de uma
    o                                                                 a                 a
informa¸˜o de valor anal´gico para um n´mero bin´rio e pelo seu trajeto atrav´s do bloco do CPU,
        ca              o               u        a                           e
de modo a que este o possa processar de imediato.




                         Figura 1.8: Conversor anal´gico-digital (A/D).
                                                   o




                                                 9
1.4.9    O microcontrolador
Neste momento, a configura¸˜o do microcontrolador est´ j´ terminada, tudo o que falta ´ introduzi-
                           ca                         a a                             e
la dentro de um aparelho eletrˆnico que poder´ acessar aos blocos internos atrav´s dos pinos deste
                              o              a                                  e
componente. A Figura 1.9 ilustra o aspecto interno de um microcontrolador.




               Figura 1.9: Configura¸˜o f´
                                   ca ısica do interior de um microcontrolador.

    As linhas mais finas que partem do centro em dire¸˜o ` periferia do microcontrolador corre-
                                                      ca a
spondem aos fios que interligam os blocos interiores aos pinos do inv´lucro do microcontrolador.
                                                                     o
A Figura 1.10 representa a parte principal de um microcontrolador.
    Numa aplica¸˜o real, um microcontrolador, por si s´, n˜o ´ suficiente. Al´m dele, n´s necessi-
                ca                                    o a e                 e         o
tamos do programa que vai ser executado e de mais alguns elementos que constituir˜o um interface
                                                                                 a
l´gico para outros elementos.
 o


1.5     Programa
Escrever um programa ´ uma parte especial do trabalho com microcontroladores e ´ designado por
                       e                                                       e
programa¸~o . Vamos tentar escrever um pequeno programa numa linguagem que seremos n´s a
          ca                                                                              o
criar e que toda a gente ser´ capaz de compreender.
                            a

INICIO
REGISTRO1=LOCAL_DE_ MEMORIA_A
REGISTRO2=LOCAL_DE_ MEMORIA_B
PORTO_A=REGISTRO1+REGISTRO2
FIM

    O programa adiciona os conte´dos de dois locais de mem´ria e coloca a soma destes conte´dos na
                                 u                         o                               u
porta A. A primeira linha do programa manda mover o conte´do do local de mem´ria ”A”para um
                                                             u                   o
dos registros da unidade central de processamento. Como necessitamos tamb´m de outra parcela,
                                                                             e
vamos colocar o outro conte´do noutro registro da unidade central de processamento (CPU). A
                              u
instru¸ao seguinte pede ao CPU para adicionar os conte´dos dos dois registros e enviar o resultado
      c˜                                                 u
obtido para a porta A, de modo a que o resultado desta adi¸˜o seja vis´ para o mundo exterior.
                                                            ca         ıvel
Para um problema mais complexo, naturalmente o programa que o resolve ser´ maior.
                                                                               a
    A tarefa de programa¸˜o pode ser executada em v´rias linguagens tais como o Assembler, C
                          ca                             a
e Basic que s˜o as linguagens normalmente mais usadas. O Assembler pertence ao grupo das
               a
linguagens de baixo n´ ıvel que implicam um trabalho de programa¸˜o lento, mas que oferece os
                                                                    ca
melhores resultados quando se pretende poupar espa¸o de mem´ria e aumentar a velocidade de
                                                       c          o
execu¸˜o do programa. Como se trata da linguagem mais freq¨entemente usada na programa¸˜o de
      ca                                                     u                               ca
microcontroladores, ela ser´ discutida num cap´
                            a                   ıtulo mais adiantado. Os programas na linguagem
C s˜o mais f´ceis de se escrever e compreender, mas, tamb´m, s˜o mais lentos a serem executados
    a        a                                             e    a
que os programas assembler. Basic ´ a mais f´cil de todas para se aprender e as suas instru¸˜es
                                     e         a                                               co


                                               10
Figura 1.10: Arquitetura do microcontrolador.




                     11
s˜o semelhantes ` maneira de um ser humano se exprimir, mas tal como a linguagem C, ´ tamb´m
 a                a                                                                        e      e
de execu¸˜o mais lenta que o assembler. Em qualquer caso, antes que escolha entre uma destas
         ca
linguagens, precisa de examinar cuidadosamente os requisitos de velocidade de execu¸˜o, de espa¸o
                                                                                      ca           c
de mem´ria a ocupar e o tempo que vai demorar a fazer o programa em assembly.
        o
    Depois de o programa estar escrito, n´s necessitamos de introduzir o microcontrolador num
                                            o
dispositivo e po-lo para trabalhar. Para que isto aconte¸a, n´s precisamos de adicionar mais alguns
                                                         c    o
componentes externos. Primeiro temos que dar vida ao microcontrolador fornecendo-lhe a tens˜o      a
(a tens˜o el´trica ´ necess´ria para que qualquer instrumento eletrˆnico funcione) e o oscilador cujo
       a e         e         a                                     o
papel ´ an´logo ao do cora¸˜o que bate no ser humano. A execu¸˜o das instru¸˜es do programa
      e a                      ca                                   ca            co
´ regulada pelas pulsa¸˜es do oscilador. Logo que lhe ´ aplicada a tens˜o, o microcontrolador
e                         co                               e                a
executa uma verifica¸˜o dele pr´prio, vai para o princ´
                       ca         o                     ıpio do programa e come¸a a execut´-lo. O
                                                                                 c            a
modo como o dispositivo vai trabalhar depende de muitos parˆmetros, os mais importantes dos
                                                                 a
quais s˜o a competˆncia da pessoa que desenvolve o hardware e do programador que, com o seu
       a             e
programa, deve tirar o m´ximo do dispositivo.
                             a




                                                 12
Cap´
   ıtulo 2

O Microcontrolador PIC16F84

O PIC 16F84 pertence a uma classe de microcontroladores de 8 bits, com uma arquitetura RISC .
A estrutura gen´rica ´ a do mapa que se segue, que nos mostra os seus blocos b´sicos.
               e     e                                                        a


2.1     Componentes b´sicos do PIC
                     a
Mem´ria de programa (FLASH) - para armazenar o programa que se escreveu. Como a
      o
mem´ria fabricada com tecnologia FLASH pode ser programa e limpa mais que uma vez. ela
     o
torna-se adequada para o desenvolvimento de dispositivos.

    EEPROM - mem´ria dos dados que necessitam de ser salvaguardados quando a alimenta¸˜o ´
                      o                                                                  ca e
desligada. Normalmente ´ usada para guardar dados importantes que n˜o se podem perder quando
                         e                                          a
a alimenta¸˜o, de repente, “vai abaixo”. Um exemplo deste tipo de dados ´ a temperatura fixada
           ca                                                           e
para os reguladores de temperatura. Se, durante uma quebra de alimenta¸˜o, se perdessem dados,
                                                                      ca
n´s precisar´
 o          ıamos de proceder a um novo ajustamento quando a alimenta¸˜o fosse restabelecida.
                                                                        ca
Assim, o nosso dispositivo, perderia efic´cia.
                                        a

   RAM - mem´ria de dados usada por um programa, durante a sua execu¸˜o. Na RAM, s˜o
                 o                                                            ca           a
guardados todos os resultados interm´dios ou dados tempor´rios durante a execu¸˜o do programa
                                      e                      a                   ca
e que n˜o s˜o cruciais para o dispositivo, depois de ocorrer uma falha na alimenta¸˜o.
       a a                                                                        ca

   PORTA A e PORTA B s˜o liga¸˜es f´
                               a     co ısicas entre o microcontrolador e o mundo exterior. A
porta A tem cinco pinos e a porta B oito pinos.

   CONTADOR/TEMPORIZADOR ´ um registro de 8 bits no interior do microcontrolador
                                           e
que trabalha independentemente do programa. No fim de cada conjunto de quatro ciclos de rel´gio
                                                                                           o
do oscilador, ele incrementa o valor armazenado, at´ atingir o valor m´ximo (255), nesta altura
                                                   e                  a
recome¸a a contagem a partir de zero. Como n´s sabemos o tempo exato entre dois incrementos
       c                                       o
sucessivos do conte´do do temporizador, podemos utilizar este para medir intervalos de tempo, o
                    u
que o torna muito util em v´rios dispositivos.
                    ´       a

    UNIDADE DE PROCESSAMENTO CENTRAL faz a conex˜o com todos os outros a
blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o programa do
utilizador.


2.2     CISC x RISC
J´ foi dito que o PIC16F84 tem uma arquitetura RISC. Este termo ´ encontrado, muitas vezes, na
  a                                                                 e
literatura sobre computadores e necessita de ser explicada aqui, mais detalhadamente. A arquite-
tura de Harvard ´ um conceito mais recente que a de von-Neumann. Ela adveio da necessidade
                  e
de pˆr o microcontrolador a trabalhar mais rapidamente. Na arquitetura de Harvard, a mem´ria
     o                                                                                      o
de dados est´ separada da mem´ria de programa. Assim, ´ poss´ uma maior fluˆncia de dados
             a                 o                          e      ıvel            e


                                              13
Figura 2.1: Esquema do microcontrolador PIC16F84.




                    Figura 2.2: Arquiteturas Harvard versus von Neumann.


atrav´s da unidade central de processamento e, claro, uma maior velocidade de funcionamento. A
      e
separa¸˜o da mem´ria de dados da mem´ria de programa, faz com que as instru¸˜es possam ser
        ca         o                     o                                       co
representadas por palavras de mais que 8 bits. O PIC16F84, usa 14 bits para cada instru¸˜o, o
                                                                                            ca
                                                       o                ca ´
que permite que que todas as instru¸˜es ocupem uma s´ palavra de instru¸˜o. E tamb´m t´
                                   co                                                 e   ıpico da
arquitetura Harvard ter um repert´rio com menos instru¸˜es que a de von-Neumann’s, instru¸˜es
                                  o                      co                                   co
essas, geralmente executadas apenas num unico ciclo de rel´gio.
                                           ´                o
    Os microcontroladores com a arquitetura Harvard, s˜o tamb´m designados por microcontroladores
                                                      a        e
RISC. RISC prov´m de Computador com um Conjunto Reduzido de Instru¸˜es (Reduced Instruc-
                 e                                                        co
tion Set Computer). Os microcontroladores com uma arquitetura von-Neumann s˜o designados
                                                                                    a
por microcontroladores CISC. O nome CISC deriva de Computador com um Conjunto Complexo
de Instru¸oes (Complex Instruction Set Computer).
           c˜
    Como o PIC16F84 ´ um microcontrolador RISC, disso resulta que possui um n´mero reduzido
                       e                                                          u
de instru¸oes, mais precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola
           c˜
tˆm mais de cem instru¸˜es). Todas estas instru¸˜es s˜o executadas num unico ciclo, exceto no caso
 e                     co                      co a                    ´
de instru¸˜es de salto e de ramifica¸˜o. De acordo com o que o seu fabricante refere, o PIC16F84
           co                      ca
geralmente atinge resultados de 2 para 1 na compress˜o de c´digo e 4 para 1 na velocidade, em
                                                       a       o
rela¸˜o aos outros microcontroladores de 8 bits da sua classe.
    ca


2.3     Aplica¸˜es
              co
O PIC16F84, ´ perfeitamente adequado para muitas variedades de aplica¸˜es, como a ind´stria
               e                                                           co              u
                                              e                               c   ´
autom´vel, sensores remotos, fechaduras el´tricas e dispositivos de seguran¸a. E tamb´m um
       o                                                                                 e
dispositivo ideal para cart˜es inteligentes, bem como para dispositivos alimentados por baterias,
                           o
por causa do seu baixo consumo.
    A mem´ria EEPROM, faz com que se torne mais f´cil usar microcontroladores em dispositivos
           o                                         a
onde o armazenamento permanente de v´rios parˆmetros, seja necess´rio (c´digos para transmis-
                                          a       a                  a      o
sores, velocidade de um motor, freq¨ˆncias de recep¸˜o, etc.). O baixo custo, baixo consumo,
                                       ue            ca
facilidade de manuseamento e flexibilidade fazem com que o PIC16F84 se possa utilizar em ´reas
                                                                                           a
em que os microcontroladores n˜o eram anteriormente empregues (exemplo: fun¸˜es de tempo-
                                 a                                               co


                                               14
riza¸˜o, substitui¸˜o de interfaces em sistemas de grande porte, aplica¸˜es de coprocessamento,
    ca            ca                                                       co
etc.).
    A possibilidade deste chip de ser program´vel no sistema (usando somente dois pinos para a
                                               a
transferˆncia de dados), d˜o flexibilidade do produto, mesmo depois de a sua montagem e teste
        e                  a
estarem completos.
    Esta capacidade, pode ser usada para criar linhas de produ¸˜o e montagem, para armazenar
                                                                  ca
dados de calibragem dispon´ ıveis apenas quando se proceder ao teste final ou, ainda, para aperfei¸oar
                                                                                                 c
os programas presentes em produtos acabados.


2.4     Rel´gio / ciclo de instru¸˜o
           o                     ca
O rel´gio (clock), ´ quem d´ o sinal de partida para o microcontrolador e ´ obtido a partir de
      o              e       a                                                 e
um componente externo chamado oscilador. Se considerasse-mos que um microcontrolador era
um rel´gio de sala, o nosso clock corresponderia ao pˆndulo e emitiria um ru´ correspondente
        o                                               e                        ıdo
ao deslocar do pˆndulo. Tamb´m, a for¸a usada para dar corda ao rel´gio, podia comparar-se `
                  e            e          c                              o                      a
alimenta¸˜o el´trica.
          ca   e
    O clock do oscilador, ´ ligado ao microcontrolador atrav´s do pino OSC1, aqui, o circuito
                           e                                   e
interno do microcontrolador divide o sinal de clock em quatro fases, Q1, Q2, Q3 e Q4 que n˜o   a
se sobrep˜em. Estas quatro pulsa¸˜es perfazem um ciclo de instru¸˜o (tamb´m chamado ciclo de
           o                      co                                ca        e
m´quina) e durante o qual uma instru¸˜o ´ executada. A execu¸˜o de uma instru¸˜o, ´ antecedida
  a                                    ca e                     ca                 ca e
pela extra¸˜o da instru¸˜o que est´ na linha seguinte. O c´digo da instru¸˜o ´ extra´ da mem´ria
            ca         ca         a                       o              ca e        ıdo     o
de programa em Q1 e ´ escrito no registro de instru¸˜o em Q4.
                       e                             ca
    A decodifica¸˜o e execu¸˜o dessa mesma instru¸˜o, faz-se entre as fases Q1 e Q4 seguintes. Na
                 ca         ca                     ca
Figura 2.3 podemos observar a rela¸˜o entre o ciclo de instru¸˜o e o clock do oscilador (OSC1)
                                     ca                         ca
assim como as fases Q1-Q4. O contador de programa (Program Counter ou PC) guarda o endere¸o    c
da pr´xima instru¸˜o a ser executada.
      o             ca




                             Figura 2.3: Ciclo de instru¸˜o e o clock.
                                                        ca


2.4.1    Pipelining
Cada ciclo de instru¸˜o inclui as fases Q1, Q2, Q3 e Q4. A extra¸˜o do c´digo de uma instru¸˜o
                      ca                                            ca      o                     ca
da mem´ria de programa, ´ feita num ciclo de instru¸˜o, enquanto que a sua decodifica¸˜o e
        o                     e                            ca                                   ca
execu¸ao, s˜o feitos no ciclo de instru¸˜o seguinte. Contudo, devido ` sobreposi¸˜o – pipelining (o
     c˜ a                              ca                            a          ca
microcontrolador ao mesmo tempo que executa uma instru¸˜o extrai simultaneamente da mem´ria
                                                              ca                                  o
o c´digo da instru¸˜o seguinte), podemos considerar que, para efeitos pr´ticos, cada instru¸˜o
   o                ca                                                        a                   ca
demora um ciclo de instru¸˜o a ser executada. No entanto, se a instru¸˜o provocar uma mudan¸a
                            ca                                           ca                         c
no conte´do do contador de programa (PC), ou seja, se o PC n˜o tiver que apontar para o endere¸o
        u                                                        a                                  c
seguinte na mem´ria de programa, mas sim para outro (como no caso de saltos ou de chamadas
                  o
de subrotinas), ent˜o dever´ considerar-se que a execu¸˜o desta instru¸˜o demora dois ciclos. Isto
                    a        a                           ca              ca
acontece, porque a instru¸˜o vai ter que ser processada de novo, mas, desta vez, a partir do endere¸o
                          ca                                                                        c


                                                 15
correto. O ciclo de chamada come¸a na fase Q1, escrevendo a instru¸˜o no registro de instru¸˜o
                                   c                                 ca                     ca
(Instruction Register - IR). A decodifica¸˜o e execu¸˜o continua nas fases Q2, Q3 e Q4 do clock.
                                        ca         ca




                                      Figura 2.4: Pipeline.


2.4.2    Fluxograma das Instru¸˜es no Pipeline
                              co
TCY0 ´ lido da mem´ria o c´digo da instru¸˜o MOVLW 55h (n˜o nos interessa a instru¸˜o que
         e             o       o             ca                 a                      ca
foi executada, por isso n˜o est´ representada por retˆngulo).
                         a     a                     a
    TCY1 ´ executada a instru¸˜o MOVLW 55h e ´ lida da mem´ria a instru¸˜o MOVWF PORTB.
             e                  ca                e           o         ca
    TCY2 ´ executada a instru¸˜o MOVWF PORTB e lida a instru¸˜o CALL SUB1.
             e                   ca                               ca
    TCY3 ´ executada a chamada (call) de um subrotina CALL SUB1 e ´ lida a instru¸˜o BSF
             e                                                          e             ca
PORTA,BIT3. Como esta instru¸˜o n˜o ´ a que nos interessa, ou seja, n˜o ´ a primeira instru¸˜o
                                  ca a e                              a e                  ca
da subrotina SUB1, cuja execu¸˜o ´ o que vem a seguir, a leitura de uma instru¸˜o tem que ser
                                 ca e                                          ca
feita de novo. Este ´ um bom exemplo de uma instru¸˜o a precisar de mais que um ciclo.
                    e                                 ca
    TCY4 este ciclo de instru¸˜o ´ totalmente usado para ler a primeira instru¸˜o da subrotina
                                ca e                                          ca
no endere¸o SUB1.
           c
    TCY5 ´ executada a primeira instru¸˜o da subrotina SUB1 e lida a instru¸˜o seguinte.
             e                           ca                                 ca


2.5     Significado dos pinos
                                        ´
O PIC16F84 tem um total de 18 pinos. E mais freq¨entemente encontrado num tipo de encap-
                                                     u
sulamento DIP18, mas, tamb´m pode ser encontrado numa c´psula SMD de menores dimens˜es
                             e                                a                                o
que a DIP. DIP ´ uma abreviatura para Dual In Package (Empacotamento em duas linhas). SMD
                 e
´ uma abreviatura para Surface Mount Devices (Dispositivos de Montagem em Superf´
e                                                                                     ıcie), o que
sugere que os pinos n˜o precisam de passar pelos orif´
                       a                             ıcios da placa em que s˜o inseridos, quando
                                                                            a
se solda este tipo de componente.




                               Figura 2.5: Pinagem do PIC16F84.

   Os pinos no microcontrolador PIC16F84, tˆm o seguinte significado:
                                           e


                                               16
• Pino no 1, RA2 Segundo pino da porta A. N˜o tem nenhuma fun¸˜o adicional.
                                              a                 ca
   • Pino no 2, RA3 Terceiro pino da porta A. N˜o tem nenhuma fun¸˜o adicional.
                                               a                 ca
   • Pino no 3, RA4 Quarto pino da porta A. O TOCK1 que funciona como entrada do tempo-
     rizador, tamb´m utiliza este pino.
                  e
   • Pino no 4, MCLR Entrada de reset e entrada da tens˜o de programa¸˜o Vpp do microcon-
                                                       a             ca
     trolador .
   • Pino no 5, Vss massa da alimenta¸˜o.
                                     ca
   • Pino no 6, RB0, bit 0 da porta B. Tem uma fun¸˜o adicional que ´ a de entrada de interrup¸˜o.
                                                  ca                e                         ca
   • Pino no 7, RB1 bit 1da porta B. N˜o tem nenhuma fun¸˜o adicional.
                                      a                 ca
   • Pino no 8, RB2 bit 2 da porta B. N˜o tem nenhuma fun¸˜o adicional.
                                       a                 ca
   • Pino no 9, RB3 bit 3 da porta B. N˜o tem nenhuma fun¸˜o adicional.
                                       a                 ca
   • Pino no 10, RB4 bit 4 da porta B. N˜o tem nenhuma fun¸˜o adicional.
                                        a                 ca
   • Pino no 11, RB5 bit 5 da porta B. N˜o tem nenhuma fun¸˜o adicional.
                                        a                 ca
   • Pino no 12, RB6 bit 6 da porta B. No modo de programa ´ a linha de clock
                                                           e
   • Pino no 13, RB7 bit 7 da porta B. Linha de dados no modo de programa
   • Pino no 14, Vdd p´lo positivo da tens˜o de alimenta¸˜o.
                      o                   a             ca
   • Pino no 15, OSC2 para ser ligado a um oscilador.
   • Pino no 16, OSC1 para ser ligado a um oscilador.
   • Pino no 17, RA0 bit 0 da porta A. Sem fun¸˜o adicional.
                                              ca
   • Pino no 18, RA1 bit 1 da porta A. Sem fun¸˜o adicional.
                                              ca


2.6     Gerador de rel´gio – oscilador
                      o
O circuito do oscilador ´ usado para fornecer um rel´gio (clock), ao microcontrolador. O clock
                        e                           o
´ necess´rio para que o microcontrolador possa executar um programa ou as instru¸˜es de um
e       a                                                                          co
programa.

2.6.1    Tipos de osciladores
O PIC16F84 pode trabalhar com quatro configura¸˜es de oscilador. Uma vez que as configura¸˜es
                                                   co                                        co
com um oscilador de cristal e resistˆncia-condensador (RC) s˜o aquelas mais freq¨entemente us-
                                     e                         a                  u
adas, elas s˜o as unicas que vamos mencionar aqui.
            a     ´
    Quando o oscilador ´ de cristal, a designa¸˜o da configura¸˜o ´ de XT, se o oscilador for uma
                        e                     ca               ca e
resistˆncia em s´rie com um condensador, tem a designa¸˜o RC. Isto ´ importante, porque h´
      e          e                                          ca           e                      a
necessidade de optar entre os diversos tipos de oscilador, quando se escolhe um microcontrolador.




                 Figura 2.6: Clock de um microcontrolador com um ressonador.



                                               17
2.6.2    Oscilador XT
O oscilador de cristal est´ contido num inv´lucro de metal com dois pinos onde foi escrita a
                           a                   o
freq¨ˆncia a que o cristal oscila. Dois condensadores cerˆmicos devem ligar cada um dos pinos do
    ue                                                   a
cristal ` massa. Casos h´ em que cristal e condensadores est˜o contidos no mesmo encapsulamento,
        a               a                                   a
´ tamb´m o caso do ressonador cerˆmico ao lado representado. Este elemento tem trˆs pinos
e       e                             a                                                  e
com o pino central ligado ` massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do
                             a
microcontrolador. Quando projetamos um dispositivo, a regra ´ colocar o oscilador t˜o perto
                                                                   e                    a
quanto poss´ do microcontrolador, de modo a evitar qualquer interferˆncia nas linhas que ligam
            ıvel                                                         e
o oscilador ao microcontrolador.




          Figura 2.7: Clock de um microcontrolador a partir de um cristal de quartzo.



2.6.3    Oscilador RC
Em aplica¸˜es em que a precis˜o da temporiza¸˜o n˜o ´ um factor cr´
           co                  a             ca a e               ıtico, o oscilador RC torna-se
mais econˆmico. A freq¨ˆncia de ressonˆncia do oscilador RC depende da tens˜o de alimenta¸˜o,
           o            ue              a                                     a             ca
da resistˆncia R, capacitˆncia C e da temperatura de funcionamento.
         e               a




                                     Figura 2.8: Oscilador RC.

    A Figura 2.8 mostra como um oscilador RC deve ser ligado a um PIC16F84. Com um valor
para a resistˆncia R abaixo de 2,2kΩ, o oscilador pode tornar-se inst´vel ou pode mesmo parar de
             e                                                          a
oscilar. Para um valor muito grande R (1M por exemplo), o oscilador torna-se muito sens´       ıvel `
                                                                                                    a
umidade e ao ru´      ´
                 ıdo. E recomendado que o valor da resistˆncia R esteja compreendido entre 3kΩ e
                                                             e
100kΩ. Apesar de o oscilador poder trabalhar sem condensador externo (C = 0pF), ´ conveniente,
                                                                                      e
ainda assim, usar um condensador acima de 20pF para evitar o ru´ e aumentar a estabilidade.
                                                                       ıdo
Qualquer que seja o oscilador que se est´ a utilizar, a freq¨ˆncia de trabalho do microcontrolador ´
                                        a                    ue                                     e
a do oscilador dividida por 4. A freq¨ˆncia de oscila¸˜o dividida por 4 tamb´m ´ fornecida no pino
                                     ue               ca                      e e
OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros circuitos l´gicos pertencentes
                                                                                 o
ao sistema.
    Ao ligar a alimenta¸˜o do circuito, o oscilador come¸a a oscilar. Primeiro com um per´
                        ca                                 c                                ıodo de
oscila¸˜o e uma amplitude inst´veis, mas, depois de algum tempo, tudo estabiliza.
      ca                        a
    Para evitar que esta instabilidade inicial do clock afete o funcionamento do microcontrolador,
n´s necessitamos de manter o microcontrolador no estado de reset enquanto o clock do oscilador
 o
n˜o estabiliza. A Figura 2.10 mostra uma forma t´
 a                                                     ıpica do sinal fornecido por um oscilador de
cristal de quartzo ao microcontrolador quando se liga a alimenta¸˜o.ca



                                                 18
Figura 2.9: Rela¸˜o entre o sinal de clock e os ciclos de instru¸˜o.
                                ca                                              ca




Figura 2.10: Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimenta¸˜o.
                                                                                            ca


2.7     Reset
O reset ´ usado para pˆr o microcontrolador num estado conhecido. Na pr´tica isto significa
          e              o                                                         a
que `s vezes o microcontrolador pode comportar-se de um modo inadequado em determinadas
      a
condi¸˜es indesej´veis. De modo a que o seu funcionamento normal seja restabelecido, ´ preciso
       co         a                                                                           e
fazer o reset do microcontrolador, isto significa que todos os seus registros v˜o conter valores iniciais
                                                                              a
pr´-definidos, correspondentes a uma posi¸˜o inicial. O reset n˜o ´ usado somente quando o micro-
   e                                        ca                    a e
controlador n˜o se comporta da maneira que n´s queremos, mas, tamb´m pode ser usado, quando
                a                                o                         e
ocorre uma interrup¸˜o por parte de outro dispositivo, ou quando se quer que o microcontrolador
                     ca
esteja pronto para executar um programa .
     De modo a prevenir a ocorrˆncia de um zero l´gico acidental no pino MCLR (a linha por cima
                                e                  o
de MCLR significa o sinal de reset ´ ativado por n´
                                      e                ıvel l´gico baixo), o pino MCLR tem que ser
                                                             o
ligado atrav´s de uma resistˆncia ao lado positivo da alimenta¸˜o. Esta resistˆncia deve ter um
              e               e                                    ca               e
valor entre 5kΩ e 10kΩ. Uma resistˆncia como esta, cuja fun¸˜o ´ conservar uma determinada
                                       e                           ca e
linha a n´ l´gico alto, ´ chamada resist^ncia de pull up.
          ıvel o          e                   e




                        Figura 2.11: Utiliza¸˜o do circuito interno de reset.
                                            ca

   O microcontrolador PIC16F84, admite v´rias formas de reset:
                                        a



                                                  19
1. Reset quando se liga a alimenta¸˜o, POR (Power-On Reset)
                                    ca
  2. Reset durante o funcionamento normal, quando se p˜e a n´ l´gico baixo o pino MCLR do
                                                      o     ıvel o
     microcontrolador.
  3. Reset durante o regime de SLEEP (dormir).
  4. Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir
     o valor m´ximo).
              a
  5. Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP.
    Os reset mais importantes s˜o o primeiro e o segundo. O primeiro, ocorre sempre que ´ ligada
                                a                                                         e
a alimenta¸˜o do microcontrolador e serve para trazer todos os registros para um estado inicial. O
           ca
segundo que resulta da aplica¸˜o de um valor l´gico baixo ao pino MCLR durante o funcionamento
                             ca                o
normal do microcontrolador e, ´ usado muitas vezes, durante o desenvolvimento de um programa.
                               e
    Durante um reset, os locais de mem´ria da RAM (registros) n˜o s˜o alterados. Ou seja, os
                                         o                          a a
conte´dos destes registros, s˜o desconhecidos durante o restabelecimento da alimenta¸˜o, mas
      u                      a                                                          ca
mant´m-se inalterados durante qualquer outro reset. Ao contr´rio dos registros normais, os SFR
      e                                                        a
(registros com fun¸˜es especiais) s˜o reiniciados com um valor inicial pr´-definido. Um dos mais
                   co               a                                    e
importantes efeitos de um reset, ´ introduzir no contador de programa (PC), o valor zero (0000),
                                  e
o que faz com que o programa comece a ser executado a partir da primeira instru¸˜o deste.
                                                                                  ca

2.7.1    Brown-out Reset
Reset quando o valor da alimenta¸˜o desce abaixo do limite permitido ´ chamado de Brown-out
                                   ca                                   e
Reset.
    O impulso que provoca o reset durante o estabelecimento da alimenta¸˜o (power-up), ´ gerado
                                                                         ca              e
pelo pr´prio microcontrolador quando detecta um aumento na tens˜o Vdd (numa faixa entre 1,2V
        o                                                         a
e 1,8V). Esse impulso perdura durante 72ms, o que, em princ´   ıpio, ´ tempo suficiente para que
                                                                     e
o oscilador estabilize. Esse intervalo de tempo de 72ms ´ definido por um temporizador interno
                                                         e
PWRT, com um oscilador RC pr´prio. Enquanto PWRT estiver actio, o microcontrolador mant´m-
                                 o                                                            e
se no estado de reset. Contudo, quando o dispositivo est´ a trabalhar, pode surgir um problema
                                                         a
n˜o resultante de uma queda da tens˜o para 0 volts, mas sim de uma queda de tens˜o para um
 a                                     a                                              a
valor abaixo do limite que garante o correto funcionamento do microcontrolador. Trata-se de
um facto muito prov´vel de ocorrer na pr´tica, especialmente em ambientes industriais onde as
                      a                     a
perturba¸˜es e instabilidade da alimenta¸˜o ocorrem freq¨entemente. Para resolver este problema,
          co                             ca             u
n´s precisamos de estar certos de que o microcontrolador entra no estado de reset de cada vez que
 o
a alimenta¸˜o desce abaixo do limite aprovado.
            ca




               Figura 2.12: Exemplos de quedas na alimenta¸˜o abaixo do limite.
                                                          ca

   Se, de acordo com as especifica¸˜es el´tricas, o circuito interno de reset de um microcontrolador
                                   co    e
n˜o satisfizer as necessidades, ent˜o, dever˜o ser usados componentes electronics especiais, capazes
 a                                a        a

                                                20
de gerarem o sinal de reset desejado.    Al´m desta fun¸˜o, estes componentes, podem tamb´m
                                            e           ca                                 e
cumprir o papel de vigiarem as quedas   de tens˜o para um valor abaixo de um n´ especificado.
                                               a                               ıvel
Quando isto ocorre, aparece um zero     l´gico no pino MCLR, que mant´m o microcontrolador
                                         o                               e
no estado de reset, enquanto a tens˜o
                                   a    n˜o estiver dentro dos limites que garantem um correto
                                          a
funcionamento.


2.8     Unidade Central de Processamento
A unidade central de processamento (CPU) ´ o c´rebro de um microcontrolador. Essa parte ´
                                              e    e                                     e
respons´vel por extrair a instru¸˜o, decodificar essa instru¸˜o e, finalmente, execut´-la.
       a                        ca                         ca                      a




               Figura 2.13: Esquema da unidade central de processamento - CPU.

     A unidade central de processamento, interliga todas as partes do microcontrolador de modo
a que este se comporte como um todo. Uma das sua fun¸˜es mais importante ´, seguramente,
                                                            co                    e
decodificar as instru¸˜es do programa. Quando o programador escreve um programa, as instru¸˜es
                    co                                                                         co
assumem um claro significado como ´ o caso por exemplo de MOVLW 0x20. Contudo, para
                                      e
que um microcontrolador possa entendˆ-las, esta forma escrita de uma instru¸˜o tem que ser
                                        e                                        ca
traduzida numa s´rie de zeros e uns que ´ o opcode (operation code ou c´digo da opera¸˜o).
                  e                         e                                  o              ca
Esta passagem de uma palavra escrita para a forma bin´ria ´ executada por tradutores assembler
                                                         a e
(ou simplesmente assembler). O c´digo da instru¸˜o extra´ da mem´ria de programa, tem
                                    o               ca         ıdo         o
que ser decodificado pela unidade central de processamento (CPU). A cada uma das instru¸˜es     co
do repert´rio do microcontrolador, corresponde um conjunto de a¸˜es para a concretizar. Estas
          o                                                         co
a¸˜es, podem envolver transferˆncias de dados de um local de mem´ria para outro, de um local de
  co                           e                                    o
mem´ria para os portos, e diversos c´lculos, pelo que, se conclui que, o CPU, tem que estar ligado
      o                             a
a todas as partes do microcontrolador. Os bus de de dados e o de endere¸o permitem-nos fazer
                                                                             c
isso.

2.8.1    Unidade L´gica Aritm´tica (ALU)
                  o          e
A unidade l´gica aritm´tica (ALU – Arithmetic Logic Unit), ´ respons´vel pela execu¸˜o de
             o            e                                   e        a               ca
opera¸˜es de adi¸˜o, subtra¸˜o, deslocamento (para a esquerda ou para a direita dentro de um
      co         ca          ca
registro) e opera¸˜es l´gicas. O PIC16F84 cont´m uma unidade l´gica aritm´tica de 8 bits e
                  co    o                      e                 o          e
registros de uso gen´rico tamb´m de 8 bits.
                     e          e


2.9     Registros
Por operando n´s designamos o conte´do sobre o qual uma opera¸˜o incide. Nas instru¸˜es com
                o                   u                           ca                   co
dois operados, geralmente um operando est´ contido no registro de trabalho W (working register)
                                         a
e o outro operando ou ´ uma constante ou ent˜o est´ contido num dos outros registros. Esses
                       e                      a     a

                                               21
Figura 2.14: Unidade l´gica-aritm´tica.
                                       o          e




Figura 2.15: Diagrama bloco mais detalhado do microcontrolador PIC16F84.




                                   22
registros podem ser Registros de Uso Gen´rico (General Purpose Registers – GPR) ou Registros
                                           e
com fun¸oes especiais (Special Function Registers – SFR). Nas instru¸˜es s´ com um operando,
         c˜                                                            co   o
um dos operandos ´ o conte´do do registro W ou o conte´do de um dos outros registros. Quando
                   e        u                            u
s˜o executadas opera¸˜es l´gicas ou aritm´ticas como ´ o caso da adi¸˜o, a ALU controla o estado
 a                   co o                 e          e              ca
dos bits (que constam do registro de estado – STATUS). Dependendo da instru¸˜o a ser executada,
                                                                              ca
a ALU, pode modificar os valores bits do Carry (C), Carry de d´  ıgito (DC) e Z (zero) no registro
de estado – STATUS.

2.9.1    Registro STATUS
O registro de estado (STATUS), cont´m o estado da ALU (C, DC, Z), estado de RESET (TO, PD)
                                     e
e os bits para sele¸˜o do banco de mem´ria (IRP, RP1, RP0). Considerando que a sele¸˜o do banco
                   ca                  o                                           ca
de mem´ria ´ controlada atrav´s deste registro, ele tem que estar presente em todos os bancos.
         o    e                  e
Os bancos de mem´ria ser˜o discutidos com mais detalhe no cap´
                     o      a                                   ıtulo que trata da Organiza¸˜o
                                                                                            ca
da Mem´ria. Se o registro STATUS for o registro de destino para instru¸˜es que afetem os bits Z,
         o                                                            co
DC ou C, ent˜o n˜o ´ poss´ escrever nestes trˆs bits.
               a a e        ıvel                e




                               Figura 2.16: Registrador STATUS.


bit 0 C (Carry) Transporte. Este bit ´ afetado pelas opera¸˜es de adi¸˜o, subtra¸˜o e desloca-
                                       e                   co        ca         ca
     mento. Toma o valor 1 (set), quando um valor mais pequeno ´ subtra´ de um valor maior
                                                                e       ıdo
     e toma o valor 0 (reset) quando um valor maior ´ subtra´ de um menor. 1= Ocorreu um
                                                    e       ıdo
     transporte no bit mais significativo 0= N˜o ocorreu transporte no bit mais significativo O
                                             a
     bit C ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF.
           e                     co
bit 1 DC (Digit Carry) Transporte de d´    ıgito. Este bit ´ afetado pelas opera¸˜es de adi¸˜o,
                                                           e                     co        ca
     subtra¸˜o. Ao contr´rio do anterior, DC assinala um transporte do bit 3 para o bit 4 do
            ca            a
     resultado. Este bit toma o valor 1, quando um valor mais pequeno ´ subtra´ de um valor
                                                                        e       ıdo
     maior e toma o valor 0 quando um valor maior ´ subtra´ de um menor.
                                                    e        ıdo
     1= Ocorreu um transporte no quarto bit mais significativo
     0= N˜o ocorreu transporte nesse bit
           a
     O bit DC ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF.
               e                    co
bit 2 Z (bit Zero) Indica¸˜o de resultado igual a zero. Este bit toma o valor 1 quando o resul-
                           ca
     tado da opera¸˜o l´gica ou aritm´tica executada ´ igual a 0.
                  ca o               e               e
     1= resultado igual a zero
     0= resultado diferente de zero
bit 3 PD (Bit de baixa de tens˜o – Power Down). Este bit ´ posto a 1 quando o microcontro-
                                  a                          e
     lador ´ alimentado e come¸a a trabalhar, depois de um reset normal e depois da execu¸˜o da
           e                    c                                                        ca
     instru¸˜o CLRWDT. A instru¸˜o SLEEP p˜e este bit a 0 ou seja, quando o microcontrolador
           ca                       ca          o
     entra no regime de baixo consumo / pouco trabalho. Este bit pode tamb´m ser posto a 1,
                                                                              e
     no caso de ocorrer um impulso no pino RB0/INT, uma varia¸˜o nos quatro bits mais signi-
                                                                  ca
     ficativos da porta B, ou quando ´ completada uma opera¸˜o de escrita na DATA EEPROM
                                       e                     ca
     ou ainda pelo watchdog.
     1 = depois de ter sido ligada a alimenta¸˜o
                                             ca
     0 = depois da execu¸˜o de uma instru¸˜o SLEEP
                         ca                ca
bit 4 TO Time-out transbordo do Watchdog. Este bit ´ posto a 1, depois de a alimenta¸˜o ser
                                                     e                              ca
     ligada e depois da execu¸˜o das instru¸˜es CLRWDT e SLEEP. O bit ´ posto a 0 quando
                             ca            co                          e


                                               23
o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica
     que qualquer coisa n˜o esteve bem.
                         a
     1 = n˜o ocorreu transbordo
          a
     0 = ocorreu transbordo
bits 5 e 6 RP1:RP0 (bits de sele¸˜o de banco de registros). Estes dois bits s˜o a parte mais
                                    ca                                         a
     significativa do endere¸o utilizado para endere¸amento direto. Como as instru¸˜es que en-
                           c                        c                              co
     dere¸am directamente a mem´ria, disp˜em somente de sete bits para este efeito, ´ preciso
         c                         o        o                                         e
     mais um bit para poder endere¸ar todos os 256 registros do PIC16F84. No caso do PIC16F84,
                                    c
     RP1, n˜o ´ usado, mas pode ser necess´rio no caso de outros microcontroladores PIC, de
            a e                              a
     maior capacidade.
     01 = banco de registros 1
     00 = banco de registros 0
bit 7 IRP (Bit de sele¸˜o de banco de registros). Este bit ´ utilizado no endere¸amento indireto
                      ca                                   e                    c
     da RAM interna, como oitavo bit.
     1 = bancos 2 e 3
     0 = bancos 0 e 1 (endere¸os de 00h a FFh)
                             c

2.9.2    Registro OPTION




                              Figura 2.17: Registrador OPTION.


bits 0 a 2 PS0, PS1, PS2 (bits de sele¸˜o do divisor Prescaler). Estes trˆs bits definem o factor
                                       ca                                e
     de divis˜o do prescaler. Aquilo que ´ o prescaler e o modo como o valor destes trˆs bits
             a                           e                                               e
     afectam o funcionamento do microcontrolador ser´ estudado na se¸˜o referente a TMR0.
                                                     a                ca




                                    Figura 2.18: Prescaler.

bit 3 PSA (Bit de Atribui¸˜o do Prescaler). Bit que atribui o prescaler ao TMR0 ou ao watchdog.
                           ca
     1 = prescaler atribu´ ao watchdog
                         ıdo
     0 = prescaler atribu´ ao temporizador TMR0
                         ıdo
bit 4 T0SE (bit de sele¸˜o de bordo actio em TMR0). Se for permitido aplicar impulsos em
                       ca
     TMR0, a partir do pino RA4/TOCK1, este bit determina se os impulsos activos s˜o os
                                                                                    a
     impulsos ascendentes ou os impulsos descendentes.
     1 = bordo descendente
     0 = bordo ascendente
bit 5 TOCS (bit de sele¸˜o de fonte de clock em TMR0). Este pino escolhe a fonte de impulsos
                         ca
     que vai ligar ao temporizador. Esta fonte pode ser o clock do microcontrolador (freq¨ˆncia
                                                                                         ue

                                              24
de clock a dividir por 4) ou impulsos externos no pino RA4/TOCKI.
     1 = impulsos externos
     0 = 1 do clock interno
          4

bit 6 INTEDG (bit de sele¸˜o de bordo de interrup¸˜o). Se esta interrup¸˜o estiver habilitada,
                           ca                      ca                  ca
     ´ poss´ definir o bordo que vai ativar a interrup¸˜o no pino RB0/INT.
     e     ıvel                                      ca
     1 = bordo ascendente
     0 = bordo descendente
bit 7 RBPU (Habilita¸˜o dos pull-up nos bits da porta B). Este bit introduz ou retira as re-
                        ca
     sistˆncias internas de pull-up da porta B.
         e
     1 = resistˆncias de pull-up desligadas
               e
     0 = resistˆncias de pull-up ligadas
               e


2.10      Portas de I/O
Porta, ´ um grupo de pinos num microcontrolador que podem ser acessados simultaneamente,
       e
e, no qual n´s podemos colocar uma combina¸˜o de zeros e uns ou ler dele o estado existente.
             o                                   ca
Fisicamente, porta ´ um registro dentro de um microcontrolador que est´ ligado por fios aos pinos
                    e                                                    a
do microcontrolador. Os portas representam a conex˜o f´
                                                      a ısica da Unidade Central de Processamento
(CPU) com o mundo exterior. O microcontrolador usa-os para observar ou comandar outros
componentes ou dispositivos. Para aumentar a sua funcionalidade, os mesmos pinos podem ter
duas aplica¸˜es distintas, como, por exemplo, RA4/TOCKI, que ´ simultaneamente o bit 4 da
            co                                                      e
porta A e uma entrada externa para o contador/temporizador TMR0. A escolha de uma destas
duas fun¸˜es ´ feita atrav´s dos registros de configura¸˜o. Um exemplo disto ´ o TOCS, quinto bit
         co e             e                            ca                    e
do registro OPTION. Ao selecionar uma das fun¸˜es, a outra ´ automaticamente inibida.
                                                   co           e




                   Figura 2.19: Rela¸˜o entre os registros TRISA e PORTA A.
                                    ca

    Todos os pinos das portas podem ser definidos como de entrada ou de sa´     ıda, de acordo com as
necessidades do dispositivo que se est´ a projetar. Para definir um pino como entrada ou como
                                        a
sa´
  ıda, ´ preciso, em primeiro lugar, escrever no registro TRIS, a combina¸˜o apropriada de zeros e
       e                                                                   ca
uns. Se no local apropriado de um registro TRIS for escrito o valor l´gico 1, ent˜o o correspondente
                                                                     o           a
pino da porta ´ definido como entrada, se suceder o contr´rio, o pino ´ definido como sa´
               e                                           a           e                  ıda. Todos
as portas, tˆm um registro TRIS associado. Assim, para a porta A, existe o registro TRISA no
            e
endere¸o 85h e, para a porta B existe o registro TRISB, no endere¸o 86h.
       c                                                             c

2.10.1     Porta A
A porta A (PORTA) est´ associado a 5 pinos. O registro de dire¸˜o de dados correspondente ´ o
                       a                                       ca                           e
TRISA, no endere¸o 85h. Tal como no caso da porta B, pˆr a 1 um bit do registro TRISA, equivale
                  c                                    o
a definir o correspondente pino da porta A, como entrada e pˆr a 0 um bit do mesmo registro,
                                                             o
equivale a definir o correspondente pino da porta A, como sa´
                                                           ıda.

                                                25
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic
Microcontroladores pic

Weitere ähnliche Inhalte

Was ist angesagt? (18)

H376985
H376985H376985
H376985
 
Calculo 2p
Calculo 2pCalculo 2p
Calculo 2p
 
Calculo numerico do professor eduardo colli.
Calculo numerico do professor  eduardo colli.Calculo numerico do professor  eduardo colli.
Calculo numerico do professor eduardo colli.
 
K19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaK19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-java
 
História da criptografia
História da criptografiaHistória da criptografia
História da criptografia
 
Apostila ruby-completa
Apostila ruby-completaApostila ruby-completa
Apostila ruby-completa
 
Vx 170 português
Vx 170 portuguêsVx 170 português
Vx 170 português
 
Manual geral zelio 2_pt.pdf
Manual geral zelio 2_pt.pdfManual geral zelio 2_pt.pdf
Manual geral zelio 2_pt.pdf
 
Corolab xq xf_manual pt-v3
Corolab xq xf_manual pt-v3Corolab xq xf_manual pt-v3
Corolab xq xf_manual pt-v3
 
Av
AvAv
Av
 
Engenharia Elétrica
Engenharia ElétricaEngenharia Elétrica
Engenharia Elétrica
 
Manual geral trocadores de calor a placas - bermo (1)
Manual geral   trocadores de calor a placas - bermo (1)Manual geral   trocadores de calor a placas - bermo (1)
Manual geral trocadores de calor a placas - bermo (1)
 
Manual call report_v2.0
Manual call report_v2.0Manual call report_v2.0
Manual call report_v2.0
 
Ft 2800 m português
Ft 2800 m portuguêsFt 2800 m português
Ft 2800 m português
 
Manual Mensis
Manual MensisManual Mensis
Manual Mensis
 
Medidor de vazão ultrassônico Mafetech ind MAFET 1012 SERIES
Medidor de vazão ultrassônico Mafetech ind MAFET 1012 SERIESMedidor de vazão ultrassônico Mafetech ind MAFET 1012 SERIES
Medidor de vazão ultrassônico Mafetech ind MAFET 1012 SERIES
 
Matematica fcul
Matematica fculMatematica fcul
Matematica fcul
 
Inversores ssw8 weg
Inversores ssw8   wegInversores ssw8   weg
Inversores ssw8 weg
 

Andere mochten auch

PayPal coverage report_sing tao daily
PayPal coverage report_sing tao dailyPayPal coverage report_sing tao daily
PayPal coverage report_sing tao daily
PayPalHK
 
Banalização da Corrupção no mensalão tucano
Banalização  da Corrupção no mensalão tucanoBanalização  da Corrupção no mensalão tucano
Banalização da Corrupção no mensalão tucano
Marcelo Bancalero
 
Apresentação 1
Apresentação 1Apresentação 1
Apresentação 1
Emar
 
Manuel vilares entrevista
Manuel vilares entrevistaManuel vilares entrevista
Manuel vilares entrevista
Carlos Serra
 
Deus vai marcar um encontro contigo num lugar
Deus vai marcar um encontro contigo num lugarDeus vai marcar um encontro contigo num lugar
Deus vai marcar um encontro contigo num lugar
Tabernaculo amor e vida
 
J A R D I N E S D E L C O R T I J U E L O Q U E R Q U S C A T E R I N G
J A R D I N E S  D E L  C O R T I J U E L O  Q U E R Q U S  C A T E R I N GJ A R D I N E S  D E L  C O R T I J U E L O  Q U E R Q U S  C A T E R I N G
J A R D I N E S D E L C O R T I J U E L O Q U E R Q U S C A T E R I N G
Jannette
 

Andere mochten auch (20)

PayPal coverage report_sing tao daily
PayPal coverage report_sing tao dailyPayPal coverage report_sing tao daily
PayPal coverage report_sing tao daily
 
Apresentação Sobre Vídeos
Apresentação Sobre VídeosApresentação Sobre Vídeos
Apresentação Sobre Vídeos
 
Artigo2
Artigo2Artigo2
Artigo2
 
Ap 87 vol 3
Ap 87 vol 3Ap 87 vol 3
Ap 87 vol 3
 
Protocolos de red
Protocolos de redProtocolos de red
Protocolos de red
 
Folclore p
Folclore pFolclore p
Folclore p
 
Banalização da Corrupção no mensalão tucano
Banalização  da Corrupção no mensalão tucanoBanalização  da Corrupção no mensalão tucano
Banalização da Corrupção no mensalão tucano
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Datos agrupados
Datos agrupadosDatos agrupados
Datos agrupados
 
IM Performance & Resultados
IM Performance & ResultadosIM Performance & Resultados
IM Performance & Resultados
 
Apresentação 1
Apresentação 1Apresentação 1
Apresentação 1
 
Manuel vilares entrevista
Manuel vilares entrevistaManuel vilares entrevista
Manuel vilares entrevista
 
fuentes de financiamiento
fuentes de financiamientofuentes de financiamiento
fuentes de financiamiento
 
Centro reha
Centro rehaCentro reha
Centro reha
 
Sexta fei
Sexta feiSexta fei
Sexta fei
 
Estadística. datos no agrupados en excel
Estadística. datos no agrupados en excelEstadística. datos no agrupados en excel
Estadística. datos no agrupados en excel
 
Presentación1 En equipo
Presentación1 En equipoPresentación1 En equipo
Presentación1 En equipo
 
Deus vai marcar um encontro contigo num lugar
Deus vai marcar um encontro contigo num lugarDeus vai marcar um encontro contigo num lugar
Deus vai marcar um encontro contigo num lugar
 
J A R D I N E S D E L C O R T I J U E L O Q U E R Q U S C A T E R I N G
J A R D I N E S  D E L  C O R T I J U E L O  Q U E R Q U S  C A T E R I N GJ A R D I N E S  D E L  C O R T I J U E L O  Q U E R Q U S  C A T E R I N G
J A R D I N E S D E L C O R T I J U E L O Q U E R Q U S C A T E R I N G
 
Español caso 3
Español caso 3Español caso 3
Español caso 3
 

Ähnlich wie Microcontroladores pic

Apostila de PIC
Apostila de PICApostila de PIC
Apostila de PIC
luizgraf
 
Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)
Edaplo
 
Ap apostila arduino-rev4
Ap   apostila arduino-rev4Ap   apostila arduino-rev4
Ap apostila arduino-rev4
ariferreira3
 
Weg rele-programavel-clic-02-3rd-manual-portugues-br
Weg rele-programavel-clic-02-3rd-manual-portugues-brWeg rele-programavel-clic-02-3rd-manual-portugues-br
Weg rele-programavel-clic-02-3rd-manual-portugues-br
Daniel Dourado
 
Aula 3 com propostas
Aula 3 com propostasAula 3 com propostas
Aula 3 com propostas
nehos
 
Apostila de Robotica
Apostila de RoboticaApostila de Robotica
Apostila de Robotica
Isvaldo Souza
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movel
Ribeiro Baieta
 

Ähnlich wie Microcontroladores pic (20)

Apostila de PIC
Apostila de PICApostila de PIC
Apostila de PIC
 
Manual call report_v2.0
Manual call report_v2.0Manual call report_v2.0
Manual call report_v2.0
 
Eletronica 1
Eletronica 1Eletronica 1
Eletronica 1
 
Manual Placa Base ICIP 30 Intelbras - LojaTotalseg.com.br
Manual Placa Base ICIP 30 Intelbras - LojaTotalseg.com.brManual Placa Base ICIP 30 Intelbras - LojaTotalseg.com.br
Manual Placa Base ICIP 30 Intelbras - LojaTotalseg.com.br
 
Curso C
Curso CCurso C
Curso C
 
Shell script
Shell scriptShell script
Shell script
 
Guiao aluno pic
Guiao aluno picGuiao aluno pic
Guiao aluno pic
 
Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)
 
Ap apostila arduino-rev4
Ap   apostila arduino-rev4Ap   apostila arduino-rev4
Ap apostila arduino-rev4
 
Weg rele-programavel-clic-02-3rd-manual-portugues-br
Weg rele-programavel-clic-02-3rd-manual-portugues-brWeg rele-programavel-clic-02-3rd-manual-portugues-br
Weg rele-programavel-clic-02-3rd-manual-portugues-br
 
Cfw 08 u line
Cfw 08 u lineCfw 08 u line
Cfw 08 u line
 
Controle
ControleControle
Controle
 
Ebook controle classico
Ebook controle classicoEbook controle classico
Ebook controle classico
 
Cherokee 3.1 2000 grand p wjvm
Cherokee 3.1  2000 grand  p wjvmCherokee 3.1  2000 grand  p wjvm
Cherokee 3.1 2000 grand p wjvm
 
Apostila de computação gráfica (2006)
Apostila de computação gráfica (2006)Apostila de computação gráfica (2006)
Apostila de computação gráfica (2006)
 
Manualdeusu cariocentralconectaportugucos
Manualdeusu cariocentralconectaportugucosManualdeusu cariocentralconectaportugucos
Manualdeusu cariocentralconectaportugucos
 
Aula 3 com propostas
Aula 3 com propostasAula 3 com propostas
Aula 3 com propostas
 
Apostila de Robotica
Apostila de RoboticaApostila de Robotica
Apostila de Robotica
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movel
 
Manual de operação irc5 com flex pendant - pt - 3hac16590-6-revn_pt
Manual de operação   irc5 com flex pendant - pt - 3hac16590-6-revn_ptManual de operação   irc5 com flex pendant - pt - 3hac16590-6-revn_pt
Manual de operação irc5 com flex pendant - pt - 3hac16590-6-revn_pt
 

Microcontroladores pic

  • 1. UEL - DEEL - LONDRINA - PR Introdu¸˜o aos Microcontroladores da Fam´ ca ılia PIC Leonimer Fl´vio de Melo a 02/2008 1
  • 2. Sum´rio a 1 Introdu¸˜o aos Microcontroladores ca 4 1.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . 4 1.2 Hist´ria . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 4 1.3 Microcontroladores versus Microprocessadores . . . . . . . . . . . . . . . . . . . . . 5 1.4 Microcontroladores da fam´ PIC . . . . . . ılia . . . . . . . . . . . . . . . . . . . . . 5 1.4.1 Unidade de Mem´ria . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 6 1.4.2 Unidade Central de Processamento . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.3 Barramentos - Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.4 Unidade de entrada/sa´ (I/O) . . . ıda . . . . . . . . . . . . . . . . . . . . . 7 1.4.5 Comunica¸˜o s´rie . . . . . . . . . . . ca e . . . . . . . . . . . . . . . . . . . . . 7 1.4.6 Unidade de temporiza¸˜o . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . 8 1.4.7 Watchdog timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4.8 Conversor anal´gico-digital (A/D) . . o . . . . . . . . . . . . . . . . . . . . . 9 1.4.9 O microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 O Microcontrolador PIC16F84 13 2.1 Componentes b´sicos do PIC . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . 13 2.2 CISC x RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3 Aplica¸˜es . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . 14 2.4 Rel´gio / ciclo de instru¸˜o . . . . . . . . . . o ca . . . . . . . . . . . . . . . . . . . . . 15 2.4.1 Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4.2 Fluxograma das Instru¸˜es no Pipeline co . . . . . . . . . . . . . . . . . . . . . 16 2.5 Significado dos pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.6 Gerador de rel´gio – oscilador . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 17 2.6.1 Tipos de osciladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.6.2 Oscilador XT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.6.3 Oscilador RC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.7 Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.7.1 Brown-out Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.8 Unidade Central de Processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.8.1 Unidade L´gica Aritm´tica (ALU) . . o e . . . . . . . . . . . . . . . . . . . . . 21 2.9 Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.9.1 Registro STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.9.2 Registro OPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.10 Portas de I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.10.1 Porta A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.10.2 Porta B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.11 Organiza¸˜o da mem´ria . . . . . . . . . . . . ca o . . . . . . . . . . . . . . . . . . . . . 26 2.11.1 Mem´ria de programa . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 27 2.11.2 Mem´ria de dados . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 27 2.11.3 Registros SFR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.11.4 Bancos de Mem´ria . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 27 2.11.5 Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.11.6 Contador de Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2
  • 3. 2.11.7 Pilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.11.8 Programa¸˜o no Sistema . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . 29 2.11.9 Modos de endere¸amento . . . . . . . . . . . . . . . . . . . c . . . . . . . . . 29 2.12 Interrup¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . 31 2.12.1 Registro INTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.12.2 Fontes de interrup¸˜o . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . 32 2.12.3 Guardando os conte´dos dos registros importantes . . . . . u . . . . . . . . . 33 2.12.4 Interrup¸˜o externa no pino RB0/INT do microcontrolador ca . . . . . . . . . 34 2.12.5 Interrup¸˜o por transbordar (overflow ) o contador TMR0 . ca . . . . . . . . . 34 2.12.6 Interrup¸˜o por varia¸ao nos pinos 4, 5, 6 e 7 da porta B . ca c˜ . . . . . . . . . 36 2.12.7 Interrup¸˜o por fim de escrita na EEPROM . . . . . . . . . ca . . . . . . . . . 36 2.12.8 Inicializa¸˜o da interrup¸˜o . . . . . . . . . . . . . . . . . . ca ca . . . . . . . . . 36 2.13 Temporizador TMR0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.14 Mem´ria de dados EEPROM . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . 41 2.14.1 Registro EECON1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.14.2 Lendo a Mem´ria EEPROM . . . . . . . . . . . . . . . . . o . . . . . . . . . 42 2.14.3 Escrevendo na Mem´ria EEPROM . . . . . . . . . . . . . . o . . . . . . . . . 42 3 Conjunto de Instru¸˜es co 44 3.1 Conjunto de Instru¸˜es da Fam´ PIC16Fxxx de co ılia Microcontroladores . . . . . . . 44 3.2 Transferˆncia de dados . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . 44 3.3 L´gicas e aritm´ticas . . . . . . . . . . . . . . . . o e . . . . . . . . . . . . . . . . . . . 44 3.4 Opera¸˜es sobre bits . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . 45 3.5 Dire¸˜o de execu¸˜o de um programa . . . . . . . ca ca . . . . . . . . . . . . . . . . . . . 45 3.6 Per´ ıodo de execu¸˜o da instru¸˜o . . . . . . . . . ca ca . . . . . . . . . . . . . . . . . . . 45 3.7 Conjunto de instru¸˜es . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . 46 4 Programa¸˜o em Linguagem Assembly ca 48 4.1 Linguagem Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.1.1 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.1.2 Instru¸˜es . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . 49 4.1.3 Operandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.4 Coment´rios . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . 50 4.1.5 Diretivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.6 Exemplo de um programa em assembly . . . . . . . . . . . . . . . . . . . . 50 4.2 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3
  • 4. Cap´ ıtulo 1 Introdu¸˜o aos Microcontroladores ca 1.1 Introdu¸˜o ca As circunstˆncias que se nos deparam hoje no campo dos microcontroladores tˆm os seus prim´rdios a e o no desenvolvimento da tecnologia dos circuitos integrados. Este desenvolvimento tornou poss´ ıvel armazenar centenas de milhares de transistores num unico chip. Isso constituiu um pr´-requisito ´ e para a produ¸˜o de microprocessadores e, os primeiros computadores foram constru´ ca ıdos adicio- nando perif´ricos externos tais como mem´ria, linhas de entrada e sa´ e o ıda, temporizadores e outros. Um crescente aumento do n´ ıvel de integra¸˜o, permitiu o aparecimento de circuitos integrados ca contendo simultaneamente processador e perif´ricos. Foi assim que o primeiro chip contendo um e microcomputador e que mais tarde haveria de ser designado por microcontrolador, apareceu. 1.2 Hist´ria o ´ E no ano de 1969 que uma equipa de engenheiros japoneses pertencentes ` companhia BUSICOM a chega aos Estados Unidos com a encomenda de alguns circuitos integrados para calculadoras a serem implementados segundo os seus projetos. A proposta foi entregue ` INTEL e Marcian Hoff a foi o respons´vel pela sua concretiza¸˜o. Como ele tinha tido experiˆncia de trabalho com um a ca e computador (PC) PDP8, lembrou-se de apresentar uma solu¸˜o substancialmente diferente em ca vez da constru¸˜o sugerida. Esta solu¸˜o pressupunha que a fun¸˜o do circuito integrado seria ca ca ca determinada por um programa nele armazenado. Isso significava que a configura¸˜o deveria ser ca mais simples, mas tamb´m era preciso muito mais mem´ria que no caso do projeto proposto pelos e o engenheiros japoneses. Depois de algum tempo, embora os engenheiros japoneses tenham tentado encontrar uma solu¸˜o mais f´cil, a id´ia de Marcian venceu e o primeiro microprocessador nasceu. ca a e Ao transformar esta id´ia num produto concreto, Frederico Faggin foi de uma grande utilidade e para a INTEL. Ele transferiu-se para a INTEL e, em somente 9 meses, teve sucesso na cria¸˜o de ca um produto real a partir da sua primeira concep¸˜o. Em 1971, a INTEL adquiriu os direitos sobre ca a venda deste bloco integral. Primeiro eles compraram a licen¸a ` companhia BUSICOM que n˜o c a a tinha a m´ ınima percep¸˜o do tesouro que possu´ Neste mesmo ano, apareceu no mercado um ca ıa. microprocessador designado por 4004. Este foi o primeiro microprocessador de 4 bits e tinha a velocidade de 6 000 opera¸˜es por segundo. N˜o muito tempo depois, a companhia Americana co a CTC pediu ` INTEL e ` Texas Instruments um microprocessador de 8 bits para usar em terminais. a a Mesmo apesar de a CTC acabar por desistir desta id´ia, tanto a Intel como a Texas Instruments e continuaram a trabalhar no microprocessador e, em Abril de 1972, os primeiros microprocessadores de 8 bits apareceram no mercado com o nome de 8008. Este podia endere¸ar 16KB de mem´ria, c o possu´ 45 instru¸˜es e tinha a velocidade de 300 000 opera¸˜es por segundo. Esse microprocessador ıa co co foi o pioneiro de todos os microprocessadores atuais. A Intel continuou com o desenvolvimento do produto e, em Abril de 1974 pˆs c´ fora um processador de 8 bits com o nome de 8080 com a o a capacidade de endere¸ar 64KB de mem´ria, com 75 instru¸˜es e com pre¸os a come¸arem em $360. c o co c c Uma outra companhia Americana, a Motorola, apercebeu-se rapidamente do que estava a acontecer e, assim, pˆs no mercado um novo microprocessador de 8 bits, o 6800. O construtor o chefe foi Chuck Peddle e al´m do microprocessador propriamente dito, a Motorola foi a primeira e 4
  • 5. companhia a fabricar outros perif´ricos como os 6820 e 6850. Nesta altura, muitas companhias e j´ se tinham apercebido da enorme importˆncia dos microprocessadores e come¸aram a introduzir a a c os seus pr´prios desenvolvimentos. Chuck Peddle deixa a Motorola para entrar para a MOS o Technology e continua a trabalhar intensivamente no desenvolvimento dos microprocessadores. Em 1975, na exposi¸˜o WESCON nos Estados Unidos, ocorreu um acontecimento cr´ ca ıtico na hist´ria dos microprocessadores. A MOS Technology anunciou que ia pˆr no mercado micropro- o o cessadores 6501 e 6502 ao pre¸o de $25 cada e que podia satisfazer de imediato todas as en- c comendas. Isto pareceu t˜o sensacional que muitos pensaram tratar-se de uma esp´cie de vigarice, a e considerando que os competidores vendiam o 8080 e o 6800 a $179 cada. Para responder a este competidor, tanto a Intel como a Motorola baixaram os seus pre¸os por microprocessador para c $69,95 logo no primeiro dia da exposi¸˜o. Rapidamente a Motorola pˆs uma a¸˜o em tribunal ca o ca contra a MOS Technology e contra Chuck Peddle por viola¸˜o dos direitos de autor por copiarem ca ao copiarem o 6800. A MOS Technology deixou de fabricar o 6501, mas continuou com o 6502. O 6502 ´ um microprocessador de 8 bits com 56 instru¸˜es e uma capacidade de endere¸amento de e co c 64KB de mem´ria. Devido ao seu baixo custo, o 6502 torna-se muito popular e, assim, ´ instalado o e em computadores como KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra e muitos outros. Cedo aparecem v´rios fabricantes do 6502 (Rockwell, Sznertek, GTE, NCR, a Ricoh e Comodore adquiriram a MOS Technology) que, no auge da sua prosperidade, chegou a vender microprocessadores ` raz˜o de 15 milh˜es por ano ! a a o Contudo, os outros n˜o baixaram os bra¸os. Frederico Faggin deixa a Intel e funda a Zilog Inc. a c Em 1976, a Zilog anuncia o Z80. Durante a concep¸˜o deste microprocessador, Faggin toma uma ca decis˜o cr´ a ıtica. Sabendo que tinha sido j´ desenvolvida uma enorme quantidade de programas a para o 8080, Faggin conclui que muitos v˜o permanecer fieis a este microprocessador por causa a das grandes despesas que adviriam das altera¸˜es a todos estes programas. Assim, ele decide que co o novo microprocessador deve ser compat´ ıvel com o 8080, ou seja, deve ser capaz de executar todos os programas que j´ tenham sido escritos para o 8080. Al´m destas caracter´ a e ısticas, outras caracter´ısticas adicionais foram introduzidas, de tal modo que o Z80 se tornou um microprocessador muito potente no seu tempo. Ele podia endere¸ar directamente 64KB de mem´ria, tinha 176 c o instru¸oes, um grande n´mero de registros, uma op¸˜o para refreshing de mem´ria RAM dinˆmica, c˜ u ca o a uma unica alimenta¸˜o, maior velocidade de funcionamento, etc. O Z80 tornou-se um grande ´ ca sucesso e toda a gente se transferiu do 8080 para o Z80. Pode dizer-se que o Z80 se constituiu sem sombra de d´vida como o microprocessador de 8 bits com maior sucesso no seu tempo. Al´m u e da Zilog, outros novos fabricantes como Mostek, NEC, SHARP e SGS apareceram. O Z80 foi o cora¸ao de muitos computadores como o Spectrum, Partner, TRS703, Z-3 e Galaxy, que foram c˜ aqui usados. Em 1976, a Intel apareceu com uma vers˜o melhorada do microprocessador de 8 bits e designada a por 8085. Contudo, o Z80 era t˜o superior a este que, bem depressa, a Intel perdeu a batalha. Ainda a que mais alguns microprocessadores tenham aparecido no mercado (6809, 2650, SC/MP etc.), j´ a tudo estava ent˜o decidido. J´ n˜o havia mais grandes melhorias a introduzir pelos fabricantes a a a que fundamentassem a troca por um novo microprocessador, assim, o 6502 e o Z80, acompanhados pelo 6800, mantiveram-se como os mais representativos microprocessadores de 8 bits desse tempo. 1.3 Microcontroladores versus Microprocessadores Um microcontrolador difere de um microprocessador em v´rios aspectos. Primeiro e o mais impor- a tante, ´ a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes e devem-lhe ser adicionados, tais como mem´ria e componentes para receber e enviar dados. Em o resumo, isso significa que o microprocessador ´ o verdadeiro cora¸˜o do computador. Por outro e ca lado, o microcontrolador foi projetado para ter tudo num s´. Nenhuns outros componentes exter- o nos s˜o necess´rios nas aplica¸˜es, uma vez que todos os perif´ricos necess´rios j´ est˜o contidos a a co e a a a nele. Assim, n´s poupamos tempo e espa¸o na constru¸˜o dos dispositivos. o c ca 1.4 Microcontroladores da fam´ PIC ılia A seguir s˜o apresentas algumas das caracter´ a ısticas mais importantes a respeito da arquitetura dos microcontroladores PIC da Microchip. 5
  • 6. 1.4.1 Unidade de Mem´ria o A mem´ria ´ a parte do microcontrolador cuja fun¸˜o ´ guardar dados. A maneira mais f´cil de o e ca e a explicar ´ descrevˆ-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos e e as gavetas de modo a elas n˜o se confundirem umas com as outras, ent˜o o seu conte´do ser´ a a u a facilmente acess´ıvel. Basta saber a designa¸˜o da gaveta e o seu conte´do ser´ conhecido. ca u a Figura 1.1: Exemplo de unidade de mem´ria. o Os componentes de mem´ria s˜o exatamente a mesma coisa. Para um determinado endere¸o, o a c n´s obtemos o conte´do desse endere¸o. Dois novos conceitos foram apresentados: endere¸amento o u c c e mem´ria. A mem´ria ´ o conjunto de todos os locais de mem´ria (gavetas) e endere¸amento nada o o e o c mais ´ que selecionar um deles. Isto significa que precisamos de selecionar o endere¸o desejado e c (gaveta) e esperar que o conte´do desse endere¸o nos seja apresentado (abrir a gaveta). Al´m de ler u c e de um local da mem´ria (ler o conte´do da gaveta), tamb´m ´ poss´ escrever num endere¸o da o u e e ıvel c mem´ria (introduzir um conte´do na gaveta). Isto ´ feito utilizando uma linha adicional chamada o u e linha de controle. N´s iremos designar esta linha por R/W (read/write) - ler/escrever. A linha de o controle ´ usada do seguinte modo: se r/w=1, ´ executada uma opera¸˜o de leitura, caso contr´rio e e ca a ´ executada uma opera¸˜o de escrita no endere¸o de mem´ria. e ca c o A mem´ria ´ o primeiro elemento, mas precisamos de mais alguns para que o nosso microcon- o e trolador possa trabalhar. 1.4.2 Unidade Central de Processamento Vamos agora adicionar mais 3 locais de mem´ria a um bloco espec´ o ıfico para que possamos ter as capacidades de multiplicar, dividir, subtrair e mover o seus conte´dos de um local de mem´ria u o para outro. A parte que vamos acrescentar ´ chamada “central processing unit” (CPU) ou Unidade e Central de Processamento. Os locais de mem´ria nela contidos chamam-se registros. o Figura 1.2: Unidade Central de Processamento. 6
  • 7. Os registros s˜o, portanto, locais de mem´ria cujo papel ´ ajudar a executar v´rias opera¸˜es a o e a co matem´ticas ou quaisquer outras opera¸˜es com dados, quaisquer que sejam os locais em que estes a co se encontrem. Vamos olhar para a situa¸˜o actual. N´s temos duas entidades independentes (mem´ria e CPU) ca o o que est˜o interligadas, deste modo, qualquer troca de dados ´ retardada bem como a funcionalidade a e do sistema ´ diminu´ e ıda. Se, por exemplo, n´s desejarmos adicionar os conte´dos de dois locais o u de mem´ria e tornar a guardar o resultado na mem´ria, n´s necessitamos de uma liga¸˜o entre o o o ca a mem´ria e o CPU. Dito mais simplesmente, n´s precisamos de obter um ”caminho”atrav´s do o o e qual os dados possam passar de um bloco para outro. 1.4.3 Barramentos - Bus Este “caminho” designa-se por barramento (bus). Fisicamente ele corresponde a um grupo de 8, 16 ou mais fios. Existem dois tipos de bus: bus de dados e de endere¸o. O n´mero de linhas do primeiro c u depende da quantidade de mem´ria que desejamos endere¸ar e o n´mero de linhas do outro de- o c u pende da largura da palavra de dados, no nosso caso ´ igual a oito. O primeiro bus serve para e transmitir endere¸os do CPU para a mem´ria e o segundo para ligar todos os blocos dentro do c o microcontrolador. Figura 1.3: Barramentos do microcontrolador. Neste momento, a funcionalidade j´ aumentou mas um novo problema apareceu: n´s temos uma a o unidade capaz de trabalhar sozinha, mas que n˜o possui nenhum contato com o mundo exterior, a ou seja, conosco! De modo a remover esta deficiˆncia, vamos adicionar um bloco que cont´m v´rias e e a localiza¸˜es de mem´ria e que, de um lado, est´ ligado ao bus de dados e do outro `s linhas de sa´ co o a a ıda do microcontrolador que coincidem com pinos do circuito integrado e que, portanto, n´s podemos o ver com os nossos pr´prios olhos. o 1.4.4 Unidade de entrada/sa´ (I/O) ıda Estas localiza¸˜es que acabamos de adicionar, chamam-se portas. Existem v´rios tipos de portas: co a de entrada, de sa´ e de entrada/sa´ ıda ıda. Quando trabalhamos com portas primeiro de tudo ´ e necess´rio escolher a porta com que queremos trabalhar e, em seguida, enviar ou receber dados a para ou dessa porta. Quando se est´ a trabalhar com ele, a porta funciona como um local de mem´ria. Qualquer a o coisa de que se est´ a ler ou em que se est´ a escrever e que ´ poss´ identificar facilmente nos a a e ıvel pinos do microcontrolador. 1.4.5 Comunica¸˜o s´rie ca e Anteriormente, acrescentamos ` unidade j´ existente a possibilidade de comunicar com o mundo a a exterior. Contudo, esta maneira de comunicar tem os seus inconvenientes. Um dos inconve- 7
  • 8. Figura 1.4: Porta de entrada/sa´ de dados. ıda nientes b´sicos ´ o n´mero de linhas que ´ necess´rio usarmos para transferir dados. E se for a e u e a necess´rio transferi-los a uma distˆncia de v´rios quilˆmetros? O n´mero de linhas vezes o n´mero a a a o u u de quilˆmetros n˜o atesta a economia do projeto. Isto leva-nos a ter que reduzir o n´mero de linhas o a u de modo a que a funcionalidade se mantenha. Suponha que estamos a trabalhar apenas com trˆs e linhas e que uma linha ´ usada para enviar dados, outra para os receber e a terceira ´ usada como e e linha de referˆncia tanto do lado de entrada como do lado da sa´ e ıda. Para que isto trabalhe n´s pre- o cisamos de definir as regras para a troca de dados. A este conjunto de regras chama-se protocolo. Este protocolo deve ser definido com antecedˆncia de modo que n˜o haja mal entendidos entre as e a partes que est˜o a comunicar entre si. Por exemplo, se um homem est´ a falar em francˆs e o outro a a e em inglˆs, ´ altamente improv´vel que efetivamente e rapidamente, ambos se entendam. Vamos e e a supor que temos o seguinte protocolo. A unidade l´gica ”1”´ colocada na linha de transmiss˜o at´ o e a e que a transferˆncia se inicie. Assim que isto acontece, a linha passa para n´ l´gico ’0’ durante e ıvel o um certo per´ ıodo de tempo (que vamos designar por T), assim, do lado da recep¸˜o ficamos a saber ca que existem dados para receber e, o mecanismo de recep¸˜o, vai ativar-se. Regressemos agora ao ca lado da emiss˜o e comecemos a pˆr zeros e uns l´gicos na linha de transmiss˜o correspondentes a o o a aos bits, primeiro o menos significativo e finalmente o mais significativo. Vamos esperar que cada bit permane¸a na linha durante um per´ c ıodo de tempo igual a T, e, finalmente, depois do oitavo bit, vamos pˆr novamente na linha o n´ l´gico ”1”, o que assinala a transmiss˜o de um dado. O o ıvel o a protocolo que acabamos de descrever ´ designado na literatura profissional por NRZ (N˜o Retorno e a a Zero). Figura 1.5: Comunica¸˜o serial. ca 1.4.6 Unidade de temporiza¸˜o ca Agora que j´ temos a unidade de comunica¸˜o s´rie implementada, n´s podemos receber, enviar e a ca e o processar dados. Contudo, para sermos capazes de utilizar isto na ind´stria precisamos ainda de mais alguns u blocos. Um deles ´ o bloco de temporiza¸˜o que nos interessa bastante porque pode dar-nos e ca informa¸˜es acerca da hora, dura¸˜o, protocolo, etc. A unidade b´sica do temporizador ´ um co ca a e contador que ´ na realidade um registro cujo conte´do aumenta de uma unidade num intervalo e u de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando 8
  • 9. Figura 1.6: Temporizador (timer ). a sua diferen¸a, n´s ficamos a saber a quantidade de tempo decorrida. Esta ´ uma parte muito c o e importante do microcontrolador, cujo dom´ınio vai requerer muita da nossa aten¸˜o. ca 1.4.7 Watchdog timer Uma outra coisa que nos vai interessar ´ a fluˆncia da execu¸˜o do programa pelo microcontro- e e ca lador durante a sua utiliza¸˜o. Suponha que como resultado de qualquer interferˆncia (que ocorre ca e freq¨entemente num ambiente industrial), o nosso microcontrolador para de executar o programa u ou, ainda pior, desata a trabalhar incoerentemente. Figura 1.7: Watchdog timer. Claro que, quando isto acontece com um computador, n´s simplesmente carregamos no bot˜o o a de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador n´s n˜o podemos o a resolver o nosso problema deste modo, porque n˜o temos bot˜o. Para ultrapassar este obst´culo, a a a precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (c˜o de guarda). Este a bloco ´ de facto outro contador que est´ continuamente a contar e que o nosso programa p˜e a zero e a o sempre que ´ executado corretamente. No caso de o programa encravar, o zero n˜o vai ser escrito e a e o contador, por si s´, encarregar-se-´ de fazer o reset do microcontrolador quando alcan¸ar o seu o a c valor m´ximo. Isto vai fazer com que o programa corra de novo e desta vez corretamente. Este ´ a e um elemento importante para que qualquer programa se execute confiavelmente, sem precisar da interven¸˜o do ser humano. ca 1.4.8 Conversor anal´gico-digital (A/D) o Como os sinais dos perif´ricos s˜o substancialmente diferentes daqueles que o microcontrolador e a pode entender (zero e um), eles devem ser convertidos num formato que possa ser compreendido pelo microcontrolador. Esta tarefa ´ executada por interm´dio de um bloco destinado ` convers˜o e e a a anal´gica-digital ou com um conversor A/D. Este bloco vai ser respons´vel pela convers˜o de uma o a a informa¸˜o de valor anal´gico para um n´mero bin´rio e pelo seu trajeto atrav´s do bloco do CPU, ca o u a e de modo a que este o possa processar de imediato. Figura 1.8: Conversor anal´gico-digital (A/D). o 9
  • 10. 1.4.9 O microcontrolador Neste momento, a configura¸˜o do microcontrolador est´ j´ terminada, tudo o que falta ´ introduzi- ca a a e la dentro de um aparelho eletrˆnico que poder´ acessar aos blocos internos atrav´s dos pinos deste o a e componente. A Figura 1.9 ilustra o aspecto interno de um microcontrolador. Figura 1.9: Configura¸˜o f´ ca ısica do interior de um microcontrolador. As linhas mais finas que partem do centro em dire¸˜o ` periferia do microcontrolador corre- ca a spondem aos fios que interligam os blocos interiores aos pinos do inv´lucro do microcontrolador. o A Figura 1.10 representa a parte principal de um microcontrolador. Numa aplica¸˜o real, um microcontrolador, por si s´, n˜o ´ suficiente. Al´m dele, n´s necessi- ca o a e e o tamos do programa que vai ser executado e de mais alguns elementos que constituir˜o um interface a l´gico para outros elementos. o 1.5 Programa Escrever um programa ´ uma parte especial do trabalho com microcontroladores e ´ designado por e e programa¸~o . Vamos tentar escrever um pequeno programa numa linguagem que seremos n´s a ca o criar e que toda a gente ser´ capaz de compreender. a INICIO REGISTRO1=LOCAL_DE_ MEMORIA_A REGISTRO2=LOCAL_DE_ MEMORIA_B PORTO_A=REGISTRO1+REGISTRO2 FIM O programa adiciona os conte´dos de dois locais de mem´ria e coloca a soma destes conte´dos na u o u porta A. A primeira linha do programa manda mover o conte´do do local de mem´ria ”A”para um u o dos registros da unidade central de processamento. Como necessitamos tamb´m de outra parcela, e vamos colocar o outro conte´do noutro registro da unidade central de processamento (CPU). A u instru¸ao seguinte pede ao CPU para adicionar os conte´dos dos dois registros e enviar o resultado c˜ u obtido para a porta A, de modo a que o resultado desta adi¸˜o seja vis´ para o mundo exterior. ca ıvel Para um problema mais complexo, naturalmente o programa que o resolve ser´ maior. a A tarefa de programa¸˜o pode ser executada em v´rias linguagens tais como o Assembler, C ca a e Basic que s˜o as linguagens normalmente mais usadas. O Assembler pertence ao grupo das a linguagens de baixo n´ ıvel que implicam um trabalho de programa¸˜o lento, mas que oferece os ca melhores resultados quando se pretende poupar espa¸o de mem´ria e aumentar a velocidade de c o execu¸˜o do programa. Como se trata da linguagem mais freq¨entemente usada na programa¸˜o de ca u ca microcontroladores, ela ser´ discutida num cap´ a ıtulo mais adiantado. Os programas na linguagem C s˜o mais f´ceis de se escrever e compreender, mas, tamb´m, s˜o mais lentos a serem executados a a e a que os programas assembler. Basic ´ a mais f´cil de todas para se aprender e as suas instru¸˜es e a co 10
  • 11. Figura 1.10: Arquitetura do microcontrolador. 11
  • 12. s˜o semelhantes ` maneira de um ser humano se exprimir, mas tal como a linguagem C, ´ tamb´m a a e e de execu¸˜o mais lenta que o assembler. Em qualquer caso, antes que escolha entre uma destas ca linguagens, precisa de examinar cuidadosamente os requisitos de velocidade de execu¸˜o, de espa¸o ca c de mem´ria a ocupar e o tempo que vai demorar a fazer o programa em assembly. o Depois de o programa estar escrito, n´s necessitamos de introduzir o microcontrolador num o dispositivo e po-lo para trabalhar. Para que isto aconte¸a, n´s precisamos de adicionar mais alguns c o componentes externos. Primeiro temos que dar vida ao microcontrolador fornecendo-lhe a tens˜o a (a tens˜o el´trica ´ necess´ria para que qualquer instrumento eletrˆnico funcione) e o oscilador cujo a e e a o papel ´ an´logo ao do cora¸˜o que bate no ser humano. A execu¸˜o das instru¸˜es do programa e a ca ca co ´ regulada pelas pulsa¸˜es do oscilador. Logo que lhe ´ aplicada a tens˜o, o microcontrolador e co e a executa uma verifica¸˜o dele pr´prio, vai para o princ´ ca o ıpio do programa e come¸a a execut´-lo. O c a modo como o dispositivo vai trabalhar depende de muitos parˆmetros, os mais importantes dos a quais s˜o a competˆncia da pessoa que desenvolve o hardware e do programador que, com o seu a e programa, deve tirar o m´ximo do dispositivo. a 12
  • 13. Cap´ ıtulo 2 O Microcontrolador PIC16F84 O PIC 16F84 pertence a uma classe de microcontroladores de 8 bits, com uma arquitetura RISC . A estrutura gen´rica ´ a do mapa que se segue, que nos mostra os seus blocos b´sicos. e e a 2.1 Componentes b´sicos do PIC a Mem´ria de programa (FLASH) - para armazenar o programa que se escreveu. Como a o mem´ria fabricada com tecnologia FLASH pode ser programa e limpa mais que uma vez. ela o torna-se adequada para o desenvolvimento de dispositivos. EEPROM - mem´ria dos dados que necessitam de ser salvaguardados quando a alimenta¸˜o ´ o ca e desligada. Normalmente ´ usada para guardar dados importantes que n˜o se podem perder quando e a a alimenta¸˜o, de repente, “vai abaixo”. Um exemplo deste tipo de dados ´ a temperatura fixada ca e para os reguladores de temperatura. Se, durante uma quebra de alimenta¸˜o, se perdessem dados, ca n´s precisar´ o ıamos de proceder a um novo ajustamento quando a alimenta¸˜o fosse restabelecida. ca Assim, o nosso dispositivo, perderia efic´cia. a RAM - mem´ria de dados usada por um programa, durante a sua execu¸˜o. Na RAM, s˜o o ca a guardados todos os resultados interm´dios ou dados tempor´rios durante a execu¸˜o do programa e a ca e que n˜o s˜o cruciais para o dispositivo, depois de ocorrer uma falha na alimenta¸˜o. a a ca PORTA A e PORTA B s˜o liga¸˜es f´ a co ısicas entre o microcontrolador e o mundo exterior. A porta A tem cinco pinos e a porta B oito pinos. CONTADOR/TEMPORIZADOR ´ um registro de 8 bits no interior do microcontrolador e que trabalha independentemente do programa. No fim de cada conjunto de quatro ciclos de rel´gio o do oscilador, ele incrementa o valor armazenado, at´ atingir o valor m´ximo (255), nesta altura e a recome¸a a contagem a partir de zero. Como n´s sabemos o tempo exato entre dois incrementos c o sucessivos do conte´do do temporizador, podemos utilizar este para medir intervalos de tempo, o u que o torna muito util em v´rios dispositivos. ´ a UNIDADE DE PROCESSAMENTO CENTRAL faz a conex˜o com todos os outros a blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o programa do utilizador. 2.2 CISC x RISC J´ foi dito que o PIC16F84 tem uma arquitetura RISC. Este termo ´ encontrado, muitas vezes, na a e literatura sobre computadores e necessita de ser explicada aqui, mais detalhadamente. A arquite- tura de Harvard ´ um conceito mais recente que a de von-Neumann. Ela adveio da necessidade e de pˆr o microcontrolador a trabalhar mais rapidamente. Na arquitetura de Harvard, a mem´ria o o de dados est´ separada da mem´ria de programa. Assim, ´ poss´ uma maior fluˆncia de dados a o e ıvel e 13
  • 14. Figura 2.1: Esquema do microcontrolador PIC16F84. Figura 2.2: Arquiteturas Harvard versus von Neumann. atrav´s da unidade central de processamento e, claro, uma maior velocidade de funcionamento. A e separa¸˜o da mem´ria de dados da mem´ria de programa, faz com que as instru¸˜es possam ser ca o o co representadas por palavras de mais que 8 bits. O PIC16F84, usa 14 bits para cada instru¸˜o, o ca o ca ´ que permite que que todas as instru¸˜es ocupem uma s´ palavra de instru¸˜o. E tamb´m t´ co e ıpico da arquitetura Harvard ter um repert´rio com menos instru¸˜es que a de von-Neumann’s, instru¸˜es o co co essas, geralmente executadas apenas num unico ciclo de rel´gio. ´ o Os microcontroladores com a arquitetura Harvard, s˜o tamb´m designados por microcontroladores a e RISC. RISC prov´m de Computador com um Conjunto Reduzido de Instru¸˜es (Reduced Instruc- e co tion Set Computer). Os microcontroladores com uma arquitetura von-Neumann s˜o designados a por microcontroladores CISC. O nome CISC deriva de Computador com um Conjunto Complexo de Instru¸oes (Complex Instruction Set Computer). c˜ Como o PIC16F84 ´ um microcontrolador RISC, disso resulta que possui um n´mero reduzido e u de instru¸oes, mais precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola c˜ tˆm mais de cem instru¸˜es). Todas estas instru¸˜es s˜o executadas num unico ciclo, exceto no caso e co co a ´ de instru¸˜es de salto e de ramifica¸˜o. De acordo com o que o seu fabricante refere, o PIC16F84 co ca geralmente atinge resultados de 2 para 1 na compress˜o de c´digo e 4 para 1 na velocidade, em a o rela¸˜o aos outros microcontroladores de 8 bits da sua classe. ca 2.3 Aplica¸˜es co O PIC16F84, ´ perfeitamente adequado para muitas variedades de aplica¸˜es, como a ind´stria e co u e c ´ autom´vel, sensores remotos, fechaduras el´tricas e dispositivos de seguran¸a. E tamb´m um o e dispositivo ideal para cart˜es inteligentes, bem como para dispositivos alimentados por baterias, o por causa do seu baixo consumo. A mem´ria EEPROM, faz com que se torne mais f´cil usar microcontroladores em dispositivos o a onde o armazenamento permanente de v´rios parˆmetros, seja necess´rio (c´digos para transmis- a a a o sores, velocidade de um motor, freq¨ˆncias de recep¸˜o, etc.). O baixo custo, baixo consumo, ue ca facilidade de manuseamento e flexibilidade fazem com que o PIC16F84 se possa utilizar em ´reas a em que os microcontroladores n˜o eram anteriormente empregues (exemplo: fun¸˜es de tempo- a co 14
  • 15. riza¸˜o, substitui¸˜o de interfaces em sistemas de grande porte, aplica¸˜es de coprocessamento, ca ca co etc.). A possibilidade deste chip de ser program´vel no sistema (usando somente dois pinos para a a transferˆncia de dados), d˜o flexibilidade do produto, mesmo depois de a sua montagem e teste e a estarem completos. Esta capacidade, pode ser usada para criar linhas de produ¸˜o e montagem, para armazenar ca dados de calibragem dispon´ ıveis apenas quando se proceder ao teste final ou, ainda, para aperfei¸oar c os programas presentes em produtos acabados. 2.4 Rel´gio / ciclo de instru¸˜o o ca O rel´gio (clock), ´ quem d´ o sinal de partida para o microcontrolador e ´ obtido a partir de o e a e um componente externo chamado oscilador. Se considerasse-mos que um microcontrolador era um rel´gio de sala, o nosso clock corresponderia ao pˆndulo e emitiria um ru´ correspondente o e ıdo ao deslocar do pˆndulo. Tamb´m, a for¸a usada para dar corda ao rel´gio, podia comparar-se ` e e c o a alimenta¸˜o el´trica. ca e O clock do oscilador, ´ ligado ao microcontrolador atrav´s do pino OSC1, aqui, o circuito e e interno do microcontrolador divide o sinal de clock em quatro fases, Q1, Q2, Q3 e Q4 que n˜o a se sobrep˜em. Estas quatro pulsa¸˜es perfazem um ciclo de instru¸˜o (tamb´m chamado ciclo de o co ca e m´quina) e durante o qual uma instru¸˜o ´ executada. A execu¸˜o de uma instru¸˜o, ´ antecedida a ca e ca ca e pela extra¸˜o da instru¸˜o que est´ na linha seguinte. O c´digo da instru¸˜o ´ extra´ da mem´ria ca ca a o ca e ıdo o de programa em Q1 e ´ escrito no registro de instru¸˜o em Q4. e ca A decodifica¸˜o e execu¸˜o dessa mesma instru¸˜o, faz-se entre as fases Q1 e Q4 seguintes. Na ca ca ca Figura 2.3 podemos observar a rela¸˜o entre o ciclo de instru¸˜o e o clock do oscilador (OSC1) ca ca assim como as fases Q1-Q4. O contador de programa (Program Counter ou PC) guarda o endere¸o c da pr´xima instru¸˜o a ser executada. o ca Figura 2.3: Ciclo de instru¸˜o e o clock. ca 2.4.1 Pipelining Cada ciclo de instru¸˜o inclui as fases Q1, Q2, Q3 e Q4. A extra¸˜o do c´digo de uma instru¸˜o ca ca o ca da mem´ria de programa, ´ feita num ciclo de instru¸˜o, enquanto que a sua decodifica¸˜o e o e ca ca execu¸ao, s˜o feitos no ciclo de instru¸˜o seguinte. Contudo, devido ` sobreposi¸˜o – pipelining (o c˜ a ca a ca microcontrolador ao mesmo tempo que executa uma instru¸˜o extrai simultaneamente da mem´ria ca o o c´digo da instru¸˜o seguinte), podemos considerar que, para efeitos pr´ticos, cada instru¸˜o o ca a ca demora um ciclo de instru¸˜o a ser executada. No entanto, se a instru¸˜o provocar uma mudan¸a ca ca c no conte´do do contador de programa (PC), ou seja, se o PC n˜o tiver que apontar para o endere¸o u a c seguinte na mem´ria de programa, mas sim para outro (como no caso de saltos ou de chamadas o de subrotinas), ent˜o dever´ considerar-se que a execu¸˜o desta instru¸˜o demora dois ciclos. Isto a a ca ca acontece, porque a instru¸˜o vai ter que ser processada de novo, mas, desta vez, a partir do endere¸o ca c 15
  • 16. correto. O ciclo de chamada come¸a na fase Q1, escrevendo a instru¸˜o no registro de instru¸˜o c ca ca (Instruction Register - IR). A decodifica¸˜o e execu¸˜o continua nas fases Q2, Q3 e Q4 do clock. ca ca Figura 2.4: Pipeline. 2.4.2 Fluxograma das Instru¸˜es no Pipeline co TCY0 ´ lido da mem´ria o c´digo da instru¸˜o MOVLW 55h (n˜o nos interessa a instru¸˜o que e o o ca a ca foi executada, por isso n˜o est´ representada por retˆngulo). a a a TCY1 ´ executada a instru¸˜o MOVLW 55h e ´ lida da mem´ria a instru¸˜o MOVWF PORTB. e ca e o ca TCY2 ´ executada a instru¸˜o MOVWF PORTB e lida a instru¸˜o CALL SUB1. e ca ca TCY3 ´ executada a chamada (call) de um subrotina CALL SUB1 e ´ lida a instru¸˜o BSF e e ca PORTA,BIT3. Como esta instru¸˜o n˜o ´ a que nos interessa, ou seja, n˜o ´ a primeira instru¸˜o ca a e a e ca da subrotina SUB1, cuja execu¸˜o ´ o que vem a seguir, a leitura de uma instru¸˜o tem que ser ca e ca feita de novo. Este ´ um bom exemplo de uma instru¸˜o a precisar de mais que um ciclo. e ca TCY4 este ciclo de instru¸˜o ´ totalmente usado para ler a primeira instru¸˜o da subrotina ca e ca no endere¸o SUB1. c TCY5 ´ executada a primeira instru¸˜o da subrotina SUB1 e lida a instru¸˜o seguinte. e ca ca 2.5 Significado dos pinos ´ O PIC16F84 tem um total de 18 pinos. E mais freq¨entemente encontrado num tipo de encap- u sulamento DIP18, mas, tamb´m pode ser encontrado numa c´psula SMD de menores dimens˜es e a o que a DIP. DIP ´ uma abreviatura para Dual In Package (Empacotamento em duas linhas). SMD e ´ uma abreviatura para Surface Mount Devices (Dispositivos de Montagem em Superf´ e ıcie), o que sugere que os pinos n˜o precisam de passar pelos orif´ a ıcios da placa em que s˜o inseridos, quando a se solda este tipo de componente. Figura 2.5: Pinagem do PIC16F84. Os pinos no microcontrolador PIC16F84, tˆm o seguinte significado: e 16
  • 17. • Pino no 1, RA2 Segundo pino da porta A. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 2, RA3 Terceiro pino da porta A. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 3, RA4 Quarto pino da porta A. O TOCK1 que funciona como entrada do tempo- rizador, tamb´m utiliza este pino. e • Pino no 4, MCLR Entrada de reset e entrada da tens˜o de programa¸˜o Vpp do microcon- a ca trolador . • Pino no 5, Vss massa da alimenta¸˜o. ca • Pino no 6, RB0, bit 0 da porta B. Tem uma fun¸˜o adicional que ´ a de entrada de interrup¸˜o. ca e ca • Pino no 7, RB1 bit 1da porta B. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 8, RB2 bit 2 da porta B. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 9, RB3 bit 3 da porta B. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 10, RB4 bit 4 da porta B. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 11, RB5 bit 5 da porta B. N˜o tem nenhuma fun¸˜o adicional. a ca • Pino no 12, RB6 bit 6 da porta B. No modo de programa ´ a linha de clock e • Pino no 13, RB7 bit 7 da porta B. Linha de dados no modo de programa • Pino no 14, Vdd p´lo positivo da tens˜o de alimenta¸˜o. o a ca • Pino no 15, OSC2 para ser ligado a um oscilador. • Pino no 16, OSC1 para ser ligado a um oscilador. • Pino no 17, RA0 bit 0 da porta A. Sem fun¸˜o adicional. ca • Pino no 18, RA1 bit 1 da porta A. Sem fun¸˜o adicional. ca 2.6 Gerador de rel´gio – oscilador o O circuito do oscilador ´ usado para fornecer um rel´gio (clock), ao microcontrolador. O clock e o ´ necess´rio para que o microcontrolador possa executar um programa ou as instru¸˜es de um e a co programa. 2.6.1 Tipos de osciladores O PIC16F84 pode trabalhar com quatro configura¸˜es de oscilador. Uma vez que as configura¸˜es co co com um oscilador de cristal e resistˆncia-condensador (RC) s˜o aquelas mais freq¨entemente us- e a u adas, elas s˜o as unicas que vamos mencionar aqui. a ´ Quando o oscilador ´ de cristal, a designa¸˜o da configura¸˜o ´ de XT, se o oscilador for uma e ca ca e resistˆncia em s´rie com um condensador, tem a designa¸˜o RC. Isto ´ importante, porque h´ e e ca e a necessidade de optar entre os diversos tipos de oscilador, quando se escolhe um microcontrolador. Figura 2.6: Clock de um microcontrolador com um ressonador. 17
  • 18. 2.6.2 Oscilador XT O oscilador de cristal est´ contido num inv´lucro de metal com dois pinos onde foi escrita a a o freq¨ˆncia a que o cristal oscila. Dois condensadores cerˆmicos devem ligar cada um dos pinos do ue a cristal ` massa. Casos h´ em que cristal e condensadores est˜o contidos no mesmo encapsulamento, a a a ´ tamb´m o caso do ressonador cerˆmico ao lado representado. Este elemento tem trˆs pinos e e a e com o pino central ligado ` massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do a microcontrolador. Quando projetamos um dispositivo, a regra ´ colocar o oscilador t˜o perto e a quanto poss´ do microcontrolador, de modo a evitar qualquer interferˆncia nas linhas que ligam ıvel e o oscilador ao microcontrolador. Figura 2.7: Clock de um microcontrolador a partir de um cristal de quartzo. 2.6.3 Oscilador RC Em aplica¸˜es em que a precis˜o da temporiza¸˜o n˜o ´ um factor cr´ co a ca a e ıtico, o oscilador RC torna-se mais econˆmico. A freq¨ˆncia de ressonˆncia do oscilador RC depende da tens˜o de alimenta¸˜o, o ue a a ca da resistˆncia R, capacitˆncia C e da temperatura de funcionamento. e a Figura 2.8: Oscilador RC. A Figura 2.8 mostra como um oscilador RC deve ser ligado a um PIC16F84. Com um valor para a resistˆncia R abaixo de 2,2kΩ, o oscilador pode tornar-se inst´vel ou pode mesmo parar de e a oscilar. Para um valor muito grande R (1M por exemplo), o oscilador torna-se muito sens´ ıvel ` a umidade e ao ru´ ´ ıdo. E recomendado que o valor da resistˆncia R esteja compreendido entre 3kΩ e e 100kΩ. Apesar de o oscilador poder trabalhar sem condensador externo (C = 0pF), ´ conveniente, e ainda assim, usar um condensador acima de 20pF para evitar o ru´ e aumentar a estabilidade. ıdo Qualquer que seja o oscilador que se est´ a utilizar, a freq¨ˆncia de trabalho do microcontrolador ´ a ue e a do oscilador dividida por 4. A freq¨ˆncia de oscila¸˜o dividida por 4 tamb´m ´ fornecida no pino ue ca e e OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros circuitos l´gicos pertencentes o ao sistema. Ao ligar a alimenta¸˜o do circuito, o oscilador come¸a a oscilar. Primeiro com um per´ ca c ıodo de oscila¸˜o e uma amplitude inst´veis, mas, depois de algum tempo, tudo estabiliza. ca a Para evitar que esta instabilidade inicial do clock afete o funcionamento do microcontrolador, n´s necessitamos de manter o microcontrolador no estado de reset enquanto o clock do oscilador o n˜o estabiliza. A Figura 2.10 mostra uma forma t´ a ıpica do sinal fornecido por um oscilador de cristal de quartzo ao microcontrolador quando se liga a alimenta¸˜o.ca 18
  • 19. Figura 2.9: Rela¸˜o entre o sinal de clock e os ciclos de instru¸˜o. ca ca Figura 2.10: Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimenta¸˜o. ca 2.7 Reset O reset ´ usado para pˆr o microcontrolador num estado conhecido. Na pr´tica isto significa e o a que `s vezes o microcontrolador pode comportar-se de um modo inadequado em determinadas a condi¸˜es indesej´veis. De modo a que o seu funcionamento normal seja restabelecido, ´ preciso co a e fazer o reset do microcontrolador, isto significa que todos os seus registros v˜o conter valores iniciais a pr´-definidos, correspondentes a uma posi¸˜o inicial. O reset n˜o ´ usado somente quando o micro- e ca a e controlador n˜o se comporta da maneira que n´s queremos, mas, tamb´m pode ser usado, quando a o e ocorre uma interrup¸˜o por parte de outro dispositivo, ou quando se quer que o microcontrolador ca esteja pronto para executar um programa . De modo a prevenir a ocorrˆncia de um zero l´gico acidental no pino MCLR (a linha por cima e o de MCLR significa o sinal de reset ´ ativado por n´ e ıvel l´gico baixo), o pino MCLR tem que ser o ligado atrav´s de uma resistˆncia ao lado positivo da alimenta¸˜o. Esta resistˆncia deve ter um e e ca e valor entre 5kΩ e 10kΩ. Uma resistˆncia como esta, cuja fun¸˜o ´ conservar uma determinada e ca e linha a n´ l´gico alto, ´ chamada resist^ncia de pull up. ıvel o e e Figura 2.11: Utiliza¸˜o do circuito interno de reset. ca O microcontrolador PIC16F84, admite v´rias formas de reset: a 19
  • 20. 1. Reset quando se liga a alimenta¸˜o, POR (Power-On Reset) ca 2. Reset durante o funcionamento normal, quando se p˜e a n´ l´gico baixo o pino MCLR do o ıvel o microcontrolador. 3. Reset durante o regime de SLEEP (dormir). 4. Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir o valor m´ximo). a 5. Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP. Os reset mais importantes s˜o o primeiro e o segundo. O primeiro, ocorre sempre que ´ ligada a e a alimenta¸˜o do microcontrolador e serve para trazer todos os registros para um estado inicial. O ca segundo que resulta da aplica¸˜o de um valor l´gico baixo ao pino MCLR durante o funcionamento ca o normal do microcontrolador e, ´ usado muitas vezes, durante o desenvolvimento de um programa. e Durante um reset, os locais de mem´ria da RAM (registros) n˜o s˜o alterados. Ou seja, os o a a conte´dos destes registros, s˜o desconhecidos durante o restabelecimento da alimenta¸˜o, mas u a ca mant´m-se inalterados durante qualquer outro reset. Ao contr´rio dos registros normais, os SFR e a (registros com fun¸˜es especiais) s˜o reiniciados com um valor inicial pr´-definido. Um dos mais co a e importantes efeitos de um reset, ´ introduzir no contador de programa (PC), o valor zero (0000), e o que faz com que o programa comece a ser executado a partir da primeira instru¸˜o deste. ca 2.7.1 Brown-out Reset Reset quando o valor da alimenta¸˜o desce abaixo do limite permitido ´ chamado de Brown-out ca e Reset. O impulso que provoca o reset durante o estabelecimento da alimenta¸˜o (power-up), ´ gerado ca e pelo pr´prio microcontrolador quando detecta um aumento na tens˜o Vdd (numa faixa entre 1,2V o a e 1,8V). Esse impulso perdura durante 72ms, o que, em princ´ ıpio, ´ tempo suficiente para que e o oscilador estabilize. Esse intervalo de tempo de 72ms ´ definido por um temporizador interno e PWRT, com um oscilador RC pr´prio. Enquanto PWRT estiver actio, o microcontrolador mant´m- o e se no estado de reset. Contudo, quando o dispositivo est´ a trabalhar, pode surgir um problema a n˜o resultante de uma queda da tens˜o para 0 volts, mas sim de uma queda de tens˜o para um a a a valor abaixo do limite que garante o correto funcionamento do microcontrolador. Trata-se de um facto muito prov´vel de ocorrer na pr´tica, especialmente em ambientes industriais onde as a a perturba¸˜es e instabilidade da alimenta¸˜o ocorrem freq¨entemente. Para resolver este problema, co ca u n´s precisamos de estar certos de que o microcontrolador entra no estado de reset de cada vez que o a alimenta¸˜o desce abaixo do limite aprovado. ca Figura 2.12: Exemplos de quedas na alimenta¸˜o abaixo do limite. ca Se, de acordo com as especifica¸˜es el´tricas, o circuito interno de reset de um microcontrolador co e n˜o satisfizer as necessidades, ent˜o, dever˜o ser usados componentes electronics especiais, capazes a a a 20
  • 21. de gerarem o sinal de reset desejado. Al´m desta fun¸˜o, estes componentes, podem tamb´m e ca e cumprir o papel de vigiarem as quedas de tens˜o para um valor abaixo de um n´ especificado. a ıvel Quando isto ocorre, aparece um zero l´gico no pino MCLR, que mant´m o microcontrolador o e no estado de reset, enquanto a tens˜o a n˜o estiver dentro dos limites que garantem um correto a funcionamento. 2.8 Unidade Central de Processamento A unidade central de processamento (CPU) ´ o c´rebro de um microcontrolador. Essa parte ´ e e e respons´vel por extrair a instru¸˜o, decodificar essa instru¸˜o e, finalmente, execut´-la. a ca ca a Figura 2.13: Esquema da unidade central de processamento - CPU. A unidade central de processamento, interliga todas as partes do microcontrolador de modo a que este se comporte como um todo. Uma das sua fun¸˜es mais importante ´, seguramente, co e decodificar as instru¸˜es do programa. Quando o programador escreve um programa, as instru¸˜es co co assumem um claro significado como ´ o caso por exemplo de MOVLW 0x20. Contudo, para e que um microcontrolador possa entendˆ-las, esta forma escrita de uma instru¸˜o tem que ser e ca traduzida numa s´rie de zeros e uns que ´ o opcode (operation code ou c´digo da opera¸˜o). e e o ca Esta passagem de uma palavra escrita para a forma bin´ria ´ executada por tradutores assembler a e (ou simplesmente assembler). O c´digo da instru¸˜o extra´ da mem´ria de programa, tem o ca ıdo o que ser decodificado pela unidade central de processamento (CPU). A cada uma das instru¸˜es co do repert´rio do microcontrolador, corresponde um conjunto de a¸˜es para a concretizar. Estas o co a¸˜es, podem envolver transferˆncias de dados de um local de mem´ria para outro, de um local de co e o mem´ria para os portos, e diversos c´lculos, pelo que, se conclui que, o CPU, tem que estar ligado o a a todas as partes do microcontrolador. Os bus de de dados e o de endere¸o permitem-nos fazer c isso. 2.8.1 Unidade L´gica Aritm´tica (ALU) o e A unidade l´gica aritm´tica (ALU – Arithmetic Logic Unit), ´ respons´vel pela execu¸˜o de o e e a ca opera¸˜es de adi¸˜o, subtra¸˜o, deslocamento (para a esquerda ou para a direita dentro de um co ca ca registro) e opera¸˜es l´gicas. O PIC16F84 cont´m uma unidade l´gica aritm´tica de 8 bits e co o e o e registros de uso gen´rico tamb´m de 8 bits. e e 2.9 Registros Por operando n´s designamos o conte´do sobre o qual uma opera¸˜o incide. Nas instru¸˜es com o u ca co dois operados, geralmente um operando est´ contido no registro de trabalho W (working register) a e o outro operando ou ´ uma constante ou ent˜o est´ contido num dos outros registros. Esses e a a 21
  • 22. Figura 2.14: Unidade l´gica-aritm´tica. o e Figura 2.15: Diagrama bloco mais detalhado do microcontrolador PIC16F84. 22
  • 23. registros podem ser Registros de Uso Gen´rico (General Purpose Registers – GPR) ou Registros e com fun¸oes especiais (Special Function Registers – SFR). Nas instru¸˜es s´ com um operando, c˜ co o um dos operandos ´ o conte´do do registro W ou o conte´do de um dos outros registros. Quando e u u s˜o executadas opera¸˜es l´gicas ou aritm´ticas como ´ o caso da adi¸˜o, a ALU controla o estado a co o e e ca dos bits (que constam do registro de estado – STATUS). Dependendo da instru¸˜o a ser executada, ca a ALU, pode modificar os valores bits do Carry (C), Carry de d´ ıgito (DC) e Z (zero) no registro de estado – STATUS. 2.9.1 Registro STATUS O registro de estado (STATUS), cont´m o estado da ALU (C, DC, Z), estado de RESET (TO, PD) e e os bits para sele¸˜o do banco de mem´ria (IRP, RP1, RP0). Considerando que a sele¸˜o do banco ca o ca de mem´ria ´ controlada atrav´s deste registro, ele tem que estar presente em todos os bancos. o e e Os bancos de mem´ria ser˜o discutidos com mais detalhe no cap´ o a ıtulo que trata da Organiza¸˜o ca da Mem´ria. Se o registro STATUS for o registro de destino para instru¸˜es que afetem os bits Z, o co DC ou C, ent˜o n˜o ´ poss´ escrever nestes trˆs bits. a a e ıvel e Figura 2.16: Registrador STATUS. bit 0 C (Carry) Transporte. Este bit ´ afetado pelas opera¸˜es de adi¸˜o, subtra¸˜o e desloca- e co ca ca mento. Toma o valor 1 (set), quando um valor mais pequeno ´ subtra´ de um valor maior e ıdo e toma o valor 0 (reset) quando um valor maior ´ subtra´ de um menor. 1= Ocorreu um e ıdo transporte no bit mais significativo 0= N˜o ocorreu transporte no bit mais significativo O a bit C ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF. e co bit 1 DC (Digit Carry) Transporte de d´ ıgito. Este bit ´ afetado pelas opera¸˜es de adi¸˜o, e co ca subtra¸˜o. Ao contr´rio do anterior, DC assinala um transporte do bit 3 para o bit 4 do ca a resultado. Este bit toma o valor 1, quando um valor mais pequeno ´ subtra´ de um valor e ıdo maior e toma o valor 0 quando um valor maior ´ subtra´ de um menor. e ıdo 1= Ocorreu um transporte no quarto bit mais significativo 0= N˜o ocorreu transporte nesse bit a O bit DC ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF. e co bit 2 Z (bit Zero) Indica¸˜o de resultado igual a zero. Este bit toma o valor 1 quando o resul- ca tado da opera¸˜o l´gica ou aritm´tica executada ´ igual a 0. ca o e e 1= resultado igual a zero 0= resultado diferente de zero bit 3 PD (Bit de baixa de tens˜o – Power Down). Este bit ´ posto a 1 quando o microcontro- a e lador ´ alimentado e come¸a a trabalhar, depois de um reset normal e depois da execu¸˜o da e c ca instru¸˜o CLRWDT. A instru¸˜o SLEEP p˜e este bit a 0 ou seja, quando o microcontrolador ca ca o entra no regime de baixo consumo / pouco trabalho. Este bit pode tamb´m ser posto a 1, e no caso de ocorrer um impulso no pino RB0/INT, uma varia¸˜o nos quatro bits mais signi- ca ficativos da porta B, ou quando ´ completada uma opera¸˜o de escrita na DATA EEPROM e ca ou ainda pelo watchdog. 1 = depois de ter sido ligada a alimenta¸˜o ca 0 = depois da execu¸˜o de uma instru¸˜o SLEEP ca ca bit 4 TO Time-out transbordo do Watchdog. Este bit ´ posto a 1, depois de a alimenta¸˜o ser e ca ligada e depois da execu¸˜o das instru¸˜es CLRWDT e SLEEP. O bit ´ posto a 0 quando ca co e 23
  • 24. o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica que qualquer coisa n˜o esteve bem. a 1 = n˜o ocorreu transbordo a 0 = ocorreu transbordo bits 5 e 6 RP1:RP0 (bits de sele¸˜o de banco de registros). Estes dois bits s˜o a parte mais ca a significativa do endere¸o utilizado para endere¸amento direto. Como as instru¸˜es que en- c c co dere¸am directamente a mem´ria, disp˜em somente de sete bits para este efeito, ´ preciso c o o e mais um bit para poder endere¸ar todos os 256 registros do PIC16F84. No caso do PIC16F84, c RP1, n˜o ´ usado, mas pode ser necess´rio no caso de outros microcontroladores PIC, de a e a maior capacidade. 01 = banco de registros 1 00 = banco de registros 0 bit 7 IRP (Bit de sele¸˜o de banco de registros). Este bit ´ utilizado no endere¸amento indireto ca e c da RAM interna, como oitavo bit. 1 = bancos 2 e 3 0 = bancos 0 e 1 (endere¸os de 00h a FFh) c 2.9.2 Registro OPTION Figura 2.17: Registrador OPTION. bits 0 a 2 PS0, PS1, PS2 (bits de sele¸˜o do divisor Prescaler). Estes trˆs bits definem o factor ca e de divis˜o do prescaler. Aquilo que ´ o prescaler e o modo como o valor destes trˆs bits a e e afectam o funcionamento do microcontrolador ser´ estudado na se¸˜o referente a TMR0. a ca Figura 2.18: Prescaler. bit 3 PSA (Bit de Atribui¸˜o do Prescaler). Bit que atribui o prescaler ao TMR0 ou ao watchdog. ca 1 = prescaler atribu´ ao watchdog ıdo 0 = prescaler atribu´ ao temporizador TMR0 ıdo bit 4 T0SE (bit de sele¸˜o de bordo actio em TMR0). Se for permitido aplicar impulsos em ca TMR0, a partir do pino RA4/TOCK1, este bit determina se os impulsos activos s˜o os a impulsos ascendentes ou os impulsos descendentes. 1 = bordo descendente 0 = bordo ascendente bit 5 TOCS (bit de sele¸˜o de fonte de clock em TMR0). Este pino escolhe a fonte de impulsos ca que vai ligar ao temporizador. Esta fonte pode ser o clock do microcontrolador (freq¨ˆncia ue 24
  • 25. de clock a dividir por 4) ou impulsos externos no pino RA4/TOCKI. 1 = impulsos externos 0 = 1 do clock interno 4 bit 6 INTEDG (bit de sele¸˜o de bordo de interrup¸˜o). Se esta interrup¸˜o estiver habilitada, ca ca ca ´ poss´ definir o bordo que vai ativar a interrup¸˜o no pino RB0/INT. e ıvel ca 1 = bordo ascendente 0 = bordo descendente bit 7 RBPU (Habilita¸˜o dos pull-up nos bits da porta B). Este bit introduz ou retira as re- ca sistˆncias internas de pull-up da porta B. e 1 = resistˆncias de pull-up desligadas e 0 = resistˆncias de pull-up ligadas e 2.10 Portas de I/O Porta, ´ um grupo de pinos num microcontrolador que podem ser acessados simultaneamente, e e, no qual n´s podemos colocar uma combina¸˜o de zeros e uns ou ler dele o estado existente. o ca Fisicamente, porta ´ um registro dentro de um microcontrolador que est´ ligado por fios aos pinos e a do microcontrolador. Os portas representam a conex˜o f´ a ısica da Unidade Central de Processamento (CPU) com o mundo exterior. O microcontrolador usa-os para observar ou comandar outros componentes ou dispositivos. Para aumentar a sua funcionalidade, os mesmos pinos podem ter duas aplica¸˜es distintas, como, por exemplo, RA4/TOCKI, que ´ simultaneamente o bit 4 da co e porta A e uma entrada externa para o contador/temporizador TMR0. A escolha de uma destas duas fun¸˜es ´ feita atrav´s dos registros de configura¸˜o. Um exemplo disto ´ o TOCS, quinto bit co e e ca e do registro OPTION. Ao selecionar uma das fun¸˜es, a outra ´ automaticamente inibida. co e Figura 2.19: Rela¸˜o entre os registros TRISA e PORTA A. ca Todos os pinos das portas podem ser definidos como de entrada ou de sa´ ıda, de acordo com as necessidades do dispositivo que se est´ a projetar. Para definir um pino como entrada ou como a sa´ ıda, ´ preciso, em primeiro lugar, escrever no registro TRIS, a combina¸˜o apropriada de zeros e e ca uns. Se no local apropriado de um registro TRIS for escrito o valor l´gico 1, ent˜o o correspondente o a pino da porta ´ definido como entrada, se suceder o contr´rio, o pino ´ definido como sa´ e a e ıda. Todos as portas, tˆm um registro TRIS associado. Assim, para a porta A, existe o registro TRISA no e endere¸o 85h e, para a porta B existe o registro TRISB, no endere¸o 86h. c c 2.10.1 Porta A A porta A (PORTA) est´ associado a 5 pinos. O registro de dire¸˜o de dados correspondente ´ o a ca e TRISA, no endere¸o 85h. Tal como no caso da porta B, pˆr a 1 um bit do registro TRISA, equivale c o a definir o correspondente pino da porta A, como entrada e pˆr a 0 um bit do mesmo registro, o equivale a definir o correspondente pino da porta A, como sa´ ıda. 25