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 Sadas Armazenamento auxiliar

Entradas

Unidade Central de Processamento

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

Entradas

Sadas

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

Entradas

Sadas
Memria Cdigo de Programa

Unidade Central de Processamento


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

3 4

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

- 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. Banco 0 Banco 1 Banco 2 Banco 3 RP1 0 0 1 1 Fig. 20 - Acesso aos Bancos de Memria RP0 0 1 0 1

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 movlw 0x01 call tabela goto org $ 0x00fe ;carrega W com 0 ;chama a subrotina da tabela, para ; converter ;carrega W com 0 ;chama a subrotina da tabela, para ; converter ;endereco onde estah a TABELA ;adiciona W ao Program Counter - Contador ; de Programa ;caracter ASCII 'a'

tabela addwf pcl,f retlw retlw retlw retlw retlw 'a' 'e' 'i' 'o' 'u'

19 20

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

- 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 24

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

- 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 ;Limpa o contedo do registo 20h

26

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 ou #include p16f628A.INC <p16f628A.INC> ;Se o ficheiro estiver na ; directoria pr-definida do ; MPLab ;Se o ficheiro estiver noutra

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 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

- 49 -

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 ou movwf

0x20 TEMPO

;Varivel TEMPO que fica guardada na ;posio de memria 0x20 ;Carrega o valor 0x20 em W

TEMPO

;Guarda na posio de memria 0x20 ; (TEMPO) o contedo de W

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 ... END 0x20 TEMPO ;Varivel TEMPO que fica guardada na ;posio de memria 0x20 ;Carrega o valor 0x20 em W

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 RRF SWAPF f f,d f,d f,d f,b f,b f,d 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 BTFSS DECFSZ INCFSZ k k k f,b f,b f,d 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 SLEEP

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.

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 ADDLW SUBLW SUBWF f,d k k 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 000 001 010 011 100 101 110 111 TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 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 movlw movwf movlw movwf movlw movwf mowlw movwf equ 20h ; Variavel de contagem 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

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

00h TRISB 02h contador1 0Bh TMR1H DBh TMR1L

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 movf btfss goto movlw xorwf

0004h 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 = 9600 = 16000000 64( x + 1) x = 25.042

Fosc 64( x + 1)

Baud Rate calculado =

16000000 = 9615 64(25 + 1)

Erro =

( 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 ;Banco 1 ;Activa a escrita ;Desactiva as interrupes ; ;Escreve 55h ; ;Escreve AAh ;Activa bit WR ;Inicia a escrita ;Activa interrupes

BSF INTCON, GIE

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

;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

PORTA

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 1010 0xA

- 105 -

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 sublw N btfsc/s ... status, 2 ;carrega W com valor 0xXX ;subtrai contedo de W, do valor N. ; Resultado em W ;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 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

W W

<= >

N N

- 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 W 0x04 0x05 0x06 Z 0 1 0 C 1 1 0

STATUS PORTB

equ equ org

0x03 0x06 0x0000 status, 5 0x00 TRISB status, 5 ;Banco 1 ;carrega W com 0x00 ;configura porta B ;Banco 0 ;carrega W com 0x04 ;subtrai W de N (0x05) ;carrega W com o STATUS ;mostra o STATUS na porta B ;ciclo infinito

start

bsf movlw movwf bcf

movlw 0x04 sublw 0x05 movf status,w movwf PORTB repete goto end repete

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 seg loop 0x0000 status, 5 0x00 trisb status, 5 portb ;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

movlw 0x02 call segmnt movwf portb goto loop pc,f 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f

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

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