Você está na página 1de 120

Curso de Microcontroladores

Microchip PIC

ndice
(1) Histria dos Microcontroladores............................................................................. 8
1.1. Histria dos Microcontroladores........................................................................ 9
1.2. Arquitectura de um microcontrolador.............................................................. 13
1.3. Caractersticas dos microcontroladores PIC .................................................... 15
1.3.1. Famlias dos microcontroladores PIC....................................................... 15
1.3.2. Core de 12 bits .......................................................................................... 15
1.3.3. Core de 14 bits .......................................................................................... 16
1.3.4. Core de 16 bits .......................................................................................... 17
1.3.5. Core de 16 bits avanado.......................................................................... 17
1.3.6. Tipos de Memria de programa................................................................ 18
1.3.6.1. OTP .................................................................................................... 18
1.3.6.2. EPROM.............................................................................................. 19
1.3.6.3. FLASH............................................................................................... 19
1.3.7. Vantagens do PIC16F628A sobre o PIC16F84 ........................................ 19
1.3.7.1. Pinos multiuso.................................................................................... 20
1.3.7.2. Bancos de memria............................................................................ 20
1.3.7.3. Vantagens do PIC16F628A ............................................................... 20
(2) Comear com os PICs.......................................................................................... 22
2.1. A arquitectura PICMicro.................................................................................. 23
2.2. Perifricos ........................................................................................................ 25
(3) Famlia 16F6xxA................................................................................................... 26
3.1. A arquitectura interna ...................................................................................... 27
3.2. Organizao da memria ................................................................................. 27
3.2.1. Memria de programa............................................................................... 27
3.2.2. Memria de dados..................................................................................... 29
3.2.2.1. Memria de uso geral RAM ........................................................... 32
3.2.2.2. Registos com funes especiais ......................................................... 32
3.2.2.2.1. Registo STATUS ........................................................................ 35
3.2.2.2.2. Registo OPTION......................................................................... 37
3.2.2.2.3. Registo INTCON ........................................................................ 38

-1-

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.4. Registo PIE1 ............................................................................... 39


3.2.2.2.5. Registo PIR1 ............................................................................... 40
3.2.2.2.6. Registo PCON............................................................................. 41
3.3. Contador de programa...................................................................................... 41
3.4. Stack................................................................................................................. 43
3.5. Modos de endereamento ................................................................................ 45
3.5.1 Inerente ...................................................................................................... 45
3.5.2. Registo Directo ......................................................................................... 45
(4) Assembler PIC16................................................................................................... 48
4.1. Definies de assembler PIC16 ....................................................................... 49
4.1.1. Movimento de dados................................................................................. 51
4.1.2. Modificao do contedo de registos ....................................................... 52
4.1.3. Controlo do fluxo de programa................................................................. 52
4.1.4. Nenhuma operao.................................................................................... 53
(5) MPLab IDE da Microchip..................................................................................... 55
5.1. Projecto em MPLab ......................................................................................... 56
5.2. Compilao do cdigo fonte ............................................................................ 59
5.3. Simulador ( Debugger ) ................................................................................... 60
5.4. Programao do circuito-integrado.................................................................. 61
(6) Funes e registos internos ................................................................................... 62
6.1. Temporizadores e divisores temporais............................................................. 63
6.1.1. Timer 0...................................................................................................... 63
6.1.2. Divisores ....................................................................................................... 64
6.1.3. Timer 1.......................................................................................................... 65
6.1.4. Timer1 em modo de Temporizador............................................................... 67
6.1.5. Timer1 em modo de Contador ...................................................................... 67
6.1.6. Timer2 ........................................................................................................... 68
6.2. Mdulo de captura/comparadores/PWM ......................................................... 71
6.2.1. Mdulo de Captura ................................................................................... 72
6.2.2. Mdulo de Comparao............................................................................ 73
6.2.3. Mdulo de PWM....................................................................................... 78
6.2.3.1. Duty Cycle do PWM.......................................................................... 79
6.3. Mdulo de comunicaes USART .................................................................. 82
6.3.1. USART em modo assncrono ................................................................... 88
-2-

2005 Primetec Engenharia de Sistemas, Lda.

6.4. Memria de dados EEPROM........................................................................... 91


6.4.1. Ler a EEPROM ......................................................................................... 92
6.4.2. Escrever na EEPROM............................................................................... 92
(7) Funes especiais .................................................................................................. 93
7.1. Bits de configurao ........................................................................................ 94
7.2. Configuraes do Oscilador............................................................................. 95
7.2.1. Oscilador a Cristal/Ressoador................................................................... 96
7.2.2. Entrada de relgio externo ........................................................................ 96
7.2.3. Oscilador RC - verses 16F6xxA ............................................................ 97
7.2.4. Oscilador ER - verses 16F62x ............................................................... 97
7.2.5. Modo de Dupla Velocidade de oscilador.................................................. 98
7.3. Reset................................................................................................................. 98
7.4. Interrupes.................................................................................................... 100
7.5. Temporizador Watchdog - WDT ................................................................... 101
7.6. Modo SLEEP Power Down ........................................................................ 102
7.6.1. Acordar do modo SLEEP........................................................................ 102
(8) Utilizao das portas ........................................................................................... 103
8.1. Direco das portas ........................................................................................ 104
8.2. Escrita/leitura das portas ................................................................................ 104
8.3. FLAGS........................................................................................................... 105
8.4. Transferncias de dados................................................................................. 105
(9) Comparao, manipulao de bits e sequncias.................................................. 107
9.1. Comparaes.................................................................................................. 108
9.2. Manipulao de bits usando instrues de manipulao de bit ..................... 110
9.2.1. BIT Set/Clear .......................................................................................... 110
9.2.2. Teste de BIT............................................................................................ 110
9.3. Manipulao de bits, usando instrues lgicas ............................................ 110
9.3.1. Mudar bit especfico para 1.................................................................. 111
9.3.2. Mudar bit especfico para 0.................................................................. 111
9.3.3. Mudar bit especfico para o seu complemento ....................................... 111
9.3.4. Comparao testa para byte especfico ................................................ 111
9.3.5. Testa para 0 .......................................................................................... 111
9.4. Sequncias...................................................................................................... 112
(10) Tabelas .............................................................................................................. 113
-3-

2005 Primetec Engenharia de Sistemas, Lda.

(11) Interrupes....................................................................................................... 115


11.1. Interrupo RB0/INT ................................................................................... 116
11.2. Interrupo TMR0 ....................................................................................... 117
11.3. Interrupo PORTB ..................................................................................... 117
11.4. GIE Bit de activao geral de interrupes............................................... 117
11.5. Gravao de valores de registos, quando das interrupes.......................... 118
11.6. Atraso de interrupo................................................................................... 118

-4-

2005 Primetec Engenharia de Sistemas, Lda.

ndice de figuras
Fig. 1 - Transstor antigo................................................................................................9
Fig. 2 Vista interna do Intel 4004 ...............................................................................9
Fig. 3 Diagrama de acesso s memrias ...................................................................10
Fig. 4 Microcontrolador PIC 16F84A.......................................................................10
Fig. 5 Arquitectura do PIC 16F628A........................................................................11
Fig. 6 Encapsulamento do PIC da famlia 16F62x ...................................................12
Fig. 7 Arquitectura de um computador .....................................................................13
Fig. 8 Arquitectura Von Neumann............................................................................13
Fig. 9 Arquitectura Harvard......................................................................................14
Fig. 10 Microcontrolador da famlia 12Fxxx com core de 12 bits ...........................16
Fig. 11 Microcontrolador da famlia 16F6xxA com core de 14 bits ........................16
Fig. 12 Microcontrolador da famlia 17C4xA com core de 16 bits..........................17
Fig. 13 Microcontrolador da famlia 18Fxx2 com core de 16 bits melhorado .........18
Fig. 14 Registos ........................................................................................................23
Fig. 15 - Opcode ..........................................................................................................24
Fig. 16 Exemplo de Pipelining .................................................................................24
Fig. 17 Oscilador.......................................................................................................24
Fig. 18 - Mapa da memria de Programa e da Stack ...................................................28
Fig. 19 - Distribuio da RAM pelos Bancos de memoria ..........................................29
Fig. 20 - Acesso aos Bancos de Memria....................................................................29
Fig. 21 Mapa de memria de dados do PIC16F628A...............................................30
Fig. 22 - Mapa da memria de Dados do PIC16F648A ..............................................31
Fig. 23 - Registos de Funo Especial, Banco 0..........................................................32
Fig. 24 - Registos de Funo Especial, Banco 1..........................................................33
Fig. 25 - Registos de Funo Especial, Banco 2..........................................................34
Fig. 26 - Registos de Funo Especial, Banco 3..........................................................35
Fig. 27 Registo STATUS (endereo: 03h, 83h, 103h, 183h)....................................36
Fig. 28 - Registo OPTION (endereo: 81h, 181h).......................................................37
Fig. 29 - Registo INTCON (endereo: 0Bh, 8Bh, 10Bh, 181h) ..................................38
Fig. 30 - Registo PIE1 (endereo: 8Ch).......................................................................39
Fig. 31 - Registo PIR1 (endereo: 0Ch).......................................................................40

-5-

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 32 - Registo PCON (endereo: 8Eh) ....................................................................41


Fig. 33 - Carregamento do Contador de programa em diferentes situaes ................43
Fig. 34 - Utilizao da Stack para guardar os endereos de retorno............................44
Fig. 35 - Comportamento da Stack quando de execuo de Subrotinas ......................45
Fig. 36 - Mapa de memria de armazenamento de dados............................................47
Fig. 37 Lista de configuraes do microcontrolador PIC16F628A ..........................50
Fig. 38 Lista de instrues Assembler.......................................................................54
Fig. 39 Criao de um novo projecto........................................................................56
Fig. 40 Janela de ficheiros agregados ao projecto ....................................................56
Fig. 41 Introduo do nome do ficheiro principal de cdigo fonte ..........................57
Fig. 42 Ficheiro principal adicionado ao projecto ....................................................58
Fig. 43 Escolha do micro-controlador ......................................................................58
Fig. 44 Janela de Bits de Configurao do microcontrolador 16F628A...................59
Fig. 45 Janela de Output da compilao ..................................................................60
Fig. 46 Janela de observao de variveis ................................................................60
Fig. 47 Janela do Simulator Trace ............................................................................61
Fig. 48 Mdulo Timer 0 ............................................................................................63
Fig. 49 Tabela de valores e correspondncias do prescaler .....................................64
Fig. 50 - Programao do valor do divisor (prescaler)................................................64
Fig. 51 Registos associados ao mdulo Timer0........................................................65
Fig. 52 Mdulo Timer1.............................................................................................65
Fig. 53 Registo TCON1 do mdulo Timer1 .............................................................66
Fig. 54 Utilizao do Timer1 em modo de temporizador .........................................67
Fig. 55 Registos associados ao mdulo Timer1........................................................68
Fig. 56 Mdulo Timer2 .............................................................................................68
Fig. 57 Registos associados ao mdulo Timer2........................................................69
Fig. 58 - Registo CCP1 de temporizadores..................................................................71
Fig. 59 Registo CCP1CON .......................................................................................71
Fig. 60 Modo de Captura ..........................................................................................72
Fig. 61 Registo CMCON ..........................................................................................73
Fig. 62 Modos de operao do mdulo de comparao............................................74
Fig. 63 Esquema de ligao de circuitos externos ao mdulo de comparao .........76
Fig. 64 Registos associados ao mdulo de comparao ...........................................76
Fig. 65 Diagrama de blocos do mdulo comparador................................................77
Fig. 66 Registos associados aos mdulos de captura/comparao e Timer1............77

-6-

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 67 Esquema de blocos do mdulo de PWM......................................................78


Fig. 68 Forma de onde de sada do gerador PWM ....................................................79
Fig. 69 Registos associados ao mdulo de PWM e Timer2 .....................................81
Fig. 70 Registo TXSTA ............................................................................................83
Fig. 71 Registo RCSTA ............................................................................................84
Fig. 72 Clculo do valor SPBRG..............................................................................85
Fig. 73 Valores de SPBRG possveis, para diferentes baud rates, em modo sncrono
..........................................................................................................................86
Fig. 74 - Valores de SPBRG possveis, para diferentes baud rates, em modo
assncrono ........................................................................................................87
Fig. 75 Mdulo de emisso da USART ....................................................................88
Fig. 76 Mdulo de recepo da USART...................................................................89
Fig. 77 Registos associados ao mdulo de comunicaes USART..........................91
Fig. 78 Registo EEDATA .........................................................................................91
Fig. 79 Lista de Bits de configurao do microcontrolador PIC16F628A ...............94
Fig. 80 - Registo de Configurao ...............................................................................95
Fig. 81 Oscilador a cristal .........................................................................................96
Fig. 82 Oscilador por relgio externo .......................................................................96
Fig. 83 Oscilador com malha Resistncia/condensador ...........................................97
Fig. 84 Oscilador interno ..........................................................................................97
Fig. 85 Diagrama de blocos simplificado dos circuitos de reset internos.................99
Fig. 86 Bits de estado e seu significado....................................................................99
Fig. 87 Registos associados ao Reset......................................................................100
Fig. 88 Diagrama de blocos do temporizador Watchdog........................................101
Fig. 89 Registos associados ao temporizador Watchdog ........................................101
Fig. 90 - Inicializao da porta A...............................................................................104
Fig. 91 Exemplo de flags ........................................................................................105
Fig. 92 - Sequncia com RLF e RRF.........................................................................112
Fig. 93 Lgica dos circuitos de interrupes ..........................................................116
Fig. 94 Registos associados s interrupes ...........................................................117

-7-

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 1
(1) Histria dos Microcontroladores

-8-

2005 Primetec Engenharia de Sistemas, Lda.

1.1. Histria dos Microcontroladores


Muitas coisas houve j, s quais as pessoas chamaram computadores. Por isso
mesmo, no existe uma definio concreta para o que de facto um computador.
Os computadores tm, desde o seu aparecimento, ajudado o homem, na
resoluo de operaes matemticas. Apesar da histria nos contar e mostrar
inmeros dispositivos de computao matemtica, baseados em processos puramente
mecnicos, hoje em dia as pessoas pensam em computadores, como dispositivos
electrnicos.
Um computador pode definir-se como uma mquina que aceita dados, excuta
operaes lgicas e devolve resultados. Esta da definio vlida para qualquer
dispositivo que funcione mediante um programa gravado em memria.
Por volta de 1940, foi desenvolvido em Inglaterra o Colossus. Uma poderosa
mquina que seria capaz de descodificar a cifra (Enigma) utilizada pelas tropas
alems. Esta cifra era produzida por uma mquina de escrever electromecnica, que
estava ligada a um computador composto por cerca de 1500 vlvulas. A base de
codificao era assente em algoritmos de estatstica.
S em 1950 que os computadores ficaram disponveis para aplicaes
comerciais. Exemplo disso foi o Manchester Mk I (desenvolvido na universidade de
Manchester). Estes computadores eram enormes, ocupando a superfcie de um
edifcio por completo. As operaes executadas eram muito especficas e, por isso
mesmo, associadas directamente ao hardware desenvolvido. Os programas tinham
entre 100 a 1000 operaes.
Em 1956, a inveno do transstor por John Bardeen, William Shockley, e
Walter Brattain, valeu-lhes a conquista do prmio Nobel Fsica. Com esta inveno
foi dado um grande passo no sentido da sucessiva reduo do tamanho e eficincia
dos dispositivos electrnicos semicondutores.

Fig. 1 - Transstor antigo

Fig. 2 Vista interna do Intel 4004

Em 1969 a Hewlett Packard j comercializava imensas calculadoras de bolso,


enquanto que a Fairchild e a Motorola so nessa altura dois grandes fabricantes de
semicondutores. Tambm neste ano, um grupo de engenheiros Japoneses recm
chegados aos Estados Unidos da Amrica, traziam a premissa de construir circuitos
para calculadoras, baseados nos seus projectos.
Em 1971 a Intel lana o 4004, um processador de 4 bits com 2300 transstores.
J em Abril de 1972 a Intel lana o primeiro microcontrolador de 8 bits, com o nome
de 8008. Tinha 16kb de memria e 45 instrues, com uma velocidade de 300000
operaes por segundo.
-9-

2005 Primetec Engenharia de Sistemas, Lda.

Em 1976 a Intel apresenta ao mundo o microcontrolador de 8 bits, o MCS-48 e


tambm o famoso microprocessador 8085. No mesmo ano a Zilog lana o famoso
microprocessador Z80 que deu origem aos computadores ZX Spectrum.
nesta altura que surge ento a distino entre microprocessador e
microcontrolador. A diferena reside essencialmente no facto de um microcontrolador
ter memria EEPROM e RAM internas.

Barramento de Endereamento

Memria

Barramento de Dados

ROM
(Read Only
Memory)

RAM
(Random
Access
Memory)

Fig. 3 Diagrama de acesso s memrias

Em 1980 a Intel lana o 8051, um microcontrolador que se tornou muito


famoso. Actualmente existem imensos fabricantes, com solues de
microcontroladores muito variadas, baseados nesta arquitectura.
Mais tarde, no incio dos anos 90, fundada a Microchip que desenvolve o
PIC (Peripheral Interface Controller). Tratava-se de conseguir um microcontrolador
barato, pequeno e prtico. A grande vantagem do PIC era o seu baixo consumo
energtico. O facto de no precisar de mais do que um oscilador RC externo ao
microcontrolador, entre as outras caractersticas, levaram este microcontrolador ao
sucesso a que hoje se assiste.
Actualmente a Microchip tem vrias famlias de microcontroladores com
diversas caractersticas.

Fig. 4 Microcontrolador PIC 16F84A

A famlia mais utilizada por todo o mundo a famlia 16xxx com o popular
16F84. Um microcontrolador que tem sido utilizado nas mais diversas aplicaes
electrnicas.
- 10 -

2005 Primetec Engenharia de Sistemas, Lda.

Os PICs tm uma arquitectura de 8 bits, com memria FLASH e EEPROM


internas, porta de I/O, mdulos de comunicao com o exterior, como mostra a
seguinte figura:

Fig. 5 Arquitectura do PIC 16F628A


O PIC tem diversos temporizadores para contagem temporal e interrupes
internas e externas que permitem interromper a execuo do programa principal,
quando um qualquer evento ocorre, com carcter prioritrio.
A sua arquitectura de 35 instrues Assembler permite uma rpida
aprendizagem, e tem-se revelado bastante adequada maioria das aplicaes para as
quais, esta famlia de microcontroladores foi desenhada. A figura seguinte mostra
como actualmente constitudo uma cpsula de um microcontrolador PIC, neste caso,
qualquer um da famlia 16F62x.

- 11 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 6 Encapsulamento do PIC da famlia 16F62x

- 12 -

2005 Primetec Engenharia de Sistemas, Lda.

1.2. Arquitectura de um microcontrolador


A arquitectura da maioria dos computadores e microprocessadores da
actualidade, que foi desenvolvida por Von Neumann, revolucionou a computao de
dados, reconhecendo que o programa podia ser armazenado a par com os dados. Este
mtodo oferece uma grande flexibilidade pois, para alterar o programa, basta carregar
a rea de memria com os valores respectivos.
Entradas

Unidade Central
de
Processamento

Entradas

Sadas
Armazenamento
auxiliar

Memria

Fig. 7 Arquitectura de um computador

Essencialmente, este tipo de arquitectura engloba um CPU1, memria e um


barramento onde ambos vo ligar. Como o CPU dever poder comunicar com o
exterior, interfaces de entrada e sada esto, tambm, ligados neste barramento.

Memria
Dados
Cdigo de
programa

Sadas

Entradas

Unidade
Central de
Processamento
ALU

Fig. 8 Arquitectura Von Neumann

Unidade Central de Processamento - A CPU consiste na ALU2, em conjunto com a


lgica digital de controlo. As instrues do programa so puxadas da memria,

1
2

Central Processing Unit - Unidade Central de Processamento


Arithmetic Logic Unit - Unidade Lgica e Aritmtica

- 13 -

2005 Primetec Engenharia de Sistemas, Lda.

descodificadas e executadas. Dados resultantes destas operaes, so, tambm,


acedidos da mesma memria.
Memria - A memria contm o programa a ser executado pelo CPU, e o mesmo
vulgarmente conhecido por Software. Esta memria, tambm, contm os dados
processados pelo programa.
Interfaces - Para ser de algum uso, o computador dever poder interagir com o
ambiente circundante. Qualquer tipo de dispositivo fsico poder ser controlado, para
alm do teclado e monitor.
Barramento - BUS - Todos os elementos de uma arquitectura Von Neumann esto
interligados pelo BUS. Tendo o CPU como controlador principal de todo os sistema,
toda a informao circula neste BUS. Podendo ser eficiente, apenas uma operao
poder ocorrer de cada vez. Este fenmeno conhecido por Von Neumann bottleneck,
ou por Estrangulamento de Von Neumann.
A arquitectura Harvard, uma adaptao da Von Neumann, separando a
memria de programa, da de dados. A figura mostra dois BUS distintos: um
transportando o programa, e outro transportando os dados. Como tal, no existem
interaco entre ambos.
Memria
Dados

Sadas

Entradas

Memria

Unidade
Central de
Processamento

Cdigo de
Programa

ALU

Fig. 9 Arquitectura Harvard

- 14 -

2005 Primetec Engenharia de Sistemas, Lda.

1.3. Caractersticas dos microcontroladores PIC


Os microcontroladores PIC esto disponveis em muitos e variados modelos e,
a princpio, a quantidade disponvel pode parecer bastante confusa. Mas existe uma
certa lgica nesta escolha pois, o mesmo CPU est disponvel com diversas opes
internas diferentes.

1.3.1. Famlias dos microcontroladores PIC


A Microchip divide os PICs em famlias, s quais chama Cores. Estas
diferentes famlias representam mudanas significativas na arquitectura interna do
PIC, e o lanamento no mercado foi cronolgico, assim como aparece nesta lista:

Core de 12 bits
Core de 14 bits
Core de 16 bits
Core de 16 bit avanado

Um pouco confuso a princpio mas, o nmero de bits no se refere ao


barramento. O barramento sempre de 8 bits, que o nmero de bits que uma posio
de memria pode armazenar. Refere-se, sim, ao tamanho da memria de programa,
onde cada instruo pode ter 12, 14 ou 16 bits de tamanho. Quanto maior o nmero de
bits, maior a memria enderevel.

Core de 12 bits - PIC12x


Core de 14 bits - PIC16x
Core de 16 bits - PIC17x
Core de 16 bit avanado - PIC18x

Em todas as famlias, o x representa o tipo de tecnologia utilizada na memria


de programa.

1.3.2. Core de 12 bits


Os chips com core de 12 bits, foram os primeiros a ser lanados no mercado e
so, provavelmente, os mais populares.
Podem enderear 1Kbyte de memria de programa, e disponibilizam um
mximo de 128 bytes de RAM. Este tipo de arquitectura suporta 35 instrues de
programa, alm de, tambm, estarem disponveis em encapsulamentos de 8 pinos.
Poder parecer limitativo um chip com to poucos pinos mas, para a maioria
das aplicaes em que o mesmo proposto, a sua versatilidade, e o seu baixo preo,
tornaram-no muito popular. A maioria das famlias de 12 bits foi apresentada com

- 15 -

2005 Primetec Engenharia de Sistemas, Lda.

memria OTP 3 e EPROM 4 apagvel por UV 5 . Este tipo de memrias tornou esta
famlia pouco popular entre os amadores e hobistas. S recentemente a Microchip
relanou para o mercado estas famlias com memria FLASH6, que possibilitam uma
versatilidade quase imensurvel.

Fig. 10 Microcontrolador da famlia 12Fxxx com core de 12 bits

1.3.3. Core de 14 bits


Os cores de 14 bits so os mais populares na indstria e entre os hobistas, no
sendo to limitativos como a famlia de 12 bits. Podem enderear 8Kbyte de memria
de programa, e disponibilizam at 368 bytes de RAM. Suportam as mesmas
instrues que a famlia de 12 bits, mas algumas instrues podem enderear mais
memria.
Esto disponveis em encapsulamentos de 14, 18, 28 e 44 pinos, bem como em
variadssimas verses de montagem em superfcie.

Fig. 11 Microcontrolador da famlia 16F6xxA com core de 14 bits

One Time Programable - Programvel Apenas Uma Vez


Erasable Programable Read Only Memory - Memria Programvel e Apagvel
5
Ultra Violeta
6
Flash Erasable Programmable Read-Only Memory - EPROM Flash
4

- 16 -

2005 Primetec Engenharia de Sistemas, Lda.

1.3.4. Core de 16 bits


A quase inexistncia de suporte, os preos elevados, e o aparecimento de
novas famlias mais poderosas, fez com que esta famlia dos PIC17 se tornasse uma
famlia pouco popular e cada vez mais em desuso.
Podem enderear 32Kbyte de memria de programa, e disponibilizam at 902
bytes de RAM. A lista de instrues sofre alguns acrescentos, e partilhada com as
famlias anteriores.
S existem encapsulamentos disponveis acima de 40 pinos, e apenas 8 chips
diferentes nesta famlia.

Fig. 12 Microcontrolador da famlia 17C4xA com core de 16 bits

1.3.5. Core de 16 bits avanado


As primeiras famlias de PICs no estavam desenhadas para suportar
compiladores de linguagens modernas, tipo C. Apesar de haver uma boa quantidade
de compiladores de C no mercado, estes so um pouco grosseiros no tratamento da
linguagem e, no entanto, podendo parecer-se com esta linguagem, no suportam a
maioria das funes C.
A pequena quantidade de memria de cada PIC, e a curta Stack7, fez com que
o uso de compiladores C se tornasse difcil.
As famlias de 12 e 14 bits tm uma Stack com 8 nveis, enquanto que as de 16
bits j possuem Stack de 16 nveis. A falta de instrues que possam manipular a
7

Pilha de memria

- 17 -

2005 Primetec Engenharia de Sistemas, Lda.

Stack, leva o utilizador a implementar a Stack em software, aliada falta de RAM,


que tornava o processo muito difcil, e a performance diminuda.
A famlia de 16 bits avanada, implementa uma completa diferente
arquitectura, focada no uso de compiladores, podendo suportar 64Kbytes de memria
de programa e 3Kbytes de RAM. O nmero de instrues j ascende a um total de 75,
e esto disponveis em variadssimos encapsulamentos acima dos 18 pinos.
A disponibilidade de compiladores, a melhor lista de instrues e o seu baixo
custo, fez com que esta famlia se popularizasse to depressa na indstria, bem como
no mercado amador.

Fig. 13 Microcontrolador da famlia 18Fxx2 com core de 16 bits melhorado

1.3.6. Tipos de Memria de programa


A memria de programa dos PICs, implementada em uma de vrias
tecnologias existentes. Estas so distinguidas por trs letras, no modelo do PIC: C, E
ou F.

1.3.6.1. OTP
Existe um grande nmero de modelos PIC que so implementados com
memria ROM, que s pode ser gravada uma vez. Esta caracterstica faz com que
estes PICs sejam muito populares na indstria devido ao seu baixo custo em largas
quantidades. Contudo, o mercado amador tende a no usar estes PICs, devido
necessidade de reprogramar a memria, medida que se corrige o software.
Os PICs so identificados com a letra C, seguindo-se o nmero de famlia.
- 18 -

2005 Primetec Engenharia de Sistemas, Lda.

1.3.6.2. EPROM
Estes modelos foram introduzidos pois, a possibilidade de apagamento por
UV, faz com que o PIC possa ser reprogramado as vezes necessrias, at finalizao
do software. Distinguem-se pela letra C, e algumas que so apagveis electricamente,
esto marcadas pela letra CE.

1.3.6.3. FLASH
Trata-se de uma memria no voltil, que pode ser apagada e escrita
electricamente. Todos os PICs mais recentes, incluem este tipo de memria, que se
distingue pela letra F; tais como os 16F84 ou 16F628A.
A vantagem da FLASH sobre as EEPROM, que com a primeira, o utilizador
pode trocar tempo de escrita, por tempo de leitura. O tempo de escrita foi aumentado,
havendo uma diminuio no tempo de leitura, trazendo bvias melhorias na execuo
do programa.
O PrimeProg PIC Programmer8 est habilitado a trabalhar com os PICs mais
recentes, tambm como com os mais antigos. O software que acompanha este
programador tem actualizaes constantes, e gratuitas, podendo ser usado para todos
os dispositivos com que o PrimeProg PIC Programmer trabalha.

1.3.7. Vantagens do PIC16F628A sobre o PIC16F84


Embora o PIC16F84 possa parecer a melhor escolha para o incio da
aprendizagem neste campo, as vrias vantagens que o PIC16F628A oferece, faz com
que possamos deixar o PIC16F84 de lado.
A simplicidade do uso entre o PIC16F628A e o PIC16F84, no mais do que
um uso e leitura atenta dos manuais e folhas de dados do microcontrolador. Sendo o
utilizador inexperiente no uso de microcontroladores, e com a "aproximao" que este
manual tem ao tema, no haver qualquer dificuldade em inteirar-se da arquitectura
do PIC16F628A.

Disponvel na Primetec - Engenharia de Sistemas, Lda., www.primetec.pt

- 19 -

2005 Primetec Engenharia de Sistemas, Lda.

1.3.7.1. Pinos multiuso


No PIC16F628A, cada pino tem trs ou quatro funes acessveis. Apesar de
parecer confusa a escolha, e a configurao, dos registos internos do
microcontrolador, h que ter em ateno que o PIC tem os pinos pr definidos como
Entradas e todos os perifricos desligados.
Basta configur-los para Entradas/Sadas, e us-los normalmente. Quaisquer
das funes especiais adicionais, disponveis no pino, s sero activadas atravs de
configurao interna. Apesar de haver informao contraditria que diz que so
necessrias mudanas elctricas no circuito, tal no verdade pois as funes
adicionais de cada pino, so seleccionveis internamente, atravs da configurao dos
registos.

1.3.7.2. Bancos de memria


Devido a um aumento da memria de dados, a mesma foi distribuda pelos
bancos disponveis no PIC, que tambm foram duplicados de maneira a acomodar os
registos de cada perifrico disponvel. Sendo assim e, comparando os bancos dos dois
PICs, pode observar-se que um programa escrito para o PIC16F84 9 pode ser
facilmente portado para o PIC16F628A sem quaisquer alteraes significativas. Mais
frente falar-se- nos cuidados a ter aquando da inicializao do PIC.

1.3.7.3. Vantagens do PIC16F628A

Maior Memria
Aumento de memria de programa de 1K a 2K
Aumento de memria de dados de 68 para 224 bytes
Aumento de memria EEPROM de 64 para 128 bytes

Mais Hardware Interno


USART por hardware
Trs temporizadores, contra um do PIC16F84
PWM por hardware
Captura, e comparao, por hardware
Duplo comparador interno (AMPOPS)
Tenso de referncia programvel

Maior funcionalidade
Oscilador interno de 4MHz/37kHz, para aplicaes no crticas
Detector de abaixamento de tenso
Passvel de programao em baixa tenso

Consultar a folha de dados do microcontrolador, captulo de Organizao de Memria

- 20 -

2005 Primetec Engenharia de Sistemas, Lda.

Possvel de usar trs pinos adicionais, convertendo o pino de Reset, e os


pinos do Oscilador, nos chips de 18 pinos

Compatibilidade entre Hardware/Software


O PIC16F628A tem o mesmo pinout que o PIC16F84
O PIC16F628A corre software escrito para o PIC16F84, apenas com
ligeiras modificaes
O PIC16F628A pode ser programado com o mesmo programador do
PIC16F84, mas o software de programao dever ser actualizado para
suportar o PIC16F628A

- 21 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 2
(2) Comear com os PICs

- 22 -

2005 Primetec Engenharia de Sistemas, Lda.

2.1. A arquitectura PICMicro


A arquitectura dos microcontroladores PICMicro , tal como foi dito no
captulo 1, uma arquitectura Harvard. Isto significa que a unidade central de
processamento dispe de duas memrias distintas, uma contendo o cdigo de
programa, carregado previamente no microcontrolador, e uma segunda memria de
uso especfico onde esto contidos os registos internos, necessrios ao funcionamento
do microcontrolador, e tambm uma rea reservada ao uso genrico do programa que
est a correr (RAM).
A famlia PIC16 tem 8bits de tamanho para toda a informao que circula
internamente no barramento de dados. O barramento de endereamento da memria
de programa tem um tamanho de 14bits, que permitem enderear 16384 instrues de
programa. Esta famlia, dado a sua relao entre entradas/sadas e preo, fez dela a
mais atractiva para os hobistas.
O conceito de registo importante. A RAM um banco de memria que pode
ser utilizado de forma genrica, bem como para funes especiais. Alm disso, as
portas de entrada e sada so tambm registos. Desta forma, todas as instrues podem
manipular qualquer registo, o que permite ao programador utilizar o microcontrolador
de forma fcil, rpida e directa.

Memria de
Dados

INDF
TMR0
PCL
STATUS
FSR
PORTA

ALU

Registo W
RAM

Fig. 14 Registos

A stack de 8 nveis permite guardar o valor do program counter, aquando de


chamadas a subrotinas. Terminado o processo, os valores originais so recuperados,
permitindo o seguimento do programa sem quaisquer problemas.
Como a arquitectura PIC16 do tipo RISC (Reduced Instruction Set Code), a
maioria demora apenas um ciclo de relgio. Esta particularidade permite que o
utilizador possa contar de forma rpida o tempo que determinada funo demora a
executar. Os microcontroladores PIC16 obtm resultados numa relao de 2:1 na
compresso do cdigo de programa e 4:1 em velocidade, em relao a outro
microcontroladores do mesmo tipo.
Cada instruo de programa tem um determinado cdigo (OPCODE). O
microcontrolador utiliza uma WORD para codificar as instrues. Dos 14 bits, os 8 bits

- 23 -

2005 Primetec Engenharia de Sistemas, Lda.

de menor peso servem para guardar informao de utilizao directa (Literal


Instructions). Os restantes bits guardam o cdigo da instruo a executar.

Fig. 15 - Opcode

O sistema de pipeline, tambm presente nos PIC16, permite colocar os dados


da instruo seguinte nos registos certos, enquanto a instruo actual executada.
Este mtodo permite que se cumpra cada instruo em apenas um ciclo de relgio. No
entanto, as instrues de saltos no Program Counter, precisam de mais um ciclo, para
que o salto no endereo de destino do Program Counter possa ser executado.

Fig. 16 Exemplo de Pipelining

A frequncia de relgio que injectada no microcontrolador chamada de


Fosc. Essa frequncia dividida por 4, que d origem ao tempo de instruo. Por
exemplo, se o microcontrolador tiver ligado aos seus terminais um cristal de 4 MHz,
que corresponde a um perodo de 250ns, ento o tempo de instruo ser de 1s, que
significa uma frequncia de 1 MHz.

Fig. 17 Oscilador

A memria do PIC divide-se em dois tipos: memria de programa (Program


Memory) e memria de dados (RAM e EEPROM). A famlia PIC16 tem a memria

- 24 -

2005 Primetec Engenharia de Sistemas, Lda.

de programa organizada em pginas e a memria de dados organizada em bancos.


Cada pgina de memria tem 2k words de tamanho. O tamanho de cada banco de
memria RAM varia entre dispositivos. Na famlia PIC16 s possvel enderear um
mximo de 128 bytes, pelo que o uso de bancos, torna possvel a utilizao de uma
quantidade de RAM maior.

2.2. Perifricos
A Microchip disponibiliza inmeros modelos na famlia PIC16. Os perifricos
presentes em cada um deles, variam bastante, segundo diversos factores. Um
projectista de electrnica deve fazer escolher de forma correcta, qual o modelo que
mais se adequa ao seu projecto, para que este possa cumprir as funes para as quais
foi escolhido.
Os perifricos que podem ser encontrados dentro de um PIC16 so ento:

Temporizadores: 1, 2 ou mais consoante o modelo


RS232 (USART): Porta Srie que permite os modos sncronos e
assncronos
PSP: Porta Paralela de 8bits
EEPROM: Memria no voltil adicional para registo de dados
Comparadores para sinais externos
PWM: Modulao por largura de impulsos
SPI (Serial Peripheral Interface): Porta de dados srie
I2C: Porta de dados srie
ADC: Conversores analgico/digital
ICSP (In Circuit Serial Programming): Programao srie directa no
circuito
Watchdog Timer: Temporizador de guarda para o microcontrolador
USB (Universal Serial Bus)
CAN (Controller Area Network)
LIN (Local Interconnect Network)
LCD (Liquid Cristal Display): Controlo de ecrs de cristais lquidos
rfPIC: Transmissor de ASK e FSK
Controlador de motores DC
BOR (Brown-Out RESET): Detector de limites inferiores de tenso de
alimentao

Como no possvel incluir todos os perifricos num PIC, o projectista deve


consultar os catlogos da Microchip, de modo a descobrir qual o modelo que inclui no
seu interior, todos (se possvel) os perifricos que necessita para o seu projecto.
Apesar da escolha poder parecer complicada, para a grande maioria dos
projectos, os modelos que existem no mercado, adequam-se perfeitamente. Raras so
as ocasies em que no se encontra um modelo medida das necessidades

- 25 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 3
(3) Famlia 16F6xxA

- 26 -

2005 Primetec Engenharia de Sistemas, Lda.

3.1. A arquitectura interna


A elevada performance da famlia PIC16F6xxA, pode ser atribuda a um sem
nmero de razes caractersticas de microprocessadores RISC10. Esta famlia usa uma
arquitectura Harvard, onde programa e dados so acedidos de memrias distintas. A
separao destas duas memrias, possibilita que as instrues tenham tamanho
diferente de 8 bits. As instrues tm 14 bits de tamanho, e executam-se num nico
ciclo de relgio.
Igualmente, esta famlia pode enderear directa, ou indirectamente, os seus
registos e memria de programa. Todos os registos especiais, incluindo o contador de
programa, esto mapeados na memria de dados. Possui uma ALU de trabalho geral
de 8 bits, permitindo funes aritmticas e booleanas, e um registo de trabalho11.
A ALU de 8 bits, permite fazer adio, subtraco, rotao e operaes
lgicas, sendo as operaes aritmticas realizadas por complemento a dois. Nas
instrues de dois operandos, um deles o registo de trabalho, e o outro um registo
da memria de dados, ou uma constante directa. Em instrues de um operando, este
o registo de trabalho ou o registo da memria de dados.
O registo de trabalho um registo de 8 bits usado para operaes com a ALU,
e no um registo enderevel.
Dependendo da instruo executada, a ALU poder afectar os valores da
Carry (C), Digit Carry (DC), e do Zero (Z) no registo de STATUS.
Um diagrama simplificado da arquitectura interna do PIC16F6xxA,
mostrada na figura 5, captulo 1.
Dois tipos de memria de dados esto disponveis nesta famlia de microcontroladores. EEPROM no-voltil 12 usada para guardar dados por um largo
perodo de tempo, tal como para guardar valores de calibrao do aparelho, tabelas de
calibrao ou mesmo actualizaes feitas no local onde o aparelho est instalado. A
outra memria de dados, RAM, temporariamente usada para guardar dados durante
o funcionamento normal do micro-controlador. Nesta, os dados so perdidos quando
se corta a energia.
3.2. Organizao da memria
3.2.1. Memria de programa
A famlia PIC16F6xxA tem um contador de programa de 13 bits, e capaz de
enderear 8Kbytes x 14 de memria de programa. Apenas os primeiros 1Kbyte x 14
(0000h - 03FFh) esto fisicamente implementadas no PIC16F627A, 2Kbyte x 14
(0000h - 07FFh) para o PIC16F628A e 4Kbyte x 14 (0000h - 0FFFh) para o
PIC16F648A. O acesso a uma localizao acima destas regies, vai causar um retorno
ao incio da memria do programa. O contedo de qualquer registo, desta memria,
pode ser escrito, ou lido, para o registo de trabalho W.
O endereo vector de RESET o 0000h, e o de Interrupo o 0004h.
10

Reduced Instruction Set Computer


Identificado por W
12
Os dados permanecem, quando a energia retirada
11

- 27 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 18 - Mapa da memria de Programa e da Stack

- 28 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2. Memria de dados


A memria de dados, tabelas das figuras 21 (Mapa memoria Dados
PIC16F627A/628A) e 21 (Mapa memoria Dados PIC16F648A), est distribuda em
quatro bancos, que tambm contm os registos de uso geral 13 , e os registos com
funes especiais14. Os SFRs esto presentes nas primeiras 32 posies de memria
de cada Banco. Os GPRs, esto implementados como RAM esttica de uso geral.
A tabela da figura 19 (Distribuio da RAM pelos Bancos de memoria) mostra
os registos de uso geral disponveis em cada Banco.
Banco 0
Banco 1
Banco 2
Banco 3

PIC16F627A/628A
20h - 7Fh
A0h - FFh
120h - 14Fh, 170h - 17Fh
1F0h - 1FFh

PIC16F648A
20h - 7Fh
A0h - FFh
120h - 14Fh
1F0h - 1FFh

Fig. 19 - Distribuio da RAM pelos Bancos de memoria

Endereos F0 - FFh, 170h - 17Fh e 1F0h - 1FFh esto implementados como


RAM comum, e esto mapeados nos endereos 70h - 7Fh.
A tabela da figura seguinte mostra como aceder aos registos de uso geral, via
bits de registo de STATUS, RP1 e RP0.
RP1
0
0
1
1

Banco 0
Banco 1
Banco 2
Banco 3

RP0
0
1
0
1

Fig. 20 - Acesso aos Bancos de Memria

13
14

GPR - General Purpose Registers


SFR - Special Function Registers

- 29 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 21 Mapa de memria de dados do PIC16F628A

- 30 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 22 - Mapa da memria de Dados do PIC16F648A

- 31 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.1. Memria de uso geral RAM


A RAM est organizada em 224 x 8 bytes nos PIC16F627A/628A, e 256 x 8
bytes no PIC16F648A. Cada um destes pode ser acedido, directa ou indirectamente,
atravs do Registo de Seleco de Registo FSR15.

3.2.2.2. Registos com funes especiais


Os SFRs so registos usados pelo CPU e pelos perifricos, para informaes
de estado e para controlar a operao destes. Estes registos so RAM esttica.

Fig. 23 - Registos de Funo Especial, Banco 0

15

FSR - File Select Register

- 32 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 24 - Registos de Funo Especial, Banco 1

- 33 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 25 - Registos de Funo Especial, Banco 2

- 34 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 26 - Registos de Funo Especial, Banco 3

3.2.2.2.1. Registo STATUS


O registo de STATUS contm o estado aritmtico da ALU, o estado do Reset,
e os bits de escolha de banco de RAM da memria de dados. Este registo comporta-se
como um registo normal, isto , pode ser escrito por qualquer instruo. Se o registo
de STATUS for destino de instruo que afecta os bits Z, C ou DC, ento, a escrita
para estes trs bits desactivada. Estes bits so activados/desactivados, de acordo com
a lgica do chip. Por conseguinte, o resultado de uma instruo com o STATUS como
destino, pode ser diferente do esperado.

- 35 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 27 Registo STATUS (endereo: 03h, 83h, 103h, 183h)

Como exemplo, a instruo CLRF STATUS limpar os trs bits superiores, e


activar o bit Z. Isto deixar o STATUS como 000uu1uu, onde u significa, sem
alterao.
Assim, recomendado que apenas as instrues BCF, BSF, SWAPF e MOVWF
sejam usadas para alterar o registo STATUS, devido a estas instrues no alterarem
nenhum bit do mesmo.

- 36 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.2. Registo OPTION


O registo OPTION passvel de escrita/leitura, que contm os bits de controlo
do divisor do TMR0/WDT, interrupo externa RB0/INT, e os pull-ups da porta B.

Fig. 28 - Registo OPTION (endereo: 81h, 181h)

- 37 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.3. Registo INTCON


O registo INTCON passvel de escrita/leitura, e contm os bits16 de controlo
e monitorizao para algumas fontes de interrupo, excepto do comparador. Isto ,
so os bits que controlam a resposta do PIC, quando ocorrem interrupes.
Os bits de Flag so activados quando ocorre uma interrupo,
independentemente de os prprios bits de activao da interrupo estarem activados.

Fig. 29 - Registo INTCON (endereo: 0Bh, 8Bh, 10Bh, 181h)

16

Bits normalmente chamados de Flags

- 38 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.4. Registo PIE1


Este registo contm bits que activam/desactivam as interrupes. Isto ,
informam o CPU da resposta que este deve ter, quando ocorre uma interrupo, que
foi habilitada por esse mesmo bit.

Fig. 30 - Registo PIE1 (endereo: 8Ch)

- 39 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.5. Registo PIR1


Este registo contm Flags de interrupes. Os bits de Flag so activados
quando ocorre uma interrupo, independentemente do estado dos bits de activao da
interrupo estarem activados, ou o do bit de activao geral, GIE (INTCON<7>). O
software escrito pelo utilizador, dever ter em ateno que as Flags das interrupes
devero ser limpas (desactivadas), antes de activar a interrupo respectiva.

Fig. 31 - Registo PIR1 (endereo: 0Ch)

- 40 -

2005 Primetec Engenharia de Sistemas, Lda.

3.2.2.2.6. Registo PCON


Este registo contm Flags para distinguir entre um Reset de alimentao
(Power-on), Reset externo MCLR', Reset por Watchdog, ou Reset de queda de tenso
(Brown-out). neste registo, tambm, que se controla a dupla velocidade do oscilador
interno INTOSC.

Fig. 32 - Registo PCON (endereo: 8Eh)

O BOR' desconhecido quando de RESET de POWER-ON. Dever ser


activado e lido, via software, de cada vez que ocorre um RESET, para verificar se o
BOR' foi limpo, indicando que ocorreu um RESET por Brown-Out17.

3.3. Contador de programa


As instrues so, normalmente, gravadas sequencialmente na memria de
programa, e o Contador de Programa18 um registo contador crescente, que tem o
valor de actual instruo do programa. Este contador crescente , tambm, chamado
de Ponteiro das Instrues.
Como o PC est ligado memria de programa e ao barramento de dados do
CPU, a ALU pode ser usada para manipular este registo e, romper com a ordem de

17
18

RESET por abaixamento da tenso de alimentao


PC - Program Counter

- 41 -

2005 Primetec Engenharia de Sistemas, Lda.

contagem sequencial do mesmo. Desta maneira, instrues GOTO e CALL podem ser
utilizadas.
O PC est localizado na memria de dados, registo 02h, e chamado de
19
PCL . Isto significa que pode ser acedido, e manipulado, pelo software, da mesma
maneira que outro qualquer registo. Por exemplo, se o contedo do registo W for n, a
instruo addwf 2, f vai escrever o PC com o seu valor original, adicionado do
valor n. Esta uma instruo de Salto, disponvel nas instrues do PIC.
Um GOTO computacional feito se se adicionar um offset20 ao PC (addwf
PCL).
Existe um problema neste exemplo, que acontece devido ao PC ser de 13 bits,
e o registo 02h apenas contm os 8 bits menos significativos, PC[7..0]. Os 5 bits
mais significativos, PC[12..8], esto contidos num registo que no directamente
acessvel pelo utilizador. Na verdade, qualquer instruo que escreve directamente
para o registo 02h, muda todos os 13 bits dos PC. No s os 8 bits provenientes da
instruo addwf 2, f vo ser colocados no byte inferior do PC, mas os cinco bits
menos significativos do registo 0Ah, chamado de PCLATH21, so automaticamente
copiados para dentro do byte superior do PC.
O registo PCLATH limpo de cada vez que ocorre um RESET, e uma
instruo ADDWF como a do exemplo seguinte, vai resultar num endereo da primeira
pgina de 256 bytes, da memria de programa, a no ser que o PCLATH tenha sido
carregado com um valor diferente de 0. Sendo assim, necessrio cuidado quando da
alterao do estado do PC desta maneira, especialmente se o resultado exceder o
campo de 8 bits. Quando se faz uma leitura de tabela, usando o mtodo de GOTO
computacional, dever haver o cuidado de fazer com que a mesma no ultrapasse a
fronteira de memria do PCL22.
movlw 0x00
call tabela

;carrega W com 0
;chama a subrotina da tabela, para
; converter

movlw 0x01
call tabela

;carrega W com 0
;chama a subrotina da tabela, para
; converter

goto

org

0x00fe

tabela
addwf pcl,f
retlw
retlw
retlw
retlw
retlw

'a'
'e'
'i'
'o'
'u'

;endereco onde estah a TABELA


;adiciona W ao Program Counter - Contador
; de Programa
;caracter ASCII 'a'

19

Program Counter Low byte


positivo ou negativo
21
Program Counter LATch High byte
22
em blocos de 256 bytes
20

- 42 -

2005 Primetec Engenharia de Sistemas, Lda.

Instrues que, indirectamente, alterem o valor do PC, tais como GOTO, vo


tambm usar parte do contedo do PCLATH quando actualizam o PC. Essas
instrues tm um endereo de 11 bits, como parte do cdigo de instruo. Nesta
situao, os bits PCLATH[4:3] so movidos para os bits correspondentes 11 e 12 do
PC, para uma actualizao completa de 13 bits no mesmo.

Fig. 33 - Carregamento do Contador de programa em diferentes situaes

3.4. Stack
A famlia PIC com core de 14 bits tem uma Stack 23 de 13 bits, que
exclusivamente usada para guardar endereos de retorno de subrotinas 24 . Esta
estrutura, mostrada na figura 18, conhecida como Stack de Hardware. Esta Stack no
pertence ao mapa de memria, por isso, o seu contedo no pode ser alterado.
Associado a esta Stack, existe um contador de 3 bits, que aponta para o
seguinte registo livre, da mesma. Este Ponteiro de Stack - SP25 no pode ser alterado
por nenhuma instruo, mas automaticamente incrementado de cada vez que uma
instruo CALL executada. CALL similar instruo GOTO, mas antes de o
endereo de destino ser posto no PC, o valor actual do PC empurrado para a Stack.
Este o endereo da instruo depois da instruo CALL, pois o PC j foi
incrementado, e o PIC j est a ler a prxima instruo para o barramento, ao mesmo
tempo que a instruo CALL executada ver figura 16 do captulo 2 (ciclos de
relgio).

23

Pilha ou acumulador de endereos


Os cores de 12 bits tm Stack de 11 bits, e os cores de 16 bits tm Stack de 16 nveis de profundidade
25
Stack Pointer
24

- 43 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 34 - Utilizao da Stack para guardar os endereos de retorno

Na figura 34 a situao mostrada depois de uma chamada subrotina DELAY


100ms. A sequncia de execuo desta :
1. Empurra os 13 bits do PC, para o registo da Stack apontado pelo SP. Este
endereo o da instruo a seguir CALL.
2. O SP incrementado.
3. O destino da subrotina DELAY 100ms, que o endereo de entrada na
subrotina, apaga o valor original do PC. Na verdade, isto faz com que a
execuo do programa salte para a subrotina.
Aparte de empurrar o endereo de retorno para dentro da Stack, nos passos 1 e
2, o CALL comporta-se exactamente como um GOTO. Ento, o CALL necessita de
dois ciclos de relgio, para executar a instruo, pois, o barramento tem de ser limpo,
para remover a instruo seguinte que j est pronta a executar.
O ponto de sada de uma subrotina, dever ser atravs da instruo RETURN.
Isto inverte o processo de carregamento da Stack, feito pelo CALL, e move o endereo
de retorno, que est na Stack, para o PC. A sequncia de execuo do RETURN ser a
seguinte:
1. Decremento do SP.
2. Copia o endereo que est no registo de Stack, apontado pelo SP, para o
PC.

- 44 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 35 - Comportamento da Stack quando de execuo de Subrotinas

3.5. Modos de endereamento


Antes de se falar das instrues suportadas pelo PIC, devemos falar do
conceito de Modo de Endereamento. A maioria das instrues actua directamente
nos dados, que podem ser internos ao CPU ou na memria de dados. Ento, a
localizao desses dados deve fazer parte da instruo. No seria suficiente escrever
CLR 26 ? Mas limpar o qu? H diversas maneiras de especificar a localizao dos
dados a trabalhar. Estas so conhecidas como Modos de Endereamento.

3.5.1 Inerente
Das instrues listadas no Apndice 1 as CLRWDT, RETFIE, NOP, RETURN, e
SLEEP no se referem a registo de dados na memria ou no W.

3.5.2. Registo Directo


Neste modo, o endereo do registo de dados, tanto a origem como o destino,
directamente especificado. Por exemplo:
clrf 20h

26

;Limpa o contedo do registo 20h

Clear - Limpar

- 45 -

2005 Primetec Engenharia de Sistemas, Lda.

Em muitos casos, o mesmo registo pode ser origem e destino. Ento:


incf 20h, f

;L o contedo do registo 20h,


; adiciona 1 e pe o resultado no
; registo 20h

ou ento:
incf 20h, w

;Pe o contedo do registo 20h,


; adiciona 1 e pe o resultado no

A caracterstica principal, deste modo de endereamento, o de que a


localizao do operando fixa, como uma parte integral do programa, e no pode ser
alterada durante a execuo. Especificar o seu endereo pode parecer a opo
correcta, em algumas situaes esta tcnica extremamente desvantajosa.

- 46 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 36 - Mapa de memria de armazenamento de dados

- 47 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 4
(4) Assembler PIC16

- 48 -

2005 Primetec Engenharia de Sistemas, Lda.

4.1. Definies de assembler PIC16


A linguagem assembler PIC16 tem 35 instrues divididas por tipos de
operaes, que so elas:

Movimento de dados
Manipulao de registos
Controlo de fluxo de programa
Nenhuma operao
Controlo do microcontrolador
Operaes lgicas
Operaes aritmticas

Num programa em Assembler, tal como numa qualquer linguagem de


programao de alto nvel, existem vrias regras de sintaxe que tm de ser cumpridas.
O Assembler , na verdade, a linguagem de programao do microcontrolador. Isto
significa que existe uma ligao directa de cada instruo com a arquitectura interna
do microcontrolador.
Quando se inicia um programa, devem ser includos, em primeiro ligar, todos
os ficheiros auxiliares onde constam funes necessrias ao funcionamento do
programa principal. A directiva include serve para isso mesmo.
#include

<p16f628A.INC>

;Se o ficheiro estiver na


; directoria pr-definida do
; MPLab

p16f628A.INC

;Se o ficheiro estiver noutra

ou
#include

A directiva define serve para adicionar constantes ao programa. Esta


funcionalidade que o assembler da Microchip nos d muito til para definir valores
constantes que so utilizados vrias vezes durante todo o programa. O utilizador, em
vez de escrever o valor, escreve o nome da constante. Assim, basta substituir no incio
o valor uma vez, que o novo valor passa a vigorar em todo o programa.
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

JAN
FEV
MAR
ABR
MAI
JUN
JUL
AGO
SET
OUT
NOV
DEZ

0x1F
0x1C
0x1F
0x1E
0x1F
0x1E
0x1F
0x1F
0x1E
0x1F
0x1E
0x1F

;
;
;
;
;
;
;
;
;
;
;
;

O
O
O
O
O
O
O
O
O
O
O
O

ms
ms
ms
ms
ms
ms
ms
ms
ms
ms
ms
ms

- 49 -

de
de
de
de
de
de
de
de
de
de
de
de

Janeiro tem 31 dias


Fevereiro tem 28 dias
Maro tem 31 dias
Abril tem 30 dias
Maio tem 31 dias
Junho tem 30 dias
Julho tem 31 dias
Agosto tem 31 dias
Setembro tem 30 dias
Outubro tem 31 dias
Novembro tem 30 dias
Dezembro tem 31 dias

2005 Primetec Engenharia de Sistemas, Lda.

A directiva __config serve para configurar os bits do microcontrolador. A


palavra constituda por dois traos em baixo, seguida de config, sem espaos. As
opes que se seguem, esto no ficheiro .INC tambm includo no programa.
__CONFIG

_XT_OSC & _BODEN_OFF & _CP_OFF & _WDT_OFF

Fig. 37 Lista de configuraes do microcontrolador PIC16F628A

A directiva ORG serve para definir o endereo da memria de programa a


partir do qual ficam registadas as instrues escritas desse ponto em diante.
ORG

0x0000

;Endereo de arranque da memria de


;programa

A directiva EQU serve para definir variveis ou nomes de constantes. Para


definir variveis, so necessrias duas coisas: nome da varivel e posio de memria
que ir ocupar.
- 50 -

2005 Primetec Engenharia de Sistemas, Lda.

TEMPO equ
movlw

0x20

;Varivel TEMPO que fica guardada na


;posio de memria 0x20

TEMPO

;Carrega o valor 0x20 em W

TEMPO

;Guarda na posio de memria 0x20


; (TEMPO) o contedo de W

ou
movwf

A Directiva END obrigatria em todo e qualquer programa feito em


Assembler. Esta directiva indica que terminou o cdigo do programa e deve ser
colocada na linha imediatamente a seguir ltima instruo.
TEMPO equ
...
movlw
...

0x20

;Varivel TEMPO que fica guardada na


;posio de memria 0x20

TEMPO

;Carrega o valor 0x20 em W

END

Para entender bem a mecnica das instrues de Assembler preciso perceber


o tipo de parmetros que as constituem. As letras utilizadas nos parmetros so:

f - Registos
d - Destino
0 - Registo W
1 - Registo normal
k - Constante numrica
k - Label
b - Bit
b - Binrio
d - Decimal

4.1.1. Movimento de dados


Estas instrues dizem respeito s operaes de transferncia de informao
entre registos.
MOVLW
MOVF
MOVWF

k
f,d
f

Carrega W com constante


Copia contedo registo seleccionado para W ou f
Copia contedo de W para registo seleccionado

- 51 -

2005 Primetec Engenharia de Sistemas, Lda.

4.1.2. Modificao do contedo de registos


As instrues apresentadas na tabela seguinte permitem a alterao do
contedo de registos. So operaes de incremento, decremento, manipulao de bits:
set e clear, rotao.
CLRF
CLRW
COMF

DECF
INCF
BCF
BSF
RLF

f,d
f,d
f,b
f,b
f,d

RRF

f,d

SWAPF

f,d

f,d

Limpa registo seleccionado


Limpa W
Complementa registo seleccionado todos os 1's para 0, e
todos os 0's para 1. Resultado em W ou f
Decrementa registo. Resultado em W ou f
Incrementa registo. Resultado em W ou f
Limpa bit seleccionado, no registo seleccionado
Activa bit seleccionado, no registo seleccionado
Roda bits do registo seleccionado, uma posio para a
esquerda, bits rodam pela Carry. Resultado em W ou f.
Roda bits do registo seleccionado, uma posio para a
direita, bits rodam pela Carry. Resultado em W ou f.
Troca MSB e LSB do registo seleccionado. Resultado
colocado em W ou f.

4.1.3. Controlo do fluxo de programa


Estas instrues permitem tomar decises que interferem directamente no
desenrolar do programa. Atravs de testes a bits com ou sem incrementos e
decrementos, so tomadas as decises de salto de programa ou prosseguimento
normal.
GOTO
CALL
RETURN
RETLW
RETFIE
BTFSC

k
k
k
f,b

BTFSS

f,b

DECFSZ

f,d

INCFSZ

f,d

Vai para endereo ou label


Chama subrotina
Retorna de subrotina
Retorna de subrotina, carrega W com constante
Retorna de interrupo
Testa bit especificado, no registo seleccionado, salta
prxima instruo se bit testado for 0.
Testa bit especificado, no registo seleccionado, salta
prxima instruo se bit testado for 1.
Decrementa registo, salta prxima instruo se registo for
0. Destino em W ou f
Incrementa registo, salta prxima instruo se Registo for
0. Destino em W ou f

- 52 -

2005 Primetec Engenharia de Sistemas, Lda.

4.1.4. Nenhuma operao


Esta a instruo que no faz nada. til em situaes onde o cumprimento
de perodos temporais absolutamente fundamental.
NOP

No faz nada durante um ciclo de relgio

4.1.5. Controlo de micro-controlador


Estas instrues do ordens ao microcontrolador. possvel limpar o
watchdog e o prescaler para impedir um reset, ou colocar o microcontrolador a
dormir, para poupar energia.
CLRWDT

Limpa temporizador watchdog, prescaler. Bits TO e


PD do registo STATUS ficam a 1.
Adormece o micro-controlador para reduzir consumo
de energia. Acorda por Reset, timer de watchdog, ou
estmulos externos.

SLEEP

4.1.6. Operaes lgicas


Estas so as instrues encarregues de executar as operaes lgicas.
ANDLW
ANDWF
IORLW
IORWF
XORLW
XORWF

k
f,d
k
f,d
k
f,d

AND do contedo de W com a constante.


AND do contedo de W com o registo seleccionado
OR do contedo de W com a constante
OR do contedo de W com o registo seleccionado
XOR do contedo de W com a constante
XOR do contedo de W com o registo seleccionado

- 53 -

2005 Primetec Engenharia de Sistemas, Lda.

4.1.7. Operaes aritmticas


Estas so as instrues que executam operaes aritmticas: somas e
subtraces.
ADDWF

f,d

ADDLW

SUBLW

SUBWF

f,d

Soma contedos de W e do registo


seleccionado, resultado em W ou f
Soma constante a W. Resultado em
W
Subtrai W da constante. Resultado
em W
Subtrai W ao registo seleccionado.
Resultado em W ou f

A seguinte tabela mostra todos os comandos disponveis, a par com a sua


descrio, nmero de ciclos de relgio, instrues em formato 14 bit, e bits do
STATUS que so afectados aquando da sua execuo:

Fig. 38 Lista de instrues Assembler

- 54 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 5
(5) MPLab IDE da Microchip

- 55 -

2005 Primetec Engenharia de Sistemas, Lda.

5.1. Projecto em MPLab

O MPLab IDE da Microchip a ferramenta de desenvolvimento que o


fabricante disponibiliza aos programadores. Este ambiente de desenvolvimento conta
j com 6 geraes e muitos anos de experincias, aperfeioamentos, adio de novas
tecnologias, que o tem mantido a par dos melhores IDE que existem, para inmeras
linguagens de programao.
Para criar um novo projecto no MPLab, abra o menu Project e
carregue em New.... Vai aparecer uma janela como a que apresentada em seguida:

Fig. 39 Criao de um novo projecto


Nesta janela introduza o nome do projecto que est a criar e escolha uma
directoria para gravar todos os ficheiros relativos ao mesmo. Nesta altura, dever
aparecer-lhe numa segunda janela, normalmente encostada ao canto superior
esquerdo, toda a informao relativa aos ficheiros do projecto.

Fig. 40 Janela de ficheiros agregados ao projecto


- 56 -

2005 Primetec Engenharia de Sistemas, Lda.

O ficheiro Display.mcp o ficheiro principal do projecto criado. Dentro


deste, podero agora ser includos diversos ficheiros de source (cdigo fonte), header
(cabealhos), object (objectos), library (bibliotecas) e linker scripts.
O prximo passo ser agora abrir um novo ficheiro onde ser escrito o cdigo
principal do programa. Para tal, abra o menu File e carregue em New. Uma nova
janela vazia aparecer. Antes de comear a escrever cdigo, grave esta janela, mesmo
vazia, de forma a escolher j o nome e tipo para o ficheiro.
Como o ficheiro ser o principal, sugere-se o nome main.asm.

Fig. 41 Introduo do nome do ficheiro principal de cdigo fonte

Depois de gravado, j temos o ficheiro em disco, mas ainda no o temos


associado ao novo projecto. Para associar o ficheiro ao projecto v ao menu Project e
carregue em Add Files to Project.... Na janela que se abre, seleccione o ficheiro
main.asm que gravou mesmo h instantes.
Se tudo correr bem, repare agora que o ficheiro main.asm j aparece na janela
que contm todos os ficheiros associados ao projecto, como pode ver na Fig. 42
Ficheiro principal adicionado ao projecto.

- 57 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 42 Ficheiro principal adicionado ao projecto

Neste momento, e antes de comear a escrever cdigo fonte do seu programa,


necessrio configurar no MPLab o microcontrolador que vai utilizar. Abra o menu
Configure e carregue em Select Device. Na janela que se abre escolha ento o
modelo de microcontrolador, como mostra a figura 43.

Fig. 43 Escolha do micro-controlador


- 58 -

2005 Primetec Engenharia de Sistemas, Lda.

Tambm no menu de configurao pode abrir a janela de Configuration Bits


que permite configurar todos os bits configurao do microcontrolador. Note que esta
janela apresentar contedos diferentes, j que cada modelo de microcontrolador tem
uma configurao especfica. A figura 44 mostra a janela de configurao de bits do
16F628A, o microcontrolador estudado neste manual.

Fig. 44 Janela de Bits de Configurao do microcontrolador 16F628A

5.2. Compilao do cdigo fonte


Pode compilar o cdigo fonte do seu programa em qualquer altura. Mesmo
que no tenha nada escrito, o processo de compilao efectuado mesma. Aps
concluda a operao, a janela principal de compilao apresenta a lista de avisos e
erros ocorridos.
Os avisos apenas advertem o utilizador para possveis problemas que possam
ocorrer no futuro, mas no originam falha de compilao.
Os erros originam uma falha no processo de compilao e no deixam seguir
em frente at que sejam corrigidos pelo utilizador.
Para facilitar a busca e correco dos erros, possvel seleccionar um erro da
lista, carregar nele com o boto do rato. A janela de edio do cdigo fonte salta para
a frente e o cursor posicionado no local exacto onde ocorreu o erro.
Para compilar o cdigo fonte do projecto em curso abra o menu Project e
carregue em Build All. Se a compilao for concluda, fica disponvel ao utilizador
um ficheiro geral de listagem ( Absolute Listing ) de ocupao da memria do microcontrolador, onde pode ser consultada a localizao de todas as instrues do
programa, aps terem sido endereadas pelo compilador.
Como por vezes h tabelas includas no cdigo que atravessam as pginas de
memria, o programa deixa de funcionar correctamente. Este problema foi descrito no
captulo 3. Nestes casos, a consulta da lista geral de programa importante para
perceber onde poder ter ocorrido o problema. A figura 7 mostra a janela de
compilao do programa.

- 59 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 45 Janela de Output da compilao


Para consultar a lista completa do cdigo abra o menu View e carregue em
Program Memory.

5.3. Simulador ( Debugger )


O MPLab tem um simulador includo ( Debugger ) que permite executar o
cdigo fonte, no computador. Para activar o debugger do MPLab abra o menu
debugger e carregue em Select Tool.... Seleccione a posio MPLab SIM. Nesta
altura aparecem novos botes na toolbar do MPLab e no menu debugger.
Para executar o cdigo carregue em Run no menu debugger. Para parar a
execuo de cdigo carregue em Halt.
possvel observar variveis utilizadas no programa enquanto o simulador
cumpre as instrues. Esta funo til para perceber o estado do contedo das
variveis e verificar se o cdigo fonte escrito est correcto.
Para observar uma varivel abra o menu View e carregue em Watch. Na
janela que se abre escolha as funes, variveis de sistema ou variveis pessoais que
pretende observar. A figura 46 mostra um exemplo de observao de smbolos,
variveis de sistema e variveis pessoais.

Fig. 46 Janela de observao de variveis

- 60 -

2005 Primetec Engenharia de Sistemas, Lda.

Durante a simulao o utilizador tem acesso tambm janela Simulator Trace


que permite visualizar todas as instrues em pormenor, registos afectos e outras
informaes relevantes.
A figura seguinte mostra a janela do Simulator Trace.

Fig. 47 Janela do Simulator Trace

5.4. Programao do circuito-integrado


O MPLab permite tambm programar o microcontrolador para o qual se est a
desenvolver cdigo. A verso actual do MPLab apenas suporta os programadores da
marca (Microchip). Para seleccionar um dos 3 programadores disponveis, abra o
menu Programmer e carregue em Select Programmer. Nesta altura seleccione um dos
modelos suportados. Por omisso, o MPLab no tem nenhum programador
seleccionado.
Para utilizar outro programador no suportado pelo MPLab, ter de utilizar um
software prprio que normalmente acompanha o hardware.

- 61 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 6
(6) Funes e registos internos

- 62 -

2005 Primetec Engenharia de Sistemas, Lda.

6.1. Temporizadores e divisores temporais


Os temporizadores so dispositivos internos ao microcontrolador capazes de
fazer contagens. Esta funo til quando queremos que o programa desenvolva uma
aco, repetidas vezes com um tempo de espera entre elas, ou mesmo quando
queremos efectuar uma pausa de um tempo determinado. Quando trabalhamos sinais
de uma dada frequncia, que tem um perodo associado (T = 1/f), temos de utilizar um
temporizador que nos faa a pausa certa, de modo que a frequncia gerada ou
capturada, possa ser a mais correcta possvel.
O PIC16F628A dispe de trs temporizadores. Cada um deles explicado em
seguida.

6.1.1. Timer 0
O mdulo Timer0 contm um temporizador/contador de 8 bits com
possibilidade de leitura e escrita do valor. Alm disso, existe a possibilidade de
escolher qual a fonte de sinal de contagem, se interna ou externa.
A figura seguinte mostra uma verso simplificada do mdulo.

Fig. 48 Mdulo Timer 0


No registo OPTION existe um bit, T0CS (OPTION<5>), que quando levado a
0, selecciona o modo de incrementao de temporizador. Neste modo, o valor do
- 63 -

2005 Primetec Engenharia de Sistemas, Lda.

registo TMR0 do temporizador Timer0 incrementar a cada ciclo de relgio do


microcontrolador. Se, num dado instante escrito algum valor no registo TMR0,
ento a sua contagem (incremento) permanecer inalterada durante dois ciclos. S
passado esse tempo retomada a incrementao do registo.
O modo de contador seleccionado quando se coloca o bit T0CS
(OPTION<5>) a 1. Neste modo, o registo TMR0 far incrementos sucessivos a cada
flanco ascendente ou descendente do sinal aplicado no pino RA4/T0CKI do microcontrolador. O tipo de flanco ao qual o contador sensvel, seleccionado pelo BIT
T0SE (OPTION<4>). Se este bit for colocado a 0, fica seleccionado o flanco
ascendente para o incremento do registo TMR0 do contador.

6.1.2. Divisores
Para utilizar com os temporizadores/contadores existe internamente no
PIC16F628A um divisor (prescaler) que permite dividir as contagens por n vezes. O
temporizador Timer0 dispe de um divisor de 8 bits, pelo que as contagens podem ser
divididas at 256 vezes. Para configurar o divisor atribuem-se valores aos bits PS0PS2 (OPTION<2:0>), mediante a seguinte tabela:
Bits

TMR0

WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1:128

Fig. 49 Tabela de valores e correspondncias do prescaler

BCF STATUS, RP0


CLRWDT
CLRF TMR0
BSF STATUS, RP0
MOVLW '00101110b
MOVWF OPTION_REG

;Pode ser ignorado


;se estivermos no
;Bank 0
;Apagar WDT
;Apagar TMR0 e
;Prescaler
;Bank 1
;
;PS<0:2> carregado
;com o valor 110

Fig. 50 - Programao do valor do divisor (prescaler)

- 64 -

2005 Primetec Engenharia de Sistemas, Lda.

A tabela seguinte resume os registos do micro-controlador que esto


associados ao funcionamento do temporizador Timer0. A sua consulta
imprescindvel para que nenhuma configurao seja esquecida, quando se pretende
utilizar este mdulo.

Fig. 51 Registos associados ao mdulo Timer0

6.1.3. Timer 1
O mdulo Timer1 contm um temporizador/contador de 16 bits. Este
temporizador tem dois registos, o TMR1H e o TMR1L, que em conjunto formam o
registo TMR1. Este par de registos tem possibilidade de leitura e escrita do contedo e
pode assumir valores entre 0000h e FFFFh.
A figura seguinte apresenta o esquema simplificado do mdulo Timer1.

Fig. 52 Mdulo Timer1

- 65 -

2005 Primetec Engenharia de Sistemas, Lda.

Quando se utiliza este temporizador com uma interrupo (Interrupes Capitulo 11), este gerada por ocorrncia de um overflow no registo TMR1. Nesta
altura o bit TMR1IF (PIR1<0>) colocado no nvel lgico 1. Esta interrupo pode
ser ligada/desligada configurando o bit TMR1IE (PIE1<0>).
Tal como o mdulo Timer0, tambm o Timer1 pode ser utilizado como
temporizador ou contador. O modo de operao escolhido, configurando o bit
TMR1CS (T1CON<1>).

Fig. 53 Registo TCON1 do mdulo Timer1

O temporizador pode ser activado colocando o bit TMR1ON no nvel lgico 1,


ou desactivado, colocando o mesmo bit no nvel lgico 0.
Existe adicionalmente um modo de reiniciar este temporizador a partir do
mdulo de Captura/Comparadores/PWM do microcontrolador. Este mdulo tratado
mais frente neste captulo.
O mdulo Timer1 tem um oscilador interno que pode ser activado colocando
bit T1OSCEN (T1CON<3>) no nvel lgico l. Neste caso os pinos RB6 e RB7
tornam-se inputs, sendo ignoradas as configuraes TRISB<7:6>. Este oscilador est
preparado para receber um cristal de 32.768kHz nos pinos RB6 e RB7. Devem
- 66 -

2005 Primetec Engenharia de Sistemas, Lda.

adicionalmente ser ligados dois condensadores cermicos de 15pF entre cada pino do
cristal e a massa elctrica do circuito.

6.1.4. Timer1 em modo de Temporizador


Para utilizar o mdulo Timer1 como temporizador, necessrio colocar o bit
TMR1CS (T1CON<1>) no nvel lgico 0. Neste modo, o par de registos TMR1
incrementa a cada ciclo de relgio do micro-controlador (Fosc/4). Desta forma, o bit
T1SYNC (T1CON<2>) no tem qualquer efeito j que o relgio interno est sempre
em sincronismo.
Em seguida apresenta-se um pedao de cdigo assembler que demonstra como
programar o PIC16F628A para utilizarmos o Timer1 em modo de temporizador.
movlw b'00110101' ;
;
;
;
;
;
movwf T1CON
;
bsf
PIE1, 0
;

bit 7-6:
bit 5-4:
bit
3:
bit
2:
bit
1;
bit
0:
Guarda o
Activa a

N/A
11 ->Prescale 1:8
Oscilador do Timer1 desligado
No sincronizar relogio externo
Relogio interno Fosc/4
Liga o Timer1
valor no registo T1CON
interrupo TMR1IE

Fig. 54 Utilizao do Timer1 em modo de temporizador


No cdigo apresentado, o Timer1 ir disparar a interrupo TMR1IF. No
vector de interrupo poder ser adicionado cdigo de tratamento da funo que se
pretende que seja executada.

6.1.5. Timer1 em modo de Contador


Para utilizar o mdulo Timer1 como contador, necessrio colocar o bit
TMR1CS (T1CON<1>) no nvel lgico 1. Em seguida existem duas hipteses para a
contagem:
- Pino RB7/T1OSI quando o bit T1OSCEN colocado no nvel lgico 1
- Pino RB6/T1OSO/T1CKI quando o bit T1OSCEN colocado no nvel
lgico 0
Se o bit T1SYNC (T1CON<2>)est a 0, ento o relgio de entrada do
contagem sincronizado com os impulsos internos. Este processo de sincronizao
feito aps o estgio de prescaler. Neste modo, o registo TMR1 no incrementado se
o PIC16F628A estiver em modo adormecido (Sleep Mode). No entanto, o prescaler
continua a ser incrementado.

- 67 -

2005 Primetec Engenharia de Sistemas, Lda.

A tabela seguinte resume os registos do microcontrolador que esto associados


ao funcionamento do temporizador Timer1. A sua consulta imprescindvel para que
nenhuma configurao seja esquecida, quando se pretende utilizar este mdulo.

Fig. 55 Registos associados ao mdulo Timer1

6.1.6. Timer2
O mdulo Timer2 um temporizador de 8 bits com prescaler e postscaler.
Este temporizador tem a particularidade de poder ser utilizado como base de tempos
para o mdulo de PWM, tambm descrito mais frente neste captulo.
A figura seguinte apresenta o esquema simplificado do mdulo Timer2.

Fig. 56 Mdulo Timer2

O registo TMR2 permite a leitura e escrita do valor e apagado na sequncia


de um RESET do micro-controlador.
Existe a possibilidade de fazer diviso de 1:1, 1:4 ou 1:16 ao relgio interno
do micro-controlador, utilizando o prescaler do Timer2.
Adicionalmente, este mdulo dispe de um registo de 8 bits, o PR2, cujo valor
pode ser programado. O objectivo deste registo de parar a contagem, o valor do

- 68 -

2005 Primetec Engenharia de Sistemas, Lda.

registo TMR2 e PR2 se igualam. Neste altura, o valor de TMR2 volta a 00h na
contagem seguinte. O registo PR2 inicializado com o valor FFh no arranque
(RESET) do micro-controlador.
A fase final da contagem do Timer2 o postscaler de 4 bits que controla as
interrupes originadas por este temporizador. Os valores do postscaler vo de 1:1 at
1:16.
Para desligar o Timer2, necessrio colocar o bit TMR2ON (T2CON<2>) no
nvel lgico 0. Esta opo permite minimizar o consumo de energia.
Os valores do prescaler e postscaler so apagados quando qualquer uma das
situaes acontece:
- Escrita de um valor no registo TMR2
- Escrita de um valor no registo T2CON
O resultado do TMR2 injectado no mdulo USART, quando configurada
para trabalhar em modo sncrono. Esta temporizao pode ser utilizada no processo de
desvio de bits da SSP (shift clock).
A tabela seguinte resume os registos do micro-controlador que esto
associados ao funcionamento do temporizador Timer2. A sua consulta
imprescindvel para que nenhuma configurao seja esquecida, quando se pretende
utilizar este mdulo.

Fig. 57 Registos associados ao mdulo Timer2

Contagem de 1 segundo com o Timer1


Este exemplo ensina a fazer uma contagem com o temporizador Timer1, de
modo a termos um intervalo de 1 segundo com preciso. Como o temporizador
Timer1 tem 16 bits, significa que capaz de contar de 0 at 2^16, ou seja, 65535.
Se estivermos a utilizar um cristal de 4MHz, o relgio interno do microcontrolador de 1MHz. O perodo desta frequncia de 1 s. Ora, 65535 vezes 1 s
so obviamente 65535 s. Isto significa que temos de contar at 1000000 para atingir
1 segundo. Como temos o prescaler do temporizador, podemos dividir o relgio at 8
vezes, ou seja cada contagem representa 8 s. O valor do temporizador passa para
65535x8 s = 524280 s.

- 69 -

2005 Primetec Engenharia de Sistemas, Lda.

Com duas contagens completas do Timer1 atingimos 1s. Neste caso, vamos
ver no cdigo seguinte como feita a contagem.
contador1

equ

movlw
movwf
movlw
movwf
movlw
movwf
mowlw
movwf

20h

; Variavel de contagem

00h
TRISB
02h
contador1
0Bh
TMR1H
DBh
TMR1L

;
;
;
;
;
;
;
;
;
;
;
movlw b'00110101' ;
;
;
;
;
;
movwf T1CON
;
bsf
PIE1, 0
;

PORTB como outputs


Valor para contador
Grava o valor
Valor para TMR1H
Grava o valor
Valor para TMR1L
Grava o valor
O valor programado 3035
que = 65536-62500
62500 * 8 = 500000us
bit 7-6: N/A
bit 5-4: 11 ->Prescale 1:8
bit
3: Oscilador do Timer1 desligado
bit
2: No sincronizar relgio externo
bit
1: Relogio interno Fosc/4
bit
0: Liga o Timer1
Guarda o valor no registo T1CON
Activa a interrupo TMR1IE

No vector de interrupo utiliza-se uma varivel adicional para fazer a


contagem de 2. Aps cada contagem de 2, cumprimos o tempo de 1s. Os valores de
TMR1H e TMR1L devem ser repostos a cada interrupo, mostra o pedao de cdigo
que l deve constar.

org

0004h

movf
btfss
goto
movlw
xorwf

contador1, 0
STATUS, Z
mesma_contagem
01h
PORTB, 1

; Move o valor de contador1 para W


; Testa se contador igual a 0
;
;
; Comuta o pino RB0 (Toggle)

return
mesma contagem:
movlw
movwf
mowlw
movwf
movlw
xorwf
bsf

0Bh
TMR1H
DBh
TMR1L
b'00110000'
T1CON
PIE1, 0

;
;
;
;
;
;
;

Valor para TMR1H


Grava o valor
Valor para TMR1L
Grava o valor
Prescaler 1:8
Repe o valor do prescaler
Activa a interrupo TMR1IE

- 70 -

2005 Primetec Engenharia de Sistemas, Lda.

6.2. Mdulo de captura/comparadores/PWM


O mdulo CCP1 composto por um registo de 16 bits que pode funcionar
como registo de captura, comparao ou master/slave de Duty Cycle. Este registo
composto por dois registos de 8 bits cada, o CCPR1L e CCPR1H.
O registo CCP1CON controla o funcionamento deste mdulo. Todos os
registos permitem leitura e escrita dos seus contedos.
Para utilizar o mdulo nos modos de captura, comparao ou PWM, so
necessrios temporizadores. A tabela seguinte apresenta a origem dos temporizadores
utilizados em cada um dos modos.

Fig. 58 - Registo CCP1 de temporizadores

Fig. 59 Registo CCP1CON

- 71 -

2005 Primetec Engenharia de Sistemas, Lda.

6.2.1. Mdulo de Captura


Para utilizar o modo de captura, o pino RB3 do PIC16F628A deve estar
configurado como input, utilizando o registo TRISB.
Quando ocorre um evento no pino RB3, o registo de 16 bits
CCPR1H:CCPR1L captura o valor do temporizador Timer1. Um evento do pino RB3
pode ser definido como:

Todos os flancos descendentes


Todos os flancos ascendentes
De 4 em 4 flancos ascendentes
De 16 em 16 flancos ascendentes

Para seleccionar que tipo de evento, em que queremos que desencadeie uma
captura, necessrio configurar os bits CCP1M3:CCP1M0 (CCP1CON<3:0>).
Quando uma captura feita, o bit CCP1IF (PIR<2>) colocado automaticamente no
nvel lgico 1. Se ocorre uma nova captura, sem que o valor do registo CCP1R seja
lido, o valor da captura anterior perdido.

Fig. 60 Modo de Captura

- 72 -

2005 Primetec Engenharia de Sistemas, Lda.

6.2.2. Mdulo de Comparao


Este mdulo contm dois comparadores analgicos. As entradas para os
comparadores so multiplexadas nos pinos RA0 a RA3.
O registo CMCON permite controlar os multiplexer de entrada e sada deste
mdulo. Existem diversas formas de fazer a ligao destes comparadores.

Fig. 61 Registo CMCON

- 73 -

2005 Primetec Engenharia de Sistemas, Lda.

A figura seguinte apresenta as vrias formas como os circuitos internos dos


comparadores podem tomar.

Fig. 62 Modos de operao do mdulo de comparao

- 74 -

2005 Primetec Engenharia de Sistemas, Lda.

So necessrios uma srie de passos para configurar o mdulo de comparao


de forma completa.
FLAG_REG

EQU
CLRF
CLRF
MOVF
ANDLW
IORWF
MOVLW
MOVWF
BSF
MOVLW
MOVWF
BCF
CALL
MOVF
BCF
BSF
BSF
BCF
BSF
BSF

0X20
FLAG_REG
PORTA
CMCON, W

;Iniciar o registo de flags


;Iniciar PORTA
;Carregar em W os bits do
;registo CMCON
0xC0
;Adiciona uma mascara com os
;bits a alterar neste registo
FLAG_REG,F ;Guarda em CMCON a nova config.
0x03
;Inicia em modo de comparador
CMCON
;CM<2:0> = 011
STATUS,RP0 ;Selecciona Bank1
0x07
;Configura TRISA
TRISA
;Set RA<2:0> como entradas
;RA<4:3> como saidas
;TRISA<7:5> l sempre como 0
STATUS,RP0 ;Selecciona Bank0
DELAY10
;Pausa de 10s
CMCON,F
;L CMCON para alterar
;condio de mudana
PIR1,CMIF
;Apaga interrupts pendentes
STATUS,RP0 ;Selecciona Bank1
PIE1,CMIE
;Activa interrupes do comparador
STATUS,RP0 ;Selecciona Bank0
INTCON,PEIE ;Activa interrupes de perifericos
INTCON,GIE ;Activa interruo geral

Quando o valor do Vin+ inferior ao valor do Vin-, teremos na sada do


mdulo, nvel lgico baixo (0). Por outro lado, quando o valor do Vin+ superior ao
valor do Vin-, teremos na sada do mdulo, nvel lgico alto (1). Existem no entanto
reas de sombra, ou indeciso, em que o nvel lgico seja incerto ou intermitente. Este
fenmeno ocorre perto as zonas de transio de estados. Aconselha-se neste caso, que
os sinais de entrada estejam, em termos de amplitudes, longe da amplitude de
comparao, para que se possa ter ambos os nveis lgicos, bem definidos, na
comparao.
No funcionamento do comparador, pode ser utilizado um sinal externo de
referncia. Este sinal tem de estar situado entre VSS e VDD. O PIC disponibiliza
internamente o sinal de referncia. No que diz respeito s interrupes, o mdulo de
comparao desencadeia uma interrupo sempre que haja uma mudana de estado no
valor de sada do comparador. O programa do utilizador deve monitorizar os registos
CMCON<7:6> para saber onde houve alterao. O bit CMIF do registo PIR<6> a
FLAG de interrupo do comparador. Este bit informa o utilizador de que ocorreu
uma mudana de estado no comparador.
O mdulo de comparao tambm funciona quando o PIC est adormecido
(Sleep Mode). Nestas situaes, quando ocorre uma mudana de estado no
comparador, a interrupo dispara e o PIC acorda.
Ateno! O circuito que ligado ao PIC, aos pinos do mdulo de comparao,
no deve ter mais de 10 k de impedncia.
- 75 -

2005 Primetec Engenharia de Sistemas, Lda.

A figura seguinte apresenta o esquema interno da porta de entrada do mdulo


de comparao e da ligao de componentes externos.

Fig. 63 Esquema de ligao de circuitos externos ao mdulo de comparao

Para a configurao do mdulo de comparao, apresenta-se na figura seguinte


a lista de registos associados ao mdulo de comparao.

Fig. 64 Registos associados ao mdulo de comparao

No modo de comparador o registo CCPR1 de 16 bits comparado


constantemente com o valor do registo TMR1, tambm de 16bits. Quando ocorre uma
igualdade, o pino RB3/CCP1 ser:

Colocado a nvel lgico 1;


Colocado a nvel lgico 0;
Permanece inalterado;

A aco a realizar no pino RB3/CCP1 baseada na configurao dos bits


CCP1M3:CCP1M0 (CCP1CON<3:0>). Nesse instante em que ocorre o evento, o bit
CCP1IF colocado em nvel lgico 1. A operao do bloco de comparador pode ser
observada na figura 66.

- 76 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 65 Diagrama de blocos do mdulo comparador

A tabela seguinte apresenta a lista dos registos que esto associados aos modos
de Captura, Comparador e Timer1.

Fig. 66 Registos associados aos mdulos de captura/comparao e Timer1

- 77 -

2005 Primetec Engenharia de Sistemas, Lda.

6.2.3. Mdulo de PWM


O PWM (Pulse Width Modulation) permite gerar ondas quadradas com
variao da largura de impulsos. Esta variao significa alterar o Duty Cycle da onda.
Esta tcnica muito utilizada para fazer controlo de equipamentos externos, como por
exemplo, variador de potncia numa lmpada, controlar o movimento de motores,
actuao de contadores, etc.
No modo de PWM, o PIC envia para o pino RB3/CCP1 a onda gerada
internamente. Desta forma, torna-se necessrio configurar o bit TRISB<3> para o
nvel lgico 0, de forma que seja uma sada (output).
A figura seguinte apresenta o esquema de funcionamento do bloco de PWM.

Fig. 67 Esquema de blocos do mdulo de PWM

A onda de sada de PWM tem uma dada frequncia/perodo. Num perodo


completo de onda, existe uma percentagem em que tenso de sada est no nvel
lgico 1, ao qual se chama (Duty Cycle). A frequncia de trabalho o inverso do
perodo completo:

F=

1
[Hz ]
T

A figura seguinte apresenta a forma de onda de PWM. Pode observar-se os


tempos de Duty Cycle, Off e tambm o Perodo. O perodo da onda PWM definido
configurando o registo PR2.

- 78 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 68 Forma de onde de sada do gerador PWM

A frmula apresentada em seguida, mostra como se pode calcular o perodo, e


consequentemente, a frequncia da onda de PWM.
Perodo do PWM = [( PR 2) + 1]* 4 * Tosc * TMR 2 prescaler value

Quando o valor do registo TMR2 igual ao PR2, acontecem 3 eventos,


aquando do ciclo de incremento:
O registo TMR2 apagado
O pino RB3/CCP1 colocado no nvel lgico 1 (excepo: se o Duty Cycle do
PWM for 0%, o pino RB3/CCP1 no ser colocado a nvel lgico 1)
O Duty Cycle passado do registo CCPR1L para o CCPR1H
Ateno: O valor do postscaler do Timer2 no entra na frmula de clculo do
perodo da onda de PWM.

6.2.3.1. Duty Cycle do PWM

A configurao do valor de Duty Cycle feita, escrevendo o valor pretendido


nos registos CCPR1L e CCP1CON<5:4>. A onda de PWM gerada tem desta forma,
uma resoluo de 10 bits. Os 8 bits de maior peso MSB's, so guardados no registo
CCPR1L e os ltimos 2 bits de menor peso so guardados nos bits CCP1CON<5:4>.
Em seguida apresenta-se a frmula de calcular o Duty Cycle da onda de
PWM, baseada no valor escrito nestes registos, bem como a frequncia de oscilao

- 79 -

2005 Primetec Engenharia de Sistemas, Lda.

Tosc e tambm o valor guardado no prescaler do TMR2 (ver seco XX deste captulo
onde abordado o Timer2).
Duty Cycle do PWM = (CCPR1L : CCP1CON < 5 : 4 > ) * Tosc * TMR 2 prescaler value

Os registos CCPR1L e CCP1CON<5:4> podem ser escritos em qualquer


altura. No entanto, o novo valor de Duty Cycle s ser actualizado quando ocorrer
uma igualdade entre o valor do registo TMR2 e PR2. O registo CCPR1H de leitura
apenas.
Quando ocorre uma igualdade detectada pelo comparador do mdulo, entre o
registo CCPR1H + 2 bits, e os 8 bits do TMR2 concatenados com 2 bits oriundos de
um clock interno ou com 2 bits do prescaler, o pino RB3/CCP1 colocado no nvel
lgico 0.
Neste caso, a mxima resoluo em bits do PWM, dada pela frmula
apresentada na figura seguinte:

Fosc
log
FPWM * TMR 2 prescaler value

Re soluo do PWM =
log(2)

[bits ]

Ateno: Se o Duty Cycle do PWM maior do que o perodo, o pino


RB3/CCP1 nunca ser colocado no nvel lgico 0.
Para se configurar o mdulo de PWM, devem ento executar-se os seguintes
passos:
1. Configurar o registo PR2, para estabelecer o valor do perodo
da onda de PWM
2. Configurar o registo CCPR1L e os bits CCP1CON<5:4>, para
estabelecer o valor do Duty Cycle
3. Configurar o pino RB3/CCP1 como sada (output)
4. Configurar o registo TMR2, para estabelecer o valor do
prescaler e activar o Timer2 atravs do registo T2CON
5. Activar o mdulo de PWM para iniciar o seu funcionamento

- 80 -

2005 Primetec Engenharia de Sistemas, Lda.

A figura seguinte apresenta os registos associados ao funcionamento do


mdulo de PWM e Timer2.

Fig. 69 Registos associados ao mdulo de PWM e Timer2

- 81 -

2005 Primetec Engenharia de Sistemas, Lda.

6.3. Mdulo de comunicaes USART

As comunicaes srie tm sido bastante utilizadas em todo o mundo. Desde o


aparecimento da porta RS232 (standard da EIA) e consequente implementao nos
mais diversos sistemas informticos, esta porta de comunicaes pode ser encontrada
em inmeros sistemas electrnicos embebidos, para comunicao com perifricos.
A tecnologia tem evoludo e consigo, a velocidade mxima que se consegue
obter neste tipo de porta de comunicaes.
Os PIC implementam h j vrios anos, portas de comunicaes USART. Tem
havido tambm uma evoluo constante nas portas implementadas no silcio, j que a
crescente capacidade de processamento dos microcontroladores, tem tambm
permitido implementar USART's cada vez mais rpidas. O PIC16F628A dispe de
uma porta srie USART capaz de comunicar at 500kbit/s quando utilizado um cristal
de 20MHz.
Esta porta pode ser configurada para trabalhar em modo sncrono ou
assncrono, full-duplex ou half-duplex, de forma que se possa comunicar com
terminais de PC's, conversores A/D e D/A, mdulos Ethernet ou USB, leitores de
cartes, modems GSM/GPRS, memrias EEPROM, LCD's, entre tantos outros
existentes no mercado.
O registo TXSTA do PIC16F628A permite configurar o modo de
funcionamento da porta USART. A configurao mais comum para trabalhar com
perifricos em modo assncrono, 8 bits. A figura seguinte apresenta os bits do
registo TXSTA. Est tambm presente o bit TRMT que indica o estado do shiftregister do emissor.

- 82 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 70 Registo TXSTA

O registo RCSTA tambm contm bits de configurao relacionados com a


porta USART. Nele necessrio configurar o SPEN RCSTA<7> que, quando
colocado a 1, indica que que a porta est ligada. A porta pode ser colocada em modo
de recepo contnua, colocando a 1, o bit CREN RCSTA<4>. A figura seguinte
apresenta o registo RCSTA.

- 83 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 71 Registo RCSTA

A velocidade que a porta USART funciona configurada atravs de um


clculo prvio. Esta velocidade depende directamente da frequncia do oscilador do
PIC.

- 84 -

2005 Primetec Engenharia de Sistemas, Lda.

Baud Rate desejado =

Fosc
64( x + 1)

16000000
64( x + 1)
x = 25.042

9600 =

Baud Rate calculado =

Erro =

16000000
= 9615
64(25 + 1)

( Baud Rate calculado) ( Baud Rate desejado)


= 0.16%
9600
Fig. 72 Clculo do valor SPBRG

O resultado do clculo efectuado, que tem como variveis, a frequncia do


oscilador e a velocidade que se pretende, um valor inteiro arredondado. A conta
pode ser feita novamente com o valor x obtido, de forma a encontrar-se o valor da
velocidade real que ter a porta. A partir deste valor, calcula-se o erro cometido, em
percentagem.
O valor x encontrado, deve ser escrito no registo SPBRG, endereo 0x99h, de
forma a configurar no PIC a velocidade da porta USART. Quando isto feito, o
temporizador BRG reiniciado. Isto garante que a porta USART no aguarda por um
overflow do temporizador para utilizar a nova velocidade.

- 85 -

2005 Primetec Engenharia de Sistemas, Lda.

A tabela seguinte apresenta uma lista de valores para o registo SPBRG obtidos
para diferentes velocidades de oscilador, para a porta USART em modo sncrono.

Fig. 73 Valores de SPBRG possveis, para diferentes baud rates, em modo sncrono

- 86 -

2005 Primetec Engenharia de Sistemas, Lda.

A tabela seguinte apresenta uma lista de valores para o registo SPBRG obtidos
para diferentes velocidades de oscilador, para a porta USART em modo assncrono.

Fig. 74 - Valores de SPBRG possveis, para diferentes baud rates, em modo

assncrono

- 87 -

2005 Primetec Engenharia de Sistemas, Lda.

6.3.1. USART em modo assncrono

Neste modo de funcionamento, a porta USART utiliza um formato NRZ


standard com 1 start bit e 8 ou 9 bits de dados. O modo mais comum, utilizado o de
8 bits. O PIC transmite primeiros os bits de menor peso (LSb). A paridade no
suportada em hardware. Portanto, se se pretende transmitir neste modo, ter de ser
implementada por software. O nono bit pode ser utilizado com bit de paridade.
Em modo assncrono, a USART desliga-se se o PIC entrar em modo sleep.
Para colocar a USART em modo assncrono, o bit SYNC (TXSTA<4>) deve
ser colocado no nvel lgico zero. A figura seguinte apresenta o esquema de blocos do
emissor da porta USART.

Fig. 75 Mdulo de emisso da USART

O registo TXREG recebe os dados a serem transmitidos. Quando a informao


transmitida, o registo TXREG limpo pelo PIC e o bit TXIF colocado no nvel
lgico 1. Pode ser activada a interrupo deste bit TXIF para controlo da emisso de
dados. Esta configurao feita atravs do bit TXIE (PIE1<4>). A flag TXIF no
pode ser apagada por software. Ela s ser apagada quando o registo TXREG for
carregado com novos dados. Existe tambm o registo TRMT que d informao do
estado do registo TSR (shift-register da porta USART).
A emisso da porta USART activada activando o bit TXEN (TXSTA<5>).
Se se apagar o bit TXEN durante uma transmisso, a porta TX/RB2 passa ao estado
de alta impedncia.

- 88 -

2005 Primetec Engenharia de Sistemas, Lda.

Em seguida apresentam-se os passos resumidos, que devem ser tomados para


configurar a porta USART em modo assncrono, para emisso:
1. Colocar a 0 o bit TRISB<2> para modo output
2. Inicializar o registo SPBRG com o baudrate apropriado. Se se tratar
de uma velocidade alta, colocar a 1 o bit BRGH
3. Colocar a 0 o bit SYNC para obter modo assncrono e colocar a 1 o
bit SPEN
4. Se se pretender interrupes na porta, activar o bit TXIE
5. Se se pretender utilizar 9bits, colocar a 1 o bit TX9
6. Activar a transmisso atravs do bit TXEN, colocando-o a 1
7. Em modo de 9bits, o nono bit deve ser carregado no bit TX9D
8. Carregar os dados a transmitir, no registo TXREG ( iniciada a
transmisso)

A figura seguinte apresenta o esquema de blocos do receptor da porta USART.

Fig. 76 Mdulo de recepo da USART

- 89 -

2005 Primetec Engenharia de Sistemas, Lda.

possvel receber dois bytes de cada vez com o receptor da porta USART.
Quando detectado o stop bit, se o registo RCREG que guarda os dados de chegada,
estiver ainda cheio, o PIC coloca o bit de erro OERR a 1. Isto significa que o buffer
excedeu a capacidade e perderam-se dados. Quando isto acontece, este bit deve ser
apagado manualmente por software. Por outro lado, se um stop bit detectado mas
em nvel 0, o bit FERR colocado a 1 pelo PIC. Quando se l um byte do buffer de
entrada, o RCREG, so colocados novos valores nos bits RX9D e FERR.
importante ler sempre o contedo do registo RCSTA antes de fazer uma leitura de
dados do receptor, para que no se percam os dados de FERR e RX9D de bytes
anteriores.
Em seguida apresentam-se os passos resumidos, que devem ser tomados para
configurar a porta USART em modo assincrono, para recepo:
1. Colocar os bits TRISB<1> a 1 e TRISB<2> a 0, para configurar os
pinos de TX e RX da porta USART
2. Inicializar o registo SPBRG com o baud rate apropriado. Se se tratar
de uma velocidade alta, colocar a 1 o bit BRGH
3. Colocar a 0 o bit SYNC para obter modo assincrono e colocar a 1 o
bit SPEN
4. Se se pretender interrupes na porta, activar o bit RCIE
5. Se se pretender utilizar 9bits, colocar a 1 o bit RX9
6. Activar a transmisso atravs do bit CREN, colocando-o a 1
7. A flag RCIF ser activada quando a recepo de um byte est
completa. Surgir a interrupo se o bit RCIE estiver activo
8. Ler o byte recebido atravs do registo RCREG. Como o shiftregister suporta 2 bytes, o segundo fica a ser pronto a ler,
imediatamente a seguir a ser lido o primeiro
9. Se ocorrer algum erro, apagar o bit CREN para voltar ao estado
normal da porta

- 90 -

2005 Primetec Engenharia de Sistemas, Lda.

A figura seguinte apresenta os registos associados ao mdulo de comunicaes


USART:

Fig. 77 Registos associados ao mdulo de comunicaes USART

6.4. Memria de dados EEPROM

A memria de dados EEPROM pode ser lida e escrita, durante o


funcionamento normal do PIC. Esta memria no est directamente mapeada no mapa
de registos do PIC. A EEPROM tem de ser endereada indirectamente atravs dos
registos SFR. Existem 4 registos SFR que so:
- EECON1
- EECON2
- EEDATA (No implementado fisicamente)
- EEADR
O registo EEDATA guarda 1 byte de dados para emisso e/ou recepo. O
EEADR guarda o endereo da posio de memria da EEPROM a aceder. O
PIC16F628A tem 128bytes de EEPROM internos. A gama de endereos de memria
EEPROM vo de 0x00 a 0x7F. A figura seguinte mostra o contedo do registo
EEDATA.

Fig. 78 Registo EEDATA

- 91 -

2005 Primetec Engenharia de Sistemas, Lda.

Para enderear um byte de dados na memria EEPROM, devem ser


configurados os 7 bits EEADR<6:0>.
O registo EECON1 tem os bits de configurao e controlo. Os bits RD e WR
iniciam operaes de leitura e escrita, respectivamente. Estes bits s podem ser
activados. O PIC apag-los- quando terminam as operaes. Quando o bit WREN
activado, permitir que seja feita uma escrita. Este bit encontra-se a 0 quando o PIC
arranca. O bit WRERR activado pelo PIC quando uma operao de escrita
interrompida por um Reset /MCLR ou Watchdog. Nestas situaes, o utilizador pode
verificar no arranque, se o bit WRERR est activo.
O bit EEIF do registo PIR1 activado pelo PIC quando uma operao de
escrita concluda. Este bit tem de ser apagado por software.

6.4.1. Ler a EEPROM

Para ler a memria EEPROM, o utilizador deve escrever no registo EEADR, o


endereo de memria pretendido. Depois, deve activar o bit RD. A informao fica
disponvel no registo EEDATA, no ciclo de clock seguinte.
BSF
MOVLW
MOVWF
BSF
MOVF
BCF

STATUS, RP0
CONFIG_ADDR
EEADR
EECON1, RD
EEDATA, W
STATUS, RP0

;Banco 1
;
;Endereo a ler
;Leitura da EEPROM
;W = EEDATA
;Banco 0

6.4.2. Escrever na EEPROM

Para escrever na memria EEPROM, o utilizador deve escrever no registo


EEADR, o endereo de memria pretendido e o byte a escrever, no registo EEDATA.
Depois, a sequncia apresentada em seguida, deve ser cumprida:
BSF
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BSF

STATUS, RP0
EECON1, WREN
INTCON, GIE
55h
EECON2
AAh
EECON2
EECON1,WR

BSF INTCON, GIE

;Banco 1
;Activa a escrita
;Desactiva as interrupes
;
;Escreve 55h
;
;Escreve AAh
;Activa bit WR
;Inicia a escrita
;Activa interrupes

O registo WREN deve ser activado para permitir a escrita. Quando a sequncia
de escrita concluda, a flag EEIF activada pelo PIC.

- 92 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 7
(7) Funes especiais

- 93 -

2005 Primetec Engenharia de Sistemas, Lda.

Para lidar com as necessidades de aplicaes em tempo real, as funes


especiais dos micro-controladores, so os que os diferencia uns dos outros.
A famlia PIC 16F6xx tem uma panplia destas funes, que maximizam a
funcionalidade e credibilidade dos sistemas onde esto instalados, minimizando
componentes externos, energia e proteco do programa interno.

7.1. Bits de configurao

Os bits de configurao podem ser, ou no, programados para configurar o


chip para determinadas funes. Estes bits esto mapeados no endereo 0x2007, no
mapa de memria de programa, e so apenas acessveis durante a programao.
A figura seguinte apresenta a lista de configuraes do PIC16F628A.

Fig. 79 Lista de Bits de configurao do microcontrolador PIC16F628A

- 94 -

2005 Primetec Engenharia de Sistemas, Lda.

7.2. Configuraes do Oscilador

O oscilador pode ter oito modos de funcionamento diferente, que se podem


verificar pelos bits FOSC2:FOSC0, no registo de Configurao.

Fig. 80 - Registo de Configurao

- 95 -

2005 Primetec Engenharia de Sistemas, Lda.

Tipos de Osclilador:

LP Cristal em baixo consumo


XT Cristal/Ressoador
HS Cristal/Ressoador de alta velocidade
RC Resistncia/Condensador externos
INTOSC Oscilador de preciso, interno
EC Entrada de relgio, externo

7.2.1. Oscilador a Cristal/Ressoador

Nos modos XT, LP ou HS, um cristal/ressoador ligado aos pinos OSC1 e


OSC2, para estabelecer oscilao.

Fig. 81 Oscilador a cristal

7.2.2. Entrada de relgio externo

Para aplicaes em que um relgio externo existe, o pino de OSC1 pode ser
directamente ligado ao mesmo.

Fig. 82 Oscilador por relgio externo

- 96 -

2005 Primetec Engenharia de Sistemas, Lda.

7.2.3. Oscilador RC - verses 16F6xxA

Quando temporizaes precisas no so necessrias, o oscilador RC est


disponvel. O funcionamento desce oscilador dependente da tenso de alimentao,
dos valores da resistncia e condensador, e da temperatura ambiente.

Fig. 83 Oscilador com malha Resistncia/condensador

7.2.4. Oscilador ER - verses 16F62x

Quando temporizaes precisas no so necessrias, o oscilador ER est


disponvel, bastando, para isso, ligar uma resistncia massa, que vai controlar a
frequncia de oscilao, atravs da uma corrente DC imposta por esta mesma
resistncia.
O funcionamento desce oscilador dependente de unidade para unidade, da
tenso de alimentao, e da temperatura ambiente.
Os valores aconselhados a resistncia situam-se entre os 38k e os 1 MOhm.
Fora destes valores, o oscilador torna-se instvel, e muito sensvel a rudo.

Fig. 84 Oscilador interno

- 97 -

2005 Primetec Engenharia de Sistemas, Lda.

7.2.5. Modo de Dupla Velocidade de oscilador

Um modo de oscilao, com Dupla Velocidade, programvel por software,


est disponvel nesta srie de PICs, quando estes esto configurados no modo
INTOSC. Esta funcionalidade permite comutar, dinamicamente, entre os 4MHz e os
37kHz nominais.
Aplicaes que necessitem de baixo consumo, mas que no permitam pr o
chip em modo SLEEP, podem usar este modo.
O bit OSCF, no registo PCON, usado para controlar o modo de Dupla
Velocidade.

7.3. Reset

Os PICs tm vrias formas de reset ao chip:

Reset de restabelecimento de energia POR (Power-on Reset)


Reset de pino MCLR, durante operao normal
Reset de pino MCLR, durante modo SLEEP
Reset de Watchdog, durante operao normal
Reset de Watchdog, durante modo SLEEP
Reset de queda de tenso BOR (Brown-out Reset)

Alguns registos no so afectados em nenhuma condio de reset; o seu estado


desconhecido no POR, e no modificado em qualquer outro reset. Os outros registos
so modificados no POR, BOR, MCLR e Watchdog normal; no so modificados no
Watchdog SLEEP, pois este reset visto como um resumo de uma operao normal.
Os bits TO e PD so activados/desactivados em diferentes situaes de reset,
conforme a Tabela 8.1, e so usados pelo software, para saber que tipo de reset
ocorreu.

- 98 -

2005 Primetec Engenharia de Sistemas, Lda.

A figura seguinte apresenta um diagrama de blocos simplificado dos circuitos


de reset internos:

Fig. 85 Diagrama de blocos simplificado dos circuitos de reset internos

Fig. 86 Bits de estado e seu significado

- 99 -

2005 Primetec Engenharia de Sistemas, Lda.

Fig. 87 Registos associados ao Reset

7.4. Interrupes

Esta srie de PICs tem dez fontes de interrupo:

Interrupo externa no pino RB0/INT


Trmino do TMR0
Mudana nos pinos RB7:RB4
Comparador
USART fim de transmisso
USART byte recebido
CCP
Trmino do TMR1
Igualdade de TMR2
Fim de escrita/leitura de EEPROM

O registo de controlo de interrupes INTCON grava as interrupes, atravs


da activao de bits. Tem tambm activao de interrupes individuais ou globais.
O bit de interrupes globais, GIE, activa ou desactiva todas as interrupes
activadas individualmente, e desactivado quando de um Reset.
Quando uma interrupo ocorre, GIE desactivado para evitar que futuras
interrupes ocorram, o endereo de retorno carregado na Stack, e o PC carregado
com o endereo de interrupo, 0x0004. Quando dentro da rotina de interrupo, se
tenta por software, descobrir a origem da interrupo, atravs dos bits da mesma,
dever ser extinta a dita interrupo, aquando da reactivao do funcionamento das
interrupes, para evitar que haja uma falsa reentrada na zona de atendimento de
interrupes, logo a seguir. As interrupes so tratadas mais frente no captulo 11
deste manual.

- 100 -

2005 Primetec Engenharia de Sistemas, Lda.

7.5. Temporizador Watchdog - WDT

Este temporizador um oscilador RC de contagem livre, que no necessita de


componentes externos, mesmo sendo separado do oscilador RC do pino CLKIN. Isto
significa que o WDT ir funcionar, mesmo que o relgio nos pinos OSC1 e OSC2,
estiver parado; por exemplo, quando da execuo do modo SLEEP.
Durante operao normal, o WDT gera um reset do chip, enquanto que se o
chip estiver em modo SLEEP, o WDT acorda-o deste modo, e resume a operao
normal.
O WDT pode ser permanentemente desactivado, desligando o bit WDTE.
O WDT tem um perodo nominal de 18ms sem divisor. Este valor depende
muito de factores externos, tais como temperatura, tenso de alimentao e diferenas
entre chips. Um perodo de 2.3seg, nominal, pode ser alcanado, se for usado o
divisor.
As instrues CLRWDT e SLEEP limpam o WDT e o ps-divisor, e evitam o
seu trmino antecipado, que iria gerar um Reset.

Fig. 88 Diagrama de blocos do temporizador Watchdog

Fig. 89 Registos associados ao temporizador Watchdog

- 101 -

2005 Primetec Engenharia de Sistemas, Lda.

7.6. Modo SLEEP Power Down

O modo de SLEEP executado pela instruo SLEEP. As portas I/O mantm


os estados que tinham, antes da instruo ser iniciada. Para menores consumos de
energia, neste modo, todos os pinos I/O devem ser ligados ao Vdd/Vss e, os
perifricos no usados, devero ser desactivados.
7.6.1. Acordar do modo SLEEP

O chip pode acordar do modo SLEEP, das seguintes maneiras:

Reset externo no pino MCLR


Trmino do temporizador Watchdog
Interrupo no pino RB0/INT, mudana na porta B, ou diferentes
perifricos.

O primeiro evento ir causar um Reset, enquanto que os dois ltimos so


considerados, uma continuao da execuo do programa. Os bits TO e PD podem
ser usados para determinar a causa do Reset.
Quando a instruo SLEEP executada, a instruo seguinte lida porque, se
o bit GIE estiver desactivado, o chip continua a execuo do programa na instruo a
seguir ao SLEEP. Se o bit GIE estiver activado, o chip executa a instruo seguinte ao
SLEEP, e posiciona-se no endereo de interrupo 0x0004. Nos casos onde a
execuo da instruo seguinte ao SLEEP, no desejada, dever ser usada a
instruo NOP a seguir ao SLEEP.

- 102 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 8
(8) Utilizao das portas

- 103 -

2005 Primetec Engenharia de Sistemas, Lda.

8.1. Direco das portas

A direco de cada pino das portas (entrada/sada) controlada por um registo


especial chamado TRISA e TRISB, de 8 bits cada um.
Carregando um 0 nos bits dos registos TRISA/B, faz com que o pino
correspondente seja uma sada; o valor da latch de sada no respectivo pino.
Carregando com 1, torna o pino numa entrada; o driver de sada em alta impedncia.
Quando ocorre um Reset, os registos TRISA/B esto configurados como
entradas, e as entradas dos comparadores esto foradas massa, para reduzir o
consumo energtico.

CLRF

PORTA

;Apaga a porta A
;
MOVLW 0x07
;Desliga os
; comparadores
MOVWF CMCON
;Activa pinos para
; funces I/O
BCF
STATUS, RP1 ;
BSF
STATUS, RP0 ;Banco 1
MOVLW 0x1F
;Carrega W com o valor
; a utilizar para a
MOVWF TRISA
; configuracao dos pinos
; da porta A

Fig. 90 - Inicializao da porta A

8.2. Escrita/leitura das portas

Os oito bits de uma porta podem ser lidos ao mesmo tempo, usando a
instruo MOVF portX, W. Os dados so vlidos, no momento em que a porta
lida. Os pinos de cada porta podem ser lidos independentemente, usando as instrues
BTFSC e BTFSS.
As instrues orientadas para a manipulao directa de bits, BCF e BSF, lem
toda a porta para o CPU, mudam o bit pretendido, e volta a escrever o contedo do
CPU de volta para a porta. Tudo num ciclo de relgio. Este mtodo chamado de LModifica-Escreve.
A porta lida no incio de cada ciclo de instruo, e escrita no fim do mesmo
ciclo. Se a escrita imediatamente seguida de uma leitura, na mesma porta, problemas
podero ocorrer, porque a porta necessita de tempo para estabilizar. Este problema
ultrapassado, inserindo uma instruo NOP entre a escrita e a leitura.
Executando duas escritas consecutivas em uma porta, pode originar o mesmo
problema. De novo, inserindo um NOP, resolver a questo.

- 104 -

2005 Primetec Engenharia de Sistemas, Lda.

8.3. FLAGS

Uma Flag um registo de 1 bit, que pode ser activado (1), ou desactivado (0),
por intermdio de vrios tipos de instrues. A activao/desactivao, normalmente,
feita automaticamente. Depois da execuo da instruo, a Flag em questo pode ser
testada, para saber se foi activada ou desactivada. O fluxo/deciso do software escrito,
pode depender destes testes.
Das muitas Flags existentes, nos vrios registos atrs mencionados, h duas de
extrema importncia, e que devem ser descritas com mais pormenor. So elas a Z
(Zero bit), e a C (Carry bit). Estas encontram-se no registo STATUS.

Fig. 91 Exemplo de flags

8.4. Transferncias de dados

O simples programa que se segue, transfere o contedo da porta B, para um


registo temporrio:
movf
portb, w
movwf temp

;carrega contedo da porta B, para o registo W


;carrega contedo de W, para registo TEMP

Todos os procedimentos de transferncia de dados entre registos implicam a


utilizao do registo W, como se pode ver na Figura 5.1 Esquema de blocos do
16F6xx, porque no existe meio de transferir dados de forma directa.
O exemplo seguinte vai mandar um byte de valor aleatrio, e escolhido pelo
autor, directamente para a porta B, onde poder ser visualizado com a ajuda de
perifricos externos:
Byte a mandar, em formato binrio 0011
Hexadecimal
0x3

- 105 -

1010
0xA

2005 Primetec Engenharia de Sistemas, Lda.

movlw
movwf
movlw
movwf

0x00
TRISB
0x3A
PORTB

;carrega valor 0x00 para registo W


;configura porta B, 8 sadas
;carrega W com valor 0x3A
;carrega contedo de W, para porta B

Caso se queira limpar todos os bits da porta B, de uma s vez, no esquecer que a
porta B est mapeada como um registo normal, e a instruo CLRF pode ser usada
para o efeito:
clrf

PORTB

;limpa todos os bits da porta B

- 106 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 9
(9) Comparao, manipulao de bits e sequncias

- 107 -

2005 Primetec Engenharia de Sistemas, Lda.

9.1. Comparaes

O contedo do registo W pode ser comparado com valores numricos N, para


determinar as suas magnitudes. Uma das maneiras de o conseguir subtraindo o
contedo de W, pelo valor numrico.
movlw 0xXX

;carrega W com valor 0xXX

sublw N

;subtrai contedo de W, do valor N.


; Resultado em W

btfsc/s

status, 2

;testa flag Z, salta se a prxima


; instruo 0/1

...

O resultado ento:
Flag Zero est activada se
Flag Zero est desactivada se

W
W

=
<>

N
N

Um salto de programa pode acontecer, dependendo da programao do


cdigo. No esquecer que, a instruo SUBLW subtrai o W do valor numrico,
carregando em W o resultado.
Mais resultados podem ser tirados desta manipulao:
Flag Carry est activada se
Flag Carry est desactivada se

W
W

<=
>

N
N

Os seguintes testes podem ser feitos:


Teste
W=N
W <> N
W <= N
W>N

Flag testada
Z activado
Z desactivado
C activado
C desactivado

- 108 -

2005 Primetec Engenharia de Sistemas, Lda.

O seguinte programa, exemplifica o mtodo de teste de comparao:


N
W < N 0x05
W = N 0x05
W > N 0x05

STATUS
PORTB

start

repete

W
0x04
0x05
0x06

equ
equ

0x03
0x06

org

0x0000

bsf
movlw
movwf
bcf

status, 5
0x00
TRISB
status, 5

Z
0
1
0

;Banco 1
;carrega W com 0x00
;configura porta B
;Banco 0

movlw 0x04
sublw 0x05

;carrega W com 0x04


;subtrai W de N (0x05)

movf status,w
movwf PORTB

;carrega W com o STATUS


;mostra o STATUS na porta B

goto

;ciclo infinito

repete

C
1
1
0

end

Outra maneira de testar se dois bytes so iguais, usando a instruo XORLW.


O byte a ser testado XORado com o byte de teste. Se coincidirem, a flag Z ser
activada.
Outra das maneiras, mover o registo para si mesmo, isto , com a ajuda da
instruo MOVF registo,f. A flag Z afectada, por conseguinte, se estiver activada
depois desta instruo, o registo 0x00.

- 109 -

2005 Primetec Engenharia de Sistemas, Lda.

9.2. Manipulao de bits usando instrues de manipulao de bit


9.2.1. BIT Set/Clear

Bit set BSF, e bit clear BCF, operam directamente num bit, num
determinado registo. Um exemplo, o bit 3 da porta A pode ser activado:

bsf

porta,3

;activa bit 3 na porta A

Outro exemplo, desactivao do bit 6 do registo TEMP:

bcf

temp,6

;desactiva bit 6 do registo TEMP

9.2.2. Teste de BIT

Um bit num registo pode ser testado usando as instrues BTFSC e BTFSS:

btfsc temp, 3
goto ????

;testa bit 3 do registo TEMP


;salta se activado
;continua

Se o bit testado for 0, a instruo seguinte saltada. Ento, a instruo GOTO


posiciona o programa, noutra localizao do mesmo, se o bit for 1. Caso contrrio, o
programa continua em sequncia.

9.3. Manipulao de bits, usando instrues lgicas

Operaes lgicas so bastante teis se, dois ou mais bits num byte, tm que
ser alterados ou testados, num ciclo de relgio.

- 110 -

2005 Primetec Engenharia de Sistemas, Lda.

9.3.1. Mudar bit especfico para 1

OR
OR
OR

com um byte de todos os bits 0, excepto o bit a mudar para 1


com 0 deixa o bit no mesmo estado
com 1 resulta em 1

9.3.2. Mudar bit especfico para 0

AND
OR
OR

com um byte de todos os bits 1, excepto o bit a mudar para 0


com 0 deixa o bit no mesmo estado
com 1 resulta em 1

9.3.3. Mudar bit especfico para o seu complemento

Pode ser utilizado tanto de 0 para 1, como de 1 para 0:


XOR
XOR
XOR

com um byte de todos os bits 0, excepto o bit a mudar para o


seu complemento
com 1 muda o bit para o seu complemento
com 0 resulta sem mudana

9.3.4. Comparao testa para byte especfico

XOR

com o byte igual ao que se procura. Se a flag Z estiver activada,


eles so iguais.

9.3.5. Testa para 0

OR

com 0, e depois testa a flag Z. Se Z estiver activado, os bytes


so iguais, e o byte testado 0.

- 111 -

2005 Primetec Engenharia de Sistemas, Lda.

9.4. Sequncias

A instruo RLF pode ser usada para deslocar o contedo do registo para a
esquerda, um bit de cada vez. Sempre que a instruo executada, o byte desloca-se
uma posio para a esquerda, o bit mais esquerda movido para a flag de Carry, e o
contedo da flag de Carry carregado no bit menos significante do registo.
A instruo RRF tem exactamente o mesmo procedimento, mas na direco
oposta.
Por vezes, poder ser necessrio fazer circular um registo, sendo um requisito
para aplicaes industriais, ou quando alimentando um display de LEDs.
A instruo RLF/RRF mantm o valor inicial do registo, fazendo o ciclo
completo atravs da Carry, e de volta, para o bit menos significativo.
Uma vez que o contedo da Carry reciclado, de cada vez que usamos a
instruo RLF/RRF, a Carry dever ser posta num estado conhecido (1 ou 0). Para
o fazer, basta usar a instruo BCF/BSF no bit 0 do registo STATUS (flag de Carry).

Fig. 92 - Sequncia com RLF e RRF

- 112 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 10
(10) Tabelas

- 113 -

2005 Primetec Engenharia de Sistemas, Lda.

Uma tabela de procura pode ser usada para converter um cdigo para outro.
Suponhamos que queremos converter valores hexadecimais, para sinais de 7segmentos, para aplicar num mostrador.
HEX
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09

7-segmentos
0x3F
0x06
0x5B
0x4F
0x66
0x6D
0x7D
0x07
0x7F
0x6F

gfe
0011
0000
0101
0100
0110
0110
0111
0000
0111
0110

dcba
1111
0110
1011
1111
0110
1101
1101
0111
1111
1111

O cdigo, de 7-segmentos, pode ser retirado da tabela, usando endereamento


relativo. Se o valor hexadecimal for somado ao PC, o valor em 7-segmentos estar
nesse endereo. O exemplo segue:
org
start bsf
movlw
movwf
bcf
clrf
char

0x0000
status, 5
0x00
trisb
status, 5
portb

seg

movlw 0x02
call segmnt
movwf portb

loop

goto

segmnt
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

loop
pc,f
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
0x07
0x7f
0x6f

;Banco 1
;Carrega W com 0x00
;Configura porta B
;Banco 0
;Carrega w com 0x02
;Chama a subrotina que contem o cdigo 7;Carrega a porta B com o valor lido na
; tabela
;Ciclo infinito
;
;Soma W ao PC
;0 7-segmentos
;1 7-segmentos
;2 7-segmentos
;3 7-segmentos
;4 7-segmentos
;5 7-segmentos
;6 7-segmentos
;7 7-segmentos
;8 7-segmentos
;9 7-segmentos

O processador soma o valor hexadecimal ao PC, onde este vai ser o apontador
para o cdigo de 7-segmentos, que ir ser posteriormente posto na sada da porta B.
A instruo ADDWF soma 8 bits aos 8 bits baixos do PC, e no afecta os 5
bits altos.

- 114 -

2005 Primetec Engenharia de Sistemas, Lda.

Captulo 11
(11) Interrupes

- 115 -

2005 Primetec Engenharia de Sistemas, Lda.

Quando um evento ocorre, que necessita da ateno do microcontrolador, uma


interrupo pode ser gerada, que vai fazer com que o mesmo pare o que est a
executar, execute a tarefa de interrupo, e retorne ao ponto onde estava no incio.
Quando uma interrupo ocorre, a instruo que est a ser executada
terminada, e o chip salta para o endereo 0x0004 do programa, e executa as instrues
nessa posio de memria. Este programa chamado de rotina de interrupo. Esta
rotina de interrupo, pode fazer com que o chip guarde os dados do status do
programa que estava a executar, quando a interrupo ocorreu, para que quando voltar
ao programa principal, saiba o que estava a fazer. Ento, a rotina de interrupo
executada e quando terminar, volta a pr o status como estava no incio.
As interrupes podem ser activadas/desactivadas a dois niveis: global e
particular, e podem ser geradas interna, ou externamente.

Fig. 93 Lgica dos circuitos de interrupes

11.1. Interrupo RB0/INT

A interrupo externa no pino RB0/INT, activada por nvel


ascendente/descendente, de acordo com o bit INTEDG. Quando um nvel vlido
aparece na porta RB0/INT, o bit INTF activado. A interrupo pode ser desactivada
pelo bit INTE, e o bit INTF deve ser desactivado por software, antes de sair da rotina
de interrupo.
A interrupo RB0/INT pode acordar o chip do SLEEP, se o bit INTE for
activado antes da entrada em modo SLEEP.

- 116 -

2005 Primetec Engenharia de Sistemas, Lda.

11.2. Interrupo TMR0

Um trmino da contagem do TMR0 (0xFF -> 0x00), vai activar o bit de


interrupo TMR0, T0IF. Esta interrupo pode ser activada/desactivada pelo bit
T0IE.
11.3. Interrupo PORTB

A interrupo acontece quando h uma mudana de estado lgico, nos pinos 4,


5, 6 ou 7, da porta B, e que activa o bit RBIF.
Esta interrupo activada/desactivada pelo bit RBIE. Apenas as portas
referidas acima, e como entradas, so usveis.
O valor do pino de entrada, comparado com o ltimo valor lido na porta, e as
diferenas so OR juntas, para gerar uma interrupo RBIF.
A interrupo pode ser limpa por: desactivando o bit RBIE, ou lendo a porta
B, e depois limpando o bit RBIF. Isto termina a condio de diferena, e possibilita
a limpeza do RBIF.
Este tipo de interrupo recomendada para acordar o chip com uso de
teclados, e operaes onde a porta B apenas usada para interrupes de mudana de
nvel.

11.4. GIE Bit de activao geral de interrupes

Quando ocorre uma interrupo, o bit de interrupo geral desactivado,


prevenindo que futuras interrupes perturbem a execuo da rotina de interrupo
em curso.
Quando da sada da mesma, pelo uso da instruo RETFIE, o bit GIE
novamente activado.

Fig. 94 Registos associados s interrupes

- 117 -

2005 Primetec Engenharia de Sistemas, Lda.

11.5. Gravao de valores de registos, quando das interrupes

Durante uma interrupo, apenas o valor do PC gravado para a stack; os


registos W e STATUS, tm que ser gravados por software.
O exemplo seguinte demonstra como tal poder ser feito, executando as
seguintes funes, e por ordem:

Grava o registo W
Grava o registo STATUS
Executa a rotina de interrupo
Devolve os valores ao STATUS
Devolve os valores ao W

MOVWF W TEMP
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_TEMP
:
:(ISR)
:
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W

;Copia o W para um registo


; temporario
;swap ao status. Grava em W
;Banco 0
;Grava status no registo status_temp

;swap ao STATUS_TEMP. Grava em W


; W volta ao estado inicial
;
;swap ao W_TEMP
;swap ao W_TEMP. Grava em W

11.6. Atraso de interrupo

Quando de uma interrupo, vai haver um atraso antes da execuo da rotina


da mesma. Este atraso de 3 a 4 ciclos de relgio.
O uso de interrupes, reala a potncia do microcontrolador; podem ser
peridicas, controladas por um relgio em tempo real, ou podem estar relacionadas
com um evento tipo contador, ou eventos externos.
O microcontrolador no necessita de ficar num ciclo, espera que algo
acontea, por isso, pode executar outras tarefas teis, enquanto a interrupo no
surge.

- 118 -

2005 Primetec Engenharia de Sistemas, Lda.

Notas:

- 119 -

2005 Primetec Engenharia de Sistemas, Lda.

Você também pode gostar