Vous êtes sur la page 1sur 56

Centro Federal de Educao Tecnolgica de Minas Gerais

Campus III - Leopoldina


Coordenao de Eletrotcnica/Controle e Automao

1
10
0110
011111
11011101
0101011101
010100011100
11100101011001
1001000101011101

Elaborao:
Prof. Mrcio do Carmo B. P. Rodrigues
Prof. Gilberto Sousa Lopes
Agosto / 2008
Anlise de Sistemas Digitais

Bibliografia
[1] W. S. Zanco, Microcontroladores PIC 16F628A/648A Uma abordagem prtica e objetiva, Ed. rica.
[2] D. J. Souza, Desbravando o PIC, 6 Edio, Ed. rica.
[3] N. Matic (traduzido para o Portugus por A. Jernimo), The PIC microcontroller, livro on-line.
Disponvel em http://www.i-magazine.com.br/imagazine/picbook/livropic.htm
[4] Folha de dados do PIC 16F628A.
Disponvel em ww1.microchip.com/downloads/en/DeviceDoc/40044C.pdf
[5] R. J. Tocci, N. S. Widmer, Sistemas Digitais Princpios e Aplicaes, 8 Edio, Ed. Pearson.
[6] Notas de aula

Anlise de Sistemas Digitais

5. INTRODUO
Os sistemas digitais (combinaes de dispositivos eletrnicos projetados para manipular
informao ou grandezas fsicas) esto presentes em nosso dia-a-dia. So utilizados desde
eletrodomsticos a sistemas industriais, passando pelos computadores pessoais (PCs) e
telefones celulares. Baixo custo, flexibilidade e confiabilidade, dentre outras caractersticas,
fizeram com que processos industriais tradicionalmente controlados por circuitos analgicos
passassem a ser controlados por sistemas digitais programveis. O ncleo destes sistemas ,
geralmente, um microprocessador (MPU, do ingls microprocessor unit), ou um
microcontrolador (MCU, do ingls microcontroller unit) ou um processador digital de sinais
(DSP, do ingls digital signal processor). Estes dispositivos so conhecidos, genericamente,
como processadores. Pode-se citar como exemplo de aplicao* destas classes de
processadores:

Computador pessoal: microprocessadores (domnio da famlia Intel - 486, Pentium e seus


clones);
Controladores lgicos programveis: microprocessadores e microcontroladores
Aplicaes embarcadas: microcontroladores e DSPs;
Sistemas de processamento digital de sinais (instrumentos eletrnicos industriais e mdicos,
telefones celulares, entre outros): DSPs.

*Estas aplicaes foram citadas a ttulo de ilustrao, como reas de utilizao mais comum de cada classe de processador.
Pode haver, entretanto, o uso de qualquer classe de processador em praticamente qualquer tipo de aplicao.

2
Anlise de Sistemas Digitais

Existe, atualmente, uma grande quantidade de processadores disponveis no mercado,


produzidos por diversos fabricantes, tais como: Intel, Texas Instruments, Motorola, Microchip,
entre outros. Cada um destes fabricantes possui uma enorme lista de MPUs, MCUs e DSPs,
com diferentes caractersticas. Cada um desses processadores possui caractersticas
particulares que os diferenciam entre si, entretanto so muito parecidos conceitualmente
(mesmo entre diferentes classes de processadores). Deste modo, o estudo de uma estrutura
particular de processador permite que o estudo de outros processadores seja
consideravelmente simplificado. Conceitos como modos de endereamentos, unidade lgica e
aritmtica, unidade de controle e execuo, registradores, acesso a dispositivos de
entrada/sada e outros so comuns a todos os processadores.

Assim, nosso estudo ter incio com a anlise da arquitetura bsica de um computador digital.
Dentre os dispositivos citados, nosso estudo ser concentrado nos microcontroladores, pois
so amplamente utilizados em sistemas industriais. Especificamente, devido sua
versatilidade e simplicidade, alm do baixo custo, o dispositivo estudado ser o PIC 16F628A,
fabricado pela Microchip.

Microcontrolador* DSP* Microprocessador*


da Microchip da Texas Instruments da Intel Dentro de um microprocessador*
(Pentium Pro, da Intel)
3
*Imagens fora de escala

Anlise de Sistemas Digitais

5.1. Arquitetura Bsica de um Computador Digital


Um computador digital uma combinao de dispositivos e circuitos eletrnicos digitais que
podem realizar uma seqncia programada de operaes com mnima interveno humana.
Esta seqncia de operaes chamada de programa, que um conjunto de instrues
codificadas que armazenado na memria interna do computador juntamente com todos os
dados que o programa necessita.

A principal funo de um computador processar informaes, que so fornecidas por meio de


um dispositivo de entrada (ex.: teclado), retornando o resultado deste processamento ao
usurio (ou ao sistema) por meio de um dispositivo de sada (ex.: monitor de vdeo). O que o
computador vai fazer com as informaes recebidas pelo dispositivo de entrada depende do
programa armazenado em sua memria. Por exemplo, um programa pode simplesmente
efetuar a soma de dois nmeros ou controlar o lanamento de uma nave espacial.

Um computador digital composto, basicamente, por trs unidades:

UNIDADE CENTRAL DE PROCESSAMENTO (CPU, do ingls central processing unit);


UNIDADE DE MEMRIA;
UNIDADE DE ENTRADA/SADA (unidade de I/O, do ingls input/output).

Alm disso, existem os barramentos ou vias de dados, endereos e controle, responsveis


pela interligao entre estas unidades bsicas.
A organizao dos vrios elementos que compem um computador chamada de arquitetura
do computador.

4
Anlise de Sistemas Digitais

Regis-
tradores

Legenda
Controle
Dados/Endereos

Arquitetura Bsica de um Computador Digital 5

Anlise de Sistemas Digitais

5.1.1. Unidade Central de Processamento (CPU)


A unidade central de processamento responsvel pelo gerenciamento de todo o sistema e
pela execuo dos programas, executando vrias tarefas (chamadas instrues). o
crebro de um computador digital.
Para gerenciar o sistema, a CPU precisa se comunicar com a memria e com os dispositivos de
I/O, enviando ou recebendo informaes e, assim, viabilizando o seu processamento.
A CPU composta, basicamente, por trs mdulos (unidade lgica e aritmtica, unidade
de controle e rede de registradores), descritos a seguir:
UNIDADE LGICA E ARITMTICA (ULA ou ALU, do ingls arithmetic/logic unit)
a parte da CPU responsvel pela realizao de operaes lgicas (AND, OR, etc.) e
aritmticas (adio, subtrao, etc.).
O tipo de operao a ser realizado determinado pelos sinais da unidade de controle. Os
dados operados pela ALU podem ser oriundos da unidade de memria ou da unidade de
entrada. Os resultados das operaes realizadas na ALU podem ser transferidos tanto
para a unidade de memria (para armazenamento) como para a unidade de sada.

A ALU de um
microprocessador 386
(Intel, ~1990) caberia na
borracha de um lpis
(com folgaJ)

Foto de uma ALU do ano de 1957 6


(parte do computador Datamatic 1000 - Honeywell's)
Anlise de Sistemas Digitais

UNIDADE DE CONTROLE (UIC)


A unidade de controle, tambm chamada unidade de instruo e controle (UIC),
responsvel por comandar a operao de todas as outras unidades de um computador
digital, fornecendo sinais de controle e temporizao. Essa unidade contm circuitos
lgicos e de temporizao que geram os sinais necessrios para executar cada instruo
em um programa.
Para processar o programa armazenado na memria do computador digital, a UIC faz a
busca (na memria, que uma parte externa CPU) de cada instruo a ser executada,
as interpreta e executa. Este processo de busca e execuo realizado continuamente, de
forma seqencial, para cada uma das instrues contidas em tal programa.
A UIC pode ser comparada a um maestro, responsvel por manter cada um dos
membros da orquestra em sincronismo.
instrues

REGISTRADORES
A CPU possui um conjunto de registradores, divididos em dois grupos:
a) Registradores de uso geral (GPR, do ingls general purpose register): armazenam
dentro da CPU, temporariamente, dados que sero manipulados pelo programa em
execuo, evitando a necessidade de acessar a unidade de memria externa CPU;
b) Registradores de finalidade especfica (SFR, do ingls special function register):
so utilizados em tarefas pr-determinadas e realizam funes especiais como, por
exemplo, definir se um determinado terminal (pino) do microcontrolador se
comportar como um dispositivo de entrada ou de sada de dados.
7

Anlise de Sistemas Digitais

5.1.2. Unidade de Memria


A memria armazena grupos de bits que podem representar instrues (programa) que sero
executadas pela CPU ou dados que sero manipulados pelo programa. A memria tambm
serve para o armazenamento de resultados intermedirios ou finais das operaes aritmticas.
A operao da memria gerenciada pela UIC.
Dado da posio de memria 00h:
Dado da posio de memria 00h:
01000011
01000011 2
2
LOCALIDADES DE MEMRIA
A memria utilizada para armazenar informaes (dados e/ou
programas). Ela composta por vrias localidades (ou posies), nas
quais so armazenadas as informaes. Cada localidade possui um
endereo e capaz de armazenar o equivalente a um caractere. Por
exemplo, para so utilizadas 8 localidades de memria para
armazenar o nome CEFET-MG.
Fisicamente, cada localidade de memria capaz de armazenar um
conjunto de 8 bits (ou seja, 1 byte), representados em nveis lgicos de
tenso (ou seja, em binrio). Por exemplo, na localidade que est
armazenada a letra C (endereo 00h) existe, na verdade, um conjunto
de bits que representa tal letra (codificao em ASCII). Neste caso, o
dado armazenado na referida localidade de memria seria 010000112
(que o cdigo ASCII equivalente ao caractere C. Oportunamente a
utilizao desta codificao ser estudada).

Localidades 8
de memria
Anlise de Sistemas Digitais

MEMRIA DE DADOS E MEMRIA DE PROGRAMA


Muitas vezes os dados e os programas so armazenados em localidades de memria
diferentes, com caractersticas especficas.
A regio da memria que armazena o programa que ser executado pela CPU chamada
de memria de programa. Deve ser uma memria do tipo no-voltil (no perde as
informaes quando sua alimentao desligada) pois as instrues contidas no programa
precisam ser executadas cada vez que for iniciada a operao do computador.
J a regio da memria responsvel por armazenar os dados que esto sendo
processados chamada memria de dados. Neste caso, utiliza-se memrias do tipo
voltil (os dados so armazenados enquanto a memria for alimentada), pois os dados
processados vo sendo alterados ao longo da execuo do programa.
Em geral, as memrias volteis so mais rpidas (operam em maiores freqncias) que
as no-volteis.
MEMRIAS SEMICONDUTORAS
A implementao da unidade de memria feita atravs dos dispositivos semicondutores
(chips de memria). Estes circuitos integrados so classificados quanto volatilidade
apresentada e a possibilidade de leitura e/ou escrita na memria.

Memria

No-voltil Voltil

ROM PROM EPROM EEPROM FLASH ROM DRAM SRAM

Anlise de Sistemas Digitais

PRINCIPAIS CARACTERSTICAS
ROM (read-only memory)
q Somente leitura;
q Sai de fbrica com os dados j programados;
q No pode ser reprogramada

PROM (programmable read-only memory)


q Somente leitura;
q Programada eletricamente pelo usurio (uma nica vez);
q No pode ser reprogramada

EPROM (eletrically programmable read-only memory)


q Somente leitura; EPROM*
q Programada eletricamente pelo usurio;
q Pode ser reprogramada (os dados so apagados com luz ultravioleta)
EEPROM ou E2PROM (eletrically erasable programmable read-only memory)
q Somente leitura;
q Pode ser programada e reprogramada pelo usurio (os dados so apagados eletricamente);

FLASH ROM (memria flash)


q Somente leitura;
q Programada eletricamente pelo usurio;
q Pode ser reprogramada (por meio de software especfico)

Cartes de memria e pendrive*

10
Flash-BIOS *
*Imagens fora de escala
Anlise de Sistemas Digitais

SRAM (static random access memory)


q Leitura e escrita;
q Circuito eletrnico composto por flip-flops;

DRAM (dynamic random access memory)


q Leitura e escrita;
q Circuito eletrnico composto por capacitores (requer REFRESH para manter os dados
armazenados, mesmo com a alimentao do circuito ligada);
q Alguns tipos de DRAM: EDRAM, FPM, EDO, SDRAM, DDR. Simulao de leitura que
Simulao de leitura que
feita em cada
feita em cada
localidade com o
localidade com o
SRAM x DRAM SRAM DRAM
objetivo de reforar os
objetivo de reforar os
dados armazenados
dados armazenados

C
(recarregar os
Velocidade maior menor (recarregar os
capacitores). Valor tpico
capacitores). Valor tpico
Refresh no
C sim para o ciclo de refresh:
para o ciclo de refresh:
15 ms.
15 ms.
Tamanho Fsico maior menor
C
Custo maior menor
C

Chip DRAM (256 kB)*

Pentes de memria
EDO (DRAM, 32 MB)*
DDR (1 GB)*

Chips de Video RAM (SRAM)* 11


Pente de memria DDR
(DRAM, 1 GB)* *Imagens fora de escala

Anlise de Sistemas Digitais

5.1.3. Unidade de Entrada/Sada (I/O)

A unidade de I/O responsvel pela entrada e sada de dados do sistema. a porta de


entrada e/ou sada de um computador digital.
Os dispositivos que fazem parte da unidade de I/O so denominados perifricos, pois so
externos ao resto do computador. Como exemplos de dispositivos de I/O, pode-se citar:
teclado, monitor de vdeo, impressora, modem, unidades de disco, leitores de cartes
magnticos, conversores analgico-digital (ADC) e digital-analgico (DAC), display de 7
segmentos, display de cristal lquido (LCD), entre outros.
Muitos dispositivos de I/O no so diretamente compatveis com a CPU devido s diferenas
em caractersticas como velocidade de operao, formato do dados (ex.: BCD, ASCII, binrio),
modo de transmisso de dados (ex.: serial, paralelo) e nvel lgico de sinais. Isso significa que
quando uma informao entra no sistema por meio de um perifrico, ela pode precisar ser
convertida, antes de ser processada pela CPU. Esta converso feita por mdulos conhecidos
como interfaces. Tratando-se de sistemas computacionais, define-se interfaceamento como
a transmisso digital de informao entre um computador e seus perifricos, de modo
compatvel e sincronizado.
Exemplo: Um monitor de vdeo recebe dados serialmente (um de cada vez), enquanto a
maioria dos computadores digitais manipula os dados no formato paralelo. Deste modo, o
monitor de vdeo necessita de circuitos de interface (placa de vdeo) para receber dados do
computador.

12
Anlise de Sistemas Digitais

5.1.4. Barramentos
Para gerenciar o sistema, a CPU precisa se comunicar com a memria e com os dispositivos de
I/O. Esta comunicao feita por meio dos barramentos, que so conjuntos de fios que
ligam a CPU memria e aos dispositivos de I/O. Os termos via e bus tambm so utilizados
para designar o termo barramento.
Existem dois modos de comunicao da CPU com a memria ou dispositivos de I/O:
a) Escrita: quando a CPU envia uma informao para ser armazenada numa localidade
de memria ou para um dispositivo de I/O.
b) Leitura: quando a CPU busca uma informao na memria ou num dispositivo de I/O.
Os barramentos so divididos em trs grupos:
BARRAMENTO DE DADOS
Caminho por onde trafegam os dados trocados (enviados e recebidos) entre a CPU e o
resto do sistema.
BARRAMENTO DE ENDEREOS
utilizado quando a CPU precisa se comunicar com a memria ou com um dispositivo de
I/O. Cada localidade de memria, assim como cada dispositivo de I/O, possui um
endereo, que um valor numrico (geralmente representado em hexadecimal). Por
exemplo, quando a CPU faz uma leitura no teclado, ela coloca o valor correspondente ao
endereo do teclado no barramento de endereos. O endereo chegar a todos os que
estiverem ligados ao barramento de endereos, mas s ser identificado pelo teclado,
que atender ao chamado da CPU. O mesmo ocorre quando a CPU tem que armazenar
um determinado dado na memria: o endereo da localidade de memria desejado
colocado no barramento de endereos.
BARRAMETO DE CONTROLE
Caminho por onde trafegam os sinais de controle, que informam para o sistema o tipo de
comunicao e como esta ser executada. Ex.: operao de escrita ou leitura na
memria. 13

Anlise de Sistemas Digitais

5.2. Arquiteturas Von-Neumann e Harvard


Existem, basicamente, duas formas de apresentao da estrutura interna de um computador
digital, conhecidas como arquitetura tipo Von-Neumann e arquitetura tipo Harvard.

Von-Neumann Harvard

Utiliza dois barramentos, um para


Utiliza um nico barramento, acessar a memrias de dados e
para acesso s memrias de dados outro para acessar a memria de
e programa. programa.

Torna
Tornaooprocessamento
processamentomais
maisrpido,
rpido,pois,
pois,
no
no mesmo instante em que umainstruo
mesmo instante em que uma instruo
est
estsendo
sendoexecutada
executadapela
pelaCPU,
CPU,aaprxima
prxima
instruo
instruo pode ser buscada na memriade
pode ser buscada na memria de
programa.
programa. 14
Anlise de Sistemas Digitais

5.3. CISC x RISC


A principal funo de um computador digital executar uma srie de ordens (comandos ou
instrues), armazenados em um programa, na sua memria. Cada uma destas instrues
interpretada pela CPU e, ento, executada. Assim, cada tipo de computador digital, deve ter
um conjunto de instrues (ou set de instrues) definidas, de modo que sua CPU possa
interpret-las e execut-las. Em funo deste conjunto de instrues, existem duas classes de
computadores digitais:

CISC (complex instruction set computer)


q Conjunto de instrues ampliado, ou seja, a CPU capaz de executar um grande
nmero de instrues (ex.: microcontrolador 8051, da Intel, com 111 instrues);
q Computadores com arquitetura Von-Neumann.
RISC (reduced instruction set computer)
q Conjunto de instrues reduzido (ex.: microcontrolador PIC16F628A, da Microchip,
com 35 instrues);
q Computadores com arquitetura Harvard.

Isso
Issotorna
tornaooaprendizado
aprendizadomais
maisfcil
fcileedinmico.
dinmico.
Entretanto,
Entretanto, implica no fato que muitasfunes
implica no fato que muitas funesdevero
deveroser
ser
construdas
construdas (pois no existe uma instruo querealize,
(pois no existe uma instruo que realize,
diretamente,
diretamente,algumas
algumasoperaes
operaesquequepodem
podemser sernecessrias),
necessrias),
exigindo
exigindomaior
maiorhabilidade
habilidadedodoprojetista.
projetista.
15

Anlise de Sistemas Digitais

5.4. Microprocessadores x Microcontroladores


MICROPROCESSADOR

Um microprocessador (MPU, microprocessor unit)


uma CPU de pequeno porte, capaz de executar um
determinado conjunto de instrues. o corao
de um computador digital.
Para formar um computador digital, necessria,
alm do MPU, a existncia de memrias e
dispositivos de I/O.
Exemplos: 8088, 80286, 80386, 80486, Pentium
(todos da Intel), entre outros.

MICROCONTROLADOR

Um microcontrolador (MCU, microcontroller unit) um


componente eletrnico que possui microprocessador,
memria e dispositivos de I/O em um mesmo
encapsulamento (CI). um computador em um nico
chip.
Exemplos: 8051 (Intel), 68HC05(Motorola), PIC16F628A
(Microchip), PIC18F452 (Microchip), entre outros.

Microcontrolador (MCU) 16
Anlise de Sistemas Digitais

6. MICROCONTROLADOR PIC 16F628A


6.1. Introduo
Os microcontroladores comearam a ser fabricados a partir da dcada de 1980 e a famlia 8051, da
Intel tornou-se um padro. Com o tempo, outros microcontroladores, de outros fabricantes, foram
conquistando o seu espao no mercado. Alm disso, os microcontroladores foram se tornando mais
robustos e com maior capacidade de processamento, ficando cada vez mais rpidos, com novos
dispositivos de I/O integrados, tais como, USART (universal synchronous/asynchronous
receiver/transmitter, que um tipo de interface serial para comunicao) , conversor A/D, PWM (pulse-
width modulation, modulao por largura de pulso), oscilador interno, modulador de RF (rdio
freqncia), interfaces CAN (controller area network), SPI (serial peripheral interface) , I2C (inter-
integrated circuit, tipo de barramento utilizado para interconectar perifricos e microcontrolador), etc.

6.2. Microcontroladores da Famlia PIC


Famlia de microcontroladores fabricados pela Microchip Technology (www.microchip.com);
Apresenta centenas de MCUs, com caractersticas especficas.
Baseados na arquitetura Harvard (RISC);
Operam com clock de at 40 MHz;
Memria de dados com 8 bits ou 16 bits (dependendo do MCU);
Memria de programa:
Pode apresentar 12 bits, 14 bits ou 16 bits em cada localidade (dependendo do MCU);
Diferentes tecnologias:
ROM tipo mscara (o chip j sai gravado de fbrica, sem possibilidade de regravao
vantagem: baixssimo custo; chips com sufixo CR ex.: 16CR56A );
OTP (utiliza PROM, ou seja, o chip pode ser gravado uma nica vez; sufixo C
ex.: 16C432);
EPROM (chips com sufixo JW ou CL)
FLASH (podem ser gravados e regravados eletricamente, milhares de vezes; chips 17com
sufixo F)
Anlise de Sistemas Digitais

6.3. Caractersticas do Microcontrolador PIC 16F628A

16 pinos de I/O;
Freqncia de operao de at 20 MHz;
Oscilador interno de 4 MHz / 37 kHz;
Memria de programa (FLASH): 2k x 14 bits;
Memria de dados (RAM): 224 x 8 bits;
Memria EEPROM interna: 128 x 8 bits;
Mdulos de temporizao: TIMER 0 (8 bits), TIMER 1 (16 bits) e TIMER 2 (8 bits);
Mdulo CCP (modos capture, compare e PWM);
2 comparadores analgicos (referncia de tenso interna programvel);
1 canal de comunicao serial USART;
Watchdog timer;
Capacidade de corrente de 25 mA por pino de I/O;
35 instrues (RISC);
10 fontes de interrupo independentes;
Modo de funcionamento sleep;
Opera com tenso de alimentao entre 3 V e 5 V.

18
Anlise de Sistemas Digitais

6.3. Pinagem do PIC 16F628A (encapsulamentos DIP e SOIC)


PINO TIPO DESCRIO
PORTA (bit 2)/ Entr. do comparador analgico/
1 Entrada/Sada
Sada da tenso de referncia.
PORTA (bit 3)/ Entr. do comparador analgico/
2 Entrada/Sada
Sada do comparador 1.
PORTA (bit 4)/ Entr. de clock externo do TMR0/
3 Entrada/Sada
Sada do comparador 2. ***Sada dreno aberto***
4 Entrada PORTA (bit 5)/ Reset CPU/ Tenso de programao
5 Alimentao Terra (GND)
6 Entrada/Sada PORTB (bit 0)/ Entr. de interrupo externa
PORTB (bit 1)/ Recepo USART (modo assncr.) /
7 Entrada/Sada
Dados (modo sncrono)
PINO TIPO DESCRIO
PORTB (bit 2)/Transmisso USART (modo assnc.)/
8 Entrada/Sada PORTA (bit 7)/ Entr. para
Clock (modo sncrono)
16 Entrada/Sada cristal oscilador/ Entr. de clock
9 Entrada/Sada PORTB (bit 3)/ Entr. ou sada do mdulo CPP externo.
10 Entrada/Sada PORTB (bit 4)/ Entr. de programao LVP*. PORTA (bit 0)/ Entrada do
17 Entrada/Sada
comparador analgico
11 Entrada/Sada PORTB (bit 5)
PORTA (bit 1)/ Entrada do
PORTB (bit 6)/ Entr. do oscilador TMR1/ Entr. de 18 Entrada/Sada
12 Entrada/Sada comparador analgico
clock do TMR1/ Clock na programao ICSP*.
PORTB (bit 7)/ Entr. do oscilador TMR1/ Dados na
13 Entrada/Sada
programao ICSP. OBS.:
14 Alimentao Alimentao positiva (+5V) *Dreno aberto: deve ser conectado um
resistor de pull-up ao pino
PORTA (bit 6)/ Entr. para cristal oscilador/ Sada *LVP: baixa tenso de programao
15 Entrada/Sada 19
de clock. *ICSP: gravao in-circuit

Anlise de Sistemas Digitais

6.4. Arquitetura Interna do PIC 16F628A

20
Anlise de Sistemas Digitais

6.5. Execuo e Busca de Instrues


Toda CPU capaz de executar vrias tarefas denominadas instrues. A base de tempo utilizada pela CPU para
executar cada instruo obtida a partir de um sinal de clock (que pode ser gerado internamente ao MCU ou
proveniente de um oscilador externo). Nos MCUs da famlia PIC, a freqncia do sinal de clock dividida,
internamente, por quatro. Este novo sinal de clock, cuja freqncia da freqncia do clock original, define o
ciclo de instruo do microcontrolador. O PIC 16F628A possui um oscilador interno capaz de gerar um sinal de
freqncia de at 4 MHz. Alm disso, pode operar, utilizando um oscilador externo, em at 20 MHz.

21

Anlise de Sistemas Digitais

Quase todas as instrues do PIC 16F628A so executadas em um ciclo de instruo. O processo de busca e
execuo de instrues deste microcontrolador ilustrado abaixo:

OOcontador
contadorde
deprograma
programa(PC,
(PC,do
doingls
inglsprogram
programcounter)
counter)indica
indicaaaposio
posio
da
da memria de programa que contm a instruo que est sendobuscada.
memria de programa que contm a instruo que est sendo buscada.

PC=01
Memria de Programa
Enquanto a CPU executa a instruo NO FAZER NADA (que
est na posio de memria PC-1), feita a busca da prxima
instruo a ser executada (que est armazenada na memria de NO FAZER NADA 00h
programa na posio PC, ou seja, na posio de mem. 01h).
SETAR PINO1 01h
PC=02
MOVER 10010110,TRISA 02h
A CPU executa a instruo SETAR PINO1 (que est na posio
de memria PC-1) e feita a busca da prxima instruo a ser NO FAZER NADA 03h
executada (que est armazenada na memria de programa na
posio 02h, ou seja, na posio de memria PC). RESETAR PC 04h
..
. Esta caracterstica de buscar a
..
Esta caracterstica de buscar a .
instruo em um ciclo de
instruo em um ciclo de
mquina
mquina eeexecut-la
execut-lano
no
prximo
prximo torna osistema
torna o sistemamais
mais
rpido e conhecida como
rpido e conhecida como
pipeline
pipeline. .
22
Anlise de Sistemas Digitais

7. SET DE INSTRUES DO PIC 16F628A


7.1. Formato das Instrues
As instrues so formadas por um conjunto de bits que so decodificados pelo microcontrolador,
fazendo com que ele execute uma operao bem definida. A quantidade de bits pode variar de uma
instruo para outra, dependendo do microcontrolador. No caso do PIC 16F628A, todas as
instrues possuem o mesmo tamanho: 14 bits.

As instrues so compostas de dois campos: cdigo de operao (OP. CODE) e operando. Os


primeiros bits de uma instruo representam o OP. CODE e os demais formam o operando, podendo
conter dados, endereo ou o nome de um registrador.

Cdigo de operao (OP. CODE)


o campo da instruo que especifica qual tarefa deve ser realizada pelo MCU quando a instruo
processada. O OP. CODE um conjunto de bits (representado em binrio ou em hexadecimal). Para
facilitar o desenvolvimento dos programas, dado um nome a cada instruo (que associada a um
determinado OP. CODE). Este nome o MNEMNICO da instruo, que uma forma abreviada da
descrio da instruo (em ingls). Exs: MOV (mover), ADD (somar), CLR (limpar), NOP (no fazer
nada).

Operando
Representa quais elementos sero envolvidos na instruo definida. Por exemplo, numa operao
de armazenamento de dados na memria, o operando composto pelo dado que ser armazenado e o
endereo da localidade de memria onde ele deve ser armazenado. No caso do PIC 16F628A, os
operandos de uma instruo podem ser do tipo REGISTRADOR, BIT DE UM REGISTRADOR ou DADO.
Existem algumas instrues que no possuem operandos, como veremos adiante.

23

Anlise de Sistemas Digitais

7.1. Nomenclatura das Instrues


A sintaxe utilizada na construo dos mnemnicos das instrues segue uma lgica. Conhecer a nomenclatura
adotada pelo fabricante facilita o entendimento do significado de cada instruo.
W : Representa o registrador WORK (em alguns MCUs este registrador conhecido como acumulador). um
registrador que no mapeado na memria de dados (ao contrrio dos outros SFR), mas muito
utilizado, pois no possvel escrever um dado em um outro registrador sem que antes a informao
passe pelo registrador W.
F : (File) Representa uma posio de memria ou um registrador.

L : (Literal) A instruo opera um valor numrico (constante), que pode ser representado em decimal, binrio,
octal, hexadecimal ou ASCII.
B : (Bit) Representa um bit dentro de um byte.
T : (Teste) Indica que a instruo far um teste em um determinado bit, dentro de um byte, para verificar se
ele 0 ou 1.
S : (Skip) Indica que a prxima linha do programa ser pulada se uma certa condio for satisfeita.

S : Aparecendo como ltima letra do mnemnico, S significa que um determinado bit, dentro de um byte,
ser SETADO, ou seja, levado a nvel lgico 1.
C : (Clear) Indica que um determinado bit, dentro de um byte, ser LIMPO, ou seja, levado a nvel lgico 0.
Nas instrues de desvio, o S e C tambm so usados para indicar se um bit est em 1 ou 0, respectivamente.

Z : (Zero) Indica que o resultado da ltima operao matemtica foi zero.

q Termos utilizados para indicar a tarefa que ser realizada por uma instruo:
ADD (soma de 2 nmeros); AND (operao lgica E entre 2 nmeros); IOR (operao lgica OU entre 2
nmeros); CLR (limpar); COM (complemento inverso bit a bit); DEC (decremento de um nmero);
INC (incremento de um nmero); MOV (mover uma informao para algum lugar); RL (rotacionar um bit para
a esquerda); RR (rotacionar um bit para a direita); SUB (subtrao entre 2 nmeros); SWAP (inverte os
nibbles alto e baixo de um byte 1 nibble = 4 bits); XOR (operao lgica OU EXCLUSIVO entre 2 nmeros).
24
Anlise de Sistemas Digitais

Legenda
7.2. Instrues do PIC 16F628A f : registrador b: bit
d : destino k: constante
(0W; 1 registrador f)

OP. CODE Status


Instruo Descrio Exemplo
(14 bits) afetado
Operaes com registradores
ADDWF f,d Soma W e f: d (W+f) 00 0111 dfff ffff C, CD, Z ADDWF REG1,0
ANDWF f,d AND entre W e f: d (W AND f) 00 0101 dfff ffff Z ANDWF REG1,1
CLRF f Limpa f 00 0001 1fff ffff Z CRLF REG1
CLRW Limpa W 00 0001 0000 0011 Z CLRW
COMF f,d Complemento de f: d NOT(f) 00 1001 dfff ffff Z COMF REG1,0
DECF f,d d (f-1) 00 0011 dfff ffff Z DECF CONT,1
DECFSZ f,d d (f-1) e salta prxima linha se o resultado for zero 00 1011 dfff ffff DECFSZ REG,1
INCF f,d d (f+1) 00 1010 dfff ffff Z INCF CONT,1
INCFSZ f,d d (f+1) e salta prxima linha se o resultado for zero 00 1111 dfff ffff INCFSZ REG1,1
IORWF f,d OR entre W e f: d (W OR f) 00 0100 dfff ffff Z IORWF REG1,0
MOVF f,d d cpia de f 00 1000 dfff ffff Z MOVF REG1,0
MOVWF f f cpia de W 00 0000 1fff ffff MOVWF REG1
RLF f,d rotaciona f um bit para a esquerda e copia em d 00 1101 dfff ffff C RLF REG1,0
RRF f,d rotaciona f um bit para a direita e copia em d 00 1100 dfff ffff C RRF REG1,0
SUBWF f,d Subtrai W de f: d (f-W) 00 0010 dfff ffff C, CD, Z SUBWF REG1,1
SWAPF f,d inverte nibble alto com nibble baixo (de f) e guarda resultado em d 00 1110 dfff ffff SWAPF REG1,1
XORWF f,d OU EXCLUSIVO entre W e f: d (W XOR f) 00 0110 dfff ffff Z XORWF 25
REG1,0

Anlise de Sistemas Digitais

Instrues (continuao)
OP. CODE Status
Instruo Descrio Exemplo
(14 bits) afetado
Operaes com bits
BCF f,b Reseta (clear) o bit b do registrador f 01 00bb bfff ffff BCF REG1,7
BSF f,b Seta o bit b do registrador f 01 01bb bfff ffff BSF REG1,5
BTFSC f,b Testa o bit b do registrador f e salta a prxima linha se ele for "0" 01 10bb bfff ffff BTFSC REG1,4
BTFSS f,b Testa o bit b do registrador f e salta a prxima linha se ele for "1" 01 11bb bfff ffff BTFSS REG1,3
Operaes com literais (valores numricos)
ADDLW k W (W+k) 11 111x kkkk kkkk C, CD, Z ADDLW 0x15
ANDLW k W (W AND k) 11 1001 kkkk kkkk Z ANDLW 0x5F
IORLW k W (W OR k) 11 1000 kkkk kkkk Z IORLW 0X3D
MOVLW k Wk 11 00xx kkkk kkkk MOVLW 0X5A
SUBLW k W (k-W) 11 110x kkkk kkkk C, CD, Z SUBLW 0X02
XORLW k W (W XOR k) 11 1010 kkkk kkkk Z XORLW 0XAF
Operaes de Controle
NOP "No operation" (no faz nada) 00 0000 0xx0 0000 NOP
CALL k Chamada sub-rotina 10 0kkk kkkk kkkk CALL ROTINA1
CLRWDT Limpa WDT (watch-dog) 00 0000 0110 0100 TO, PD CLRWDT
GOTO k Desvio para endereo 10 1kkk kkkk kkkk GOTO INICIO
RETFIE Retorno de interrupo 00 0000 0000 1001 RETFIE
RETLW k Retorno de sub-rotina com k armazenado em W 11 01kk kkkk kkkk RETLW 0X25
RETURN Retorno de sub-rotina 00 0000 0000 1000 RETURN
SLEEP Coloca o PIC em modo de economia de energia (sleep) 00 0000 0110 0011 TO, PD SLEEP 26
Anlise de Sistemas Digitais

8. MAPEAMENTO DE MEMRIA
O microcontrolador PIC 16F628A possui trs memrias distintas:

Tipo Funo Tamanho

Flash Memria de programa 2048x14

RAM Memria de dados 224x8

Armazenamento de dados que no podem ser


EEPROM 128x8
perdidos quando a energia for desligada

8.1. Memria EEPROM


128 posies, cada uma com capacidade de armazenamento de 1 byte;

Faixa de endereos para acesso: 00h 7Fh;

Acesso realizado por meio dos registradores EECON1, EECON2, EEDATA e EEADR.

27

Anlise de Sistemas Digitais

8.2. Memria de Programa


Flash-ROM;
2048 localidades de 14 bits.
Endereos de 0000h a 07FFh.
Primeiro
Primeiroendereo
endereoda
damemria
memriadedeprograma
programa
que
que executado quando o PIC comeaaarodar
executado quando o PIC comea rodar
Vetor de reset 0000h
(aps
(apsaaalimentao
alimentaoou
ouum
umreset).
reset).
Reservado 0001h

Reservado 0002h

Reservado 0003h
Utilizado
Utilizadopara
paraooincio
inciodo
dotratamento
tratamento
Vetor de interrupo 0004h de todas as interrupes.
de todas as interrupes.
0005h

Memria de Programa

07FFh 28
Eletrnica Digital/Microcontroladores

8.3. Memria de Dados


Mapeamento da Memria RAM

44bancos
bancosdedememria;
memria;
Contm
Contm osSFRs
os SFRseeososGPRs;
GPRs;
224
224 posies de 8 bitspara
posies de 8 bits parauso
usogeral
geral
(GPR);
(GPR);
Espelho
Espelhodas
das16
16ltimas
ltimasposies
posiesde
de
mem.
mem. do banco 0 (70h7Fh)nos
do banco 0 (70h7Fh) nosoutros
outros
bancos.
bancos.

29

8.4. Registradores com Finalidades Especficas (SFR)

So utilizados para
configurar as
caractersticas da operao
do MCU como, por
exemplo, se um
determinado pino ser uma
entrada ou sada de dados.

SFRs
SFRs
(BANCO
(BANCO0) 0)

Legenda:
R: bit de leitura
W: bit de escrita
n: valor assumido no POR (0 ou 1)
x: valor desconhecido no POR
q: depende da condio
-: no implementado.

OBS.:POR=Power-on reset

30
SFRs
SFRs
(BANCO
(BANCO1) 1)

31

SFRs
SFRs
(BANCO
(BANCO2) 2)

32
SFRs
SFRs
(BANCO
(BANCO3) 3)

33

Anlise de Sistemas Digitais

Legenda:
8.4.1. Registrador STATUS
R: bit de leitura -n: valor assumido no POR (0 ou 1)
O registrador STATUS contm informaes W: bit de escrita -x: valor desconhecido no POR
sobre o estado da ALU, a forma do ltimo Reset
e os bits que selecionam os bancos da memria
de dados.

Registrador STATUS (Endereos: 03h, 83h, 103h e 183h)

Chaves de seleo de banco de memria


(paginao de memria endereamento direto) Z (bit zero): indica que o resultado da ltima
operao realizada pela ALU zero (Z=1);
RP1 RP0 Seleo
0 0 Banco 0 DC (digit carry/borrow): indica que a ltima
operao de soma (instrues ADD) provocou
0 1 Banco 1 um estouro (vai-um) entre os bits 3 e 4, isto
, o resultado ultrapassou os 4 bits menos
1 0 Banco 2 significativos (DC=1);

1 1 Banco 3 C (carry/borrow): indica que a ltima


operao de soma (instrues ADD) provocou
um estouro (vai-um) no bit 7, isto , o
resultado ultrapassou os 8 bits dos
registradores envolvidos (C=1).

34
Anlise de Sistemas Digitais

Legenda:
8.4.2. Registradores PCL e PCLATH R: bit de leitura -n: valor assumido no POR (0 ou 1)
W: bit de escrita -x: valor desconhecido no POR
O CONTADOR DE PROGRAMA (PC) do PIC 16F268A
possui 13 bits. O byte menos significativo do PC
(PC<7:0>) fica no registrador PCL. A parte alta do PC
(PC<12:8>) no diretamente endereada, mas
fornecida pelos 5 bits menos significativos do
registrador PCLATH (PCLATH<4:0>).

Registrador PCLATH Registrador PCL


(Endereos: 0Ah, 8Ah, 10Ah e 18Ah) (Endereos: 02h, 82h, 102h e 182h)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

PC bit12 bit11 bit10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

parte alta parte baixa

Obs.: Alterar o valor do PC (escrever em PCL e/ou em


Obs.: Alterar o valor do PC (escrever em PCL e/ou em
PCLATH) pode fazer com que o programa no seja
PCLATH) pode fazer com que o programa no seja
executado corretamente. 35
executado corretamente.
Anlise de Sistemas Digitais

9. PORTAS DE I/O
O PIC 16F628A possui duas portas de I/O, com 8 bits cada, chamadas
PORTA (pinos RA7:RA0) e PORTB (pinos RB7:RB0). Cada bit de cada
porta est associado ao respectivo pino do MCU, podendo ser configurado
como entrada ou sada, independentemente dos demais.

9.1. Nveis de Tenso

ENTRADA

VIL
0 0,8 V
(tenso de entrada baixa, 0)

VIH
2 V VDD
(tenso de entrada alta, 1)

SADA
VOL 0,6 V
(tenso de sada baixa, 0)

VOH (VDD - 0,7 V)


(tenso de sada alta, 1)

Obs.: 4,5 V < VDD < 5,5 V 36

Anlise de Sistemas Digitais

9.2. Registradores Associados s Portas de I/O

q PORTA
TRISA: configura os pinos da PORTA como entrada ou sada 0 = Output (sada)
1 = Input (entrada)
PORTA: acesso aos bits da PORTA (leitura ou escrita).

Obs.: Alguns bits dos registradores CMCON (bits 3:0) e VRCON (bits 7 e 6) tm influncia sobre a
PORTA.

Master Clear Enable (bit 5 do registrador CONFIG, que s pode ser acessado durante a programao do MCU).

37
Anlise de Sistemas Digitais

q PORTB
TRISB: configura os pinos da PORTB como entrada ou sada 0 = Output (sada)
1 = Input (entrada)
PORTB: acesso aos bits da PORTB (leitura ou escrita).

Obs.: O bit 7 do registrador OPTION (referenciado como OPTION_REG nos programas em


assembly) tem influncia sobre a PORTB

Low-Voltage Programming (bit 7 do registrador CONFIG, que s pode ser acessado durante a programao do MCU).

38

Anlise de Sistemas Digitais

9.3. Inicializando as Portas de I/O


Antes de utilizar as portas de I/O do MCU, preciso configur-las de acordo com a necessidade de cada
aplicao. Abaixo so mostrados trechos de cdigos de programa utilizados para inicializar as portas de
I/O do PIC 16F628A, configurando seus pinos como entradas ou sadas.

q Inicializando a PORTA
;**********************************************************************************************************************************
BCF STATUS,RP1 ;RP1=0
BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1
MOVLW B00000110 ;W00000110 (VALOR EM BINARIO)
MOVWF TRISA ;RA2 E RA1 CONFIGURADOS COMO ENTRADAS E OS DEMAIS COMO SAIDAS
BCF STATUS,RP1 ;RP1=0
BCF STATUS,RP0 ;RP0=0 => SELECIONA BANCO0
MOVLW B00000111 ; W00000110 (VALOR EM BINARIO)
MOVWF CMCON ;CONFIGURA OS BITS RA3:RA0 COMO I/O
;**********************************************************************************************************************************

q Inicializando a PORTB

;**********************************************************************************************************************************
BCF STATUS,RP1 ;RP1=0
BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1
MOVLW B00000000 ; W00000000 (VALOR EM BINARIO)
MOVWF TRISB ;TODOS OS BITS DA PORTB CONFIGURADOS COMO SAIDA
MOVLW B10000000 ; W10000000 (VALOR EM BINARIO)
MOVWF OPTION_REG ;SETA BIT 7 (DESABILITA RESISTORES DE PULL-UP INTERNOS)
;**********************************************************************************************************************************
39
Anlise de Sistemas Digitais

9.4. Acessando o Hardware


A interface entre o programa e os pinos do PIC (hardware) feita pelos registradores PORTA e PORTB.
Quando, por exemplo, um determinado pino est configurado como sada, o nvel lgico que for colocado
pelo programa no respectivo bit daquele PORT aparece no pino. Da mesma forma, quando um pino est
configurado como entrada, a leitura do pino obtida por meio da leitura do respectivo bit do PORT.

9.4.1. Leitura de uma Porta de I/O


Suponha que todos os bits de um PORT estejam configurados como entrada. Existem duas
maneiras de efetuar a leitura dos pinos da porta de I/O relacionada:

i) Lendo todos os pinos de uma s vez


;**********************************************************************************************************************************
;ESTE EXEMPLO LE TODOS OS BITS DA PORTB E COPIA O VALOR LIDO PARA UMA VARIAVEL TEMP

MOVF PORTB,W ;WPORTB


MOVWF TEMP ;TEMPW (OU SEJA, TEMPPORTB)
;**********************************************************************************************************************************

ii) Lendo um pino de cada vez


;**********************************************************************************************************************************
;ESTE EXEMPLO LE O BIT RBO (PORTB<0>)

BTFSS PORTB,0 ;LE O PINO 7 (RB0) E TESTA SE ESTA SETADO (RB0=1?)


GOTO PINO_BAIXO ;RB0=0 (DESVIA PARA PARTE DO PROGRAMA RELACIONADA)
GOTO PINO_ALTO ;RB0=1 (DESVIA PARA PARTE DO PROGRAMA RELACIONADA)
;**********************************************************************************************************************************
40

Anlise de Sistemas Digitais

9.4.1. Escrita em uma Porta de I/O


Quando os pinos de um PORT esto configurados como sada, o nvel lgico no respectivo pino d
porta deve ser fornecido pelo programa. Isso pode ser feito de uma s vez ou bit a bit, assim
como na leitura. Nos exemplos abaixo, supomos que todos os pinos da PORTB (RB7:RB0) e o pino
17 (RA0) esto configurados como sada.

i) Escrevendo em todos os pinos de uma s vez


;**********************************************************************************************************************************
;ESTE EXEMPLO ESCREVE NO PORTB O VALOR 0Fh (00001111, EM BINARIO)

MOVLW B00001111 ;W00001111 (VALOR EM BINARIO)


MOVWF PORTB ;PORTBW (OU SEJA, PORTB00001111)
;**********************************************************************************************************************************

ii) Escrevendo em um pino individualmente


;**********************************************************************************************************************************
;ESTE EXEMPLO ESCREVE NO BIT RAO (PORTA<0>, PINO 17)

BCF PORTA,0 ;ESCREVE 0 NO BIT RA0 (PORTA<0>, PINO 17)


;**********************************************************************************************************************************

41
Anlise de Sistemas Digitais

10. MPLAB IDE DESENVOLVENDO APLICAES

10.1. Introduo

Um microcontrolador um circuito capaz de executar vrias instrues, que se executadas seguindo uma
determinada lgica, o MCU pode ser utilizado na soluo de problemas do dia-a-dia. Para que o
microcontrolador seja utilizado na soluo de problemas, ele precisa ser programado.

Para que um programa seja executado, ele deve ser armazenado na memria de programa do
microcontrolador. Cada instruo que compe o programa representada no sistema binrio, ou seja, um
conjunto de bits que representa uma determinada tarefa que pode ser executada pelo MCU.

Os programas eram escritos em linguagem de mquina, ou seja, as instrues eram representadas pelos
seus respectivos cdigos binrios. Isso fazia do ato de programar uma tarefa muito penosa.

Imagine s um programa escrito em linguagem de mquina com 2.000 instrues, cada instruo
representada por um conjunto de 14 bits. Com o tempo foi desenvolvido uma linguagem de programao que
substitua o cdigo binrio de cada instruo por um mnemnico. Surgia a Linguagem Assembly.

Na Linguagem Assembly, um programa Editor de Texto utilizado para editar o programa em Assembly
(programa-fonte) e um programa chamado Montador the Assembler o responsvel pela converso dos
mnemnicos em linguagem de mquina ( programa objeto ). Um equipamento chamado programador
utilizado para colocar o programa em linguagem de mquina, na memria de programa do microcontrolador.
42

Anlise de Sistemas Digitais

Programa.ASM PIC
Montador Programa.HEX Programador 16F628A

Editor
Processo de comunicao entre
o homem e o microcontrolador.
Problema

Homem

l Editor = MPLAB IDE ( programa fonte / ASM ).


l Montador = Assembler ( programa objeto / HEX ).
l Programador = programa em linguagem de mquina: 0 e 1 .

43
Anlise de Sistemas Digitais

10.2. Elementos bsicos da Linguagem Assembly

A Linguagem Assembly a mais poderosa de todas as linguagens, pois ela propicia o acesso e o controle de
todo o hardware. Isso significa que o programador precisa conhecer o hardware para a qual o programa est sendo
escrito.
Sendo o Assembly uma linguagem de baixo nvel, importante que o programador conhea o hardware para
o qual o programa est sendo escrito.

A Linguagem Assembly composta por 5 elementos bsicos:


Label
uma string utilizada para representar o incio de um bloco de instrues que executa uma tarefa definida dentro
do programa. O bloco de instrues normalmente chamado de sub-rotina. O label deve comear na coluna 1 e
pode ter um comprimento mximo de at 32 caracteres, tendo obrigatoriamente que comear com um caracter
alfanumrico ou _(underline).
muito comum o uso do label em conjunto com as instrues que provocam desvio no programa, como CALL e
GOTO. Neste caso o label substitui o endereo para onde o programa ser desviado.
Mnemnico
O PIC16F628A possui um conjunto de 35 instrues e sua representao no programa segue uma lgica, definida
por sua sintaxe. A sintaxe define a forma correta de escrever uma instruo. O mnemnico parte da sintaxe de
uma instruo e especifica qual tarefa ser executada. A parte da instruo que especifica a tarefa que ser realizada
chamada de OP CODE (cdigo de operao).
aconselhvel que todas as instrues sejam escritas com letras maisculas para evitar problemas, visto que alguns
editores fazem distino entre letras maisculas e minsculas.

44

Anlise de Sistemas Digitais

Operando
Pode ou no fazer parte da sintaxe de uma instruo. O operando pose ser um registrador, uma constante, valor
numrico ou uma varivel. Quando h mais de um operando na instruo, eles so separados por vrgula.
Assim como os OP CODEs, os operandos devem ser escritos com letras maisculas.
Comentrio
um texto colocado aps cada instruo para informar a tarefa que est sendo executada, fazendo com que o
programa fique mais legvel e fcil de entender.
Todo comentrio deve ser precedido do ; (ponto-e-vrgula), fazendo com que tudo que esteja escrito a partir do
ponto-e-vrgula, at o final da linha seja desprezado pelo montador.
O comentrio deve ser escrito com letras maisculas, sem acento ou (cedilha).
Diretrizes
Conhecidas tambm como pseudo-instrues, so comandos que no fazem parte do set de instrues do
microcontrolador, mas so reconhecidos pelo programa montador.
As diretrizes no so convertidas diretamente em linguagem de mquina. Elas so usadas para controlar o
Assembly.
As diretrizes mais utilizadas em programas escritos em Assembly so: #DEFINE, #INCLUDE, ORG, EQU,
MACRO, ENDM, CBLOCK, ENDC e END.
Ex: END - informa ao montador que o programa chegou ao final.
Sintaxe: END ; fim do programa
#DEFINE - esta diretiva substitui <nome> pela <string> sempre que ele aparecer no programa.
String pode ser um texto, uma instruo, uma constante, etc.
Sintaxe: #DEFINE LED PORTB,0
45
Anlise de Sistemas Digitais

10.3. Exemplo de um programa fonte feito no MPLAB IDE


( Somar dois Bytes )
;**************************************************************

;TITULO DO PROGRAMA ( SOMA DOIS BYTES )

SOMA_DOIS_BYTES

CLRF RESULTADO_AUTO ;ZERA RESULTADO_ALTO

MOVF NUM_A,W ;W RECEBE NUM_A

ADDWF NUM_B,W ;W RECEBE NUM_B + NUM_A

MOVWF RESULTADO_BAIXO ;RESULTADO_BAIXO RECEBE W

BTFSC STATUS,C ;HOUVE ESTOURO?

GOTO RESULT_9BITS ;SIM, DESVIA

RETURN ;NO, RETORNA

RESULT_9BITS

INCF RESULTADO_AUTO,F ;RESULTADO_ALTO RECEBE 9 BIT DA SOMA

RETURN ;RETORNA

;*******************************************************************
46

Anlise de Sistemas Digitais

10.4. MPLAB IDE


Distribudo gratuitamente pela Microchip Tecnology, o MPLAB IDE utilizado para o desenvolvimento de
programas-fonte em Assembly, que aps serem convertidos em programa objeto, so gravados no MCU ( PIC ).
O MPLAB IDE um conjunto de softwares que permite, entre outras coisas:
Criar programas em Assembly ;
Efetuar a simulao e o debug do programa ;
Gravar programas no MCU ( PIC 16F628A ).
O MPLAB IDE fornece recursos necessrios para o desenvolvimento de aplicaes em Linguagem Assembly.
Os passos para o desenvolvimento de uma aplicao so:
1 - Inicializando o MPLAB IDE ;
2 - Criando programa-fonte ;
3 - Criando projeto ;
4 - Montando projeto ;
5 - Debugando projeto ( ferramenta MPLAB SIM = simula o programa, detectando e concertando erros ) ;
6 - Gravando o programa no MCU ( Kit do PIC 16F628A ).

10.5. Inicializando o MPLAB IDE 7.50


Depois de completada a instalao, d um duplo-clique no cone do MPLAB IDE ou selecione Iniciar / Programas /
Microchip MPLAB IDE / MPLAB IDE. Aparece a seguinte tela que o ambiente em que sero montadas as
aplicaes ( programas ) que sero gravadas no MCU ( PIC 16F628A ):

47
Anlise de Sistemas Digitais

48

Anlise de Sistemas Digitais

10.6. Criando Programa-Fonte em Assembly


Crie um novo arquivo . ASM clicando em File / New. Este arquivo ser o programa-fonte do projeto e escrito em
Linguagem Assembly.
Para evitar problemas, utilize sempre letras maisculas e no use acentos, cedilhas ou caracteres especiais nos
comentrios.

49
Anlise de Sistemas Digitais

10.7. Salvando Arquivo-Fonte


Para facilitar as coisas, crie uma pasta e salve nela o arquivo-fonte. Mas, quando for criar o projeto, no se esquea
de salv-lo no mesma pasta para que tudo funcione corretamente evitando problemas futuros.
Ao clicar em File / Save as, aparece a seguinte janela:

Depois que o programa-fonte estiver salvo, o texto ser mostrado em cores que identificam os OP CODEs, os
operandos e os comentrios, facilitando a visualizao do cdigo-fonte.
50

Anlise de Sistemas Digitais

10.8. Criando Projeto


Criado o programa .ASM, denominado de programa fonte, preciso criar um projeto e associar o programa-fonte a
ele. A ferramenta o Project Wizard.
Clique em Project / Project Wizard , aparece a seguinte janela:

Clique no boto Avanar para continuar o processo de criao de um projeto.

51
Anlise de Sistemas Digitais

Na janela exibida, escolha o modelo de microcontrolador que voc usar no seu projeto. Abrindo a lista, voc ver
todos os modelos de microcontroladores suportados pela verso do MPLAB IDE. Em nosso caso, o MCU o
PIC 16F628A. Clique no boto Avanar para prosseguir.

52

Anlise de Sistemas Digitais

Nesta tela, na caixa Active Toolsuite, selecione a ferramenta Microchip MPLAB Toolsuite.
Na caixa Toolsuite Contents, selecione a opo MPLAB Assembler (mpaswin.exe).
Na opo Location, deve aparecer o caminho completo no qual se encontra o arquivo mpaswin.exe.
Clique no boto avanar para prosseguir.

53
Anlise de Sistemas Digitais

Nesta tela, na caixa Project Name, digite o nome do projeto ( Teste do PIC ) e escolha o diretrio ( pasta ) em que
ele ser salvo. No se esquea de que o projeto deve ser gravado no mesmo diretrio em que foi salvo o arquivo
.ASM, criado anteriormente.
O projeto salvo com a extenso .MCP.
Clique no boto avanar para prosseguir.

54

Anlise de Sistemas Digitais

Nesta tela, voc pode adicionar ao projeto um arquivo .ASM, bastando para isto, selecionar o arquivo na janela da
esquerda e clicar no boto Add. O arquivo aparece na janela da direita.
Clique no boto avanar para prosseguir.

55
Anlise de Sistemas Digitais

A janela apresentada a ltima exibida no processo de criao de um projeto utilizando o Project Winzard.
Nela so mostrados os parmetros do projeto. Verifique se o projeto est configurado corretamente e clique
no boto Concluir ( Finish ) para concluir a operao.
A janela da rea de trabalho do projeto aparece conforme a tela direita.

56

Anlise de Sistemas Digitais

10.9. Montando o Projeto


Com o programa-fonte em Assembly pronto e o projeto criado, podemos montar o projeto, ou seja, gerar o
programa objeto a partir do programa-fonte.
O programa objeto um arquivo com extenso .HEX que contm o programa que ser gravado no MCU (PIC).
Para montar um projeto, selecione Project / Build All. Se o projeto for montado corretamente,
Aparece a janela abaixo com o texto BUILD SUCCEEDED seguido da data / hora.
Se aparecer a mensagem BUILD FAILED porque ocorreu algum problema e o projeto no foi montado.
Resolva os problemas e monte-o novamente. Problemas que podem surgir: erro de sintaxe no programa,
erro de configurao ( modelo do microcontrolador ), entre outros.

57
Anlise de Sistemas Digitais

10.10. Adicionando Arquivo-Fonte ao Projeto


Se voc no adicionar ao projeto um arquivo .ASM durante a criao, a rea de trabalho do projeto aparece
conforme a tela esquerda abaixo:
Ao clicar com o boto direito do mouse na pasta Source Files, aparece um menu suspenso com a opo Add Files.
Clique nesta opo e selecione o arquivo que ser adicionado ao projeto.
Pode-se tambm adicionar arquivo .ASM com o menu Project / Add Files to Project.
A tela direita abaixo mostra o arquivo dentro da pasta Source Files.
10.11. Removendo Arquivo-Fonte do Projeto
Para remover um arquivo-fonte do projeto, clique com o boto direito do mouse no arquivo.ASM e selecione a
opo Remove ou clique no menu Project / Remove File From Project.
Dando dois cliques no arquivo-fonte (ASM) dentro da pasta Source Files, o arquivo aberto.

58

Anlise de Sistemas Digitais

11. CRIANDO PROGRAMA EM ASSEMBLY


O MPLAB IDE apresentou um modelo de estruturao para o desenvolvimento de programas
em Linguagem Assembly.
Os passos para a construo do programa, de acordo com a estruturao proposta, so :

1 passo Ttulo, nome do projetista, data de concluso e verso do programa ;


2 passo Arquivos include ;
3 passo Paginao de memria ;
4 passo Criar variveis ;
5 passo Identificar flags utilizados no sistema ;
6 passo Criar constantes ;
7 passo Identificar os pinos que so usados como entrada e como sada ;
8 passo Vetor reset ;
9 passo Vetor de interrupo e rotinas de interrupo ;
10 passo Configurao dos registradores com finalidades especficas ;
11 passo Inicializao das variveis ;
12 passo Rotina principal ;
13 passo Sub-rotinas.
59
Anlise de Sistemas Digitais

11.1. 1 Passo: Ttulo, nome do projetista, data de concluso e verso do programa

Primeiramente devemos identificar o programa com dados sobre o ttulo, nome do projetista, verso do programa e
data de concluso.
Essas informaes so fundamentais para o programador, para futuras alteraes no programa.
Todas essas informaes so comentrios e devem ser precedidas de ponto-e-vrgula, sem acentos ou cedilhas.
Exemplo:
;******************************************************************************************
; NOME DO PROGRAMA
; DESENVOLVIDO POR FULANO DE TAL
; VERSAO 1.0
; DATA 03/09/2007
;******************************************************************************************

11.2. 2 Passo: Arquivo Include

Cada microcontrolador da famlia PIC tem um arquivo de texto chamado arquivo de definies, no qual so
definidos os nomes e os endereos de todos os SFRs, alm de uma srie de outras definies necessrias para a sua
utilizao, facilitando, deste modo, a montagem do programa-fonte. Este arquivo tem a extenso .INC e deve estar
na mesma pasta do arquivo-fonte e tambm, localizado, de preferncia, no mesmo diretrio de instalao do
MPLAB IDE. Quando o MPLAB IDE instalado, os arquivos de definio de todos os modelos de MCU da
famlia PIC so copiados para o diretrio de instalao.
Exemplo:
;******************************************************************************************
#INCLUDE<P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A
;******************************************************************************************
60

Anlise de Sistemas Digitais

11.3. 3 Passo: Paginao de memria

Vamos usar aqui a diretiva #DEFINE para criar um atalho de acesso aos bancos 0 e 1 de memria
RAM do PIC16F628A, para acesso direto memria.

Exemplo:
;*******************************************************************************************
;
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO O DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA
;
;*******************************************************************************************

Toda vez que aparecer no programa o nome BANK0, a instruo BCF STATUS,RP0 ser executada,
fazendo o chaveamento para o banco 0 de memria. O mesmo serve para a string BANK1, que faz o
chaveamento para o banco 1. O que a diretiva #DEFINE est fazendo, neste caso, associar uma
instruo a uma string.

61
Anlise de Sistemas Digitais

O cdigo anterior s pode ser empregado nos bancos de memria 0 e 1. Para ter acesso aos quatro
bancos de memria do PIC16F628A, aconselhvel o uso das diretrizes MACRO e ENDM, usadas
para que um bloco de instrues seja executado quando a string associada a essas diretivas for
encontrada no programa-fonte.
O cdigo seguinte mostra como ativar um dos bancos de memria por meio de MACROS, quando o
acesso memria for feito pelo endereamento direto. Quando o label que precede o termo MACRO
for encontrado ao longo do programa, o bloco de instrues entre as diretivas MACRO e ENDM
ser executado.

;*******************************************************************************************
; PAGINACAO DA MEMORIA
;*******************************************************************************************
;
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA PARA ENDERECAMENTO DIRETO
BANK0 MACRO ;MACRO PARA SELECIONAR BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK0
BANK1 MACRO ;MACRO PARA SELECIONAR BANCO 1
BSF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK1
BANK2 MACRO ;MACRO PARA SELECIONAR BANCO 2
BCF STATUS,RP0
BSF STATUS,RP1
ENDM ;FIM DA MACRO BANK2
BANK3 MACRO ;MACRO PARA SELECIONAR BANCO 3
BSF STATUS,RP0
BSF STATUS,RP1
ENDM ;FIM DA MACRO BANK3
;
;*******************************************************************************************
62

Anlise de Sistemas Digitais

11.4. 4 Passo: Criar Variveis


Os dados manipulados pelo programa so armazenados em localidades de memria RAM. Para facilitar, os
endereos de tais localidades de memria so associados, cada um, a uma string, denominadas VARIVEIS.
As diretrizes mais usadas para este fim so CBLOCK, ENDC e EQU.
A seguir vemos um bloco de variveis criado por meio da diretiva CBLOCK, a partir do endereo 0x20, onde o
registrador W_TEMP ocupa o endereo 0x20, 0 registrador STATUS_TEMP o endereo 0x21 e assim
sucessivamente. O bloco de variveis criado com essa diretiva termina sempre com a diretiva ENDC.
Exemplo:
;******************************************************************************************
CBLOCK 0X20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO
W_TEMP ;REGs TEMPORARIOS
STATUS_TEMP
CONTADOR
FILTRO1
FLAGS
TEMP1
ENDC ;FIM DO BLOCO DE MEMORIA
;******************************************************************************************
Uma outra maneira de criar variveis na memria RAM utilizando a diretiva EQU. A sintaxe utilizada a seguinte:
;******************************************************************************************
W_TEMP EQU 0X20
STATUS_TEMP EQU 0X21
CONTADOR EQU 0X22
FILTRO1 EQU 0X23
FILTRO2 EQU 0X24
FLAGS EQU 0X25
TEMP1 EQU 0X26
;******************************************************************************************
Neste caso, a diretiva EQU associa um endereo de memria RAM a uma string.
Pode-se ver qual localidade de memria a varivel criada est ocupando.

63
Anlise de Sistemas Digitais

11.5. 5 Passo: Identificar flags utilizados no sistema

O Flag um bit usado para a sinalizao de um evento. A utilizao de flags para sinalizar eventos durante a
execuo do programa pode ser uma ferramenta poderosa, principalmente em aplicaes em que grande a
quantidade de eventos ocorrendo a cada instante.
A seguir vemos os bits 1 e 0 do registrador FLAGS representado, respectivamente, os status do boto e do LED.
Os demais bits ficam reservados para futuras sinalizaes.

Exemplo:
;******************************************************************************************
;
REGISTRADOR FLAGS
; BIT # |7 |6 |5 |4 |3 |2 |1 |0 |
; |X|X|X |X |X |X|X|Y | STATUS DO BOTO 1=SOLTO; 0=PRESSIONADO
; |X|X|X |X|X|X|Y|X | STATUS DO LED 1=ACESO; 0=APAGADO
; |X|X |X |X |X |Y|X|X | RESERVADO
; |X|X |X |X |Y|X|X|X | RESERVADO
; |X|X |X |Y|X |X|X|X | RESERVADO
; |X|X |Y |X |X |X|X|X | RESERVADO
; |X|Y|X |X |X |X|X|X | RESERVADO
; |Y|X |X |X |X |X|X|X | RESERVADO
;
;
;X=DEFINIDO EM OUTRO LUGAR DA TABELA
;Y=DEFINIDO COMO MOSTRADO (0/1)
;
;
;******************************************************************************************

64

Anlise de Sistemas Digitais

11.6. 6 Passo: Criar constantes

Uma constante um valor numrico que pode ser associado a uma string por meio da diretiva EQU, assim como foi
feito com as variveis.
Um valor numrico pode ser representado de vrias formas dentro do MPLAB:

Decimal - D'xx' ou .xx onde x = valor


Hexadecimal - H'xx' ou 0Xxx
Octal - O'xx'
Binrio - B'xxxxxxxx'
ASCII - A'x' ou 'x'

Associar um valor numrico a uma string pode ser interessante quando o valor aparece vrias vezes no programa.
Neste caso, se for preciso fazer alguma alterao no valor, basta alter-lo uma nica vez na linha em que a constante
foi criada.

Exemplo:

;*****************************************************************************************
;
MIN EQU .0 ;VALOR MINIMO
MAX EQU .10 ;VALOR MAXIMO
T_FILTRO EQU .250 ;FILTRO PARA O BOTO
;
;******************************************************************************************

65
Anlise de Sistemas Digitais

11.7. 7 Passo: Identificar os pinos que so usados como entrada e como sada

muito importante registrar no programa-fonte a funo dos pinos que sero usados como entrada e como sada.
No exemplo a seguir, a diretiva #DEFINE associa o pino do PORTA onde est ligado o boto 1 string BOTAO1.
O mesmo raciocnio vale para o boto 2 e para o LED. Isso mostra a relao entre o software e o hardware.
O exemplo seguinte mostra dois pinos do PORTA utilizados como entrada (RA1 e RA2) e um pino do PORTB
utilizado como entrada (RA1 e RA2) e um pino do PORTB utilizado como sada (RB0).

Exemplo:

;******************************************************************************************
; ENTRADAS
;******************************************************************************************
;
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
;
#DEFINE BOTAO1 PORTA,1 ;0 PRESSIONADO
;1 LIBERADO
#DEFINE BOTAO2 PORTA,2 ;0 PRESSIONADO
;1 LIBERADO
;
;******************************************************************************************
; SAIDAS
*******************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO SAIDA
;
#DEFINE LED1 PORTB,0 ;0 APAGADO
;1 ACESO
;
;******************************************************************************************

66

Anlise de Sistemas Digitais

11.8. 8 Passo: Vetor Reset

O vetor de reset do PIC16F628A o endereo 0x00. aqui que comea o programa.


A diretiva ORG 0x00 informa ao programa montador ( o MSPASM ) que a instruo GOTO INICIO deve ser
gravada na localidade 0x00 da memria de programa, como mostrado a seguir. Isso o que chamamos de ponteiro,
o que faz com que ocorra um desvio no programa para o label INICIO, no qual realmente comea o programa.

Exemplo:

;******************************************************************************************
;
ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTO
GOTO INICIO ;DESVIA PARA INICIO
;
;******************************************************************************************

11.9. 9 Passo: Vetor de Interrupo e Rotinas de Interrupo

O PIC16F628A capaz de tratar vrios tipos de interrupo. Interrupo um evento de hardware que, quando
ocorre, provoca um desvio no programa para o endereo 0x04, no qual a interrupo ser tratada se ela estiver
habilitada. Ao encontrar a instruo RETIFIE, o programa volta ao ponto em que ocorreu o desvio.

Exemplo:
;******************************************************************************************
ORG 0x04 ;ENDERECO INICIAL DA INTERRUPCAO
RETIFIE ;RETORNA DA INTERRUPCAO
;******************************************************************************************

67
Anlise de Sistemas Digitais

11.10. 10 Passo: Configurao dos registradores com finalidades especficas

O programa comea realmente nesse ponto. Aqui feita a configurao dos SFRs utilizados pelo programa.
Vemos a seguir um exemplo de configurao de alguns SFRs:

Exemplo:

;******************************************************************************************
INICIO
BANK1 ;ALTERA PARA BANK 1
MOVLW B00000110
MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA E DEMAIS COMO SAIDA
MOVLW B00000000
MOVWF TRISB ;DEFINE O PORTB COMO SAIDA
MOVLW B10000000
MOVWF OPTION_REG ;PULL_UPS DESABILITADOS <7>
;DEMAIS BITS IRRELEVANTES
MOVLW B00000000 ;DESLIGADA CHAVE GERAL DE IN TERRUPCAO <7>
MOVWF INTCON ;DEMAIS BITS IRRELEVANTES
BANK0
MOVLW B00000111 ;CONFIGURA RA3:RA0 COMO I/O <2:0>
MOVWF CMCON

;******************************************************************************************

68

Anlise de Sistemas Digitais

11.11. 11 Passo: Inicializao das Varivies

Inicializar as variveis com os valores corretos evita que o programa se comporte de maneira diferente da desejada.
No se esquea jamais de inicializar as variveis em seus programas.

Exemplo:
;******************************************************************************************
CLRF PORTA ;LIMPA PORTA
CLRF PORTB ;LIMPA PORTB
MOVLW .250
MOVWF TEMP5 ;INICIALIZA TEMP5 COM 250
MOVLW .256-125 ;W RECEBE 131 (256-125)
MOVWF TMR0 ;INICIALIZA TMR0 COM 131
;******************************************************************************************

11.12. 12 Passo: Rotina Principal

Inicializadas as variveis do programa, voc pode mostrar a sua rotina principal.

11.13. 13 Passo: Sub-rotinas

Uma sub-rotina um conjunto de instrues que executa uma tarefa especfica dentro do programa.
Uma sub-rotina bem elaborada pode ser aproveitada por outros programas.

69
Anlise de Sistemas Digitais

11.14. Fluxograma
O fluxograma uma arma poderosa que pode auxiliar o programador na modelagem do programa.
Ele mostra como o programa est estruturado, facilitando a montagem das sub-rotinas.
As convenes utilizadas no fluxograma so:
O fluxograma abaixo informa: enquanto o boto estiver
Incio e Fim pressionado, o LED ficar aceso; enquanto o boto estiver solto, o
LED ficar apagado. Com o fluxograma pronto basta convert-lo
na Linguagem Assembly, substituindo cada bloco por uma ou
mais instrues, ou at mesmo por sub-rotina .
Sub-rotina
Incio

Deciso Testa boto

Boto
Apaga LED Press ?
Acesso a um No
dispositivo de I/O
Sim

Acende LED 70
Anlise de Sistemas Digitais

12. COMO SIMULAR E DEBUGAR UMA APLICAO

12.1. Introduo

Se o programa foi editado e montado corretamente, preciso debug-lo para se certificar


de que esteja funcionando . Um programa editado e montado sem erros no garante isso,
pois alm dos erros de sintaxe, tambm podem existir erros de lgica, que so muito mais
difceis de encontrar, porque o montador no os detecta.

O MPLAB IDE possui uma ferramenta chamada MPLAB SIM, que permite simular o
programa, detectando e consertando erros, alm de possibilitar aperfeioar o cdigo-fonte,
eliminar redundncias, aprimorar a lgica implementada, testar a melhor sub-rotina para
resolver um determinado problema por meio da programao, etc.

Na simulao, o programa ser executado dentro do MPLAB IDE como se estivesse


sendo executado dentro do MCU ( PIC16F628A ). Infelizmente a simulao no permite
testar todos os recursos do PIC16F628A, mas nem por isso o MPLAB SIM deixa de ser
uma poderosa ferramenta no desenvolvimento de uma aplicao. Clicando no menu Help /
Topics / MPLAB SIM / Limitations, voc encontra informaes sobre todas as limitaes
do simulador do MPLAB IDE.

71

Anlise de Sistemas Digitais

12.2. Preparar o Sistema para a Simulao


Antes de comear a simulao de uma aplicao, preciso verificar se o MCU foi configurado
corretamente, o que pode ser feito no menu Configure / Select Device.
Tambm temos de informar ao simulador as opes dos bits de configurao e a frequncia de clock
para a qual o programa foi escrito.

Antes de ativar o MPLAB SIM, deve-se abrir o projeto feito, caso este no esteja aberto. Basta clicar
no menu Project / Open / Nome do arquivo.mcp e clicar em Abrir. Na pasta Source Files deve estar
o Arquivo.asm criado no MPLAB. D 2 cliques neste arquivo para abri-lo.

O MPLAB SIM ativado quando clicamos no menu Debbugger / Select Tool / MPLAB SIM.
Feito isso, na barra de tarefas aparecem ativados os botes mostrados abaixo:
As opes da barra de tarefas do MPLAB SIM da esquerda
para a direita so:

Run = executa o programa ( F9) ;


Halt = pra a execuo do programa ( F5 ) ;
Animate = executa o programa no modo animao e mostra a linha que o programa est
executando no momento ;
Step Into = executa o programa passo a passo, ou seja, uma instruo de cada vez ( F7 ) ;
Step Over = executa de uma s vez todas as instrues da sub-rotina chamada pela instruo
CALL ( F8 ) ;
Step Out = sai da sub-rotina e retorna ao ponto em que ela foi chamada ;
Reset = ( F6 ).
72
Anlise de Sistemas Digitais

73

Anlise de Sistemas Digitais

Como nem todos os perifricos do PIC16F628A podem ser simulados, pode ser necessrio um
Como nem todos os perifricos do PIC16F628A podem ser simulados, pode ser necessrio
hardware para testar
um hardware todos
para os recursos
testar de uma determinada
todos os recursos aplicao.aplicao.
de uma determinada
A sua principal
principal vantagem justamente permitir executaro oprograma
vantagem justamente permitir executar programa dede
dentro dodo
dentro MPLAB IDEIDE e
MPLAB
e eliminar os defeitos sem precisar gravar aquele
eliminar os defeitos sem precisar gravar aquele no MCU. no MCU.
O simulador no descarta o uso de um hardware de teste, mas nos poupa tempo, visto que a
gravao do programa no chip pode ser efetuada depois de o programa ter sido montado, simulado e os
defeitos corrigidos.

12.3. Breakpoint Pra a Execuo em um Ponto do Programa


Esse recurso til quando ns desejamos testar apenas uma parte do programa. O Breakpoint
pode ser inserido em uma ou em mais linhas do cdigo. Seu funcionamento simples, o cdigo ser
executado at o ponto em que for encontrado o breakpoint.

Para inserir o breakpoint numa determinada linha do programa, clique com o boto direito do
mouse na linha, isso far com que aparea um menu suspenso, bastando selecionar o item
Set Breakpoint. Quando o breakpoint est ativado, aparece no canto esquerdo da linha um crculo
vermelho com a letra B no centro.

Uma vez nem


Como ativado,
todoso os
breakpoint pode
perifricos ser removidopodem
do PIC16F628A ou desabilitado, bastando
ser simulados, clicar com o boto
pode ser
necessrio um hardware para testar todos os recursos de uma determinada aplicao.
direito do mouse na linha e escolher a opo desejada. Quando o Breakpoint est desabilitado, o crculo
vermelhoA com a letra Bvantagem
sua principal no centro justamente
substitudopermitir
por umexecutar
crculo vermelho vazio.
o programa Isso serve
de dentro do para lembrar
MPLAB
ao usurio IDE eum
que existe eliminar os defeitos
breakpoint sem precisar
desabilitado naquelegravar
ponto.aquele no MCU.
74
Anlise de Sistemas Digitais

Clicando no menu Debbuger / Breakpoints ( tecla F2 ), aparece a janela seguinte, na qual


podem ser vistos todos os breakpoints inseridos no cdigo, podendo cada um ser habilitado,
desabilitado ou removido.

75

Anlise de Sistemas Digitais

12.4. Run to Cursor ( Executar at Aqui )

Esse comando acessado quando clicamos com o boto direito do mouse na linha em que ele
ser executado.

12.5. Set PC at Cursor


Da mesma forma que os comandos Brealpoint e Run To Cursor, esse comando acessado
quando clicamos com o boto direito do mouse na linha em que ele ser executado, bastando clicar no
item Set PC at Cursor.

Nenhuma instruo ser executada; o comandoapenas far com que o PC ( Contador de programa
) seja alterado para o endereo da memria de programa em que se encontra a instruo contida na
linha, ou seja, o PC aponta para a linha na qual o comando foi executado.

76
Anlise de Sistemas Digitais

12.6. Stopwatch
O Stopwatch um relgio que mantm o controle do tempo de execuo do programa, em funo
da frequncia de clock configurada para a aplicao que est sendo simulada. Para acessar o
Stopwatch, clique no menu Debugger / Stopwatch que aparecer a janela mostrada abaixo.

Ns podemos medir tambm o tempo de execuo e a quantidade de ciclos de instruo gastos na


execuo de uma determinada sub-rotina, como, por exemplo, em uma sub-rotina de delay ( contagem
de tempo ). Para fazer isso, execute o programa at o ponto a partir do qual se deseja medir o tempo e
pressione o boto Zero. Seguindo a execuo do programa, ns podemos contar o tempo e o nmero
de ciclos de instruo a partir daquele ponto at o final da sub-rotina. Essa contagem pode ser vista na
coluna Stopwatch. Pressionando o boto Synch, ns sincronizamos novamente a coluna Stopwatch
com a coluna Total Simulated. Se o item Clear Simulation Time On Reset for selecionado, os
contadores do Stopwatch sero zerados, sempre que ocorrer um reset.
77

Anlise de Sistemas Digitais

12.7. Clear Memory ( Apagar Memria )


O MPLAB SIM possui um comando que permite apagar os contedos da memria de programa,
dos registradores de uso geral (GPRs), dos bits de configurao, da EEPROM e dos registradores com
finalidades especficas (SRFs). Para acessar esse comando, clique no menu Debugger/Clear Memory
e selecione o item que voc deseja apagar. Dificilmente voc precisar utilizar esse comando numa
simulao, mas, se for preciso us-lo, tome cuidado com os efitos colaterais que ele pode causar no
restante do programa. Efeito colateral um problema que pode aparecer em algum outro ponto do
programa, devido ao fato de uma dessas memrias ter sido apagada.

12.8. Arquivo de Listagem


Quando um programa montado corretamente pelo MPLAB IDE, vrios arquivos so criados
juntamente com o arquivo objeto .HEX. Dentre eles podemos destacar o arquivo .LST, comumente
chamado de arquivo de listagem. Alm do cdigo-fonte, ele traz algumas informaes importantes,
como o endereo de cada localidade de memria de programa ocupada e seus respectivos contedos,
mapa da memria de programa ocupada e livre, relatrio com a quantidade de erros, avisos e
mensagens geradas na hora da montagem, etc.

O arquivo .LST ajuda o programador a debugar o programa, sendo aconselhvel sempre dar uma
olhada nele aps a montagem do cdigo-fonte. Para abrir o arquivo .LST de um programa .ASM, clique
no menu File / Open e, no item Arquivos do tipo: , selecione a opo List Files (.Lst). O arquivo de
listagem tem o mesmo nome do arquivo .ASM, s que tem extenso .LST.

78
Anlise de Sistemas Digitais

12.9. Visualizar e Alterar o Contedo da Memria


Outra ferramenta extremamente til ao programador na hora de debugar uma aplicao a
possibilidade de visualizar as memrias de programa, memria RAM, EEPROM, assim como alterar
seus contedos durante a execuo do programa pelo MPLAB SIM.

12.9.1. Memria RAM ( GRPs e SFRs )

Clicando no menu View / File Registers, aparece a janela abaixo, na qual so exibidos todos os
endereos da memria RAM e seus respectivos contedos. Cada linha possui 16 endereos, no sendo
feita distino entre os registradores de uso geral (GRFs) e os registradores com finalidades especficas
(SFRs). Durante a execuo do programa pelo MPLAB SIM, se dermos um duplo-clique em qualquer
endereo, poderemos alterar o seu contedo. Este um recurso poderoso e deve ser usado sempre que
for necessrio. No se esquea, porm, de que alguns bits de alguns registradores esto disponveis
apenas para leitura, no tendo o programador acesso a eles para escrita.

79

Anlise de Sistemas Digitais

12.9.2. Memria de Programa

Para visualizar a memria de programa, preciso clicar no menu View / Program Memory. A
figura abaixo mostra parte do cdigo-fonte de um programa. Observe que so mostrados a linha do
programa em que a instruo est localizada, o endereo da memria de programa, o cdigo em
hexadecimal correspondente instruo e, finalmente, a sintaxe da instruo. Clicando na barra de
rolagem para cima e para baixo, ns podemos visualizar todo o cdigo-fonte.

80
Anlise de Sistemas Digitais

12.9.3. Memria EEPROM


A memria EEPROM pode ser visualizada quando clicamos no menu View / EEPROM, como na figura abaixo. Cada linha
possui 16 endereos e so mostrados os seus respectivos contedos. Dando um duplo-clique com o mouse em um endereo
especfico, voc pode alterar o seu contedo.

12.9.4. Registradores com Finalidades Especficas ( SFRs )


Estes so, sem dvida, os registradores mais visualizados durante a simulao de uma aplicao. Os SFRs so visualizados
quando clicamos no menu View / Special Funstion Registers. Na janela exibida na figura abaixo, podem ser visualizados todos os
registradores com finalidades especficas e seus respectivos contedos, podendo ser alterados caso haja necessidade. Observe que
os contedos so exibidos no sitema hexadecimal, decimal e binrio.

81

Anlise de Sistemas Digitais

12.10. Watch
Esse comando permite selecionar um SFR ou um GPR para visualizao, evitando que tenhamos
de abrir vrias janelas para visualizar os registradores desejados. Para ter acesso ao comando Watch,
clique no menu View / Watch. O boto Add SFR permite adicionar um SFR e o boto Add Symbol
permite adicionar um smbolo que foi declarado no programa, como constantes, variveis, bits de
sinalizao, etc. Observe na parte inferior da janela Watch abaixo que ela composta por quatro
pginas, s quais podem ser adicionados SFRs e GPRs diferentes, facilitando ainda mais a visualizao.

82
Anlise de Sistemas Digitais

12.11. Hardware Stack


J vimos que o PIC16F628A possui uma pilha que permite efetuar at oito chamadas a sub-rotinas
aninhadas ( chamar uma sub-rotina de dentro de outra sub-rotina ). Quando uma sub-rotina chamada por
meio da instruo CALL, o programa desviado para o endereo contido no operando da instruo e o
endereo de retorno armazenado na pilha. Quando a instruo RETURN ou a instruo RETLW encontrada,
o endereo de retorno retirado da pilha e o programa volta ao ponto em que houve uma chamada sub-rotina.
O comando Hardware Stack permite visualizar at que nvel da pilha est sendo utilizado no momento.
Esse comando acessado quando clicamos no menu View / Hardware Stack.
A janela exibida mostra os vrios nveis da pilha, assim como os respectivos endereos de retorno.
importante termos uma noo exata sobre o nvel utilizado da pilha porque, se forem ultrapassados os oito
nveis, o primeiro endereo ser sobrescrito, perdendo-se o endereo de retorno primeira chamada sub-
rotina. Isso provoca um erro grave no programa, portanto no se esquea.

83

Anlise de Sistemas Digitais

12.12. Disassembly Listing


Esse comando mostra informaes parecidas com aquelas exibidas pelo arquivo de listagem
(.LST). Podemos dizer que um arquivo de listagem simplificado, visto que nem todas as informaes
mostradas em um arquivo de listagem so exibidas por ele. De qualquer forma, interessante execut-lo
e verificar tanto o seu contedo quanto as diferenas em relao ao arquivo de listagem.

Esse comando acessado quando clicamos no menu View / Disassembly Listing.

84
Anlise de Sistemas Digitais

13. TCNICAS DE PROGRAMAO


Nesta unidade sero apresentadas algumas tcnicas utilizadas na programao em Assembly. Sero
desenvolvidos alguns programas, com o objetivo de criar uma biblioteca de sub-rotinas, que podero
ser utilizadas como partes de outros programas a serem implementados em outras ocasies.

13.1. Inicializao de Variveis


Uma varivel uma localidade da memria RAM (memria de dados), com capacidade de
armazenamento de 8 bits, que reservada pelo para armazenamento de dados temporrios. A definio
da localidade da memria de dados que ser ocupada por uma determinada varivel pode ser feita
utilizando a diretiva EQU ou a combinao das diretivas CBLOCK e ENDC.
necessrio inicializar as variveis criadas antes de serem manipuladas pelo programa, para
que no ocorram problemas devido a valores incorretos armazenados em tais variveis (qual o valor
armazenado em uma determinada localidade da memria de dados quando o MCU ligado?). Em outras
palavras necessrio atribuir um valor conhecido para cada varivel criada no programa, o que pode
ser feito da seguinte forma:

;*****************************************************************************************
MOVLW H2A ;W=2Ah
MOVWF VARIAVEL ;VARIAVEL=2Ah
;*****************************************************************************************

Caso seja desejado inicializar uma determinada varivel com o


valor 00h, pode-se utilizar a instruo CLRF:
;*****************************************************************************************
CLRF VARIAVEL ;VARIAVEL=00h 85
;*****************************************************************************************
Anlise de Sistemas Digitais

13.2. Desvio no Programa


As instrues contidas em um programa so executadas, normalmente, na seqncia em que so
listadas no MPLAB (que a mesma seqncia que so gravadas na memria de programa). Entretanto,
a seqncia da execuo do programa pode ser alterada quando uma instruo de desvio ou de
chamada utilizada (ou ainda quando ocorre um reset ou uma interrupo). Existem, basicamente, dois
tipos de desvio no programa:
DESVIO INCONDICIONAL: provocado pelas instrues GOTO e CALL;
DESVIO CONDICIONAL: provocado pelas instrues BTFSC, BTFSS, INCFSZ e DEFSZ.

13.2.1. GOTO
Desvia o programa para o endereo (ou label) especificado no operando da instruo.

Desviando o programa para um endereo especfico da memria de programa.


;************************************************************************************************************************************
GOTO 0X22 ;DESVIA O PROGRAMA PARA O END. 22H DA MEM. DE PROGRAMA.
;************************************************************************************************************************************
Desviando o programa para uma sub-rotina.
;*****************************************************************************************************************************
GOTO LOOP ;DESVIA O PROGRAMA PARA A SUB-ROTINA LOOP
;*****************************************************************************************************************************

Desviando o programa algumas linhas para baixo ou para cima.


;*****************************************************************************************************************************
GOTO $+2 ;SALTA 2 LINHAS DE CODIGO PARA BAIXO
GOTO $-3 ;SALTA 2 LINHAS DE CODIGO PARA CIMA 86
;*****************************************************************************************************************************
Anlise de Sistemas Digitais

MEMRIA DE PROGRAMA

87

Anlise de Sistemas Digitais

13.2.2. CALL (chamada a sub-rotina) MEMRIA DE PROGRAMA


Desvia o programa para o label especificado no operando da
instruo e retorna ao ponto que foi feita a chamada a sub-
rotina quando for encontrada a instruo RETURN (ou a
instruo RETLW).

;************************************************************************
CALL LOOP ;DESVIA O PROGRAMA
;PARA A SUB-ROTINA LOOP
;************************************************************************

;************************************************************************
LOOP
INSTRUCAO N
INSTRUCAO N+1
INSTRUCAO N+2
RETURN ;RETORNA DA SUB-ROTINA
;************************************************************************

Caso seja desejado retornar da sub-rotina com um certo


valor armazenado no registrador W, pode-se utilizar a
instruo RETLW:
;**********************************************************************************
RETLW .25 ;RETORNA DA SUB-ROTINA COM W=25
88
;**********************************************************************************
Anlise de Sistemas Digitais

13.2.3. BTFSC e BTFSS (desvio condicional)

Provocam um desvio que pode ou no ocorrer. Uma determinada


condio deve ser satisfeita para que ocorra o desvio no programa.

Instruo BTFSS

;*****************************************************************************
BTFSS REGISTRADOR,BIT ;BIT=1? SE SIM, PULA A
;PROXIMA LINHA
GOTO ACAO_NAO ;BIT=0 => VAI PARA A
;SUB-ROTINA ACAO_NAO
GOTO ACAO_SIM ;BIT=1 => VAI PARA A SUB-
;ROTINA ACAO_SIM
;********************************************************************************

Uma estrutura de desvio condicional baseada na instruo BTFSC pode ser facilmente criada por
analogia estrutura acima.

89

Anlise de Sistemas Digitais

13.2.4. INCFSZ e DECFSZ (desvio condicional)

Provocam um desvio que pode ou no ocorrer. Uma determinada condio deve


ser satisfeita para que ocorra o desvio no programa.

Instruo DECFSZ

;******************************************************************************************************
CONTADOR
MOVLW .10 ;W=10
MOVWF CONT ;CONT=W=10

LOOP
DECFSZ CONT,1 ;CONT=CONT-1 E VERIFICA: CONT=0?
GOTO LOOP ;NAO => VOLTA PARA LOOP
GOTO FIM_CONT ;SIM (CONT=0) => VAI PARA SUB-ROTINA
;ASSOCIADA AO FINAL DA CONTAGEM
;******************************************************************************************************

Uma estrutura de desvio condicional baseada na instruo INCFSZ pode ser criada
por analogia estrutura acima. 90
Anlise de Sistemas Digitais

LED acionado por boto


Faa um programa que acenda um LED, conectado ao pino 6 (RB0) do PIC 16F628A, sempre que um boto
(do tipo push-button), conectado ao pino 18 (RA1) estiver pressionado (nvel lgico baixo).

91

Anlise de Sistemas Digitais

Fluxograma

Assembly (Rotina Principal MAIN)

;****************************************************************************************************
; ROTINA PRINCIPAL
;******************************************************************************************************************
MAIN

BTFSC BOTAO ;O BOTO EST PRESSIONADO?


GOTO APAGA_LED ;NO, ENTO VAI PARA APAGA_LED
GOTO ACENDE_LED ;SIM, ENTO VAI PARA ACENDE_LED

APAGA_LED
BCF LED ;APAGA O LED
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

ACENDE_LED
BSF LED ;ACENDE O LED
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

;*****************************************************************************************************************

necessrio, antes da rotina principal, fazer a inicializao do sistema e definir as variveis utilizadas
(no caso, no existem variveis, mas sim atalhos para acessar os pinos do MCU, por meio dos 92
strings BOTAO e LED).
Anlise de Sistemas Digitais

;**********************************************************************************************************
; ENTRADAS Definio das Entradas e Sadas
;**********************************************************************************************************
; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA
; RECOMENDA-SE TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO PORTA,1 ; BOTAO CONECTADO NA PORTA<1>


; 0 -> PRESSIONADO
; 1 -> LIBERADO

;**********************************************************************************************************
; SAIDAS
;**********************************************************************************************************
; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA
; RECOMENDA-SE TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)
Inicializao do Sistema
#DEFINE LED PORTB,0 ; LED CONECTADO NA PORTB<0>
; 0 -> APAGADO
; 1 -> ACESO

*************************************************************************************************************************************************************
; INICIALIZACAO DO SISTEMA (INICIO DO PROGRAMA)
;************************************************************************************************************************************************************

INICIO
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000010'
MOVWF TRISA ;DEFINE RA1 COMO ENTRADA E DEMAIS COMO SADAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODA A PORTB COMO SADA
MOVLW B'10000000'
MOVWF OPTION_REG ;PULL-UPS DESABILITADOS
MOVLW B'00000000'
MOVWF INTCON ;DESABILITA TODAS AS INTERRUPCOES
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111' 93
MOVWF CMCON ; CONFIGURA OS BITS RA3:RA0 COMO I/O

Anlise de Sistemas Digitais

PROGRAMA COMPLETO
Exercicio_LED_botao.
Exercicio_LED_botao.asm

94
Anlise de Sistemas Digitais

Kit Didtico
Placa de desenvolvimento
Labtools MCLAB1
e gravador
Labtools MCFLASH

95

Anlise de Sistemas Digitais

...Gravando o programa no PIC16F628A (com o gravador MCFLASH)

1. Na janela do MPLAB, selecione o gravador a ser utilizado (PICSTART Plus) no menu


PROGRAMMER>Select Programmer;
2. Selecione a porta de comunicao correta (COM1, COM2,...) na aba Communications no
menu PROGRAMMER>Settings...;
3. Habilite o gravador atravs do menu PROGRAMMER>Enable Programmer. O MPLAB ir
comunicar com o gravador e o resumo da comunicao ser exibido na aba PICSTART da
janela Output.
4. Faa o ajuste dos bits de configurao do PIC (registrador CONFIG), por meio do menu
CONFIGURE>Configuration Bits...:

RC: RC externo
INTOSC: Oscilador interno
EC: Osc. ext. (RA6 = I/O)
HS: Cristal (at 20 MHz)
XT: Cristal (at 4 MHz)
LP: Cristal (at 200 kHz)

5. Finalmente, faa a gravao do programa .hex associado ao projeto aberto no PIC


(programao do chip), por meio do menu PROGRAMMER>Program.

Caso a placa onde est o microcontrolador esteja alimentada (5 V, corrente contnua), no


alimente a placa do gravador MCFLASH.

96
Anlise de Sistemas Digitais

1. Faa a gravao do programa do exerccio LED acionado por boto e verifique seu funcionamento.
2. Inverta a lgica do LED, fazendo com que ele acenda quando o boto estiver solto e apague quando o
boto estiver pressionado.
3. Altere o programa para acender um LED vermelho enquanto o boto estiver solto e um LED verde
enquanto o boto estiver pressionado.
4. Implemente mais um conjunto de boto e LEDs (verde e vermelho), totalmente independente do
conjunto do exerccio anterior.

97

Anlise de Sistemas Digitais

13.3. Contando Tempo e Criando Delays


A contagem de tempo em sistemas microcontrolados muito utilizada e importante, sendo utilizada no
gerenciamento de eventos, determinao da freqncia de funcionamento de determinadas tarefas, etc.
A preciso da medio e da contagem de tempo est intimamente relacionada com o tipo de oscilador utilzado
para gerar o sinal de clock do MCU.
Uma das formas de medio de tempo por meio da contagem de ciclos de instruo gastos para executar uma
determinada rotina. Esta rotina utilizada, ento, para gerar um certo atraso (delay), bem definido, no
processamento do MCU, cada vez que executada. Com a utilizao loops, onde so criados contadores dentro
de outros contadores, pode-se contar qualquer intervalo de tempo, mltiplo do tempo gasto na execuo de tal
rotina de delay. A seguir mostrada uma rotina que gasta 1 ms para ser executada:
;**********************************************************************************************************************************************
DELAY_1MILI ;Rotina que dura 1milisegundo
;250*4us=1ms
MOVLW .250
MOVWF TEMP1 ;TEMP1=250
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
DL_1 ;Rotina que gasta 4 microsegundos para ser executada
;Cada loop DL_1 gasta 4 ciclos de instruo: 4*1us=4us
;(CLOCK EXTERNO DE 4Hz)
NOP
DECFSZ TEMP1,1 ;DECREMENTA O CONTADOR (TEMP1=TEMP1-1). ACABOU A CONTAGEM???
GOTO DL_1 ;NAO -> DECREMENTA MAIS UMA VEZ
RETURN ;SIM -> FINALIZA A ROTINA
;***********************************************************************************************************************************************
Nmero de ciclos gastos na execuo de cada instruo: 1 ciclo (se no provocar desvio)
NOP: 1 ciclo; GOTO: 2 ciclos; RETURN: 2 ciclos; DECFSZ:
2 ciclos (se provocar desvio)
Lembre-se que mais 6 ciclos so gastos nesta sub-rotina (2 para chamar a sub-rotina, 2 para carregar TEMP1 e 2 para sair
da sub-rotina, sendo que apenas um dos ciclos do RETURN esto sendo considerados dentro da contagem de 4s). Isto faz
com que sua durao exata seja 1,005 ms. Em casos onde maior preciso for necessria, deve-se calibrar a sub-rotina98
ou
adotar outras forma de contagem (por meio dos temporizadores TMR0, TMR1 e TMR2 ou de pulsos externos).
Anlise de Sistemas Digitais

Pisca-pisca
Faa um programa que acenda e apague o LED conectado ao pino 6 (RB0) do PIC 16F628A, em uma
freqncia determinada (aproximadamente 5 Hz).

(Fluxograma)
O cdigo fica mais enxuto
utilizando uma mscara de
inverso por meio da operao
lgica XOR:
Ex.:
Mscara de
inverso
00000001
XOR 10011001
10011000
Valor contido
na PORTB
Novo valor
da PORTB

A B Y
1) Lembrando: Operao XOR
(tabela verdade) 0 0 0
0 1 1
2) Para inverter todo o contedo
de um registrador melhor 1 0 1
usar a instruo COMF (ao
1 1 0
invs da mscara de inverso) 99

Anlise de Sistemas Digitais

Fluxograma
Assembly (Rotina Principal MAIN)
;******************************************************************************************************************
; ROTINA PRINCIPAL
;******************************************************************************************************************

MAIN
MOVLW .100
MOVWF PISCA ;METADE DO PERIODO DO PISCA-PISCA
;(DADO EM ms)

CONTADOR ;FAZ A CONTAGEM PISCA*1ms

CALL DELAY_1MILI ;GASTA 1ms


DECFSZ PISCA,1 ;PISCA=0???
GOTO CONTADOR ;NAO -> DECREMENTA PISCA
GOTO PISCA_LED ;SIM -> ACENDE OU APAGA LED

;---------------------------------------------------PISCA-PISCA------------------------------------------------------------

PISCA_LED

MOVLW LED ;MASCARA DE INVERSAO


;(LOCALIZA BIT DA PORTB REFERENTE AO LED)
;'7|6|5|4|3|2|1|0' => PARA RB0: LED=B'00000001'
XORWF PORTB,1 ;INVERTE BIT DEFINIDO PELA MASCARA DE INV.
GOTO MAIN ;RETORNA PARA MAIN
;*****************************************************************************************************************

necessrio, antes da rotina principal, fazer a inicializao do sistema e definir as variveis100


e
constantes utilizadas. A rotina DELAY_1MILI a mesma definida anteriormente (2 slides atrs).
Anlise de Sistemas Digitais

1. Modifique o programa anterior, fazendo com que os LEDs RB7 e RB5 fiquem piscando em
aproximadamente 10 Hz.
2. Faa com que todos os LEDs da PORTB fiquem piscando em aproximadamente 2 Hz.
3. Faa com que todos os LEDs da PORTB fiquem piscando em 0,5 Hz.
4. Faa com que um caractere ( sua escolha) fique piscando em um dos displays de sete segmentos.
Dica: Crie uma constante DISPLAY que ser utilizada como mscara de inverso para os bits da
PORTB, que esto conectados aos displays de sete segmentos da seguinte forma:

BIT FUNO SINTAXE DISPLAY EQU edc bafg'


(ASSEMBLY)
RB0 Segmento g
RB1 Segmento f
RB2 Segmento a
RB3 Segmento b
Seleo de display
RB4
(0: display 1; 1: display 2)
RB5 Segmento c
RB6 Segmento d
RB7 Segmento e

5. Faa com que um caractere ( sua escolha) fique piscando em um dos displays de sete segmentos
simultaneamente. 101

Anlise de Sistemas Digitais

13.4. Utilizando o PCL para Montar uma Tabela de Valores


Como j sabemos, o registrador PCL contm os 8 bits menos significativos do contador de programa (PC).
Podemos utilizar o PCL para provocar um desvio no programa e, assim, selecionar um valor dentro de uma lista
de valores. Este tipo de desvio deve ser utilizado com muita ateno, pois pode levar o programa para uma
regio desconhecida da memria de programa, fazendo com que o programa execute instrues no desejadas.
Abaixo, mostrado um exemplo de uma tabela de valores utilizada para mapear os caracteres a serem
exibidos em um display de sete segmentos.
;************************************
;******************************************************************************************************************************** ; VARIAVEIS
DISPLAY ;CONVERTE NUMERO DADO EM DISPLAY (7 SEGMENTOS) ;************************************
CBLOCK 0X20
MOVF NUMERO,0 ;MOVE DISPLAY PARA W NUMERO
ENDC
ANDLW B'00001111' ;MSCARA PARA LIMITAR O VALOR EM 15 (DE 0 a F) ;************************************
ADDWF PCL,1 ;PCL =NUMERO+PCL

;TABELA DE CONVERSO BINARIO-DISPLAY


;POSICAO DOS SEGMENTO
;(RB4 SELECIONA QUAL DISPLAY ESTA OPERANDO)
;'EDC BAFG NUMERO SIMBOLO EXIBIDO NO DISPLAY
RETLW B'11101110' ; 00 -> 0
RETLW B'00101000' ; 01 -> 1
RETLW B'11001101' ; 02 -> 2
RETLW B'01101101' ; 03 -> 3
RETLW B'00101011' ; 04 -> 4
RETLW B'01100111' ; 05 -> 5
RETLW B'11100111' ; 06 -> 6
RETLW B'00101100' ; 07 -> 7
RETLW B'11101111' ; 08 -> 8
RETLW B'01101111' ; 09 -> 9
RETLW B'10101111' ; 10 -> A
RETLW B'11100011' ; 11 -> b
RETLW B'11000110' ; 12 -> C
RETLW B'11101001' ; 13 -> d
RETLW B'11000111' ; 14 -> E
RETLW B'10000111' ; 15 -> F 102
;********************************************************************************************************************************
Anlise de Sistemas Digitais

Contador UP/DOWN Manual


Faa um contador crescente/decrescente que seja incrementado/decrementado por dois botes, conectados
na PORTA, nos bits RA2 e RA1 (respectivamente), e que exiba o valor da contagem em um dos displays de
sete segmentos da McLAB1.

(Fluxograma)

103

Anlise de Sistemas Digitais

Assembly (Rotina Principal MAIN)


;******************************************************************************************************************
; ROTINA PRINCIPAL
;******************************************************************************************************************
MAIN
BTFSC BOTAO1 ;O BOTO1 EST PRESSIONADO?
GOTO TESTA_BT2 ;NAO, ENTO TESTA BOTAO2
GOTO DECREMENTA ;SIM, ENTO VAI PARA A ROTINA QUE
;DECREMENTA O CONTADOR
TESTA_BT2
BTFSC BOTAO2 ;O BOTO2 EST PRESSIONADO?
GOTO MAIN ;NAO, ENTO TESTA BOTAO1 (VOLTA PARA MAIN)
GOTO INCREMENTA ;SIM, ENTO VAI PARA A ROTINA QUE
;INCREMENTA O CONTADOR
;********************************************************************************************************************
Fluxograma

necessrio, antes da rotina principal, fazer a inicializao do sistema e definir as variveis e


constantes utilizadas (em especial, para que a lgica proposta funcione, deve-se fazer, por exemplo,
104
NUMERO=MIN).
Anlise de Sistemas Digitais

Assembly (Rotina INCREMENTA)


;------------------------------------------------------------INCREMENTA CONTAGEM--------------------------------------------------------------------
INCREMENTA

MOVLW MAX
SUBWF NUMERO,0 ;W=MAX-NUMERO
;LEMBRANDO: "Z" => STATUS<2>
;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO ;DIF. DE ZERO
;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO IGUAL A ZERO
BTFSC STATUS,Z ;VERIFICA SE O RESULTADO DE "MAX-NUMERO" DIFERENETE DE 0
;(OU SEJA, SE Z=0)
GOTO MAIN ;NAO=>VOLTA PARA MAIN SEM INCREMENTAR O CONTADOR
;(SATURA A CONTAGEM: JA CHEGOU AO MAX.)
DECF NUMERO ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI
;SOLTO
GOTO FILTRO_BT2

FILTRO_BT2 ;FILTRO PARA ESPERAR O BOTAO2 SER SOLTO


CALL DELAY_25MILI ; AGUARDA 25 ms (ANTI-BOUNCING)
BTFSC BOTAO2 ;O BOTO2 AINDA EST PRESSIONADO?
GOTO ATUALIZA ;NAO, ENTAO VOLTA PARA MAIN
GOTO $-3 ;SIM, ENTO TESTA BOTAO2 NOVAMENTE

;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fluxograma

105

Anlise de Sistemas Digitais

Assembly (Rotina DECREMENTA)


;------------------------------------------------------------DECREMENTA CONTAGEM--------------------------------------------------------------------
DECREMENTA

MOVLW MIN
SUBWF NUMERO,0 ;W=MIN-NUMERO
;LEMBRANDO: "Z" => STATUS<2>
;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO ;DIF. DE ZERO
;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO IGUAL A ZERO
BTFSC STATUS,Z ;VERIFICA SE O RESULTADO DE "MIN-NUMERO" DIFERENETE DE 0
;(OU SEJA, SE Z=0)
GOTO MAIN ;NAO=>VOLTA PARA MAIN SEM DECREMENTAR O CONTADOR
;(SATURA A CONTAGEM: JA CHEGOU AO MIN.)
DECF NUMERO ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI
;SOLTO
GOTO FILTRO_BT1

FILTRO_BT1 ;FILTRO PARA ESPERAR O BOTAO1 SER SOLTO


CALL DELAY_25MILI ; AGUARDA 25 ms (ANTI-BOUNCING)
BTFSC BOTAO1 ;O BOTO1 AINDA EST PRESSIONADO?
GOTO ATUALIZA ;NAO, ENTAO VOLTA PARA MAIN
GOTO $-2 ;SIM, ENTO TESTA BOTAO1 NOVAMENTE

;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fluxograma

106
Anlise de Sistemas Digitais

Assembly (Rotina ATUALIZA)

;--------------------------------------------------ATUALIZA DISPLAY DE 7 SEGMENTOS------------------------------------------------------------------

ATUALIZA ;ATUALIZA O VALOR EXIBIDO NO DISPLAY


CALL DISPLAY ;SELECIONA CARACTERE A SER EXIBIDO NO DISLPAY
MOVWF PORTB ;ENVIA DADO REFERENTE AO CARACTERE A SER ACESO A PORTB
GOTO MAIN

;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fluxograma

A rotina DISPLAY a mesma definida anteriormente (slide 18), responsvel pela converso binrio-
display de sete segmentos, de acordo com as conexes existentes na placa de desenvolvimento
McLab1.
107

Anlise de Sistemas Digitais

1. Altere as rotinas INCREMENTA e DECREMENTA para que o contador seja alterado de 2 em 2


unidades.
2. Implemente um terceiro boto que habilite/desabilite o contador (ou seja, a ao dos outros botes j
existentes). Um LED (por exemplo, o conectado em RA0) pode indicar se o contador est habilitado ou
desabilitado.

108

Vous aimerez peut-être aussi