254
antónio sérgio sena microcontroladores PIC www.mecatronicadegaragem.blogspot.com

Livro Microcontroladores PIC - Antonio Sergio Sena

Embed Size (px)

Citation preview

Page 1: Livro Microcontroladores PIC - Antonio Sergio Sena

antó

nio

sérg

io s

ena

microcontroladoresPIC

www.mecatronicadegaragem.blogspot.com

Page 2: Livro Microcontroladores PIC - Antonio Sergio Sena

antó

nio

sérg

io s

ena

microcontroladoresPIC

www.mecatronicadegaragem.blogspot.com

Page 3: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 3

Índice de Conteúdos

COMO TUDO COMEÇOU .................................................................... 10

Microcontrolador versus Microprocessador .............................................. 13

Conceitos Básicos ...................................................................................... 14

Um mundo de números ......................................................................................................................14Sistema de numeração Binário ...........................................................................................................15Sistemas de numeração Hexadecimal ................................................................................................16O código BCD....................................................................................................................................17Conversão de Binário para Decimal ..................................................................................................17Conversão de Hexadecimal para Decimal .........................................................................................18Conversão de Hexadecimal para Binário ...........................................................................................18Bit .......................................................................................................................................................19Byte ....................................................................................................................................................19Circuitos Lógicos ...............................................................................................................................20Porta lógica AND ...............................................................................................................................20Porta lógica OR ..................................................................................................................................21Porta lógica NOT ...............................................................................................................................21Porta lógica EXCLUSIVE OR / XOR ...............................................................................................22Registo ...............................................................................................................................................23SFR / Special Function Register - Registo de Função Especial ........................................................23Portas de Entrada/Saída - I/O .............................................................................................................24Unidade de memória ..........................................................................................................................26Interrupções ........................................................................................................................................27CPU - Unidade Central de Processamento ........................................................................................28Barramento .........................................................................................................................................29Comunicações Série ...........................................................................................................................29Baud Rate - Velocidade de transferência ...........................................................................................30Oscilador ............................................................................................................................................32Circuito de Alimentação ....................................................................................................................32Temporizadores e Contadores ............................................................................................................33Temporizadores / Contadores ............................................................................................................34Contadores .........................................................................................................................................37Temporizador Watchdog ....................................................................................................................37Conversores Analógico/Digital ..........................................................................................................38

www.mecatronicadegaragem.blogspot.com

Page 4: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 4

Arquitectura Interna .................................................................................. 40

Arquitectura von-Neumann ...............................................................................................................40Arquitectura Harvard .........................................................................................................................40

Conjunto de Instruções .............................................................................. 42

Como escolher o microcontrolador certo para a aplicação? ........................ 43

Microcontroladores PIC ............................................................................ 43

Microcontrolador PIC16F887 .................................................................. 44

Uma panorâmica ........................................................................................ 44

Descrição dos pinos ...........................................................................................................................48CPU ....................................................................................................................................................51Memória .............................................................................................................................................52Registos de função geral - GPR .........................................................................................................54Registos de função especial - SFR .....................................................................................................55Bancos de Memória ...........................................................................................................................55Pilha de memória - Stack ...................................................................................................................59Sistema de interrupção .......................................................................................................................60Como usar os Registos de função especial - SFR ..............................................................................61

Os Registos de Função Especial - SFR - do CPU ....................................... 62

Características e Funções ........................................................................... 62

Registo STATUS ................................................................................................................................62Registo OPTION_REG ......................................................................................................................64Registos do Sistema de Interrupções .................................................................................................66Registo PCON ....................................................................................................................................75Registos PCL e PCLATH ...................................................................................................................76Endereçamento Indirecto ...................................................................................................................79Portas I/O - Entrada/Saída ....................................................................... 80

Funcionalidades e Funções ......................................................................... 80

www.mecatronicadegaragem.blogspot.com

Page 5: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 5

Registos PORTA e TRISA .................................................................................................................81Unidade ULPWU ...............................................................................................................................82Registos PORTB e TRISB .................................................................................................................84Pino RB0/INT ....................................................................................................................................87Pinos RB6 e RB7 ...............................................................................................................................87Registos PORTC e TRISC .................................................................................................................88Registos PORTD e TRISD .................................................................................................................89Registos PORTE e TRISE..................................................................................................................89Registos ANSEL e ANSELH .............................................................................................................90

Temporizadores ......................................................................................... 93

Temporizador TMR0 ................................................................................ 93

Registo OPTION_REG............................................................................ 94

Temporizador TMR1 ................................................................................ 99

Divisor do TMR1 ...............................................................................................................................100Oscilador do TMR1 ...........................................................................................................................101Gate do TMR1 ...................................................................................................................................101TMR1 em modo de Temporizador .....................................................................................................102Oscilador do TMR1 ...........................................................................................................................103TMR1 em modo de Contador ............................................................................................................104Registo T1CON .................................................................................................................................105

Temporizador TMR2 ................................................................................ 106

Registo T2CON .................................................................................................................................108

Módulos CCP ............................................................................................ 110

Capture/Compare/PWM - Captura/Compara/PWM .............................. 110

Módulo CCP1 ........................................................................................... 110

Modo de Captura com CCP1 .............................................................................................................111Modo de Comparação com CCP1 ......................................................................................................112

www.mecatronicadegaragem.blogspot.com

Page 6: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 6

Modo de PWM com CCP1 ................................................................................................................113Periodo do PWM................................................................................................................................116Duty-Cycle do PWM .........................................................................................................................116Resolução do PWM ...........................................................................................................................117Registos CCP1CON ...........................................................................................................................117

Módulo CCP2 ........................................................................................... 120

Registo CCP2CON ............................................................................................................................120

Confi guração do módulo CCP1, para funcionamento em PWM ............... 121

Modo avançado do CCP1 .......................................................................... 122

Módulos de Comunicação Série ................................................................. 123

Modo Assíncrono da EUSART ................................................................. 124

Transmissor Assíncrono da EUSART ................................................................................................125Receptor Assíncrono da EUSART .....................................................................................................127BRG - Baud Rate Generator - Gerador de Relógio para a EUSART ................................................133Registo BAUDCTL ............................................................................................................................137Resumidamente: .................................................................................................................................139

Modo Síncrono da EUSART ..................................................................... 141

Modo SPI ...........................................................................................................................................142Modo I2C ...........................................................................................................................................146I2C em modo Mestre .........................................................................................................................154

Módulos Analógicos .................................................................................. 161

Registos e Modo do ADC - Conversor A/D.......................................................................................161Registos ADRESH e ADRESL ..........................................................................................................162

www.mecatronicadegaragem.blogspot.com

Page 7: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 7

Requisitos da Aquisição A/D .................................................................... 163

Periodo do ADC .................................................................................................................................163

Como usar o Conversor A/D ..................................................................... 164

Registo ADCON0 ..............................................................................................................................165Registo ADCON1 ..............................................................................................................................167Resumidamente: .................................................................................................................................167

Comparador Analógico .............................................................................. 168

Fonte de Tensão de Referência interna ..............................................................................................169Comparadores e funcionamento com Interrupções ............................................................................170Registo CM1CON0 ............................................................................................................................171Registo CM2CON0 ............................................................................................................................173Registo CM2CON1 ............................................................................................................................175Registo VRCON ................................................................................................................................176

Em resumo : ............................................................................................... 177

Outros circuitos internos ........................................................................... 178

Oscilador, EEPROM e Reset ..................................................................... 178

Registo OSCCON ..............................................................................................................................179

Modos de Relógio Externo ........................................................................ 181

Modo EC - Oscilador Externo ...........................................................................................................181Modo LP, XT ou HS - Oscilador Externo ..........................................................................................183Ressoador Cerâmico no modo XT ou HS ..........................................................................................184Modo RC e RCIO - Oscilador Externo ..............................................................................................185

www.mecatronicadegaragem.blogspot.com

Page 8: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 8

Modos de Relógio Interno ......................................................................... 186

Modo INTOSC - Oscilador Interno ...................................................................................................186Modo INTOSCIO - Oscilador Interno ...............................................................................................186

Confi guração do Oscilador Interno ............................................................ 187

Modo de Arranque de Relógio a Duas-Velocidades .................................. 188

Fail-Safe Clock Monitor - FSCM - Monitor de Relógio contra falhas ..............................................188Registo OSCTUNE ............................................................................................................................189

Memória EEPROM ................................................................................... 191

Registo EECON1 ...............................................................................................................................191Leitura da EEPROM ..........................................................................................................................192Escrita da EEPROM ..........................................................................................................................193

Reset! Black-out, Brown-out ou Ruidos? ................................................... 195

Reset por Black-out - Falha de Energia Súbita ..................................................................................196Reset por Brown-out - Descida de Tensão Lenta e Gradual ..............................................................196Ruidos ................................................................................................................................................197Pino de MCLR ...................................................................................................................................197

Conjunto de Instruções ............................................................................. 198

Conjunto de Instruções da Família PIC16Fxx de Microcontroladores ...... 198

Transferência de dados .............................................................................. 200

Lógicas e aritméticas .................................................................................. 200

Operações com bits .................................................................................... 201

www.mecatronicadegaragem.blogspot.com

Page 9: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Índice

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 9

Controlo de Execução de um Programa .............................................................................................201Período de execução da instrução ......................................................................................................203Listagem das instruções .....................................................................................................................203

Como programar um Microcontrolador .................................................... 224

Linguagem Assembly ................................................................................. 226

Instruções .................................................................................................. 227

Operandos ................................................................................................. 227

Comentários .............................................................................................. 228

Directivas .................................................................................................. 228

Directiva PROCESSOR .....................................................................................................................228Directiva EQU ...................................................................................................................................228Directiva ORG ...................................................................................................................................229Directiva END ...................................................................................................................................229Directiva .............................................................................................................................................$IN-CLUDE ..............................................................................................................................................230Directivas CBLOCK e ENDC ...........................................................................................................230Directivas IF, ENDIF e ELSE ............................................................................................................231Directiva BANKSEL .........................................................................................................................232

Operadores aritméticos de assembler ........................................................ 233

Exemplo de como escrever um Programa ................................................... 234

Ficheiros criados ao compilar um programa ............................................... 236

MPLAB ..................................................................................................... 238

Instalando o programa - MPLAB ......................................................................................................238A implementação de um PROJECTO ................................................................................................243Escrever um novo Programa ..............................................................................................................245O primeiro programa ..........................................................................................................................247Simulador ...........................................................................................................................................249

www.mecatronicadegaragem.blogspot.com

Page 10: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 1

COMO TUDO COMEÇOU

Em 1969, uma equipa de engenheiros Japoneses da BUSICOM, foi para os EUA com o pedido de desenhar

alguns circuitos integrados para calculadoras. O pedido foi enviado para a INTEL, e Marcian Hoff estava en-

carregue do projecto. Tendo experiência em trabalhar com um computador, o PDP8, ele teve a ideia de sugerir

soluções diferentes, ao invés dos designs sugeridos pelos Japoneses. A ideia dele presumia que o funcionamento

do circuito integrado, era determinado pelo programa armazenado dentro do chip. Signifi cava que a confi gura-

ção era mais simples, mas iria requerer muito mais memória que o projecto dos engenheiros Japoneses.

Após um certo tempo, apesar de os Japoneses estarem ainda a tentar encontrar uma solução mais simples, a

ideia de Marcian venceu, e o primeiro microprocessador nasceu. Federico Faggin foi uma grande ajuda em

tornar a ideia num produto acabado. E, nove meses após ter sido contratado, a INTEL tinha acabado de de-

senvolver um produto desde a ideia original.

Em 1971, a INTEL obteve os direitos de venda deste circuito integrado, e antes disso já tinha comprado a

licença da BUSICOM. Durante esse ano, um microprocessador chamado 4004 foi lançado no mercado. Esse

foi o primeiro processador de 4 bits, com a velocidade de 6000 instruções por segundo.

Não muito tempo depois, uma empresa Americana chamada CTC pediu à INTEL e TEXAS Instruments,

para fabricarem um microprocessador de 8 bits, para ser aplicado nos seus terminais. Embora a CTC tenha

desistido do projecto, a INTEL e a TEXAS continuaram o trabalho e, em Abril de 1972, o primeiro micro-

processador de 8 bits, chamado de 8008, foi lançado no mercado. Podia endereçar 16Kb de memória, tinha 45

instruções e uma velocidade de 300.000 instruções por segundo. Esse microprocessador foi o predecessor de

todos os actuais microprocessadores.

A INTEL continuou o desenvolvimento e, em Abril de 1974, lançou um processador de 8 bits, chamado de

8080. Podia endereçar 64Kb de memória, tinha 75 instruções, e um preço inicial de $360.

Outra empresa Americana chamada MOTOROLA, depressa se apercebeu do potencial, e então lançaram o

www.mecatronicadegaragem.blogspot.com

Page 11: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 2

microprocessador de 8 bit, 6800. O engenheiro chefe era Chuck Peddle. Aparte do microprocessador, a MO-

TOROLA também fabricava periféricos como o 6820 e 6850.

Nessa altura muitas empresas reconheciam a importância dos microprocessadores, e iniciaram o seu próprio

desenvolvimento. Chuck Peddle deixou a MOTOROLA, juntou-se à MOS Technology, e continuou o traba-

lho intensivo no desenvolvimento em microprocessadores.

Na exposição WESCON, nos EUA em 1975, um evento crucial na história dos microprocessadores aconte-

ceu. A MOS Technology anunciou que estava a vender os processadores 6501 e 6502 a $25 cada, que os inte-

ressados podiam comprar na hora. Foi tamanha a sensação, que muita gente pensava em fraude, considerando

que a concorrência vendia o 8080 e 6800, a $179 cada.

No primeiro dia da exposição, em resposta à concorrência, a MOTOROLA e a INTEL baixaram os seus

microprocessadores para $69,95. A MOTOROLA acusou a MOS Technology e Chuck Peddle de plagiarem

o protegido 6800.

Devido a isto, a MOS Technology desistiu do fabrico do 6501, mas continuou o fabrico do 6502. Era um pro-

cessador de 8 bits, com 56 instruções, e capaz de endereçar directamente 64Kb de memória.

Devido ao seu baixo preço, o 6502 tornou-se muito popular, e então foi instalado em computadores como o

KIM-1, Apple I, Apple II, Atari, Commodore, Acorn, Oric, Galeb, Orao, Ultra e muitos outros.

Em breve, muitas empresas começaram a fabricar o 6502 (Rockwell, Sznertek, GTE, NCR, Ricoh, Commo-

dore assumiram a MOS Technology).

No ano da sua prosperidade, 1982, este processador estava a ser vendido à taxa de 15 milhões de unidades por

ano.

Outras empresas não desistiram. Frederico Faggin deixou a INTEL, e abriu a sua própria empresa chamada

ZILOG INC. Em 1976 a ZILOG anunciou o Z80. Quando desenhou este processador, Faggin tomou uma

decisão crucial. O 8080 já tinha sido desenvolvido, e ele apercebeu-se que muitos iriam continuar fi eis a esse

processador, devido aos grandes gastos em reescrever todos os programas. Então, ele decidiu que este novo

processador teria de ser compativel com o 8080, ou seja, teria de poder correr todos os programas escritos para

o 8080.

Aparte desta decisão, muitas outras funcionalidades foram acrescentadas, para que o Z80 fosse o micropro-

www.mecatronicadegaragem.blogspot.com

Page 12: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 3

cessador mais poderoso da altura. Podia endereçar directamente 64Kb de memória, tinha 176 instruções, um

grande número de registos, uma opção interna para fazer o refrescamento da RAM, só uma fonte de alimenta-

ção, maior velocidade, entre outros. O Z80 foi um grande sucesso, e toda a gente substituiu o 8080 pelo Z80.

Além da ZILOG, outros fabricantes como Mostek, NEC, SHARP e SGS apareceram logo a seguir. O Z80

era o coração de muitos computadores, tais como: Spectrum, Partner, TRS703, Z-3 and Galaxy.

Em 1976 a INTEL lançou uma versão melhorada do microprocessador de 8 bits, chamado de 8085. No en-

tanto, o Z80 era muito melhor, e a INTEL perdeu a batalha.

Mesmo após outros microprocessadores terem aparecido no mercado, 6809, 2650, SC/MP, etc, não havia

grandes melhoramentos que justifi casse aos fabricantes mudarem de processador, por isso o 6502, o Z80 e o

6800 continuaram os microprocessadores dominantes, e durante muito tempo.

www.mecatronicadegaragem.blogspot.com

Page 13: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 4

Microcontrolador versus Microprocessador

Um microcontrolador difere de um microprocessador em diversas formas.

A primeira, e mais importante, é a sua funcionalidade. Para que um microprocessador possa ser usado, outros

componentes tais como memória, têem que ser ligados ao chip. Mesmo sendo os microprocessador considera-

dos potentes máquinas matemáticas, o seu ponto fraco é a sua parca possibilidade de comunicar com periféri-

cos.

Então, de maneira a que possa comunicar com periféricos, o microprocessador tem que usar circuitos especiais,

como chips externos.

Resumindo, os microprocessadores são o coração dos computadores. Era assim no início, e ainda nos dias de

hoje se mantêm.

Microcontrolador versus Microprocessador

www.mecatronicadegaragem.blogspot.com

Page 14: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 5

Por outro lado, o microcontrolador está desenhado para ser um “tudo-em-um”. Não são necessários componen-

tes externos, para as suas aplicações, porque todos os circuitos, que pertencem aos periféricos, já estão dentro

do chip. Poupa tempo e espaço necessários, aquando do design de um sistema.

Conceitos Básicos

Um mundo de números

O universo por ser descrito com apenas 10 digitos. Mas, precisamos apenas de 10 digitos? Claro que não, é

apenas uma questão de hábito.

Por exemplo, o número 764 o que signifi ca?: quatro unidades, seis dezenas e sete centenas, ou 4 + 60 + 700,

ou 4*1 + 6*10 + 7*100!

Podemos representar o número de uma maneira mais científi ca? a resposta é positiva: 4*10^0 + 6*10^1 +

7*10^2. Mas porquê? Simplesmente porque usamos um sistema de numeração de base 10, ou seja, um sistema

de numeração décimal.

www.mecatronicadegaragem.blogspot.com

Page 15: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 6

Sistema de numeração Binário

O que aconteceria se apenas dois digitos pudessem er usados, o 0 e o 1?

Nada de especial, continuaríamos a usar números mas de forma diferente. Por exemplo: 11011010. Qual a

quantidade que o número 11011010 indica?

De maneira a que possamos aprender isto, devemos seguir a mesma lógica do exemplo anterior, mas em ordem

inversa. Não esquecer que se trata de matemática com apenas dois digitos, ou seja, um sistema de numeração

binário.

www.mecatronicadegaragem.blogspot.com

Page 16: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 7

É o mesmo número, representado de duas formas distintas. A única diferença reside no número de dígitos

necessários para escrever um número. Um dígito (2) é usado para escrever o número 2 em décimal, onde dois

dígitos (1 e 0), são usados para escrever esse número em sistema binário.

É chamado de nível lógico zero (0) e nível lógico um (1), com os quais a electrónica perfeita e simplesmente

trabalha as operações complexas matemáticas. É a electrónica que aplica a matemática, onde todos os números

são representados por apenas dois dígitos, e onde só importa saber se há tensão eléctrica, ou não. Estamos a

falar de electrónica digital.

Sistemas de numeração Hexadecimal

No início do desenvolvimento dos computadores, percebeu-se que as pessoas tinham muitas difi culdades em

trabalhar com numeração binária. Devido a isto, um novo sistema de numeração foi desenvolvido, e usando 16

digitos distintos. Os primeiros dez dígitos são os tradicionais (0, 1, 2,... 9), mas existem mais seis. Por forma a

não inventar novos símbolos, convencionou-se usar as seis primeiras letras do alfabeto: A, B, C, D, E e F.

Um sistema hexadecimal de numeração, consistindo nos dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F foi

estabelecido.

www.mecatronicadegaragem.blogspot.com

Page 17: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 8

O maior número que pode ser representado por 4 dígitos binários é 1111. E corresponde ao número 15 no

sistema decimal. Esse número no sistema hexadecimal, é representado pelo dígito F. É o maior número de um

dígito no sistema hexadecimal. O número da fi gura escrito com oito dígitos, é ao mesmo tempo o número he-

xadecimal de dois dígitos. Não esquecer que os computadores usam números binários de 8 dígitos.

O código BCD

O código BCD é um código binário apenas para números decimais. É usado para fazer comunicar os circuitos

electrónicos com os periféricos, e num sistema binário dentro do seu próprio mundo. Consiste em números

binários de quatro dígitos, que representam os primeiros dez dígitos décimais (0, 1, 2,... 9). Embora quatro

digitos nos dêem 16 combinações possiveis, apenas as primeiras 10 são usadas.

Conversão de Binário para Decimal

Os digitos de um número binário têem diferentes valores, dependendo da posição onde se encontram. Adi-

cionalmente, cada posição pode ter 1 ou 0, e o seu valor facilmente determinado através da sua posição desde

a direita. Para executar a conversão, é necessário multiplicar valores pelos dígitos correspondentes, e somar os

resultados.

110 = (1 * 2^2) + (1 * 2^1) + (0 * 2^0) = 6

www.mecatronicadegaragem.blogspot.com

Page 18: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 9

Conversão de Hexadecimal para Decimal

Por forma a se fazer a conversão de um número hexadecimal para decimal, cada digito hexadecimal deve ser

multiplicado por 16, levantado ao expoente da sua posição. Por exemplo:

Conversão de Hexadecimal para Binário

Não é necessário nenhum cálculo, de maneira a converter números hexadecimais para binario. Os dígitos hexa-

cedimais são simplesmente substituidos pelos seus congéneres 4 dígitos binários. Por exemplo:

Esta tabela comparativa, tem os valores dos números de 0 a 255, em três sistemas de numeração distintos:

www.mecatronicadegaragem.blogspot.com

Page 19: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 10

Bit

Um bit é um dígito binário. De igual forma que o sistema de numeração decimal, no qual os dígitos de um nú-

mero não têem o mesmo valor, o signifi cado do bit depende da sua posição no número binário. Então, não faz

sentido falar de unidades, dezenas, etc. Deve-se, sim, falar do bit zero, bit um, bit dois, etc. Sempre a contar do

lado direito. E, como o sistema binário usa apenas dois dígitos, 0 e 1, o valor de um bit só pode ser 0 ou 1.

Não nos devemos confundir, se o bit tiver valor de 4, 16 ou 32. Isso signifi ca que os valores dos bits estão repre-

sentado em sistema decimal. Será correcto dizer que: o valor do quinto bit de um número binário, é equivalente

ao decimal 32.

Byte

Um byte consiste em oito bits agrupados. À semelhança dos digitos de outro qualquer sistema de numeração,

www.mecatronicadegaragem.blogspot.com

Page 20: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 11

os dígitos dos bytes não têem o mesmo signifi cado. O maior valor tem o bit mais à esquerda chamado de Bit

Mais Signifi cativo (MSB - Most Signifi cant Bit). O bit mais à direita tem o menor valor, e é chamado de Bit

Menos Signifi cativo (LSB - Least Signifi cant Bit). Como um byte pode ter 256 combinações possiveis de bits,

o maior número decimal possível de representar é o 255, pois há uma combinação que representa zero.

Um nibble é representado como meio byte. Dependendo de que metade do byte estamos a falar, há nibbles

“altos” ou “baixos”.

Circuitos Lógicos

A electrónica de que são feitos os circuitos integrados, microcontroladores ou microprocessadores, é composta

de elementos chamados de “circuitos lógicos” ou “portas lógicas”.

Os princípios operacionais desdes elementos foram estabelecidos pelo matemático Inglês, George Boole, e a

ideia central era expressar formas lógicas, como funções de álgebra. Mais tarde o princípio evoluiu para o que

hoje conhecemos como circuitos lógicos AND, OR e NOT, também conhecido como Álgebra de Boole.

Como algumas instruções de programa do microcontrolador funcionam da mesma maneira que as portas lógi-

cas, o seu princípio de funcionamento é descrito a seguir.

Porta lógica AND

A porta lógica AND tem duas ou mais entradas, e uma saída. A saída terá um 1 lógico, se as as suas entradas

A e B estiverem a nivel lógico 1.

www.mecatronicadegaragem.blogspot.com

Page 21: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 12

A tabela mostra dependência entre entradas e saída. Qualquer outra combinação nas entradas, dará um nivel

lógico 0 na saída.

Quando usada num programa, a operação lógica AND é feita por instruções, que serão discutidas mais à fren-

te. Por agora, é importante referir que AND num programa, faz correspondência aos bits de dois registos.

Porta lógica OR

A porta lógica OR tem duas ou mais entradas, e uma saída. A saída terá um 1 lógico, se qualquer das suas en-

tradas A ou B estiverem a nivel lógico 1.

Num programa, a operação lógica OR é feita entre os bits correspondentes dos registos. À semelhança da ope-

ração lógica AND.

Porta lógica NOT

A porta lógica NOT tem apenas uma entrada, e uma saída. Quando um 0 lógico está presente na entrada, a

www.mecatronicadegaragem.blogspot.com

Page 22: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 13

saída apresenta um 1 lógico, e vice-versa. Esta porta é também chamada de Inversora.

Se for executada num programa, a operação NOT é feita num byte. O resultado é esse byte com todos os bits inver-

tidos. Se o byte for considerado um número, o valor invertido é na realidade o complemento desse número. Isto é, o

complemento de um número é o que é necessário adicionar-lhe, para que o mesmo atinja o máximo valor de 8 bits

(255).

Porta lógica EXCLUSIVE OR / XOR

Esta porta é uma combinação das atrás referidas. A saída apresenta um 1 lógico, apenas quando as suas entradas

apresentam niveis lógicos diferentes.

Em um programa, esta operação também é usada para comparar dois bytes, para inverter quaisquer bits de um byte

ou para subtrair. E não há o perigo de subtrair um número grande, de um menor.

www.mecatronicadegaragem.blogspot.com

Page 23: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 14

Registo

Um registo é um circuito electrónico que consegue memorizar o estado de um byte.

Registo

SFR / Special Function Register - Registo de Função Especial

Como acrescento aos registos que não têem qualquer função predeterminada, todos os microcontroladores

têem alguns registos em que a sua função está predeterminada pelo fabricante. Os seus bits estão interligados

fi sicamente aos circuitos internos, tais como temporizadores, conversores A/D, osciladores, portas série e ou-

tros, o que signifi ca que são responsaveis pelo funcionamento do microcontrolador. Como um byte tem oito

bits, é como se fossem oito interruptores que comandam outros pequenos circuitos dentro do chip. Os SFR

têem essa exacta função.

www.mecatronicadegaragem.blogspot.com

Page 24: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 15

SFR - Special Function Register - Registo de Função Especial

Portas de Entrada/Saída - I/O

De maneira a tornar o microcontrolador de alguma utilidade, o mesmo tem que estar ligado a electrónica adi-

cional no seu exterior, tais como periféricos. Cada micro tem um ou mais registos, chamados de Portas, ligados

aos pinos do mesmo.

O porquê de I/O, deve-se a que o utilizador pode alterar a função a seu belo prazer, e conforme a aplicação a

dar-lhes. Como exemplo, vamos supor que queremos comandar três LEDs, e simultaneamente controlar o es-

tado lógico de cinco botões: algumas portas têem de ser confi guradas para que haja três saídas e cinco entradas.

Esta confi guração é simples e confortavelmente feita por software, o que signifi ca, também, que a função pode

ser alterada durante a operação (on-the-fl y).

Uma das mais importantes especifi cações dos pinos I/O, é a corrente máxima que os mesmos podem suportar.

Para a maioria dos microcontroladores, a corrente possível de tirar de um pino é a sufi ciente para activar um

LED, ou outro dispositivo similar de baixa corrente (5-25mA). Se o microcontrolador tiver muitos pinos I/O,

então a máxima corrente de um só pino é menor. Resumidamente, não é possível que todos os pinos suportem

a máxima corrente, se houver mais de 80 pinos em total no microcontrolador. A corrente máxima descrita nas

especifi cações, é partilhada entre todos os portos I/O.

www.mecatronicadegaragem.blogspot.com

Page 25: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 16

Outra importante função, é a de que podem ter resistências de “pull-up” (polarização positiva). Estas resistên-

cias ligam os pinos à alimentação positiva, e o seu efeito é visivel quando o pino está confi gurado como entrada.

As novas versões de microcontroladores já têem estas resistências confi guraveis por software.

Normalmente, cada porto I/O é controlado por um SFR, o que signifi ca que, cada bit desse registo, determina

o estado do pino correspondente do microcontrolador. Como exemplo, escrevendo 1 lógico no bit desse SFR,

o pino da porta correspondente é automaticamente confi gurado como entrada. De outra maneira, escrevendo

0 lógico no SFR, o pino da porta correspondente é confi gurado como saída. A tensão deste pino, 0v ou 5v, cor-

responde ao estado do correspondente bit do registo da Porta.

Se escrevermos 0 em um bit de registo da Porta, esse pino apresentará 0v. Se, inversamente, escrevermos 1 no

mesmo bit, o pino já vai apresentar 5v.

Portas Input/Output - Entrada/Saída

www.mecatronicadegaragem.blogspot.com

Page 26: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 17

Unidade de memória

A memória é a parte do microcontrolador usada para o armazenamento de dados.

Cada endereço de memória corresponde a uma po-

sição de memória. O conteúdo dessa posição, é co-

nhecido através do seu endereçamento. A memória

tanto pode ser lida de, como pode ser escrita para.

Existem vários tipos de memória dentro do micro-

controlador.

ROM - Read Only Memory: Apenas de Leitura, é usada para permanentemente gravar o programa a execu-

tar.

OTP ROM - One Time Programmable ROM: ROM onde só se pode escrever o programa na memória ape-

nas uma vez. Se houver necessidade de alterar o mesmo, terá de se fazer a gravação em um novo chip.

UV EPROM - UltraViolet Erasable Programmable ROM: ROM que

permite apagar o programa, usando luz Ultra-Violeta. O chip tem uma

janela de vidro no topo do seu corpo, o que permite a passagem dos raios

Ultra-Violeta, que vão apagar a memória.

www.mecatronicadegaragem.blogspot.com

Page 27: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 18

FLASH - Este tipo de memória foi inventada pela Intel nos anos 80. O seu conteúdo pode ser escrito/apaga-

do quase que infi nitamente. Os microcontroladores com memória Flash são muito uteis para aprendizagem,

investigação e desenvolvimento, bem como para pequenas séries. Devido à sua popularidade, a maioria dos

microcontroladores são fabricados com este tipo de memória.

RAM - Random Access Memory: Este tipo de memória é volátil, o que signifi ca que quando se desliga a ali-

mentação do chip, a sua informação desaparece. É usada para o armazenamento temporário de dados, criados

e usados durante a operação do microcontrolador. Como exemplo, se o programa faz uma adição, é necessário

haver um registo que tenha o valor da soma. Para esse fi m, um dos registos da RAM é chamado de “soma” e

usado para armazenar o resultado da adição.

EEPROM - Electrically Erasable Programmable ROM: ROM programavel, que se pode apagar electricamen-

te. O conteúdo desta memória pode ser mudado durante a operação, mas o seu conteúdo não é perdido quando

se desliga a alimentação do microcontrolador. Este tipo de memória é usada para guardar valores, criados du-

rante a operação, que devem ser permanente armazenados.

Interrupções

A maioria dos programas usa interrupções durante a execução normal dos mesmos. O fi m de um microcon-

trolador é o de reagir consoante os estímulos exteriores. Posto por outras palavras, quando algo acontece, o

microcontrolador faz qualquer coisa. Como exemplo, quando se pressiona um botão de um controlo remoto, o

microcontrolador vai registar o acto, e responder à ordem aumentando/baixando o volume, mudando de canal,

etc.

Se o microcontrolador dispendesse o teu tempo indefi nidademente, a ler alguns botões durante horas ou dias,

simplesmente seria impraticavel. Em vez de o fazer, o microcontrolador delega este trabalho ao “especialista”,

que vai apenas reagir quando houver necessidade de atenção.

O sinal que informa o processador central deste tipo de eventos, é chamado de Interrupção.

www.mecatronicadegaragem.blogspot.com

Page 28: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 19

CPU - Unidade Central de Processamento

Como o seu nome sugere, esta é a unidade que monitoriza e controla todos os processos dentro do microcon-

trolador. Consiste em variadas subunidades, em que as mais importantes são:

Descodifi cador de Instruções: é a parte electrónica que reconhece as instruções de programa, e faz funcionar

o outros circuitos com base nisso. O conjunto de instruções que é diferente para cada familia de microcontro-

ladores, mostra as capacidades deste circuito.

ALU: Unidade Lógica e Aritmética: responsavel por todas as operações lógicas e matemáticas.

Acumulador: é um registo SFR responsavel pela operação da ALU. É como um registo de trabalho, usado para

armazenar todos os dados que são usados para executar uma operação, e que também armazena os resultados

prontos para serem usados para a continuação do processamento. Um dos SFR, chamado de Status, contém

bastante informação sobre o estado dos dados armazenados no Acumulador (o número é maior ou menor que

zero, etc).

CPU - Central Processing Unit - Unidade de Processamento Central

www.mecatronicadegaragem.blogspot.com

Page 29: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 20

Barramento

Fisicamente, o barramento é constituido por 8, 16 ou mais condutores. Existem dois tipos de barramento: o de

endereçamento e o de dados. O barramento de endereçamento consiste no número de linhas necessárias para

poder endereçar a memória. É usado para transmitir o endereço da CPU para a Memória. O barramento de

dados é tão largo quanto os dados que vão ser trabalhados, e no caso deste manual é de 8 bits ou largura de fi os.

É usado para ligar todos os circuitos dentro do microcontrolador.

Comunicações Série

Ligações paralelas entre microcontroladores e periféricos, através de portas I/O, são a solução ideal para curtas

distâncias - poucos metros. No entanto, e em outros casos em que há necessidade de estabelecer comunicações

entre dois dispositivos em maiores distâncias, não é possível utilizar comunicações paralelas. Nestas situações,

a comunicação série é a melhor solução.

Hoje em dia, a maior parte dos microcontroladores têem dentro, já de fábrica, variados sistemas para comuni-

cações série. Quais destes são usados, depende de muitos factores, os quais mais importantes são:

com quantos dispositivos, o microcontrolador tem de trocar informação?

com que velocidade tem que ser feita a troca de dados?

qual é a distância entre os dispositivos?

é necessário enviar e receber dados simultaneamente?

Um dos mais importantes pontos a considerar na comunicação série, é o Protocolo.

O protocolo é um conjunto de regras que devem ser obedecidas, de maneira a que os dispositivos possam cor-

rectamente interpretar os dados que todos trocam entre si. Felizmente, o microcontrolador trata desta situação

de maneira perfeitamente autónoma, o que liberta o programador para a tarefa de simplesmente ler e escrever.

www.mecatronicadegaragem.blogspot.com

Page 30: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 21

CPU - Central Processing Unit - Unidade de Processamento Central

Baud Rate - Velocidade de transferência

O termo Baud Rate é normalmente usado para especifi car o número de bits transferidos por segundo (bps).

Dever-se-á ter em atenção que se referem bits, e não bytes. É, normalmente, requisito do protocolo, que cada

byte seja transferido em conjunto com vários bits de controlo, o que pode signifi car que um byte da trama de

dados série, consista em 11 bits. Como exemplo, se o Baud Rate é de 300 bps, então, um máximo de 37 e um

mínimo de 27 bytes podem ser transferidos por segundo, ambos dependentes do tipo de ligação e protocolo

usado.

Os sistemas de comunicação Série mais usados são:

I2C (Inter Integrated Circuit) é um sistema usado quando a distância entre microcontroladores e periféricos

é curta (normalmente o emissor e o receptor estão na mesma placa de circuito impresso). A ligação é feita com

dois condutores: um para transferência de dados, e o outro para o sinal de relógio (sincronização). Como se

pode ver na fi gura, um dos dispositivos é sempre o Mestre. Faz o endereçamento de um chip Escravo, antes da

comunicação se iniciar. Desta maneira, um microcontrolador pode comunicar com 112 dispositivos diferentes.

www.mecatronicadegaragem.blogspot.com

Page 31: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 22

O Baud Rate é normalmente de 100 Kbit/s no modo normal, ou de 10 Kb/s em modo lento. A distância má-

xima, sem ajudas, entre dispositivos que se comunicam por I2C, está limitada a poucos metros.

Comunicação I2C

SPI (Serial Peripheral Interface Bus) é um sistema de comunicação série, que usa até 4 condutores: um para

receber dados, outro para enviar dados, um para sinal de relógio, e em alternativa outro para escolher com qual

dos dispositivos o Mestre vai comunicar. É uma ligação Full-Duplex, o que signifi ca que o envio e a recepção

podem ser feitas simultaneamente. O Baud Rate máximo é superior a uma ligação I2C.

Comunicação SPI

UART (Universal Asynchronous Receiver/Transmitter) é uma ligação assíncrona, o que signifi ca que o sinal

de relógio não é usado. Como há apenas uma linha de comunicação, ambos o receptor e emissor trabalham a

um Baud Rate pré-determinado, de maneira a manter a sua sincronização. Esta é uma maneira muito simples

de transferir informação, pois representa a conversão de dados 8-bit em formato paralelos, para formato série.

O Baud Rate faz-se abaixo de 1 Mbit/s.

www.mecatronicadegaragem.blogspot.com

Page 32: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 23

Oscilador

Pulsos dados pelo oscilador, possibilitam a operação síncrona de todos os circuitos do microcontrolador. O

módulo oscilador é normalmente confi gurado para usar um cristal de quartzo, ou um ressoador cerâmico, para

ter a sua oscilação estabilizada. Se não houver, por parte da aplicação, necessidade de estabilidade da oscilação,

então pode usar-se um oscilador RC (resistência/condensador).

É importante sublinhar que, as instruções, não são executas ao ritmo imposto pelo oscilador, mas algumas vezes

mais lento. Isto acontece porque cada instrução é executada em vários passos. Em alguns microcontroladores, o

mesmo número de ciclos é necessário para qualquer instrução, enquanto que em outros, o tempo de execução

não é o mesmo para todas as instruções. Se o sistema usa um cristal de 20 MHz, o tempo de execuçaõ de uma

instrução não é de 50ns, mas 200ns, 400 ou 800ns, dependendo do tipo de microcontrolador usado.

Oscilador

Circuito de Alimentação

Há duas situações a ter em atenção, no que toca à alimentação do microcontrolador:

www.mecatronicadegaragem.blogspot.com

Page 33: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 24

Brown-Out, é um estado potencialmente perigoso, e que acontece no momento em que o microcontrolador

está a ser desligado, ou em situações onde a energia de alimentação cai para o limite, devido a ruido eléctrico.

Como o microcontrolador consiste em vários circuitos com diferentes necessidades de nível de tensão, este esta-

do pode causar um grande desvio na sua performance. De maneira a preveni-lo, este circuito imediatamente faz

Reset a toda a electrónica interna, quando a tensão de alimentação desce abaixo de um nível pré-determinado.

Pino Reset, normalmente marcado como MCLR (Master Clear Reset), e serve para fazer o Reset externo do

microcontrolador, aplicando nível lógico 0 ou 1, dependendo do tipo de microcontrolador usado. No caso de o

chip não ter circuito de Brown-Out, um simples circuito externo de Brown-Out pode ser ligado a este pino.

Temporizadores e Contadores

O microcontrolador usa, normalmente, cristal de quartzo para funcionar. Mesmo que não seja a solução mais

simples, há muitas razões para o fazer. Nomeadamente, a frequência do oscilador é precisamente defi nida e

muito estavel, os pulsos originados têem sempre a mesma largura, o que os faz ideais para medições de tempo.

Estes osciladores são usados em relógios de quartzo.

www.mecatronicadegaragem.blogspot.com

Page 34: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 25

Temporizadores / Contadores

Se é necessário medir o tempo entre dois eventos, é sufi ciente contar os pulsos enviados pelo oscilador. Isto é

exactamente o que o Temporizador faz.

Muitos programas usam estes cronómetros miniatura, que são SFR de 8 ou 16 bits, e o seu conteudo é automa-

ticamente incrementado a cada pulso recebido. Quando um registo chegar ao fi m da contagem (255 ou 65535),

uma Interrupção é gerada.

Se os temporizadores usam um oscilador interno de quartzo, então é possível medir o tempo entre dois eventos

(se o valor do registo é T1 no momento inicial, e T2 no momento fi nal, então o tempo passado é igual ao resul-

tado da subtração T2-T1). Se os temporizadores usam pulsos externos, então o temporizador é transformado

em contador.

www.mecatronicadegaragem.blogspot.com

Page 35: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 26

Como funciona um temporizador

Na prática, os pulsos que chegam do oscilador de quartzo a cada ciclo de máquina, ou através o divisor, vão

incrementar (somar uma unidade) o valor do registo do temporizador. Se uma instrução (um ciclo de máqui-

na) durar por quatro periodos do oscilador de quartzo, então, o número vai mudar um milhão de vezes por

segundo, ou a cada microsegundo (us).

Funcionamento do Temporizador

É simples medir curtos intervalos de tempo (até 256us), pelo método descrito acima, porque é o maior número

que um registo pode ter. Esta óbvia desvantagem pode ser facilmente contornavel de diversas maneiras, como

usando um oscilador mais lento, registos com mais bits, um divisor ou interrupções. Como as duas primeiras

soluções são menos simples de resolver, é preferivel enveredar pelas duas últimas.

Usar o divisor no funcionamento do temporizador

Um divisor é um dispositivo electrónico usado para reduzir a frequência, por um factor pré-determinado. O

que signifi ca que, para gerar um pulso na sua saída, é necessário fazer chegar 1, 2, 4, 8 ou mais pulsos à sua

entrada. Este circuito é parte integrante do microcontrolador, e o seu factor de divisão pode ser alterado pelo

software. É usado quando é necessário medir períodos de tempo longos.

www.mecatronicadegaragem.blogspot.com

Page 36: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 27

Este divisor é normalmente partilhado pelo Temporizador e pelo Watchdog, o que faz com que não possa ser

usado por ambos em simultâneo.

Usando o Divisor, no funcionamento do Temporizador

Usar a Interrupção no funcionamento do Temporizador

Se o registo do temporizador for de 8 bits, o maior número que lhe poderá ser escrito é de 255 (ou de 65535

se o registo for de 16 bits). Se este número for excedido, o temporizador vai automaticamente limpar-se (auto

reset), e a contagem vai iniciar-se do 0. Esta condição é chamada de Overfl ow. Se for habilitado pelo software,

esse overfl ow pode gerar uma interrupção, o que nos trás imensas novas possibilidades.

Como exemplo, o estado dos registos de um relógio, segundos-minutos-horas, podem ser alterados dentro da

rotina de interrupção.

Todo o processo, excepto a rotina de interrupção, é executado em “background”, o que possibilita que o circuito

principal do microcontrolador execute outras operações.

www.mecatronicadegaragem.blogspot.com

Page 37: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 28

Usando a Interrupção, no funcionamento do Temporizador

Atrasos de diferente duração, com mínima interferência do programa principal, podem facilmente ser obtidos

atribuindo o divisor ao temporizador.

Contadores

Se o temporizador estiver a ser carregado com pulsos do exterior, então o mesmo torna-se num Contador. O

circuito não mudou, mantém-se o mesmo.

A única diferença é que, neste caso, os pulsos a contar chegam através das portas, e a sua duração nunca é defi -

nida. Esta é a razão pela qual não podem ser usados para medição de tempo, embora os seus fi ns sejam imensos.

Desde a contagem de peças numa linha de montagem, quantidade de passos que o motor andou, número de

passageiros numa fi la, etc. As possibilidades são vastas, e são dependentes dos sensores usados.

Temporizador Watchdog

O watchdog é um temporizador ligado a um oscilador RC, e totalmente independente do microcontrolador. O

que faz com que não possa ser desligado durante o funcionamento.

www.mecatronicadegaragem.blogspot.com

Page 38: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 29

Se o watchdog estiver ligado, escolha que apenas pode ser feita durante a programação física, cada vez que

chega ao fi m da sua contagem, ocorre um reset do microcontrolador, e a execução do programa volta à primeira

instrução. O objectivo é fazer com que isto não aconteça, pelo uso de uma instrução específi ca.

Assim, se algo se descontrolar na execução do programa, o microcontrolador poderá reiniciar-se, não correndo

o risco de fi car empatado num círculo infi nito.

Se as instruções que fazem o reset do watchdog, forem colocadas em sítios específi cos do programa, então, o

funcionamento do watchdog não vai interferir com o programa principal. Se, por alguma razão, normalmente

por ruidos na linha eléctrica, o programa fi car bloqueado em alguma posição da qual não consegue sair, não vai

ser feito o reset do watchdog e, quando este chegar ao fi m da contagem, o reset do microcontrolador acontece,

iniciando o programa desde o início.

Temporizador Watchdog

Conversores Analógico/Digital

Os sinais externos são, normalmente, diferentes dos que o microcontrolador compreende (1’s e 0’s). Devido a

isto, os sinais têem que ser convertidos para linguagem compatível. Um conversor de Analógico para Digital, é

um circuito que converte sinais contínuos, para números digitais. Este circuito é, então, usado para converter

um valor analógico, para um número binário, e enviá-lo ao CPU para processamento. Posto por outras pala-

vras, este módulo é usado para medir tensões presentes no pino. O resultado da medida é um número de valor

www.mecatronicadegaragem.blogspot.com

Page 39: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 30

digital, usado e processado pelo programa.

Conversor A/D

www.mecatronicadegaragem.blogspot.com

Page 40: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 31

Arquitectura Interna

Todos os microcontroladores modernos usam uma de duas arquitecturas: Harvard ou von-Neumann. Em

suma, são duas formas distintas de trocar a informação entre o CPU e a Memória.

Arquitectura von-Neumann

Os microcontroladores que usam esta tecnologia, só

têem disponivel uma zona de memória, e um barra-

mento de dados de 8 bits. Como todos os dados são

trocados, usando estas 8 linhas, este barramento é

sobrecarregado e a comunicação extremamente lenta

e inefi ciente.

O CPU pode lêr uma instrução, ou lêr/escrever da-

dos de/para a memória. Ambas as situações ao mes-

mo tempo são impossiveis, pois as instruções parti-

lham o barramento com os dados.

Arquitectura Harvard

Os microcontroladores que usam esta arquitectura, dispõem de dois barramentos de dados distintos. Um é de

8 bits e liga o CPU à RAM. O outro tem várias linhas (12, 14 ou 16) e liga o CPU à ROM.

Assim, o CPU pode ler uma instrução, ao mesmo tempo que faz um acesso à memória de dados. Como todos

os registos RAM são de 8 bits, todos os dados trocados dentro do microcontrolador estão no mesmo formato.

Adicionalmente, durante a escrita do software, apenas 8 bits de dados são considerados. Por outras palavras, só

se pode trabalhar com 8 bits de dados, no máximo.

Um programa escrito para estes microcontroladores, depois de compilado, vai ser guardado na ROM interna.

www.mecatronicadegaragem.blogspot.com

Page 41: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 32

No entanto, estas posições de memória não têem apenas 8 bits, mas sim 12, 14 ou 16. Os restantes 4, 6 ou 8

bits representam a própria instrução, especifi cando ao CPU o que fazer com os dados de 8 bits.

Arq. Harvard

As vantagens deste modelo, são as seguintes:

Todos os dados são de 8 bits. Como o barramento usado para a leitura do programa tem 12, 14 ou 16

linhas, ambos as instruções e dados pode ser lidos simultaneamente. Assim, todas as instruções são execu-

tadas em apenas um ciclo. A única excepção são as instruções de salto, que são executadas em dois ciclos.

Como a ROM e RAM são separadas, o CPU pode executar duas instruções simultaneamente. Enquanto a

leitura/escrita da RAM está a ser feita, a próxima instrução está a ser lida pelo outro barramento.

Nesta arquitectura, o barramento de programa é maior que um byte, o que possibilita que cada linha de

programa seja feita de instrução + dados. Por outras palavras: uma linha de programa - uma instrução.

www.mecatronicadegaragem.blogspot.com

Page 42: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 33

Conjunto de Instruções

As instruções que são compreendidas pelo microcontrolador, são

conhecidas como o “Conjunto de Instruções”. Quando se escreve

um programa em linguagem Assembler, está-se a “contar uma

estória”, especifi cando as instruções pela ordem que as mesmas

devem ser executadas. A única restrição, é pelo reduzido número

de instruções disponiveis.

www.mecatronicadegaragem.blogspot.com

Page 43: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 34

Como escolher o microcontrolador certo para a aplicação?

Antes de se começar a desenvolver um sistema baseado num microcontrolador, dever-se-á equacionar o seguin-

te:

quantas entradas/saídas são necessárias?

comunicações série?

conversor A/D?

outro...

Quando se defi ne muito bem os requisitos do projecto, a larga oferta é naturalmente fi ltrada, e é muito mais

simples fazer a escolha adequada.

Por último, fazer a escolha consoante o número de unidades do produto, e o preço por unidade.

Microcontroladores PIC

Estes microcontroladores, fabricados pela Microchip, são provavelmente a melhor aposta para iniciados. O

verdadeito nome deste microcontroladores é PICmicro, mas são mais conhecidos por PIC.

O primeiro modelo foi desenhado em 1975 pela General Instruments. Chamava-se PIC1650, e foi idealizado

para fi ns totalmente diferentes.

Após 10 anos, e juntando memória EEPROM, este circuito transforma-se num verdadeiro microcontrolador

PIC.

www.mecatronicadegaragem.blogspot.com

Page 44: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 44

Microcontrolador PIC16F887

Uma panorâmica

O PIC16F887 é um dos mais recentes produtos da Microchip. Tem todos os componentes que um moderno

microcontrolador tem e, pelo baixo custo, amplo campo de aplicações, alta qualidade e facilidade de adquirir, é a

solução ideal para aplicações como: controlo de processo industrial, controlo de máquinas, medição de valores,

entre outros.

Algumas das funcionalidades estão descritas abaixo:

Arquitectura RISC (CPU de instruções reduzidas)

apenas 35 instruções para aprender

todas as intruções de um-ciclo, excepto os saltos

Frequência de operação de 0 a 20MHz

Oscilador interno de precisão

calibrado de fábrica

frequência escolhida por software entre 31KHz e 8MHz

Tensão de alimentação entre 2.0V e 5.5V

consumo: 220uA @ 2.0V @ 4MHz, 11ua @ 2.0V @ 32KHz, 50nA em Stand-by

Modo de poupança de energia

Reset por Brown-out, com controlo por software

www.mecatronicadegaragem.blogspot.com

Page 45: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 45

35 pinos de I/O

alta corrente para polarizar LEDs directamente

resistências individuais de polarização positiva, programaveis por software

interrupção quando há mudança no estado lógico dos pinos de entrada

Memória ROM de 8k, em tecnologia FLASH

o chip pode ser reprogramado cerca de 100.000 vezes

Opção de gravação no circuito

o chip pode ser programado, quando está já montado no sistema fi nal

Memória EEPROM de 256 bytes

pode ser escrita cerca de 1.000.000 vezes

Memória RAM de 368 bytes

Conversor A/D

14 canais

10 bits de resolução

3 Temporizadores/Contadores independentes

Temporizador Watch-dog

Módulo comparador analógico com

dois comparadores analógicos

tensão fi xa de referência, 0.6V

referência de tensão programavel

Saída por PWM

www.mecatronicadegaragem.blogspot.com

Page 46: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 46

Módulo USART melhorado

suporta RS-485, RS-232 e LIN2.0

detecção automática de Baudrate

Porta série síncrona

suporta os modos I2C e SPI

Microcontrolador PIC16F887 - Encapsulamento PDIP40

www.mecatronicadegaragem.blogspot.com

Page 47: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 47

Microcontrolador PIC16F887 - Encapsulamento QFN44

Microcontrolador PIC16F887 - Diagrama de Blocos

www.mecatronicadegaragem.blogspot.com

Page 48: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 48

Descrição dos pinos

Como se pode ver na fi gura acima, quase todos os pinos são multi-funcionais. Como exemplo, o pino 33, com

a designação RB0/AN12/INT, tem as seguintes funções:

RB0, Porta B, primeiro pino entrada/saída (I/O)

AN12, Décima segunda entrada analógica

INT, Pino de interrupção externa

Este modo de dar funcionalidade extra aos pinos, faz o microcontrolador mais compacto, sem perder a sua fun-

cionalidade. Estas funcionalidades não podem ser usadas em simultâneo, mas podem ser alteradas a qualquer

momento pelo software.

As tabelas seguintes, referem-se ao microcontrolador com caixa PDIP 40 pinos :

www.mecatronicadegaragem.blogspot.com

Page 49: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 49

Atribuição de Pinos

www.mecatronicadegaragem.blogspot.com

Page 50: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 50

Atribuição de Pinos

www.mecatronicadegaragem.blogspot.com

Page 51: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 51

Atribuição de Pinos

CPU

Não vamos falar do funcionamento da CPU por enquanto. Mas é importante frisar que a CPU é desenhada

com tecnologia RISC, o que é um importante factor a ter em conta, aquando da decisão de que microcontro-

lador usar.

www.mecatronicadegaragem.blogspot.com

Page 52: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 52

Esta tecnologia oferece duas grandes vantagens:

apenas 35 instruções para aprender

o tempo de execução é o mesmo para todas as instruções, excepto para as que fazem salto. O que signifi ca

que com o microcontrolador a 20MHz, o tempo de execução de cada instrução é ed 200ns, ou seja, o pro-

grama é executado à velocidade de 5 milhões de instruções por segundo.

A CPU e a Memória

Memória

Este microcontrolador tem três tipos de memória: ROM, RAM e EEPROM. Todas elas vão ser separada-

mente discutidas, pois cada uma delas têm funcionalidade e organização especifi cas.

Memória ROM

A memória ROM é usada para permanentemente guardar o programa a executar, e esta é a razão pela qual é

www.mecatronicadegaragem.blogspot.com

Page 53: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 53

chamada de memória de programa. O PIC16F887 tem 8Kb de ROM, num total de 8192 posições. Como esta

ROM é feita com tecnologia FLASH, o seu conteúdo pode ser mudado electricamente, com o auxílio de um

programador externo.

Conceito de Memória ROM

Memória EEPROM

Com parecenças à memória de programa, o conteúdo da EEPROM é permanentemente gravado, mesmo que a

energia seja desligada. No entanto, ao contrário da ROM, o conteúdo da EEPROM pode ser alterado durante

a execução do programa. E esta é a razão, pela qual esta memória é perfeita para guardar resultados criados, e

usados, durante a operação.

Memória RAM

Esta é a mais complexa memória do microcontrolador. Neste caso, consiste em dois módulos: os registos-de-

função-geral (GPR), e os registos-de-função-especial.

www.mecatronicadegaragem.blogspot.com

Page 54: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 54

Embora ambos os módulos de registos sejam limpos quando a alimentação desliga, e sejam fabricados da

mesma maneira, as suas funções são completamente díspares.

Registos SFR - Special Funcion Registers, e GPR - General Purpose Registers

Registos de função geral - GPR

Os GPR são usados para armazenar temporariamente os dados, e resultados, criados durante a execução do

www.mecatronicadegaragem.blogspot.com

Page 55: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 55

programa. Se o programa está a executar uma contagem, é necessário que haja um registo que sirva de “soma-

dor” ou contador. Como o microcontrolador tem que ser confi gurado para trabalhar como o utilizador deseja,

é necessário, também, especifi car o endereço de alguns GPR’s e dar-lhes novas funções.

Então, o microcontrolador pode executar o programa, porque “sabe” o quê, e onde está a “soma” que deve ser

incrementada. Por analogia, a cada variavel do programa deve ser atribuido um GPR.

Registos de função especial - SFR

Os SFR também são locais na RAM, mas contrariamente aos GPR, o seu fi m é predeterminado no processo

de fabrico, e não pode ser alterado.

Como os seus bits estão fi sicamente ligados a circuitos internos do chip (módulo de comunicações série, con-

versor A/D, temporizadores, etc), qualquer alteração ao seu conteudo, afecta directamente o funcionamento do

microcontrolador, ou alguns dos seus circuitos. Como exemplo, mudando o registo TRISB, a função de cada

pino da porta B pode ser alterada, para que seja ou entrada ou saída.

Outra particularidade dos SFR’s, é a de que estes têem nomes, tanto o registo como os seus bits, o que torna

a escrita do programa mais facilitada. Como a programação em linguagens de alto-nível pode usar a lista de

todos os registos, com o seu endereço exacto, é apenas necessário especifi car o nome do registo, de maneira a

escrever/lêr o seu conteudo.

Bancos de Memória

A memória de dados está particionada em quatro bancos. Antes de aceder a algum registo, durante a escrita do

programa para escrever/lêr, é necessário seleccionar o banco que contém esse mesmo registo. Dois bits no reg-

isto STATUS são usados para a selecção dos bancos. De forma a facilitar esta operação, os SFR mais comuns

têm o mesmo endereço em todos os bancos, o que possibilita que possam ser facilmente acedidos.

www.mecatronicadegaragem.blogspot.com

Page 56: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 56

Bancos de Memória

www.mecatronicadegaragem.blogspot.com

Page 57: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 57

SFR - Banco 0

www.mecatronicadegaragem.blogspot.com

Page 58: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 58

SFR - Banco 1

www.mecatronicadegaragem.blogspot.com

Page 59: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 59

SFR - Banco 2

SFR - Banco 3

Pilha de memória - Stack

A parte da RAM destinada à Stack, consiste em oito registos de 13 bits. Antes do microcontrolador executar

www.mecatronicadegaragem.blogspot.com

Page 60: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 60

uma subrotina (instrução CALL), ou quando surge uma interrupção, o endereço da próxima instrução é em-

purrado para dentro de um registo da stack.

Dessa maneira, aquando da conclusão da subrotina ou interrupção, o microcontrolador sabe de onde deve con-

tinuar a execução normal do programa. Este endereço, na stack, é limpo depois do retorno ao programa princi-

pal, pois não há necessidade de o conservar, e essa posição fi ca automaticamente disponivel para ser usada.

É importante compreender que a stack funciona em círculo, ou seja, quando a stack já foi carregada oito vezes,

a nona carga vai ser sobrepôr-se ao valor que está guardado na primeira posição. A décima carga vai sobrepôr

a segunda posição, e por aí em diante. Os dados que foram sobrepostos desta maneira, não têem qualquer ma-

neira de serem recuperados. Ainda, o programador não tem acesso a estes registos para escrever/ler, e não há

nenhum bit no registo STATUS que indique que houve “stack overfl ow” ou “stack underfl ow”. Devido a isto,

deve ter-se em consideração esta particularidade aquando da programação.

Sistema de interrupção

A primeira situação que o microcontrolador faz quando acontece uma interrupção, é executar a actual instrução

e parar a execução do programa.

Imediatamente depois disso, o endereço da memória do programa é automaticamente empurrado para a stack,

e o endereço predefi nido é carregado para o contador de programa. Essa localização de onde o programa con-

tinua, chama-se de Vector de Interrupção. Para o PIC em causa, o vector é 0x0004.

Como se pode ver na fi gura abaixo, o endereço que tem o vector de interrupção é saltado durante a execução

normal do programa.

Parte do programa que é activado quando acontece uma interrupção, é chamado de Rotina de Interrupção. A

sua primeira instrução está localizada no vector de interrupção. Quão longa a subrotina vai ser, e como vai ser,

depende apenas do programador, bem como do tipo de interrupção.

Alguns microcontroladores têem mais vectores de interrupção (cada interrupção têm um vector associado),

mas no caso deste PIC, existe apenas um vector. Consequentemente, a primeira parte da rotina de interrupção,

consiste no reconhecimento da fonte da mesma, ou onde foi originada.

www.mecatronicadegaragem.blogspot.com

Page 61: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Panorâmica

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 61

Por último, quando a origem da interrupção foi encontrada, e a rotina de interrupção é executada, o micro-

controlador chega à instrução RETFIE, puxa o endereço da stack, e continua a execução do programa de onde

tinha saído.

Stack e Sistema de Interrupção

Como usar os Registos de função especial - SFR

O programador adquire o microcontrolador, já com uma ideia bem defi nida do que vai fazer com o mesmo. Há

uma lista longa de SFR’s, com os seus bits. Cada um deles controla um qualquer processo. Num todo, é tudo

como uma grande tabela de controlo, com muitos instrumentos e interruptores.

Os microcontroladores oferecem muitos produtos a baixo preço, que cabe ao programador tomar a decisão.

Assim, este deve escolher a área que mais o agrada, e estudar apenas aquilo que necessita de saber.

Depois, quando compreender por completo o funcionamento completo do hardware, deve estudar os SFR’s

que o controlam.

E não esquecer!, que durante a escrita do programa, aquando do trabalho com registos e seus bits, deve ser

lembrado mudar para o banco apropriado. As tabelas acima são perfeitamente explanatórias.

www.mecatronicadegaragem.blogspot.com

Page 62: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 62

Os Registos de Função Especial - SFR - do CPU

Características e Funções

Os SFRs podem ser classifi cados em duas categorias:

SFR do CPU, que controlam e monitorizam os processos no processador central. Mesmo havendo poucos,

a operação de todo o microcoltrolador depende do seu conteúdo.

SFR periféricos, que controlam a operação dos periféricos (conversor A/D, módulo de comunicações série,

etc). Cada um destes registos é normalmente usado para um circuito, e por esta razão, será explicado mais

à frente o seu funcionamento junto com o do periférico.

Os SFR do CPU do PIC, serão descritos neste capítulo. Visto que os seus bits controlam vários circuitos den-

tro do chip, não é possivel classifi cá-los por grupos. Estes bits são descritos juntamente com o processo que vão

controlar.

Registo STATUS

O registo de STATUS contém: o estado aritmético do registo W, o estado do RESET e os bits de selecção do

banco de memória.

O programador deve ser cauteloso, quando escreve valores para este registo porque, se o fi zer erradamente, os

www.mecatronicadegaragem.blogspot.com

Page 63: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 63

resultados podem ser diferentes do esperado. Por exemplo, se se tentar apagar todos os bits, usando a instrução

“CLRF STATUS”, o resultado no registo será 000xx1xx, em vez do esperado 00000000.

Tais erros acontecem, porque alguns bits deste registos são comandados pelo hardware, e não podem ser altera-

dos pelo programa. E, também, os bits 3 e 4 são apenas de leitura.

Por estas razões, se é necessário alterar o seu conteúdo, é recomendado usar instruções que não alterem os bits

de estado C, DC e Z. Consultar o capítulo sobre as Instruções do PIC.

IRP - selecciona o banco de resgistos. É usado para endereçamento indirecto.

1 - Bancos 0 e 1 são activados (endereços de memória 0x00 a 0xFF)

2 - Bancos 2 e 3 são activados (endereços de memória 0x100 a 0x1FF)

RP1,RP0 - selecciona o banco de registos. É usado para endereçamento directo

RP1 RP0 Banco Activo0 0 Banco 0 0 1 Banco 1 1 0 Banco 2 1 1 Banco 3

TO - bit de Time-out

1 - A seguir ao Power-on, ou depois de executar a instrução CLRWDT, que limpa o temporizador do watch-

dog, ou da instrução SLEEP, que põe o microcontrolador em modo adormecido.

0 - A seguir a ter ocorrido um time-out do temporizador watchdog.

PD - bit de Power-down

1 - Depois do Power-on, ou depois de executar a instrução CLRWDT, que limpa o temporizador watchdog.

0 - Depois de de executar a instrução SLEEP, que coloca o microcontrolador em modo adormecido e baixo

consumo.

Z - bit Zero

1 - O resultado da operação lógica ou aritmética é zero

www.mecatronicadegaragem.blogspot.com

Page 64: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 64

0 - O resultado da operação lógica ou aritmética é diferente de zero

DC - bit de transporte de digito, é mudado durante a soma ou subtracção, se houver “overfl ow” ou um “borrow”

do resultado

1 - Houve transporte do 4º bit do resultado.

0 - Não houve transporte do 4º bit do resultado.

C - bit de Transporte, é mudado durante a soma ou subtracção, se houver “overfl ow” ou um “borrow” do resul-

tado: se o resultado é maior que 255 ou menor que 0

1 - Houve transporte do bit mais signifi cativo do resultado

0 - Não houve transporte do bit mais signifi cativo do resultado

Registo OPTION_REG

O registo OPTION_REG tem vários bits de controlo, para confi gurar: divisor do TMR0/WDT, temporiza-

dor TMR0, Interrupção externa e Pull-ups da Porta B.

www.mecatronicadegaragem.blogspot.com

Page 65: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 65

RBPU - Interruptor dos Pull-ups da Porta B

1 - Pull-ups desligados

0 - Pull-ups ligados

INTEDG - Selecção do fl anco da interrupção

1 - Interrupção no fl anco ascendente do pino RB0/

INT

0 - Interrupção no fl anco descendente do pino RB0/

INT

T0CS - Selecção da fonte de clock para o TMR0

1 - Transição no pino T0CKI

0 - Clock interno a Fosc/4

T0SE - Selecção do fl anco para o contador TMR0,

no pino RA4/T0CKI

1 - Incrementa no fl anco descendente do pino

T0CKI

0 - Incrementa no fl anco ascendente do pino T0CKI

www.mecatronicadegaragem.blogspot.com

Page 66: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 66

PSA - Selecciona a atribuição para o TMR0 ou

Watchdog, do divisor

1 - Divisor atribuido ao Watchdog

0 - Divisor atribuido ao TMR0

PS2, PS1 e PS0 - Bits de selecção da magnitude de divisão, do divisor interno

A magnitude de divisão, do divisor interno, é confi gurada por estes três bits, descritos na tabela abaixo. A mag-

nitude depende de se o divisor está atribuido ao TMR0, ou ao Watchdog.

PS2 PS1 PS0 TMR0 WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8l 1:40 1 1 1:16 1:8 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128

De maneira a conseguir uma divisão de 1:1, quando o temporizador TMR0 é usado, o divisor deverá estar atri-

buido ao Watchdog. Como resultado, o temporizador TMR0 não usa o divisor, e conta directamente os pulsos

que lhe são chegados pelo oscilador interno, ou por via externa no pino RA4/T0CKI.

Registos do Sistema de Interrupções

Quando um pedido de interrupção chega ao microcontrolador, não signifi ca que a interrupção seja automatica-

mente atendida pois, a mesma, terá de estar habilitada pelo programador. Devido a isto, há bits seleccionados

para ligar/desligar as interrupções.

www.mecatronicadegaragem.blogspot.com

Page 67: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 67

É simples reconhecer estes bits, porque o seu nome tem a sigla “IE” (Interrupt Enable, ou Habilitação da Inter-

rupção). Além disto, cada interrupção está associada com outro bit chamado de Flag (sinalizador), que indica

que o pedido de interrupção chegou ao microcontrolador, independentemente se a interrupção está habilitada,

ou não. Também são facilmente reconhecidos pelas últimas letras “IF” (Interrup Flag, ou Sinalizador de Inter-

rupção).

Como já foi descrito, o princípio é baseado numa ideia simples e efi ciente. Quando um pedido de interrupção

chega, o bit de fl ag é também automatica e autonomamente ligado em primeiro lugar.

Registos do Sistema de Interrupções

Se o bit respectivo IE não está activado, este evento será completamente ignorado pelo microcontrolador. De

outra forma, a interrupção será trabalhada pelo CPU.

Se várias fontes de interrupção estão activadas, então é necessário detectar as que estão activas, antes de iniciar

a execução da interrupção. A detecção é feita, analisando quais os bits de fl ags que estão activos.

É importante compreender que os bits de fl ag não são automaticamente limpos, depois da interrupção ser ex-

ecutada. Sim, devem ser apagados pelo programador, dentro do software de execução da interrupção.

Se este pormenor não fôr tomado em conta, outra interrupção irá disparar quando se voltar para o programa

principal, mesmo que não haja mais pedidos para a sua execução. Resumindo, o bit de fl ag e o bit IE continu-

arão activados.

Todas as fontes de interrupção do microcontrolador PIC16F887, poderão ser visualisadas na imagem abaixo.

De notar os seguintes pontos:

www.mecatronicadegaragem.blogspot.com

Page 68: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 68

bit GIE - activa/desactiva todas as interrupções

bit PEIE - activa/desactiva todas as interrupções de periféricos. Não se aplicam ao TMR0 e Porta B.

Para habilitar as interrupções causadas pela mudança de estado na Porta B, é necessário activar cada bit sepa-

radamente. Neste caso, os bits do registo IOCB têem essa função em particular.

SFR’s - Special Function Registers das Interrupções

Registo INTCON

O registo INTCON contém vários bits de activação, e fl ag, para o TMR0, Porta B e pino INT.

www.mecatronicadegaragem.blogspot.com

Page 69: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 69

GIE - Habilitação global e simultânea de Interrupções

1 - Activa todas as interrupções

0 - Desactiva todas as interrupções

PEIE - Habilita as Interrupções dos periféricos

1 - Activa todas as interrupções dos periféricos

0 - Desactiva todas as interrupções dos periféricos

T0IE - Habilita a interrupção de fi m de contagem do TMR, quando da contagem de 255 para 0.

1 - Activa interrupção do TMR0

0 - Desactiva interrupção do TMR0

INTE - Habilita interrupção externa em RB0/INT, causada pela mudança de estado no pino

1 - Activa interrupção do RB0/INT

0 - Desactiva interrupção do RB0/INT

RBIE - Habilita interrupção da Porta B, da mudança de estado nos pinos. Quando confi gurados como entra-

das, os pinos da Porta B podem causar interrupção, se mudarem de estado lógico. Seja com fl anco ascendente,

seja descendente. Interessa apenas que houve mudança.

1 - Activa interrupção por mudança de estado da Porta B

0 - Deactiva interrupção por mudança de estado da Porta B

T0IF - Flag de interrupção de fi m de contagem do TMR0

1 - TMR0 chegou ao fi m da contagem, fl ag deverá ser limpa pelo software

0 - TMR0 não chegou ao fi m da contagem

www.mecatronicadegaragem.blogspot.com

Page 70: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 70

INTF - Flag de interrupção externa por mudança de estado no pino RB0/INT

1 - Ocorreu interrupção externa em INT, fl ag deverá ser limpa pelo software

0 - Não ocorrer interrupção externa em INT

RBIF - Flag de interrupção pela mudança de estado nos pinos da Porta B

1 - Pelo meno um dos pinos da Porta B mudou de estado lógico. Após a leitura da Porta B, a fl ag RBIF deverá

ser limpa pelo software.

0 - Nenhum dos pinos da Porta B mudou de estado lógico.

Registo PIE1

O registo PIE1 contém os bits que habilitam as interrupções dos periféricos.

ADIE - Habilita a interrupção do Conversor A/D

1 - Liga a interrupção do conversor A/D

0 - Desliga a interrupção do conversor A/D

RCIE - Habilita a interrupção da Recepção da EUSART

1 - Liga a interrupção da Recepção da EUSART

0 - Desliga a interrupção da Recepção da EUSART

TXIE - Habilita a interrupção da Transmissão da EUSART

1 - Liga a interrupção da Transmissão da EUSART

www.mecatronicadegaragem.blogspot.com

Page 71: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 71

0 - Desliga a interrupção da Transmissão da EUSART

SSPIE - Habilita a interrupção da Porta Série Síncrona (MSSP), a cada transferência efectuada

1 - Liga a interrupção MSSP

0 - Desliga a interrupção MSSP

CCP1IE - Habilita a interrupção do módulo CCP1 (Capture/Compare/PWM - Captura/Compara/

PWM)

1 - Liga a interrupção CCP1

0 - Desliga a interrupção CCP1

TMR2IE - Habilita a interrupção por comparação entre PR2 e TMR2

1 - Liga a interrupção da comparação PR2 e TMR2

0 - Desliga a interrupção da comparação PR2 e TMR2

TMR1IE - Habilita a interrupção de fi m de contagem do TMR1, quando da contagem de 255 para 0.

1 - Activa interrupção do TMR1

0 - Desactiva interrupção do TMR1

Registo PIE2

O registo PIE2 também contém bits que habilitam as interrupções dos periféricos.

www.mecatronicadegaragem.blogspot.com

Page 72: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 72

OSFIE - Habilita interrupção por falha do Oscilador interno

1 - Liga interrupção por falha do Oscilador

0 - Desliga interrupção por falha do Oscilador

C2IE - Habilita interrupção do Comparador C2

1 - Liga interrupção do Comparador C2

0 - Desliga interrupção do Comparador C2

C1IE - Habilita interrupção do Comparador C1

1 - Liga interrupção do Comparador C1

0 - Desliga interrupção do Comparador C1

EEIE - Habilita a interrupção pela escrita da EEPROM

1 - Liga a interrupção pela escrita da EEPROM

0 - Desliga a interrupção pela escrita da EEPROM

BCLIE - Habilita a interrupção pela Colisão de Dados no Barramento

1 - Liga a interrupção pela Colisão de Dados no Barramento

0 - Desliga a interrupção pela Colisão de Dados no Barramento

ULPWUIE - Habilita a interrupção pelo “Despertar” em extrema baixa potência

1 - Liga a interrupção pelo “Despertar” em extrema baixa potência

0 - Desliga a interrupção pelo “Despertar” em extrema baixa potência

CCP2IE - Habilita a interrupção do módulo CCP2 (Capture/Compare/PWM - Captura/Compara/

PWM)

1 - Liga a interrupção CCP2

0 - Desliga a interrupção CCP2

www.mecatronicadegaragem.blogspot.com

Page 73: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 73

Registo PIR1

O registo PIR1 contém as fl ags das interrupções.

ADIF - Flag da interrupção do conversor A/D

1 - A conversão A/D está completa. Flag deverá ser limpa por software

0 - A conversão não está completa ou não foi iniciada

RCIF - Flag da interrupção da recepção da EUSART

1 - O buff er de recepção da EUSART está completo. A fl ag é limpa, lendo o registo RCREG.

0 - O buff er de recepção da EUSART não está completo.

TXIF - Flag de interrupção da transmissão da EUSART

1- O buff er de transmissão da EUSART está vazio. A fl ag é limpa, escrevendo para o registo TXREG

0 - O buff er de transmissão da EUSART está completo.

SSPIF - Flag de interrupção da Porta Série Síncrona (MSSP)

1 - A interrupção MSSP durante a transmissão/recepção ocorreu. Estas condições diferem, dependendo do

modo em que se opera: SPI ou I2C. Esta fl ag deve ser limpa por software.

0 - Nenhuma interrupção MSSP ocorreu.

CCP1IF - Flag de interrupção de CCP1

1 - A interrupção de CCP1 ocorreu. Dependendo do modo de operação, ocorreu um valor coincidente com

sucesso na captura ou comparação. Em ambos os casos, a fl ag deverá ser limpa por software. Este bit não é

usado no modo de PWM.

0 - A interrupção de CCP1 não ocorreu.

www.mecatronicadegaragem.blogspot.com

Page 74: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 74

TMR2IF - Flag de interrupção de coincidência de valores entre TMR2 e PR2

1 - Ocorreu coincidência de valores entre o TMR2 e PR2. Este bit deverá ser limpo por software.

0 - Não ocorreu coincidência de valores entre TMR2 e PR2.

TMR1IF - Flag de interrupção de fi m de contagem do TMR1

1 - O TMR1 chegou ao fi m da contagem. Este bit deverá ser limpo por software.

0 - O TMR1 não chegou ao fi m da contagem.

Registo PIR2

O registo PIR2 também contém as fl ags das interrupções.

OSFIF - Flag de interrupção por falha do Oscilador

1 - O oscilador do sistema falhou, e o clock do sistema foi transferido para o oscilador INTOSC. Este bit de-

verá ser limpo por software

0 - O oscilador do sistema funciona normalmente.

C2IF - Flag de interrupção do comparador C2

1 - A saída do comparador C2 mudou de estado (bit C2OUT). Este bit deverá ser limpo por software.

0 - A saída do comparador C2 não mudou de estado.

C1IF - Flag de interrupção do comparador C1

1 - A saída do comparador C1 mudou de estado (bit C1OUT). Este bit deverá ser limpo por software.

0 - A saída do comparador C1 não mudou de estado.

www.mecatronicadegaragem.blogspot.com

Page 75: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 75

EEIF - Flag de interrupção da operação de escrita na EEPROM

1 - Escrita na EEPROM completa. Este bit deverá ser limpo por software

0 - Escrita na EEPROM não está completa, ou não foi iniciada.

BCLIF - Flag de interrupção de colisão de transferência de dados no Barramento

1 - Ocorreu uma colisão no barramento, quando o módulo MSSP está confi gurado para I2C mestre. Este bit

deverá ser limpo por software

0 - Não ocorreu colisão no barramento

ULPWUIF - Flag de interrupção de “Despertar” em extrema baixa potência

1 - Condição de “Despertar” ocorreu. Este bit deverá ser limpo por software

0 - Condição de “Despertar” não ocorreu.

CCP2IF - Flag de interrupção de CCP2

1 - A interrupção de CCP2 ocorreu. Dependendo do modo de operação, ocorreu um valor coincidente com

sucesso na captura ou comparação. Em ambos os casos, a fl ag deverá ser limpa por software. Este bit não é

usado no modo de PWM.

0 - A interrupção de CCP2 não ocorreu.

Registo PCON

O registo PCON contém apenas duas fl ags, para diferenciar entre: Reset de Power-on, Reset de Brown-out,

Reset de Watchdog ou Reset externo.

www.mecatronicadegaragem.blogspot.com

Page 76: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 76

ULPWUE - Habilitação do modo de “Despertar” em extrema baixa potência

1 - Liga “Despertar” em extrema baixa potência

0 - Desliga “Despertar” em extrema baixa potência

SBOREN - Habilitação por software do Reset de Brown-out

1 - Liga Reset de Brown-out

0 - Desliga Reset de Brown-out

POR - Flag de estado do Reset de Power-on

1 - Não ocorreu Reset de Power-on

0 - Reset de Power-on ocorreu. Este bit deverá ser limpo por software, depois de um Reset de Power-on acon-

tecer.

BOR - Flag de estado do Reset de Brown-out

1 - Não ocorreu Reset de Brown-out

0 - Reset de Brown-out ocorreu. Este bit deverá ser limpo por software, depois de um Reset de Brown-out

acontecer.

Registos PCL e PCLATH

O tamanho da memória de programa do PIC16F887 é de 8k. Então, tem 8192 posições para armazenar o pro-

grama. Por esta razão, o contador de programa tem de ter 13 bits (2^13 = 8192). Por forma a que o conteúdo

de qualquer posição seja alterada por software durante a operação, o seu endereço deverá ser acessível através

de algum SFR. Como os SFR’s são todos de 8 bits, este registo é “artifi cialmente” criado, dividindo os seus 13

bits por dois registos independentes: PCLATH e o PCL.

Se a execução do programa não interferir com o contador de programa, o valor deste registo é automatica e

constantemente incrementado +1, +1, +1, +1 ... Desta forma, o programa é executado como está escrito - in-

strução a instrução, seguindo um constante incremento de endereço de memória de programa.

www.mecatronicadegaragem.blogspot.com

Page 77: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 77

Se o contador de programa é alterado pelo software, então há alguns pontos a ter consideração, para evitar

problemas:

Os oito bits menos signifi cativos são provenientes do registo PCL, que é legível e escrevível, quando os

cinco bits mais signifi cativos provêem do registo PCLATH que é apenas escrevível.

O registo PCLATH é limpo aquando de qualquer RESET.

Em linguagem assembler, o valor do contador de programa é marcado como PCL, mas obviamente apenas

se refere aos 8 bits menos signifi cativos. O programador deverá ter em atenção quando usar a instrução

“ADDWF PCL”. O resultado é um salto na posição de memória, através da soma de um número ao actual

endereço. É bastante usado quando de saltos para tabelas de conversão (look-up). Um problema surge

quando esta soma se arrasta para mais dos 8 bits do registo PCL. Não esquecer que, acima destes 8 bits,

já se trata do registo PCLATH.

Executando qualquer instrução para o registo PCL, simultaneamente causa os bits do contador de pro-

grama serem substituidos pelo conteudo do registo PCLATH. No entanto, o PCL tem acesso a apenas

8 bits do resultado da instrução, e o salto consequente será totalmente erróneo. O problema é resolvido

colocando essas instruções em endereços terminando por 0xXX00. Isto possibilita o programa saltar até

255 posições. Se saltos maiores são executados por esta instrução, o PCLATH deverá ser incrementado

em uma unidade para cada excesso do PCL (255 para 0).

Aquando da chamada, ou salto, para subrotinas (instruções CALL e GOTO), o microcontrolador dispõe

apenas de 11 bits para endereçar. Por esta razão, como a RAM que também é dividida em bancos, a ROM

está dividida em “páginas” de 2k cada. Tais instruções são executadas dentro destas páginas, sem quais-

quer problemas. Simplesmente, como o processador tem 11 bits de endereço do programa, pode endereçar

qualquer posição dentro dos 2KB. A fi gura abaixo explica em mais detalhe esta situação, como um salto

www.mecatronicadegaragem.blogspot.com

Page 78: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 78

para a subrotina PP1.

No entanto, se a subrotina, ou endereço de salto, não está dentro da mesma página da origem do mesmo, os

dois bits superiores em falta devem ser escritos no PCLATH. Esta operação está descrita na fi gura abaixo,

como um salto para o endereço da subrotina PP2.

Registos do PCLATH

Em ambos os casos, quando a subrotina encontra as instruções RETURN, RETLW ou RETFIE (para voltar

ao programa principal), o microcontrolador vai simplesmente continuar a execução do programa de onde tinha

deixado, pois o endereço de retorno foi armazenado na stack que, como mencionado, consiste de registos de

13 bits.

www.mecatronicadegaragem.blogspot.com

Page 79: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Registos de Função Especial

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 79

Endereçamento Indirecto

Juntamente com o endereçamento indirecto, o qual é lógico por si só, este microcontrolador é capaz de fazer

endereçamento indirecto através dos registos INDF e FSR. E, por vezes, simplifi ca em muito a escrita do pro-

grama. Todo o procedimento é possível porque o registo INDF não é um verdadeiro registo (fi sicamente não

existe), mas apenas especifi ca o registo que é dado pelo valor que está no FSR. Devido a isto, escrever ou ler

do INDF, signifi ca que se está a ler ou a escrever no registo que é dado pelo valor que está no FSR. Por outras

palavras, os endereços dos registos são especifi cados pelo FSR, e o conteúdo dos registos está armazenado no

INDF.

A diferença entre endereçamento directo e indirecto, é exemplifi cado na fi gura abaixo.

Endereçamento Directo e Indirecto

Como se pode ver, o problema dos “bits de endereços não existentes”, é solucionado por “pedi-los emprestado”

de outro registo. Desta vez, é o sétimo bit chamado IRP, do registo STATUS.

www.mecatronicadegaragem.blogspot.com

Page 80: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 80

Portas I/O - Entrada/SaídaFuncionalidades e Funções

Uma das mais importantes funcionalidades do microcontrolador, é o número de pinos I/O usados para ligação

aos periféricos externos. Neste caso do PIC16F887, há um total de 35 pinos I/O de uso geral.

De maneira a que o funcionamento dos pinos I/O coincida com a organização a 8 bits, todos eles estão, simi-

larmente aos registos, agrupados em Portas denominadas A, B, C, D e E.

Todas têem características em comum:

Por razões práticas, a maioria dos pinos I/O têm várias funções. Se um pino é usado para uma qualquer

função, não pode ser usado como I/O;

Cada porta tem um par, isto é, o correspondente registo TRIS: TRISA, TRISB, TRISC, TRISD e TRISE,

que determina o funcionamento, mas não o conteúdo.

Limpando os bits do TRIS (bit=0), o correspondente pino da Porta é confi gurado como Saída.

De igual forma, activando os bits do TRIS (bit=1), o correspondente pino da Porta é confi gurado como En-

trada.

Esta regra é simples de memorizar: 0 = Output (Saída), 1 = Input (Entrada)

www.mecatronicadegaragem.blogspot.com

Page 81: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 81

Portas I/O - Entrada/Saída

Registos PORTA e TRISA

A Porta A é um registo de 8 bits bidireccionais. Os bits do TRISA e ANSEL controlam os pinos da PORTA.

Todos os pinos da PORTA funcionam como I/O digital, e cinco deles ainda podem trabalhar como entradas

analógicas (descritas a AN):

www.mecatronicadegaragem.blogspot.com

Page 82: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 82

Similarmente aos bits do TRISA, que determinam quais dos pinos vão ser confi gurados como entrada ou

saída, os bits respectivos do ANSEL determinam quais os pinos que vão ser usados como entradas analógicas

ou I/O digitais.

RA0 = AN0 (determinado pelo bit ANS0 do registo ANSEL);

RA1 = AN1 (determinado pelo bit ANS1 do registo ANSEL);

RA2 = AN2 (determinado pelo bit ANS2 do registo ANSEL);

RA3 = AN3 (determinado pelo bit ANS3 do registo ANSEL); e

RA5 = AN4 (determinado pelo bit ANS4 do registo ANSEL).

Cada bit desta porta tem uma funcção adicional, relacionada com algum periférico interno. Estas funções

adicionais vão ser discutidas mais à frente.

Unidade ULPWU

O microcontrolador é normalmente usado em dispositivos que têem que funcionar periodicamente e, comple-

tamente independentemente, usando energia de baterias. Nestes casos, o consumo de energia deverá ser o mais

reduzido possível e prioritário. Exemplos típicos dessas são: termómetro, sensores de detecção de incêndio e

produtos de baixo consumo similares. Também é sabido que, uma redução na frequência de relógio reduz o

consumo energético, então, uma das mais convenientes soluções para esta situação é reduzir o relógio (usar um

cristal de 32KHz em vez de 4MHz ou 20MHz).

www.mecatronicadegaragem.blogspot.com

Page 83: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 83

Colocar o microcontrolador em modo de adormecido

(Sleep) é outro passo a dar. No entanto, mesmo com ambas

as medidas aplicadas, outra situação aparece. Como acordar

o microcontrolador, e colocá-lo em modo normal de opera-

ção. É obviamente necessário ter um sinal externo, que mude

de estado lógico em um dos pinos. Mesmo assim, a situação

ainda persisnte. Este sinal deverá ser gerado por electrónica

adicional, o que causa um aumento do consumo de energia

do sistema.

A solução ideal será a de, o microcontrolador, acordar sózinho periódicamente, o que é perfeitamente possível.

O circuito que o permite fazer, é mostrado aqui.

O princípio de operação é simples:

Um pino é confi gurado como saída, e é activado a nível lógico 1. Isso causa o condensador ser carregado.

Imediatamente depois, o mesmo pino é confi gurado como entrada. A mudança de estado lógico, habilita uma

interrupção, e o microcontrolador é posto em modo Sleep.

Seguidamente não há nada a fazer, excepto aguardar que o condensador se descarregue, através da corrente

de fuga que fl ui pelo pino de entrada. Quando isso ocorre, uma interrupção é gerada e o microcontrolador

continua a execução do programa em modo normal. A sequência é outra vez repetida.

Teoricamente, esta é uma solução perfeita. O problema é que, todos os pinos possíveis de gerar uma interrup-

ção, são digitais, e têem uma corrente de fuga excessivamente grande, quando a sua voltagem não está próxima

dos limites de Vdd ou Vss. Neste caso, o condensador é descarregado rapidamente, pois a corrente de descarga

é de várias centenas de microamperes. Esta é a razão pela qual o circuito ULPWU foi desenhado para ter lentas

quedas de tensão, e muito baixo consumo. A sua saída gera uma interrupção, enquanto que a entrada é ligada

a um dos pinos do microcontrolador. Está no pino RA0. Vendo a fi gura abaixo, com R=200ohms e C=1nF,

descarrega em aproximadamente 30ms, enquanto que o consumo total do microcontrolador reduz-se em 1000

vezes (algumas centenas de nanoamperes).

www.mecatronicadegaragem.blogspot.com

Page 84: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 84

Unidade ULPWU

Registos PORTB e TRISB

A Porta B é um registo de 8 bits bidireccionais. Os bits do registo TRISB determinam a função dos seus

pinos.

Similarmente à Porta A, um 1 lógico no registo TRISB, confi gura o pino respectivo como entrada, e vice-versa.

Seis pinos desta porta podem ser confi gurados como entrada analógica (AN). Os bits do registo ANSELH

determinam quais destes pinos vão trabalhar como entradas analógicas ou I/O digitais.

www.mecatronicadegaragem.blogspot.com

Page 85: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 85

RB0 = AN12 (determinado pelo bit ANS12 do registo ANSELH);

RB1 = AN10 (determinado pelo bit ANS10 do registo ANSELH);

RB2 = AN8 (determinado pelo bit ANS8 do registo ANSELH);

RB3 = AN9 (determinado pelo bit ANS9 do registo ANSELH);

RB4 = AN11 (determinado pelo bit ANS11 do registo ANSELH); e

RB5 = AN13 (determinado pelo bit ANS13 do registo ANSELH).

Cada bit desta porta tem uma função adicional, relacionada com algum periférico interno. Estas funções adi-

cionais vão ser discutidas mais à frente.

Todos os pinos desta porta têem resistências pull-ups internas, o que faz deles ideais para ligar botões-

de-pressão, interruptores, foto-acopladores, entre outros. De forma a ligar estas resistências às portas dos

microcontroladores, o bit apropriado do registo WPUB deve ser activado.

Além dos bits do WPUB, há outro bit que afecta a operação das resistências pull-up: o bit RBPU do registo

OPTION_REG. É um bit de uso geral, porque afecta a instalação global destas resistências.

Sendo de alta impedância, estes resistências virtuais não afectam os pinos confi gurados como saídas, mas

servem de extraordinária ajuda para as entradas. Assim, estão ligadas às entradas dos circuitos lógicos CMOS.

De outra maneira, comportar-se-iam como se estivessem a fl utuar, devido ao estado de alta impedância.

www.mecatronicadegaragem.blogspot.com

Page 86: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 86

Resistências de Pull-up

Se habilitado, cada pino da Porta B confi gurado como entrada, pode causar uma interrupção, mudando o

seu estado lógico. De maneira a habilitar os pinos que podem gerar a interrução, o bit respectivo no registo

IOCB deverá ser activado.

Devido a estas particularidades, os pinos da Porta B são normalmente usados para ligar botões-de-pressão, ou

teclados, pois não há necessidade de perder ciclos de programa a fazer o “varrimento” destas entradas.

www.mecatronicadegaragem.blogspot.com

Page 87: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 87

Exemplo de Teclado

Quando os pinos X, Y e Z estão confi guradas como saídas activadas ao estado lógico 1, é apenas necessário

esperar por um pedido de interrupção, que chega quando qualquer botão é premido. Fazendo, então, o var-

rimento das teclas, pode encontrar-se qual a que está a ser premida.

Pino RB0/INT

O pino RB0/INT é uma fonte verdadeira de interrupção externa. Pode ser confi gurado para reagir a um fl anco

ascendente ou descentence. O bit INTEDG do registo OPTION_REG selecciona qual o sinal.

Pinos RB6 e RB7

O leitor já deve ter notado que o microcontrolador PIC não tem quaisquer pinos especiais para a programação

(escrever para a memória de programa). Os pinos I/O normalmente usados para o funcionamento normal, são

usados para este fi m (RB6 para o clock e RB7 para dados). Também, é necessário alimentar o chip com 5V em

www.mecatronicadegaragem.blogspot.com

Page 88: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 88

Vdd e 0V em Vss, como também a tensão de programação Vpp da FLASH (12-14V). Durante a programa-

ção, a tensão Vpp é aplicada no pino de Reset (MCLR).

Apesar destas ligações serem necessárias, o microcontrolador pode ser gravado mesmo estando já montado

no sistema fi nal. Normalmente, um programa já gravado pode ser alterado pelo mesmo processo. Esta função

chama-se ICSP (In-Circuit Serial Programming - Programação Série Dentro do Circuito).

É necessário planear o sistema, se se pretende usar esta funcionalidade.

Não é nada de complicado, basta instalar um conector de 5 pinos no sistema a gravar, para que as tensões do

hardware programador possam aceder ao microcontrolador. De maneira a que estas tensões não interfi ram

com a restante electrónica, deverá ser pensado um circuito para travar as mesmas, usando resistências, díodos

ou jumpers.

Ligação ICSP

Registos PORTC e TRISC

A Porta C é um registo de 8 bits bidireccionais. Os bits do registo TRISC determinam a função dos seus pinos.

Todas as funções adicionais desta porta, serão explicadas mais à frente.

www.mecatronicadegaragem.blogspot.com

Page 89: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 89

Registos PORTD e TRISD

A Porta D é um registo de 8 bits bidireccionais. Os bits do registo TRISD determinam a função dos seus

pinos.

Registos PORTE e TRISE

A Porta E é um registo de 8 bits bidireccionais. Os bits do registo TRISE determinam a função dos seus pinos.

A única excepção é o pino RE3, que apenas serve de entrada, e o seu bit TRIS lê sempre “1”.

www.mecatronicadegaragem.blogspot.com

Page 90: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 90

Similarmente às Portas A e B, três pinos podem ser confi gurados como entradas analógicas. Os bits do registo

ANSELH determinam se o pino vai funcionar como entrada analógica (AN), ou se como I/O digital :

RE0 = AN5 (determinado pelo bit ANS5 do registo ANSELH);

RE1 = AN6 (determinado pelo bit ANS6 do registo ANSELH); e

RE2 = AN7 (determinado pelo bit ANS7 do registo ANSELH).

Registos ANSEL e ANSELH

Ambos estes registos são usados para confi gurar os pinos como analógico, ou I/O digital.

www.mecatronicadegaragem.blogspot.com

Page 91: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 91

Como fazê-lo:

Para confi gurar um pino como entrada analógica, o bit respectivo do ANSEL, ou ANSELH, deverá ser acti-

vado a 1. Para confi gurar o pino como I/O digital, o bit respectivo deverá ser desactivado (0).

O estado dos bits ANSEL, não tem qualquer efeito nas funções de saída digitais. O resultado de qualquer

tentativa de leitura de um pino confi gurado como entrada analógica, é 0.

www.mecatronicadegaragem.blogspot.com

Page 92: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Portas I/O - Entrada/Saída

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 92

Quando se projecta um sistema, escolher a porta através da qual o microcontrolador vai comunicar com os

periféricos circundantes. Se se pretender usar apenas I/O digitais, pode escolher-se qualquer das portas. Se

se pretender usar algumas das entradas analógicas, deverá escolher-se as portas apropriadas que suportam

essa confi guração, AN0-AN13;

Qualquer pino pode ser confi gurado como entrada ou saída, excepto o RE3 apenas como entrada. Os bits

dos TRISA, TRISB, TRISC, TRISD e TRISE, determinam como os respectivos pinos das PORTA,

PORTB, PORTC, PORTD e PORTE se vão comportar;

Se se usarem quaisquer entradas analógicas, activar o bit respectivo no ANSEL e ANSELH, no início do

programa;

Se se usarem interruptores ou botões-de-pressão, deverão ser ligados à Porta B, porque esta têm resistências

de pull-up. O uso destas resistências é habilitado pelo bit RBPU no OPTION_REG, e onde a activação

de resistências individualmente é possivel nos bits do WPUB; e

É normalmente necessário reagir, assim que os pinos de entrada mudam de estado lógico. No entanto, não é

necessário escrever um programa para mudar o estado lógico dos pinos. É mais simples ligar estas entradas

aos pinos da PORTB, e habilitar a interrupção a cada mudança de estado lógico. Os bits dos registos

IOCOB e INTCON servem para tal.

www.mecatronicadegaragem.blogspot.com

Page 93: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 93

Temporizadores

Os temporizadores deste PIC, podem ser descritos sucintamente. Há apenas três temporizadores/contadores

totalmente independentes, mas dados como TMR0, TMR1 e TMR2. Mas não tão simples quanto isso.

Temporizador TMR0

O temporizador TMR0 permite uma panóplia de aplicações práticas. É bastante conveniente, e simples, de

usar, para gerar pulsos de duração arbitrária, medição do tempo, ou para contar pulsos externos. Isto tudo

quase sem limitações.

O TMR0 é um temporizador/contador de 8 bits, com as seguintes funcionalidades:

Temporizador/contador de 8 bit;

Divisor de 8 bit, partilhado com o Watchdog;

Fonte de relógio interna, ou externa, programavel;

Interrupção por fi m de contagem (255 -> 0);

Selecção do fl anco do relógio externo.

A fi gura abaixo representa o TMR0 com todos os bits que determinam a sua operação. Estes bits são armaze-

nados no registo OPTION_REG.

www.mecatronicadegaragem.blogspot.com

Page 94: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 94

Temporizador TMR0

Registo OPTION_REG

RBPU - Bit de habilitação dos Pull-ups da PORTB

0 - Os pinos da PORTB podem ser ligados a resistências de Pull-up

1 - As resistências de pull-up estão desactivadas

www.mecatronicadegaragem.blogspot.com

Page 95: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 95

INTEDG - Bit de selecção do fl anco da Interrupção

0 - Interrupção no fl anco descendente no pino INT

1 - Interrupção no fl anco ascendente no pino INT

T0CS - Bit de selecção do relógio do TMR0

0 - Relógio interno (Fosc/4)

1 - Relógio através dos pulsos no pino RA4

T0SE - Bit de selecção do fl anco de incrementação do TMR0

0 - Incrementa no fl anco ascendente no pino RA4

1 - Incrementa no fl anco descendente no pino RA4

PSA - Bit de atribuição do Divisor

0 - Divisor atribuido ao TMR0

1 - Divisor atribuido ao Watchdog

PS2, PS1, PS0 - Bit de selecção da taxa de divisão

A taxa de divisão é ajustada, combinando estes três bits. Como se pode ver na tabela abaixo, a mesma

combinação dos bits, atribui diferentes taxas para o TMR0 e para o Watchdog, respectivamente.

PS2 PS1 PS0 TMR0 WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8 1:4 0 1 1 1:16 1:8 1 0 0 1:32 1:16 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128

A função do bit PSA, é descrita nas duas fi guras abaixo:

www.mecatronicadegaragem.blogspot.com

Page 96: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 96

Função do bit PSA = 0

Função do bit PSA = 1

Como se vê, o estado lógico do bit PSA determina qual a atribuição do divisor: se para o TMR0, se para o

Watchdog.

www.mecatronicadegaragem.blogspot.com

Page 97: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 97

Também, é de valor acrescentar:

Quando o divisor é atribuido ao TMR0, qualquer escrita no mesmo vai também limpar o divisor;

Quando o divisor é atribuido ao Watchdog, a instrução CLRWDT vai limpar ambos o divisor e o WDT;

Escrever para o registo TMR0, usado como temporizador, não dá o início de qualquer contagem, mas sim

após dois ciclos de relógio. Então é necessário ajustar o valor escrito no registo TMR0;

Quando o microcontrolador é posto em modo Sleep, o oscilador é desligado. O overfl ow (fi m de contagem,

255->0) não pode acontecer, pois não há pulsos para contar. É por esta razão que, a interrupção por over-

fl ow do TMR0, não pode “acordar” o microcontrolador;

Quando usado como contador de pulsos externos, sem divisor, a duração mínima do pulso, ou pausa,

deverá ser de 2 Tosc + 20ns. Tosc é o periodo do oscilador interno;

Quando usado como contador de pulsos externos, com divisor, a duração mínima do pulso, ou pausa,

deverá ser de 10ns;

O registo, do divisor de 8 bits, não está disponivel ao programador, o que signifi ca que não pode ser directa-

mente lido/escrito;

Aquando da mudança da atribuição do divisor, do TMR0 para o Watchdog, a seguinte sequência de in-

struções deverá ser feita, de maneira a evitar um Reset:

www.mecatronicadegaragem.blogspot.com

Page 98: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 98

BANKSEL TMR0

CLRWDT ;CLEAR WDT

CLRF TMR0 ;CLEAR TMR0 AND PRESCALER

BANKSEL OPTION_REG

BSF OPTION_REG,PSA ;PRESCALER IS ASSIGNED TO THE WDT

CLRWDT ;CLEAR WDT

MOVLW b’11111000’ ;SELECT BITS PS2,PS1,PS0 AND CLEAR

ANDWF OPTION_REG,W ;THEM BY INSTRUCTION “LOGICAL AND”

IORLW b’00000101’ ;BITS PS2, PS1, AND PS0 SET

MOVWF OPTION_REG ;PRESCALER RATE TO 1:32

Da mesma forma, aquando da mudança da atribuição do divisor, do Watchdog para o TMR0, a seguinte

sequência de instruções deverá ser feita:

BANKSEL TMR0

CLRWDT ;CLEAR WDT AND PRESCALER

BANKSEL OPTION_REG

MOVLW b’11110000’ ;SELECT ONLY BITS PSA,PS2,PS1,PS0

ANDWF OPTION_REG,W ;CLEAR THEM AFTERWARDS BY INSTRUCTION

;“LOGICAL AND”

IORLW b’00000011’ ;PRESCALER RATE IS 1:16

MOVWF OPTION_REG

De maneira a usar o TMR0 convenientemente, é necessário:

Seleccionar o modo:

O modo do TMR0 é escolhido com o bit T0CS do OPTION_REG: 0=temporizador, 1=contador;

Quando usado, o divisor deverá ser atribuido ao TMR0, desactivando o bit PSA do OPTION_REG. A

www.mecatronicadegaragem.blogspot.com

Page 99: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 99

taxa do divisor é atribuida pelos bits PS2-PS0 do mesmo registo; e

Quando se usa a interrupção, os bits GIE e TMR0IE do INTCON, deverão ser activados.

Para medir tempo:

Limpar o valor do TMR0, ou escrever um valor conhecido;

O tempo decorrido (em microsegundos, quando se usa um cristal de 4MHz) é medido lendo o TMR0; e

A fl ag TMR0IF do registo INTCON, é automativamente activada, a cada vez que há um overfl ow do

TMR0. Se activada, é gerada uma interrupção.

Para contar pulsos:

A polaridade dos pulsos a contar no pino Ra4, é seleccionada pelo bit T0SE do OPTION_REG: 0=fl anco

ascendente, 1=fl anco descendente; e

O número de pulsos pode ser lido do registo TMR0. O divisor, e interrupção, são usados da mesma ma-

neira do medidor de tempo.

Temporizador TMR1

O módulo TMR1 é um temporizador/contador de 16 bit, o que signifi ca que tem dois registos, TMR1L e

TMR1H. Pode contar até 65535 pulsos num só ciclo, ou seja, antes do contador retornar a zero (overfl ow).

Temporizador TMR1

www.mecatronicadegaragem.blogspot.com

Page 100: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 100

Similarmente ao TMR0, estes registos podem ser lidos/escritos a qualquer momento. Em caso de overfl ow,

uma interrupção é gerada.

O TMR1 pode funcionar em um de dois modos básicos: como temporizador, ou como contador. No entanto,

ao contrário do TMR0, cada um destes módulos tem funçoes adicionais.

Partes do registo T1CON, controlam o funcionamento do TMR1.

Panorâmica do Temporizador TMR1

Divisor do TMR1

O TMR1 tem um divisor separado, o que permite divisões por 1, 2, 4 ou 8, da entrada de relógio. Não se pode

ler/escrever directamente o divisor. No entanto, o contador do divisor é automaticamente limpo aquando de

uma escrita nos registos TMR1H ou TMR1L.

www.mecatronicadegaragem.blogspot.com

Page 101: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 101

Oscilador do TMR1

Os pinos RC0/T1OSO e RC1/T1OSI são usados para registar os pulsos dos periféricos externos, mas tam-

bém têem uma funcionalidade acrescida. Como se pode ver pela fi gura abaixo, são simultaneamente confi gura-

dos como entradas, pino RC1, e como saída, pino RC0, do oscilador adicional de baixa potência de quartzo.

Este circuito adicional, é principalmente desenhado para funcionar a baixas frequências (até 200KHz), mais

precisamente, para ser usado com cristais de quartzo de 32.768 KHz. Estes cristais são usados nos relógios de

quartzo, pois é simples de obter pulsos de um segundo, simplesmente dividindo a frequência.

Como este oscilador não depende do relógio interno, pode funcionar quando no modo de Sleep. É activado

pelo bit T1OSCEN do registo T1CON. O programador deve certifi car-se que aguarda alguns milisegundos,

para garantir um bom arranque deste oscilador.

Oscilador do TMR1

A tabela abaixo, mostra os valores recomendados para os condensa-

dores do cristal de quartzo. Estes valores não têem necessáriamente

de ser exactos.

Oscillator Frequency C1 C2

LP 32 kHz 33 pF 33 pF

LP 100 kHz 15 pF 15 pF

LP 200 kHz 15 pF 15 pF

Gate do TMR1

A origem da gate do TMR1 (interruptor que liga ou desliga), é controlado por software para ser o pino TG1

ou a saída do comparador C2. Esta gate permite ao TMR1 contar eventos de estado lógico no pino TG1, ou

eventos analógicos usando a saída do comparador C2. Ver fi gura a baixo. De maneira a medir a duração de um

www.mecatronicadegaragem.blogspot.com

Page 102: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 102

sinal, é sufi ciente ligar esta gate, e contar os pulsos que vão passando pela mesma.

TMR1 em modo de Temporizador

De maneira a seleccionar este modo, é necessário limpar o bit TMR1CS. Depois disto, o registo de 16 bits vai

ser incrementado a cada pulso que chegar do oscilador interno. Se um cristal de 4MHz estiver a ser usado, vai

haver uma incrementação a casa microsegundo.

Neste modo, o bit T1SYNC não afecta o temporizador, porque o mesmo está a contar pulsos do relógio

interno. Como toda a electrónica usa estes pulsos, não há necessidade de sincronização.

TMR1 em modo de Temporizador

O relógio oscilador do microcontrolador não funciona durante o modo Sleep. Devido a isto, o Overfl ow do

TMR1 não causa nenhuma interrupção.

www.mecatronicadegaragem.blogspot.com

Page 103: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 103

Oscilador do TMR1

O consumo energético do microcontrolador é reduzido, ao seu nível mínimo, quando no modo Sleep. O objec-

tivo é parar o oscilador.

De qualquer forma, é simples colocar o TMR1 neste modo - escrevendo uma instrução de SLEEP no pro-

grama. Surge o problema de como acordar o microcontrolador, porque apenas uma interrupção o pode fazer.

Como o microcontrolador “dorme”, uma interrupção tem que ser gerada por electrónica externa.

Oscilador do TMR1

De modo a resolver esta situação, um oscilador de baixo consumo a quartzo, que funciona quando no modo

Sleep, foi desenhado dentro do PIC. Aquilo que dantes era externo ao microcontrolador, está agora embutido

no silício e destinado ao TMR1.

O oscilador é ligado, activando o bit T1OSCEN do registo T1CON. Seguidamente, o bit TMR1CS é usado

para indicar que o TMR1 usa pulsos desse oscilador.

O sinal deste oscilador de quartzo é sincronizado, com o relógio do microcontrolador, desactivando o bit

T1SYNC. Neste caso, o TMR1 não pode trabalhar no modo Sleep. Simplesmente porque o circuito de

sincronização usa o relógio do microcontrolador; e

A interrupção por Overfl ow do TMR1 pode ser habilitada. Estas interrupções vão ocorrer no modo de

Sleep.

www.mecatronicadegaragem.blogspot.com

Page 104: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 104

TMR1 em modo de Contador

O TMR1 inicía o seu funcionamento como contador, activando o bit TMR1CS. Signifi ca que, o TMR1, é

incrementado a cada fl anco ascendente do pino T1CKI. Se o bit de controlo T1SYNC estiver desactivado, os

pulsos externos vão ser sincronizados. Por outras palavras, o TMR1 é sincronizado com o relógio de sistema

do microcontrolador, o que o torna um Contador Síncrono.

Quando o microcontrolador, funcionando desta maneira, é posto em Sleep, os registos TMR1H e TMR1L

não são incrementados, mesmo havendo pulsos externos na entrada T1CKI. Como o relógio do sistema não

funciona quando em Sleep, não há relógio para sincronização. No entanto, o divisor mantém o seu funciona-

mento, pois é apenas um divisor de frequência.

TMR1 em modo Contador

Este contador regista estados lógicos “1” na sua entrada. É

importante compreender que, pelo menos, um fl anco de-

scendente tem que ser registado, antes do primeiro fl anco

ascendente. Ver fi gura abaixo. A seta mostra quando o

TMR1 incrementa.

www.mecatronicadegaragem.blogspot.com

Page 105: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 105

Registo T1CON

T1GINV - Bit de inversão da Gate do TMR1, serve de inversão do estado lógico do pino T1G ou da saída

do comparador C2 (C2OUT). Permite que o TMR1 incrementa, tanto quando recebe pulsos de fl anco ascen-

dente, como de fl anco descendente.

1 - TMR1 incrementa a cada fl anco ascendente; e

0 - TMR1 incrementa a cada fl anco descendente.

TMR1GE - Bit que habilita a Gate do TMR1, que determina se a gate do pino T1G, ou a saída do compara-

dor C2, vai estar activa, ou não. Este bit só é funcional, se o bit TMR1ON estiver activo. De outra maneira, o

TMR1GE é ignorado.

1 - TMR1 está ligado, apenas se a Gate estiver desligada; e

0 - A gate não afecta o funcionamento do TMR1

T1CKPS1, T1CKPS0 - Bits de selecção do divisor de frequência da entrada de relógio do TMR1

T1CKPS1 T1CKPS0 Prescaler Rate 0 0 1:1 0 1 1:2 1 0 1:4 1 1 1:8

T1OSCEN - Bit que habilita o Oscilador de Baixa Potência

1 - Oscilador de baixa potência está activo como relógio do TMR1; e

0 - Oscilador de baixa potência está desligado.

www.mecatronicadegaragem.blogspot.com

Page 106: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 106

T1SYNC - Bit de sincronização do relógio externo do TMR1, habilita a sincronização dos pulsos de entrada

no T1CKI ou pelo oscilador de baixa potência. Quando conta pulsos do oscilador interno (TMR1CS=0), este

bit é ignorado.

1 - Não sincroniza a entrada externa de relógio; e

0 - Sincroniza a entrada externa de relógio.

TMR1CS - Bit de selecção da fonte de relógio do TMR1

1 - Conta pulsos do pino T1CKI, no fl anco ascendente; e

0 - Conta pulsos pelo relógio interno do microcontrolador.

TMR1ON - Bit que habilita o TMR1

1 - Liga o TMR1; e

0 - Desliga o TMR1.

De forma usar o TMR1 correctamente, é necessário o seguinte:

Como não é possivel desligar o divisor, a sua taxa de divisão é ajustada pelos bits T1CKPS1 e T1CKPS0,

do registo T1CON;

O modo deverá ser escolhido pelo bit TMR1CS: 0=clock interno, 1=pulsos externos;

Activando o bit T1OSCEN, o TMR1 é ligado, e os registos TMR1H e TMR1L são incrementados a cada

pulso do cristal externo. A contagem pára quando este bit é desactivado;

O divisor é limpo, quando se limpa ou escreve nos registos contadores TMR1H e TMR1L; e

Quando os registos TMR1H e TMR1L excedem o seu valor, a fl ag TMR1IF é activada, e a contagem

começa do zero.

Temporizador TMR2

O temporizador TMR2 é um módulo temporizador que funciona de uma maneira específi ca, e é controlado

por bits do registo T2CON.

www.mecatronicadegaragem.blogspot.com

Page 107: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 107

Temporizador TMR2

Os pulsos do oscilador interno, passam primeiro pelo divisor, em que a taxa pode ser alterada pelos bits

T2CKPS1 e T2CKPS0. A saída do divisor é então usada para incrementar o registo do TMR2, começando

de 0x00.

Os valores do TMR2 e PR2, são constantemente comparados, e o TMR2 é constantemente incrementado

até que o seu valor coincida com o de PR2. Quando ambos coincidem, o TMR2 é automaticamente posto a

0x00. O pós-divisor é incrementando, e a sua saída é usada para gerar uma interrupção, se a mesma estiver

habilitada.

Ambos os registos TMR2 e PR2 são possiveis de ler e escrever. A contagem é interrompida a qualquer mo-

mento, desactivando o bit TMR2ON, o que contribui para a poupança de energia.

Como opção extra, o momento do Reset do TMR2 pode, também, ser usado para determinar a velocidade de

comunicações síncronas série.

www.mecatronicadegaragem.blogspot.com

Page 108: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 108

Registo T2CON

TOUTPS3 - TOUTPS0 - Bits de selecção da taxa de divisão do pós-divisor do TMR2:

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 Postscaler Rate 0 0 0 0 1:1 0 0 0 1 1:2 0 0 1 0 1:3 0 0 1 1 1:4 0 1 0 0 1:5 0 1 0 1 1:6 0 1 1 0 1:7 0 1 1 1 1:8 1 0 0 0 1:9 1 0 0 1 1:10 1 0 1 0 1:11 1 0 1 1 1:12 1 1 0 0 1:13 1 1 0 1 1:14 1 1 1 0 1:15 1 1 1 1 1:16

TMR2ON - Bit que liga o TMR2

1 - TMR2 está ligado;

0 - TMR2 está desligado.

www.mecatronicadegaragem.blogspot.com

Page 109: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Temporizadores

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 109

T2CKPS1, T2CKPS0 - Bits de selecção da taxa de divisão do divisor do TMR2

T2CKPS1 T2CKPS0 Prescaler Rate 0 0 1:1 0 1 1:4 1 x 1:16

Quando se usa o TMR2, não deverão ser esquecidos alguns detalhes que têem a ver com os seus registos:

Quando do Power-on, o registo PR2 tem o valor de 0xFF;

Ambos o divisor e pós-divisor, são limpos quando se escreve para o TMR2;

Ambos o divisor e pós-divisor, são limpos quando se escreve para o T2CON;

Em qualquer Reset, ambos o divisor e pós-divisor são limpos.

www.mecatronicadegaragem.blogspot.com

Page 110: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 110

Módulos CCPCapture/Compare/PWM - Captura/Compara/PWM

O módulo CCP é um periférico que permite, ao programador, controlar e medir o tempo de diversos eventos.

Modo de Captura - permite a medição do tempo de duração de um evento. Este circuito monitoriza o estado

do TMR1, que constantemente muda de valor.

Modo de Comparação - compara valores entre os registos do TMR1 e CCPR. Também permite, ao pro-

gramador, gerar um sinal quando um determinado tempo já expirou.

Modo de PWM - Pulse Width Modulation = Modulação por Largura de Impulsos - gera sinais de frequência

e Duty-Cycle variaveis.

O PIC 16F887 tem dois destes módulos: CCP1 e CCP2.

Ambos são idênticos nas suas funções, com a excepção das funcionalidades avançadas do CCP1.

Módulo CCP1

Uma parte importante deste circuito, é o registo CCPR1 de 16 bits, que consiste nos registos CCPR1L e

CCPR1H. É usado para capturar, ou comparar com o TMR1 (TMR1H and TMR1L).

Módulo CCP1

www.mecatronicadegaragem.blogspot.com

Page 111: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 111

No modo de comparação, se habilitado por software, o Reset do temporizador TMR1 pode ocorrer com

coincidência de valores. Além disto, o módulo CCP1 pode gerar sinais PWM, de frequência e duty-cycle

variaveis.

Os bits do registo CCP1CON, controlam o módulo CCP1.

Modo de Captura com CCP1

Neste modo, o TMR1 é copiado para o CCP1, nas seguintes situações:

Cada fl anco descendente no pino RC2/CCP1;

Cada fl anco ascendente no pino RC2/CCP1;

Cada 4º fl anco ascendente no pino RC2/CCP1;

Cada 16º fl anco ascendente no pino RC2/CCP1.

A combinação dos quatro bits (CCP1M3 - CCP1M0) do registo de controlo, determina destas situações quais

vão disparar a transferência dos 16 bits. Também, o pino RC2/CCP1 deverá estar confi gurado como entrada,

e o TMR1 deverá funcionar como temporizador ou contador síncrono.

CCP1 em modo de Captura

www.mecatronicadegaragem.blogspot.com

Page 112: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 112

A fl ag CCP1IF é activada quando a captura é feita. Se tal acontecer, e se o bit PIE estiver activado, então uma

interrupção é gerada.

Quando o modo de captura é mudado, interrupções de captura não desejaveis poderão ser geradas. De maneira

a evitar esta situação, ambos os bits CCP1IE e CCP1IF deverão ser desactivados, antes de fazer qualquer

mudança.

Interrupções não desejaveis também poderão ser geradas, ao mudar de um divisor de captura para outro. Para

evitar esta situação, o módulo CCP1 deve ser temporáriamente desligado, antes de mudar de divisor.

É recomendada a seguinte sequência de comandos:

BANKSEL CCP1CON

CLRF CCP1CON ;CONTROL REGISTER IS CLEARED

;CCP1 MODULE IS OFF

MOVLW XX ;NEW PRESCALER MODE IS SELECTED

MOVWF CCP1CON ;NEW VALUE IS LOADED TO THE CONTROL REGISTER

;CCP1 MODULE IS SIMULTANEOUSLY SWITCHED ON

Modo de Comparação com CCP1

Neste modo, o valor do CCP1 é constantemente comparado com o valor do TMR1. Quando os valores co-

incidem, o estado lógico da saída RC2/CCP1 pode alterar, o que vai depender do estado dos bits CCP1M3

- CCP1M0. A fl ag CCP1IF é, também, simultaneamente activada.

Para confi gurar o módulo CCP1 para funcionar deste modo, duas condições devem ser verdadeiras:

- O Pino RC2/CCP1 deverá ser confi gurado como saída;

- O temporizador TMR1 deverá ser sicronizado com o clock interno.

www.mecatronicadegaragem.blogspot.com

Page 113: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 113

CCP1 em modo de Comparação

Modo de PWM com CCP1

Sinais com frequência e duty-cycle variavel, têem uma grande aplicação em automação. Um exemplo típico é

um circuito de controlo de potência, que está na fi gura abaixo. Se um estado lógico 0 representa o interruptor-

desligado, e um estado lógico 1 representa o interruptor-ligado, a energia que a carga consome, é directamente

proporcional à duração do pulso. Esta relação é chamada de Duty-Cycle, ou ciclo-activo.

CCP1 em modo de PWM

www.mecatronicadegaragem.blogspot.com

Page 114: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 114

Outro exemplo muito comum, é o uso de sinais PWM para gerar sinais ou formas de onda arbitrárias, como

por exemplo uma onda sinusoidal.

CCP1 em modo de PWM, com fi ltragem

Dispositivos que funcionam desta maneira, são frequentemente usados como reguladores comutados, que con-

trolam o funcionamento de motores: velocidade, aceleração, desaceleração, etc.

www.mecatronicadegaragem.blogspot.com

Page 115: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 115

Módulo PWM

A fi gura acima, mostra o diagrama de blocos do módulo CCP1 confi gurado no modo de PWM. De maneira

a gerar pulsos de forma arbitrária no pino de saída, é necessário determinar dois valores: a frequência do pulso

e a sua duração.

Modo PWM

www.mecatronicadegaragem.blogspot.com

Page 116: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 116

Periodo do PWM

O periodo (T) do pulso de saída é especifi cado pelo registo PR2 do TMR2. O periodo do PWM pode ser

calculado pela seguinte equação:

PWM Periodo (T) = (PR2 +1) * 4Tosc * Valor Divisor TMR2

Se o periodo do PWM fôr conhecido, é facil de calcular a frequência, pois esta é o inverso do periodo -> F =

1 / T.

Duty-Cycle do PWM

O Duty-Cycle do PWM é confi gurado usando 10 bits: oito MSb’s (bits mais signifi cativos) do registo CCP1RL

e dois adicionais LSb’s (bits menos signifi cativos) do registo CCP1CON (DC1B1 e DC1B0). O resultado é

um número de 10 bits, presente na fórmula:

Duty-Cycle = Largura do Pulso = (CCPR1L,DC1B1,DC1B0) * Tosc * Valor Divisor TMR2

A tabela seguinte, mostra como gerar sinais PWM de frequência variavel, se se usar um cristal quartzo de

20MHz (Tosc=50ns)

Frequency [KHz] 1.22 4.88 19.53 78.12 156.3 208.3

TMR2 Prescaler 16 4 1 1 1 1

PR2 Register FFh FFh FFh 3Fh 1Fh 17h

A lembrar:

O pino de saída será constantemente activado, caso a Largura do Pulso seja maior que o periodo do

PWM;

Nesta aplicação, o pós-divisor do TMR2 não pode ser usado para gerar periodos maiores de PWM.

www.mecatronicadegaragem.blogspot.com

Page 117: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 117

Resolução do PWM

Um sinal de PWM não é mais que uma sequência de pulsos, com largura do pulso variavel. Para uma de-

terminada frequência (número de pulsos por segundo), há um número limitado de combinações de larguras

de impulso. Este número é chamado de resolução, e medido em bits. Por exemplo, uma resolução de 10 bits,

resulta em 1024 larguras de impulso, onde uma resolução de 8 bits, resulta em 256 larguras de impulso.

Relativamente a este microcontrolador, a resolução é especifi cada pelo PR2. O valor máximo é obtido escre-

vendo 0xFF.

Frequências e resolução do PWM, com Fosc de 20MHz:

PWM Frequency 1.22kHz 4.88kHz 19.53kHz 78.12kHz 156.3kHz 208.3kHz Timer Prescale 16 4 1 1 1 1

PR2 Value FFh FFh FFh 3Fh 1Fh 17h Maximum Resolution 10 10 10 8 7 6

Frequências e resolução do PWM, com Fosc de 8MHz:

PWM Frequency 1.22kHz 4.90kHz 19.61kHz 76,92kHz 153.85kHz 200.0kHz Timer Prescale 16 4 1 1 1 1

PR2 Value 65h 65h 65h 19h 0Ch 09h Maximum Resolution 8 8 8 6 5 5

Registos CCP1CON

www.mecatronicadegaragem.blogspot.com

Page 118: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 118

P1M1, P1M0 - bits de confi guração da saída de PWM - em todos os modos, excepto no PWM, o pino P1A

é a entrada do módulo de Captura/Comparação. Os pinos P1B, P1C e P1D são I/O da Porta D. No modo de

PWM, estes bits afectam o módulo CCP1, como mostra a tabela abaixo:

P1M1 P1M0 Mode

0 0

PWM com saída única

Pino P1A, saída de sinal modulado,

Pinos P1B, P1C e P1D são I/O da porta D

0 1

Confi guração em Ponte completa

Pino P1D, saída de sinal modulado

Pino P1A está activo

Pinos P1B e P1C estão inactivos

1 0

Confi guração em Meia Ponte

Pinos P1A e P1B, saída modulada de sinal

Pinos P1C e P1D são I/O da porta D

1 1

Confi guração em Ponte completa Reversa

Pino P1B, saída de sinal modulado

Pino P1C está activo

Pinos P1A e P1D estão inactivos

DC1B1, DC1B0 - MSb’s do Duty-Cycle do PWM - são apenas usados no modo de PWM, em que represen-

tam os dois bits menos signifi cativos de um número de 10 bit. Este número determina a Largura de Impulso

do sinal PWM. Os restantes 8 bits, estão armazenados no registo CCP1RL.

CCP1M3-CCP1M0 - bits de selecção do modo de CCP1 :

www.mecatronicadegaragem.blogspot.com

Page 119: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 119

CCP1M3 CCP1M2 CCP1M1 CCP1M0 Mode0 0 0 0 Módulo desligado0 0 0 1 Não usado

0 0 1 0Modo de Comparação

bit CCP1IF é activado quando coincide0 0 1 1 Não usado

0 1 0 0Modo de Captura

A cada fl anco descendente no pino CCP1

0 1 0 1Modo de Captura

A cada fl anco ascendente no pino CCP1

0 1 1 0Modo de Captura

A cada 4º fl anco ascendente no pino CCP1

0 1 1 1Modo de Captura

A cada 16º fl anco ascendente no pino CCP1

1 0 0 0Modo de Comparação

Saída e bit CCP1IF são activados quando coincide

1 0 0 1

Modo de ComparaçãoSaída é desactivada e bit CCP1IF é activado quando

coincide

1 0 1 0

Modo de ComparaçãoChamada de interrupção e bit CCP1IF é activado

quando coincide

1 0 1 1

Modo de Comparaçãobit CCP1IF é activado e registos de temporizadores

1 ou 2 são limpos

1 1 0 0

Modo de PWMPinos P1A e P1C são activos a 1

Pinos P1B e P1D são activos a 1

1 1 0 1

Modo de PWMPinos P1A e P1C são activos a 1

Pinos P1B e P1D são activos a 0

1 1 1 0

Modo de PWMPinos P1A e P1C são activos a 0

Pinos P1B e P1D são activos a 1

1 1 1 1

Modo de PWMPinos P1A e P1C são activos a 0

Pinos P1B e P1D são activos a 0

www.mecatronicadegaragem.blogspot.com

Page 120: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 120

Módulo CCP2

Excluindo a diferença de nomes de registos e bits, este módulo é uma boa cópia do CCP1, em modo normal.

Há apenas uma diferença entre ambos, quando o CCP2 opera no modo de Comparação.

Essa diferença centra-se no sinal de Reset do TMR1. Nomeadamente, se o conversor A/D está ligado, no

momento em que os valores de TMR1 e CCPR2 coincidem, o sinal de Reset do TMR1 vai automaticamente

iniciar uma conversão A/D.

Módulo CCP2

Similarmente ao módulo anterior, este circuito é controlador pelos bits do registo CCP2CON.

Registo CCP2CON

DC2B1, DC2B0 - MSb’s do Duty-Cycle do PWM - são apenas usados no modo de PWM, em que represen-

tam os dois bits menos signifi cativos de um número de 10 bit. Este número determina a Largura de Impulso

do sinal PWM. Os restantes 8 bits, estão armazenados no registo CCP2RL.

CCP2M3-CCP2M0 - bits de selecção do modo de CCP2

www.mecatronicadegaragem.blogspot.com

Page 121: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 121

CCP2M3 CCP2M2 CCP2M1 CCP2M0 Mode0 0 0 0 Módulo desligado0 0 0 1 Não usado

0 0 1 0Não usadoNão usado

0 0 1 1 Não usado

0 1 0 0Modo de Captura

A cada fl anco descendente no pino CCP2

0 1 0 1Modo de Captura

A cada fl anco ascendente no pino CCP2

0 1 1 0Modo de Captura

A cada 4º fl anco ascendente no pino CCP2

0 1 1 1Modo de Captura

A cada 16º fl anco ascendente no pino CCP2

1 0 0 0Modo de Comparação

Saída e bit CCP2IF são activados quando coincide

1 0 0 1

Modo de ComparaçãoSaída é desactivada e bit CCP2IF é activado quando

coincide

1 0 1 0

Modo de ComparaçãoChamada de interrupção e bit CCP2IF é activado

quando coincide e pino CCP2 não é afectado

1 0 1 1

Modo de Comparaçãobit CCP2IF é activado, registos do TMR1 são lim-

pos, ADC arranca se o ADC estiver ligado quando

coincide

1 1 x x Modo de PWM

Confi guração do módulo CCP1, para funcionamento em PWM

De maneira a confi gurar o módulo CCP para funcionamento em PWM, os seguintes passos devem ter-se em

conta:

Confi gurar o pino CCP1 como entrada;•

www.mecatronicadegaragem.blogspot.com

Page 122: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos CCP

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 122

Ajustar o periodo do PWM, carregando o registo PR2;

Confi gurar o módulo CCP, para o modo de PWM, combinando bits do registo CCP1CON;

Ajustar o Duty-Cycle do PWM, carregando o registo CCP1RL, e os bits DC1B1-DC1B0 do

CCP1CON;

Para confi gurar e ligar o TMR2:

Limpar a Flag de interrupção TMR2IF, no registo PIR1;

Ajustar o divisor do TMR2, carregando os bits T2CKPS1 e T2CKPS0 do registo T2CON;

Ligar o TMR2, activando o bit TMR2ON no T2CON;

Habilitar os pinos de saída do PWM, depois de um cíclo de PWM ter passado;

Esperar pelo fi m de contagem do TMR2 (overfl ow), bit TMR2IF do registo PIR1 é activado;

Confi gurar o respectivo pino como saída, no registo TRISx.

www.mecatronicadegaragem.blogspot.com

Page 123: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 123

Módulos de Comunicação Série

O módulo EUSART - Enhanced Universal Synchronous Asynchronous Receiver Transmitter - Receptor/

Transmissor Síncrono/Assíncrono Série Avançado, é um periférico interno de comunicações I/O série. Tam-

bém é conhecido como SCI - Serial Communications Interface - Interface de Comunicações Série.

Contém todos os geradores de relógio, “shift-registers” e registos de dados necessários para fazer uma emissão,

ou recepção, de dados série, independentemente da execução do programa principal. Como o seu nome indica,

aparte do uso do relógio para sincronização, este módulo também pode estabelecer comunicações assíncronas,

o que o torna insubstituivel em algumas aplicações.

Como exemplo, no caso de ser difi cil, ou impossivel,

de disponibilizar canais especiais de Relógio e Dados,

ex.: controlo remoto por rádio ou infravermelhos, o

módulo EUSART é uma solução bastante conveni-

ente.

O sistema EUSART, dentro do PIC16F887, tem as seguintes características:

Transmissão/Recepção Assíncrona em Full-Duplex (envia e recebe ao mesmo tempo);

Tamanho de dados confi guravel entre 8 ou 9 bits;

Detecção de endereço no modo de 9 bits;

Detecção de erro, de registo de entrada já cheio;

Comunicação Hall-Duplex (ou envia, ou recebe) no modo Síncrono Mestre, ou Escravo.

www.mecatronicadegaragem.blogspot.com

Page 124: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 124

Modo Assíncrono da EUSART

A EUSART transmite e recebe dados, usando um formato normalizado de “non-return-to-zero (NRZ)”, ou

não-retorna-ao-zero. Como de pode ver na fi gura abaixo, este modo não usa sinal de relógio, enquanto os dados

estão a ser transferidos:

EUSART em modo Assíncrono

Cada pacote de dados é transferido da seguinte maneira:

Quando parado, o pino de saída está no estado lógico 1;

Cada transmissão de dados começa com um bit START, que é sempre zero (0);

Cada pacote de dados tem 8 ou 9 bits de tamanho, onde o LSB é sempre o primeiro a ser transferido;

Cada transmissão de dados termina com um bit de STOP, que tem sempre estado lógico (1).

www.mecatronicadegaragem.blogspot.com

Page 125: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 125

Transmissor Assíncrono da EUSART

Transmissor Assíncrono da EUSART

De maneira a possibilitar a transmissão de dados com o módulo EUSART, é necessário confi gurá-lo para

trabalhar como transmissor. Ou seja, é necessário defi nir o estado dos seguintes bits:

TXEN = 1 - O transmissor da EUSART está ligado, activando este bit no registo TXSTA;

SYNC = 0 - A EUSART está confi gurada para funcionar em modo assíncrono, desactivando este bit do

registo TXSTA;

SPEN = 1 - Activando este bit do registo RCSTA, a EUSART é activada e o pino TX/CK é automaticamente

confi gurado como saída. Se este bit é simultaneamente usado para alguma função analógica, esta deve ser

desactivada, limpando o bit correspondente no registo ANSEL.

O cerne do transmissor EUSART, é o “shift-register” TSR, que não é directamente acessivel pelo utilizador. De

maneira a iniciar a transmissão, o módulo deve estar ligado, activando o bit TXEN. Os dados a enviar, devem

ser escritos no registo TXREG, o que vai causar a seguinte sequência de eventos:

www.mecatronicadegaragem.blogspot.com

Page 126: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 126

O byte é imediatamente transferido para o “shift-register” TSR;

O registo TXREG mantém-se vazio, o que é indicado pela fl ag TXIF do PIR1. Se o bit TXIE do registo

PIE1 estiver activo, uma interrupção é gerada. De qualquer modo, quer a interrupção esteja activa, ou não,

esta fl ag é sempre activada. Também, não pode ser apagada pelo sotware, mas é apagada quando se escreve

para o TXREG;

A electrónica “empurra” os dados para o pino TX, ao mesmo ritmo do relógio interno: START bit ... dados

... STOP bit;

Quando o último bit abandona o TSR, o bit TRMT do registo TXSTA é automaticamente activado;

Se, entretanto, o TXREG recebeu um novo caracter, todo o procedimento é repetido imediatamente ao

STOP bit do caracter anteriormente transmitido.

O envio de dados de 9 bits, é habilitado activando o bit TX9 do TXSTA. O bit TX9D do TXSTA é o nono

MSB. Quando da transferência, o TX9D deverá ser escrito, antes de escrever para o TXREG. Todos os noves

bits de dados serão transmitidos, assim que a escrita no TXREG estiver completa.

www.mecatronicadegaragem.blogspot.com

Page 127: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 127

Receptor Assíncrono da EUSART

Receptor Assíncrono da EUSART

Para activar a recepção de dados, é necessário fazer o seguinte:

CREN = 1 - O receptor da EUSART é ligado, activando este bit no registo RCSTA;

SYNC = 0 - A EUSART está confi gurada para funcionar em modo assíncrono, desactivando este bit do

registo TXSTA;

SPEN = 1 - Activando este bit do registo RCSTA, a EUSART é activada e o pino TX/CK é automaticamente

confi gurado como saída. Se este bit é simultaneamente usado para alguma função analógica, esta deve ser

desactivada, limpando o bit correspondente no registo ANSEL.

Quando estes passos forem concluidos, e o START bit detectado, os dados são transferidos para o shift-regis-

ter RSR pelo pino RX. Quando o STOP bit fôr recebido, a seguinte ocorre:

www.mecatronicadegaragem.blogspot.com

Page 128: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 128

Os dados são automaticamente transferidos para o RCREG, se vazio;

A fl ag RCIF é activada, e uma interrupção, se estiver habilitada pelo bit RCIE no PIE1, ocorre. De igual

forma ao transmissor, a fl ag é limpa apenas quando se lê do RCREG. Não esquecer que é uma memória de

recepção de dois bytes, o que permite receber dois caracteres simultaneamente;

Se o RCREG estiver ocupado, com os dois bytes e o shift-register detectar um STOP bit, o bit the Over-

fl ow OERR vai ser activado. Neste caso, os dados que chegaram são perdidos, e o bit OERR deverá ser

limpo pelo software. Tal é feito desactivando e activando o bit CREN. NOTA: não é possivel receber novos

dados, enquanto o bit OERR estiver activo;

Se o STOP bit for zero, o bit FERR do RCSTA é activado, indicando erro na recepção;

Para receber dados com 9 bits, é necessário activar o bit RX9 no RCSTA.

Detecção de Erros na Recepção

Há dois tipos de erros que o microcontrolador pode detectar automaticamente. O primeiro é chamado de erro

de Framing, e ocorre quando o receptor não detecta o STOP bit no tempo certo. Este erro é indicado pelo bit

FERR do RCSTA.

Se este bit estiver activado, signifi ca que a última recepção de dados pode estar incorrecta.

É importante lembrar:

Um erro de Framing não gera uma interrupção por si próprio;

Se este bit estiver activo, os últimos dados têem erros;

Um erro de Framing, não impossibilita a recepção de dados;

O bit FERR é limpo, lendo os dados recebidos;

O bit FERR não pode ser limpo por software. Se necessário, pode ser limpo, desactivando o bit SPEN do

RCSTA. Vai simultaneamente causar Reset de todo o sistema EUSART.

Outro tipo de erro, é chamado de “Overrun”. A memória de receoção pode conter dois caracteres. Um erro

overrun vai ser gerado se o terceiro caracter é recebido. Simplesmente não há espaço para outro byte, e um

error é inevitavel. Quando esta situação acontece, o bit OERR do RCSTA é activado. As consequências são as

seguintes:

www.mecatronicadegaragem.blogspot.com

Page 129: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 129

Os dados já recebidos, e armazenados na memória de recepção, podem ser normalmente lidos;

Nenhum byte adicional vai ser recebido, enquanto o bit OERR não for desactivado;

Este bit não é directamente acessivel. Para o limpar, é necessário desactivar o bit CREN do RCSTA, ou

fazendo um Reset ao módulo EUSART, limpando o bit SPEN do TCSTA.

Recepção de dados de 9 bits

Além de receber dados de 8 bits, o sistema EUSART suporta recepção de dados com 9 bits.

No lado transmissor, o nono bit está “agarrado” ao byte original, mesmo antes do STOP bit. No lado receptor,

quando o bit RX9 do RCSTA está activo, o nono bit vai ser automaticamente escrito no bit RX9D, do mesmo

registo.

Quando este byte é recebido, o programador deve ter em atenção em como o vai ler. O nono bit deverá ser lido

antes de ler os restantes 8 bits, pois se não o fi zer, o nono bit será automaticamente limpo.

Recepção de dados a 9 bits

www.mecatronicadegaragem.blogspot.com

Page 130: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 130

Detecção de endereços

Quando o bit ADDEN do registo RCSTA está activo, o módulo EUSART está habilitado a receber dados

de 9 bits, onde todos os dados de 8 bits serão ignorados. Embora pareça uma restrição, este modo permite a

comunicação série entre vários microcontroladores.

O principio de operação é simples. O Mestre envia 9 bits, que representa o endereço de um microcontrolador.

Todos os microcontroladores Escravos que partilham a linha de transmissão, recebem estes dados. Todos os

escravos deverão ter o bit ADDEN activado, para permitir a detecção de endereço.

Depois da recepção, cada Escravo verifi ca se esse endereço é o seu. O software, depois de confi rmar o endereço,

deverá desactivar a detecção de endereço, limpando o bit ADDEN. O dispositivo Mestre continua o envio de

dados de 8 bits. Todos os dados passando pela linha de transmissão, vão ser recebidos e reconhecidos apenas

pelo Escravo já correctamente endereçado. Após receber o último byte, o Escravo deverá activar o bit AD-

DEN.

de maneira a poder detectar outra vez os endereços.

www.mecatronicadegaragem.blogspot.com

Page 131: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 131

Registo TXSTA

CSRC - Bit de selecção da origem do relógio. É apenas usado no modo síncrono.

1 - modo Mestre. Clock é gerado internamente pelo gerador de Baud Rate;

0 - modo Escravo. Clock é gerado por uma fonte externa.

TX9 - Bit de activação de transmissão de 9 bits

1 - Transmissão a 9 bits

0 - Transmissão a 8 bits

TXEN - Bit de activação da Transmissão

1 - Transmissão activa

0 - Transmissão desligada

SYNC - Bit de selecção do modo da EUSART

1 - EUSART funciona no modo síncrono

0 - EUSART funciona no modo assíncrono

SENDB - Bit de envio de caracter de “break”. Apenas usado em modo assíncrono, e apenas no caso de desco-

brir o standard do barramento LIN

1 - O envio do caracter Break activado

0 - O envio do caracter Break terminou

BRGH - Bit de selecção de High Baud Rate (alta velocidade de relógio) no modo assíncrono. Não afecta a

EUSART no modo síncrono.

www.mecatronicadegaragem.blogspot.com

Page 132: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 132

1 - EUSART funciona em alta velocidade

0 - EUSART funciona em baixa velocidade

TRMT - Bit de estado do Shift-Register de Transmissão

1 - Registo TSR está vazio

0 - Registo TSR está cheio

TX9D - Nono bit de dados transmitidos. Pode ser usado para endereço ou para bit de paridade.

Registo RCSTA

SPEN - Bit de activação da porta Série

1 - Porta Série activa. Os pinos RX/DT e TX/CK são automaticamente confi gurados como entrada e saída,

respectivamente

0 - Porta Série desactivada

RX9 - Bit de activação da Recepção de 9 bits

1 - Recepção de 9 bits

0 - Recepção de 8 bits

SREN - Bit de activação de Recepção singular. Usado apenas em modo síncrono, quando o microcontrolador

funciona como Mestre

1 - Recepção singular activada

0 - Recepção singular desactivada

www.mecatronicadegaragem.blogspot.com

Page 133: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 133

CREN - Bit de activação de Recepção contínua

Modo Assíncrono:

1 - Recepção contínua activada

0 - Recepção contínua desactivada

Modo Síncrono

1 - Recepção contínua activada, até o bit CREN ser limpo

0 - Recepção contínua desactivada

ADDEN - Bit de activação de Detecção de Endereço

1 - Activa a detecção de endereço, com recepção a 9 bits

0 - Desactiva a detecção de endereço, e o nono bit pode ser usado como bit de paridade

FERR - Bit de erro de “Framing”

1 - Na recepção, erro de Framing detectado

0 - Sem erro de Framing

OERR - Bit de erro de “Overrun”

1 - Na recepção, erro de Overrun detectado

0 - Sem erro de Overrun

RX9D - O nono bit dos dados recebidos, pode ser usado com endereço, ou bit de paridade

BRG - Baud Rate Generator - Gerador de Relógio para a EUSART

Se se olhar atentamente para o diagrama do receptor/transmissor assíncrono da EUSART, em ambos os casos,

pode ver-se que o sinal de relógio do temporizador local BRG, é usado para a sincronização. A mesma fonte de

relógio é usada no modo síncrono.

Este temporizador consiste em dois registos de 8 bits, num total de 16 bits.

www.mecatronicadegaragem.blogspot.com

Page 134: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 134

Gerador de Baud Rate da EUSART

Um número escrito para estes dois registos, determina o Baud Rate - Velocidade da porta Série. Além do mais,

ambos o bit BRGH do TXSTA e o bit BRGH16 do BAUDCTL, infl uenciam a frequência de relógio.

A fórmula usada para calcular o Baud Rate, é dada pela tabela abaixo:

BitsBRG / EUSART Mode Baud Rate Formula

SYNC BRG1G BRGH

0 0 0 8-bit / assíncrono Fosc / [64 (n + 1)]

0 0 1 8-bit / assíncrono Fosc / [16 (n + 1)]

0 1 0 16-bit / assíncrono Fosc / [16 (n + 1)]

0 1 1 16-bit / assíncrono Fosc / [4 (n + 1)]

1 0 x 16-bit / assíncrono Fosc / [4 (n + 1)]

1 1 x 16-bit / assíncrono Fosc / [4 (n + 1)]

As tabelas seguintes, contêem valores que devem ser escritos no registo SPBRG, e nos bits SYNC, BRGH e

BRGH16, de maneira a obter Baud Rates padronizadas.

As fórmulas usadas para determinar o Baurd Rate, são:

www.mecatronicadegaragem.blogspot.com

Page 135: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 135

www.mecatronicadegaragem.blogspot.com

Page 136: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 136

www.mecatronicadegaragem.blogspot.com

Page 137: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 137

Registo BAUDCTL

www.mecatronicadegaragem.blogspot.com

Page 138: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 138

ABDOVF - Flag de Overfl ow da detecção de Auto-Baud-Rate, é apenas usado no modo assíncrono, durante

a detecção do baud rate

1 - Temporizador Auto Baud Rate chegou ao fi m

0 - Temporizador Auto Baud Rate não chegou ao fi m

RCIDL - Flag de Recepção parada, apenas usado no modo assíncrono

1 - A recepção está parada

0 - O START bit foi recebido, e a recepção está em progresso.

SCKP - Bit de selecção da polaridade do Relógio Síncrono

Modo Assíncrono:

1 - Dados invertidos na transmissão no pino RC6/TX/CK

0 - Dados não invertidos na transmissão no pino RC6/TX/CK

Modo Síncrono:

1 - Sincronização no fl anco ascendente do relógio

0 - Síncronização no fl anco descendente do relógio

WUE - Bit que habilita o Wake-up (“acordar”) pela EUSART

1 - O receptor aguarda por um fl anco descendente no pino RC7/RX/DT, para acordar o microcontrolador do

modo Sleep

0 - O receptor funciona normalmente

ABDEN - Bit de habilitação de Detecção Automática do Baud Rate, apenas em modo assíncrono

1 - Modo de detecção automática do baud rate está ligado. Este bit é automaticamente limpo aquando da

detecção do baud rate

0 - Modo de detecção automática do baud rate está desligado

www.mecatronicadegaragem.blogspot.com

Page 139: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 139

Resumidamente:

Enviar dados pela EUSART em modo assíncrono:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL,

e pelos registos SPBRGH eSPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a

ligar a porta série;

Na transmissão de 9 bits, o bit TX9 do TXSTA deverá ser activado;

A transmissão de dados é habilitada, activando o bit TXEN do TXSTA. O bit TXIF do PIR1 é automati-

camente activado;

Se for necessário haver um interrupção, o bit TXIE do PIE1, e os GIE e PEIE do INTCON deverão ser

activados;

Na transmissão de 9 bits, o valor do nono bit deverá ser escrito no bit TX9D do TXSTA;

A transmissão inicia quando se escreve no registo TXREG;

Receber dados pela EURSAR em modo assíncrono:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL,

e pelos registos SPBRGH eSPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a

ligar a porta série;

Se for necessário haver uma interrupção, o bit RCIE do PIE1, e os GIE e PEIE do INTCON deverão ser

activados;

Na recepção de 9 bits, o bit RX9 do RCSTA deverá ser activado;

A recepção de dados deverá ser habilitada, activando o bit CREN do RXSTA;

O registo RCSTA deverá ser lido, para tirar a informação de possiveis erros que ocorreram durante a

transmisssão. Na recepção a 9 bits, o nono bit estará armazenado neste registo;

O byte recebido e armazenado no registo RCREG, deverá ser lido.

www.mecatronicadegaragem.blogspot.com

Page 140: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 140

Activar o modo de Detecção de Endereço:

O baud rate deverá ser ajustado, pelos bits BRGH do registo TXSTA, e BRG16 do registo BAUDCTL,

e pelos registos SPBRGH e SPBRG;

O bit SYNC do TXSTA deverá ser limpo, e o bit SPEN do RCSTA deverá ser activado, de maneira a

ligar a porta série;

Se for necessário haver uma interrupção, o bit RCIE do PIE1, e os GIE e PEIE do INTCON deverão ser

activados;

O bit RX9 do RCSTA deverá ser activado;

O bit ADDEN do RCSTA deverá ser activado, o que habilita que um caracter recebido, seja interpretado

como endereço;

A recepção de dados deverá ser habilitada, activando o bit CREN do RXSTA;

Imediatamente após os 9 bits serem recebidos, o bit RCIF do PIR1 é automaticamente activado. Se habil-

itada, uma interrupção é gerada;

O registo RCSTA deverá ser lido, para tirar a informação de possiveis erros que ocorreram durante a

transmisssão. Na recepção a 9 bits, o nono bit estará armazenado neste registo;

Os 8 bits recebidos e armazenados no registo RCREG, deverão ser lidos. Agora deve ser feita a verifi cação

do endereço. Se coincidirem, é necessário limpar o bit ADDEN do RCSTA, o que possibilita a continui-

dade da recepção em 8 bits.

www.mecatronicadegaragem.blogspot.com

Page 141: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 141

Modo Síncrono da EUSART

O módulo MSSP - Master Sínchronous Serial Port, Porta Série Síncrona Mestre, é bastante útil, porque é ao

mesmo tempo um dos mais complexos circuitos dentro do microcontrolador. Ele permite comunicações de alta

velocidade entre o microcontrolador e periféricos externos, usando algumas linhas de I/O. É comum usá-lo

para ligar a ecrãns LCD, conversores A/D, EEPROM’s série, shift-registers, entre outros.

A principal funcionalidade deste tipo de comunicações é a de ser síncrona, e óptimo para sistemas onde há

um só Mestre, e um ou mais Escravos. O dispositivo Mestre tem os circuitos necessários para a geração do

Baud Rate, e fornece o Relógio para todos os dispositivos do sistema. Os dispositivos Escravos, podem dessa

maneira, eliminar o gerador de Relógio interno.

O módulo MSSP funciona das seguintes maneiras:

Modo SPI, Serial Peripheral Interface

Modo I2C, Inter-Integrated Circuit

Módulo MSSP

www.mecatronicadegaragem.blogspot.com

Page 142: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 142

Como se pode ver na fi gura, um módulo MSSP representa metade do hardware necessário para estabelecer

uma comunicação série, enquanto que a outra metade está presente no dispositivo com que se vai trocar a

informação. Apesar dos módulos serem iguais em ambos os lados, os seus modos são essencialmente diferentes,

dependendo se operam como Mestre ou Escravo:

Se o microcontrolador a ser programado, controla outros dispositivos, então vai funcionar como Mestre.

Um módulo defi nido como tal, vai gerar o relógio quando necessário, e apenas quando informação é en-

viada/recebida.

Depende do Mestre, se a ligação é estabelecida, ou não.

Se o microcontrolador a ser programado, é parte de um sistema periférico, então vai funcionar como dis-

positivo Escravo. Então, terá sempre de aguardar os pedidos por parte do Mestre.

Modo SPI

O modo de SPI permite o envio/recepção simultânea, de dados de 8 bits, usando 3 linhas I/O;

SDO - Saída de dados série - linha de transmissão;

SDI - Entrada de dados série - linha de recepção;

SCK - Relógio série - linha de síncronização.

Em conjunto com esta linha, se o microcontrolador trocar informação com vários periféricos, a quarta linha,

SS, também pode ser usada. Ver fi gura abaixo.

SS - Selecção de Escravo - um pino adicional usado para selecção de dispositivo. Está apenas activo se o micro-

controlador está em modo Escravo.

Quando opera em modo SPI, o módulo MSSP usa um total de 4 registos:

SSPSTAT - registo de estado;

www.mecatronicadegaragem.blogspot.com

Page 143: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 143

SSPCON - registo de controlo;

SSPBUF - registo de armazenamento de dados;

SSPSR - shift register (não disponivel directamente)

Os primeiros três registos são possiveis de escrever/ler, e podem ser alterado a qualquer momento, enquanto

que o quarto registo, como não está disponivel, é usado para converter os dados para formato série.

Modo SPI

Como pode ser visto na fi gura abaixo, o cerne do módulo SPI consiste em, dois registos ligados aos pinos para

receber, transmitir e sincronizar.

Modo SPI

O Shift Register, SSPRS, é directamente ligado aos pinos do microcontrolador, e usado para transmissão de

dados em formato série. O SSPRS tem a sua entrada e saída, e desloca os dados para dentro/fora do disposi-

tivo. Por outras palavras, cada bit que aparece na entrada (linha de recepção) simultaneamente empurra outro

bit para a saída (linha de transmissão).

www.mecatronicadegaragem.blogspot.com

Page 144: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 144

O registo SSPBUF, é um bloco de memória para temporariamente armazenar a informação escrita no SSPRS,

até que os dados recebidos estejam prontos. Após a recepção dos 8 bits de dados, esse byte é deslocado para o

SSPBUF.

Esta dupla memória dos dados recebidos, SSPBUF, permite ao próximo byte ser recebido, antes de ler os dados

acabados de receber. Qualquer escrita no SSPBUF durante a transmissão/recepção de dados, é ignorada.

Nomeadamente, se as confi gurações do modo forem esquecidas, a transferência de dados SPI signifi ca que

apenas se escreve e lê deste registo. Enquanto que o funcionamento do módulo em si, é automaticamente feito

por hardware.

Resumidamente:

Antes de inicializar o SPI, é necessário especifi car certos pontos:

Modo Mestre, o pino SCK é a saída de relógio;

Modo Escravo, o pino SCK é a entrada de relógio;

Fase do bit de entrada, no meio ou no fi m do ciclo de relógio, bit SMP;

Flanco do relógio, bit CKE;

Baud Rate, só no modo Mestre;

Modo de selecção de Escravo, no modo Escravo apenas.

Passo 1

O byte a transmitir, deve ser escrito para a memória temporária SSPBUF.

Imediatamente depois, se o módulo SPI opera em modo Mestre, o microcon-

trolador vai automaticamente fazer os passos 2, 3 e 4. Se o módulo SPI opera

como Escravo, o microcontrolador não vai fazer nenhum destes passos, até

que o pino SCK detectar um sinal de relógio.

www.mecatronicadegaragem.blogspot.com

Page 145: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 145

Passo 2

Este byte é agora deslocado para o registo SSPSR, e a memória temporária

SSPBUF não é limpa.

Passo 3

Sincronizado com o relógio de entrada, este byte é empurrado para o pino

de saída, sendo o MSB primeiro, enquanto o registo é simultaneamente

preenchido com bits do pino de entrada. No modo Mestre, o microcon-

trolador gera o relógio, enquanto o Escravo usa o relógio externo SCK.

Passo 4

O registo SSPSR está preenchido, quando os 8 bits de dados

forem recebidos. É indicado activando os bits BF e SSPIF. O byte

recebido é automaticamente movido do SSPSR para o SSPBUF.

Como a transferência é feita automaticamente, o programa prin-

cipal é normalmente executado, enquanto a transferência está em

progresso. Nesse caso, a função do bit SSPIF é gerar uma inter-

rupção, quando a transmissão está completa.

Passo 5

Finalmente, o byte armazenado no SSPBUF está pronto a ser usado, e movido

para qualquer registo disponivel.

www.mecatronicadegaragem.blogspot.com

Page 146: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 146

Modo I2C

O modo I2C é especialmente útil quando, o microcontrolador e um circuito integrado com o qual o micro

deverá trocar informação, estiverem montados no mesmo sistema. Esta forma de transmissão de dados é co-

mum a outros microcontroladores, ou circuitos integrados especializados, tais como memórias, sensores de

temperatura, expansores de porta, relógios em tempo-real, etc.

Similarmente ao SPI, a transferência de dados por I2C é síncrona e bidireccional. Desta vez, apenas dois pinos

são usados para a transferência de dados. Estes são o SDA, dados série, e o SCL, relógio série. O programador

deve confi gurar estes pinos como entradas/saídas, através dos bits do TRISC.

Provavelmente não é directamente perceptivel, mas observando regras particulares (protocolos), este modo

possibilita que 122 dispositivos diferentes estajam simultaneamente ligados, usando apenas dois pinos I/O.

Funciona da seguinte maneira; o relógio necessário para sincronizar a operação de ambos os dispositivos, é

sempre gerado pelo Mestre. A frequência de relógio mais habitual é de 100KHz, mas não há limite no caso de

frequência mínima.

Quando o Mestre e Escravo estão sincronizados com o relógio, toda a troca de dados é sempre iniciada pelo

Mestre. Assim que o módulo MSSP está activo, fi ca a aguardar uma condição de Start.

Primeiro, o Mestre envia o bit de Start, depois o endereço de 7 bits do Escravo, e fi nalmente o bit que especifi ca

se vai ler ou escrever no Escravo. A seguir ao bit de Start, os oito bits são enviados para o registo SSPSR.

Todos os Escravos partilham a linha de transmissão, e vão simultaneamente receber o primeiro byte, mas

apenas um deles tem o endereço coincidente.

Confi guração Mestre e Escravo

www.mecatronicadegaragem.blogspot.com

Page 147: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 147

Depois do primeiro byte ter sido enviado, o Mestre entra em modo de recepção, e aguarda o ACK - Acknowl-

edge (confi rmação) do Escravo com o endereço coindicente. Se o Escravo envia um ACK lógico 1, a transferên-

cia vai continuar até o Mestre enviar o bit de Stop.

Esta é uma simples explicação de como dois dispositivos comunicam. Se necessário, este microcontrolador é

capaz de controlar situações mais complicadas, onde 1024 dispositivos diferentes, partilhados por diferentes

Mestres, estão ligados.

Transferência de Dados

A fi gura em baixo, mostra o diagrama de blocos do módulo MSSP no modo I2C:

www.mecatronicadegaragem.blogspot.com

Page 148: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 148

Diagrama de blocos do módulo MSSP, em modo I2C

O módulo usa estes registos, para trabalhar em I2C.

SSPCON - registo de controlo 1

SSPCON2 - registo de controlo 2

SSPSTAT - registo de estado

SSPBUF - registo de memória temporária para transmissão/recepção

SSPSR - registo Shift-Register (não directamente acessível)

SSPADD - registo de endereço

SSPMSK - registo de máscara.

www.mecatronicadegaragem.blogspot.com

Page 149: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 149

Registo SSPSTAT

SMP - Bit de amostragem

Modo SPI Mestre, este bit indica a fase dos dados

1 - O estado lógico é lido no fi m do ciclo de relógio,

0 - O estado lógico é lido no meio do ciclo de relógio.

Modo SPI Escravo. Este bit deve estar limpo, quando se usa SPI Escravo

Modo I2C, Mestre ou Escravo

1 - Slew Rate - Controlo de interferências desligado, para velocidades de 100KHz;

0 - Slew Rate - Controlo de interferências ligado, para velocidades de 400KHz ou maiores.

CKE - Bit de selecção do fl anco de relógio

CKP=0:

1 - Os dados são transmitidos no fl anco ascendente;

0 - Os dados são transmitidos no fl anco descendente.

CKP=1:

1 - Os dados são transmitidos no fl anco descendente.

0 - Os dados são transmitidos no fl anco ascendente;

D/A - bit de Dados/Endereço, é usado no modo I2C apenas

1 - Indica que o último byte recebido ou transmitido, foi de dados;

0 - Indica que o último byte recebido ou transmitido, foi de endereço.

P - O bit de Stop, é usado no modo I2C apenas

1 - O Stop bit foi detectado;

www.mecatronicadegaragem.blogspot.com

Page 150: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 150

0 - O Stop bit não foi detectado;

S - Bit de Start, é usado no modo I2C apenas

1 - O bit de Start foi detectado;

0 - O bit de Start não foi detectado;

R/W - Bit de Escrita/Leitura, usado em I2C apenas. Este bit guarda a informação R/W a seguir ao endereço.

Só é válido desde a coincidência de endereço, até ao próximo bit de Start, Stop ou não-ACK.

I2C Escravo:

1 - Ler dados;

0 - Escrever dados.

I2C Mestre:

1 - Transmissão em progresso;

0 - Transmissão parada.

UA - Bit de refrescamento do endereço. É usado no modo de 10 bits de I2C.

1 - Indica que é necessário fazer o refrescamento do endereço no registo SSPADD;

0 - O endereço no SSPADD está correcto, e não precisa de ser refrescado.

BF - Bit de estado do Buff er - memória intermédia temporária

Durante a recepção em SPI ou I2C:

1 - Recepção completa. O SSPBUF está completo;

0 - Recepção não completa. O SSPBUF está vazio.

Durante a transmissão em SPI ou I2C:

1 - Transmissão de dados em andamento (não inclui os bits ACK e STOP);

0 - Transmissão de dados completa (não inclui os bits ACK e STOP).

www.mecatronicadegaragem.blogspot.com

Page 151: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 151

Registo SSPCON

WCOL - bit de detecção de Colisão de Escrita

1 - Colisão detectada. Uma escrita para o SSPBUF foi tentada, enquanto que a condição I2C não era válida

para uma transmissão se iniciar;

0 - Não houve colisão.

SSPOV - Bit indicador de “Overfl ow” de Recepção

1 - Um novo byte foi recebido, enquanto o SSPSR continha o byte anterior. Como não há espaço para a recep-

ção dos dados, um destes dois bytes deve ser limpo. Neste caso, o byte dentro do SSPSR é perdido;

0 - Dados série correctamente recebidos.

SSPEN - Bit que habilita a porta série síncrona, e inicializa o módulo MSSP:

No modo SPI:

1 - Liga módulo MSSP e confi gura os pinos SCK, SDO, SDI e SS, para a porta série;

0 - Desliga módulo MSSP e confi gura estes pinos como portas I/O.

No modo I2C:

1 - Liga módulo MSSP e confi gura os pinos SDA e SCL, para a porta série;

0 - Desliga módulo MSSP e confi gura estes pinos como portas I/O.

CKP - Bit de selecção da polaridade do Relógio, não usado em I2C Mestre

No modo SPI:

1 - Modo de descanso para o relógio, é nível lógico alto;

0 - Modo de descanso para o relógio, é nível lógico baixo.

No modo I2C Escravo:

www.mecatronicadegaragem.blogspot.com

Page 152: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 152

1 - Habilita o relógio;

0 - Mantém o relógio a estado lógico 0, para dar mais tempo à estabilização dos dados.

SSPM3-SSPM0 - Bits de selecção da porta série Síncrona. O modo é defi nido por estes três bits:

SSPM3 SSPM2 SSPM1 SSPM0 Mode

0 0 0 0 SPI Mestre, clock = Fosc/4

0 0 0 1 SPI Mestre, clock = Fosc/16

0 0 1 0 SPI Mestre, clock = Fosc/64

0 0 1 1 SPI Mestre, clock = (saída TMR)/2

0 1 0 0 SPI Escravo, pino SS de controlo ligado

0 1 0 1SPI Escravo, pino SS de controlo desligado, SS pode ser

usado como pino I/O

0 1 1 0 I²C Escravo, endereço de 7-bit usado

0 1 1 1 I²C Escravo, endereço de 10-bit usado

1 0 0 0 I²C Mestre, clock = Fosc / [4(SSPAD+1)]

1 0 0 1 Máscara usada no modo I²C Escravo

1 0 1 0 Não usado

1 0 1 1 Modo controlado I²C Mestre

1 1 0 0 Não usado

1 1 0 1 Não usado

1 1 1 0I²C Escravo, endereço de 7-bit usado, bits START e STOP

activam a interrupção

1 1 1 1I²C Escravo, endereço de 10-bit usado, bits START e STOP

activam a interrupção

Registo SSPCON2

www.mecatronicadegaragem.blogspot.com

Page 153: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 153

GCEN - Bit de habilitação de Chamada Geral

No modo I2C Escravo apenas:

1 - Habilita uma interrupção, quando uma chamada geral de endereço 0x000 é recebida no SSPSR;

0 - Chamada geral de endereço desligado.

ACKSTAT - Bit de estado de ACKnowledge - confi rmação

No modo I2C Mestre transmissão apenas:

1 - ACK não foi recebido do Escravo;

0 - ACK foi recebido do Escravo.

ACKDT - Bit de ACKnowledge

No modo I2C Mestre recepção apenas:

1 - Não houve ACK;

0 - Houve ACK.

ACKEN - Bit de habilitação de ACKnowledge

No modo I2C Mestre recepção apenas:

1 - Inicia condição ACK nos pinos SDA e SCL, e transmite bit ACKDT. É automaticamente limpo por

hardware;

0 - Condição ACK não iniciada.

RCEN - Bit habilitação da Recepção

No modo I2C Mestre apenas:

1 - Possibilita a recepção no modo I2C;

0 - Recepção desligada.

PEN - Bit de habilitação da condição de STOP

No modo I2C Mestre apenas:

1 - Inicia uma condição de STOP nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo por

hardware;

0 - Condição de STOP não iniciada.

www.mecatronicadegaragem.blogspot.com

Page 154: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 154

RSEN - Bit de habilitação da condição de Repetição de START

No modo I2C Mestre apenas:

1 - Inicia uma condição de START nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo

por hardware;

0 - A repetição de START não é iniciada.

SEN - Bit de habilitação de condição de START ligada/prolongada (Enabled/Stretch)

No modo I2C Mestre apenas:

1 - Inicia uma condição de START nos pinos SDA e SCL. Seguidamente, este bit é automaticamente limpo

por hardware;

0 - A condição de START não é iniciada.

I2C em modo Mestre

O caso mais comum é quando o microcontrolador funciona como Mestre, e os periféricos como Escravos. Esta

é a razão de apenas se falar aqui deste modo. Também se vai considerar que o endereço é de 7 bits, e o sistema

electrónico só tem um microcontrolador, ou um só mestre.

De maneira a ligar o módulo MSSP neste modo, é necessário fazer o seguinte:

Confi gurar o Baud Rate, registo SSPADD;

Confi gurar o Slew Rate - Controlo de interferências, bit SMP no registo SSPSTAT;

Seleccionar o modo, registo SSPCON.

Depois destes passo feitos, e do módulo ter sido ligado pelo bit SSPEN do SSPCON, deverá esperar-se pela

electrónica interna indicar que está pronta para transmissão: bit SSPIF do registo PIR1 activado.

Este bit deverá ser limpo por software, e seguidamente o microcontrolador está pronto a iniciar uma comuni-

cação com os periféricos.

www.mecatronicadegaragem.blogspot.com

Page 155: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 155

I2C em modo Mestre

Transmissão de dados no modo I2C Mestre

Cada condição de relógio no pino SDA, é iniciado com estado lógico 0, que aparece após ligar o bit SEN do

SSPCON2. Mesmo depois de ligar, o microcontrolador aguarda um momento antes de iniciar a comunicação.

É a chamada Condição de Start, durante a qual há estabilização interna da electrónica. Se todas as condições

satisfazerem, o bit SSPIF do PIR1 é activado, e a transferência de dados é iniciada, assim que o registo SSP-

BUF for carregado com um byte.

Como só um máximo de 112 dispositivos podem partilhar

a mesma linha de transmissão, o primeiro byte enviado

contém o endereço de apenas um Escravo. Cada compo-

nente tem o seu endereço escrito no próprio datasheet. O

oitavo bit deste primeiro byte, especifi ca se o Mestre vai

enviar ou receber dados. Neste caso vai-se receber infor-

mação, e o oitavo bit deverá ser lógico 0.

www.mecatronicadegaragem.blogspot.com

Page 156: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 156

Quando o endereço coincide, o microcontrolador

tem de esperar pelo bit de ACK. O Escravo con-

fi rma o endereço, limpando o bit ACKSTAT do

SSPCON2. Se houver coincidência de endereço,

todos os bytes serão enviados da mesma forma.

A transmissão de dados termina activando o

bit SEN do SSPCON2. A condição de STOP

ocorre, o que possibilita o pino SDA a receber

a condição: Start - Endereço - ACK - Dados -

ACK ..... Dados - ACK - Stop.

Recepção de dados no modo I2C Mestre

A preparação para a recepção de dados, é similar à de transmissão de dados, com a excepção de que, o último bit

do byte de endereço, é lógico 1. Especifi ca que o Mestre espera receber informação do Escravo endereçado.

O seguinte vai ocorrer:

Depois da preparação interna terminar e do bit START ser activado, o Escravo dá início ao envio de um byte

de cada vez. Estes bytes são armazenados no registo SSPSR. Cada byte é carregado para o SSPBUF, de onde

pode ser lido. Ao ler este registo, o bit ACK é automaticamente enviado, signifi cando que o Mestre está pronto

para receber novo byte.

No fi nal, a recepção de dados termina activando o bit STOP:

www.mecatronicadegaragem.blogspot.com

Page 157: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 157

Recepção de dados no modo I2C Mestre

Start - Endereço - ACK - Dados - ACK .... Dados - ACK - Stop.

É desta maneira que o ACK é enviado ao Escravo.

Gerador de Baud Rate

De maneira a sincronizar as comunicações, todos os eventos no pino SDA devem ser síncronizados com o

relógio gerado no Mestre. Este relógio é gerado por um simples oscilador, em que a frequência depende do

oscilador principal do microcontrolador, do valor escrito no registo SSPADD e do modo corrente de SPI e

I2C.

www.mecatronicadegaragem.blogspot.com

Page 158: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 158

A frequência de relógio dos modos descritos neste manual, dependem do cristal de quartzo e do registo

SSPADD. A fórmula usada para a calcular está na fi gura abaixo:

Gerador de Baud Rate

www.mecatronicadegaragem.blogspot.com

Page 159: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 159

Quando o microcontrolador comunica com os periféricos, pode acontecer que a transferência de dados falha

por alguma razão. Neste caso, é recomendada a verifi cação do estado de alguns bit, que podem ajudar a clari-

fi car o problema. Na prática, o estado destes bits é verifi cado através da execução de uma subrotina, depois da

transmissão/recepção de um byte.

WCOL - SPCON,7 - Se se tentar escrever um novo byte para o SSPBUF, enquanto estiver em progresso uma

transmissão/recepção, o bit WCOL vai ser activado e o conteúdo do SSPBUF mantém-se inalterado. A escrita

não ocorre e, depois disto, o WCOL deverá ser limpo por software.

BF - SSPSTAT,0 - No modo de transmissão, este bit é activado quando o CPU escreve para o SSPBUF, e

mantém-se activo enquanto o byte é deslocado para fora do registo SSPSR. No modo de recepção, este bit é

activado quando um byte é carregado para o SSPBUF. É limpo quando o SSPBUF é lido.

SSPOC - SSPCON,6 - No modo de recepção, este bit é activado quando um novo byte é recebido pelo

SSPSR, quando o byte anterior ainda não foi lido do SSPBUF.

Pinos SDA e SCL - Quando o módulo SSP está activo, estes pinos transformam-se em saídas Open Drain

(Dreno Comum). Signifi ca que, estes pinos, devem ser ligados a resistências de Pull-Up (entre o pino e o

terminal positivo da alimentação).

Resistências de saída para os Drenos Abertos dos Transistores internos

www.mecatronicadegaragem.blogspot.com

Page 160: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulos de Comunicação Série

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 160

Resumidamente:

De maneira a estabelecer uma comunicação série no modo I2C, o seguinte tem que ser tomado em conta:

Ajustar o modo e enviar o endereço:

O valor que determina o Baud Rate, deve ser escrito para o registo SSPADD

Slew Rate - Controlo de interferências, deve ser desligado, limpando o bit SMP do registo SSPSTAT

De modo a escolher modo Mestre, o valor binário 1000 deverá ser escrito nos bits SSPM3-SSPM0 do

registo SSPCON

O bit SEN do registo SSPCON2 deverá ser activado - Condição START

O bit SSPIF é automaticamente activado no fi m do START, quando o módulo está pronto a funcionar.

Deverá ser limpo por software

O endereço do Escravo deverá ser escrito para o SSPBUF

Quando o byte é enviado, o bit SSPIF é automaticamente activado quando o ACK é recebido do Escravo.

Transmissão de dados:

Os dados a enviar, deverão ser carregados no SSPBUF

Quando o byte é enviado, o bit SSPIF é automaticamente activado quando o ACK é recebido do Escravo

De maneira a informar o Escravo que a transmissão está completa, uma condição de STOP deverá ser

iniciada, activando o bit PEN no SSCON.

Recepção de dados:

De maneira a ligar a recepção de dados, o bit RSEN do SSPCON2 deverá ser activado

O bit SSPIF assinala a recepção de um byte. Quando o byte é lido do SSPBUF, o bit ACKEN do SSP-

CON2 deverá ser activado, de maneira a enviar o bit de ACK

De maneira a informar o Escravo que a transmissão está completa, uma condição de STOP deverá ser

iniciada, activando o bit PEN no SSCON.

www.mecatronicadegaragem.blogspot.com

Page 161: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 161

Módulos Analógicos

Além de uma variedade de linhas digitais de I/O, este PIC tem ainda várias entradas analógicas. Estas, pos-

sibilitam ao microcontrolador reconhecer, não só os estados lógicos 0 e 1, bem como fazer a medição precisa da

sua tensão e converte-la para um valor digital. Todo o procedimento acontece no módulo conversor A/D, que

tem as seguintes características:

O conversor gera um resultado binário de 10 bits, usando o método de aproximação sucessiva (SAR), e

armazena o resultado nos registos ADRESL e ADRESH;

Disponibiliza 14 entradas analógicas;

O conversor possibilita a conversão de um sinal analógico, para um número binário de 10 bits;

Escolhendo tensões diferentes para o Vref- e Vref+, a resolução mínima, ou qualidade de conversão, pode

ser ajustada à necessidade do projecto.

Registos e Modo do ADC - Conversor A/D

Apesar do uso de um ADC parecer deveras complicado, na prática é bastante simples. Mais simples do que

usar temporizadores e comunicações série.

O módulo está sob o controlo dos bits de quatro registos:

ADRESH - Byte alto do resultado da conversão

ADRESL - Byte baixo do resultado da conversão

ADCON0 - Registo de controlo 0

ADCON1 - Registo de controlo 1

www.mecatronicadegaragem.blogspot.com

Page 162: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 162

Registos e modo do Conversor A/D

Registos ADRESH e ADRESL

Quando se converte um sinal analógico, o resultado dos 10 bits vai ser guardado em dois registos. De maneira

a lidar com este valor mais facilmente, o mesmo pode aparecer em dois formatos: justifi cado à esquerda, ou

justifi cado à direita. O bit ADFM do registo ADCON1 determina o formato de conversão.

No caso de o ADC não ser usado, estes registos podem ser usado para quaisquer fi ns.

www.mecatronicadegaragem.blogspot.com

Page 163: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 163

Registos ADRESL e ADRESH

Requisitos da Aquisição A/D

Para o ADC ter a exactidão especifi cada, é necessário que haja um certo atraso entre a escolha da entrada

analógica, e a medição. Este atraso chama-se Tempo de Aquisição, e depende apenas da impedância da fonte

de sinal. Há uma equação para o cálculo exacto deste atraso, que no pior dos casos é de 20 microsegundos.

Momentaneamente, após escolher a entrada analógica, e antes de iniciar a conversão, é necessário esperar 20

microsegundos para que a conversão seja o mais exacta possível.

Periodo do ADC

O tempo necessário para completar a conversão de um-bit, é defi nido como TAD. O TAD necessário é de pelo

menos 1.6 microsegundos. Uma conversão completa de 10 bits demora cerca de 11 TAD. No entanto, como

ambos o relógio e a fonte de conversão são confi gurados por software, uma das combinações disponiveis dos bits

ADCS1 e ADCS0, deverá ser escolhida antes da medição analógica. Estes bits estão no registo ADCON0.

www.mecatronicadegaragem.blogspot.com

Page 164: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 164

Origem Relógio

ADCADCS1 ADCS0

Frequência do micro (Fosc)

20MHz 8MHz 4MHz 1MHz

Fosc/2 0 0 100 nS 250 nS 500 nS 2 uSFosc/8 0 1 400 nS 1 uS 2 uS 8 uS

Fosc/32 1 0 1.6 uS 4 uS 8 uS 32 uSFrc 1 1 2 - 6 uS 2 - 6 uS 2 - 6 uS 2 - 6 uS

Período de Relógio do ADC

Qualquer mudança na frequência de relógio do sistema, vai afectar o relógio do ADC, o que poderá afectar o

resultado do ADC. Os valores nas células com fundo cinza, estão fora do recomendando.

Como usar o Conversor A/D

De maneira a possibilitar o ADC a funcionar sem problemas, bem como a evitar resultados inesperados, é

necessário considerar o seguinte:

O ADC não distingue entre tensões analógicas ou digitais. De maneira a evitar erros na medição, ou es-

tragos no chip, os pinos devem ser confi gurados como entradas analógicas, antes de iniciar a conversão. Os

bits usados para este fi m, estão nos registos TRIS e ANSEL.

Quando a porta com entradas analógicas CH0-CH13 é lida, os bits correspondentes vão estar a lógico 0

A medição de tensão no conversor, é baseada na comparação da tensão de entrada, com uma escala interna

que tem 1024 posições. O nível mais baixo da escala é o Vref-, e o nível mais alto é o Vref+. A fi gura abaixo

mostra os níveis possiveis para cada um deles.

www.mecatronicadegaragem.blogspot.com

Page 165: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 165

Como usar o ADC

Registo ADCON0

ADCS1-ADCS0 - Bits de selecção do Relógio de Conversão do ADC, usado para sincronização interna do

ADC. Também afecta a duração da conversão.

ADCS1 ADCS2 Clock 0 0 Fosc/2 0 1 Fosc/8 1 0 Fosc/32 1 1 RC *

* Relógio gerado por oscilador interno no microcontrolador

www.mecatronicadegaragem.blogspot.com

Page 166: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 166

CHS3-CHS0 - Bits de selecção do Canal analógico, escolhem qual o canal analógico a converter.

CHS3 CHS2 CHS1 CHS0 Channel Pin 0 0 0 0 0 RA0/AN0 0 0 0 1 1 RA1/AN1 0 0 1 0 2 RA2/AN2 0 0 1 1 3 RA3/AN3 0 1 0 0 4 RA5/AN4 0 1 0 1 5 RE0/AN5 0 1 1 0 6 RE1/AN6 0 1 1 1 7 RE2/AN7 1 0 0 0 8 RB2/AN8 1 0 0 1 9 RB3/AN9 1 0 1 0 10 RB1/AN10 1 0 1 1 11 RB4/AN11 1 1 0 0 12 RB0/AN12 1 1 0 1 13 RB5/AN13 1 1 1 0 CVref 1 1 1 1 Vref = 0.6V

Bits de escolha do Canal Analógico

GO/DONE - Bit de Estado da Conversão A/D

1 - Conversão A/D está em curso

0 - Conversão A/D está completa. Este bit é automaticamente limpo por hardware, quando a conversão A/D

termina.

ADON - Bit que liga/desliga o Conversor A/D

1 - Conversor A/D ligado

0 - Conversor A/D desligado

www.mecatronicadegaragem.blogspot.com

Page 167: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 167

Registo ADCON1

ADFM - Bit de selecção do Formato do Resultado A/D

1 - Resultado justifi cado à direita. Os seis bits mais signifi cantes do ADRESH não são usados

0 - Resultado justifi cado à esquerda. Os seis bits menos signifi cantes do ADRESL não são usados

VCFG1 - Bit da Tensão de Referência, escolhe a fonte de tensão para o pino Vref-

1 - Tensão externa é aplicada no pino Vref-

0 - Tensão de alimentação interna, Vss, é usada como Vref-

VCFG0 - Bit da Tensão de Referência, escolhe a fonte de tensão para o pino Vref+

1 - Tensão externa é aplicada no pino Vref+

0 - Tensão de alimentação interna, Vdd, é usada como Vref+

Resumidamente:

De forma a medir uma tensão com o ADC, o seguinte deverá ser feito:

Confi gurar a porta

escrever lógico 1 no bit correspondente do registo TRIS, para confi gurar como entrada

escrever lógico 1 no bit correspondente do registo ANSEL, para confi gurar como entrada analógica

Confi gurar módulo ADC

Confi gurar a referência de tensão no ADCON1

www.mecatronicadegaragem.blogspot.com

Page 168: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 168

Escolher o relógio de conversão para o ADC, no ADCON0

Escolher um dos canais de entrada CH0-CH13, no ADCON0

Escolher o formato dos dados, pelo bit ADFM no ADCON1

Ligar o ADC, activando o bit ADON no ADCON0

Confi gurar a interrupção ADC (opcional)

Limpar o bit ADIF

Activar os bits ADIE, PEIE e GIE

Aguardar pelo tempo de aquisição, 20 microsegundos

Iniciar a conversão, activando o bit GO/DONE no ADCON0

Aguardar para que a conversão A/D termine

É necessário verifi car por software, se o bit GO/DONE já está limpo, ou esperar pela interrupção do

ADC

Ler os resultados do ADC, nos registos ADRESL e ADRESH.

Comparador Analógico

Em conjunto com o ADC, existe outro módulo que só recentemente começou a ser introduzido dentro de mi-

crocontroladores. Como é natural encontrar-se estes componenetes em quaisquer circuitos electrónicos, dois

comparadores de alta qualidade, com electrónica adicional, estão integrados no microcontrolador, e ligados aos

seus pinos.

Como funciona o comparador? Basicamente, o comparador analógico é um amplifi cador que compara a mag-

nitude de tensões às suas duas entradas. Observando as suas funcionalidades físicas, tem duas entradas e uma

saída. Dependendo de qual entrada tem uma tensão maior (valor analógico), um sinal lógico 0 ou 1 (valor

digital) irá estar na sua saída:

www.mecatronicadegaragem.blogspot.com

Page 169: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 169

Comparador Analógico

Quando a tensão no Vin- é maior que a tensão em Vin+, a saída do comparador está ao lógico 0;

Quando a tensão no Vin+ é maior que a tensão em Vin-, a saída do comparador está ao lógico 1.

Este microcontrolador tem dois destes comparadores, em que as entradas estão ligadas aos pinos I/O RA0-

RA3, e onde as saídas estão ligadas aos pinos RA4 e RA5. Também está disponivel um referencial de tensão

interno, dentro do microcontrolador.

Os comparadores são controlados pelos bits dos seguintes registos:

CM1CON0 controla o comparador C1;

CM2CON0 controla o comparador C2;

CM2CON1 controla o comparador C2.

Fonte de Tensão de Referência interna

Para gerar esta tensão de referência, fontes externas ou interna podem ser usadas. Após escolher a fonte da

tensão, o Vref é derivado desta, por intermédio de uma rede por escada, baseada em 16 resistência que formam

um divisor de tensão. A fonte de tensão é escolhida para ambas as pontas deste divisor, pelo bit VRSS do

registo VRCON.

www.mecatronicadegaragem.blogspot.com

Page 170: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 170

A tensão a tirar do divisor de tensão resistivo, é escolhida pelos bits VR0-VR3, e usada como tensão de refer-

ência. Ver fi gura abaixo.

Módulo Fonte de Tensão de Referência

A referência de tensão do comparador tem duas gamas, com 16 níveis em cada. A escolha da gama é controlada

pelo bit VRR do registo VRCON. E a tensão de referência pode ser disponibilizada na saída do pino RA2/

AN2.

Esta operação é realizada pelo registo VRCON.

Comparadores e funcionamento com Interrupções

O bit fl ag CMIF do registo PIR, é activada a cada mudança de estado lógico da saída do comparador. As

mesmas mudanças também podem gerar uma interrupção, se os seguintes bits estiverem activos:

www.mecatronicadegaragem.blogspot.com

Page 171: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 171

Bit CMIE do registo PIE

Bit PEIE do registo INTCON

Bit GIE do registo INTCON

Se a interrupção estiver habilitada, qualquer mudança na saída do comparador, vai “acordar” o microcontrola-

dor do modo de Sleep, se estiver nesse modo.

Registo CM1CON0

Os bits deste registo, são os que controlam o Comparador C1. Afectam principalmente a confi guração das

entradas. Para entender melhor, observar a fi gura abaixo, que mostra apenas uma parte da electrónica afectada

pelos bits deste registo.

Diagrama interno do Comparador C1

www.mecatronicadegaragem.blogspot.com

Page 172: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 172

C1ON - Bit que activa o Comparador C1

1 - Comparador C1 está ligado

0 - Comparador C1 está desligado

C1OUT - Este é o bit de saída do comparador C1

Se C1POL=1 (saída do comparador invertida)

1 - A tensão analógica em C1Vin+ é menor que a tensão em C1Vin-

0 - A tensão analógica em C1Vin+ é maior que a tensão em C1Vin-

Se C1POL=0 (saída do comparador não-invertida)

1 - A tensão analógica em C1Vin+ é maior que a tensão em C1Vin-

0 - A tensão analógica em C1Vin+ é menor que a tensão em C1Vin-

C1OE - Bit de activação da saída do Comparador C1

1 - A saída do comparador C1 está ligada ao pino C1OUT (obrigatoriedade: C1ON=1 e o bit TRIS=0)

0 - A saída do comparador C1 é interna

C1POL - Bit de selecção da Polaridade da saída do Comparador C1, permite a inversão do estado da saída

1 - A saída do comparador C1 é invertida

0 - A saída do comparador C1 é não-invertida

C1R - Bit de selecção da Referência do Comparador C1

1 - A entrada não-inversora C1Vin+ é ligada à tensão de referência C1Vref

0 - A entrada não-inversora C1Vin+ é ligada ao pino C1IN+

C1CH1 e C1CH0 - Bits de selecção de canais do Comparador C1

C1CH1 C1CH0 Entrada do Comparador C1Vin-

0 0 Entrada C1Vin- está ligada ao pino C12IN0-

0 1 Entrada C1Vin- está ligada ao pino C12IN1-

1 0 Entrada C1Vin- está ligada ao pino C12IN2-

1 1 Entrada C1Vin- está ligada ao pino C12IN3-

www.mecatronicadegaragem.blogspot.com

Page 173: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 173

Registo CM2CON0

Os bits deste registo, são os que controlam o Comparador C2. Similarmente ao caso anterior, a fi gura abaixo

mostra um esquema simplifi cado do circuito afectado por estes bits.

Diagrama interno do Comparador C2

C2ON - Bit que activa o Comparador C2

1 - Comparador C2 está ligado

0 - Comparador C2 está desligado

www.mecatronicadegaragem.blogspot.com

Page 174: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 174

C2OUT - Este é o bit de saída do comparador C2

Se C2POL=1 (saída do comparador invertida)

1 - A tensão analógica em C2Vin+ é menor que a tensão em C2Vin-

0 - A tensão analógica em C2Vin+ é maior que a tensão em C2Vin-

Se C2POL=0 (saída do comparador não-invertida)

1 - A tensão analógica em C2Vin+ é maior que a tensão em C2Vin-

0 - A tensão analógica em C2Vin+ é menor que a tensão em C2Vin-

C2OE - Bit de activação da saída do Comparador C2

1 - A saída do comparador C2 está ligada ao pino C2OUT (obrigatoriedade: C2ON=1 e o bit TRIS=0)

0 - A saída do comparador C2 é interna

C2POL - Bit de selecção da Polaridade da saída do Comparador C2, permite a inversão do estado da saída

1 - A saída do comparador C2 é invertida

0 - A saída do comparador C2 é não-invertida

C2R - Bit de selecção da Referência do Comparador C2

1 - A entrada não-inversora C2Vin+ é ligada à tensão de referência C2Vref

0 - A entrada não-inversora C2Vin+ é ligada ao pino C2IN+

C2CH1 e C2CH0 - Bits de selecção de canais do Comparador C2

C2CH1 C2CH0 Entrada do Comparador C2Vin-

0 0 Entrada C2Vin- está ligada ao pino C12IN0-

0 1 Entrada C2Vin- está ligada ao pino C12IN1-

1 0 Entrada C2Vin- está ligada ao pino C12IN2-

1 1 Entrada C2Vin- está ligada ao pino C12IN3-

www.mecatronicadegaragem.blogspot.com

Page 175: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 175

Registo CM2CON1

MC1OUT - Cópia do bit C1OUT

MC2OUT - Cópia do bit C2OUT

C1RSEL - Bit de selecção da Referência do Comparador C1

1 - A tensão de referência CVref programavel, é usada como referência para Comparador C1

0 - A tensão de referência fi xa 0.6V, é usada como referência para Comparador C1

C2RSEL - Bit de selecção da Referência do Comparador C2

1 - A tensão de referência CVref programavel, é usada como referência para Comparador C2

0 - A tensão de referência fi xa 0.6V, é usada como referência para Comparador C2

T1GSS - Bit de selecção da Gate do Temporizador TMR1

1 - A gate do TMR1 é T1G

0 - A gate do TMR1 é o comparador SYNCC2OUT

C2SYNC - Bit de sincronização da saída do Comparador C2

1 - A saída do comparador C2 é sincronizada no fl anco descendente do relógio do TMR1

0 - A saída do comparador C2 é assíncrona

www.mecatronicadegaragem.blogspot.com

Page 176: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 176

Registo VRCON

VREN - Bit de habilitação da tensão de referência do Comparador C1

1 - A tensão de referência CVref está ligada

0 - A tensão de referência CVref está desligada

VROE - Bit de habilitação da tensão de referência do Comparador C2

1 - A tensão de referência CVref está ligada ao pino

0 - A tensão de referência CVref não está ligada ao pino

VRR - Bit de selecção da gama da Tensão de Referência CVref

1 - A tensão de referência está seleccionada para a gama baixa

0 - A tensão de referência está seleccionada para a gama alta

VRSS - Bit de selecção da gama Vref do Comparador

1 - A tensão de referência está na gama de Vref+ a Vref-

0 - A tensão de referência está na gama de Vdd a Vss (tensão de alimentação)

VR3-VR0 - Selecção dos valores CVref para Tensão de Referência

Se VRR = 1 (gama baixa), a tensão de referência calcula-se pela fórmula: CVref = ([VR3:VR0]/24)Vdd

Se VRR = 0 (gama alta), a tensão de referência calcula-se pela fórmula: CVref = Vdd/4 + ([VR3:VR0]/

32)Vdd

www.mecatronicadegaragem.blogspot.com

Page 177: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Módulo Analógico

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 177

Em resumo :

De forma a convenientemente usar os Comparadores internos, é necessário o seguinte:

1 - Confi gurar o módulo:

De modo a escolher o modo apropriado, os bits dos registos CM1CON0 e CM2CON0 devem ser confi gura-

dos. A interrupção de ser desligada, quando da mudança de modos.

2 - Confi gurar a tensão de referência interna Vref (se usada). No registo VRCON é necessário:

Escolher uma das duas gamas de tensão, pelo bit VRR

Confi gurar a tensão de referência Vref, pelos bits VR3-VR0

Activar o bit VROE se necessário

Activar a tensão de referência Vref, activando o bit VREN

Fórmulas usadas para calcular a tensão de referência:

VRR = 1 (gama baixa)

CVref = ([VR3:VR0]/24)VLADDER

VRR = 0 (gama alta)

CVref = (VLADDER/4) + ([VR3:VR0]VLADDER/32)

Vladder = Vdd ou ([Vref+] - [Vref-]) ou Vref+

3 - O arranque:

Activar interrupção, activando os bits CMIE (registo PIE), PEIE e GIE (no registo INTCON)

Ler os bits C1OUT e C2OUT do registo CMCON

Ler a Flag CMIF do registo PIR. Depois de activada, deverá ser limpa por software.

www.mecatronicadegaragem.blogspot.com

Page 178: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 178

Outros circuitos internosOscilador, EEPROM e Reset

Como se pode ver pela fi gura abaixo, o relógio pode ser gerado por um de dois osciladores internos:

Dois oscliadores internos

Um Oscilador Externo é instalado na proximidade do microcontrolador, e ligado aos pinos OSC1 e OSC2.

É chamado de externo, porque consiste em electrónica externa que gera o sinal de relógio e a estabilização de

frequência, tal como um cristal de quartzo, ressoador cerâmico ou resistência-condensador.

O modo do oscilador é escolhido por bits que são enviados durante a programação física, numa chamada

Palavra de Confi guração, ou Fusíveis.

www.mecatronicadegaragem.blogspot.com

Page 179: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 179

O oscilador interno, consiste em dois osciladores internos separados:

O HFINTOSC é um oscilador interno de alta-frequência, que funciona a 8MHz. O microcontrolador pode

usar a fonte de relógio a essa velocidade, ou dividi-la com um divisor.

O LFINTOSC é um oscilador interno de baixa-frequência, que funciona a 31KHz. O seu relógio é usado

para o Watch-dog e temporizadores Power-up, mas pode também ser usado como fonte de relógio para todo

o microcontrolador.

O relógio do sistema pode ser escolhido entre externo e interno, através do bit SCS - System Clock Select, do

registo OSCCON.

Registo OSCCON

O registo OSCCON controla o relógio de sistema, e as opções de selecção da frequência. Contém os seguintes

bit:

Bits de selecção de frequência, IRCF2-IRCF0

Bits de estado da frequência, HTS e LTS

Bits de controlo do relógio do sistema, OSTA e SCS

IRCF2-IRCF0 - Bits de selecção da Frequência do Oscilador Interno. A combinação destes bits determina a

taxa de divisão. A frequência de relógio do oscilador interno é também determinada desta forma.

www.mecatronicadegaragem.blogspot.com

Page 180: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 180

IRCF2 IRCF1 IRCF0 Frequency OSC.

1 1 1 8 MHz HFINTOSC

1 1 0 4 MHz HFINTOSC

1 0 1 2 MHz HFINTOSC

1 0 0 1 MHz HFINTOSC

0 1 1 500 kHz HFINTOSC

0 1 0 250 kHz HFINTOSC

0 0 1 125 kHz HFINTOSC

0 0 0 31 kHz LFINTOSC

OSTS - Bits de estado do Start-up Time-out do Oscilador. Indica que fonte de relógio está, no momento, em

uso. É apenas de leitura.

1 - Oscilador externo em uso

0 - Um dos osciladores internos está em uso (HFINTOSC ou LFINTOSC)

HTS - bit de estado do HFINTOSC (125KHz - 8MHz). Indica se o oscilador de alta-frequência está a

funcionar com estabilidade

1 - HFINTOSC está estavel

0 - HFINTOSC está instavel

LTS - bit de estado do LFINTOSC (31KHz). Indica se o oscilador de baixa-frequência está a funcionar com

estabilidade

1 - LFINTOSC está estavel

0 - LFINTOSC está instavel

SCS - Bit de selecção do Relógio do Sistema. Determina qual o oscilador a usar como fonte de relógio

1 - O oscilador interno é usado como fonte de relógio do sistema

0 - O oscilador externo é usado como fonte de relógio do sistema

O modo do oscilador é escolhido por bits que são enviados durante a programação física, numa chamada

Palavra de Confi guração, ou Fusíveis.

www.mecatronicadegaragem.blogspot.com

Page 181: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 181

Modos de Relógio Externo

De maneira a habilitar o oscilador externo a funcionar a diferentes velocidades, e a usar diferentes componentes

para a estabilização da frequência, este pode ser confi gurado por um de vários modos.

A selecção do modo pode ser incluida junto com o software, no momento da escrita, ou então pode ser ajustada

no software de programação no PC.

Durante a programação, os bytes da Palavra de Confi guração - Fusiveis, são escritos na memória ROM do

microcontrolador, e guardados em registos especiais, que não estão disponiveis para o o programador. É com

base nestes bits, que o microcontrolador sabe o que fazer.

Confi guração dos Fusiveis do PIC

Modo EC - Oscilador Externo

O modo de relógio externo, EC, usa o relógio do sistema confi gurado para oscilador externo. A frequência

deste relógio é ilimitada (0-20MHz).

www.mecatronicadegaragem.blogspot.com

Page 182: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 182

Este modo tem as seguintes vantagens:

A fonte de relógio externo é ligada ao pino OSC1, e o pino OSC2 está disponivel para I/O geral

É possivel sincronizar o funcionamento do microcontrolador, com o resto da electrónica

Neste modo, o microcontrolador arranca o funcionamento assim que o sistema é energizado

Se se parar o relógio externo temporariamente, o microcontrolador congela o funcionamento, deixando

todos os dados intactos. Assim que se restabelecer o relógio, o microcontrolador resume o funcionamento,

do ponto de onde parou, como se nada tivesse acontecido

Oscilador Externo em modo EC

www.mecatronicadegaragem.blogspot.com

Page 183: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 183

Modo LP, XT ou HS - Oscilador Externo

Dois tipos diferentes de cristais de quartzo

Os modos LP, XT e HS, suportam o uso do oscilador interno, para confi gurar a fonte de relógio. A frequên-

cia desta fonte é determinada por cristais de quartzo, ou ressoadores cerâmicos, ligados aos pinos OSC1 e

OSC2.

Dependendo do tipo de cristal usado, escolher um dos seguintes modos:

Modo LP (Low Power - Baixa Potência) - é usado apenas para cristais de quartzo de baixa-frequência. Este

modo foi desenhado para acolher cristais de 32.768KHz, normalmente usados para relógios de quartzo. São

simples de reconhecer, pela sua forma cilíndrica, e o consumo de corrente é a mais baixa de todos os modos.

Modo XT - é usado para cristais de quartzo de frequências até os 8MHz. O consumo de corrente é mediano.

Modo HS (High Speed - Alta Velocidade) - é usado para cristais quartzo de frequências acima dos 8MHz. O

consumo de corrente é o mais elevado.

www.mecatronicadegaragem.blogspot.com

Page 184: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 184

Esquema eléctrico do Oscilador Externo, e de alguns componentes adicionais

Ressoador Cerâmico no modo XT ou HS

Ressoador cerâmico

Os ressoador cerâmicos têem características bastante similares aos cristais de quartzo. Por isso são ligados da

mesma maneira. Mas têem a vantagem de serem muito menos onerosos, não tendo tão boa estabilidade de

frequência como os cristais. São usados para frequências de relógio entre os 100KHz e os 20MHz.

www.mecatronicadegaragem.blogspot.com

Page 185: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 185

Modo RC e RCIO - Oscilador Externo

Há certamente muitas vantagens em usar elementos para estabilização de frequência. Mas, por vezes, são per-

feitamente desnecessários.

É sufi ciente que o oscilador funcione a uma frequência não defi nida, e a solução mais simples e menos onerosa,

é usar uma resistência-condensador para fazer o oscilador funcionar.

Há dois modos:

Modo RC:

Neste modo, o circuito RC é ligado ao pino OSC1, como se

mostra na fi gura. O pino OSC2 tem na sua saída, a frequên-

cia do oscilador RC, dividido por 4. Este sinal pode ser usado

para calibração, sincronização ou outros.

Modo RCIO:

Similar ao anterior, com a diferença de que o pino OSC2 é

usado como um I/O geral

Em ambos os casos, é recomendado usar componentes como mostram nas fi guras.

A frequência deste oscilador é calculada pela fórmula f = 1 / T , onde:

f = Frequência [Hertz]

T = R*C = constante de tempo [segundos]

R = Resistência [Ohm]

C = Capacidade [Farad]

www.mecatronicadegaragem.blogspot.com

Page 186: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 186

Modos de Relógio Interno

O oscilador interno consiste em dois osciladores separados, que podem ser escolhidos como fonte de relógio

do sistema:

O oscilador HFINTOSC é calibrado de fábrica, e oscila a 8MHz. Esta frequência pode ser ajustada pelo

programador, usado bits do registo OSCTUNE.

O oscilador LFINTOSC não é calibrado de fábrica, e oscila a 31KHz.

Da mesma forma que o oscilador externo, o interno também pode funcionar em vários modos. O modo é selec-

cionado da mesma maneira que o oscilador externo - pelos bits da Palavra de Confi guração - Fusiveis.

Modo INTOSC - Oscilador Interno

Neste modo, o pino OSC1 está disponivel para I/O

geral, enquanto que o pino OSC2 tem disponivel a

frequência de onscilação interna dividida por 4.

Modo INTOSCIO - Oscilador Interno

Neste modo, ambos os pinos OSC1 e OSC2 estão

disponiveis para I/O.

www.mecatronicadegaragem.blogspot.com

Page 187: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 187

Confi guração do Oscilador Interno

O oscilador interno consiste em dois circuitos separados.

1.

O oscilador interno de alta-frequência HFINTOSC, está ligado a um divisor de frequência. É calibrado de

fábrica, e funciona a 8MHz. Usando o divisor, este oscilador pode ter na sua saída, uma de sete frequências, que

podem ser escolhidas pelos bits IRCF2-IRCF0 do registo OSCCON.

O HFINTOSC é ligado, escolhendo uma de sete frequências (entre 125KHz e 8MHz), e activando o bit

SCS do OSCCON. Como se pode ver pela fi gura abaixo, toda a confi guração é realizada pelos bits do registo

OSCCON.

Confi gurações do Oscilador Interno

2.

O oscilador interno de baixa-frequência LFINTOSC, funciona a 31KHz e não vem calibrado de fábrica. É

activado, escolhendo esta frequências (bits no OSCCON), e activando o bit SCS do mesmo registo.

www.mecatronicadegaragem.blogspot.com

Page 188: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 188

Modo de Arranque de Relógio a Duas-Velocidades

O Modo de Arranque de Relógio a Duas-Velocidades, é usado para dar poupanças energéticas adicionais,

quando o microcontrolador funciona em modo Sleep.

Quando confi gurado no modo LP, XT ou HS, o oscilador externo vai estar desligado quando em Sleep, de

maneira a reduzir o consumo médio energético do microcontrolador.

Quando as condições para “acordar” estão reunidas, o microcontrolador não vai retomar o serviço automatica-

mente, porque tem que aguardar que o sinal de relógio fi que estavel. Este atraso é de exactamente 1024 pulsos.

Depois destes, o microcontrolador procede com a execução do programa.

O problema é que, quase sempre, são apenas umas poucas instruções executadas, antes de o microcontrolador

entrar em Sleep. Signifi ca que, na maior parte do tempo, a energia é desperdiçada.

Este problema é solucionado, usando o oscilador interno para a execução do programa, enquanto os 1024

pulsos são contados. Seguidamente, e assim que o oscilador externo fi car estável, vai automaticamente tomar o

lugar principal. Todo o processo é habilitado, activando o bit IESO nos Fusiveis.

Fail-Safe Clock Monitor - FSCM - Monitor contra falhas de Relógio

O FSCM monitoriza o funcionamento do oscilador externo, e permite, ao microcontrolador, continuar a ex-

ecução do programa, mesmo que o oscilador externo falhe por alguma razão. Neste caso, o oscilador interno

assume a operação.

www.mecatronicadegaragem.blogspot.com

Page 189: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 189

Monitor de Relógio contra falhas

O FSCM detecta a falha do oscilador, comparando as fontes de relógio Interna e Externa. Caso o oscilador

esterno demore mais de 2 milisegundos a chegar aos pinos do microcontrolador, a fonte de relógio é mudada

automaticamente para o oscilador interno, que continua a operação, controlado pelos bits do OSCCON.

Quando o bit OSFIE do registo PIE2 estiver activo, uma interrupção é gerada.

O relógio de sistema continuará a ser o interno, até que o oscilador externo retome o funcionamento. A tran-

sição é feita automaticamente.

Este módulo é activado, pela confi guração do bit FCMEN nos Fusiveis, aquando da programação física do

microcontrolador.

Registo OSCTUNE

Quaisquer modifi cações no registo OSCTUNE, afectam a frequência HFINTOSC, mas não a LFINTOSC.

Também, não há indicação durante a operação, de que houve mudança.

www.mecatronicadegaragem.blogspot.com

Page 190: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 190

TUN4-TUN0 - Bits de Sintonização da Frequência. Pela combinação destes cinco bit, a frequência do oscila-

dor de 8MHz varia. Desta maneira, as frequências obtidas pelo divisor, também mudam.

TUN4 TUN3 TUN2 TUN1 TUN0 Frequência

0 1 1 1 1 Máxima

0 1 1 1 0

0 1 1 0 1

. . . . .

. . . . .

0 0 0 0 1

0 0 0 0 0 Calibrado

1 1 1 1 1

. . . . .

. . . . .

1 0 0 1 0

1 0 0 0 1

1 0 0 0 0 Mínima

www.mecatronicadegaragem.blogspot.com

Page 191: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 191

Memória EEPROM

A EEPROM não pertence, nem à memória do programa (ROM FLASH), nem à memória de dados (RAM),

mas sim a um grupo especial. Mesmo estas posições de memória não sendo facil e rapidamente acessiveis como

os outros registos, são de grande importância pois, os dados da EEPROM, são permanentemente gravados. Os

dados da EEPROM podem ser alterados a qualquer momento. Devido a estas excepcionais qualidades, cada

byte de EEPROM é valioso.

O PIC estudado neste manual tem 256 posições de EEPROM, controlados pelos bits dos seguintes registos:

EECON1 - registo de controlo

EECON2 - registo de controlo

EEDAT - grava dados prontos para ler/escrever

EEADR - grava endereço a ser acedido

No entanto, o EECON2 não é um registo verdadeiro, pois não existe fi sicamente. É apenas usado na sequência

de escrita.

Os registos EEDATH e EEADRH, pertencem ao mesmo grupo de registos usados durante a escrita/leitura

da EEPROM. Ambos são udados, também, para escrita/leitura da memória do programa (ROM FLASH).

Como esta é considerada uma zona de risco, pois não queremos inadvertidamente apagar o programa do mi-

crocontrolador, fi ca o aviso.

Registo EECON1

www.mecatronicadegaragem.blogspot.com

Page 192: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 192

EEPGD - Bit de selecção de acesso à memória de Programa ou EEPROM de Dados

1 - Acede à memória de Programa, ROM FLASH

0 - Acede à memória de Dados, EEPROM

WRERR - Flag de error na EEPROM

1 - A operação de escrita foi prematuramente terminada e um erro ocorreu

0 - A operação de escrita terminada

WREN - Bit de habilitação da escrita da EEPROM

1 - Escrita na EEPROM permitida

0 - Escrita na EEPROM proibida

WR - Bit de controlo da Escrita

1 - Dá início à escrita na EEPROM

0 - Escrita para a EEPROM está completa

RD - Bit de controlo da Leitura

1 - Dá início à leitura da EEPROM

0 - Leitura da EEPROM desactivada

Leitura da EEPROM

De modo a se poder ler da EEPROM, o seguinte procedimento deverá ser executado:

Escrever um endereço (0x00 a 0xFF) no registo EEADR

Seleccionar o acesso à EEPROM, pelo bit EEPGD no registo EECON1

Para ler a posição, activar o bit RD no mesmo registo

Os dados são armazenados no registo EEDAT, e prontos a serem usados.

O seguinte exemplo mostra a leitura da EEPROM:

1.

2.

3.

4.

www.mecatronicadegaragem.blogspot.com

Page 193: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 193

BSF STATUS,RP1 ;

BCF STATUS,RP0 ; Access bank 2

MOVF ADDRESS,W ; Move address to the W register

MOVWF EEADR ; Write address

BSF STATUS,RP0 ; Access bank 3

BCF EECON1,EEPGD ; Select EEPROM

BSF EECON1,RD ; Read data

BCF STATUS,RP0 ; Access bank 2

MOVF EEDATA,W ; Data is stored in the W register

Escrita da EEPROM

De modo a escrever na EEPROM, deve escrever-se o endereço no registo EEADR, e depois o byte de dados

no registo EEDAT. Seguidamente é necessário fazer uma sequência de segurança, para iniciar a escrita de cada

byte. As interrupções devem ser desligadas durante esta sequência.

O seguinte exemplo mostra a escrita na EEPROM:

www.mecatronicadegaragem.blogspot.com

Page 194: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 194

BSF STATUS,RP1

BSF STATUS,RP0

BTFSC EECON,WR1 ; Wait for the previous write to complete

GOTO $-1 ;

BCF STATUS,RP0 ; Bank 2

MOVF ADDRESS,W ; Move address to W

MOVWF EEADR ; Write address

MOVF DATA,W ; Move data to W

MOVWF EEDATA ; Write data

BSF STATUS,RP0 ; Bank 3

BCF EECON1,EEPGD ; Select EEPROM

BSF EECON1,WREN ; Write to EEPROM enabled

BCF INCON,GIE ; All interrupts disabled

MOVLW 55h ; Required sequence start

MOVWF EECON2

MOVLW AAh

MOVWF EECON2 ; Required sequence end

BSF EECON1,WR

BSF INTCON,GIE ; Interrupts enabled

BCF EECON1,WREN ; Write to EEPROM disabled

www.mecatronicadegaragem.blogspot.com

Page 195: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 195

Reset! Black-out, Brown-out ou Ruidos?

No Reset, o microcontrolador imediatamente pára o funcionamento, e limpa os seus registos.

O sinal de Reset pode ser gerado externamente a qualquer momento, pelo nivel lógizo 0 no pino MCLR. Se

necessário, também pode ser gerado pela electrónica interna. O Power-on gera sempre um Reset. Nomeada-

mente, devido a vários eventos que acontecem quando a fonte de alimentação está ligada (maus contactos de

interruptores, arcos eléctricos, tensão a subir vagarosamente, estabilização gradual da frequência de relógio,

etc), é necessário forçar um atraso de tempo, antes do microcontrolador iniciar o funcionamento.

Dois temporizadores internos - PWRT e OST, estão encarregados deste serviço. O primeiro pode ser ligado/

desligado durante a execução do programa.

Funciona da seguinte maneira:

Quando a fonte de alimentação alcança os 1.2-1.7V,

o circuito de Power-up põe o microcontrolador

em Reset, por aproximadamente 72 milisegundos.

Imediatamente a este temporizador ter terminado,

outro sinal de Reset é gerado pelo Oscilador de

Start-up, que aguarda 1024 periodos do oscilador

de quartzo. Quando este atraso termina, marcado a

T Reset na fi gura, e o pino MCLR estiver a lógico 1,

o microcontrolador dá início à execução da primeira

instrução do programa. Atraso de Início do Oscilador

Há, ainda, mais dois Resets, que podem ocorrer durante o funcionamento, bem como no momento em que a

energia é desligada.

www.mecatronicadegaragem.blogspot.com

Page 196: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 196

Reset por Black-out - Falha de Energia Súbita

O Reset de Black-out acontece quando a energia de

alimentação é desligada. Nesse caso, o microcontro-

lador não tem tempo para realizar nenhuma função

“imprevisivel”, simplesmente porque a tensão cai

abruptamente abaixo do seu valor mínimo.

Por outras palavras, não é possivel fazer nada quando

esta situação acontece.

Perda de Energia Súbita

Reset por Brown-out - Descida de Tensão Lenta e Gradual

Quando a tensão de alimentação desce lentamente,

típico de sistemas alimentados a baterias, a electróni-

ca interna gradualmente pára o seu funcionamento,

e o chamado reset por brown-out acontece. Neste

caso, antes do microcontrolador parar a execução do

programa, há uma grave perigo de que, circuitos que

trabalhem a uma tensão superior, comecem a trabal-

har de forma descontrolada. Esta problemática, tam-

bém, pode causar alterações fatais no programa em si,

porque está gravado na memória FLASH. Perda de Energia Gradual

www.mecatronicadegaragem.blogspot.com

Page 197: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Outros Circuitos Internos

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 197

Ruidos

Este é um tipo especial de Reset por Brown-out, que

ocorre em ambientes industriais, quando a fonte de

alimentação “oscila” por um momento, e deixa cair o

seu valor abaixo do nível mínimo.

Mesmo que curtos, estes ruidos na linha de alimenta-

ção, podem causar problemas no funcionamento do

dispositivo.

Ruídos

Pino de MCLR

Um nível lógico 0 no pino MCLR, faz um Reset imediato. É recomendado que seja ligado como mostra a

fi gura abaixo. A função dos componentes adicionais, é a de conseguir suster um estado lógico 1 puro, durante

o funcionamento normal.

De maneira a evitar qualquer erro que possa acontecer

com um Reset por Brown-out, este microcontrolador

tem incluido um sistema de defesa.

É um circuito simples, mas efi caz, que reage de cada

vez que a tensão de alimentação desce abaixo de 4V,

e se matém assim por mais de 100 microsegundos.

Nesse caso, este circuito gera um sinal de Reset e,

desde esse momento, todo o microcontrolador fun-

ciona como se tivesse sido acabado de ligar.

www.mecatronicadegaragem.blogspot.com

Page 198: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 198

Conjunto de Instruções

Já dissemos que um microcontrolador não é como qualquer outro circuito integrado. Quando saem da cadeia

de produção, a maioria dos circuitos integrados, estão prontos para serem introduzidos nos dispositivos, o que

não é o caso dos microcontroladores.

Para que um microcontrolador cumpra a sua tarefa, nós temos que lhe dizer exactamente o que fazer. Por

outras palavras, nós temos que escrever o programa que o microcontrolador vai executar. Neste capítulo iremos

descrever as instruções que constituem o assembler, ou seja, a linguagem de baixo nível para os microcontrola-

dores PIC.

Conjunto de Instruções da Família PIC16Fxx de Microcontroladores

O conjunto completo compreende 35 instruções, e mostra-se na tabela que se segue. Uma razão para este

pequeno número de instruções, resulta, principalmente do facto de estarmos a falar de um microcontrolador

RISC, cujas instruções foram optimizadas tendo em vista a rapidez de funcionamento, simplicidade de arqui-

tectura e compactação de código.

www.mecatronicadegaragem.blogspot.com

Page 199: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 199

*1 - Se o porto de entrada/saída for o operando origem, é lido o estado dos pinos do microcontrolador.

*2 - Se esta instrução for executada no registo TMR0 e se d=1, o divisor atribuído a esse temporizador é

automaticamente limpo.

*3 - Se o PC for modifi cado, ou se resultado do teste for verdadeiro, a instrução é executada em dois ciclos

www.mecatronicadegaragem.blogspot.com

Page 200: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 200

Transferência de dados

A transferência de dados num microcontrolador, ocorre entre o registo de trabalho “W” e um registo “f ” que

representa um qualquer local de memória na RAM interna (quer se trate de um registo especial ou de um

registo de uso genérico).

As primeiras três instruções (observar a tabela anterior), referem-se à escrita de uma constante no registo W

(MOVLW é uma abreviatura para “MOVa Literal para W”), à cópia de um dado do registo W para o registo

“f ”, e à cópia de um dado de um registo ‘f ’ para o registo W (ou nele próprio, caso em que apenas a fl ag do zero

é afectada).

A instrução CLRF, escreve a constante 0 no registo “f ”, e CLRW escreve a constante 0 no registo W.

A instrução SWAPF troca o nibble (conjunto de 4 bits) mais signifi cativo, com o nibble menos signifi cativo de

um registo, passando o primeiro a ser o menos signifi cativo, e o outro o mais signifi cativo do registo.

Lógicas e aritméticas

De todas as operações aritméticas possíveis, os microcontroladores PIC, tal como a grande maioria dos outros

microcontroladores, apenas suportam a subtracção e a adição. Os bits ou fl ags C, DC e Z, são afectados con-

forme o resultado da adição ou da subtracção, com uma única excepção: uma vez que a subtracção é executada

como uma adição com um número negativo, a fl ag C (Carry), comporta-se inversamente no que diz respeito

à subtracção. Por outras palavras, é posta a “1” se a operação é possível, e posta a “0” se um número maior tiver

que ser subtraído de outro mais pequeno.

A lógica dentro do PIC tem a capacidade de executar as operações AND, OR, EX-OR, complemento (COMF)

e rotações (RLF e RRF).

Estas duas últimas instruções, rodam o conteúdo do registo, através desse registo e da fl ag C, em uma casa

para a esquerda (na direcção do bit 7), ou para a direita (na direcção do bit 0). O bit que sai do registo é escrito

na fl ag C e o conteúdo anterior desta fl ag, é escrito no bit situado do lado oposto no registo. Ver imagem com

exemplo.

www.mecatronicadegaragem.blogspot.com

Page 201: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 201

Rotação pelo Bit de Carry

Operações com bits

As instruções BCF e BSF, põem a “0” ou a “1” qualquer bit de qualquer local da memória. Apesar de parecer

uma operação simples, ela é executada do seguinte modo, o CPU primeiro lê o byte completo, altera o valor de

um bit e, a seguir, escreve o byte completo no mesmo sítio.

Controlo de Execução de um Programa

As instruções GOTO, CALL e RETURN são executadas do mesmo modo que em todos os outros microcon-

troladores. A diferença é que a pilha (stack) é independente da RAM interna, e é limitada a oito níveis.

A instrução “RETLW k” é idêntica à instrução RETURN, excepto que, ao regressar de uma subrotina, é escrita

no registo W uma constante defi nida pelo operando “k” da instrução. Esta instrução, permite implementar

facilmente listagens (também chamadas tabelas de “look-up”).

Esta tabela pode apresentar-se como um subprograma, que consiste numa série de instruções “RETLW k”,

onde as constantes “k” são membros da tabela.

www.mecatronicadegaragem.blogspot.com

Page 202: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 202

Main movlw 2 ;escreve número 2 para o acumulador

call Lookup ;salta para a tabela

Lookup addwf PCL,f ;adiciona acumulador ao contador de programa PCL

retlw k0 ;retorno da subrotina (acumulador contem k0)

retlw k1 ;...

retlw k2 ;...

... ;...

... ;...

retlw kn ;retorno da subrotina (acumulador contem kn)

Escreve-se a posição de um membro da nossa tabela no registo W e, usando a instrução CALL, chama-se

o subprograma que contém a tabela.

A primeira linha do subprograma, “ADDWF PCL,f”, adiciona a posição na tabela (que está escrita em

W) ao endereço do início da tabela (que está no registo PCL), assim, obtém-se o endereço real do dado da

tabela na memória de programa.

Quando se regressa do subprograma, ter-se-á no registo W, o conteúdo do membro da tabela endereçado.

No exemplo anterior, a constante “k2” estará no registo W, após o retorno do subprograma.

RETFIE (RETurn From Interrupt – Interrupt Enable, ou regresso da rotina de interrupção com as inter-

rupções habilitadas) é um regresso da rotina de interrupção, e difere de RETURN apenas em que, automatica-

mente, põe a “1” o bit GIE (Global Interrupt Enable - habilitação global das interrupções).

Quando a interrupção começa, este bit é automaticamente reposto a “0”. Também, quando a interrupção tem

início, somente o valor do contador de programa é posto no cimo da pilha.

O PIC não tem capacidade automática de armazenamento dos registos de estado. Ou seja, os registos de

trabalho do microcontrolador devem ser guardados assim que se entra na rotina de interrupção, para que mais

tarde, mesmo antes de saír, se reponham estes registos de trabalho.

1.

2.

3.

4.

www.mecatronicadegaragem.blogspot.com

Page 203: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 203

Os saltos condicionais estão sintetizados em duas instruções: BTFSC e BTFSS. Consoante o estado lógico do

bit do registo “f ” que está a ser testado, a instrução seguinte no programa é, ou não, executada.

Período de execução da instrução

Todas as instruções são executadas num único ciclo, excepto as instruções de ramifi cação condicional se a

condição for verdadeira, ou se o conteúdo do contador de programa for alterado pela instrução. Nestes casos,

a execução requer dois ciclos de instrução, e o segundo ciclo é executado como sendo um NOP (Nenhuma

Operação).

Quatro oscilações de clock, perfazem um ciclo de instrução. Se estivermos a usar um oscilador com 4MHz de

frequência, o tempo normal de execução de uma instrução será de 1 microsegundo e, no caso de uma ramifi ca-

ção condicional, de 2 microsegundos.

Listagem das instruções

f - qualquer local de memória num microcontrolador

W - registo de trabalho

b - posição de bit no registo ‘f ’

d - registo de destino

label - grupo de oito caracteres que marca o início de uma parte do programa (rótulo)

TOS - cimo da pilha

[] - opcional

<> - grupo de bits num registo

www.mecatronicadegaragem.blogspot.com

Page 204: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 204

MOVLW - Escrever constante no registo W

Sintaxe: [rótulo] MOVLW kDescrição: A constante de 8-bits k vai para o registo W.Operação: k -> ( W )Operando: 0 <= k <= 255Flag: -Número de palavras: 1Número de ciclos: 1Exemplo 1: MOVLW 0x5A

Depois da instrução: W= 0x5AExemplo 2: MOVLW REGISTAR

Antes da instrução: W = 0x10 e REGISTAR = 0x40Depois da instrução: W = 0x40

MOVWF Copiar W para f

Sintaxe: [rótulo] MOVWF fDescrição: O conteúdo do registo W é copiado para o registo fOperação: W -> ( f )Operando: 0 <= k <= 127Flag: -Número de palavras: 1Número de ciclos: 1Exemplo 1: MOVWF OPTION_REG

Antes da instrução: OPTION_REG = 0x20 W = 0x40Depois da instrução: OPTION_REG = 0x40 W = 0x40

Exemplo 2: MOVWF INDFAntes da instrução: W = 0x17FSR = 0xC2Conteúdo do endereço 0xC2 = 0x00Depois da instrução: W = 0x17FSR = 0xC2Conteúdo do endereço 0xC2 = 0x17

www.mecatronicadegaragem.blogspot.com

Page 205: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 205

MOVF Copiar f para d

Sintaxe: [rótulo] MOVF f, dDescrição: O conteúdo do registo f é guardado no local determinado pelo operando d

Se d = 0, o destino é o registo WSe d = 1, o destino é o próprio registo fA opção d = 1, é usada para testar o conteúdo do registo f, porque a execução

desta instrução afecta a fl ag Z do registo STATUS.Operação: f -> ( d )Operando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: MOVF FSR, 0

Antes da instrução: FSR = 0xC2W = 0x00Depois da instrução: W = 0xC2Z = 0

Exemplo 2: MOVF INDF, 0Antes da instrução: W = 0x17FSR = 0xC2conteúdo do endereço 0xC2 = 0x00Depois da instrução: W = 0x00FSR = 0xC2conteúdo do endereço 0xC2 = 0x00Z = 1

CLRW Escrever 0 em W

Sintaxe: [rótulo] CLRWDescrição: O conteúdo do registo W passa para 0 e a fl ag Z do registo STATUS toma o

valor 1.Operação: 0 -> ( W )Operando: -Flag: ZNúmero de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 206: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 206

Exemplo: CLRWAntes da instrução: W = 0x55Depois da instrução: W = 0x00Z = 1

CLRF Escrever 0 em f

Sintaxe: [rótulo] CLRF fDescrição: O conteúdo do registo ‘f ’ passa para 0 e a fl ag Z do

registo STATUS toma o valor 1.Operação: 0 -> fOperando: 0 <= k <= 127Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: CLRF STATUS

Antes da instrução: STATUS = 0xC2Depois da instrução: STATUS = 0x00Z = 1

Exemplo 2: CLRF INDFAntes da instrução: FSR = 0xC2conteúdo do endereço 0xC2 = 0x33Depois da instrução: FSR = 0xC2conteúdo do endereço 0xC2 = 0x00Z = 1

SWAPF Copiar o conteúdo de f para d, trocando a posição dos 4 primeiros bits com a dos 4 últimos

Sintaxe: [rótulo] SWAPF f, dDescrição: Os 4 bits + signifi cativos e os 4 bits – signifi cativos de f, trocam de

posições.Se d = 0, o resultado é guardado no registo WSe d = 1, o resultado é guardado no registo f

Operação: f <0:3>-> d <4:7>, f <4:7>-> d <0:3>,Operando: 0 <= k <= 127, d E [0, 1]Flag: -Número de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 207: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 207

Exemplo 1: SWAPF REG, 0Antes da instrução: REG = 0xF3Depois da instrução: REG = 0xF3W = 0x3F

Exemplo 2: SWAPF REG, 1Antes da instrução: REG = 0xF3Depois da instrução: REG = 0x3F

ADDLW Adicionar W a uma constante

Sintaxe: [rótulo] ADDLW kDescrição: O conteúdo do registo W, é adicionado à constante de 8-bits k e o resul-

tado é guardado no registo W.Operação: ( W ) + k -> WOperando: 0 <= k <= 255Flag: C, DC, ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: ADDLW 0x15

Antes da instrução: W= 0x10Depois da instrução: W= 0x25

Exemplo 2: ADDLW REGAntes da instrução: W = 0x10REG = 0x37Depois da instrução: W = 0x47

ADDWF Adicionar W a f

Sintaxe: [rótulo] ADDWF f, dDescrição: Adicionar os conteúdos dos registos W e f

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: (W) + ( f ) -> d, d E [0, 1]Operando: 0 <= k <= 127Flag: C, DC, ZNúmero de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 208: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 208

Exemplo 1: ADDWF FSR, 0Antes da instrução: W = 0x17FSR = 0xC2Depois da instrução: W = 0xD9FSR = 0xC2

Exemplo 2: ADDWF INDF,0Antes da instrução: W = 0x17FSR = 0xC2conteúdo do endereço 0xC2 = 0x20Depois da instrução: W = 0x37FSR = 0xC2Conteúdo do endereço 0xC2 = 0x20

SUBLW Subtrair W a uma constante

Sintaxe: [rótulo] SUBLW kDescrição: O conteúdo do registo W, é subtraído à constante k e, o resultado, é guar-

dado no registo W.Operação: k - ( W ) -> WOperando: 0 <= k <= 255Flag: C, DC, ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: SUBLW 0x03

Antes da instrução: W= 0x01, C = x, Z = xDepois da instrução: W= 0x02, C = 1, Z = 0 Resultado > 0Antes da instrução: W= 0x03, C = x, Z = xDepois da instrução: W= 0x00, C = 1, Z = 1 Resultado = 0Antes da instrução: W= 0x04, C = x, Z = xDepois da instrução: W= 0xFF, C = 0, Z = 0 Resultado < 0

Exemplo 2: SUBLW REGAntes da instrução: W = 0x10REG = 0x37Depois da instrução: W = 0x27C = 1 Resultado > 0

www.mecatronicadegaragem.blogspot.com

Page 209: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 209

SUBWF Subtrair W a f

Sintaxe: [rótulo] SUBWF f, dDescrição: O conteúdo do registo W é subtraído ao conteúdo do registo f

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: ( f ) - (W) -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: C, DC, ZNúmero de palavras: 1Número de ciclos: 1Exemplo: SUBWF REG, 1

Antes da instrução: REG= 3, W= 2, C = x, Z = xDepois da instrução: REG= 1, W= 2, C = 1, Z = 0 Resultado

> 0Antes da instrução: REG= 2, W= 2, C = x, Z = xDepois da instrução: REG=0, W= 2, C = 1, Z = 1 Resultado

= 0Antes da instrução: REG=1, W= 2, C = x, Z = xDepois da instrução: REG= 0xFF, W=2, C = 0, Z = 0 Resultado

< 0

ANDLW Fazer o “E” lógico de W com uma constante

Sintaxe: [rótulo] ANDLW kDescrição: É executado o “E” lógico do conteúdo do registo W, com a constante k

O resultado é guardado no registo W.Operação: ( W ) .AND. k -> WOperando: 0 <= k <= 255Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: ANDLW 0x5F

Antes da instrução: W= 0xA3 ; 0101 1111 (0x5F) ; 1010 0011 (0xA3)Depois da instrução: W= 0x03; 0000 0011 (0x03)

www.mecatronicadegaragem.blogspot.com

Page 210: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 210

Exemplo 2: ANDLW REGAntes da instrução: W = 0xA3 ; 1010 0011 (0xA3) REG = 0x37 ; 0011 0111 (0x37)Depois da instrução: W = 0x23 ; 0010 0011 (0x23)

ANDWF Fazer o “E” lógico de W com f

Sintaxe: [rótulo] ANDWF f, dDescrição: Faz o “E” lógico dos conteúdos dos registos W e f

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: (W) .AND. ( f ) -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: ANDWF FSR, 1

Antes da instrução: W= 0x17, FSR= 0xC2; 0001 1111 (0x17) ; 1100 0010 (0xC2)Depois da instrução: W= 0x17, FSR= 0x02 ; 0000 0010 (0x02)

Exemplo 2: ANDWF FSR, 0Antes da instrução: W= 0x17, FSR= 0xC2; 0001 1111 (0x17) ; 1100 0010 (0xC2)Depois da instrução: W= 0x02, FSR= 0xC2; 0000 0010 (0x02)

IORLW Fazer o “OU” lógico de W com uma constante

Sintaxe: [rótulo] IORLW kDescrição: É executado o “OU” lógico do conteúdo do registo W, com a constante de

8 bits k, o resultado é guardado no registo W.Operação: ( W ) .OR. k -> WOperando: 0 <= k <= 255Flag: ZNúmero de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 211: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 211

Exemplo 1: IORLW 0x35Antes da instrução: W= 0x9ADepois da instrução: W= 0xBFZ= 0

Exemplo 2: IORLW REGAntes da instrução: W = 0x9Aconteúdo de REG = 0x37Depois da instrução: W = 0x9FZ = 0

IORWF Fazer o “OU” lógico de W com f

Sintaxe: [rótulo] IORWF f, dDescrição: Faz o “OU” lógico dos conteúdos dos registos W e f

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: (W) .OR. ( f ) -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: IORWF REG, 0

Antes da instrução: REG= 0x13, W= 0x91Depois da instrução: REG= 0x13, W= 0x93Z= 0

Exemplo 2: IORWF REG, 1Antes da instrução: REG= 0x13, W= 0x91Depois da instrução: REG= 0x93, W= 0x91Z= 0

XORLW “OU- EXCLUSIVO” de W com uma constante

Sintaxe: [rótulo] XORLW kDescrição: É executada a operação “OU-Exclusivo” do conteúdo do registo W, com a

constante k. O resultado é guardado no registo W.Operação: ( W ) .XOR. k -> WOperando: 0 <= k <= 255Flag: Z

www.mecatronicadegaragem.blogspot.com

Page 212: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 212

Número de palavras: 1Número de ciclos: 1Exemplo 1: XORLW 0xAF

Antes da instrução: W= 0xB5 ; 1010 1111 (0xAF) ; 1011 0101 (0xB5)Depois da instrução: W= 0x1A; 0001 1010 (0x1A)

Exemplo 2: XORLW REGAntes da instrução: W = 0xAF ; 1010 1111 (0xAF) REG = 0x37 ; 0011 0111 (0x37)Depois da instrução: W = 0x98 ; 1001 1000 (0x98)Z = 0

XORWF “OU-EXCLUSIVO” de W com f

Sintaxe: [rótulo] XORWF f, dDescrição: Faz o “OU-EXCLUSIVO” dos conteúdos dos registos W e f

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: (W) .XOR. ( f ) -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: XORWF REG, 1

Antes da instrução: REG= 0xAF, W= 0xB5 ; 1010 1111

(0xAF) ; 1011 0101 (0xB5)Depois da instrução: REG= 0x1A, W= 0xB5 001 1010

(0x1A)Exemplo 2: XORWF REG, 0

Antes da instrução: REG= 0xAF, W= 0xB5; 1010 1111

(0xAF) ; 1011 0101 (0xB5)Depois da instrução: REG= 0xAF, W= 0x1A ; 0001 1010

(0x1A)

www.mecatronicadegaragem.blogspot.com

Page 213: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 213

INCF Incrementar f

Sintaxe: [rótulo] INCF f, dDescrição: Incrementar de uma unidade, o conteúdo do registo f.

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: ( f ) + 1 -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1Exemplo 1: INCF REG, 1

Antes da instrução: REG = 0xFFZ = 0Depois da instrução: REG = 0x00Z = 1

Exemplo 2: INCF REG, 0Antes da instrução: REG = 0x10W = xZ = 0Depois da instrução: REG = 0x10W = 0x11Z = 0

DECF Decrementar f

Sintaxe: [rótulo] DECF f, dDescrição: Decrementar de uma unidade, o conteúdo do registo f.

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: ( f ) - 1 -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 214: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 214

Exemplo 1: DECF REG, 1Antes da instrução: REG = 0x01Z = 0Depois da instrução: REG = 0x00Z = 1

Exemplo 2: DECF REG, 0Antes da instrução: REG = 0x13W = xZ = 0Depois da instrução: REG = 0x13W = 0x12Z = 0

RLF Rodar f para a esquerda através do Carry

Sintaxe: [rótulo] RLF f, dDescrição: O conteúdo do registo f é rodado um espaço para a esquerda, através de

C (fl ag do Carry).Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: ( f <n>) -> d<n+1>, f<7> -> C, C -> d<0>;Operando: 0 <= k <= 127, d E [0, 1]Flag: CNúmero de palavras: 1Número de ciclos: 1

Exemplo 1: RLF REG, 0Antes da instrução: REG = 1110 0110C = 0Depois da instrução: REG = 1110 0110W = 1100 1100C = 1

Exemplo 2: RLF REG, 1Antes da instrução: REG = 1110 0110C = 0Depois da instrução: REG = 1100 1100C = 1

www.mecatronicadegaragem.blogspot.com

Page 215: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 215

RRF Rodar f para a direita através do Carry

Sintaxe: [rótulo] RRF f, dDescrição: O conteúdo do registo f é rodado um espaço para a direita, através de C

(fl ag do Carry).Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: ( f <n>) -> d<n-1>, f<0> -> C, C -> d<7>;Operando: 0 <= k <= 127, d E [0, 1]Flag: CNúmero de palavras: 1Número de ciclos: 1Exemplo 1: RRF REG, 0

Antes da instrução: REG = 1110 0110W = xC = 0Depois da instrução: REG = 1110 0110W = 0111 0011C = 0

Exemplo 2: RRF REG, 1Antes da instrução: REG = 1110 0110C = 0Depois da instrução: REG = 0111 0011C = 0

COMF Complementar f

Sintaxe: [rótulo] COMF f, dDescrição: O conteúdo do registo f é complementado.

Se d=0, o resultado é guardado no registo WSe d=1, o resultado é guardado no registo f

Operação: () -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: ZNúmero de palavras: 1Número de ciclos: 1

www.mecatronicadegaragem.blogspot.com

Page 216: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 216

Exemplo 1: COMF REG, 0Antes da instrução: REG= 0x13 ; 0001 0011 (0x13)Depois da instrução: REG= 0x13 ; complementarW = 0xEC ; 1110 1100 (0xEC)

Exemplo 2: COMF INDF, 1Antes da instrução: FSR= 0xC2conteúdo de FSR = (FSR) = 0xAADepois da instrução: FSR= 0xC2conteúdo de FSR = (FSR) = 0x55

BCF Pôr a “0” o bit b de f

Sintaxe: [rótulo] BCF f, bDescrição: Limpar (pôr a ‘0’), o bit b do registo fOperação: 0 -> f<b>Operando: 0 <= k <= 127, 0 <= b <= 7Flag: -Número de palavras: 1Número de ciclos: 1Exemplo 1: BCF REG, 7

Antes da instrução: REG = 0xC7 ; 1100 0111 (0xC7)Depois da instrução: REG = 0x47 ; 0100 0111 (0x47)

Exemplo 2: BCF INDF, 3Antes da instrução: W = 0x17FSR = 0xC2conteúdo do endereço em FSR (FSR) = 0x2FDepois da instrução: W = 0x17FSR = 0xC2conteúdo do endereço em FSR (FSR) = 0x27

BSF Pôr a “1” o bit b de f

Sintaxe: [rótulo] BSF f, bDescrição: Pôr a ‘1’, o bit b do registo fOperação: 1 -> f<b>Operando: 0 <= k <= 127, 0 <= b <= 7Flag: -Número de palavras: 1

www.mecatronicadegaragem.blogspot.com

Page 217: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 217

Número de ciclos: 1Exemplo 1: BSF REG, 7

Antes da instrução: REG = 0x07 ; 0000 0111 (0x07)Depois da instrução: REG = 0x17 ; 1000 0111 (0x87)

Exemplo 2: BSF INDF, 3Antes da instrução: W = 0x17FSR = 0xC2conteúdo do endereço em FSR (FSR) = 0x2FDepois da instrução: W = 0x17FSR = 0xC2conteúdo do endereço em FSR (FSR) = 0x28

BTFSC Testar o bit b de f, saltar por cima se for = 0

Sintaxe: [rótulo] BTFSC f, bDescrição: Se o bit b do registo f for igual a zero, ignorar instrução seguinte. Se este

bit b for zero, então, durante a execução da instrução actual, a execução

da instrução seguinte não se concretiza e é executada, em vez desta, uma

instrução NOP, fazendo com que a instrução actual, demore dois ciclos

de instrução a ser executada.Operação: Ignorar a instrução seguinte se (f<b>) = 0Operando: 0 <= k <= 127, 0 <= b <= 7Flag: -Número de palavras: 1Número de ciclos: 1 ou 2 dependendo do valor lógico do bit bExemplo: LAB_01 BTFSC REG, 1; Testar o bit 1 do registo REG

LAB_02 ........... ; Ignorar esta linha se for 0LAB_03 ........... ; Executar esta linha depois da anterior, se for 1Antes da instrução, o contador de programa contém o endereço LAB_01.

Depois desta instrução, se o bit 1 do registo REG for zero, o contador de

programa contém o endereço LAB_03. Se o bit 1 do registo REG for ‘um’,

o contador de programa contém o endereço LAB_02.

www.mecatronicadegaragem.blogspot.com

Page 218: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 218

BTFSS Testar o bit b de f, saltar por cima se for = 1

Sintaxe: [rótulo] BTFSS f, bDescrição: Se o bit b do registo f for igual a um, ignorar instrução seguinte. Se du-

rante a execução desta instrução este bit b for um, então, a execução da

instrução seguinte não se concretiza e é executada, em vez desta, uma

instrução NOP, assim, a instrução actual demora dois ciclos de instrução

a ser executada.Operação: Ignorar a instrução seguinte se (f<b>) = 1Operando: 0 <= k <= 127, 0 <= b <= 7Flag: -Número de palavras: 1Número de ciclos: 1 ou 2 dependendo do valor lógico do bit bExemplo: LAB_01 BTFSS REG, 1; Testar o bit 1 do registo REG

LAB_02 ........... ; Ignorar esta linha se for 1LAB_03 ........... ; Executar esta linha depois da anterior, se for 0Antes da instrução, o contador de programa contém o endereço LAB_01.

Depois desta instrução, se o bit 1 do registo REG for ‘um’, o contador de

programa contém o endereço LAB_03. Se o bit 1 do registo REG for

zero, o contador de programa contém o endereço LAB_02.

INCFSZ Incrementar f, saltar por cima se der = 0

Sintaxe: [rótulo] INCFSZ f, dDescrição: Descrição: O conteúdo do registo f é incrementado de uma unidade.

Se d = 0, o resultado é guardado no registo W.Se d = 1, o resultado é guardado no registo f.Se o resultado do incremento for = 0, a instrução seguinte é substituída

por uma instrução NOP, fazendo com que a instrução actual, demore dois

ciclos de instrução a ser executada.Operação: (f ) + 1 -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: -Número de palavras: 1Número de ciclos: 1 ou 2 dependendo do resultado

www.mecatronicadegaragem.blogspot.com

Page 219: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 219

Exemplo: LAB_01 INCFSZ REG, 1; Incrementar o conteúdo de REG de uma

unidadeLAB_02 ........... ; Ignorar esta linha se resultado = 0LAB_03 ........... ; Executar esta linha depois da anterior, se der

0Conteúdo do contador de programa antes da instrução, PC = endereço

LAB_01. Se o conteúdo do registo REG depois de a operação REG =

REG + 1 ter sido executada, for REG = 0, o contador de programa aponta

para o rótulo de endereço LAB_03. Caso contrário, o contador de pro-

grama contém o endereço da instrução seguinte, ou seja, LAB_02.

DECFSZ Decrementar f, saltar por cima se der = 0

Sintaxe: [rótulo] DECFSZ f, dDescrição: O conteúdo do registo f é decrementado uma unidade.

Se d = 0, o resultado é guardado no registo W.Se d = 1, o resultado é guardado no registo f.Se o resultado do decremento for = 0, a instrução seguinte é substituída

por uma instrução NOP, fazendo assim com que a instrução actual, de-

more dois ciclos de instrução a ser executada.Operação: (f ) - 1 -> dOperando: 0 <= k <= 127, d E [0, 1]Flag: -Número de palavras: 1Número de ciclos: 1 ou 2 dependendo do resultadoExemplo: LAB_01 DECFSZ REG, 1; Decrementar o conteúdo de REG de uma

unidadeLAB_02 ........... ; Ignorar esta linha se resultado = 0LAB_03 ........... ; Executar esta linha depois da anterior, se der

0Conteúdo do contador de programa antes da instrução, PC = endereço

LAB_01. Se o conteúdo do registo REG depois de a operação REG

= REG – 1 ter sido executada, for REG = 0, o contador de programa

aponta para o rótulo de endereço LAB_03. Caso contrário, o contador de

programa contém o endereço da instrução seguinte, ou seja, LAB_02.

www.mecatronicadegaragem.blogspot.com

Page 220: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 220

GOTO Saltar para o endereço

Sintaxe: [rótulo] GOTO kDescrição: Salto incondicional para o endereço k.Operação: k -> PC<10:0>, (PCLATH<4:3>) -> PC<12:11>Operando: 0 <= k <= 2048Flag: -Número de palavras: 1Número de ciclos: 2Exemplo: LAB_00 GOTO LAB_01; Saltar para LAB_01

:LAB_01 ............Antes da instrução: PC = endereço LAB_00Depois da instrução: PC = endereço LAB_01

CALL Chamar um programa

Sintaxe: [rótulo] CALL kDescrição: Esta instrução, chama um subprograma. Primeiro, o endereço de retorno

(PC+1) é guardado na pilha, a seguir, o operando k de 11 bits, corre-

spondente ao endereço de início do subprograma, vai para o contador de

programa (PC).Operação: PC+1 -> Topo da pilha (TOS – Top Of Stack)Operando: 0 <= k <= 2048Flag: -Número de palavras: 1Número de ciclos: 2Exemplo: LAB_00 CALL LAB_02 ; Chamar a subrotina LAB_02

LAB_01 : :LAB_02 ............Antes da instrução: PC = endereço LAB_00TOS = xDepois da instrução: PC = endereço LAB_02TOS = LAB_01

www.mecatronicadegaragem.blogspot.com

Page 221: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 221

RETURN Retorno de um subprograma

Sintaxe: [rótulo] RETURNDescrição: O conteúdo do topo da pilha é guardado no contador de programa.Operação: TOS -> Contador de programa PCOperando: -Flag: -Número de palavras: 1Número de ciclos: 2Exemplo: RETURN

Antes da instrução: PC = xTOS = xDepois da instrução: PC = TOSTOS = TOS - 1

RETLW Retorno de um subprograma com uma constante em W

Sintaxe: [rótulo] RETLW kDescrição: A constante k de 8 bits, é guardada no registo W.Operação: (k) -> W; TOS -> PCOperando: 0 <= k <= 255Flag: -Número de palavras: 1Número de ciclos: 2Exemplo: RETLW 0x43

Antes da instrução: W = xPC = xTOS = xDepois da instrução: W = 0x43PC = TOSTOS = TOS – 1

www.mecatronicadegaragem.blogspot.com

Page 222: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 222

RETFIE Retorno de uma rotina de interrupção

Sintaxe: [rótulo] RETLW kDescrição: Retorno de uma subrotina de atendimento de interrupção. O conteúdo do

topo de pilha (TOS), é transferido para o contador de programa (PC). Ao

mesmo tempo, as interrupções são habilitadas, pois o bit GIE de habilita-

ção global das interrupções, é posto a ‘1’.Operação: TOS -> PC ; 1 -> GIE Operando: -Flag: -Número de palavras: 1Número de ciclos: 2Exemplo: RETFIE

Antes da instrução: PC = xGIE = 0Depois da instrução: PC = TOSGIE = 1

NOP Nenhuma operação

Sintaxe: [rótulo] NOPDescrição: Nenhuma operação é executada, nem qualquer fl ag é afectada.Operação: -Operando: -Flag: -Número de palavras: 1Número de ciclos: 1Exemplo: NOP

CLRWDT Iniciar o temporizador do watchdog

Sintaxe: [rótulo] CLRWDTDescrição: O temporizador do watchdog é reposto a zero. O prescaler do temporiza-

dor de Watchdog é também reposto a 0 e, também, os bits do registo de

estado e são postos a ‘um’.Operação: 0 -> WDT

0 -> prescaler de WDT

www.mecatronicadegaragem.blogspot.com

Page 223: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Conjunto de Instruções

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 223

Operando: -Flag:Número de palavras: 1Número de ciclos: 1Exemplo: CLRWDT

Antes da instrução: Contador de WDT = xPrescaler de WDT = 1:128Depois da instrução: Contador do WDT = 0x00Prescale do WDT = 0

SLEEP Modo de repouso

Sintaxe: [rótulo] SLEEPDescrição: O processador entra no modo de baixo consumo. O oscilador pára. O bit

(Power Down) do registo Status é reposto a ‘0’. O bit (Timer Out) é posto

a ‘1’. O temporizador de WDT (Watchdog) e o respectivo prescaler são

repostos a ‘0’.Operação: 0 -> WDT

0 -> prescaler do WDT1 -> TO0 -> PD

Operando: -Flag:Número de palavras: 1Número de ciclos: 1Exemplo 1: SLEEP

Antes da instrução: Contador do WDT = xPrescaler do WDT = xDepois da instrução: Contador do WDT = 0x00Prescaler do WDT = 0

www.mecatronicadegaragem.blogspot.com

Page 224: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 224

Como programar um Microcontrolador

A capacidade de comunicar, é da maior importância nesta área. Contudo, isso só é possível se ambas as partes

usarem a mesma linguagem, ou seja, se seguirem as mesmas regras para comunicarem. Isto mesmo se aplica à

comunicação entre os microcontroladores e o homem.

A linguagem que o microcontrolador, e o homem, usam para comunicar entre si é designada por “linguagem

assembly”. O próprio título não tem um signifi cado profundo, trata-se de apenas um nome como por exemplo

inglês ou francês. Mais precisamente, “linguagem assembly” é apenas uma solução transitória. Os programas

escritos em linguagem assembly, devem ser traduzidos para uma “linguagem de zeros e uns”, de modo a que um

microcontrolador a possa receber.

-> “Linguagem assembly” e “assembler” são coisas diferentes.

A primeira, representa um conjunto de regras usadas para escrever um programa para um microcontrolador,

e, a outra, é um programa que corre num computador pessoal que traduz a linguagem assembly para uma

linguagem de zeros e uns.

Um programa escrito em “zeros” e “uns” diz-se que está escrito em “linguagem máquina”, ou “código máquina”.

www.mecatronicadegaragem.blogspot.com

Page 225: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 225

Fisicamente, “Programa” representa um fi cheiro num disco de computador (ou na memória se estivermos a ler

de um microcontrolador), e é escrito de acordo com as regras do assembly, ou qualquer outra linguagem de

programação de microcontroladores.

O homem pode entender a linguagem assembly, já que ela é constituída por símbolos alfabéticos e palavras. Ao

escrever um programa, certas regras devem ser seguidas para alcançar o efeito desejado. Um Tradutor (compi-

lador) interpreta cada instrução escrita em linguagem assembly como uma série de zeros e uns com signifi cado

para a lógica interna do microcontrolador.

Consideremos, por exemplo, a instrução “RETURN” que um microcontrolador utilizada para regressar de uma

subrotina.

Quando o assembler a traduz, nós obtemos uma série de uns e zeros, correspondentes a 14 bits, que o micro-

controlador sabe como interpretar.

Exemplo: RETURN 00 0000 0000 1000

O resultado desta tradução da linguagem assembly, é designado por um fi cheiro de “execução”. Muitas vezes

encontramos o nome de fi cheiro “HEX”. Este nome provém de uma representação hexadecimal desse fi cheiro,

bem como o sufi xo “hex” no título, por exemplo “correr.hex”. Uma vez produzido, o fi cheiro de execução é

inserido no microcontrolador através de um programador físico.

www.mecatronicadegaragem.blogspot.com

Page 226: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 226

Linguagem Assembly

Um programa, em Linguagem Assembly, é escrito por intermédio de um processador de texto (editor), e é ca-

paz de produzir um fi cheiro ASCII no disco de um computador, ou em ambientes próprios como o MPLAB.

Os elementos básicos da linguagem assembly são:

Labels (etiquetas - rótulos)

Instruções

Operandos

Directivas

Comentários

Um Label (etiqueta/rótulo) é uma designação textual (geralmente de fácil leitura) de uma linha num programa

ou de uma secção de um programa para onde um microcontrolador deve saltar ou, ainda, o início de um con-

junto de linhas de um programa. Também pode ser usado para executar uma ramifi cação de um programa (tal

como Goto....), o programa pode ainda conter uma condição que deve ser satisfeita, para que uma instrução

Goto seja executada.

É importante que uma etiqueta seja iniciada com uma letra do alfabeto, ou com um traço baixo “_” (under-

score). O comprimento de uma label pode ir até 32 caracteres. É também importante que a label comece na

primeira coluna.

www.mecatronicadegaragem.blogspot.com

Page 227: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 227

Instruções

As instruções são específi cas para cada microcontrolador, assim, se quisermos utilizar a linguagem assembly

temos que estudar as instruções desse microcontrolador.

O modo como se escreve uma instrução é designado por “sintaxe”. No exemplo que se segue, é possível recon-

hecer erros de escrita, dado que as instruções movlp e gotto não existem no microcontrolador PIC.

Operandos

Operandos são os elementos da instrução necessários, para que a instrução possa ser executada. Normalmente

são registos, variáveis e constantes. As constantes são designadas por “literais”. A palavra literal signifi ca “núme-

ro”.

www.mecatronicadegaragem.blogspot.com

Page 228: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 228

Comentários

O comentário é um texto que o programador escreve no programa, afi m de o tornar mais claro e legível. É

colocado logo a seguir a uma instrução, e deve começar com um ponto-e-vírgula “;”.

Directivas

Uma directiva é parecida com uma instrução mas, ao contrário desta, é independente do tipo de microcontro-

lador e é uma característica inerente à própria linguagem assembly.

As directivas servem-se de variáveis, ou registos, para satisfazer determinados propósitos. Por exemplo, NIVEL,

pode ser uma designação para uma variável localizada no endereço 0x0D da memória RAM. Deste modo, a

variável que reside nesse endereço, pode ser acedida pela palavra NIVEL. É muito mais fácil a um programador

recordar a palavra NIVEL, que lembrar-se que o endereço 0x0D contém informação sobre o nível.

Directiva PROCESSOR

Esta directiva deve ser escrita no início de todos os programas. Defi ne o tipo de microcontrolador, para o qual

o programa vai ser/está escrito. Como exemplo:

Processor 16f887

Directiva EQU

Esta directiva é usada para substituir um valor numérico, por um símbolo. Desta forma, a uma posição especí-

fi ca de memória RAM é atríbuido um nome. Como exemplo:

MAXIMUM EQU H’25’

www.mecatronicadegaragem.blogspot.com

Page 229: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 229

Isto signifi ca que, à posição de memória 0x25, é atribuido o nome “MAXIMUM”. A cada uso da label “MAXI-

MUM” no programa, esta vai ser interpretada pelo assembler como endereço 0x25 (“MAXIMUM” = 0x25).

Os símbolos podem ser especifi cados desta forma, e apenas uma vez no programa. Esta directiva é usada es-

sencialmente no ínicio do mesmo.

Directiva ORG

Esta directiva especifi ca uma posição na memória do programa, onde as instruções a seguir à directiva vão ser

colocadas. Como exemplo:

ORG 0x100

START ... ...

...

ORG 0x1000

TABLE ...

...

Este programa começa na posição 0x100.

A tabela que tem os dados, vai ser guardada na posição 0x1000.

Directiva END

Cada programa tem, obrigatoriamente, que ser terminado por esta directiva. Onde o compilador encontrar esta

directiva, imediatamente deixa de compilar. Como exemplo:

...

END ;Fim de programa

www.mecatronicadegaragem.blogspot.com

Page 230: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 230

Directiva $INCLUDE

O nome desta directiva, expressa bem o seu propósito. Durante a compilação do assembler, possibilita o pro-

grama a usar outro fi cheiro que está no disco do computador. Como exemplo:

...

#include <p16f887.inc>

Directivas CBLOCK e ENDC

Todas as variaveis (nomes e endereços) que vão ser usados no programa, têem que ser defi nidos no início do

programa. Devido a esta funcionalidade, não é necessário especifi car o endereço de cada variavel, mais tarde

no programa. Em vez disso, é apenas necessário escrever o endereço da primeira variavel, usando a directiva

CBLOCK, e listar todas as outras variaveis a seguir. O compilador automaticamente atribui, a estas variaveis,

os correspondentes endereços, pela ordem como são escritas. Por fi m, a directiva ENDC indica o fi m da lista

de variaveis.

CBLOCK 0x20

START ; endereço 0x20

RELE ; endereço 0x21

STOP ; endereço 0x22

LEFT ; endereço 0x23

RIGHT ; endereço 0x24

ENDC

...

www.mecatronicadegaragem.blogspot.com

Page 231: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 231

Directivas IF, ENDIF e ELSE

Estas directivas são usadas, para criar os chamados blocos condicionais de um programa. Cada um destes

blocos começa com uma directiva IF, e termina com a directiva ENDIF ou ELSE. Uma declaração, ou símbolo,

(em parênteses), a seguir à directiva IF, representa uma condição que determina qual parte do programa a ser

compilada.

Se a declaração estiver correcta, ou se o valor de um símbolo é igual a 1, o programa compila todas as instruções

antes da directiva ELSE ou ENDIF.

Se a declaração não estiver correcta, ou o valor de um símbolo é igual a zero, apenas as instruções escritas

depois das directivas ELSE ou ENDIF, são para compilar.

Exemplo 1:

IF (VERSION>3)

CALL Table_2

CALL Extension

ENDIF

Se o programa é lançado depois da versão 3 (declaração correcta), então, as subrotinas “Table 2” e “Extension”

são executadas. Se a declaração em parênteses é falsa, (VERSION<3), as duas instruções que chamas as sub-

rotinas são ignoradas, e não vão ser compiladas.

Exemplo 2:

Se o valor do símbolo “Model” é igual a 1, então as duas instruções depois da directiva IF são compiladas, bem

como as instruções depois da directiva ENDIF (todas as instruções entre ELSE e ENDIF são ignoradas).

De outro forma, se “Model” é igual a 0, então as instruções entre IF e ELSE são ignoradas, onde as instruções

depois de ELSE são compiladas.

www.mecatronicadegaragem.blogspot.com

Page 232: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 232

IF (Model)

MOVFW BUFFER

MOVWF MAXIMUM

ELSE

MOVFW BUFFER1

MOVWF MAXIMUM

ENDIF

...

Directiva BANKSEL

De maneira a aceder a um registo SFR, é necessário escolher o banco da memória RAM apropriado, usando

os bits RP0 e RP1 do registo STATUS. Esta directiva é usada neste caso. Como o fi cheiro de dados “.inc”

contém já a lista de todos os registos, bem como o seu endereço de memória, o compilador sabe a que banco

corresponde este registo. Depois de encontrar esta directiva, o compilador escolhe os bits RP0 e RP1 para o

registo especifi cado, de forma automática. Como exemplo:

...

BANKSEL TRISB

CLRF TRISB

MOVLW B’01001101’

BANKSEL PORTB

MOVWF PORTB

...

www.mecatronicadegaragem.blogspot.com

Page 233: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 233

Operadores aritméticos de assembler

www.mecatronicadegaragem.blogspot.com

Page 234: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 234

Exemplo de como escrever um Programa

O exemplo que se segue, ilustra como um programa escrito em linguagem assembly se apresenta:

Quando se escreve um programa, além das regras fundamentais, existem princípios que, embora não ob-

rigatórios, é conveniente serem seguidos. Um deles, é escrever no seu início, o nome do programa, aquilo que

o programa faz, a versão deste, a data em que foi escrito, tipo de microcontrolador para o qual foi escrito e o

nome do programador.

Uma vez que estes dados não interessam ao tradutor de assembly, são escritos na forma de comentários. Deve

ter-se em atenção que um comentário começa sempre com ponto e vírgula, e pode ser colocado na linha seguinte,

ou logo a seguir à instrução. Depois deste comentário inicial ter sido escrito, devem incluir-se as directivas. Isto

mostra-se no exemplo de cima.

www.mecatronicadegaragem.blogspot.com

Page 235: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 235

Para que o seu funcionamento seja correcto, é preciso defi nir vários parâmetros para o microcontrolador, tais

como:

Tipo de oscilador;

Se o temporizador do watchdog está ligado; e

Se o circuito interno de reset está habilitado.

Tudo isto é defi nido na directiva seguinte:

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

Logo que todos os elementos que precisamos tenham sido defi nidos, podemos começar a escrever o pro-

grama.

Primeiro, é necessário defi nir o endereço para que o microcontrolador deve ir quando se liga a alimentação. É

esta a fi nalidade de (org 0x00).

O endereço para onde um programa salta se ocorrer uma interrupção, é (org 0x04).

Como este é um programa simples, é sufi ciente dirigir o microcontrolador para o início de um programa com

uma instrução “goto Main” (Main = programa principal).

As instruções encontradas em Main, seleccionam o banco 1 (BANK1) de modo a poder aceder-se ao registo

TRISB, afi m de que o porto B seja defi nido como uma saída (banksel TRISB).

O próximo passo é seleccionar o banco de memória 0, e colocar os bits do porto B no estado lógico ‘1’ e, assim,

o programa principal fi ca terminado (movlw 0xFF, movwf PORTB).

É preciso, no entanto, um outro ciclo (loop), onde o microcontrolador possa permanecer sem que ocorram er-

ros. Trata-se de um ‘loop’ infi nito, que é executado continuamente, enquanto a alimentação não for desligada.

Finalmente, é necessário colocar a palavra “end” no fi m de cada programa, de modo a informar o compilador

de que o programa não contém mais instruções.

www.mecatronicadegaragem.blogspot.com

Page 236: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 236

Ficheiros criados ao compilar um programa

Os fi cheiros resultantes, da compilação de um programa escrito em linguagem assembly, são os seguintes:

Ficheiro de execução (nome_do_programa.hex)

Ficheiro de erros no programa (nome_do_programa.err)

Ficheiro de listagem (nome_do_programa.lst)

O primeiro fi cheiro contém o programa traduzido, e que vai ser introduzido no microcontrolador quando

este é programado. O conteúdo deste fi cheiro não dá grande informação ao programador, por isso, não vai ser

discutido.

O segundo fi cheiro contém erros possíveis, que foram cometidos no processo de escrita e que foram notifi cados

pelo compilador durante a tradução. Estes erros também são mencionados no fi cheiro de listagem “list”. No en-

tanto, é preferível utilizar este fi cheiro de erros “err”, em casos em que o fi cheiro “lst” é muito grande e, portanto,

difícil de consultar.

O terceiro fi cheiro é o mais útil para o programador. Contém muita informação, tal como o posicionamento das

instruções e variáveis na memória e a sinalização dos erros.

No início de cada página, encontra-se informação acerca do nome do fi cheiro, data em que foi criado e número

de página.

A primeira coluna, contém o endereço da memória de programa, onde a instrução mencionada nessa linha,

é colocada. A segunda coluna, contém os valores de quaisquer símbolos defi nidos com as directivas: SET,

EQU, VARIABLE, CONSTANT ou CBLOCK. A terceira coluna, tem, o código da instrução que o PIC

irá executar. A quarta coluna contém instruções assembler e comentários do programador. Possíveis erros são

mencionados entre as linhas, a seguir à linha em que o erro ocorreu.

No fi m do fi cheiro de listagem, é apresentada uma tabela dos símbolos usados no programa.

Uma característica útil do fi cheiro ‘list’ é a apresentação de um mapa da memória utilizada. Mesmo no fi m,

existe uma estatística dos erros, bem como a indicação da memória de programa utilizada e da disponível.

www.mecatronicadegaragem.blogspot.com

Page 237: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 237

www.mecatronicadegaragem.blogspot.com

Page 238: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 238

MPLAB

O MPLAB, é um pacote de programas que correm no Windows e que tornam mais fácil escrever ou desen-

volver um programa. Pode descrever-se ainda melhor, como sendo um ambiente de desenvolvimento para uma

linguagem de programação normalizada, e destinado a correr num computador pessoal (PC). Anteriormente,

as operações incidiam sobre uma linha de instrução e contemplavam um grande número de parâmetros, até

que se introduziu o IDE “Integrated Development Environment” (Ambiente Integrado de Desenvolvimento)

e as operações tornaram-se mais fáceis, usando o MPLAB. Mesmo agora, as preferências das pessoas divergem

e alguns programadores preferem ainda os editores standard e os intérpretes linha a linha. Em qualquer dos

casos, o programa escrito é legível e uma ajuda bem documentada está disponível.

Instalando o programa - MPLAB

O MPLAB compreende várias partes:

Agrupamento de todos os fi cheiros do mesmo projecto, num único projecto (Gestor de Projecto)

Escrever e processar um programa (Editor de Texto)

Simular o funcionamento no microcontrolador do programa que se acabou de escrever (Simulador)

Além destes, existem sistemas de suporte para os produtos da Microchip, tais como o PICSTART Plus, ICD2

(In Circuit Debugger - Detecção de erros com o microcontrolador a funcionar) e o Pickit2.

Os requisitos mínimos para um computador que possa correr o MPLAB, são:

Computador PC com microprocessador 486 ou superior

Microsoft Windows 3.1x, Windows 95 ou versões mais recente do sistema operativo Windows.

Placa gráfi ca VGA

8MB de memória (32MB recomendados)

200 MB de espaço no disco rígido

Rato

www.mecatronicadegaragem.blogspot.com

Page 239: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 239

Antes de iniciarmos o MPLAB, temos primeiro que o instalar. A instalação é o processo de copiar os fi cheiros

do MPLAB para o disco duro do computador, a partir do fi cheiro de instalção disponivel do CD, ou da página

internet do fabricante. Existe uma opção em cada nova janela que permite regressar à anterior. Assim, os erros

não constituem problema e, o trabalho de instalação, torna-se mais fácil. Este modo de instalação é comum

à maioria dos programas Windows. Primeiro, aparece uma janela de boas vindas, a seguir pode-se escolher

entre as opções indicadas e, no fi m do processo, obtém-se uma mensagem que informa de que o programa está

instalado e pronto a funcionar.

Depois de clicar em ‘Finish’, a instalação do MPLAB está terminada.

Clicar no icon do MPLAB, de maneira a iniciar o programa.

www.mecatronicadegaragem.blogspot.com

Page 240: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 240

www.mecatronicadegaragem.blogspot.com

Page 241: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 241

www.mecatronicadegaragem.blogspot.com

Page 242: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 242

Como pode ver-se, o aspecto do MPLAB é o mesmo da maioria dos programas Windows. Perto da área de

trabalho existe um “menu” (faixa azul em cima, com as opções File, Edit, etc.), “toolbar” (barra com fi guras que

preenchem pequenos quadrados), e a linha de status no fundo da janela. Assim, pretende-se seguir uma regra

no Windows, que é tornar também acessíveis por baixo do menu, as opções usadas mais frequentemente no

programa. Deste modo, é possível acedê-las de um modo mais fácil, e tornar o nosso trabalho mais rápido. Ou

seja, aquilo que está disponível na barra de ferramentas, também está disponível no menu.

www.mecatronicadegaragem.blogspot.com

Page 243: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 243

A implementação de um PROJECTO

Seguir os seguintes passos, para preparar o programa a carregar no microcontrolador:

Criar um Projecto

Escrever o Programa

Compilar

De maneira a criar o Projecto, é necessário clicar na opção “PROJECT”, e depois “PROJECT WIZARD”.

Uma janela de boas vindas aparece.

Clicar em “NEXT”, e escolher o microcontrolador que se vai usar.

1.

2.

3.

www.mecatronicadegaragem.blogspot.com

Page 244: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 244

No fi m, é atribuido um nome ao projecto, que normalmente indica o objectivo, e conteúdo, do programa es-

crito. O projecto deverá ser movido para a pasta pretendida.

Documentos contidos no Projecto, não têem necessáriamente que ter sido escritos no MPLAB. Documentos

www.mecatronicadegaragem.blogspot.com

Page 245: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 245

escritos por outro programa, também podem ser incluídos no Projecto.

Clicar “FINISH” para completar o projecto. A janela em si, já contém parâmetros do Projecto.

Escrever um novo Programa

Quando um projecto é criado, uma janela como a da fi gura abaixo, deverá aparecer:

www.mecatronicadegaragem.blogspot.com

Page 246: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 246

O próximo passo é escrever um programa.

Abrir um novo documento em FILE > NEW. O editor de texto do MPLAB vai abrir-se.

Gravar o documento na pasta do projecto, usando os comandos FILE > SAVE, e dar-lhe o nome pretendido.

Depois de “XPTO.asm” ter sido criado, deverá ser incluido no projecto, fazendo clique direito na opção

“SOURCE FILES”, na janela “xxxx.MCW”. A seguir, uma pequena janela dará duas opções, das quais será

seleccionada “ADD FILES”.

www.mecatronicadegaragem.blogspot.com

Page 247: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 247

Clicando nessa opção, abre outra janela que contém as pastas dos disco rígido. Escolher a pasta do projecto, e

o fi cheiro “XPTO.asm”. Ver fi gura abaixo.

O primeiro programa

A escrita do programa não pode ser iniciada, antes destas operações anteriores terem sido realizadas.

O programa abaixo é um exemplo de como se faz:

;Program to set port B pins to logic one (1).

;Version: 1.0 Date: April 25,2007 MCU: PIC16F887

;***** Declaration and confi guration of the microcontroller *****

PROCESSOR 16f887

#include “p16f887.inc”

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

www.mecatronicadegaragem.blogspot.com

Page 248: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 248

;***** Variable declaration *****

Cblock 0x20 ; First free RAM location

endc ; No variables

;;***** Program memory structure *****

ORG 0x00 ; Reset vector

goto Main ; After reset jump to this location

ORG 0x04 ; Interrupt vector

goto Main ; No interrupt routine

Main ; Start the program

banksel TRISB ; Select bank containing TRISB

clrf TRISB ; Port B is confi gured as output

banksel PORTB ; Select bank containing PORTB

movlw 0xFF ; W=FF

movwf PORTB ; Move W to port B

Loop goto Loop ; Jump to label Loop

End

O programa deve ser escrito na janela “xxxx.ASM”. Quando completada a escrita, o programa deverá ser com-

pilado para um fi cheiro executavel de formato HEX, usando a opção PROJECT > BUILD ALL, e uma nova

janela vai aparecer. A última frase é a mais importante, porque diz se a compilação foi bem sucedida, ou não. Se

houver dúvidas, a mensagem “BUILD SUCCEEDED” signifi ca que não houve nenhum erro.

Em caso de ocorrência de erro, é necessário fazer duplo clique em cima da linha de erro, na janela “Output”, que

automaticamente é mudada a janela, e o cursor será posicionado na linha do programa que contém o erro.

www.mecatronicadegaragem.blogspot.com

Page 249: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 249

Simulador

O simulador faz parte do ambiente do MPLAB, e que dá uma maior perspectiva do funcionamento do micro-

controlador. Uma simulação é uma tentativa de imitar uma hipotética situação da vida real, para que possa ser

estudada e compreender como funcionar.

É, também, através do simulador que se faz a monitorização das variaveis, registos e estado dos pinos das

portas. Em programas complexos que usam Temporizadores, diferentes condições e pedidos, especialmente

matemáticas, o simulador pode ser de grande ajuda.

Tal como o microcontrolador, o simulador executa as instruções uma-a-uma, linha-por-linha, e faz o refres-

camento constante do estado de todos os registos. Desta maneira, o programador simplesmente monitoriza a

execução do programa.

www.mecatronicadegaragem.blogspot.com

Page 250: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 250

No fi m de escrever um programa, o programador deverá primeiro testá-lo no simulador, antes de o usar no

ambiente real.

O simulador é activado clicando em DEBUGGER > SELECT TOOL > MPLAB SIM, como ilustra a fi gura.

Como resultado, vários ícones do simulador aparecem. O seu signifi cado é o seguinte:

Inicia a execução do programa à velocidade máxima. O simulador executa o programa à velo-

cidade máxima, até ser parado clicando no ícone abaixo.

Faz pausa à execução do programa. O programa pode continuar passo-a-passo, ou à velocid-

ade máxima outra vez.

Inicia a execução do programa à velocidade confi gurada. A velocidade de execução é ajustada

no menú Debugger > Settings > Animation > Realtime Updates.

Inicia a execução do programa passo-a-passo. As instruções são executadas uma depois da

outra. Clicando no ícone, possibilita a entrada nas subrotinas.

Este ícone tem a mesma função do anterior, excepto que dá a possibilidade de saltar as sub-

rotinas.

Faz Reset ao microcontrolador. Clicando neste ícone, o Contador de Programa é posicionado

no início do programa, e a simulação pode iniciar.

www.mecatronicadegaragem.blogspot.com

Page 251: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 251

Como no ambiente real, a primeira coisa a ser feita é o RESET ao microcontrolador, usando a opção DEBUG-

GER > RESET, ou clicando no ícone respectivo. Como consequência, uma linha verde é posicionada no início

do programa, e o Contador de Programa PCL é limpo para zero. Ver imagem abaixo com os SFR’s.

Aparte dos SFR’s, também se pode ver os Registos normais. Clicando em VIEW > FILE REGISTERS, uma

janela onde estes estão, vai aparecer.

Se o programa tem variaveis próprias, é também bom poder ver o seu valor. Clicando em VIEW > WATCH,

aparece uma janela onde podem ser acrescentadas estas variaveis.

www.mecatronicadegaragem.blogspot.com

Page 252: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Como Programar um Microcontrolador

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 252

Após todas as variaveis e registos de interesse estarem disponiveis, na área do simulador, o processo é simples.

A próxima instrução pode ser passo-a-passo, ou outro tipo. As instruções passo-a-passo podem ser executa-

das, também, através da tecla <F7> no teclado. Normalmente, todas as funções importantes, têem já teclas

atribuidas.

www.mecatronicadegaragem.blogspot.com

Page 253: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Bibliografia

antónio sérgio senawww.senaeng.com : : projectos e soluções em electrónica+351.967033209 253

Bibliografi a

Microchip: PIC16F886. www.microchip.com

www.microchipc.com

Iovine, John. PIC Microcontroller Project Book, 2000

Microchip. PICmicro - Introduction to Programming in Assembler for PIC16 Products, 701 PIC. Mi-crochip Masters, 2003

Predko, Mike. PICmicro microcontroller Pocket Reference. 2001

MikroElektronika: http://www.mikroe.com/en/

Stevens, Fred. Getting Started with PIC microcontrollers, 1997

Katzen, Sid. The Quintessential PIC Microcontroller, 2000

www.mecatronicadegaragem.blogspot.com

Page 254: Livro Microcontroladores PIC - Antonio Sergio Sena

microcontroladores PIC Introdução

antónio sérgio senawww.senaeng.com : : soluções em electrónica e microcontroladores+351.967033209 254

antónio sérgio sena

www.senaeng.com : : soluções em electrónica+351.967033209

CONTACTOS

António Sérgio Sena, Eng.

[email protected]

www.senaeng.com :: projectos e soluções em electrónica

[email protected]

+351.967033209+351.236215256 (fax)

www.mecatronicadegaragem.blogspot.com