Você está na página 1de 109

APOSTILA DE

MICROCONTROLADORES

FATEC TATUÍ

Curso Eletrônica Modalidade


Automação Industrial

(Vers ã o e m com pos içã o)

5º Semestre
Elaboradores:

Orlando Homen de Mello (Prof. )

Andres sa Macedo R osa (Estagi ária Tecnol ogia)


1 FATEC TATUÍ
INTRODUÇÃO

Esta apostila foi desenvolvida para auxiliar os alunos da Faculdade


de Tecnologia de Tatuí na disciplina de Microcontroladores do 5º
semestre do curso de Eletrônica – Automação Industrial.

Pretende fornecer aos alunos os conhecimentos básicos


necessários para iniciar as atividades de desenvolvimento de software de
controle para o microcontrolador PIC16F628A produzido pela em presa

Microchip.

O curso abordará apenas a linguagem Assembly cujo compilador já


vem incorporado ao Software MPLAB IDE. Sendo este uma suíte de
desenvolvimento fornecido gratuitamente pela Microchip.

Como pré-requisito é aconselhável que o aluno tenha conhecimento


de eletrônica digital e noções de funcionam ento de microprocessadores.

A estratégia didática desta apostila é proporcionar os conceitos


teóricos e em seguida aplicá-los nos exercícios práticos.

Os exercícios ou exemplos práticos são orientados ao Hardware


didático, o qual foi elaborado para atender todas as propostas do curso.

2 FATEC TATUÍ
CONCEITOS BÁSICOS
Para a programação de microcontroladores é necessário ter o
conhecimento de duas outras bases numéricas além da decimal, a base
binária e a base hexadecimal.

SISTEM A NUMÉRICO BINÁRIO (base 2)

L EI D E F O R M AÇ Ã O N U M É R IC A
n-1 n-2 n-3 0 -1 -2
N = an .b + an-1 .b + an-2 .b +…+a1 .b , a1 .b + a2 .b +…+
-m
am-1 .b

Onde:

N = número

n = quantidade de algarismo - parte inteira

m = quantidade de algarismo - parte fracionária

Exemplo:

1) Determinar o valor numérico binário (1101)b

Solução:

n = 4 → algarismos inteiros e b=2 (base)

Então:

N = 1.24-1 + 1.24-2 + 0.24-3 + 1.24-4


3 2 1 0
N = 1.2 + 1.2 + 0.2 + 1.2

N = 1.8 + 1.4 + 0.2 + 1.1

N = 8 + 4 + 0 + 1 = 13 (decimal)

2) Idem para o número binário (110,11)b

Solução:

m = 2 n = 3 b=2

N = 1.23-1 + 1.23-2 + 0.23-3 + 1.2-1 + 1.2-2

N = 1 .4 + 1. 2 + 0 + 1 . 0,5 + 1. 0,125

N = 6, 625 (decimal)

3 FATEC TATUÍ
C ON VERSÃ O D ECIMAL P AR A BIN ÁR IO

• Método Divisões Sucessivas:

Ex: (135)d = (?)b

Portanto, (135)10 = (10000111)2

S I S T E M A N U M É R I C O H E X A D E C I M AL ( b a s e 1 6 )

Binário Hexadecimal Decimal


0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
Tabela1- Números binários, hexadecimais e decimais.

Principal propriedade:

 Em relação ao binário, podemos relacionar 1


algarismo hexadecimal a 4 algarismos (bits) do sistema
binário.

Ex:

(3A)h =(00111010)b

3 A

Obs.: Este fato facilita a conversão direta entre os sistemas


hexadecimal e binário.

4 FATEC TATUÍ
O PER AÇÕ ES AR ITM ÉTIC AS C OM NÚ MER OS B INÁ RIOS

S O M A ( AD I Ç Ã O )

Ex: 101
Operandos Result. Carry
+11
A B R C
0 0 0 0 1000 → Resultado
0 1 1 0 Carry → C = 1
1 0 1 0
1 1 0 1

SU BTR AÇÃ O  Por complemento de dois:

 Complemento de um número:

Complementar o número (1011)b

1011 = 0100 + 1 = 0101

Ex.:

1) Determinar a subtração A-B:

A = (1110)b e B = (1010)b

R = A-B = A + /B

B = 1010 = 0101 + 1 => B = 0110

Então: 1110

+ 0110

10100

Carry → C = 1 → Resultado positivo

Portanto, R = (0100)b

2) Idem para:

A = (1010)b e B = (1110)b

R = A-B → R = A + B

/B = 0001 + 1 → /B = 0010

Então: 1010

+ 0010

01100

Carry → C = 0 → Resultado ne gat ivo,


deve-se complementar o número.

R = -1100 = -(0011 + 1) = - 0100

5 FATEC TATUÍ
M U L T I P L I C AÇ Ã O E D I V I S ÃO P EL A B AS E

A multiplicação e divisão pela base ou múltiplos da base


binária pode ser feita através de deslocamento (rotação) à esquerda ou
direita respectivamente.

Obs.: O processador alvo de nosso estudo possui as instruções de


rotação de um registro, mas não possui instrução de multiplicação e
divisão, portanto estas funções devem ser implementadas pelo programa.

F U N Ç Õ E S E P O R T AS L Ó G IC AS

• “NÃO” ou “NOT”→ negação da condição ou estado

Tabela - Verdade Porta Lógica Função

A S
0 1
S = A
1 0

• “E” ou “AND” → dependência

Tabela – Verdade Porta Lógica Função

A B S
0 0 0
0 1 0 S = A.B
1 0 0
1 1 1

6 FATEC TATUÍ
• “OU” ou “OR” → independência

Tabela – Verdade Porta Lógica Função

A B S
0 0 0
S = A+B
0 1 1
1 0 1
1 1 1

• “XOR” → ou exclusivo

Tabela – Verdade Porta Lógica Função

A B S
0 0 0
0 1 1
1 0 1 S = A B
1 1 0

Á LGEB R A B OO LE AN A

Postulados

A . 1 = A A + 1 = 1
A . 0 = 0 A + 0 = A
A . /A = 0 A + /A = 1
A 1 = /A

7 FATEC TATUÍ
L Ó G I C A D E P R O G R AM AÇ Ã O
LÓGIC A D E PROGRAM A

A lógica de programa é necessária para o desenvolvimento de


sistemas e programas, ela permite definir a sequência lógica para o
desenvolvimento. Ou seja, é a técnica de encadear pensamentos para
atingir determinado objetivo ou solução de um problema. Estes
pensamentos podem ser descritos como uma sequência de instruções.

ESTR UTUR AÇÃ O DAS ID EI AS

Para o desenvolvimento de programas, é necessário saber passo a


passo o que se deseja fazer. Após isso, transforme o objetivo em
“instruções” que serão interpretadas pelo processador, de forma a
conseguir um programa que resolva a “situação problema”. Em
informática, instrução é a informação que indica ao processador uma ação
a executar, ou seja, é uma linha do programa.

Para criar um programa, é preciso ordenar as idéias (instruções) de


forma lógica e sequencial, segundo o objetivo a ser alcançado, pois
somente dessa forma o objetivo será alcançado de forma correta.

FL UXOGR AM A

O fluxograma é a forma padronizada e eficaz para representar os


passos lógicos de um determinado processamento.

Com o fluxograma é possível definir uma sequência de símbolos,


com significado bem definido, portanto, sua principal função é a de
facilitar visualização dos passos lógicos. A tabela 2 mostra os principais
símbolos utilizados num fluxograma:

SÍMBOLOS FUNÇÃO
Processamento em
processo geral.
Ex.: cálculo de dois
números

decisão Indica um decisão a


ser tomada.

desvio Permite o desvio


para um ponto qualquer do
programa.

início Indica o começo do


bloco.
Entrada/saída Operação de entrada
e saída de dados.
Ex.:Leitura e gravação de
arquivo.
Entrada manual
Indica entrada de
dados através do teclado
Tabela 2- Símbolos do fluxograma

8 FATEC TATUÍ
O M IC R O C O N T R O L AD O R ( M C C ) E O M IC R O PR O C E S S AD O R ( M C P)

O microcontrolador (figura 1b) é um C.I. que contém um microprocessador


(figura 1a) e diversos periféricos. Comumente, temos os seguintes periféricos:

• Memórias de programa e dados;

• Timers/Counters;

• USART, I²C, USB, CAN, SPI;

• Conversores A/D e D/A;

• Comparadores

Ainda o MCC difere do MCP pela maior capacidade de corrente dos


pinos de I/O, tipicamente tem corrente suficiente para acender leds.

M I C R O P R O C E S S AD O R

Figura 1a: Microprocessador

M I C R O C O N T R O L AD O R

Figura1b: Microcontrolador

9 FATEC TATUÍ
V AN T A G E N S D O M C C E M R E L A Ç Ã O A O M C P

• Menor custo de projeto

• Menor quantidade de periférico

• Menor custo ao produto

• Maior confiabilidade

• Manutenção rápida

APLIC AÇ ÕES TÍPIC AS

Domésticas
• Controle de Impressoras

• Ajuste de vídeo

• Máquinas de lavar

• celulares

Industriais

• CNC

• CLP

• Inversores

• Etc.

A R Q U I T E T U R AS H AR V A R D x V O N - N E U M AN N
São tipos de estruturas internas de máquinas, ou seja, como suas
partes internas se interligam.

Tradicionalmente, os MCCs utilizam a arquitetura Von-Neumann,


que se caracteriza pela disponibilidade de uma única memória principal,
na qual se armazena dados e instruções, figura 2a. Estes trafegam por um
único barramento interno, geralmente de 8 bits.

Já a arquitetura interna dos PICs é do tipo Harvard, que dispõe de


memórias de dados e de programas e cada memória possui seu respectivo
barramento, figura 2b. Assim, esta arquitetura tem o processamento mais
rápido, pois no mesmo instante em que uma instrução está sendo
executada, a próxima instrução pode ser buscada na memória de
programa. Neste caso, o barramento de dados é sempre de 8 bits e o de
instruções pode ser de 12, 14 ou 16 bits, dependendo do MCC.

10 FATE C TAT UÍ
Na arquitetura Harvard como o barramento de instrução é maior do
que 8 bits, o OPCODE (OPeration CODE) da instrução já inclui o dado e o
local onde ele vai operar (quando necessário)(figura 14) , o que significa
que apenas uma posição de memória é utilizada por instrução,
economizando assim muita memória de programa. Desta forma, dentro da
palavra do OPCODE, que pode ser de 12, 14 ou 16 bits, não sobra muito
espaço para o código da instrução propriamente dito, por isso os PICs
utilizam o código RISC.

VO N- NEU M AN N

8bits
Memória de
CPU Dados/Inst
Programa e

Endereços Dados

Figura 2a: Arquitetura Von-Neumann

H ARV ARD

8bits 12,14,16 bits


Memória
Memória Dados Instruções
de
de Dados Programa
Ender eços
CPU Endereços

Figura 2b: Arquitetura Harvard

11 FATE C TAT UÍ
TIPOS DE MEMÓRIA DO MCC

MEMÓR IA D E PR OGR AM A M E M Ó R I A D E D AD O S

1. ROM
1. R AM
2. PROM
2. EEPRO
3. EPROM

4. FL ASH

Figura 03- Esquema dos Tipos de Memórias

C AR AC T E R Í S T I C AS D AS M E M Ó R I AS

M E M Ó R I AS D E PR O G R AM A → a l o c a m o s c ó d i g o s o u i n s t r u ç õ e s
para o processador executar.

1. ROM (Read Only Memory)

Memória gravada na fabricação do chip e indicada nas aplicações


de larga escala de produção devido ao baixo custo em relação as demais.

2. PROM (Programmable Read Only Memory)

Memória que pode ser gravada pelo usuário apenas uma vez.
Nos microcontroladores da Microchip que utilizam este tipo de memória
tem a letra C incorporada no código comercial.

Exemplos: PIC16C54, PIC12C509 e outros.

Obs: Os dispositivos com essas características também são


denominados de OTP (Only Time Programable).

3. EPROM (Erase Programmable Read Only Memory)

Memória pode ser apagada e reprogramada pelo usuário. Os


MCCs que utilizam esse tipo de memória têm em seu encapsulamento
uma janela transparente para o apagamento por radiação ultra-violeta.

4. FL ASH

Memória apagável eletricamente sendo esta a mais utilizada


atualmente nos MCCs.

12 FATE C TAT UÍ
M E M Ó R I AS D E D AD O S → u t i l i za d a n o a r m a ze n a m e n t o d e d a d o s o u
variáveis de um sistema.

1 . R AM ( Ra ndom Acc es s Memor y)

Memória da classe volátil e nos MCCs a RAM é do tipo estática, e


ainda é denominada de registradores de uso geral.

2. EEPROM (Electrical Erasable Programmable Read


Only Memory)

Memória não volátil utilizada no armazenamento de dados.


Comumente o MCC contém uma porção internamente, e quando
necessita-se maior quantidade desta memória pode-se utilizar de
EEPROM externamente. As externas mais utilizadas são as de
barramento serial (I²C).

13 FATE C TAT UÍ
A CPU GENÉRICA DO MCC

• OPERAÇÕES LÓGICAS
1. ULA
• OPERAÇÕES ARITM ÉTICAS

• SETAR E RESET AR BITS

• RISC

TIPOS
CPU 2. CÓDIGO DE INSTRUÇÃO • CISC

• SISC

• USO G ERAL
3 . R E G I S T R AD O R E S
• FINALIDADES ESPECÍFICAS (SFRs)

Figura 04- Componentes da CPU

CPU (Central Processing Unit) é responsável pelo gerenciamento de


todo o sistema e execução dos programas. Composta por três módulos:
ULA, código de instrução e registradores.

1. UL A ( Un id ade Lógica e Arit mética)

Módulo responsável pelos cálculos matemáticos e manipulação de


dados durante a execução de um programa. Executa operações lógicas e
aritméticas, seta bit, reseta bit, testa bit e rotaciona.

2. CONJUNTO DE INSTRUÇÕES RISC, CISC e SISC

São classes de CPU em relação ao conjunto de instruções.

RISC (Reduced Instruction Set Computer)

São CPUs com conjunto de instruções reduzidos, que possui cerca


de 35 instruções simples. Sendo necessárias várias linhas para executar
um comando, isso alonga o programa do usuário.

14 FATE C TAT UÍ
CISC (Complex Instruction Set Computer)

São CPUs com conjunto de instruções complexas. Estas são


sofisticadas e potentes, facilitando muito a programação ao usuário e
reduzem a quantidade necessária de memória de programa.

SISC (Specific Instruction Set Computer)

São CPUs com conjunto de instruções específicas, ou seja, é uma


classificação para CPUs dedicadas a aplicações bem específicas, e que
possuem instruções particulares da aplicação proposta.

3 . R E G I ST R AD O R E S

São endereços na memória. Podendo ser tanto de uso geral como


de finalidades específicas (SFRs). O primeiro armazena dados
temporários e o segundo são utilizados em tarefas predeterminadas.

Registrador Work (W)

Antigamente, conhecido por acumulador o registrador W é um


registrador de uso geral, ou seja, armazena e transfere dados temporários
de até 8 bits e trabalha em conjunto com a ULA, pois todas instruções
aritméticas e booleanas são feitas por ele. A seguir na figura 5, o
diagrama do registrador W.

INDF
TMR0
S TPACTLU S
FSR
PORTA
Outros
SFRs

GPRs
Registradores
de Uso Geral
( R AM)
W

Figura 5- Conceito do Registrador W

15 FATE C TAT UÍ
O PIC
PIC (Peripherical Interface Controler)

HISTÓRIA

Em 1965, a GI Microelectronics deu seus primeiros passos,


fabricando memórias EPROM e EEPROM. Desenhou no início dos anos 70
o MCC de 16 bits CP1600, que trabalhava bem, mas de forma ineficaz no
controle de portas I/O. Para resolver este problema, em 1975, a divisão
de microeletrônica, transformada mais tarde em Arizona Microchip
Technolog y, desenhou um chip destinado a controlar portas I/O. Nascia,
assim, o PIC, principal produto desta empresa. Com estrutura muito mais
simples que um processador, ele podia manejar as portas I/O com muita
facilidade, rapidez e eficiência.

Atualmente, um dos grandes fabricantes de MCCs PIC é a


Microchip, que tem sua principal fábrica em Chandler, Arizona, e em 1993
foi construída outra fábrica em Tempe, Arizona, que também conta com
centros de fabricação no Taiwan e na Tailândia. Em 2008, a Microchip
participou com 57% das vendas de MCCs da categoria de 8 bits.

F AMÍLI AS e D ESEM PEN HO DO PIC

É a família de MCCs que utilizam o código de instrução RISC, o que


permite que eles tenham um set de instrução reduzido. Os MCCs da
família PIC podem funcionar com frequências de até 40MHz. Eles são
divididos em quatro grupos, diferenciados pela capacidade de
armazenamento em cada localidade de sua memória de programa: 12, 14,
16 e 32 bits. A figura 6 a seguir, ilustra um gráfico da Funcionalidade x
Desempenho.

Figura 6- Gráfico Funcionalidade x Desempenho.

16 FATE C TAT UÍ
Uma das razões do sucesso do PIC é a base de sua utilização, ou
seja, quando se aprende a trabalhar com um modelo, fica fácil migrar
para outros modelos, já que todos têm uma estrutura parecida.

Cada tipo de MCC serve para um propósito, e cabe ao projetista


selecionar o melhor para o seu trabalho. Dentre os mais populares,
encontramos o 16F84, ainda fácil de obter, mas que está sendo
substituído pelo modelo 16F627 ou 16F628, por ter mais recursos e
preços aproximados. A diferença entre o PIC 16F627 e 16F 628 está na
quantidade de memória.

O bs.: O PIC1 6F 88 é similar a o 16F628 , por ém cont ém um A/D


internamente (10 bits).

17 FATE C TAT UÍ
O PIC 16F628A

Principais características:

• 16 pinos de I/O;

• Frequência de até 20MHz;

• Oscilador interno de 4MHz/37KHz;

• 2Kx14 bits de memória FLASH de programa;

• 224x8 bits de memória RAM para dados;

• 128x8 bits de memória EEPROM interna;

• Módulo TIMER0 (timer/contador 8 bits);

• Módulo TIMER1 (timer/contador 16 bits);

• Módulo TIMER2 (timer de 8 bits);

• Módulo CCP (modos Capture, Compare e PW M);

• Módulo de referência de tensão (16 passos);

• Dois comparadores analógicos com referência interna

programável de tensão;

• Um canal de comunicação serial-USART;

• Um watchdog timer;

• Capacidade de corrente de 25 mA por pino de I/O;

• 35 instruções;

• Dez fontes de interrupção independentes;

• Modo de funcionamento sleep;

• Tensão de operação entre 3 a 5v para as versões F, e

2 a 5v para as versões LF.

AR QU ITETUR A IN TER N A

A figura 7 mostra o diagrama em blocos da arquitetura interna do


PIC16F628A em que se destacam as memórias de programa, RAM e
EEPROM, a ULA, contador de programa e os periféricos presentes no
MCC.

18 FATE C TAT UÍ
Figura 7- Arquitetura Interna do PIC16F628A

19 FATE C TAT UÍ
P I N AG E M ( E n c a p s u la m e n to s P DI P e SO IC )

Pino Função Tipo Descrição


1 RA2/AN2/VREF Entrada/Saída PORTA bit 2/Entrada do
comparador analógico/
Saída da tensão de
referência
2 RA3/AN3/CMP1 Entrada/Saída PORTA bit 3/Entrada do
comparador
analógico/Saída
comparador 1.
3 RA4/T0CKI/CP2 Entrada/Saída PORTA bit 4/ Entrada
de clock externo do
timer 0/Saída
comparador 2.*Esse
pino possui saída com
dreno aberto*
4 RA5/MCLR/VPP Entrada PORTA bit 5/Reset
CPU/Tensão de
programação
5 VSS Alimentação Terra
6 RB0/INT Entrada/Saída PORTB bit 0/Entrada de
interrupção externa
7 RB1/RX/DT Entrada/Saída PORTB bit 1 /Recepção
USART (modo
assíncrono)/Dados
(modo síncrono)
8 RB2/TX/CK Entrada/Saída PORTB bit
2/Transmissão USART
(modo
assíncrono)/Clock
(modo síncrono)
9 RB3/CCP1 Entrada/Saída PORTB bit 3/Entrada ou
saída do módulo CCP
10 RB4/PGM Entrada/Saída PORTB bit 4/Entrada de
programação LVP*
11 RB5 Entrada/Saída PORTB bit 5
12 RB6/T1OSO/T1CKI/PGC Entrada/Saída PORTB bit 6/Entrada do
oscilador do
20 FATE C TAT UÍ
TMR1/Entrada de clock
do TM R1/Clock na
prog.ICSP*
13 RB7/T1OSI/PGD Entrada/Saída PORTB bit 7 / Entrada
do oscilador do TMR1/
Dados na prog. ICSP
14 VDD Alimentação Alimentação positiva (3
a 5v)
15 RA6/OSC2/CLKOUT Entrada/Saída PORTA bit 6/Entrada
para cristal
oscilador/Saída de
clock
16 RA7/OSC1/CLKIN Entrada/Saída PORTA bit 7/Entrada
para cristal
oscilador/Entrada de
clock externo
17 RA0/AN0 Entrada/Saída PORTA bit 0/Entrada do
comparador analógico
18 RA1/AN1 Entrada/Saída PORTA bit 1/Entrada do
comparador analógico
*LVP - Baixa voltagem de programação.
*Dreno aberto - Uma fonte de alimentação externa deve ser aplicada ao
pino.
*ICSP - Programação in-circuit.

C AR AC T E R Í S T I C AS E L É T R I C AS E O U T RAS

Temperatura de trabalho................................. -40°C até +125°C

Temperatura de armazenamento....................... -65°C até +150°C

Tensão de trabalho......................................... 3V a + 5,5V

Voltagem máxima no pino Vdd (em relação ao Vss)..-0,3V até + 6,5V

Voltagem máxima no pino MCLR (em relação ao Vss).........0,3V até

+14V

Voltagem máxima nos demais pinos (em relação ao Vss)..-0,3V até

(Vdd +0,3V)

Dissipação máxima de energia.........................................800mW

Corrente máxima de saída no pino Vss..............................300mA

Corrente máxima de entrada no pino Vdd...........................250mA

Corrente máxima de entrada de um pino (quando em Vss)......25mA

Corrente máxima de saída de um pino (quando em Vss).........25mA

Corrente máxima de entrada em PORTA+PORTB.................200mA

Corrente máxima de saída em PORTA+PORTB....................200mA

21 FATE C TAT UÍ
O SCIL AD OR ES

Toda a CPU é capaz de executar várias tarefas denominadas


instruções. A base de tempo utilizada pela CPU para executar cada
instrução é obtida a partir de um sinal de clock gerado por um circuito
oscilador, que geralmente é uma onda quadrada. Cada instrução que este
PIC executa consume quatro ciclos de clock e é denominado ciclo de
instrução.

O circuito oscilador do PIC16F628A pode funcionar em oito


diferentes modos de operação. A escolha do modo de operação é feita por
meio de três bits de configuração. A configuração pode ser efetuada de
duas maneiras, uma e a mais comum, é no programa-fonte por meio de
um a sintaxe própria, outra através do MPLAB conforme a figura 8 mostra
a existência de uma janela de configuração do modo de operação do
oscilador.

Figura 8- Janela de configuração de bits do MPLAB

A seguir o significado de cada opção do modo de funcionamento do


oscilador, não esquecendo de que a opção escolhida tem de estar em
sintonia com hardware utilizado.

 RC:CLOCK RC externo com saída de clock


no pino RA6

 RC:I/O RC externo sem saída de clock


(RA6 disponível como I/O)

 INTOSC:CLKOUT Oscilador interno com saída de clock


no pino RA6

 INTOSC: I/O Oscilador interno sem saída de


clock (RA6 e RA7 disponíveis com I/O)

 EC Oscilador de clock externo

 HS Cristal/Ressonador cerâmico de
alta frequência (até 20MHz)

 XT Cristal/Ressonador de alta
frequência (até 4MHz)

22 FATE C TAT UÍ
 LP Cristal/Ressonador de baixas
frequências (até 200KHz)

A figura 9 mostra os 3 circuitos de clock.

Figura 9- Circuito de clock

CICLO DE MÁQUINA
O PIC divide a frequência gerada pelo oscilador principal (clock
externo) por quatro, dando origem ao um sinal de clock com frequência
quatro vezes menor.

Esse novo sinal de clock (clock externo/4), chamado de clock


interno ou ciclo de instrução é exibido na figura 11, é usado como a
referência para a execução das instruções. Assim, se o clock interno for
de 4MHz, o ciclo de instrução será de 1MHz e o seu período será de 1/1M
= 1µs.

Figura 10- Ciclo de máquina

Todas as instruções, com exceção daquelas que provocam desvio


no programa, como CALL e GOTO, são executadas em um ciclo de
instrução. As instruções que provocam desvio no programa são
executadas em dois ciclos. Isso torna o sistema muito mais rápido e só é
possível porque o barramento de dados é separado do barramento de
instruções de programa.

23 FATE C TAT UÍ
PIPELINE
O processo “pipelining” é uma técnica de segmentação que permite
ao MCC fazer a busca de uma instrução num determinado ciclo de
máquina e realizar a sua decodificação e execução no ciclo seguinte.
Considera-se que cada instrução é armada e executada num ciclo de
máquina. Contudo, se uma instrução provocar uma mudança no conteúdo
do contador do programa (PC), e caso ele não aponte para o endereço
seguinte na memória de programa, mas sim para outro (como acontece em
saltos ou chamadas de sub-rotinas), deve-se considerar que a execução
desta instrução demora dois ciclos de máquina, pois a instrução deve ser
processada de novo, mas desta vez a partir do endereço correto. Veja a
figura 11:

Figura11- Processo pipeline

T1-é feita a busca da instrução MOVLW 0x55.

T2-é executada a instrução MOVLW 0x55 e é feita a busca da


instrução MOVW F PORTB.

T3-é executada a instrução MO VW F PORTB e é feita a busca da


instrução CALL LED.

T4-é executado o salto (CALL) e é feita a busca da instrução


seguinte BSF PORTA, 0. Como esta instrução não é primeira instrução
após a entrada da sub-rotina LED, faz-se necessário uma nova leitura do
salto, gastando-se um ciclo.

T5-busca da instrução da sub-rotina.

T6-execução da primeira instrução da sub-rotina e busca da


próxima instrução.

24 FATE C TAT UÍ
M AP E AM E N T O D E ME M Ó R I A

O PIC 16F628A possui três memórias distintas. Uma memória Flash


utilizada para armazenar o programa que será executado pelo MCC, uma
memória RAM utilizada para o armazenamento de dados temporários e
uma memória EEPROM que é utilizada para armazenamento de dados que
não podem ser perdidos mesmo quando a energia for desligada.

Conforme mostra a tabela 3, a capacidade de armazenamento e os


tipos de memórias.

• d e MPE
r oMgÓ
r aRm
IAa S( F l a s h ) C A P A C I D A D E 2D0E4 8AxR1M4A Z E N A M E N T O

• d e D a d o s ( R AM ) 224x8

• EEPROM 128x8

Tabela 3- Tipos de Memórias e capacidade de armazenamento

M E M Ó R I A D E P R O G R AM A

0000h
Vetor de reset

Vetor de interrupção
0004h Tipo: 14 bits
Tamanho: 2048 palavras
Vetor de reset: 0000h
Vetor de inter.: 0004h

USO GERAL

07FFh

Figura 12- Memória de Programa

M E M Ó R I A D E D AD O S

A memória RAM é dividida em quatro bancos e é compartilhada


pelos registradores de uso geral (GPRs) e pelos registradores de
finalidades específicas (SFRs). A figura x ilustra o mapeamento de
memória RAM.

25 FATE C TAT UÍ
Tabela 3- Memória de Dados

Assim, quando quiser acessar algum registrador SFR que está no


banco 1, por exemplo, deve-se primeiro informar ao sistema que se
deseja trabalhar com esse banco.
26 FATE C TAT UÍ
Para tal, deve-se alterar o valor dos bits RP0 e RP1 no registrador
STATUS. A combinação desses dois bits (chaves) possibilita selecionar
um dos quatro bancos como o ativo no momento. A tabela a seguir
relaciona o valor desses bits com o banco selecionado.

Banco RP1 RP2


0 0 0
1 0 1
2 1 0
3 1 1

MEMÓRI A EEPROM
O acesso a esta memória é feito através dos registradores EEADR e
EEDATA. O primeiro armazena o endereço e o segundo armazena o dado.

A P I LH A O U S T AC K
A pilha é uma memória, independente da memória de dados e da
memória de programa, com estrutura LIFO (Last In First Out), onde o
último dado a entrar será o primeiro a sair. Possui oito níveis de
profundidade com armazenamento de 13 bits cada. Sua função é guardar
o valor do PC (Program Counter) quando ocorre um salto do programa
principal para o endereço de um subprograma a ser executado, fazendo
com que o MCC tenha total controle sobre as chamadas de rotinas. Seu
funcionamento é como o de buffer circular, onde o endereço da última
cha mad a é o pr imeiro a r etorn ar em uma cha mad a RETUR , R ETLW ou
RETIE. Como não há nenhuma flag indicando o transbordamento da pilha,
se houver uma chamada de rotina que ocupe mais de oito níveis a
primeira será sobrescrita, impossibilitando o retorno correto do programa.

Stack nível 8 Vetor RESET 0000h


Stack nível 7
.
.
.
Stack nível 1 Vetor INTERRUPÇÃO 0004h

13bits 0005h
CALL,RETURN Memória de
RE TFIE, RETLW programa
03FFh
Memória de
PC<12:0> programa
somente 16F628 07FFh

1FFh

27 FATE C TAT UÍ
FOR MATO D AS I NSTRUÇÕES
As instruções são formadas por um conjunto de bits que são
decodificadas pelo MCC, fazendo com que ele execute uma operação bem
definida. A quantidade de bits pode variar de uma para outra, dependendo
do MCC. No caso particular do PIC16F628A, todas as instruções possuem
o mesmo tamanho, 14 bits.

De maneira geral, as instruções são formadas por dois campos


distintos:

• OPCODE

• Operando

Os primeiros bits da instrução representam o OPCODE, os demais


formam o operando e podem conter dados (L), registrador (F) ou bit de um
registrador (B). Nem todas as instruções possuem operando, como no
caso da instrução RETFIE, cuja função é retornar de uma interrupção.

Figura 14-Formato Geral das Instruções em 14 bits

LI N G U AG E M AS S E M L Y
Na Família do PIC, cada instrução em assembly é armazenada no
MCC ocupando apenas uma posição da memória de programa (cada
posição tem 14 bits de largura). Esta palavra de 14 bits que foi
armazenada na memória é cham ada de OPCODE.

O s MCCs não reconhecem comandos tais como MOVW F, INCF, BSF,


etc., o que eles entendem são: 11010111011101, 11110001110011, etc..
Por outro lado os programadores não conseguem decorar e entender

28 FATE C TAT UÍ
esses montes de 1’s e 0’s, porém sabem o que é MOVW F, INCF, BSF, etc.
Para resolver o problema foi dado um nome a cada instrução, o
mnemônico da instrução, utilizando a linguagem Assembly que nada mais
é do que uma representação mais amigável do opcode.

A linguagem Assembly é composta por cinco elementos básicos:

• Label

• Mnemônico

• Operando

• Comentário

• Diretivas

Label

É utilizado para representar o início de um bloco de instruções que


executa uma tarefa definida dentro do programa. Deve começar na coluna
1 e pode ter um comprimento máximo de até 32 caracteres, tendo que
obrigatoriamente que começar com um caractere alfanumérico ou _
(underline).

É muito comum o uso do label em conjunto com as instruções que


provocam desvio no programa, como CALL e GOTO. Neste caso, o label
substitui o endereço para onde o programa será desviado.

Mnemônico

É a parte da sintaxe de uma instrução e específica qual tarefa será


executada. Assim, é aconselhável que todas as instruções sejam escritas
com letras maiúsculas para evitar problemas.

Operando

Pode ou não fazer parte da sintaxe de uma instrução. O operando


pode ser um registrador, uma constante, valor numérico ou variável.
Quando há mais de um operando na instrução, eles são separados por
vírgulas. E também devem ser escritos com letras maiúsculas.

Comentário

É um texto colocado após cada instrução para informar a tarefa que


está sendo executada, fazendo com que o programa fique mais legível e
fácil de entender. Todo o comentário deve ser precedido do ponto-e-
vírgula (;), tudo que esteja escrito a partir ponto-e-vírgula, até o final da
linha seja desprezado pelo montador.

Diretivas

São com andos que não fazem parte do set de instruções do MCC,
mas são reconhecidas pelo programa montador. Elas não são convertidas
diretamente em linguagem de máquina e sim, usadas para controlar o
Assembly. As mais utilizadas são: #DEFINE, #INCLUDE, ENDC, END e
outras.

29 FATE C TAT UÍ
TE R M O S U TI LI Z AD O S
Todas as instruções utilizam os seguintes dados para descrever a
sua nomenclatura:

Campo Descrição
F (file) Endereço de Registrador (0 a 127 )d.
W (work) Registrador Work (acumulador).
B ( bit) Endereço do bit dentro de um
registrador de 8 bits.
Seleção do destino da instrução:
d (destino) d = 0 (armazena o resultado em W)
d = 1 (armazena o resultado em f)
K Valor imediato (literal) de 8 bits ou label
label Nome alfanumérico.
T (teste) Testa um bit de um byte
se este é 0 ou 1.
Valor numérico no programa que
L (literal) pode ser decimal, binário, hexadecimal
ou código ASCII.
S (skip) Pula a próxima linha do programa
se uma determinada condição for
satisfeita.
S (set) Um bit de um byte será setado, ou seja,
forçado a assumir nível 1.
C (clear) Um bit de um byte será forçado
a assumir nível 0, ou seja, "clear" um bit.
Z (zero) resultado da operação for zero.

Tabela 4: Termos Utilizados

Todos os demais termos utilizados são específicos das ações


realizadas pelas instruções e são praticamente auto-explicativos. Abaixo,
eles aparecem conforme são utilizados:

ADD – soma.

AND – Lógica “E”.

CLR – Limpar, zerar (Clear).

COM – Complemento.

DEC – Decremento de uma unidade.

INC – Incremento de uma unidade.

IOR – Lógica “OU”.

MOV – Mover, transferir para algum lugar.


30 FATE C TAT UÍ
RL – Rotacionar 1 bit para a esquerda (rotation left).

RR - Rotacionar 1 bit para a direita (rotation right).

SUB – Subtração.

SW AP – Inversão entre as partes alta e baixa de registrador.

XOR – Lógica “OU exclusivo”.

A C O N S TR U Ç Ã O D O S N O ME S D AS I N S TR U Ç Õ ES
Com base nos termos apresentados até aqui, será muito mais fácil
entender o significado de uma instrução por meio do seu nome, pois ele é
composto pela junção desses termos.

Por exemplo, decrementar o valor de um determinado registrador. A


instrução que fará isso é composta pelos termos referentes à ação
desejada.

• Decrementar (DEC) um registrador (F) = DECF

Agora, partindo do nome de uma instrução para descobrir para que


ela serve:

• DECFSZ = Decrementa (DEC) o registrador (F) e


pula (S) se o resultado for zero (Z).

R E S U MO D AS I N S TR U Ç Õ E S
Todo MCC é capaz de executar um conjunto de tarefas denominadas
instruções. O PIC 16F628A é capaz de executar 35 instruções, que são
dividas em quadro grupos (Tabela5):

INSTR./TIPOS LITERAIS REGISTRADORES BIT CONTROLE

ANDWF, RLF, COMF, SWAPF,


ANDLW, NOP, CLRWD,
LÓGICAS XORWF, RRF, DECFSZ, BTFSC, BTFSS
XORLW, IORLW SLEEP
INCFSZ, IORWF
ADDLW, ADDWF, DECF, INCF, SUBWF,
ARITMÉTICAS não tem não tem
SUBLW CLRF, CLRW
CALL, GOTO,
DESVIOS MOVLW MOVWF não tem RETFIE, RETLW,
RETURN

DECISÃO (TESTE) não tem não tem BCF, BSF não tem

Tabela 5: Tipos de Instruções

À seguir a tabela 6 das instruções resumidas.

31 FATE C TAT UÍ
Tabela 6- Instruções resumidas

32 FATE C TAT UÍ
C O N JU N TO D E IN S TR U Ç Õ E S D E T AL H AD AS
ADDLW
Sintaxe ADDL W, k
Descrição Adiciona o conteúdo de k em W.
Bits de STATUS afetados C, DC, Z
Exemplo ADDLW 0x15

ADDWF
Sintaxe ADDWF f, d
Descrição Soma W com o registrador f;
d = 0: Resultado é armazenado em W.
d = 1: Resultado é armazenado no
registrador f.
Bits de STATUS afetados Z, C, DC
Exemplo ADDWF FSR, 0

ANDLW
Sintaxe ANDLW k
Descrição Operação AND lógico do conteúdo do
registrador W com o literal ‘k’. O resultado é
armazenado no registrador ‘f’.
Bits de STATUS afetados Z
Exemplo ANDLW 0x0F

ANDWF
Sintaxe ANDWF f, d
Descrição Operação AND lógico de W com o
registrador ‘f’:
d = 0: Resultado é armazenado no
registrador W.
d = 1: Resultado é armazenado no
registrador ‘f’.

Bits de STATUS afetados Z


Exemplo ANDWF FSR, 1

BCF
Sintaxe BCF f, b
Descrição Zera o bit (0 ≤ b ≤ 7) do registrador ‘f’.
Bits de STATUS afetados Nenhum
Exemplo BCF PORTB, 1

33 FATE C TAT UÍ
BSF
Sintaxe BSF f, b
Descrição Seta o bit (0 ≤ b ≤ 7) do registrador ‘f’.
Bits de STATUS afetados Nenhum
Exemplo BSF PORTA, 3

BTFSC
Sintaxe BTFSC f, b
Descrição Testa o bit do registrador ‘f’ e salta uma
instrução se bit é igual a zero.
Bits de STATUS afetados Nenhum
Exemplo BTFSC STATUS, C
GOTO Label_1
GOTO Label_2

BTFSS
Sintaxe BTFSS f, b
Descrição Testa o bit do registrador ‘f’ e salta uma
instrução se bit é igual a ‘1’.
Bits de STATUS afetados Nenhum
Exemplo BTFSS LED
GOTO Label_1
GOTO Label_2

CALL
Sintaxe CALL k
Descrição Salta para a Subrotina k. Primeiro, o endereço
de retorno (PC+1) é salvo na pilha, depois o valor de
‘k’ é carregado no Contador do Programa(PC),
fazendo com que o programa salte para o endereço k.
Bits de STATUS afetados Nenhum
Exemplo CALL TESTE

CLRF
Sintaxe CLRF f
Descrição O conteúdo do registrador ‘f’ é zerado e o bit Z
do STATUS é setado.
Bits de STATUS afetados Z
Exemplo CLRF PORTB

34 FATE C TAT UÍ
CLRW
Sintaxe CLRW
Descrição O conteúdo do registrador W é zerado e o bit Z
do STATUS é setado.
Bits de STATUS afetados Z
Exemplo CLRW

CLRWDT
Sintaxe CLRWDT
Descrição Zera o temporizador Watchdog (WDT), zera a
pré-escala do WDT e seta os bits /PD e /TO.
Bits de STATUS afetados /PD , /TO, Z
Exemplo CLRWDT

COMF
Sintaxe COMF f, d
Descrição Gera o complemento do registrador ‘f’, ou seja,
troca os ‘1’s por ‘0’s e vice-versa:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Bits de STATUS afetados Z
Exemplo COMF PORTB

DECF
Sintaxe DECF f, d
Descrição Decrementa o conteúdo do registrador ‘f’:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Bits de STATUS afetados Z
Exemplo DECF PORTB, 1

35 FATE C TAT UÍ
DECFSZ
Sintaxe DECFSZ f, d
Descrição Decrementa o conteúdo do registrador ‘f’:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Se o resultado for zero, então a próxima
instrução é descartada e um NOP é executado.
Bits de STATUS afetados Nenhum
Exemplo DECFSZ CONTADOR, 1
GOTO Label_1
GOTO Label_2

GOTO
Sintaxe GOTO k
Descrição Salta para o endereço k
Bits de STATUS afetados Nenhum
Exemplo GOTO Label_1

INCF
Sintaxe INCF f, d
Descrição Incrementa o conteúdo do registrador ‘f’:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Bits de STATUS afetados Z
Exemplo INCF CNT, F

INCFSZ
Sintaxe INCFSZ f, d
Descrição Incrementa o conteúdo do registrador ‘f’:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Se o resultado for zero, então a próxima
instrução é descartada e um NOP é executado.
Bits de STATUS afetados Nenhum
Exemplo INCFSZ CONTADOR, 1
GOTO Label_1
GOTO Label_2

36 FATE C TAT UÍ
IORLW
Sintaxe IORLW k
Descrição Executa OU lógico de W com k
Bits de STATUS afetados Z
Exemplo MOVLW b’ 00001011’
IORLW b’ 01100001’ ; W = 01101011

IORWF
Sintaxe IORWF f, d
Descrição Executa o OU lógico de W com o registrador ‘f’:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Bits de STATUS afetados Z
Exemplo IORWF REG, 0

MOVF
Sintaxe MOVF f, d
Descrição Move o valor do registrador ‘f’ para:
d = 0: O resultado é armazenado no registrador
W.
d = 1: O resultado é armazenado no registrador
‘f’.
Bits de STATUS afetados Z
Exemplo MOVF FSR, F

MOVLW
Sintaxe MOVLW k
Descrição Move o valor literal ‘k’ para o registrador W.
Bits de STATUS afetados Nenhum
Exemplo MOVLW 0x1C

MOVWF
Sintaxe MOVWF f
Descrição Move o conteúdo de W para o registrador ‘f’.
Bits de STATUS afetados Nenhum
Exemplo MOVWF OPTION

37 FATE C TAT UÍ
NOP
Sintaxe NOP
Descrição Não executa nenhuma operação, utilizado para
ajustar rotinas de temporização.
Bits de STATUS afetados Nenhum
Exemplo NOP

OPTION
Sintaxe OPTION
Descrição O conteúdo do registrador W é carregado no
registrador
Bits de STATUS afetados Nenhum
Exemplo MOVLW b’00100110’
OPTION

RETFIE
Sintaxe RETFIE
Descrição Carrega o Contador do Programa (PC) com o
valor do topo da pilha e seta o bit GIE.
Bits de STATUS afetados Nenhum
Exemplo RETFIE

RETLW
Sintaxe RETLW k
Descrição O registrador W é carregado com o valor literal
‘k’. O PC é carregado com o valor do topo da pilha (TOS
– Top of the Stack).
Bits de STATUS afetados Nenhum
Exemplo RETLW 0x0A

RETURN
Sintaxe RETURN
Descrição Carrega o PC com o valor do topo.
Bits de STATUS afetados Nenhum
Exemplo RETURN

38 FATE C TAT UÍ
RLF
Sintaxe RLF f, d
Descrição O valor do registrador ‘f’ é rotacionado um bit
para a esquerda através do Carry:
d = 0: O resultado é armazenado no
registrador W.
d = 1: O resultado é armazenado no
registrador ‘f’.
Bits de STATUS afetados C
Exemplo RLF REG1, 0

RRF
Sintaxe RRF f, d
Descrição O valor do registrador ‘f’ é rotacionado um bit
para a direita através do Carry:
d = 0: O resultado é armazenado no
registrador W.
d = 1: O resultado é armazenado no
registrador ‘f’.
Bits de STATUS afetados C
Exemplo RRF REG1, 0

SLEEP
Sintaxe SLEEP
Descrição Ativa modo Sleep, zera o bit /PD (Power –
Down) e seta o bit /TO (Time Out). O WDT e a pré-
escala são limpos. O processador é colocado no modo
Sleep com o oscilador parado.
Bits de STATUS afetados /TO, /PD
Exemplo SLEEP

SUBLW
Sintaxe SUBLW k
Descrição Subtrai (utilizando o método complemento de
dois) W do literal ‘k’ e armazena o resultado em W.
Bits de STATUS afetados C, DC, Z
Exemplo SUBLW 0x03

39 FATE C TAT UÍ
SUBWF
Sintaxe SUBWF f, d
Descrição Subtrai (utilizando o método complemento de
dois) W do registrador F.
d = 0: O resultado é armazenado no
registrador W.
d = 1: O resultado é armazenado no
registrador ‘f’.
Bits de STATUS afetados C, DC, Z
Exemplo SUBWF REG, 1

SWAPF
Sintaxe SWAPF f, d
Descrição O nibble mais significativo e o menos
significativo do registrador ‘f’ são trocados pelo outro.
d = 0: O resultado é armazenado no
registrador W.
d = 1: O resultado é armazenado no
registrador ‘f’.
Bits de STATUS afetados Nenhum
Exemplo SWAPF CNT, 0

XORLW
Sintaxe XORLW k
Descrição Executa a operação lógica “OU Exclusivo” do
literal ‘k’ com o conteúdo de W. O resultado é
armazenado no registrador W.
Bits de STATUS afetados Z
Exemplo XORLW 0xAF

XORWF
Sintaxe XORWF f, d
Descrição Executa a operação lógica “OU Exclusivo”
entre o conteúdo de W e o registrador ‘f’:
d = 0: O resultado é armazenado no
registrador W.
d = 1: O resultado é armazenado no
registrador ‘f’.
Bits de STATUS afetados Z
Exemplo XORWF CONTADOR, 1

40 FATE C TAT UÍ
O U T R O S C O M AN D O S AC E I T O S P E L O MP L AB

EQU
Sintaxe label EQU k
Descrição Define um valor numérico para o label. Deve
ser um valor literal de 0 – 255d
Bits de STATUS afetados Nenhum
Exemplo VAR1 EQU 0x0A

MOVFW
Sintaxe MOVFW f
Descrição Move o conteúdo do registrador ‘f’ para
W.
Bits de STATUS afetados Z
Exemplo MOVFW PORTA

Sintaxe
Descrição
Bits de STATUS afetados
Exemplo

Sintaxe
Descrição
Bits de STATUS afetados
Exemplo

41 FATE C TAT UÍ
R E G I S T R A D O R E S C O M F I N A L I D AD E S E S P E C I A I S ( S F R S )

Para montar um programa, é preciso configurar alguns registradores


para que o MCC funcione de forma correta. Veja a seguir algumas
informações encontradas na descrição de um registrador.

R – bit de leitura

W – bit de escrita

S – só pode ser setado

U – não implementado, lido com 0

-n (0 ou 1) – valor assumido no Power-on Reset (POR)

-x – valor desconhecido no (POR)

-q – depende da condição

Os SFRs são registradores utilizados em tarefas predeterminadas.


Veja a seguir a função de cada bit dos SFRs mais utilizados em
aplicações com o PIC 16F628A:

Registradores SFRs
FUNÇÕES TIPOS
STATUS, PCON, OPTION,
Gerais INTCON, PIR1, PIE1, PCL e
PCLATH
Portas TRIS e PORTS
Contadores TIMER0, TIMER1 e TIMER2
EEADR, EEDATA, EECON1 e
EEPROM
EECON2
Módulo CCP CCP1CON, CCPR1H e CCPR1L
Módulo Comparador CMCON
Módulo Voltagem de Referência VRCON
TXSTA, RCSTA, SPBRG, TXREG e
Módulo USART
RECREG
Endereçamento Indireto FSR e INDF

G E R AI S
1) ST ATU S

Provavelmente as funções mais utilizadas do registrador STATUS


estão relacionadas às operações matemáticas, pois ele indica os estouros
de registradores (C-Carry e DC- Digit Carry) e resultados iguais a zero
(Z). É bom observar que, no caso da subtração, o Carry trabalha como a
lógica invertida.

Além de outras funções como conter o estado de RESET (TO, PD) e


os bits para a seleção do banco de memória (IRP, RP1, RP0).

42 FATE C TAT UÍ
Registrador: STATUS Endereços: 03h, 83h, 103h, 183h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R R R/W R/W R/W
IRP PR1 RP0 /TO /PD Z DC C
Condição em Power-On Reset (POR)
0 0 0 1 1 X X X

IRP: Seletor de banco de memória de dados usado para


endereçamento indireto:

0 = Banco 0 e 1 (00h – FFh).

1 = Banco 2 e 3 (100h – 1FFh).

RP1 e RP0: Seletor de banco de memória de dados usado para


endereçamento indireto:

00 = Banco 0 (00h – 7Fh).

01 = Banco 1 (80h – FFh).

10 = Banco 2 (100h – 17Fh).

11 = Banco 3 (180h – 1FFh).

/TO: Indicador de Time-out:

0 = Indica que ocorreu estouro do W atchDog Timer (W DT).

1 = Indica que ocorreu um power-up ou foram executadas as


instr uções CLRW DT ou SLEEP.

/PD: Indicação Power-down:

0 = Indica que ocorreu a instrução SLEEP foi executada.

1 = Indica que ocorreu um power-up ou foi executada a instrução


CLRW DT.

Z: Indicação de Zero:

0 = Indica que o resultado da última operação (lógica ou


aritmética) não resultou em zero.

1 = Indica que o resultado da última operação (lógica ou


aritmética) resultou em zero.

DC: Digit Carry/borrow:

0 = A última operação da ULA não ocasionou um estouro de


dígito.

1 = A última operação da ULA ocasionou um estouro (carry)


entre o bit 3 e 4, isto é, o resultado ultrapassou os 4 bits menos
significativos. Utilizado quando se trabalha com números de 4 bits.

C: Carry/borrow:

0 = A última operação da ULA não ocasionou um estouro (carry).

1 = A últim a operação da ULA ocasionou um estouro ( carry) no bit


mais significativo, isto é, o resultado ultrapassou os 8 bits disponíveis.
43 FATE C TAT UÍ
2) PCON

Este registrador contém as flags que permitem que seja feita a


diferenciação entre um power-on reset (POP), um brown-out reset (BOD),
um reset por watchdog (WDT) e um reset externo por MCLR.

Registrador: PCON Endereços: 8Eh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U U U U R/W U R/W R/W
* * * * OSCF * /POR /BOR
Condição em Power-On Reset (POR)
0 0 0 0 1 0 0 X

OSCF: Frequência do oscilador interno:

0 = 37 KHz.

1 = 1 MHz.

/POR: Indicador de Power-On Reset (energização):

0 = Ocorreu um Power-On Reset.

1 = Não ocorreu um Power-On Reset.

/BOR: Indicação de Brown-Out Reset (queda de energia):

0 = Não ocorreu um Brown-Out Reset.

1 = Ocorreu um Brown-Out Reset.

3) OPTION

Este registrador serve para configurar uma série de opções para a


operação do MCC, tais como: habilitação dos pull-ups do PORTB,
configurações do prescaler, configurações do TMR0 e seleção da borda
para a interrupção externa.

Apesar deste, registrador receber o nome Option, ele será


referenciado pelo nome OPTION_REG, pois os PICs mais antigos
possuíam uma instrução chamada OPTION.

Registrador:OPTION_REG Endereços: 81h e 181h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R R R/W R/W R/W
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Condição em Power-On Reset (POR)
1 1 1 1 1 1 1 1

/RBPU: Habilita pull-ups internos para a PORTB:

0 = Pull-ups habilitados para todos os pinos do PORTB


configurados como saída.

1 = Pull-ups desabilitados.

INTEDG: Configuração da borda que gerará a interrupção externa


no RB0:

0 = A interrupção ocorrerá na borda de descida.

44 FATE C TAT UÍ
1 = A interrupção ocorrerá na borda de subida.

T0CS: Configuração do incremento do TMR0:

0 = TMR0 será incrementado internamente pelo clock da máquina.

1 = TMR0 será incrementado externamente pela mudança no pino


RA4/T0CK1.

T0SE: Configuração da borda que incrementará o TMR0 no pino


RA4/T0CK1, quando T0CS=1:

0 = O incremento ocorrerá na borda de subida de RA4/T0CK1.

1 = O incremento ocorrerá na borda de descida de RA4/T0CK1.

PSA: Configuração de aplicação do prescaler:

0 = O prescaler será aplicado ao TMR0.

1 = O prescaler será aplicado ao W DT.

PS2,PS1,PS0: Configuração de valor de prescaler:

PS 2/1/0 TMR0 W DT
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

4) INTCON, PIR1 e PIE1

Estes registradores servem para configurar e identificar todas as


interrupções existentes no PIC16F628A.

O registrador INTCON opera com as interrupções principais, que


são: Timer 0 (TMR0), Interrupção externa e Interrupção por mudança de
estado. Além disso, ele possui a chave geral de todas as interrupções
(GIE) e a chave geral para as interrupções de periféricos.

Registrador: INTCON Endereços: 0Bh, 8Bh, 10Bh e 18Bh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 X

GIE: Habilitação geral das interrupções (chave geral):

0 = Nenhuma interrupção será tratada.

1 = As interrupção habilitadas individualmente serão tratadas.

PEIE: Habilitação das interrupções de periféricos (chave de grupo


para periféricos):

45 FATE C TAT UÍ
0 = As interrupções de periféricos não serão tratadas.

1 = As interrupções de periféricos habilitadas individualmente


serão tratadas.

T0IE: Habilitação da interrupção de estouro de TMR0 (chave


individual):

0 = Interrupção de TMR0 desabilitada.

1 = Interrupção de TMR0 habilitada.

INTE: Habilitação da interrupção externa no pino RB0 (chave


individual):

0 = Interrupção externa desabilitada.

1 = Interrupção externa habilitada.

RBIE: Habilitação da interrupção por mudança de estado nos pinos


RB4 a RB7 (chave individual):

0 = Interrupção por mudança de estado desabilitada.

1 = Interrupção por mudança de estado habilitada.

T0IF: Identificação de estouro do TMR0:

0 = Não ocorreu estouro do TMR0.

1 = Ocorreu estouro do TMR0 (este bit deve ser limpo por


software).

INTF: Identificação da interrupção externa no pino RB0:

0 = Não ocorreu evento da interrupção.

1 = Ocorreu evento da interrupção (este bit deve ser limpo


por software).

RBIF: Identificação da interrupção por mudança de estado nos pinos


RB4 a RB7:

0 = Não ocorreu evento da interrupção.

1 = Ocorreu evento da interrupção (este bit deve ser limpo por


software).

Os registradores PIR1 e PIE1 são os responsáveis pelo


gerenciamento das interrupções de periféricos: EEPROM, Comparadores,
USART (recepção e transmissão), CCP, Timer1 (TMR1) e Timer2 (TMR2).

Registrador: PIE1 Endereços: 8Ch


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W U R/W R/W R/W
EEIE CMIE RCIE TXIE * CCP1IE TMR2IE TMR1IE
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

EEIE: Habilitação da interrupção de final de escrita na EEPROM


(chave individual):

46 FATE C TAT UÍ
0 = Interrupção da EEPROM desabilitada.

1 = Interrupção da EEPROM habilitada.

CMIE: Habilitação da interrupção do comparador (chave individual):

0 = Interrupção do comparador desabilitada.

1 = Interrupção do comparador habilitada.

RCIE: Habilitação da interrupção de recepção da USART (chave


individual):

0 = Interrupção de recepção da USART desabilitada.

1 = Interrupção de recepção da USART habilitada.

TXIE: Habilitação da interrupção de transmissão da USART (chave


individual):

0 = Interrupção de transmissão da USART desabilitada.

1 = Interrupção de transmissão da USART habilitada.

CCP1IE: Habilitação da interrupção do módulo CCP1 (chave


individual):

0 = Interrupção de CCP1 desabilitada.

1 = Interrupção de CCP1 habilitada.

TMR2IE: Habilitação da interrupção do Timer 2 (chave individual):

0 = Interrupção de Timer 2 desabilitada.

1 = Interrupção de Timer 2 habilitada.

TMR1IE: Habilitação da interrupção de estouro do Timer 1 (chave


individual):

0 = Interrupção de Timer 1 desabilitada.

1 = Interrupção de Timer 1 habilitada.

Registrador: PIR1 Endereços: 0Ch


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W U R/W R/W R/W
EEIF CMIF RCIF TXIF * CCP1IF TMR2IF TMR1IF
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

Errata:bits 4 e 5 =>somente leitura.

EEIF: Identificação da interrupção da EEPROM:

0 = Não ocorreu evento de final de escrita na EEPROM.

1 = Ocorreu evento de final de escrita na EEPROM.

CMIF: Identificação da interrupção do comparador:

0 = Comparador não identificou alteração nas entradas.


47 FATE C TAT UÍ
1 = Comparador identificou alguma alteração nas entradas.

RCIF: Identificação da interrupção de recepção da USART:

0 = Buffer de recepção da USART está vazio.

1 = Buffer de recepção da USART está cheio.

TXIF: Identificação da interrupção de transmissão da USART:

0 = Buffer de transmissão da USART está vazio.

1 = Buffer de transmissão da USART está cheio.

CCP1IF: Identificação da interrupção do módulo CCP1:

0 = Não ocorreu condição de interrupção no módulo CCP1.

1 = Ocorreu condição de interrupção no módulo CCP1.

TMR2IF: Identificação da interrupção de Timer 2:

0 = Não ocorreu evento da interrupção de Timer 2.

1 = Ocorreu evento da interrupção de Timer 2.

TMR1IF: Identificação da interrupção de estouro do Timer 1:

0 = Não ocorreu estouro do Timer 1.

1 = Ocorreu estouro do Timer 1.

5) P C L e P C L AT H

O PCL é um registrador que armazena os 8 bits menos significativos


do PC (Program Counter), o qual indica a próxima linha do programa que
será executada no momento. A cada ciclo de máquina, o PC é
automaticamente alterado, para que o programa seja executado
normalmente. Esse registrador também pode ser alterado pelo programa,
mas isso tem q ser feito com extremo cuidado, para que o sistema não se
perca e/ou trave.

Registrador: PCL Endereços: 02h, 82h, 102h e 182h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Parte baixa do PC
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

Registrador: PCLATH Endereços: 0Ah, 8Ah, 10Ah e 18Ah


Bit 7 Bit 6 Bit 5 Bit 4Bit 3 Bit 2 Bit 1 Bit 0
U U U R/W R/W R/W R/W R/W
Parte alta
Condição em Power-On Reset (POR)
* * * 0 0 0 0 0

48 FATE C TAT UÍ
P O R T AS
1) TRIS

Esses registradores servem para configurar os pinos das portas


como entrada ou saída. Quando é colocado “1”em um bit do TRIS, o pino
relacionado a ele é configurado como entrada. Para configurar o pino
como saída, deve-se escrever “0” no bit relacionado. Uma maneira prática
de memorizar essa regra é associar o “1” ao “I” de Input (entrada), e o “0”
ao “O” de Output (saída).

Para configurar o PORTB, deve ser utilizado o TRISB, e para


configurar o PO RTA, deve ser utilizado o TRISA.

Registrador: TRISA Endereços: 85h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R R/W R/W R/W R/W R/W
Ref.RA7 Ref.RA6 Ref.RA5 Ref.RA4 Ref.RA3 Ref.RA2 Ref.RA1 Ref.RA0
Condição em Power-On Reset (POR)
1 1 1 1 1 1 1 1

Registrador: TRISB Endereços: 86h e 186h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Ref.RB7 Ref.RB6 Ref.RB5 Ref.RB4 Ref.RB3 Ref.RB2 Ref.RB1 Ref.RB0
Condição em Power-On Reset (POR)
1 1 1 1 1 1 1 1

Obs.: Todos os pinos do PORTA e do PORTB, exceto o pino RB5,


são multiplexados com outras funções, como é demonstrado na página 18,
e a configuração efetuada pelos registradores TRIS só funciona
corretamente se o respectivo pino estiver configurado como I/O.

2) PORTS

Como já foi visto, o PIC16F628A possui duas portas: PORTA e


PORTB. O estado dessas portas é acessado diretamente em duas
posições distintas da memória. Quando um pino dessa porta é configurado
como entrada, ao ler-se o seu bit relacionado, encontra-se diretamente o
nível lógico aplicado a esse pino. Da mesma maneira, ao configurar um
pino de saída, podemos alterar o seu estado, escrevendo diretamente no
bit relacionado.

Registrador: PORTA Endereços: 05h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R R/W R/W R/W R/W R/W
RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
Condição em Power-On Reset (POR)
X X X X 0 0 0 0

Registrador:PORTB Endereços: 06h e 106h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Condição em Power-On Reset (POR)
X X X X X X X X

49 FATE C TAT UÍ
C O N T AD O R E S
1) TIMER0

O TMR0 é um contador de 8 bits que pode ser acessado diretamente


na memória, tanto para a leitura quanto para a escrita.

A diferença entre ele e os demais registradores é que seu


incremento é automático e pode ser feito pelo clock da máquina ou por um
sinal externo.

Obs.: O estouro deste contador pode gerar interrupção.

Registrador: TMR0 Endereços: 01h e 101h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Contador Timer 0 de 8 bits
Condição em Power-On Reset (POR)
X X X X X X X X

2) TIMER1

O TMR1 é um contador de 16 bits que também pode ser acessado


diretamente na memória, tanto para a leitura quanto para a escrita. No
entanto, devido ao seu tamanho, esse registrador é armazenado em dois
endereços: TMR1H (parte alta) e TMR1L (parte baixa).

Registrador: TMR1L Endereços: 0Eh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Contador Timer 1 de 16 bits - Parte baixa
Condição em Power-On Reset (POR)
X X X X X X X X

Registrador: TMR1H Endereços: 0Fh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Contador Timer 1 de 16 bits - Parte alta
Condição em Power-On Reset (POR)
X X X X X X X X

Além disso, o registrador T1CON é responsável pelas diversas


configurações relacionadas ao Timer1, tais como: habilitação, prescaler,
oscilador externo próprio, origem do incremento (interno ou externo) e
sincronismo de incremento.

Obs.: O estouro deste contador pode gerar interrupção. Esse


contador será utilizado também no módulo CCP.

Registrador: T1CON Endereços: 10h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U U R/W R/W R/W R/W R/W R/W
* * T1CKPS1 T1CKPS0 T1OSCEN /T1SYNC TMR1CS TMR1ON
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

T1CKPS1 e T1CKPS0: Ajuste do prescaler do Timer 1:

50 FATE C TAT UÍ
00 = prescaler de 1:1.

01 = prescaler de 1:2.

10 = prescaler de 1:4.

11 = prescaler de 1:8.

T1OSCEN: Habilitação do sistema de oscilação externa para os


pinos T1OSO e T1OSI:

0 = Oscilador desabilitado. Caso exista um cristal externo, o


sistema é desligado.

1 = Habilita o oscilador externo.

/T1SYNC: Controle do sincronismo interno. Quando TMR1CS = 0


este bit é ignorado:

0 = Sistema de sincronismo ligado.

1 = Sistema de sincronismo desligado (modo assíncrono).

TMR1CS: Seleção da origem do clock para Timer1:

0 = Clock interno (FOSC/4).

1 = Clock externo no pino T1OSO/T1CKI.

TMR1ON: Habilitação do Timer1:

0 = Timer1 desabilitado. Paralisa o contador do Timer1

1 = Timer1 habilitado

3) TIMER2

O TMR2 é outro contador de 8 bits que também pode ser


acessado diretamente na memória, tanto para leitura como para a
escrita. Além disso, o registrador T2CON é responsável pelas
diversas configurações relacionadas ao Timer 2, tais como:
habilitação, prescaler e protscaler. Para gerar uma interrupção, o
valor desse contador é comparado ao valor especificado em outro
registrador, o PR2, em vez de esperar o estouro do mesmo.
Registrador: T2CON Endereços: 12h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U U R/W R/W R/W R/W R/W R/W
* TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0: Ajuste de postcale:

0000 = postcaler de 1:1 1000 = postcaler de 1:9


0001 = postcaler de 1:2 1001 = postcaler de 1:10

51 FATE C TAT UÍ
0010 = postcaler de 1:3 1010 = postcaler de 1:11
0011 = postcaler de 1:4 1011 = postcaler de 1:12
0100 = postcaler de 1:5 1100 = postcaler de 1:13
0101 = postcaler de 1:6 1101 = postcaler de 1:14
0110 = postcaler de 1:7 1110 = postcaler de 1:15
0111 = postcaler de 1:8 1111 = postcaler de 1:16

TMR2CON: Habilitação do Timer 2:

0 = Timer 2 desabilitado. Paralisa o contador do Timer 2.

1 = Timer 2 habilitado.

T2CKPS1

T2CKPS0: Ajuste do prescaler:

00 = prescaler de 1:1

01 = prescaler de 1:4

1x = prescaler de 1:16 (x=irrelevante)

Registrador: TMR2 Endereços: 11h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Contador Timer 2 de 8 bits
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

Registrador: PR2 Endereços: 92h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Limite superior para a contagem do Timer 2
Condição em Power-On Reset (POR)
1 1 1 1 1 1 1 1

EEPROM

1 ) E E AD R e E E D AT A
O primeiro é o registrador onde será especificado o endereço para
a escrita ou leitura da EEPROM interna do PIC16F628A.

Registrador: EEADR Endereços: 9Bh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Endereço de leitura/escrita na EEPROM
Condição em Power-On Reset (POR)
X X X X X X X X

52 FATE C TAT UÍ
O EEDATA possui duas funções distintas: nas operações de escrita
da EEPRO M, ele deve ser preenchido com o dado a ser armazenado, já
nas operações de leitura, ele armazena o dado lido.

Registrador: EEDATA Endereços: 9Ah


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Registro de dado para a leitura/escrita na EEPROM
Condição em Power-On Reset (POR)
X X X X X X X X

2) EECON1 e EECON2
São registradores de operação da EEPROM. O EECON1 é
responsável pelas operações de leitura e escrita da EEPROM e detecção
de erro.

Registrador: EECON1 Endereços: 9Ch


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U U U U R/W R/W R/S R/S
* * * * WRERR WREN WR RD
Condição em Power-On Reset (POR)
* * * * X 0 0 0

W RERR: Identificação de erro durante a escrita na EEPROM:

0 = Não ocorreu erro, a escrita foi completada.

1 = Um erro ocorreu por uma escrita não terminada (um reset


pode ter ocorrido).

W REN: Habilitação de escrita na EEPROM (bit de segurança):

0 = Não habilita escrita na EEPROM.

1 = Habilita escrita na EEPROM.

W R: Ciclo de escrita na EEPROM:

0 = Esse bit será zerado pelo hardware quando o ciclo de escrita


terminar (não pode ser zerado por softw are).

1 = Inicia o ciclo de escrita (deve ser setado por software).

RS: Ciclo de leitura da EEPROM:

0 = Esse bit será zerado pelo hardware quando o ciclo de leitura


terminar (não pode ser zerado por software).

1 = Inicia o ciclo de leitura (deve ser setado por software).

O EECON2 não se tratada de um registrador verdadeiramente


implementado na memória. Ele só é utilizado durante a inicialização do
ciclo de escrita na EEPROM por uma questão de segurança, evitando
assim que a memória seja alterada acidentalmente.

Registrador: EECON2 Endereços: 9Dh


Registrador de proteção para a escrita na EEPROM (não é implementado de fato)
Condição em Power-On Reset (POR)
* * * * * * * *

53 FATE C TAT UÍ
MÓDULO CCP

1) CCP1CON, CCPR1H e CCPR1L


Através de módulo CCP é possível acessar três modos diferentes de
operações: Capture, Compare e PW M.

O registrador CCP1CON é responsável pela configuração desse


modo. Este módulo utiliza ainda o TMR1 como base de tempo e os
registradores complementares CCPR1H (parte alta) e CCPR1L (parte
baixa).

Registrador: CCP1CON Endereços: 17h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U U R/W R/W R/W R/W R/S R/S
* * CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

CCP1X e CCP1Y: Parte baixa do PW M de 10 bits. A par te alta fica


em CCPR1L. Válido somente quando em PW M.

CCP1M3, CCP1M2, CCP1M1, CCP1M0: Seleção do modo CCP1-


Compare/ Capture/ PW M:

0000 = Modo desligado.

0100 = Capture ligado para a borda de descida com prescaler


de 1:1.

0101 = Capture ligado para a borda de subida com prescaler


de 1:1.

0110 = Capture ligado para a borda de subida com prescaler


de 1:4.

0111 = Capture ligado para a borda de subida com prescaler


de 1:16.

1000 = Capture ligado. Pino de saída (RB3) será setado (1)


quando o compare ocorrer.

1001 = Capture ligado. Pino de saída (RB3) será zerado (0)


quando o compare ocorrer.

1010 = Capture ligado. Pino de saída (RB3) não será afetado.

1011 = Capture ligado. Pino de saída (RB3) não será afetado.


TMR1 será resetado.

1100 = PW M ligado.

1101 = PW M ligado.

1110 = PW M ligado.

1111 = PW M ligado.

54 FATE C TAT UÍ
Registrador: CCPR1L Endereços: 15h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/S R/S
Registrador de controle do CCP1 - Parte baixa
Condição em Power-On Reset (POR)
X X X X X X X X

Registrador: CCPR1H Endereços: 16h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/S R/S
Registrador de controle do CCP1 - Parte alta
Condição em Power-On Reset (POR)
X X X X X X X X

MÓDULO COMPAR AD OR
1) CMCON

Este registrador é utilizado para a configuração dos dois


comparadores internos existentes no PIC16F628A, possibilitando a
utilização de uma entre as oitos possibilidades de ligações elétricas
disponíveis. Neste registrador temos ainda a configuração de inversão
das duas saídas e a leitura dos estados dessas saídas.

Registrador: CMCON Endereços: 01Fh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R R R/W R/W R/W R/W R/W R/W
C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

C2OUT: Valor da saída do comparador 2:

Normal (C2INV=0):

0 = C2 VIN+ < C2 VIN-

1 = C2 VIN+ > C2 VIN-

Inversa (C2INV=0):

0 = C2 VIN+ > C2 VIN-

1 = C2 VIN+ < C2 VIN-

C1OUT: Valor da saída do comparador 1:

Normal (C1INV=0):

0 = C1 VIN+ < C1 VIN-

1 = C1 VIN+ > C1 VIN-

Inversa (C1INV=0):

0 = C1 VIN+ > C1 VIN-

1 = C1 VIN+ < C1 VIN-

C2INV: Tipo de saída do comparador 2:

55 FATE C TAT UÍ
0 = Normal.

1 = Inversa.

C1INV: Tipo de saída do comparador 1:

0 = Normal.

1 = Inversa.

CIS: Chave seletora de entrada do comparador:

Quando CM2:CM0 = 001

0 = RA0 conectado a C1 VIN-.

1 = RA3 conectado a C1 VIN-.

Quando CM2:CM0 = 010

0 = RA0 conectado a C1 VIN-.

RA1 conectado a C2 VIN-.

1 = RA3 conectado a C1 VIN-.

RA2 conectado a C2 VIN-.

CM2, CM1 e CM0: Configura a pinagem dos comparadores (modo de


operação):

CM ESQUEMA CM ESQUEMA

111
000

56 FATE C TAT UÍ
100 010

011 110

CM ESQUEMA CM ESQUEMA

001
101

MÓDULO VOLTAG EM DE REFERÊN CI A


1) VRCON

O registrador VRCON é utilizado para configurar o módulo de


voltagem de referência, que nada mais é do que uma saída analógica com
16 valores configuráveis por software. Por intermédio desse registrador é
possível habilitar/desabilitar este sistema e selecionar o valor da saída
malha R2R interna).

Registrador: VRCON Endereços: 9Fh


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W U R/W R/W R/W R/W
VREN VRON VRR * VR3 VR2 VR1 VR0
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

VREN: Energização do sistema de tensão de referência:

0 = Circuito de VREF desenergizado.

1 = Circuito de VREF energizado.

VRON: Habilitação da saída de VREF:

0 = Tensão de referência desligada.

57 FATE C TAT UÍ
1 = Tensão de referência ligada ao pino RA2.

VRR: Seleção do range de operação do sistema de VREF:

0 = Range baixo.

1 = Range alto.

VR3...VR0: Seleção do valor de tensão de VREF:

Se VRR = 1:

VREF = (VR/24) . VDD

Se VRR = 0:

VREF = ¼ . VDD + (VR/32) . VDD

M Ó D U LO U S AR T
1) TXSTA e RCSTA

Estes registradores configuram e monitoram todas as possibilidades


para a comunicação via módulo USART, um para a transmissão (TXSTA) e
outro para a recepção (RCSTA).

Registrador: TXSTA Endereços: 98h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W U R/W R R/W
CSRC TX9 TXEN SYNC * BRGH TRMT TX9D
Condição em Power-On Reset (POR)
0 0 0 0 0 0 1 0

CSRC: Seleção entre Master/Slave (somente modo Síncrono):

0 = Slave.

1 = Master.

TX9: Habilitação da comunicação em 9 bits para a transmissão:

0 = Transmissão em 8 bits.

1 = Transmissão em 9 bits.

TXEN: Habilitação da transmissão:

0 = Transmissão desabilitada.

1 = Transm issão habilitada. No modo assíncrono, a recepção


tem prioridade sobre este bit.

SYNC: Seleção entre modo Assíncrono/Síncrono:

0 = Assíncrono.

1 = Síncrono.

BRGH: Seleção para Baud Rate (somente modo Assíncrono):

0 = Baud Rate baixo.


58 FATE C TAT UÍ
1 = Baud Rate alto.

TRMT: Situação do registrador interno de transmissão (TSR):

0 = TSR cheio.

1 = TSR vazio.

TX9D: Valor a ser transmitido como 9º bit. Pode ser usado como
paridade ou endereçamento.

Registrador: RCSTA Endereços: 18h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R R R
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 X

SPEN: Habilitação da USART:

0 = USART desabilitada.

1 = USART habilitada.

RX9: Habilitação da comunicação em 9 bits para a recepção:

0 = Recepção em 8 bits.

1 = Recepção em 9 bits.

SREN: Habilitação da recepção unitária (somente para modo


Síncrono em Master):

0 = Recepção unitária desabilitada.

1 = Recepção unitária habilitada. Depois de receber um dado,


desliga-se automaticamente.

CREN: Habilitação da recepção contínua:

0 = Recepção contínua desabilitada.

1 = Recepção contínua habilitada.

ADDEN: Habilitação do sistema de endereçamento (somente modo


Assíncrono de 9 bits):

0 = Desabilita sistema de endereçamento.

1 = Habilita sistema de endereçamento.

FERR: Erro de Stop bit (somente modo Assíncrono):

0 = Não ocorreu erro. Stop bit = 1.

1 = Ocorreu um erro . Stop bit = 0 (deve ser atualizado lendo


o registrador RCREG e recebendo o próximo dado válido).

O ERR: Erro de muitos b ytes recebidos sem nenhuma leitura:

0 = Não houve problemas de estouro do limite.

59 FATE C TAT UÍ
1 = Estouro do limite de 3 bytes recebidos antes da leitura de
RCREG (para limpar deve-se zerar o bit CREN).

RX9D: Valor recebido no 9° bit. Pode ser usado como paridade ou


endereçamento.

2) TXREG e RCREG

São os buffers (acumuladores) para os dados recebidos (RCREG)


ou a serem enviados (TXREG).

Registrador: TXREG Endereços: 19h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Buffer para a transmissão de dados pela USART
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

Registrador: RCREG Endereços: 1Ah


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Buffer para a recepção de dados pela USART
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

3) SPBRG

Esse é o registrador responsável pela configuração do Baund


Raude.

Registrador: SPBRG Endereços: 99h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Ajuste do Baund Rate
Condição em Power-On Reset (POR)
0 0 0 0 0 0 0 0

ENDEREÇAMENTO INDIR ETO


1) FSR e O INDF

O FSR é um registrador em que pode ser escrito num outro


endereço de memória que será acessado indiretamente, como se ele fosse
um ponteiro.

Registrador: FSR Endereços: 04h, 84h, 104h e 184h


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Ponteiro para endereçamento indireto
Condição em Power-On Reset (POR)
X X X X X X X X

60 FATE C TAT UÍ
O INDF não é um registrador realmente verdadeiro, pois trata-se
somente de um espelho do endereço apontado pelo FSR.

Registrador: INDF Endereços: 00h, 80h, 100h e 180h


Valor apontado pelo FSR (endereçamento indireto - não é um registrador impementado)
Ponteiro para endereçamento indireto
Condição em Power-On Reset (POR)
X X X X X X X X

PROGRAM AÇÃO
Um programa escrito em linguagem assembler pode ser escrito em
qualquer PC utilizando-se qualquer processador de texto que possa gerar
arquivos ASCII (W ord, Notpad, etc). Um arquivo de texto que contenha um
programa em assembler é denominado de source ou código assembler.

Uma vez que o código assembler está preparado, é necessário um


programa para traduzir as instruções mnemônicas e todas as outras
formas convencionais com que se escreve o código em uma série de
números (o opcode) reconhecível diretamente pelo PIC. Este programa se
chama compilador assembler ou montador.

Na figura 15 está esquematizado o fluxograma das operações e


arquivos que deverão ser gerados para passar um código na linguagem
assembler para um PIC a ser programado.

61 FATE C TAT UÍ
Figura15- Fluxo da programação do PIC

C omo é possível obser var, além do código com extensão .ASM é


necessário fornecer ao compilador um segundo arquivo, produto da
Microchip, com extensão .INC que corresponde a uma biblioteca do tipo
do PIC que estamos utilizando. No nosso caso o arquivo deve ser o
P 1 6 F 6 2 8 A. I N C . E s t e c ó d i g o c o n t é m a l g u m a s d e f i n i çõ e s d a s q u a i s
depende o tipo de chip utilizado.

Durante a compilação do código, o compilador assembler gera uma


série de arquivos com nomes idênticos ao código original, mas com
extensões diferentes:

• .HEX é o arquivo que contém o código de operação em


formato hexadecimal que será enviado ao PIC via interface de
programação.

• .LST é um arquivo de texto na qual vem reportado por


inteiro o código assembler e a correspondente tradução em opcode.
Não é utilizável pela programação do PIC, mas é extremamente útil
para verificação de erros e do processo de compilação que foi feito.

• .ERR contém uma lista de erros de compilação que


mostra o número da linha do código na qual esta o erro no código
assembler.

Os arquivos .LST, .ERR são utilizados somente para controle da


compilação. Somente o arquivo .HEX será utilizado realmente para
programar o PIC.

O arquivo .HEX não é um arquivo no formato binário e não reflete


diretamente o conteúdo que deverá ter a EEPROM do PIC. Mas este

62 FATE C TAT UÍ
formato é muito importante quando há transferência do programa para o
PIC em uma forma legível.

Sem muitos detalhes, tal formato é diretamente reconhecido pelo


programador do PIC que promoverá durante a programação a conversão
em binário e contém outras informações que serão adicionadas aos
endereços na qual vamos transferir o opcode.

MPLAB ID E
Distribuído gratuitamente pela Microchip Tecnology, o MPLAB IDE
será utilizado para o desenvolvimento dos programas-fontes em
Assembly, que ap ós serem convertidos em programa objetivo, são
gravados no MCC. O MPLAB IDE é um conjunto de software que permite,
entre outras coisas:

• Criar programas em Assembly;

• Efetuar a simulação e o debug do programa;

• Gravar programas no MCC;

O objetivo não é explorar todos os recursos do MPLAB IDE, mas dar


ao aluno condições de utilizar os recursos necessários para o
desenvolvimento de aplicações em Linguagem Assembly. Os passos para
o desenvolvimento de uma aplicação são:

1º - Inicializando o MPLAB IDE

2º - Criando o programa-fonte

3º - Criando projeto

4º - Montando projeto

5º - Debugando projeto

6º - Gravando o programa no MCC

I N IC I AL I Z AN D O O M P L AB I D E 8. 10
Depois de complementada a instalação, dê um duplo-clique no ícone
do MPLAB IDE na área de trabalho ou selecione
Iniciar/Programas/Microchip MPLAB IDE/ MPLAB IDE. Logo aparece uma
tela da figura 16. Este é o ambiente em que serão montadas as
aplicações (programas) que serão gravadas no MCC.

63 FATE C TAT UÍ
Figura 16- MPLAB IDE 8.10

C R I AN D O PR O J E T O

Clicando em Project/Project W izard, aparece a janela da figura 17.


Clique no botão Avançar para continuar o processo de criação de um
projeto, lembrando que este processo é feito em quatro passos.

Figura 17- Criando um projeto

Primeiro Passo:

64 FATE C TAT UÍ
Na janela exibida na figura 18, escolha o modelo de MCC que será
usado no projeto, no caso 16F628A e clique em Avançar para prosseguir.

Figura 18- Primeiro passo

Segundo Passo:

A figura 20 mostra a próxima tela. No item caixa Active Toolsuite,


selecione a ferramenta Microchip MPLAB Toolsuite. Selecione a opção
MPASM Assember (mpaswin.exe) na caixa Toolsuite Contents. Deve
aparecer o caminho completo no qual se encontra o arquivo mpaswin.exe.
Se isso não acontecer, clique no browse e localize o arquivo no diretório
em que está instalado o MPLAB IDE. Clique em Avançar para prosseguir.

Figura 19- Segundo passo

65 FATE C TAT UÍ
Terceiro Passo:

Ao aparecer a janela da figura 21, escolha o diretório em que o


programa será salvo e o nome do projeto. Não se esqueça de que o
projeto deve ser gravado no mesmo diretório em que foi salvo o arquivo
.ASM, criado anteriormente. O projeto é salvo como extensão .MCP.
Clique no botão Avançar para prosseguir.

Figura 20- Terceiro passo

Quarto Passo:

Nesta etapa será feita a seleção e inclusão dos arquivos de


definições básicas, estes arquivos são o P16F628A.INC e o 16f628a.lkr.

Esses arquivos estão nos respectivos caminhos:

C:\Arquivos de programas\Microchip\MPASM Suíte\P16F628A.INC

C:\ Arquivos de programas\Microchip\MPASM Suíte\LKR\16f628a.lkr

Ao encontrar cada um deles, deve-se adicioná-los ao projeto


através da tecla Add.

Na figura 23 observa-se que no quadro da direita estão os dois


arquivos incluídos e precedendo cada um existe uma letra A , deve-se
posicionar o mouse em cima desta letra e clicar três vezes, ficando assim
a letra C precedendo os dois arquivos. Com isso garante-se que os
arquivos serão copiados na pasta em que se encontra o projeto.

66 FATE C TAT UÍ
Figura 21- Passo quatro (Inclusão de Arquivos ao projeto)

Em seguida clicar em AVANÇAR.

A janela apresentada na figura 24 é a última exibida no processo de


criação de um projeto utilizando o Project W izard. Nela são mostrados os
parâmetros do projeto. Verifique se ele está configurado corretamente e
clique no botão Concluir.

Figura 22- Conclusão da operação

67 FATE C TAT UÍ
VISU ALIZANDO O PROJETO
Após a criação do projeto provavelmente a tela do MPLAB esteja
vazia, então deve-se clicar no menu VIEW e em seguida na opção
PROJECT, ver figura 23.

Figura 23- Visualização do projeto

C RI AN D O E S AL V AN D O AR Q U I V O- FO N TE E M AS S E M BL Y
Crie um novo arquivo .ASM clicando em File/New. Ele será o
pr ogr a m a- fon t e do pr ojet o e es c r i to em Lin gu ag em A s sem bl y. A se gu ir ,
um modelo para estruturação do programa-fonte que será usado na
criação das aplicações. Para evitar problemas, utilize sempre letras
maiúsculas e não use acentos, cedilhas ou caracteres especiais nos
comentários. Não se preocupe em tentar entender a função de cada linha
da estruturação proposta, pois será explicado m ais adiante. Apenas leia
com atenção.

( programa exemplo)

Para salvar o arquivo-fonte, basta clicar em File/Save as como


apresenta a figura 24.

68 FATE C TAT UÍ
Figura 24- Criando e salvando arquivo-fonte.

AB R I N D O O PR O GR AM A F O N TE
Na figura 24, verifica-se que nenhum arquivo fonte (Source File)
está adicionado ao projeto, portanto deve-se adicioná-lo posicionando o
mouse em cima da pasta Source Files e clicar o botão direito do mouse e
escolher a opção Add files..., então seguir as solicitações de localização
do arquivo fonte (.ASM).

Se um arquivo fonte foi adicionado ao projeto, basta dar um clique


duplo no arquivo .ASM para que ele seja aberto conforme exibida na
figura 25.

Figura 25- Visualização do arquivo fonte.


69 FATE C TAT UÍ
O bs: O projeto s ó ira se r c ompilado s e o ar quivo fonte es tiver
aberto no Source Files.

M O N T AN D O O P RO J E TO ( C O MPI L AN D O)
O arquivo .ASM só poderá ser montado (compilado) se tiver sido
editado corretamente.

Com o programa-fonte em Assembly pronto e o projeto criado, pode-


se montar o projeto, ou seja, gerar o programa a partir do programa-
fonte. O programa objeto é um arquivo com extensão .HEX que contém o
programa que será gravado no MCC.

Para montar um projeto, selecione Project/Build All ou clique no

ícone na barra de tarefas. Se o projeto for corretamente, aparece a


janela da figura 26 com o texto BUILD SUCCEEDED antecedido da data e
hora.

Figura 26- Verificação de erros no programa

Se aparecer a mensagem BUILD FAILED, como mostra a figura 27,


é porque ocorreu algum problema e o projeto não foi montado. Resolva os
problemas e monte-o novamente.

Erros, W arning e Mensagens

Existem três grupos de avisos que são emitidos nos relatórios de


compilação:

• Erros: Quando aparece este aviso é porque algum erro


realmente aconteceu, impedindo que a compilação tenha sucesso.
Pode ser erro de sintaxe, de argumentação, etc.

• Warning: É uma espécie de alerta do compilador; algo


está estranho e deve ser checado. Normalmente um W arning é
seguido de um erro, mas ele sozinho não causa erro de compilação.

• Mensagens: Trata-se apenas de um comunicado do


compilador para o programador. Ele está avisando que alguma ação
está sendo feita e que isso pode gerar um problema, se não for
corretamente implementada. O aparecimento de mensagens é
norm al em alguns programas, mas elas não devem ser desprezadas.

70 FATE C TAT UÍ
Figura 27- Relatório de compilação com mensagens.

Para cada aviso do relatório será mostrado o seu tipo, seguido do


código específico para a situação, o nome do arquivo, a linha na qual ele
ocorreu e a sua descrição. Para facilitar o trabalho, basta clicar com o
mouse duas vezes sobre o aviso, que o M PLAB já altera para a janela do
programa-fonte, na linha correta. Então, é resolver o problema e compilar
novamente.

R EMOVENDO UM AR QU IVO-FONTE AO PROJ ETO


Para remover um arquivo-fonte do projeto, clique com o botão
direito no arquivo .ASM e selecione a opção Remove, como mostra a
figura 28. Depois de removido pode-se adicionar outro arquivo-fonte.

Figura 28- Removendo o arquivo-fonte.

FECHANDO UM PROJ ETO


Utilizar o menu PROJECT e opção CLOSE para fechar o projeto que
está em desenvolvimento.

Com esse procedimento o projeto poderá ser salvo integralmente.

71 FATE C TAT UÍ
A G R AV AÇ Ã O D O P R O G R AM A N O MC C
A gravação do PIC é feita por um sistema gravador (programmer),
formado por um hardware e um software de gravação executado num PC.

Os sistemas de gravação podem ser ou não homologados pela


Microchip. O software necessário para a gravação é o “ICProg “ , que é
gratuito e está disponível para download http://www .ic-prog.com/ , e o
projeto original do gravador encontra-se no site do desenvolvedor
http://www.jdm.homepage.com.dk/newpic0.htm. Site referência do tema
http://www.edutecbauru.com.br/cursopic/aula11.htm.

O homologado tem a vantagem de se poder gravar o MCC


diretamente pelo menu do MPLAB, já no não homologado deve-se abrir o
programa de gravação separadamente e localizar o arquivo hexadecimal
que será enviado ao MCC.

Os sistemas de gravação homologados podem além de gravar,


debugar e emular.

Relação dos homologados:

Gravação Debugar Emulador


Sistema/Recursos (programmer) (debugger) (emulator)
PICSTART® Plus sim --- ---
PICk it 2 / 3 sim sim ---
ICD 2 / 3 sim sim ---
REAL ICE sim sim sim

Tabela 5- Relação dos homologados

Existem diversos gravadores não homologados e todos são apenas


gravadores.

A ligação entre o PC e o gravador (placa) pode ser através de uma


das seguintes portas de comunicação: a paralela, a serial RS232 ou a
USB .

O gravador do Kit experimental utilizado neste curso é uma versão


derivada de um projeto de domínio publico chamado JDM, não
homologado, e usa a porta de comunicação serial RS232 do PC.

72 FATE C TAT UÍ
Figura 29-Gravador do Kit

73 FATE C TAT UÍ
O hardware do gravador foi alterado em relação ao projeto original
e na figura abaixo tem-se o diagrama esquemático final do gravador.

Figura 30- Diagrama esquemático do gravador

Descrição do circuito:

O circuito tem uma entrada de comunicação serial RS232 e a


tensão de alimentação deve ser maior que 13 Volts, é recomendável uma
tensão próxima de 15 Volts.

Na saída, as 5 vias compõem o conector ICSP, o qual leva os


sinais diretamente ao MCC.

Observar que o pino 4 (MCLR) é o responsável pela tensão VPP


(programação) de 13Volts que o MCC requer na gravação.

I NS T AL AN D O O SO F TW AR E I CP R OG N O
MICROCOMPU TAD OR
Passo 1

Após o download, provavelmente o arquivo estará compactado,


descompacte-o e copie os arquivos para o seu HD, pode ser em qualquer
pasta, ele não tem arquivo instalador.

Crie uma pasta, por exemplo, icprog na unidade C: e copie os


arquivos descompactados. Depois disso clique no ícone do ICprog. É
aconselhável criar um atalho para ele na área de trabalho do micro, pois
vai ser bastante usado.

74 FATE C TAT UÍ
Figura 31- Arquivos relacionados ao icprog

Passo 2

Se for a primeira vez que o programa é executado, aparecerá uma


tela avisando que o programa entrará na página de Hardware settings
(configuração de hardware).

Figura 32- Janela de configuração de hardware

Nesta janela, no campo Interface deve-se optar “W indows API” e


dependendo do harware escolher a porta de comunicação.

Passo 3

Na tela principal, clicar o menu Settings, escolher Options e na aba


Language escolher Portuguese.

Figura 33- Opções de linguagem


75 FATE C TAT UÍ
Passo 4

Selecionar o dispositivo PIC 16F628A.

Figura 34- Escolher o MCC

Pronto o software ICPROG já está instalado...

C O NFI G U R AN D O I C PR O G P AR A W I N D O W S 2 0 00, N T, M E, X P
Se o S.O . for o W indow s NT, 2000 ou Window s XP, é necessário um
driver (icprog.sys), o qual já vem incluído no arquivo zipado do icprog e
deve estar na mesma pasta que o executável.

Procedimento:

Com o cursor de mouse sobre o ícone ICPROG.exe pressionar a


tecla da direita do mouse e escolher Propriedades.

Figura 35- IC-PROG > propriedades

76 FATE C TAT UÍ
Na aba compatibilidade:

Figura 36- IC-PROG > Compatibilidade

C licar em com patível co m W in dow s 20 00 ou W in dow s 98 / W in ME

Figura 37- Escolher o S.O.

77 FATE C TAT UÍ
Pressionar Aplicar

Pressionar OK

Abrir o programa ICPROG, no menu Configuração > Opções>


Diversos selecionar a opção Activar Driver NT/2000/XP .

78 FATE C TAT UÍ
Pressionar OK.

Pronto o Software está apto para fazer gravações.

F AZE N D O U M A G RAV AÇ Ã O ATR AV É S D O I C-P R O G


Abrir o programa ICPROG.EXE e verificar se as configurações
coincidem com a exibida na figura abaixo.

Figura 38- IC-PROG gravador

Verificar as configurações de hardware conforme mostra a figura


abaixo.

79 FATE C TAT UÍ
Figura 39- Configuração de hardware

Carregando o arquivo Hexadecimal do programa.

Figura 40- Processo de gravação

80 FATE C TAT UÍ
Comando de gravação

Figura 41- Programando

R E AB R I N DO O AR Q UI V O H E X AD E C I M AL D O P R OG R AM A

• Procedimento necessário quando o programa for alterado e


for necessário atualizar o código no MCC.

Figura 42- Reabrindo um projeto

81 FATE C TAT UÍ
GR AV AÇÃO IN-CIR CUI T (ICSP)
Uma grande parte dos modelos da família PIC possibilita a chamada
gravação “in-circuit”. Isso serve para que o PIC possa a ser gravado
diretamente na placa montada. Como a gravação é feita de forma serial,
utilizando somente cinco pinos, é possível a instalação de um soquete na
placa para introduzir os sinais necessários à gravação. Isso exige uma
série de cuidados no projeto do hardware, a fim de evitar que as tensões
de gravação prejudiquem os demais periféricos.

Os pinos necessários a gravação são:

 Vdd: Alimentação de 5Vcc.

 Vss: GND.

 MCRL: Tensão de programação. Para que o PIC entre o modo


de programação, a tensão nesse pino deve ser de
aproximadamente 13Vcc. Por isso, o resto do circuito ligado a
esse pino deve ser protegido.

 RB6: Clock da comunicação serial imposto pelo gravador.

 RB7: Dados na comunicação serial, que podem ser impostos


pelo gravador (escrita) ou pelo próprio PIC (leitura).

Uma vez que esses pinos estejam acessíveis, basta possuir um


gravador que os gerencie corretam ente. A gravação realizada pelo
McFlash, gravador nacional de baixo custo e que opera diretamente junto
com o MPlab, é totalmente compatível com a gravação “in-circuit”, já que
esse possui um cabo que pode ser conectado ao seu sistema. A pinagem
deste cabo é fornecida na documentação do gravador.

82 FATE C TAT UÍ
INTERRUPÇÃO (IRQ)
Uma interrupção é um evento de hardware que, quando ocorre,
provoca um desvio no programa, para que o evento seja tratado. Ao
término do tratamento do evento que deu origem à interrupção, o
programa retorna ao ponto em que parou quando ocorreu o desvio. O MCC
utilizado possui dez fontes de interrupção.

Todas as interrupções possuem um flag, estes são setados na


ocorrência da interrupção. Portanto, ao tratar uma interrupção deve-se
resetar o flag. Cada interrupção pode ser habilitada individualmente e
independente das demais.

A habilitação é feita da seguinte forma:

1º - Habilitar a chave individual (INTCON ou PIE1)

2º - Habilitar a interrupção de periféricos (INTCON<6>) se a fonte


for um periférico.

3º - Habilitar a chave geral de interrupção (INTCON<7>).

Diagrama Árvore de Interrupções

Figura 43- Diagrama árvore de interrupções

83 FATE C TAT UÍ
ESTRUTURA DA ROTINA DE TRATAMENTO DA
INTERRUPÇÃO
A primeira coisa que deve ser feita quando tratar de interrupção é
salvar o conteúdo de alguns registradores que podem ser manipulados
dentro da rotina de interrupção, para que possam resgatar seus
conteúdos quando retornar ao programa principal. Isso é necessário
porque alguns registradores podem ser manipulados no programa
principal, como os registradores W ou STATUS, também podem ser
manipulados dentro da rotina de interrupção.

A seguir, um fluxograma para atender IRQ.

INTERRUPÇÃO

SALVAR W e STATUS

DESLIGAR INTERRUÇÃO

IDENTIFICA ORIGEM
DA INTERRUPÇÃO e
EXECUTA

RECUPERA W e STATUS

LIMPA FLAG DE
INTERRUPÇÃO

LIGA INTERRUPÇÃO

RETORNA

84 FATE C TAT UÍ
R E C U R S O S AV A N Ç A D O S ( P E R I F É R I C O S )
Serão apresentados de forma resumida os recursos existentes no
PIC 16F628A, tais como:

1. Timer 0 (8 bits)

2. Timer 1 (16 bits)

3. Timer 2 (8 bits)

4. CCP – Capture, Compare, PW M (10 bits)

5. Comparador analógico

6. Tensão de referência ajustável

7. USART – Comunicação serial

TIMERS
O PIC 16F628A possui três temporizadores que dão ao MCC
recursos que podem ser aproveitados nas mais diversas aplicações,
como: contadores, temporizadores, relógios, medidores, etc.

TIMER 0
Ele pode ser utilizado tanto como temporizador quanto contador.
Esse módulo possui um registrador de 8 bits, chamado TMR0, que pode
incrementado pelo ciclo de clock interno (ou ciclo de instrução) ou por um
sinal externo aplicado no pino RA4/T0CK1. O TMR0 ocupa os endereços
01h e 101h dos respectivos bancos 0 e 2 de memória RAM. O bit T0CS
(OPTION<5>) define se TMR0 será incrementado pelo ciclo de instrução
(T0CS=0) ou se por sinal externo aplicado no pino RA4/T0CK1 (T0CS=1).

Para utilizar a interrupção desse timer, as seguintes chaves devem


ser ligadas:

 INTCON <T0IE>: chave individual da interrupção de


TMR0.

 INTCON <GIE>: chave geral das interrupções.

85 FATE C TAT UÍ
DIAGRAMA TIMER 0
FOSC/4
=
OPTION, PSA=
ciclo de 0: prescaler aplicado ao TMR0.
máquina
1: prescaler aplicado ao WDT.

Prescaler TMR0 INTCON,TOIF


1:2 1:32 (flag de estouro)
1:4 1:64
Seletor de
função 1:8 1:128

Cristal
1:16 1:256
TMR0
PSA
Flag de sinalização de

86
Prescaler estouro do Timer0
PS2,PS1,PS0 INTCON,TOIF=
0: não ocorreu estouro
1: ocorreu estouro do timer
Prescaler WDT
WDT 1:1 1:16
1:2 1:32
1:4 1:64

Contador
OPTION,T0CS= 1:8 1:128
Detector 0: clock interno (ciclo de máquina)
de Borda 1: clock externo (T0CKI)

INTCON, GIE INTCON,TOIE Vetor de Interrupção


(habilita chave Desvio do programa
(habilita para tratamento da
geral interrupçaão) Interrupção do timer0
interrupção)
OPTION,T0SE=

RA4/T0CKI
0: borda de subida
1: borda de descida Bit de Habilitação de Interrupção do TMR0
INTCON, TOIE =
0: interrupção do timer desligada.

FATE C TAT UÍ
1: interrupção do timer ligada.
TIMER 1
O Timer 1 é outro contador automático do sistema, mas com uma
enorme vantagem sobre o Timer 0: trata-se de um contador de 16 bits.
Desta forma, o valor do contador é armazenado em duas posições da
memória: TMR1L (parte baixa) e TMR1H (parte alta).

Para configurar esse timer, utilize o T1CO N.

Outra grande vantagem do TMR1 é o fato de que ele pode trabalhar


com um prescaler independente, configurado diretamente em T1CON
<T1CKPS1:T1CKPS0>. De forma semelhante ao TMR0, o TMR1 também
pode ser incrementado pelo clock da máquina ou por um sinal externo,
ligado ao pino T1CKI (borda de subida). Quem configura o tipo de
incremento é o bit TMR1CS do registrador T1CON. Só que quando
configurado para trabalhar com incremento por sinal externo, os pinos
T1OSO e T1OSI possuem também um circuito de oscilação, para poder
utilizar diretamente um Ressoador/Cristal externo só para o Timer1. Com
isso pode-se fazer um timer com clock diferente da máquina. Além disso,
através do bit T1CON <T1OSCEN> esse oscilador pode ser habilitado ou
não, fazendo com que o timer seja paralisado e economizando energia
para o sistema.

Por último, para que o TMR1 funcione, o bit T1CON <TMR1ON>


deve ser setado (1).

Para utilizar a interrupção do TMR1, as seguintes chaves devem ser


ligadas:

 PIE1 <TMR1IE>: chave individual da interrupção do


TMR1.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<TMR1IF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

87 FATE C TAT UÍ
DIAGRAMA TIMER 1
FOSC/4
=
T1CON,TMR1ON=
1: liga timer1
ciclo de
0: desliga timer1
máquina

PIR1,TMR1IF
(flag de estouro)

Cristal
Flag de sinalização de
estouro do Timer1
Chave PIR1,TMR1IF=
Liga/Desliga 0: não ocorreu estouro
Prescaler TMR1L TMR1H

88
T1CKPS1,T1CKPS0 (byte LSB) (byte MSB) 1: ocorreu estouro do timer
Seletor de
função
Prescaler: Registradores de contagem no modo
16 bits (contagem de 0 a 65535)

1:8

Contador
1:4
1:2
1:1

T1CON,TMR1CS =
0:contagem com base no ciclo de máquina
1: contagem em T1CK1

INTCON, GIE PIR1,TMR1IF Vetro de Interrupção


(habilita chave (habilita Desvio do programa
geral para tratamento da
interrupçaão)
interrupção) Interrupção do timer1

RB6/T1CKI
Bit de Habilitação de Interrupção do Timer1
PIE1,TMR1IE =
0:interrupção do timer1 desligada
1: interrupção do timer1 ligada

FATE C TAT UÍ
TIMER 2
Este timer, por sua vez, volta a ser de 8 bits e só pode ser
incrementado pelo clock da máquina. Por outro lado, ele possui duas
vantagens sobre os demais.

Primeiro, além de possuir um Prescaler próprio, possui também um


Postcaler. A diferença que o Prescaler é utilizado para incrementar o
TMR2 propriamente dito, enquanto o Postcaler conta a quantidade de
estouro desse timer para gerar uma interrupção.

Em segundo lugar, existe um segundo registrador (PR2) utilizado


para controlar o estouro do TMR2. Dá seguinte forma, no caso do Timer0,
que também é um timer de 8 bits, o estouro acontece sempre que o valor
é incrementado de 0xFF para 0x00, pois o limite de bits foi atingido. No
TMR2 esse limite não precisa ser atingido, pois defini-se o número
máximo permitido através do PR2. A comparação entre esses dois
registradores é feita sempre, e de forma automática, pelo sistema. Caso
TMR2 = PR2, no próximo incremento será considerado um estouro e TMR2
voltará a zero. Assim, não é mais necessário inicializar o valor do
contador para que a quantidade de increm entos seja a desejada. Basta
especificar esse valor em PR2.

Para utilizar a interrupção desse timer, as seguintes chaves devem


ser ligadas:

 PIE1 <TMR2IE>: chave individual da interrupção do


TMR2.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<TMR2IF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

C C P – C AP TU R E , C O M P AR E e P W M
Esses três recursos estão relacionados ao mesmo módulo dentro do
PIC, denominado CCP. Isso significa que só pode se utilizar um dos
sistemas de cada vez. Através do registrador CCP1CON pode-se
configurar qual recurso será habilitado, alterando-se os valores dos bits
CCP1M3:CCP1M0.

C APTU RE
Este modo serve para contar o tempo, através do TMR1, entre
pulsos externos através do pino CCP1 (RB3). Com isso pode-se
implementar facilmente um timer para períodos de ondas.

A primeira coisa a fazer é escolher de que forma o pulso será


considerado em CCP1.

Existem quatro opções disponíveis através do registrador


CCP1CON:

 Contagem em cada borda de subida;


89 FATE C TAT UÍ
 Contagem em cada borda de descida;

 Contagem a cada 4 bordas de subida;

 Contagem a cada 16 bordas de subida.

Depois disso, toda vez que o evento correto acontecer no pino


CCP1, os valores de TMR1L e TMR1H (Timer 1 ) serão transferidas para o
registrador CCPRL e CCPR1H, respectivamente. Basta então configurar o
TMR1 corretamente, conforme as necessidades da sua forma de onda.
Observe que, como esse recurso utiliza diretamente o Timer 1, seu uso
em outras tarefas pode ficar comprometido.

Para utilizar a interrupção que acontece junto com esse evento, as


seguintes chaves devem ser ligadas:

 PIE1 <CCO1IE > : chave individual da interrupção do


CCP1.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<CCP1IF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

C O MP AR E
Nesse modo também utiliza o TMR1 como base de tempo. No
entanto, aqui, o valor do contador é constantemente comparado ao valor
escrito nos registradores CCP1L e CCP1H. Quando uma igualdade
acontecer, uma das seguintes ações irá acontecer:

 O pino CCP1 (se configurado como saída) será alocado


em nível lógico alto (1);

 O pino CCP1 (se configurado como saída) será alocado


em nível lógico alto (1);

 O estado do pino CCP1 não será afetado, mas a


interrupção acontecerá.

Essas ações são configuradas ao setar o modo de Compare dentro


do registrador CCP1CON.

 PIE1 <CCO1IE > : chave individual da interrupção do


CCP1.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<CCP1IF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

90 FATE C TAT UÍ
PWM
O PW M é provavelmente o recurso mais utilizado dentro do CCP, já
que possibilita criar uma saída analógica, porque quando uma onda PW M
passa por um filtro externo, pode ser convertida em um sinal variável de 0
a 5VDC.

Este modo também é mais complexo de trabalhar. Deve-se começar


configurando sua escolha em CCP1CON.

A base de tempo para o PW M será o Timer 2. A primeira dúvida que


pode surgir aqui é em relação a precisão do sistema, já que foi dito que o
PW M do PIC16F628A é de 10 bits, mas a base de tempo é de 8 bits.
Assim, não serão considerados somente os 8 bits físicos do TMR2. Os 2
bits faltantes serão adquiridos através do clock interno da máquina.

Assim sendo, o valor do período do PW M está vinculado a um


estouro do TMR 2, isto é, sempre que TMR2 = PR2. Portanto, para definir
o tempo desse período, pode-se utilizar a seguinte fórmula:

PW MPERÍODO = (PR2 + 1) . 4 . TOSC . TM R2PRESCALER

Por exemplo, para um sistema rodando a 4MHz pode-se ter a


seguinte configuração:

PW MPERÍODO = (249 + 1) . 4 . 250ns . 4

PW MPERÍODO = 1ms

Quando ao Duty Cycle (DC), isto é, o tempo que a onda fica ativa
(nível lógico alto), seu valor será considerado pelo registrador CCPR1L.
Como esse também é um registrador de 8 bits e precisa-se de 10 bits
para a precisão, os 2 bits menos significativos encontram-se em
CCP1CO N <CCP1X:CCP1Y> . Assim é possível calcular:

PW MDUTY CYCLE = (CCPR1L: CCP1CON <CCP1X:CCP1Y) . TOSC


. TMR2PRESCALER

Este valor encontra-se então entre 0 e 1024, e não em uma relação


direta de porcentagem do período total do PW M.

A forma de onda final, com PW MPERÍODO e PW MDUTY CYCLE , será


gerada contínua e automaticamente no pino CCP1 (RB3).

O modo PW M não possui uma interrupção específica relacionada a


ele.

C O MP AR AD O R E S
O PIC16F628A possui internamente dois comparadores analógicos.
O interessante é que esses comparadores podem ser configurados
eletronicamente em oito opções. Cada uma dessas opções ligará as
entradas e saídas dos comparadores de uma forma diferente. Além disso,
o resultado da comparação analógica poderá ser enviado como um sinal
digital a um dos pinos do PIC e/ou tratado internamente pela lógica do
sistema.

Para configurar os comparadores, altere o registrador


CMCON<5:0>.

91 FATE C TAT UÍ
Depois de configurados os comparadores, o resultado da
comparação poderá ser acessado em:

 CMCON<C1OUT>: resultado do comparador 1 (pode ser


ligado eletronicamente ao pino CMP1);

 CMCON<C2OUT>: resultado do comparador 2 (pode ser


ligado eletronicamente ao pino CMP1);

As entradas analógicas possuem limitações quanto à tensão, que


deve variar de 0 ao máximo de VDD.

Para utilizar a interrupção gerada quando o resultado de um dos


comparadores é alterado, as seguintes chaves devem ser ligadas:

 PIE1 <CMIE>: chave individual da interrupção dos


comparadores.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<CMIF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

TENSÃO DE REFER ÊN CI A AJUSTÁVEL


Esse recurso se trata de uma saída analógica de baixa resolução,
um a vez que só possui duas escalas com 16 níveis em cada uma, mas,
mesmo assim, não deixa de ser uma saída (VREF/RA2) analógica. Além
disso, em uma das possíveis configurações dos comparadores, essa
tensão de referência é ligada a uma das entradas dos dois comparadores.

Internamente essa tensão é feita através de um divisor resistivo


com 16 resistores (~2K para cada resistor). Em cada extremidade existem
mais de dois resistores de ~16K cada um. Um MUX pega os níveis de
tensão intermediários entre os resistores. Desta forma, a impedância de
saída é relativamente alta e a corrente disponível é baixa, mas a saída
pode ser buferizada externamente.

Para utilizar a VREF, defina se a saída estará ligada ao pino RA2/


VREF ou se o uso será somente interno através do bit VRCON<VROE>.

Depois, escolha a escala de operação. Ao alterar a escala, um dos


resistores de 16K da extremidade (para GND) é cortado. A alteração de
escala é feita por intermédio do bit VRCON<VRR>.

Escolha agora o valor da tensão desejada, configurando o MUX


interno através dos bits VRCON<VR3:VR0>.

O cálculo da tensão pode ser feito através das fórmulas:

 Escala baixa: VREF = (MUX / 24) . VDD

 Escala alta: VREF = (MUX / 32) . VDD + (VDD /

Por último, basta habilitar o circuito através do bit VRCON<VREN>.


Quando não estiver utilizando o VREF, m antenha o sistema desativado
para diminuir o consumo. Esse recurso não possui associada.

92 FATE C TAT UÍ
U S AR T
O PIC 16F628A utiliza o recurso da USART (Universal Syncronous
A s yn c r o no us Re c eiv er Tr an sm i ter ) par a s e c om u ni ca r c om o m un do r e al
de forma simples e eficiente. Com este sistema é possível implementar
uma linha de comunicação com um PC, através do padrão RS-232, sem
preocupação com a programação em relação às rotinas de recepção e
transmissão.

Existem dois modos de comunicação serial dentro da USART do


PIC: síncrono half-duplex e assíncrono full-duplex. Ambos implementados
por duas vias de comunicação (fora o GND). No modo síncrono, uma das
vias é utilizada co mo clock (via de sincronismo, por isso o nome) e a
outra via é utilizada para o tráfego de dados, em ambos os sentidos. Já
no modo assíncrono, não existe uma via de sincronismo para o sistema.
Assim sendo, uma das vias utilizada para a transmissão (TX) e a outra a
recepção (RX) dos dados.

E a transmissão assíncrona full-duplex permite ao MCC se


comunicar com PCs, modems, etc.. Já a transmissão síncrona half-duplex
permite ao MCC se comunicar com periféricos como: conversor A/D e D/A,
chips relógio-calendário, chips de memória EEPROM, etc.. Se a
transmissão for síncrona, a USART ainda pode funcionar como master ou
slave.

M O D O AS S Í N C R ON O
O sincronismo dos dois lados da comunicação é feito pelo próprio
dado, isto é, o sistema consegue saber quando cada dado começa. Isto é
possível através de três conceitos muito simples: marcas para o início
(start bit) e fim de dado (stop bit) e precisão no tamanho de cada bit
transmitido (baud rate).

A respeito do Baud Rate, isto é, a velocidade com que os dados


trafegam pela comunicação. Essa velocidade irá definir o tamanho de
cada bit, e por isso foi padronizada a utilização da unidade BPS (bits por
segundo). Os valores de Baud Rate foi padronizados, por exemplo, em
2400, 4800, 9600, etc. Tem-se então:

TBIT = 1 / Baud Rate

E como é obrigado a estabelecer uma velocidade de comunicação


para o sistema (por exemplo, 9600 bps), e os dois lados utilizarão esta
mesma velocidade, assim é possível saber qual o tempo de cada bit
trafegando nas linhas TX e RX.

O padrão para ambas as linhas de comunicação é o nível lógico alto


(5VCC). Quando a comunicação de um byte começa, a linha vai para nível
lógico baixo (GND), permanecendo desta forma pelo tempo de 1 bit (TBIT).
Esse intervalo específico em zero (0) é chamado de Start Bit e serve para
sincronizar a recepção do dado. Depois disso, 8 bits são transm itidos,
respeitando-se a relação lógica de tensão (0 = GND 1 = 5V). No final,
obrigatoriamente deve voltar ao nível alto, para que o próximo Start Bit
seja reconhecido.

Ao final da transmissão, pode ser definido também que o sistema


opte por um intervalo (TBIT) em nível alto, para ajudar a separar um dado
do outro. Esse intervalo é chamado de Stop Bit.

93 FATE C TAT UÍ
Por último, existe ainda a possibilidade da transmissão de um 9º bit
(entre o final do dado e Stop Bit), que serve para checar a integridade da
informação recebida. Esse bit é chamado de Paridade, e pode ser
configurado como ímpar ou par. A paridade uma comunicação é opcional.

Para trabalhar com esses parâmetros no PIC, primeiramente informe


que o modo será assíncrono. Isto é feito limpando-se (0) o bit
TXSTA<SYNC>.

Depois, ajuste o Baud Rate desejado através do bit TXSTA<BRGH>


e do registrador SPBRG. Calcule o valor de SPBRG através da fórmula:

Para TXSTA<BRGH> = 0 (velocidades baixas):

BR = FOSC/ (64 . (SPBRG + 1)) ou

SPBRG = FOSC/ (64 . BR) – 1

Para TXSTA<BRGH> = 1 (velocidades altas):

BR = FOSC/ (16 . (SPBRG + 1)) ou

SPBRG = FOSC/ (16 . BR) – 1

Como SPBRG deve ser arredondado para um valor inteiro, existirá


com erro no Baud Rate. Faça de tudo para que esse erro seja o menor
possível. Se necessário, altere o valor de TXSTA<BRGH> e recalcule para
ver se melhora. Em último caso, altere o valor de FOSC (frequência do
oscilador). Para comunicações mais críticas, utilize um cristal externo.

Depois ajuste o uso ou não da paridade, através dos bits


TXSTA<TX9> (transmissão) e RCSTA<RX9> (recepção). Quando esses
bits em 1, a comunicação é configurada para 9 bits (com paridade).

Depois, ative o sistema da USART através do bit RCSTA<SPEN>.


Após essa ação, os pinos serão chaveados internamente para trabalharem
com TX (saída) e RX (entrada).

Agora existem dois outros bits para habilitar (ou desabilitar) a


transmissão e a recepção de dados.

Enquanto a recepção estiver habilitada através do RCSTA<RXEN>,


cada byte recebido pelo RX será armazenado em RCREG . Após o término
de uma recepção, uma interrupção será gerada, avisando que existe um
byte recebido no buffer de entrada. Sua única função é tratá-lo. Quando
um segundo byte for completamente recebido antes que o dado anterior
tenha sido lido pelo programa, uma sobrescrita irá acontecer, perdendo-
se o dado anterior. Quando isso acontecer, o bit RCSTA<OERR> será
setado.

Por outro lado, enquanto a transmissão (sistemas independentes)


estiver habilitada através do TXSTA<TXEN>, cada dado movido para
TXREG será automaticamente enviado através do pino TX. Após de um
término da transmissão, uma interrupção será gerada, avisando que o
buffer de saída está vazio e pronto para o próximo dado.

94 FATE C TAT UÍ
MODO SÍNCRONO
A transmissão síncrona utiliza um sinal de clock para sincronizar o
transmissor e o receptor. Sendo assim, serão necessárias duas linhas de
transmissão, uma para o sinal de clock e outra para os dados. Da mesma
forma que no modo assíncrono, a transmissão síncrona pode ser de 8 ou
9 bits, sendo o m eio, no entanto, utilizado de form a half-duplex, ou seja,
a transmissão pode ser dar nos dois sentidos, porém não
simultaneamente.

A transmissão síncrona estará ativada enquanto o bit SYNC


(TXSTA<4>) estiver setado.

Para utilizar a interrupção, independente do modo, de recepção, as


seguintes chaves devem ser ligadas:

 PIE1 <RCIE >: chave individual da interrupção de


recepção.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<RCIF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

Para utilizar a interrupção, independente do modo, de transmissão,


as seguintes chaves devem ser ligadas:

 PIE1 <TXIE >: chave individual da interrupção de


transmissão.

 INTCON <PIE>: chave de grupo de interrupção de


periféricos.

 INTCON <GIE>: chave geral das interrupções.

Quando a interrupção acontecer, será setado o bit PIR1<TXIF>.


Após o tratamento, este bit não será limpo automaticamente, ficando esta
tarefa para o programador.

CÓ D I G O AS C I I
O código ASCII (American Standard Code for Information
Interchange) é um dos mais utilizados em comunicação serial e é dividido
em dois grupos: os caracteres impressos e os caracteres de controle. Os
caracteres impressos são formados por 26 letras (maiúsculas e
minúsculas), os números de 0 a 9, pontuação e caracteres especiais como
ponto, vírgula, interrogação, etc. os caracteres de controle ocupam as
duas primeiras colunas da tabela, e não são impressos, servindo para
efetuar o controle ou facilitar a transmissão de informação numa
comunicação.

95 FATE C TAT UÍ
A s e g u i r a T a b e l a d o CÓ DI G O AS C I I :

96 FATE C TAT UÍ
RESET
O vetor RESET (localização 0x00h), ativo em nível baixo, leva o
MCC a reiniciar seus registradores para valores iniciais pré-definidos na
fabricação. Um dos mais importantes efeitos de um reset é o que zera o
contador de programa (PC), fazendo com que o programa comece a ser
executado a partir da primeira instrução do softw are programado. Em
suma, este reinício de atividade pode ocorrer de forma manual, por
deficiência na alimentação ou até mesmo por erro no software. Para o
MCC funcionar corretamente, ele dever ter seu pino MCLR em nível alto.
Se houver uma variação para zero, ocorrerá a condição de RESET. Este
evento pode ocorrer de seis formas:

• Power-on reset (POR-ocorre quando o chip é ligado);

• /MCRL = 0 durante operação normal;

• /MCRL = 0 durante o sleep;

• Brown-out = 0 (BOR-reset devido à baixa tensão de


alimentação);

• Estouro do W atchdog Timer (W DT) durante um repouso


(SLEEP);

• Estouro do WDT em operação normal;

O RESET irá provocar:

• Saída do modo SLEEP;

• Todas as portas serão configuradas como entradas;

• Os bits dos registradores TRISA, TRISB e OPTION


serão setados;

• O PC será zerado;

• O W DT será inicializado;

• A pré–escala será setada.

Alguns registradores não são afetados por qualquer condição de


reset. O registrador de STATUS tem um valor desconhecido quando o
circuito é energizado (POR) e mantém-se inalterado em qualquer outro
reset. A maioria dos registradores é modificada quando ocorre um reset
por WDT, SLEEP ou POR.

Os bits /TO e /PD indicam a origem do último reset gerado no MCC.


A tabela 5 a seguir mostra os valores de /TO e /PD para cada tipo de
reset.

/TO /PD Origem do RESET


0 0 WDT “acordou” o SLEEP
0 1 WDT estourou
1 0 /MCLR durante o SLEEP
1 1 Power – On
Inalterado Inalterado /MCLR durante operação normal
Tabela 5: Valores dos bits /TO e /PD.

97 FATE C TAT UÍ
POWER-ON RESET (POR)
Este é um circuito interno ao MCC que o mantém em reset até que a
tensão de alimentação (VDD) alcance tensão suficiente quando a tensão
de alimentação é ligada, para que o MCC possa funcionar corretamente. É
selecionado pelo registrador PCON<1> no endereço 0Ch.

POWER-UP TIMER (PWRT)


É um temporizador que pode ser ativado, fazendo com que o MCC
se mantenha em reset por 72 ms após a alimentação ser ligada. O uso do
PW RT permite que a tensão da fonte se estabilize, garantindo também a
estabilidade do oscilador principal, antes do MCC entrar em
funcionamento, evitando travamentos na inicialização. Ativado por meio
do bit de configuração PW RTE, desde que esteja setado. O PW RT é uma
proteção adicional ao POR.

BROWN-OUT RESET (BOR)


É um circuito interno que reseta o MCC quando a VDD cai abaixo de
4V por aproximadamente 100µs. Quando a VDD volta ao nominal, o BOR
perm ite que o MCC seja inicializado. O BOR é ativo por meio do bit de
configuração BOREN, que irá ativá-lo quando setado. O BOR é indicado
em para sistemas que necessitam ser desligados e religados rapidamente
ou em locais em que a queda de tensão da rede elétrica é comum.

Existe também o BROW N-OUT DETECT (BOD) que tem a mesma


finalidade do BOR, porém este é externo e somente irá resetar quando
VDD < VZ + 0,7 V onde VZ é atenção de ruptura do diodo zener. Se o BOD
é utilizado, desabilite o bit de configuração BOREN.

MODO SLEEP
Este é um modo de funcionamento de baixo consumo (menos de
1µA) útil em sistemas que funcionam com bateria, nos quais é crítico o
consumo de energia.

O modo SLEEP é acionado pela execução da instrução SLEEP.


Quando o PIC16F628A entra nesse modo, o oscilador principal é
desligado, o bit /TO (STATUS<4>) é setado, o bit /PD (STATUS<3>) é
apagados e são mantidos os estados lógicos dos pinos de I/O. Se estiver
habilitado, o W DT é zerado, mas se mantém em funcionamento, visto que
ele possui um oscilador próprio, que continua em funcionamento mesmo
com o MCC no modo SLEEP.

Uma vez no modo SLEEP, três são os eventos que fazem com que
ocorra um wake-up, ou seja, o MCC “acorda”:

1) Reset por meio do pino /MCLR;

2) Timeout gerado pelo W DT;

3) Interrupção, desde que ela esteja habilitada e ela não


dependa do oscilador principal.

A seguir, algumas interrupções que podem ocorrer mesmo


depois que o MCC entrar no modo SLEEP:

 Interrupção externa RB0/INT

98 FATE C TAT UÍ
 Interrupção por mudança de estado
RB7:RB4

 Interrupção do módulo comparador

 Interrupção de recepção da USART


SYNCRONOUS SLAVE MODE

 Interrupção de final de escrita da EEPROM

No primeiro evento, ocorre um reset e o programa volta ao início.

No segundo evento, ocorre o W DT wake-up, ou seja, o MCC acorda


e continua normalmente a execução do programa a partir da instrução
SLEEP.

Quando o wake-up ocorre devido a uma instrução, o PIC16F628A


pode continuar dormindo, acordar e o programa continuar a partir da
instrução SLEEP ou acordar e desviar o programa para o endereço 0x04 e
tratar a interrupção.

Se houver a opção de tratar a interrupção ao sair do modo SLEEP,


coloque uma instrução NOP após a instrução SLEEP para garantir que
nada vai acontecer antes de a interrupção ser tratada. Esta é uma
orientação do fabricante.

WATCHODOG TIMER (WDT)


O W DT é o circuito temporizador, conhecido como “temporizador
cão de guarda”, acionado por um oscilador próprio, que funciona
independentemente do oscilador principal. Isso significa que, mesmo que
o oscilador principal seja paralisado por um travamento ou pela instrução
SLEEP, o W DT continua em funcionamento. Quando o W DT produz um
timeout (estouro) provoca um reset no programa se o MCC não estiver no
modo SLEEP, ou seja, se o MCC estiver funcionando no modo normal. No
modo SLEEP, um estouro do W DT provoca um W DT wake-up, que fará com
que o MCC acorde e continue executando o programa normalmente, a
partir da instrução SLEEP.

O W DT é ativado pelo bit de configuração W DTE na hora da


programação. Com um prescaler 1:1, o W DT leva em torno de 18ms para
gerar um estouro, sendo o tempo exato, dependente da temperatura, da
tensão de alimentação e do chip. Contudo, pode-se aumentar o tempo de
estouro do W DT, utilizando outros valores de prescaler. O bit PSA
(OPTION_REG<3>), quando setado, direciona o prescaler para o W DT,
ficando a cargo dos bits PS2:PS0 (OPTION_REG<2:0>) a configuração do
fator aplicado ao prescaler, como mostra a tabela a seguir. Observe que o
estouro do W DT varia de 18ms a 2,3s.

99 FATE C TAT UÍ
PS2:PS0 W DT ESTOURO
000 1:1 18ms
001 1:2 36ms
010 1:4 72ms
011 1:8 144ms
100 1:16 288ms
101 1:32 576ms
110 1:64 1,15s
111 1:128 2,3s

Tabela 6: Estouro do W DT

A principal função do W DT é proteger o sistema contra possíveis


travamentos, fazendo com que o sistema resete e volte a funcionar. O
W DT pode ser zerado de duas formas:

Instrução SLEEP

Instrução CLRW DT

Em sistemas que utilizam o W DT, ele deve ser zerado antes de


gerar um estouro. Quando o sistema funciona em modo normal, isso é
feito pela instrução CLRW DT, que fará com que o WDT reinicie a
contagem do tempo. Esta instrução deverá estar no programa e o ideal é
que ela apareça só uma vez, mas nunca esquecendo de que o tempo que
leva para chegar até a instrução CLRWDT tem de ser menor que o tempo
que o W DT leva para gerar o estouro.

O bit /TO (STATUS<4>) é setado quando a instrução CLRWDT é


executada, e é apagado quando o W DT gera estouro. Em caso do reset,
esse bit pode ser testado para verificar se o reset foi provocado por um
estouro do W DT. Quando a instrução CLRW DT é executada, o bit /PD
(STATUS<3>) também é setado.

M AS TE R C LE AR E N AB L E
Esta é opção que define o uso do pino 4, que pode ser I/O ou
Master Clear externo (MCLR). Ao habilitar esta opção, o pino 4 funciona
como MCLR.

L O W V OL T AG E P R O G R AM
Este é recurso relativamente novo para muitos modelos de PIC.
Trata-se do sistema de programação do PIC (gravação da memória de
programa) em baixa tensão: 5V. Normalmente essa programação é
habilitada por uma alta tensão (13V) no pino MCLR. Acontece que hoje é
possível criar sistemas onde um PIC possa gravar o programa de outro
PIC, ou então efetuar um upgrade remoto. Para facilitar essa
implementação, a Microchip elaborou um sistema onde não é necessário
os 13V, raramente disponíveis na maioria dos projetos. Assim, todo o
processo utiliza somente o nível TTL, custom izando o hardware. Para que
esse sistema funcione de forma robusta e eficaz, um pino deve ser
dedicado à função de entrar no modo de programação. Quando habilitada
esta opção, o pino 10 deixa de ser o RB4 e passa a operar em PGM.

D AT A EE READ PR OTECT
Com esta opção ativada, não será possível ler a m emória de dados
(EEPROM Interna) através do gravador do PIC. Durante o
desenvolvimento, ou até em alguns tipos de projeto, sua leitura pode ser
uma forma interessante de achar erros e solucionar problemas.
100 FATEC TATUÍ
CODE PROTECT
É a mais importante opção a ser configurada. Ativado o código de
proteção, ninguém mais consegue ler o programa gravado no chip, nem
mesmo o programador. O chip pode ser regravado, mas não pode ser lida
a sua memória de programa, até que uma nova gravação seja feita com
essa opção desativada. Ativar o código de proteção garante que o
programa gravado no componente não será copiado de forma alguma.

D E FI NI N D O AS C O N FI G UR AÇ Õ E S NO PR Ó P RI O P R O GR AM A
Para evitar a chata tarefa de ter de configurar essas opções, todas
as vezes que for gravar um PIC, e também para evitar dúvidas sobre o
correto estado de cada uma delas, é possível especificar esta escolha no
próprio código do programa, por meio de uma diretriz de compilação. A
diretriz _CO NFIG (com dois underlines) configura diretamente as opções
de gravação. Para facilitar o trabalho com ela, os arquivos de include já
definem nomes para as diversas opções. No caso, do PIC16F628A, tem-se
as seguintes opções:

_BOREN_ON: Para BOR ligado.

_BOREN_OFF: Para BOR desligado.

_CP_ON: Para code protection ligado.

_CP_OFF: Para code protection desligado.

_DATA_CP_ON: Para acesso externo à EEPROM habilitado.

_DATA_CP_OFF: Para acesso externo à EEPROM desabilitado.

_PW RTE_O N: Para Power up ligado.

_PW RTE_O FF: Para Power up desligado.

_W DT_ON: Para W atchdog ligado.

_W DT_OFF: Para Watchdog desligado.

_LVP_ON: Para sistema de programação em baixa tensão ativado.

_LVP_OFF: Para sistema de programação em baixa tensão


desativado.

_MCLRE_ON: Para Master Clear externo ativado.

_MCLRE_OFF: Para Master Clear externo desativado.

_RC_OSC_CKOUT: Para RC externo com saída CKOUT.

_RC_OSC_NOCKOUT: Para RC externo sem saída CKOUT (com


I/O).

_INTOSC_OSC_CKOUT: Para oscilador interno com saída CKOUT.

_INTOSC_OSC_NOCKOUT: Para oscilador interno sem saída


CKOUT (com I/O).

_EXTCLK_O SC: Para clock externo sem saída CKO UT (com I/O).

_LP_OSC: Para oscilador tipo LP.


101 FATEC TATUÍ
_XT_OSC: Para oscilador tipo XT.

_HS_OSC: Para oscilador tipo HS.

A combinação destas opções deve ser feita por intermédio do


operador & (“E”).

Desta forma, a sintaxe da diretriz _CONFIG é a seguinte:

_CONFIG
_ CP_ ON &_PW RTE_ON &_W DT_OFF&_INTOSC _O SC_ NO CKOUT

CÓDIGO ID
O PIC16F628A possui quatro posições de memória reservadas para
armazenamento de um núm ero de ID (identificação) no chip. A diretiva
_IDLOCS é usada para este fim. Embora cada posição de memória tenha 8
bits, só os 4 bits menos significativos estão disponíveis. Desta forma
pode-se gravar quatro dígitos de 0 a 9 e de A a F como bits ID. O
exemplo seguinte mostra como gravar o ID no chip. Observe que o valor a
ser gravado é 1234h.

_IDLOCS H’1234’

O ID do chip pode ser selecionado no programa de gravação, assim


como pode ser incrementado automaticamente em alguns softwares em
uma gravação em série. Os bits ID estão disponíveis para leitura, mesmo
que o Code Protect tenha sido ativado na hora da gravação.

CHECKSUM (da gravação do programa)


É uma técnica utilizada na verificação de erros, que consiste em
somar todos os valores numéricos armazenados na memória de programa
do chip com os bits de configuração mais o ID gravado no chip. O
resultado da soma é chamado de checksum.

102 FATEC TATUÍ


O K it de De sen vol vime nt o

E xe m pl os de ha r dw ar e e so f t w ar e.

Exemplo 1- Básico , acender um led.


O projeto deve acender um Led alocado na porta A, bit 2. Observar que o
led acende em nível “0” no catodo.

Fig. 44 - Circuito do exemplo 1

103 FATEC TATUÍ


F L U X O G R AM A D O P R O G R AM A ( E x e m p l o 1 )

I NÍ CI O

C O N FI G U R AÇ Õ E S

I NI CI AL I Z AÇ Õ E S
R E GI S TR AD O R E S ,
I / O ’ s , p ul l -
u p s , c om pa r a dor es

M AI N

AC E N D E L E D

;-------------------------------------------------------------------
; PROGRAMA BÁSICO
; ACENDER LED
; MICROCONTROLADORES FATEC - PROF. ORLANDO
; VERSÃO: 1.0 DATA: 08/09
;-------------------------------------------------------------------
; DESCRIÇÃO DO ARQUIVO
;-------------------------------------------------------------------
; Acender um led que está alocado em RA2, acende em nível baixo,
; utilizando as instr uções de bits .
; -------------------------------------------------------------------
; ARQUIVOS DE DEFINIÇÕES
;
#INCLUDE <P16F628A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A
;
; DEFINIÇÃO DAS CONFIGURAÇÕES NO PRÓPRIO PROGRAMA
__CONFIG _BOREN_O N & _CP_OF F & _PW RTE_O N & _W DT_OF F &
_LVP_OFF & _MCLRE_ON & _XT_OSC

104 FATEC TATUÍ


;-------------------------------------------------------------------
; PAGINAÇÃO DE MEMÓRIA
;-------------------------------------------------------------------
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE
;MEMÓRIA
;
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA
#DEFINE LED PORTA,2
;-------------------------------------------------------------------
; VARIÁVEIS
;-------------------------------------------------------------------
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS
; UTILIZADAS PELO SISTEMA
;
CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DO USUÁRIO.

VAR1 ;USUÁRIO
VAR2 ;REGISTRADORES TEMPORÁRIOS PARA USO GERAL.

ENDC ;FIM DO BLOCO DE MEMÓRIA.

;-------------------------------------------------------------------
; VETOR DE RESET
;-------------------------------------------------------------------
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO


RETFIE

;-------------------------------------------------------------------
; INICIO DO PROGRAMA
;-------------------------------------------------------------------
ORG 0X05
INICIO
BANK1 ;ALTERA PARA O BANCO 1.
MOVLW b'11111111' ;
MOVW F TRISB ;DEFINE O PORTB COMO ENTRADAS
MOVLW b'11111011' ;DEFINE O RA2 COMO SAÍDA E AS
;DEMAIS COMO ENTRADAS.
MOVW F TRISA
MOVLW b'10000000' ;
MOVWF OPTION_REG ;PULL-UPS DESAB ILIT ADOS <7>
;DEMAIS BITS IRRELEVANTES.
BANK0 ;RETORNO PARA O BANCO 0
MOVLW b'00000000'
MOVW F INTCON ;TODAS A INTERRUPÇÕES DESLIGADAS
MOVLW b'00000111'
MOVW F CMCON ;DEFINE O MODO DE OPERAÇÃO DO
;COMPARADOR
;-------------------------------------------------------------------
; ROTINA PRINCIPAL
;-------------------------------------------------------------------
MAIN
BCF LED ;ACENDE LED
GOTO MAIN ;VAI PARA MAIN
;-------------------------------------------------------------------
; FIM DO PROGRAMA
;-------------------------------------------------------------------
END

105 FATEC TATUÍ


Exercícios extensão:

1.1- Acionamento de 4 leds.

1.2- Acionamento de leds indicadores de valor binário

Exemplo 2- Lê tecla e Pisca Led


Descrição:

Ao acionar a tecla S1 alocada no bit 3 da porta A, o led L0 alocado no bit


2 da porta A deverá acender e piscar com velocidade perceptível. A
duração das picadas deve ser de aproximadamente 200ms. Observar que
o led LD1 tem a função de sinalização do acionamento da tecla.

Figura 45 – Circuito do exemplo 2.

106 FATEC TATUÍ


F L U X O G R AM A D O P R O G R AM A ( E x e m p l o 2 )

INÍCIO

CO NF IG UR AÇÕ ES

I NI CI AL I Z AÇ Õ E S
R E GI S TR AD O R E S,
I/O’s, pull-
ups,comparadores

M AI N

BOTÃO S1 NÃO
AC I O N AD O ?

SIM AP AG A L ED

AC E N D E L E D

;-------------------------------------------------------------------
; PROGRAMA BÁSICO
; BOTÃO E LE D
; MICROCONTROLADORES FATEC - PROF. ORLANDO
; VERSÃO: 1.0 DATA: 08/09
;-------------------------------------------------------------------
; DESCRIÇÃO DO ARQUIVO
;-------------------------------------------------------------------
; Acender um led que está alocado em RA2, acende em nível baixo,
; através do acionamento de um botão (S1) que está alocado em RA3 também
; em nível bai xo.
; -------------------------------------------------------------------
; ARQUIVOS DE DEFINIÇÕES
;
107 FATEC TATUÍ
#INCLUDE <P16F628A.INC> ;ARQUIVO MICROCHIP PARA 16F628A

; DEFINIÇÃO DAS CONFIGURAÇÕES NO PRÓPRIO PROGRAMA


__CONFIG _BOREN_O N & _CP_OF F & _PW RTE_O N & _W DT_OF F &
_LVP_OFF & _MCLRE_ON & _XT_OSC

;-------------------------------------------------------------------
; PAGINAÇÃO DE MEMÓRIA
;-------------------------------------------------------------------
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE
MEMÓRIA
;
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA
#DEFINE LED PORTA,2
#DEFINE S1 PORTA,3
;-------------------------------------------------------------------
; VARIÁVEIS
;-------------------------------------------------------------------
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS
; UTILIZADAS PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DO USUÁRIO.

VAR1 ;USUÁRIO
VAR2 ;REGISTRADORES TEMPORÁRIOS PARA USO GERAL.

ENDC ;FIM DO BLOCO DE MEMÓRIA.

;-------------------------------------------------------------------
; VETOR DE RESET
;-------------------------------------------------------------------
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO


RETFIE

;-------------------------------------------------------------------
; INICIO DO PROGRAMA
;-------------------------------------------------------------------
ORG 0X05
INICIO
BANK1 ;A LT ERA P ARA O BANCO 1.
MOVLW b'11111111' ;
MOVW F TRISB ;DEFINE O PORTB COMO ENTRADA
MOVLW b'11111011' ;DEFINE O RA2 COMO SAÍDA E AS
;DEMAIS COMO ENTRADAS.
MOVW F TRISA
MOVLW b'10000000' ;
MOVWF OPTION_REG ;PULL-UPS DESABILITADOS <7>
;DEMAIS BITS IRRELEVANTES.
BANK0 ;RETORNO PARA O BANCO 0
MOVLW b'00000000'
MOVW F INTCON ;TODAS A INTERRUPÇÕES DESLIGADAS
MOVLW b'00000111'
MOVW F CMCON ;DEFINE O MODO DE OPERAÇÃO DO
;COMPARADOR

;-------------------------------------------------------------------

108 FATEC TATUÍ


; ROTINA PRINCIPAL
;-------------------------------------------------------------------
MAIN
BTFSC S1 ;TESTA SE O BOTÃO ESTÁ ACIONADO
GOTO APAGA ;NÍVEL LÓGICO = 1
BCF LED ;ACENDE LED, SIM ESTÁ ACIONADA
GOTO MAIN ;VAI PARA MAIN
APAGA
BSF LED ;NÃO ESTÁ ACIONADA , APAGA LED
GOTO MAIN
;-------------------------------------------------------------------
; FIM DO PROGRAMA
;-------------------------------------------------------------------
END

Exercícios extensão:

2.1- Mudar o código para fazer o led ficar aceso quando a tecla não
estiver acionada, e piscar quando acionada.

2.2- Alterar o projeto para:

- acionar 2 leds (L0 e L1) e ao acionar a tecla os leds devem piscar


alternadamente, senão permanecem acesos.

- Fazer o novo fluxograma e o código.

109 FATEC TATUÍ

Você também pode gostar